ax-common-ui-lib 1.0.1-beta.34.3 → 1.0.1-beta.34.3-testing01

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 (62) hide show
  1. package/esm2020/lib/app-list/app-list.component.mjs +30 -17
  2. package/esm2020/lib/common-dto/elements-dto.mjs +2 -1
  3. package/esm2020/lib/common-footer/common-footer.component.mjs +16 -3
  4. package/esm2020/lib/common.service.mjs +4 -3
  5. package/esm2020/lib/data-view-lib/data-view-header/data-view-header.component.mjs +2 -2
  6. package/esm2020/lib/enlighten-lib/enums/operator-text-enum.mjs +3 -3
  7. package/esm2020/lib/enlighten-lib/fields/attribute-data.mjs +2 -1
  8. package/esm2020/lib/enlighten-lib/report/graphical-report/bar-chart/bar-chart.component.mjs +2 -2
  9. package/esm2020/lib/enlighten-lib/report/graphical-report/card-chart/card-chart.component.mjs +2 -2
  10. package/esm2020/lib/enlighten-lib/report/graphical-report/graphical-report.component.mjs +1 -3
  11. package/esm2020/lib/enlighten-lib/report/graphical-report/line-chart/line-chart.component.mjs +2 -2
  12. package/esm2020/lib/enlighten-lib/report/graphical-report/pie-chart/pie-chart.component.mjs +2 -2
  13. package/esm2020/lib/enlighten-lib/report/graphical-report/text/text-chart.mjs +2 -1
  14. package/esm2020/lib/enlighten-lib/report/graphical-report/text/text.component.mjs +64 -42
  15. package/esm2020/lib/enlighten-lib/report/tabular-report/table-style.mjs +5 -1
  16. package/esm2020/lib/enlighten-lib/report/tabular-report/tabular/detail-group-view/detail-group-view.component.mjs +10 -10
  17. package/esm2020/lib/enlighten-lib/report/tabular-report/tabular/tabular.component.mjs +113 -100
  18. package/esm2020/lib/enlighten-lib/report/tabular-report/tabular-report.service.mjs +41 -24
  19. package/esm2020/lib/filters/calender-filter/calender-filter.component.mjs +3 -2
  20. package/esm2020/lib/filters/multi-select-filter/multi-select-filter.component.mjs +3 -3
  21. package/esm2020/lib/forms/page/widgets/ax-audio.mjs +2 -2
  22. package/esm2020/lib/ghost-loader/ghost-loader.component.mjs +82 -8
  23. package/esm2020/lib/sculptor/form-builder-master/canvas/widget-drop-list/widget-drop-list.component.mjs +14 -6
  24. package/esm2020/lib/sculptor-lib/widgets/audio/audio.component.mjs +6 -6
  25. package/esm2020/lib/sculptor-lib/widgets/auto-number/auto-number.component.mjs +6 -6
  26. package/esm2020/lib/sculptor-lib/widgets/barcode/barcode.component.mjs +6 -6
  27. package/esm2020/lib/sculptor-lib/widgets/child-record/child-record.component.mjs +6 -6
  28. package/esm2020/lib/sculptor-lib/widgets/counter/counter.component.mjs +6 -6
  29. package/esm2020/lib/sculptor-lib/widgets/date-time/date-time.component.mjs +6 -6
  30. package/esm2020/lib/sculptor-lib/widgets/document/document.component.mjs +6 -6
  31. package/esm2020/lib/sculptor-lib/widgets/geofence/geofence.component.mjs +6 -6
  32. package/esm2020/lib/sculptor-lib/widgets/gps/gps.component.mjs +6 -6
  33. package/esm2020/lib/sculptor-lib/widgets/group-header/group-header.component.mjs +6 -6
  34. package/esm2020/lib/sculptor-lib/widgets/language/language.component.mjs +6 -6
  35. package/esm2020/lib/sculptor-lib/widgets/link/link.component.mjs +6 -6
  36. package/esm2020/lib/sculptor-lib/widgets/qr-code/qr-code.component.mjs +6 -6
  37. package/esm2020/lib/sculptor-lib/widgets/signature/signature.component.mjs +6 -6
  38. package/esm2020/lib/sculptor-lib/widgets/static-media/static-media.component.mjs +6 -6
  39. package/esm2020/lib/sculptor-lib/widgets/stopwatch/stopwatch.component.mjs +6 -6
  40. package/esm2020/lib/sculptor-lib/widgets/subform/subform.component.mjs +6 -6
  41. package/esm2020/lib/sculptor-lib/widgets/textbox/textbox.component.mjs +20 -6
  42. package/esm2020/lib/sculptor-lib/widgets/timestamp/timestamp.component.mjs +6 -6
  43. package/esm2020/lib/sculptor-lib/widgets/toggle/toggle.component.mjs +6 -6
  44. package/esm2020/lib/sculptor-lib/widgets/unique-id/unique-id.component.mjs +6 -6
  45. package/esm2020/lib/sculptor-lib/widgets/verification/verification.component.mjs +6 -6
  46. package/esm2020/lib/sculptor-lib/widgets/video/video.component.mjs +6 -6
  47. package/fesm2015/ax-common-ui-lib.mjs +525 -326
  48. package/fesm2015/ax-common-ui-lib.mjs.map +1 -1
  49. package/fesm2020/ax-common-ui-lib.mjs +504 -326
  50. package/fesm2020/ax-common-ui-lib.mjs.map +1 -1
  51. package/lib/app-list/app-list.component.d.ts +2 -1
  52. package/lib/common-footer/common-footer.component.d.ts +7 -2
  53. package/lib/enlighten-lib/enums/operator-text-enum.d.ts +2 -2
  54. package/lib/enlighten-lib/fields/attribute-data.d.ts +1 -0
  55. package/lib/enlighten-lib/report/graphical-report/text/text-chart.d.ts +3 -0
  56. package/lib/enlighten-lib/report/graphical-report/text/text.component.d.ts +4 -1
  57. package/lib/enlighten-lib/report/tabular-report/table-style.d.ts +2 -0
  58. package/lib/enlighten-lib/report/tabular-report/tabular-report.service.d.ts +2 -12
  59. package/lib/ghost-loader/ghost-loader.component.d.ts +3 -1
  60. package/lib/sculptor/form-builder-master/canvas/widget-drop-list/widget-drop-list.component.d.ts +3 -0
  61. package/lib/sculptor-lib/widgets/textbox/textbox.component.d.ts +4 -0
  62. package/package.json +1 -1
@@ -340,6 +340,7 @@ export class AppListComponent {
340
340
  this.baseUsrl = document.baseURI;
341
341
  this.regex = /\/apps\/(\d+)\/(\w+)/;
342
342
  this.match = this.currentUrl.match(this.regex);
343
+ this.reinitializeFooter = false;
343
344
  this.data = {};
344
345
  /*
345
346
  * Subject object which helps unsubscribe all the subscribed objects in the component
@@ -599,9 +600,17 @@ export class AppListComponent {
599
600
  }
600
601
  }
601
602
  ngOnChanges(changes) {
602
- if (this.currentOrg != this.previousOrg) {
603
- this.getUserPermissions();
604
- this.previousOrg = this.currentOrg;
603
+ if (this.currentOrg !== this.previousOrg) {
604
+ this.getUserPermissions().then(() => {
605
+ this.previousOrg = this.currentOrg;
606
+ this.reinitializeFooter = true;
607
+ // Reset the trigger to prevent unintended reinitialization
608
+ setTimeout(() => {
609
+ this.reinitializeFooter = false;
610
+ });
611
+ }).catch((error) => {
612
+ console.error("Error in getUserPermissions:", error);
613
+ });
605
614
  }
606
615
  if (changes.appList && changes.appList.currentValue) {
607
616
  this.assignGradients();
@@ -999,16 +1008,20 @@ export class AppListComponent {
999
1008
  });
1000
1009
  }
1001
1010
  getUserPermissions() {
1002
- this._commonService.getUserDetail(true).subscribe((response) => {
1003
- if (response.status === 'success' && response.ud) {
1004
- this.permissions = response.ud.permissions; // Extract permissions
1005
- this.hasOrgUserAccess = this.permissions.includes('ORG_IAM'); // Check if 'ORG_IAM' is in the permissions array
1006
- // Show overlay only if 'ACCESS_WEB_PORTAL' permission is not present
1007
- this.showWebPortalAccessOverlay = !this.permissions.includes('ACCESS_WEB_PORTAL');
1008
- this.hasAppBuilderPermission = this.permissions.includes("APP_BUILDER") && this.permissions.includes("ACCESS_WEB_PORTAL");
1009
- }
1010
- }, (error) => {
1011
- console.error('Error fetching user details:', error);
1011
+ return new Promise((resolve, reject) => {
1012
+ this._commonService.getUserDetail(true).subscribe((response) => {
1013
+ if (response.status === 'success' && response.ud) {
1014
+ this.permissions = response.ud.permissions; // Extract permissions
1015
+ this.hasOrgUserAccess = this.permissions.includes('ORG_IAM'); // Check if 'ORG_IAM' is in the permissions array
1016
+ // Show overlay only if 'ACCESS_WEB_PORTAL' permission is not present
1017
+ this.showWebPortalAccessOverlay = !this.permissions.includes('ACCESS_WEB_PORTAL');
1018
+ this.hasAppBuilderPermission = this.permissions.includes("APP_BUILDER") && this.permissions.includes("ACCESS_WEB_PORTAL");
1019
+ resolve();
1020
+ }
1021
+ }, (error) => {
1022
+ console.error('Error fetching user details:', error);
1023
+ reject(error);
1024
+ });
1012
1025
  });
1013
1026
  }
1014
1027
  isRestrictedUrl() {
@@ -1026,7 +1039,7 @@ AppListComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AppListCom
1026
1039
  provide: MAT_SELECT_CONFIG,
1027
1040
  useValue: { overlayPanelClass: 'organization-list-overlay-panel' },
1028
1041
  },
1029
- ]), 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) {
1042
+ ]), i0.ɵɵNgOnChangesFeature], decls: 59, vars: 19, 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", "reinitialize"], ["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) {
1030
1043
  i0.ɵɵelementStart(0, "div", 0);
1031
1044
  i0.ɵɵelementStart(1, "div", 1);
1032
1045
  i0.ɵɵelementStart(2, "div", 2);
@@ -1147,7 +1160,7 @@ AppListComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AppListCom
1147
1160
  i0.ɵɵadvance(1);
1148
1161
  i0.ɵɵproperty("ngIf", ctx.appList.length)("ngIfElse", _r14);
1149
1162
  i0.ɵɵadvance(3);
1150
- i0.ɵɵproperty("showAddBtn", ctx.showAddBtn)("showUpgradeBtn", true);
1163
+ i0.ɵɵproperty("showAddBtn", ctx.showAddBtn)("showUpgradeBtn", true)("reinitialize", ctx.reinitializeFooter);
1151
1164
  } }, 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"], encapsulation: 2 });
1152
1165
  AppListComponent.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: AppListComponent, factory: AppListComponent.ɵfac, providedIn: 'root' });
1153
1166
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AppListComponent, [{
@@ -1162,7 +1175,7 @@ AppListComponent.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: AppList
1162
1175
  provide: MAT_SELECT_CONFIG,
1163
1176
  useValue: { overlayPanelClass: 'organization-list-overlay-panel' },
1164
1177
  },
1165
- ], 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"] }]
1178
+ ], 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\" [reinitialize]=\"reinitializeFooter\"></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"] }]
1166
1179
  }], 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: [{
1167
1180
  type: Input
1168
1181
  }], appList: [{
@@ -1194,4 +1207,4 @@ AppListComponent.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: AppList
1194
1207
  }], updateListEvent: [{
1195
1208
  type: Output
1196
1209
  }] }); })();
1197
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2F4LWNvbW1vbi11aS1saWIvc3JjL2xpYi9hcHAtbGlzdC9hcHAtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvYXgtY29tbW9uLXVpLWxpYi9zcmMvbGliL2FwcC1saXN0L2FwcC1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlDQUFpQztBQUNqQyx1REFBdUQ7QUFDdkQsMEJBQTBCO0FBQzFCLHFFQUFxRTtBQUVyRSxPQUFPLEVBQUUsU0FBUyxFQUFVLGlCQUFpQixFQUFhLEtBQUssRUFBRSxNQUFNLEVBQWlCLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0osT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBcUIsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RCxPQUFPLEVBQWMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUFPLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JE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ekIsMkNBQXlCLHdCQUFBOztzRUR2Sm5DLGdCQUFnQixXQUFoQixnQkFBZ0IsbUJBZGYsTUFBTTt1RkFjUCxnQkFBZ0I7Y0FmNUIsVUFBVTtlQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COztjQUNBLFNBQVM7MkJBQ0UsY0FBYyxpQkFHVCxpQkFBaUIsQ0FBQyxJQUFJLGFBQzFCO29CQUNUO3dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7d0JBQzFCLFFBQVEsRUFBRSxFQUFFLGlCQUFpQixFQUFFLGlDQUFpQyxFQUFFO3FCQUNuRTtpQkFDRjsra0JBR1EsVUFBVTtrQkFBbEIsS0FBSztZQUNHLE9BQU87a0JBQWYsS0FBSztZQUNHLE9BQU87a0JBQWYsS0FBSztZQUNHLGdCQUFnQjtrQkFBeEIsS0FBSztZQUNHLG9CQUFvQjtrQkFBNUIsS0FBSztZQUNHLElBQUk7a0JBQVosS0FBSztZQUNHLFFBQVE7a0JBQWhCLEtBQUs7WUFDRyxnQkFBZ0I7a0JBQXhCLEtBQUs7WUFDRyxVQUFVO2tCQUFsQixLQUFLO1lBQ0csY0FBYztrQkFBdEIsS0FBSztZQUNHLGFBQWE7a0JBQXJCLEtBQUs7WUFDRyxVQUFVO2tCQUFsQixLQUFLO1lBQ0ksa0JBQWtCO2tCQUEzQixNQUFNO1lBQ0csWUFBWTtrQkFBckIsTUFBTTtZQUNHLGVBQWU7a0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBhcnJvdy1wYXJlbnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmcgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJhZGl4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtZnVuY3Rpb24tcmV0dXJuLXR5cGUgKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBPbkRlc3Ryb3ksIElucHV0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIEV2ZW50RW1pdHRlciwgQ2hhbmdlRGV0ZWN0b3JSZWYsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1BVF9TRUxFQ1RfQ09ORklHIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IFJvdXRlciAsICBOYXZpZ2F0aW9uRXh0cmFzfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXhvU25hY2tCYXJTZXJ2aWNlLCBBeG9TbmFja0JhclR5cGUgfSBmcm9tICcuLi9heG8tc25hY2stYmFyL2F4by1zbmFjay1iYXIuc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL2NvcmUvYXV0aC9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL3VzZXIvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi9jb3JlL3VzZXIvdXNlci50eXBlcyc7XG5pbXBvcnQgeyBBcHBMaXN0RHRvIH0gZnJvbSAnLi9hcHAtbGlzdC1kdG8nO1xuaW1wb3J0IHsgTXlBcHBMaXN0U2VydmljZSB9IGZyb20gJy4vbXktYXBwLWxpc3Quc2VydmljZSc7XG5pbXBvcnQgeyBPcmdhbml6YXRpb25MaXN0RHRvIH0gZnJvbSAnLi9vcmdhbml6YXRpb24tbGlzdC1kdG8nO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IEZsYXR0ZW5TZXJ2aWNlIH0gZnJvbSAnLi4vZmxhdHRlbi1tb2R1bGUvZmxhdHRlbi5zZXJ2aWNlJztcbmltcG9ydCB7IElGbGF0dGVuIH0gZnJvbSAnLi4vY29tbW9uLXV0aWxzL2lGbGF0dGVuJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ29va2llU2VydmljZSB9IGZyb20gJ25neC1jb29raWUtc2VydmljZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBFbmxpZ2h0ZW5MaWJNb2R1bGUgfSBmcm9tICcuLi9lbmxpZ2h0ZW4tbGliL2VubGlnaHRlbi1saWIubW9kdWxlJztcbmltcG9ydCB7IFFyZGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vcXJkaWFsb2cvcXJkaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IExvZ2dpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbG9nZ2luZy5zZXJ2aWNlJztcbmltcG9ydCB7IExvYWRpbmdEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9sb2FkaW5nLWRpYWxvZy9sb2FkaW5nLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IExvYWRpbmdBcHBpbnN0YWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vbG9hZGluZy1hcHBpbnN0YWxsL2xvYWRpbmctYXBwaW5zdGFsbC5jb21wb25lbnQnOyBcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24uc2VydmljZSc7XG5pbXBvcnQgeyBTdWNjZXNzRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vc3VjY2Vzcy1kaWFsb2cvc3VjY2Vzcy1kaWFsb2cuY29tcG9uZW50JzsgXG5pbXBvcnQgeyB0YWtlLCAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBmb3JrSm9pbiwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGxvY2FsZSB9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBBcHBDcmVhdGVEaWFsb2dDb21wb25lbnRDb21wb25lbnQgfSBmcm9tICcuLi9hcHAtY3JlYXRlLWRpYWxvZy1jb21wb25lbnQvYXBwLWNyZWF0ZS1kaWFsb2ctY29tcG9uZW50LmNvbXBvbmVudCc7IFxuXG4vL2ltcG9ydCB7IENvbnNvbGUgfSBmcm9tICdjb25zb2xlJztcbmltcG9ydCB7IENvbW1vbkxpYkNvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uLWxpYi1jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0YVZpZXdGaWx0ZXJzU2VydmljZSB9IGZyb20gJy4uL2RhdGEtdmlldy1saWIvZGF0YS12aWV3LWZpbHRlcnMvZGF0YS12aWV3LWZpbHRlcnMuc2VydmljZSc7XG5pbXBvcnQgeyBDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL3NoYXJlZC9jb21maXJtYXRpb24tbW9kYWwvY29uZmlybWF0aW9uLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdWJzY3JpYmVkUGxhbk5hbWUgfSBmcm9tICcuLi9zdWJzY3JpYmVkUGxhbk5hbWUuc2VydmljZSc7XG5pbXBvcnQgeyBTdHJpcGVTZXJ2aWNlIH0gZnJvbSAnLi4vc3RyaXBlLnNlcnZpY2UnO1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItYXBwLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vYXBwLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hcHAtbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBNQVRfU0VMRUNUX0NPTkZJRyxcbiAgICAgIHVzZVZhbHVlOiB7IG92ZXJsYXlQYW5lbENsYXNzOiAnb3JnYW5pemF0aW9uLWxpc3Qtb3ZlcmxheS1wYW5lbCcgfSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBcHBMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBjdXJyZW50T3JnOnN0cmluZztcbiAgQElucHV0KCkgYXBwTGlzdDogQXJyYXk8QXBwTGlzdER0bz47XG4gIEBJbnB1dCgpIGJhc2VVcmw6IHN0cmluZztcbiAgQElucHV0KCkgb3JnYW5pemF0aW9uTGlzdDogQXJyYXk8T3JnYW5pemF0aW9uTGlzdER0bz4gPSBbXTtcbiAgQElucHV0KCkgc2VsZWN0ZWRPcmdhbml6YXRpb246IE9yZ2FuaXphdGlvbkxpc3REdG87XG4gIEBJbnB1dCgpIHVzZXI6IFVzZXI7XG4gIEBJbnB1dCgpIGxpc3RUeXBlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNob3dDcmVhdGVCdXR0b246Ym9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93UVJJY29uOmJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd0RvdHNPcHRpb246Ym9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93Q3VzdG9taXplOmJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd0FkZEJ0bjpib29sZWFuID0gZmFsc2U7XG4gIEBPdXRwdXQoKSBzd2l0Y2hBY2NvdW50RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9wZW5BcHBFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgdXBkYXRlTGlzdEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIC8vIHVzZXI6IFVzZXI7XG4gIGlzQXBwQ2hhbmdlZEFmdGVyUHVibGlzaDogYm9vbGVhbiA9IGZhbHNlO1xuICB1c2VyTmFtZTogc3RyaW5nO1xuICBhcHBWZXJzaW9uSWQ6IG51bWJlcjtcbiAgdXNlckVtYWlsOiBzdHJpbmc7XG4gIGZ1bGxWZXJzaW9uOiBzdHJpbmc7XG4gIGZ1bGxWZXJzaW9uczogc3RyaW5nW10gPSBbXTtcbiAgdXNlckltYWdlOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZyA9ICcnO1xuICBtaW5vclZlcnNpb246IHN0cmluZyA9ICcnO1xuICBhcHBJZDogc3RyaW5nID0nJztcbiAgYnVpbGRlclVybDogc3RyaW5nO1xuICBvcGVuUG9wdXBNZW51OiBudW1iZXI7XG4gIGdyYWRpZW50cyA9IFtcbiAgICAncmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4MCUgMjAlLCAjREI2RDgxLCAjQkY0NTgxKScsXG4gICAgJ3JhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgODAlIDIwJSwgIzQ0OTFEOSwgIzQ1NTlCRiknLFxuICAgICdyYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDgwJSAyMCUsICNFN0E3NzksICNBQTU1MjUpJyxcbiAgICAncmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4MCUgMjAlLCAjNDREOTUzLCAjMEQ5MjEyKSdcbiAgXTtcbiAgY3VycmVudFVybCA9IGRvY3VtZW50LlVSTDtcbiAgYmFzZVVzcmwgPSBkb2N1bWVudC5iYXNlVVJJO1xuICByZWdleCA9IC9cXC9hcHBzXFwvKFxcZCspXFwvKFxcdyspLztcbiAgbWF0Y2ggPSB0aGlzLmN1cnJlbnRVcmwubWF0Y2godGhpcy5yZWdleCk7XG5cbiAgZGF0YSA9IHt9O1xuICBwcmV2aW91c09yZzpzdHJpbmc7XG5cbiAgLypcbiAgICAgKiBTdWJqZWN0IG9iamVjdCB3aGljaCBoZWxwcyB1bnN1YnNjcmliZSBhbGwgdGhlIHN1YnNjcmliZWQgb2JqZWN0cyBpbiB0aGUgY29tcG9uZW50XG4gICAgICovXG4gIHByaXZhdGUgX3Vuc3Vic2NyaWJlQWxsOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gIG9yZ2FuaXphdG9uSWQ6IG51bWJlcjtcbiAgdXNlclBlcm1pc3Npb25zOiBzdHJpbmdbXSA9IFtdOyAvLyBWYXJpYWJsZSB0byBob2xkIHVzZXIgcGVybWlzc2lvbnNcbiAgaGFzT3JnVXNlckFjY2VzczogYm9vbGVhbjtcbiAgY3VycmVudEFwcFZlcnNpb25JZDogc3RyaW5nO1xuICBzaG93V2ViUG9ydGFsQWNjZXNzT3ZlcmxheTogYm9vbGVhbiA9IGZhbHNlOyAvLyBGbGFnIHRvIGNvbnRyb2wgb3ZlcmxheSBkaXNwbGF5XG4gIHByaXZhdGUgaGFzQ2FsbGVkR2V0VXNlclBlcm1pc3Npb25zOiBib29sZWFuID0gZmFsc2U7IC8vIEZsYWcgdG8gdHJhY2sgaWYgdGhlIGZ1bmN0aW9uIGhhcyBiZWVuIGNhbGxlZFxuICBwZXJtaXNzaW9uczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIF91c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb21tb25MaWJDb25maWc6IENvbW1vbkxpYkNvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgX21wQXBwTGlzdFNlcnZpY2U6IE15QXBwTGlzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBfYXhvU25hY2tCYXI6IEF4b1NuYWNrQmFyU2VydmljZSxcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgX2ZsYXR0ZW5TZXJ2aWNlOiBGbGF0dGVuU2VydmljZSxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIC8vIEluamVjdCBIdHRwQ2xpZW50XG4gICAgcHJpdmF0ZSBfaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGNvb2tpZVNlcnZpY2U6IENvb2tpZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIF9sb2dnaW5nU2VydmljZSA6IExvZ2dpbmdTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2NvbW1vblNlcnZpY2U6Q29tbW9uU2VydmljZSxcbiAgICBwcml2YXRlIF9kYXRhVmlld0ZpbHRlcnNTZXJ2aWNlOiBEYXRhVmlld0ZpbHRlcnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgX3N1YnNjcmliZWRQbGFuTmFtZTogU3Vic2NyaWJlZFBsYW5OYW1lLFxuICAgIHByaXZhdGUgc3RyaXBlU2VydmljZTogU3RyaXBlU2VydmljZSxcblxuICAgIFxuICApIHsgfVxuICAvKipcbiAgICogR2V0dGVyIGZvciBjdXJyZW50IHllYXJcbiAgICovXG4gIGdldCBjdXJyZW50WWVhcigpOiBudW1iZXIge1xuICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XG4gIH1cblxuICBzZXRPcGVuUG9wdXBNZW51KGFwcElkKSB7XG4gICAgdGhpcy5vcGVuUG9wdXBNZW51ID0gYXBwSWQ7XG4gICAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jZGstb3ZlcmxheS1jb250YWluZXInKTtcbiAgICBvdmVybGF5LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgdGhpcy5vcGVuUG9wdXBNZW51ID0gdW5kZWZpbmVkO1xuICAgIH0pO1xuICB9XG5cbiAgb3BlblFSQ29kZURpYWxvZygpOiB2b2lkIHtcblxuICAgIGNvbnN0IHFyRGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihRcmRpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICcyNTBweCcsIC8vIEFkanVzdCB3aWR0aCBhcyBuZWVkZWRcbiAgICB9KTtcbiAgfVxuXG4gIG5hdmlnYXRldG9PcmdhbmlhdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCB1cmxNYXA6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAnbG9jYWxob3N0OjQyMDAnOiAnaHR0cHM6Ly9sb2NhbGhvc3Q6NDIwMC8nLFxuICAgICAgJ2xvY2FsaG9zdDo0MjAxJzogJ2h0dHBzOi8vbG9jYWxob3N0OjQyMDAvJyxcbiAgICAgICdhbmRyb21lZGEtYnVpbGRlci1xYS5heG9uYXRvci5jb20nOiAnaHR0cHM6Ly9hbmRyb21lZGEtYnVpbGRlci1xYS5heG9uYXRvci5jb20vJyxcbiAgICAgICdhbmRyb21lZGEtY29udGFpbmVyLXFhLmF4b25hdG9yLmNvbSc6ICdodHRwczovL2FuZHJvbWVkYS1idWlsZGVyLXFhLmF4b25hdG9yLmNvbS8nLFxuICAgICAgJ2J1aWxkZXIuYXhvbmF0b3IuY29tJzogJ2h0dHBzOi8vYnVpbGRlci5heG9uYXRvci5jb20vJyxcbiAgICAgICd3ZWIuYXhvbmF0b3IuY29tJzogJ2h0dHBzOi8vYnVpbGRlci5heG9uYXRvci5jb20vJ1xuICAgIH07XG4gICAgY29uc3QgdXJsOiBzdHJpbmcgPSB1cmxNYXBbd2luZG93LmxvY2F0aW9uLmhvc3RdIHx8ICcnO1xuICAgIGlmICh0aGlzLm1hdGNoKSB7XG4gICAgICBjb25zdCB1c2VyTGlzdFVybCA9IGBhcHBzLyR7dGhpcy5tYXRjaFsxXX0vdXNlcnNgOyAvLyBkeW5hbWljIHBhcnQgYmFzZWQgb24gbWF0Y2hcbiAgICAgIHdpbmRvdy5vcGVuKHVybCArIHVzZXJMaXN0VXJsLCAnX3NlbGYnKTsgLy8gb3BlbiBkeW5hbWljIFVSTFxuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cub3Blbih1cmwgKyAnb3JnYW5pemF0aW9uJywgJ19zZWxmJyk7IC8vIGZhbGxiYWNrIHRvIG9yZ2FuaXphdGlvbiByb3V0ZVxuICAgIH1cbiAgfSAgXG5cbiAgbmF2aWdhdGV0b09yZ2FuaWF0aW9uU2V0dGluZ3MoKTogdm9pZCB7XG4gICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoJ29yZ2FuaXphdGlvbi1zZXR0aW5ncycpO1xuICB9XG4gIFxuXG5cblxuICAvLyBkZWxldGVBcHAoYXBwSWQ6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nKTogdm9pZCB7XG4gIC8vICAgdGhpcy5fbXBBcHBMaXN0U2VydmljZS5kZWxldGVBcHAoYXBwSWQsIHZlcnNpb24pXG4gIC8vICAgICAucGlwZShcbiAgLy8gICAgICAgdGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlQWxsKSxcbiAgLy8gICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgLy8gICAgICAgICBjb25zb2xlLmxvZygnRXJyb3Igb2NjdXJyZWQgd2hpbGUgZGVsZXRpbmcgYXBwOicsIGVycm9yKTtcbiAgLy8gICAgICAgICAvLyB0aGlzLl9zbmFja2JhclNldmljZS5vcGVuU25hY2tCYXIoJ0Vycm9yIG9jY3VycmVkIHdoaWxlIGRlbGV0aW5nIGFwcC4nLCBBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAvLyAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgLy8gICAgICAgfSlcbiAgLy8gICAgIClcbiAgLy8gICAgIC5zdWJzY3JpYmUoXG4gIC8vICAgICAgIC8vIHJlc3BvbnNlID0+IHRoaXMuaGFuZGxlRGVsZXRlU3VjY2VzcyhyZXNwb25zZSksXG4gIC8vICAgICAgIC8vIGVycm9yID0+IHRoaXMuaGFuZGxlRGVsZXRlRXJyb3IoZXJyb3IpXG4gIC8vICAgICApO1xuICAvLyB9XG5cbiAgLy8gQXNzdW1pbmcgX2RlbGV0ZVNlcnZpY2UgaGFzIGEgZGVsZXRlQXBwIG1ldGhvZCB0aGF0IGhhbmRsZXMgYXBwIGRlbGV0aW9uXG4gIC8vIEFsc28sIGFzc3VtaW5nIGhhbmRsZURlbGV0ZVN1Y2Nlc3MgYW5kIGhhbmRsZURlbGV0ZUVycm9yIGFyZSBtZXRob2RzIHRvIGhhbmRsZSBzdWNjZXNzIGFuZCBlcnJvciBzY2VuYXJpb3NcblxuICBwYWRaZXJvKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHZhciBwYWRkaW5nPScnO1xuICAgIGxldCBsZW5ndGg9dmFsdWUudG9TdHJpbmcoKS5sZW5ndGg7XG4gICAgaWYobGVuZ3RoPT0xKVxuICAgIHtcbiAgICAgIHBhZGRpbmc9JzAwJyt2YWx1ZVxuICAgIH1cbiAgICBlbHNlIGlmKGxlbmd0aD09MilcbiAgICB7XG4gICAgICBwYWRkaW5nPScwJyt2YWx1ZVxuICAgIH1cbiAgICBlbHNlIGlmKGxlbmd0aD09MylcbiAgICB7XG4gICAgICBwYWRkaW5nPXZhbHVlXG4gICAgfVxuICAgIHJldHVybiBwYWRkaW5nO1xuICB9XG5cbiAgcHVibGljIGhhc0FwcEJ1aWxkZXJQZXJtaXNzaW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZ2V0VXNlckRldGFpbHMoKTogdm9pZCB7XG4gICAgdGhpcy5fY29tbW9uU2VydmljZS5nZXRVc2VyRGV0YWlsKClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVBbGwpLFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHVzZXIgZGV0YWlsczonLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFwKCh1c2VyUmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHVzZXJQZXJtaXNzaW9ucyA9IHVzZXJSZXNwb25zZT8udWQ/LnBlcm1pc3Npb25zIHx8IFtdO1xuICAgICAgICAgIC8vIENoZWNrIGlmIFwiQVBQX0JVSUxERVJcIiBwZXJtaXNzaW9uIGV4aXN0c1xuICAgICAgICAgIHRoaXMuaGFzQXBwQnVpbGRlclBlcm1pc3Npb24gPSB1c2VyUGVybWlzc2lvbnMuaW5jbHVkZXMoXCJBUFBfQlVJTERFUlwiKSAmJiB1c2VyUGVybWlzc2lvbnMuaW5jbHVkZXMoXCJBQ0NFU1NfV0VCX1BPUlRBTFwiKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uT3B0aW9ucyA9IHtcbiAgICAgICAgICBhY2NvdW50SWQ6IHJlc3BvbnNlLnVkLmxhc3R1c2VkX2FjY291bnRcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuc3RyaXBlU2VydmljZS5nZXRTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uT3B0aW9ucykuc3Vic2NyaWJlKFxuICAgICAgICAgIChzdWJzY3JpcHRpb25SZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChzdWJzY3JpcHRpb25SZXNwb25zZSAmJiBzdWJzY3JpcHRpb25SZXNwb25zZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbkluZm8gPSBzdWJzY3JpcHRpb25SZXNwb25zZVswXTtcbiAgICAgICAgICAgICAgY29uc3QgcHJvZHVjdE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgUHJvZHVjdElkOiBzdWJzY3JpcHRpb25JbmZvLml0ZW1zWzBdLnByb2R1Y3RJZFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgdGhpcy5zdHJpcGVTZXJ2aWNlLmdldFByb2R1Y3REZXRhaWxzKHByb2R1Y3RPcHRpb25zKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgKHByb2R1Y3RSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fc3Vic2NyaWJlZFBsYW5OYW1lLnN1YnNjcmliZWRQbGFuTmFtZSA9IHByb2R1Y3RSZXNwb25zZS5uYW1lO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBwcm9kdWN0IGRldGFpbHM6JywgZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgc3Vic2NyaXB0aW9uIGRldGFpbHM6JywgZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICB9XG4gIFxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZ2V0VXNlclBlcm1pc3Npb25zKCk7XG4gICBcbiAgICAvLyB0aGlzLmN1cnJlbnRBcHBWZXJzaW9uSWQgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdChcIi9cIilbNF07XG4gICAgLy8gdGhpcy5fbmF2aWdhdGlvbi51cGRhdGVDbGFzc2ljTmF2aWdhdGlvblJvdXRlcyh0aGlzLmN1cnJlbnRBcHBWZXJzaW9uSWQudG9TdHJpbmcoKSk7XG5cbiAgICAvLyBGZXRjaCB1c2VyIGRldGFpbHNcbiAgICBcbiAgICBcbiAgICBpZiAodGhpcy51c2VyKSB7XG4gICAgICB0aGlzLnVzZXJFbWFpbCA9IHRoaXMudXNlci5lbWFpbDtcbiAgICAgIHRoaXMudXNlck5hbWUgPSB0aGlzLnVzZXJbJ2ZuYW1lJ10gKyAnICcgKyB0aGlzLnVzZXJbJ2xuYW1lJ107XG4gICAgICB0aGlzLnVzZXJJbWFnZSA9IHRoaXMudXNlclsndWltZyddO1xuICAgIH1cblxuICAgIHRoaXMuZ2V0VXNlckRldGFpbHMoKTtcbiAgICBcbiAgLy9BWEUtSTYzNzZcbiAgLy9Jc3N1ZSA6IFBhcmFtZXRlcml6ZWQgdXJsIHdhcyBub3QgbWFpbnRhaW4gKGFwcCBpbnN0YWxsYXRpb24pLCBhdXRob3JpemF0aW9uIGNhbGwgc29tZWhvdyBsb3NlcyB0aGUgcGFyYW1ldGVyc1xuICAvL3VybCBzdG9yYWdlIGlzIG1haW50YWluZWQgYnkgdGhlIG5hbWUgXCJhcHBuYW1lXCJcbiAgLy9JdCBpcyBzZXQgaW4gYXV0aC5yZXNvbHZlciBhbmQgcmVtb3ZlZCBoZXJlXG4gIC8vaWYgYXBwbmFtZSBleGlzdCBpbiBzZXNzaW9uIHVzZWQgdGhlIHN0b3JlZCBuYW1lLCBpZiBub3QgdXNlZCB0aGUgdmFsdWUgZnJvbSB0aGUgdXJsXG4gIC8vXG52YXIgYXBwTmFtZWNoZWNrPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhcHBuYW1lJyk7XG4vL2NvbnNvbGUubG9nKFwiITExM1wiKTtcbi8vIGlmKGFwcE5hbWVjaGVjayE9PW51bGwpXG4vLyB7XG4vLyAgIGlmKGFwcE5hbWVjaGVjaz09XCIvYXBwc1wiKVxuLy8gICB7XG4vLyAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJhcHBuYW1lXCIpO1xuLy8gICB9XG4vLyB9XG4vLyBhcHBOYW1lY2hlY2s9bG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FwcG5hbWUnKTtcbi8vY29uc29sZS5sb2coXCIhMTEzXCIpO1xuLy9jb25zb2xlLmxvZyhhcHBOYW1lY2hlY2spXG4gIC8vXG52YXIgYXBwTmFtZWNoZWNrPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhcHBuYW1lJyk7XG52YXIgYXBwUHVibGlzaFN0YXR1cz1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncHVibGlzaHN0YXR1cycpO1xuLy9jb25zb2xlLmxvZyhcIiExMTNcIik7XG4vLyBpZihhcHBOYW1lY2hlY2shPT1udWxsKVxuLy8ge1xuLy8gICBpZihhcHBOYW1lY2hlY2s9PVwiL2FwcHNcIilcbi8vICAge1xuLy8gICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiYXBwbmFtZVwiKTtcbi8vICAgfVxuLy8gfVxuLy8gYXBwTmFtZWNoZWNrPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhcHBuYW1lJyk7XG4vL2NvbnNvbGUubG9nKFwiITExM1wiKTtcbi8vY29uc29sZS5sb2coYXBwTmFtZWNoZWNrKVxuICBsZXQgYXBwbmFtZTpzdHJpbmc7XG4gIGxldCBjYXRlZ29yeTpzdHJpbmc7XG5cbi8vIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4vLyBjb25zdCBhcHBOYW1lQ2hlY2sgPSB1cmxQYXJhbXMuZ2V0KCdhcHBuYW1lJyk7XG4vLyBjb25zb2xlLmxvZyhhcHBOYW1lQ2hlY2spXG4vLyBjb25zdCBjYXRlZ29yeSA9IHVybFBhcmFtcy5nZXQoJ2NhdGVnb3J5Jyk7XG4vLyBjb25zb2xlLmxvZyhjYXRlZ29yeSlpXG5cblxubGV0IEluc3RhbGxBcHBOYW1lOnN0cmluZztcbkluc3RhbGxBcHBOYW1lPWxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiSW5zdGFsbGVkQXBwTmFtZVwiKTtcbmlmKEluc3RhbGxBcHBOYW1lIT1udWxsKXtcbmNvbnN0IGNhcGl0YWxpemVkQXBwTmFtZTogc3RyaW5nID0gdGhpcy5jYXBpdGFsaXplV29yZHMoSW5zdGFsbEFwcE5hbWUucmVwbGFjZSgvLS9nLCAnICcpKTtcbnRoaXMuY2hlY2tBbmRQdWJsaXNoQXBwKGNhcGl0YWxpemVkQXBwTmFtZSk7XG5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcIkluc3RhbGxlZEFwcE5hbWVcIik7XG59XG5pZiAoYXBwTmFtZWNoZWNrICE9PSBudWxsKSB7XG4gIC8vXG4gIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoYXBwTmFtZWNoZWNrLnNwbGl0KCc/JylbMV0pO1xuICBjb25zdCBhcHBOYW1lVGVtcCA9IHVybFBhcmFtcy5nZXQoJ2FwcG5hbWUnKTtcbiAgY29uc3QgY2F0ZWdvcnlUZW1wID0gdXJsUGFyYW1zLmdldCgnY2F0ZWdvcnknKTtcbiAgLy9jb25zdCBhcHBOYW1lVGVtcCA9IGFwcE5hbWVjaGVjay5zcGxpdCgnPScpWzFdLnNwbGl0KCcmJylbMF07IC8vIEV4dHJhY3RpbmcgYXBwbmFtZSB2YWx1ZSBmcm9tIFVSTCBwYXJhbWV0ZXJcbiAgLy9sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIkluc3RhbGxlZEFwcE5hbWVcIixhcHBOYW1lVGVtcClcbi8vIEV4dHJhY3RpbmcgY2F0ZWdvcnkgdmFsdWUgZnJvbSBVUkwgcGFyYW1ldGVyXG4gLy8gY29uc3QgY2F0ZWdvcnlUZW1wID0gYXBwTmFtZWNoZWNrLnNwbGl0KCdjYXRlZ29yeT0nKVsxXTtcbiAgLy9cbiAgaWYgKGFwcE5hbWVUZW1wKSB7XG4gICAgdGhpcy5pbnN0YWxsQXBwKGFwcE5hbWVUZW1wLCBjYXRlZ29yeVRlbXApLnRoZW4oKCkgPT4ge1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJhcHBuYW1lXCIpO1xuICAgIH0pLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIC8vIEhhbmRsZSBlcnJvciBpZiBpbnN0YWxsQXBwIGZhaWxzXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbnN0YWxsaW5nIGFwcDonLCBlcnJvcik7XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImFwcG5hbWVcIik7XG4gICAgfSk7XG4gIH1cblxuLy8gbGV0IGFwcE5hbWU6IHN0cmluZzsgXG4vLyBpZihhcHBOYW1lY2hlY2shPT1udWxsKXtcbi8vICAgYXBwTmFtZT1hcHBOYW1lY2hlY2suc3BsaXQoJz0nKVsxXS5zcGxpdCgnJTJGJylbMF07XG4vLyAgIGlmIChhcHBOYW1lKSB7XG4vLyAgICAgdGhpcy5pbnN0YWxsQXBwKGFwcE5hbWUsKS50aGVuKCgpID0+IHtcbi8vICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiYXBwbmFtZVwiKTtcbiAgICAgIFxuLy8gICAgIH0pXG4vLyAgICAgLmNhdGNoKGVycm9yID0+IHtcbi8vICAgICAgIC8vIEhhbmRsZSBlcnJvciBpZiBpbnN0YWxsQXBwIGZhaWxzXG4vLyAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbnN0YWxsaW5nIGFwcDonLCBlcnJvcik7XG4vLyAgICAgfSk7XG4vLyAgIH1cbiAgXG4gIFxuICB9XG4gIGVsc2V7XG4gICAgLy8gVmFyaWFibGUgdG8gc3RvcmUgYXBwbmFtZVxuXG4gICAgXG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlQWxsKVxuICAgICkuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XG4gICAgICBhcHBuYW1lID0gcGFyYW1zWydhcHBuYW1lJ107XG4gICAgICAvL2xvY2FsU3RvcmFnZS5zZXRJdGVtKFwiSW5zdGFsbGVkQXBwTmFtZVwiLGFwcG5hbWUpO1xuICAgICAgXG4gICAgICBjYXRlZ29yeSA9IHBhcmFtc1snY2F0ZWdvcnknXTtcbiAgICAgIFxuICAgIFxuICAgICAgaWYgKGFwcG5hbWUpIHtcbiAgICAgICAgLy8gU3BsaXQgdGhlIGFwcG5hbWUgYXQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgJy8nXG4gICAgICAgIGNvbnN0IGFwcE5hbWVQYXJ0cyA9IGFwcG5hbWUuc3BsaXQoJy8nLCAxKTtcbiAgICAgICAgY29uc3QgYXBwTmFtZSA9IGFwcE5hbWVQYXJ0c1swXTsgLy8gU3RvcmUgYXBwbmFtZVxuICAgICAgICAvL2NvbnN0IGNhdGVnb3J5ID0gY2F0ZWdvcnk7IC8vIFN0b3JlIGNhdGVnb3J5XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYXBwTmFtZT1cIithcHBOYW1lKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJjYXRlZ29yeT1cIitjYXRlZ29yeSk7XG4gICAgICAgIFxuICAgICAgICAvLyBOYXZpZ2F0ZSB0byB0aGUgc2FtZSByb3V0ZSB3aXRob3V0IGFueSBxdWVyeSBwYXJhbWV0ZXJzXG4gICAgICAgIGNvbnN0IG5hdmlnYXRpb25FeHRyYXM6IE5hdmlnYXRpb25FeHRyYXMgPSB7XG4gICAgICAgICAgcmVwbGFjZVVybDogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIG5hdmlnYXRpb25FeHRyYXMpO1xuICAgICAgICBcblxuICAgICAgICBpZiAoYXBwbmFtZSkge1xuICAgICAgICAgIFxuICAgICAgICAgXG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJwdWJsaXNoc3RhdHVzXCIsXCJGYWxzZVwiKVxuICAgICAgICAgIHRoaXMuaW5zdGFsbEFwcChhcHBuYW1lLGNhdGVnb3J5KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBzdWNjZXNzZnVsIGluc3RhbGxhdGlvblxuICAgICAgICAgICAgY29uc29sZS5sb2coJ0FwcCBpbnN0YWxsZWQgTWV0aG9kIGNhbGxlZDonLCBhcHBuYW1lLCBjYXRlZ29yeSk7XG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImFwcG5hbWVcIik7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICAgLy8gSGFuZGxlIGVycm9yIGlmIGluc3RhbGxBcHAgZmFpbHNcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluc3RhbGxpbmcgYXBwOicsIGVycm9yKTtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiYXBwbmFtZVwiKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIH1cbiAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAvLyAgIGNvbnNvbGUuZXJyb3IoJ2FwcG5hbWUgb3IgY2F0ZWdvcnkgcXVlcnkgcGFyYW1ldGVyIGlzIG1pc3NpbmcnKTtcbiAgICAgIH19KTtcblxuICAgIH1cbiAgICBcbiAgICAvLyBvbmNlIHdlIGZpeCBpZGVudGl0eSBzZXJ2ZXIgQVBJLCB0aGlzIGNvZGUgd2lsbCBiZSBuZWVkZWQgYWdhaW5cbiAgICAvLyBTdWJzY3JpYmUgdG8gdXNlciBjaGFuZ2VzXG4gICAgLy8gdGhpcy5fdXNlclNlcnZpY2UudXNlciRcbiAgICAvLyAucGlwZSh0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVBbGwpKVxuICAgIC8vIC5zdWJzY3JpYmUoKHVzZXI6IGFueSkgPT4ge1xuICAgIC8vICAgICB0aGlzLnVzZXIgPSB1c2VyO1xuICAgIC8vICAgICB0aGlzLnVzZXJFbWFpbCA9IHVzZXIuZW1haWw7XG4gICAgLy8gICAgIHRoaXMudXNlck5hbWUgPSB1c2VyLkZpcnN0TmFtZSArICcgJysgdXNlci5MYXN0TmFtZSA7XG4gICAgLy8gICAgIHRoaXMudXNlckltYWdlID0gdXNlci5waWN0dXJlO1xuICAgIC8vICAgICAvLyBNYXJrIGZvciBjaGVja1xuICAgIC8vICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAvLyB9KTtcblxuXG5cblxuICAgIGNvbnN0IHVybCA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3VybCcpO1xuICAgIGlmICh1cmwpIHtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xuICAgICAgLy8gUmVtb3ZlIHNhdmVkIGRhdGEgZnJvbSBzZXNzaW9uU3RvcmFnZVxuICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgndXJsJyk7XG5cbiAgICAgIC8vIFJlbW92ZSBhbGwgc2F2ZWQgZGF0YSBmcm9tIHNlc3Npb25TdG9yYWdlXG4gICAgICBzZXNzaW9uU3RvcmFnZS5jbGVhcigpO1xuICAgIH1cblxuICB9XG5cbiAgXG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmKHRoaXMuY3VycmVudE9yZyE9dGhpcy5wcmV2aW91c09yZyl7XG4gICAgICB0aGlzLmdldFVzZXJQZXJtaXNzaW9ucygpO1xuICAgICAgdGhpcy5wcmV2aW91c09yZz10aGlzLmN1cnJlbnRPcmc7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLmFwcExpc3QgJiYgY2hhbmdlcy5hcHBMaXN0LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgdGhpcy5hc3NpZ25HcmFkaWVudHMoKTtcbiAgICB9XG4gIH1cblxuICBhc3NpZ25HcmFkaWVudHMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYXBwTGlzdCAmJiB0aGlzLmFwcExpc3QubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5hcHBMaXN0LmZvckVhY2goKGFwcCwgaW5kZXgpID0+IHtcbiAgICAgICAgYXBwLmdyYWRpZW50ID0gdGhpcy5ncmFkaWVudHNbaW5kZXggJSB0aGlzLmdyYWRpZW50cy5sZW5ndGhdO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGwgYXBwcyBBcHAgVmVyc2lvbiBJZCByb3V0ZVxuICAgKlxuICAgKiBAcGFyYW0gYXBwVmVyc2lvbklkXG4gICAqL1xuICBvcGVuQXBwKGFwcFZlcnNpb25JZDogbnVtYmVyKTogdm9pZCB7XG4gICAgXG4gICAgY29uc3QgY3VycmVudFVybCA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47IC8vIEdldCB0aGUgY3VycmVudCBVUkxcbiAgICAvLyBVcGRhdGVkIFVSTCBjaGVjayBsb2dpY1xuICAgIGlmIChjdXJyZW50VXJsLmluY2x1ZGVzKCdsb2NhbGhvc3Q6NDIwMCcpIHx8IGN1cnJlbnRVcmwuaW5jbHVkZXMoJ2J1aWxkZXIuYXhvbmF0b3IuY29tJykgfHwgY3VycmVudFVybC5pbmNsdWRlcygnYW5kcm9tZWRhLWJ1aWxkZXItcWEuYXhvbmF0b3IuY29tJykpIHtcbiAgICAgIFxuICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIHVzZXIgaXMgZGVmaW5lZCBhbmQgaGFzIGEgVXNlcklEXG4gICAgICBpZiAoIXRoaXMudXNlcikge1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignVXNlciBub3QgZm91bmQgb3Igbm90IGxvZ2dlZCBpbicsIEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gICAgICAgICAgcmV0dXJuOyAvLyBFeGl0IHRoZSBtZXRob2QgaWYgdXNlciBpcyBub3QgYXZhaWxhYmxlXG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciByZXF1aXJlZCBwZXJtaXNzaW9uc1xuICAgICAgY29uc3QgaGFzUmVxdWlyZWRQZXJtaXNzaW9uID0gdGhpcy5wZXJtaXNzaW9ucy5pbmNsdWRlcygnQVBQX0JVSUxERVInKSB8fCB0aGlzLnBlcm1pc3Npb25zLmluY2x1ZGVzKCdBUFBfSUFNJyk7XG4gICAgICBpZiAoIWhhc1JlcXVpcmVkUGVybWlzc2lvbikge1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignWW91IG5lZWQgZWl0aGVyIEFQUF9CVUlMREVSIG9yIEFQUF9JQU0gcGVybWlzc2lvbnMgdG8gcGVyZm9ybSB0aGlzIGFjdGlvbi4nLCBBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEaXJlY3RseSBvcGVuIHRoZSBhcHAgcmVnYXJkbGVzcyBvZiBVUkwgaWYgdGhlIGNvbmRpdGlvbnMgYXJlIG5vdCBtZXRcbiAgICB0aGlzLm9wZW5BcHBFdmVudC5lbWl0KGFwcFZlcnNpb25JZCk7XG4gIH1cblxuXG5cbiAgbmF2aWdhdGVUb0hvbWUoYXBwVmVyc2lvbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybChgYXBwcy8ke2FwcFZlcnNpb25JZH0vaG9tZWApO1xuICB9XG5cbiAgLyoqXG4gICAqIGZ1bmN0aW9uIHVzZSB0byBTd2l0Y2ggdGhlIG9yZ2FuaXphdGlvblxuICAgKi9cbiAgc3dpdGNoQWNjb3VudChvcmdhbml6YXRpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zd2l0Y2hBY2NvdW50RXZlbnQuZW1pdChvcmdhbml6YXRpb25JZCk7XG4gICAgXG4gICBcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIG91dFxuICAgKi9cbiAgc2lnbk91dCgpOiB2b2lkIHtcbiAgICB0aGlzLl9sb2dnaW5nU2VydmljZS50cmFja0V2ZW50KCd1c2VyIGxvZ2dlZCBvdXQnLHtzdGVwIDogJ0J5ZSBCeWUgJyt0aGlzLnVzZXJOYW1lfSk7XG4gICAgdGhpcy5fYXV0aFNlcnZpY2Uuc2lnbk91dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbGxpbmdcbiAgICovXG4gIG5hdmlnYXRlVG9CaWxsaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKCdwYXltZW50aW5mby9wcmljaW5nJylcbiAgICBcbiAgfVxuXG5cblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8gQ3JlYXRlIEFwcHAvLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8qKlxuICAgKnRvIGNyZWF0ZSBuZXcgYXBwXG4gICAqL1xuICAgb3BlbkNyZWF0ZUFwcERpYWxvZygpOiB2b2lkIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEFwcENyZWF0ZURpYWxvZ0NvbXBvbmVudENvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc2MDBweCcsXG4gICAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tZGlhbG9nLWNvbnRhaW5lcicsXG4gICAgICBiYWNrZHJvcENsYXNzOiAnY3VzdG9tLWRpYWxvZy1iYWNrZHJvcCdcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBjb25zdCB7IG5hbWUsIGRlc2NyaXB0aW9uIH0gPSByZXN1bHQ7XG5cbiAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdDcmVhdGluZyBBcHAuLi4nLCBBeG9TbmFja0JhclR5cGUuaW5mbyk7XG4gICAgICAgIHRoaXMuY3JlYXRlQXBwKG5hbWUsIGRlc2NyaXB0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNyZWF0ZUFwcChuYW1lOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRGF0YUZvclNlcnZpY2UgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtRGF0YUZvclNlcnZpY2UuYXBwZW5kKCduYW1lJywgbmFtZSk7XG4gICAgZm9ybURhdGFGb3JTZXJ2aWNlLmFwcGVuZCgnZGVzY3JpcHRpb24nLCBkZXNjcmlwdGlvbik7XG5cbiAgICB0aGlzLl9tcEFwcExpc3RTZXJ2aWNlLmFkZEFwcEJhc2ljSW5mbyhmb3JtRGF0YUZvclNlcnZpY2UpLnRvUHJvbWlzZSgpXG4gICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZT8uYWRkQXBwQmFzaWNJbmZvPy5zdGF0dXMgPT09ICdzdWNjZXNzJyAmJiByZXNwb25zZS5hZGRBcHBCYXNpY0luZm8uYXBwPy5hcHB2ZXJzaW9uX2lkKSB7XG4gICAgICAgICAgLy90aGlzLl9uYXZpZ2F0aW9uLnVwZGF0ZUNsYXNzaWNOYXZpZ2F0aW9uUm91dGVzKHJlc3BvbnNlLmFkZEFwcEJhc2ljSW5mby5hcHAuYXBwdmVyc2lvbl9pZCk7XG4gICAgICAgICAgLy90aGlzLl9yb3V0ZXIubmF2aWdhdGUoWydhcHBzJywgcmVzcG9uc2UuYWRkQXBwQmFzaWNJbmZvLmFwcC5hcHB2ZXJzaW9uX2lkXSk7XG4gICAgICAgICAgXG4gICAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdBcHAgY3JlYXRlZC4nLCBBeG9TbmFja0JhclR5cGUuc3VjY2Vzcyk7XG4gICAgICAgICAgdGhpcy5vcGVuQXBwKHJlc3BvbnNlLmFkZEFwcEJhc2ljSW5mby5hcHAuYXBwdmVyc2lvbl9pZClcbiAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZT8uYWRkQXBwQmFzaWNJbmZvPy5hcHAgPT09ICdhbHJlYWR5X2V4aXN0cycpIHtcbiAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0FwcCBhbHJlYWR5IGV4aXN0cycsIEF4b1NuYWNrQmFyVHlwZS53YXJuaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ09vcHMhIFNvbWV0aGluZyB3ZW50IHdyb25nJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNyZWF0aW5nIGFwcDonLCBlcnJvcik7XG4gICAgICAgIHZhciBlcnJvck1lc3NhZ2UgPSAnT29wcyEgU29tZXRoaW5nIHdlbnQgd3JvbmcnXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgIGlmIChlcnJvciA9PT0gJ0FYX0VSUl82NycpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9ICdPb3BzISBDYW5cXCd0IHJlYWNoIG91ciBzZXJ2ZXJzIPCfk6EuIFBsZWFzZSB3YWl0LCB3ZVxcJ2xsIG5vdGlmeSB5b3Ugc29vbi4nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcihlcnJvck1lc3NhZ2UsIEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gICAgICB9KTtcbiAgfVxuLy9UcnlpbmcgdG8gaW1wbGVtZW50IHVybCBhcyB3ZWxsIGFzIGJ1dHRvbiBmdW5jdGlvbmFsaXR5IGZvciBpbnN0YWxsaW5nIGFwcFxuLy8gYXN5bmMgaW5zdGFsbEFwcCh1c2VySW5wdXQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgXG4vLyAgIGlmICghdXNlcklucHV0KSB7XG4vLyAgICAgdXNlcklucHV0ID0gcHJvbXB0KCdFbnRlciB0aGUgc3RyaW5nIHRvIHNlbmQgdG8gdGhlIEFQSTonKTtcbi8vICAgICBpZiAoIXVzZXJJbnB1dCkge1xuLy8gICAgICAgLy8gSWYgdXNlciBjYW5jZWxzIG9yIHByb3ZpZGVzIG5vIGlucHV0LCBkbyBub3RoaW5nXG4vLyAgICAgICByZXR1cm47XG4vLyAgICAgfVxuLy8gICB9XG5cbi8vICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdJbnN0YWxsaW5nIEFwcC4uLicsIEF4b1NuYWNrQmFyVHlwZS5pbmZvKTtcbiAgXG4gXG5jaGVja0FuZFB1Ymxpc2hBcHAoaW5zdGFsbGVkQXBwOiBzdHJpbmcpIHtcbiAgLy9cbiAgY29uc3QgYXBwTmFtZWNoZWNrID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FwcG5hbWUnKTsgLy8gUmVwbGFjZSB3aXRoIHlvdXIgbG9naWMgdG8gZ2V0IGFwcE5hbWVjaGVja1xuICBjb25zdCBhcHBQdWJsaXNoU3RhdHVzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3B1Ymxpc2hzdGF0dXMnKTsgLy8gUmVwbGFjZSB3aXRoIHlvdXIgbG9naWMgdG8gZ2V0IGFwcFB1Ymxpc2hTdGF0dXNcbiAgY29uc3QgYXBwSW5zdGFsbFN0YXR1cz1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaW5zdGFsbHN0YXR1cycpXG5cbiAgIGlmIChhcHBOYW1lY2hlY2sgPT0gbnVsbCAmJiBhcHBQdWJsaXNoU3RhdHVzID09IFwiRmFsc2VcIiAmJiBhcHBJbnN0YWxsU3RhdHVzPT1cIlRydWVcIikge1xuICAgIGNvbnN0IGFwcElkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3B1Ymxpc2hBcHBJZERhdGEnKTtcbiAgICBjb25zdCBhcHBWZXJzaW9uID0gXCIxLjAwXCI7XG4gICAgY29uc3QgcHVibGlzaFN0YXR1cyA9IFwiUFwiO1xuICAgIGlmIChhcHBJZCkge1xuICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5wdWJsaXNoYXBwKGFwcElkLCBhcHBWZXJzaW9uLCBwdWJsaXNoU3RhdHVzKS5zdWJzY3JpYmUoXG4gICAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAvLyBIYW5kbGUgdGhlIHJlc3BvbnNlIGlmIG5lZWRlZFxuICAgICAgICAgIGNvbnNvbGUubG9nKCdQdWJsaXNoIHJlc3BvbnNlOicsIHJlc3BvbnNlKTtcbiAgICAgICAgICAvLyBjb25zdCBhcHBOYW1lID0gaW5zdGFsbGVkQXBwIHx8ICdZb3VyIEFwcCc7XG4gICAgICAgICAgLy8gY29uc3QgYXBwVmVyc2lvbiA9ICcxLjAwMCc7XG4gICAgICAgICAgLy8gY29uc3Qgc3VjY2Vzc01lc3NhZ2UgPSBgQXBwOiAke2FwcE5hbWV9IHZlcnNpb24gJHthcHBWZXJzaW9ufSBpcyBwdWJsaXNoZWQgc3VjY2Vzc2Z1bGx5LmA7XG4gICAgICAgICAvLyB0aGlzLm9wZW5TdWNjZXNzRGlhbG9nKCd2ZXJzaW9uIHB1Ymxpc2hlZCBzdWNjZXNzZnVsbHkhJyk7XG4gICAgICAgICBjb25zdCBhcHBOYW1lID0gaW5zdGFsbGVkQXBwO1xuICAgICAgICAgY29uc3QgYXBwVmVyc2lvbiA9ICcxLjAwMCc7XG4gICAgICAgICBjb25zdCBib3hoZWFkaW5nPWBJbnN0YWxsZWRgXG4gICAgICAgICBjb25zdCBzdWNjZXNzTWVzc2FnZSA9IGBBcHA6ICR7YXBwTmFtZX0gdmVyc2lvbiAke2FwcFZlcnNpb259IGlzIGluc3RhbGxlZCBzdWNjZXNzZnVsbHkuIGA7XG4gICAgICAgICBjb25zdCBzdWNjZXNzRGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihTdWNjZXNzRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgIHdpZHRoOiAnNTAwcHgnLFxuICAgICAgICAgICBkYXRhOiB7IG1lc3NhZ2U6IHN1Y2Nlc3NNZXNzYWdlICwgaGVhZGluZzpib3hoZWFkaW5nfSxcbiAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlXG4gICAgICAgICB9KTtcbiAgICAgICAgICAvLyBSZW1vdmUgbG9jYWwgc3RvcmFnZSBpdGVtc1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdwdWJsaXNoQXBwSWREYXRhJyk7XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3B1Ymxpc2hzdGF0dXMnKTtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnaW5zdGFsbHN0YXR1cycpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgLy8gSGFuZGxlIGVycm9yIGlmIG5lZWRlZFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHB1Ymxpc2hpbmcgYXBwOicsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbmZldGNoQXBwRGV0YWlscyhmbGF0dGVuOiBhbnkpIHtcbiAgaWYgKGZsYXR0ZW4gJiYgZmxhdHRlbi5hcHBWZXJzaW9uSWQpIHtcbiAgICB0aGlzLl9tcEFwcExpc3RTZXJ2aWNlLmZldGNoQXBwRGV0YWlscyhmbGF0dGVuLmFwcFZlcnNpb25JZCwgdGhpcy5jb21tb25MaWJDb25maWcuYXhvbmF0b3JYMVVybCkuc3Vic2NyaWJlKFxuICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgaXNBcHBDaGFuZ2VkQWZ0ZXJQdWJsaXNoID0gcmVzcG9uc2U/LmRhdGE/LmRldGFpbHM/LmlzX2FwcF9jaGFuZ2VkX2VkaXRlZF9hZnRlcl9wdWJsaXNoIHx8IGZhbHNlO1xuICAgICAgICB0aGlzLmlzQXBwQ2hhbmdlZEFmdGVyUHVibGlzaCA9IGlzQXBwQ2hhbmdlZEFmdGVyUHVibGlzaDtcblxuICAgICAgICB0aGlzLmlzQXBwQ2hhbmdlZEFmdGVyUHVibGlzaCA9IHRydWU7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiRGV0YWlscyBGb3VuZFwiKVxuICAgICAgICAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gdG8gdXBkYXRlIHRoZSB2aWV3XG4gICAgICAgIC8vIHRoaXMuZGV0ZWN0Q2hhbmdlcygpOyAvLyA8LS0tIENhbGwgZGV0ZWN0Q2hhbmdlcygpIGhlcmVcblxuICAgICAgfSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBhcHAgZGV0YWlsczonLCBlcnJvcik7XG4gICAgICB9XG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmVycm9yKCdhcHBWZXJzaW9uSWQgaXMgbWlzc2luZyBvciBpbnZhbGlkIGluIHRoZSBmbGF0dGVuIG9iamVjdDonLCBmbGF0dGVuKTtcbiAgfVxufVxuXG5cbmFzeW5jICBpbnN0YWxsQXBwKHVzZXJJbnB1dDogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vXG4gIFxuICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoICdJbnN0YWxsaW5nIEFwcC4uLicsIEF4b1NuYWNrQmFyVHlwZS5pbmZvKTtcbiAgY29uc3QgbG9hZGluZ0RpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oTG9hZGluZ0FwcGluc3RhbGxDb21wb25lbnQsIHtcbiAgICB3aWR0aDogJzYwMHB4JyxcbiAgICBkYXRhOiB7IGxvYWRpbmdNZXNzYWdlOiAnSW5zdGFsbGluZyBhcHAsIHBsZWFzZSB3YWl0Li4uJyB9LFxuICAgIGRpc2FibGVDbG9zZTogdHJ1ZVxuICB9KTtcbiAgLy9jb25zdCBsb2FkaW5nRGlhbG9nUmVmID0gdGhpcy5vcGVuTG9hZGluZ0RpYWxvZ1dpdGhNZXNzYWdlKCdQbGVhc2Ugd2FpdC4gSW5zdGFsbGluZyBpbiBwcm9ncmVzcy4uLicpO1xuICBcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgcmVxdWVzdFN0cmluZzogdXNlcklucHV0LFxuICAgICAgc2Vjb25kU3RyaW5nOiBjYXRlZ29yeVxuICAgIH07IFxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwLnBvc3Q8c3RyaW5nPignSW5zdGFsbEFwcCcsIGRhdGEsIHtcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgLy8gU2V0IGNvbnRlbnQgdHlwZSB0byBhcHBsaWNhdGlvbi9qc29uXG4gICAgICB9KSxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZVxuICAgIH0pLnRvUHJvbWlzZSgpO1xuXG4gICAgLy9jb25zb2xlLmxvZygnUmVzcG9uc2UgZnJvbSBzZXJ2ZXI6JywgcmVzcG9uc2UpOyBcbiAgICBcbiAgICAvL2NvbnN0IHJlc3BvbnNlT2JqZWN0ID0gSlNPTi5wYXJzZShyZXNwb25zZSk7XG4gICAgXG4gICAgXG4gIC8vICAgaWYgKHJlc3BvbnNlKSB7XG5cbiAgLy8gICAgIGlmKHJlc3BvbnNlT2JqZWN0LnN0YXR1cz09XCJzdWNjZXNzXCIpe1xuICAvLyAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdBcHAgaW5zdGFsbGVkIHN1Y2Nlc3NmdWxseScsIEF4b1NuYWNrQmFyVHlwZS5zdWNjZXNzKTtcbiAgLy8gICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAvLyAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gIC8vICAgICB9LCAxNTAwMCk7XG4gIC8vICAgfSBlbHNlIGlmKHJlc3BvbnNlT2JqZWN0LnN0YXR1cz09J2ZhaWx1cmUnKSB7XG4gIC8vICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0Zvcm0gTm90IEZvdW5kIGluIHRoaXMgYXBwJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgLy8gICB9XG4gIC8vICAgICBlbHNlIHtcbiAgLy8gICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignT29wcyEgU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2hpbGUgaW5zdGFsbGluZyB0aGUgYXBwLicsIEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gICAgICBcbiAgLy8gICAgIGNvbnNvbGUuZXJyb3IoQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgLy8gICB9fVxuICAvLyB9IGNhdGNoIChlcnJvcikge1xuICAvLyAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluc3RhbGxpbmcgYXBwOicsIGVycm9yKTtcbiAgLy8gICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ09vcHMhIFNvbWV0aGluZyB3ZW50IHdyb25nIHdoaWxlIGluc3RhbGxpbmcgdGhlIGFwcC4nLCBBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAvLyAgIC8vdGhpcy5fbG9nZ2luZ1NlcnZpY2UudHJhY2tFdmVudCgnRXJyb3Igb2NjdXJyZWQgd2hpbGUgaW5zdGFsbGluZyBhcHAnLCBlcnJvcik7XG4gIC8vIH1cblxuICAgIFxuICAgICAgLy9jb25zdCByZXNwb25zZU9iamVjdCA9IEpTT04ucGFyc2UocmVzcG9uc2UpO1xuICAgICAgLy9jb25zb2xlLmxvZyhyZXNwb25zZU9iamVjdCk7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIkluc3RhbGxlZEFwcE5hbWVcIix1c2VySW5wdXQpXG4gICAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IHR5cGVvZiByZXNwb25zZSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHJlc3BvbnNlKSA6IHJlc3BvbnNlO1xuICAgICAgXG4gICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgLy9pZiAocmVzcG9uc2VPYmplY3QpIHtcbiAgICAgICAgIGlmIChyZXNwb25zZU9iamVjdC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7ICAgICAgICAgIFxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiaW5zdGFsbHN0YXR1c1wiLFwiVHJ1ZVwiKVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0FwcCBpbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5JywgQXhvU25hY2tCYXJUeXBlLnN1Y2Nlc3MpO1xuICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgIGxvYWRpbmdEaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgICAgICAgIH0sIDIwMDAwKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICBcbiAgICAgICAgICAvLyB9IGVsc2UgaWYgKHJlc3BvbnNlT2JqZWN0LnN0YXR1cyA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgLy8gICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0Zvcm0gTm90IEZvdW5kIGluIHRoaXMgYXBwJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgfWVsc2Uge1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignRm9ybSBjYW5ub3QgYmUgZm91bmQgZm9yIHRoaXMgYXBwJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgICBsb2FkaW5nRGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAgICAgICB9fVxuICAgICAgICBlbHNle1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignT29wcyFTb21ldGhpbmcgd2VudCB3cm9uZyB3aGlsZSBjcmVhdGluZyB0aGUgYXBwJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgICBsb2FkaW5nRGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAgICAgICB9XG4gICAgfSAgIFxuXG5cbiAgICBvcGVuRGVsZXRlQXBwRGlhbG9nKGFwcFZlcnNpb25JZDpudW1iZXIpe1xuICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudCwge1xuICAgICAgICB3aWR0aDogJzMwJScsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHRpdGxlOiAnRGVsZXRlIEFwcCcsXG4gICAgICAgIG1lc3NhZ2U6ICdBcmUgeW91IHN1cmUgd2FudCB0byBkZWxldGUgdGhpcyBhcHA/JyxcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICdEZWxldGUnLFxuICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiAnQ2FuY2VsJyxcbiAgICAgICAgY29uZmlybUJ1dHRvblR5cGU6ICdkZWxldGUnXG4gICAgICB9LFxuICAgICAgcGFuZWxDbGFzczogJ2NvbmZpcm0tbW9kYWwtY29udGFpbmVyJ1xuICAgICAgfSk7XG5cbiAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgdGhpcy5kZWxldGVBcHAoYXBwVmVyc2lvbklkKTsgLy8gUHJvY2VlZCB3aXRoIGRlbGV0aW9uXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGRlbGV0ZUFwcChhcHBWZXJzaW9uSWQ6bnVtYmVyKTogdm9pZCB7XG4gICAgaWYodGhpcy5oYXNBcHBCdWlsZGVyUGVybWlzc2lvbil7XG4gICAgICB0aGlzLl9mbGF0dGVuU2VydmljZS5nZXRGbGF0dGVuRGF0YShhcHBWZXJzaW9uSWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbCksXG4gICAgICAgICAgICAgIHN3aXRjaE1hcCgoZmxhdHRlbikgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGZsYXR0ZW4gJiYgZmxhdHRlbi5hcHBJZCAhPT0gdW5kZWZpbmVkICYmIGZsYXR0ZW4udmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBwSWQgPSBmbGF0dGVuLmFwcElkLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBwVmVyc2lvbiA9IGZsYXR0ZW4udmVyc2lvbi50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFwcFY9YXBwVmVyc2lvbklkO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQXBwIHZlcnNpb24gSWQ6XCIrYXBwVmVyc2lvbklkKTtcblxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YT17XG4gICAgICAgICAgICAgICAgICAgICAgICBcIkFwcCBJZFwiIDogZmxhdHRlbi5hcHBJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQXBwIE5hbWVcIiA6IGZsYXR0ZW4uYXBwTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQXBwIHZlcnNpb25cIiA6IGZsYXR0ZW4udmVyc2lvblxuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdGZXRjaGVkIGFwcCBkZXRhaWxzIGZyb20gZmxhdHRlbjonLCB7IGFwcElkLCBhcHBWZXJzaW9uIH0pO1xuICBcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbXBBcHBMaXN0U2VydmljZS5kZWxldGVBcHAoYXBwSWQsIGFwcFZlcnNpb24udG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBvY2N1cnJlZCB3aGlsZSBkZWxldGluZyBhcHA6JywgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgZXJyb3IsIGUuZy4sIGRpc3BsYXkgYSBtZXNzYWdlIG9yIHBlcmZvcm0gYWRkaXRpb25hbCBhY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yOiBmbGF0dGVuIG9iamVjdCBvciBpdHMgcHJvcGVydGllcyBhcmUgdW5kZWZpbmVkLicpO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBmbGF0dGVuIG9yIGl0cyBwcm9wZXJ0aWVzIGFyZSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcignRmxhdHRlbiBvYmplY3Qgb3IgaXRzIHByb3BlcnRpZXMgYXJlIHVuZGVmaW5lZCcpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgc3VjY2VzcyByZXNwb25zZSBoZXJlIGlmIG5lZWRlZFxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0RlbGV0ZSBhcHAgc3VjY2VzczonLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZGVsZXRlZCBhcHAgZnJvbSB0aGUgYXBwTGlzdFxuICAgICAgICAgICAgICAgICB0aGlzLmFwcExpc3QgPSB0aGlzLmFwcExpc3QuZmlsdGVyKGFwcCA9PiBhcHAuYXBwVmVyc2lvbklkICE9PSBhcHBWZXJzaW9uSWQpO1xuICAgICAgICAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0FwcCBkZWxldGVkIHN1Y2Nlc3NmdWxseScsIEF4b1NuYWNrQmFyVHlwZS5zdWNjZXNzKTtcbiAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2luZ1NlcnZpY2UudHJhY2tFdmVudCgnQXBwIGRlbGV0ZWQnLCB0aGlzLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgLy8gTWFudWFsbHkgdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIHRvIHVwZGF0ZSB0aGUgdmlld1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpOyAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgZXJyb3IgaGVyZSBpZiBuZWVkZWRcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0RlbGV0ZSBhcHAgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdQZXJtaXNzaW9uIERlbmllZCcsIEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gICAgICAgIH1cbiAgfVxuICAgIFxuICBcblxucHJpdmF0ZSBvcGVuTG9hZGluZ0RpYWxvZ1dpdGhNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBcbiAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihMb2FkaW5nQXBwaW5zdGFsbENvbXBvbmVudCwge1xuICAgIHdpZHRoOiAnNTAwcHgnLFxuICAgIFxuICAgIHBhbmVsQ2xhc3M6ICdhcHAtbG9hZGluZy1kaWFsb2cnLFxuICAgIGRhdGE6IHsgbWVzc2FnZSwgdHlwZTogJ1lvdXIgYXBwIGlzIGJlaW5nIFB1Ymxpc2hlZC4uLicgfSxcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBkaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgIC8vdGhpcy5vcGVuU3VjY2Vzc0RpYWxvZygndmVyc2lvbiBwdWJsaXNoZWQgc3VjY2Vzc2Z1bGx5IScpO1xuICAgICAgcmVzb2x2ZSgpOyAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIGFmdGVyIGNsb3NpbmcgdGhlIGRpYWxvZ1xuICAgIH0sIDEzODAwKTsgLy8gMTMuNiBzZWNvbmRzIGluIG1pbGxpc2Vjb25kc1xuICB9KTtcbn1cblxucHJpdmF0ZSBvcGVuU3VjY2Vzc0RpYWxvZyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgLy9cbiAgdGhpcy5fZmxhdHRlblNlcnZpY2UuZmxhdHRlbiQucGlwZShcbiAgICB0YWtlKDEpLFxuICAgIHN3aXRjaE1hcCgoZmxhdHRlbikgPT4ge1xuICAgICAgaWYgKCFmbGF0dGVuIHx8ICFmbGF0dGVuLmFwcFZlcnNpb25JZCkge1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcignRmxhdHRlbiBvYmplY3Qgb3IgaXRzIHByb3BlcnRpZXMgYXJlIHVuZGVmaW5lZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcmtKb2luKHtcbiAgICAgICAgZmxhdHRlbjogb2YoZmxhdHRlbiksXG4gICAgICAgIGFwcERldGFpbHM6IHRoaXMuX21wQXBwTGlzdFNlcnZpY2UuZmV0Y2hBcHBEZXRhaWxzKGZsYXR0ZW4uYXBwVmVyc2lvbklkLCB0aGlzLmNvbW1vbkxpYkNvbmZpZy5heG9uYXRvclgxVXJsKS5waXBlKFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBhcHAgZGV0YWlsczonLCBlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfSlcbiAgKS5zdWJzY3JpYmUoKHsgZmxhdHRlbiwgYXBwRGV0YWlscyB9KSA9PiB7XG4gICAgY29uc29sZS5sb2coJ2ZldGNoQXBwRGV0YWlscyBmdW5jdGlvbiBjYWxsZWQgNCcpO1xuICAgIHRoaXMuaXNBcHBDaGFuZ2VkQWZ0ZXJQdWJsaXNoID0gYXBwRGV0YWlscz8uZGF0YT8uZGV0YWlscz8uaXNfYXBwX2NoYW5nZWRfZWRpdGVkX2FmdGVyX3B1Ymxpc2ggfHwgZmFsc2U7IC8vIFNldCBpc0FwcENoYW5nZWRBZnRlclB1Ymxpc2ggYmFzZWQgb24gdGhlIEFQSSByZXNwb25zZVxuICAgIC8vIEZldGNoIHRoZSBtaW5vciB2ZXJzaW9uIGZyb20gZ2V0VmVyc2lvbkxpc3RcbiAgICB0aGlzLl9jb21tb25TZXJ2aWNlLmdldFZlcnNpb25MaXN0KGZsYXR0ZW4uYXBwSWQsIGZsYXR0ZW4udmVyc2lvbikuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGxldCBhcHBNaW5vclZlcnNpb24gPSAnVW5rbm93bic7IC8vIERlZmF1bHQgdmFsdWUgaWYgbWlub3IgdmVyc2lvbiBpcyBub3QgZm91bmRcbiAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LnYgJiYgcmVzdWx0LnYudmVyc2lvbnNsaXN0ICYmIHJlc3VsdC52LnZlcnNpb25zbGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFwcE1pbm9yVmVyc2lvbiA9IHJlc3VsdC52LnZlcnNpb25zbGlzdFswXS5hcHBtaW5vcnZlcnNpb247XG4gICAgICB9XG4gICAgICBjb25zdCBhcHBOYW1lID0gZmxhdHRlbj8uYXBwTmFtZSB8fCAnWW91ciBBcHAnO1xuICAgICAgICBjb25zdCBhcHBWZXJzaW9uID0gZmxhdHRlbj8udmVyc2lvbiB8fCAndmVyc2lvbic7XG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NNZXNzYWdlID0gYEFwcDogJHthcHBOYW1lfSB2ZXJzaW9uICR7YXBwTWlub3JWZXJzaW9ufSBpcyBJbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5LmA7XG4gICAgICAgIGNvbnN0IGFwcGhlYWRpbmcgPWBJbnN0YWxsZWRgXG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NEaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFN1Y2Nlc3NEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICB3aWR0aDogJzUwMHB4JyxcbiAgICAgICAgICBkYXRhOiB7IG1lc3NhZ2U6IHN1Y2Nlc3NNZXNzYWdlfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNhcGl0YWxpemVXb3JkcyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHJcbiAgICAuc3BsaXQoJyAnKVxuICAgIC5tYXAod29yZCA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSlcbiAgICAuam9pbignICcpO1xufVxuXG5cbiAgLyoqXG4gICAqIE9uIGRlc3Ryb3lcbiAgICovXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIFVuc3Vic2NyaWJlIGZyb20gYWxsIHN1YnNjcmlwdGlvbnNcbiAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5uZXh0KCk7XG4gICAgdGhpcy5fdW5zdWJzY3JpYmVBbGwuY29tcGxldGUoKTtcbiAgfVxuXG4gIGRpc2FibGVRUihhcHBWZXJzaW9uSWQ6IGFueSAsIGluZGV4OiBudW1iZXIpe1xuICAgIGxldCBkYXRhID0ge1xuICAgICAgYXBwVmVyc2lvbklkIDogYXBwVmVyc2lvbklkXG4gICAgfTtcbiAgXG4gICAgdGhpcy5fZGF0YVZpZXdGaWx0ZXJzU2VydmljZS5kaXNhYmxlUVIoZGF0YSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignUVIgY29kZSBkaXNhYmxlZCBzdWNjZXNzZnVsbHknLCBBeG9TbmFja0JhclR5cGUuc3VjY2Vzcyk7XG4gICAgICAgICAgdGhpcy5fbG9nZ2luZ1NlcnZpY2UudHJhY2tFdmVudCgnUVIgRGlzYWJsZWQnLHtyZXNwb25zZX0pO1xuICAgICAgICAgIHRoaXMuYXBwTGlzdFtpbmRleF0ucXJfc3RhdHVzID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnJvcik7XG4gICAgICAgICAgLy8gSGFuZGxlIHRoZSBlcnJvclxuICAgICAgICB9XG4gICAgICApOyAgXG4gIH1cblxuICBkaXNhYmxlUVJEaWFsb2coYXBwVmVyc2lvbklkOiBhbnksIGluZGV4OiBudW1iZXIpe1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnMzAlJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdGl0bGU6ICdEaXNhYmxlIFFSJyxcbiAgICAgICAgbWVzc2FnZTogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkaXNhYmxlIFFSIGZvciB0aGlzIGZvcm0/JyxcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICdEaXNhYmxlJyxcbiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogJ0NhbmNlbCcsXG4gICAgICAgIGNvbmZpcm1CdXR0b25UeXBlOiAnZGVsZXRlJ1xuICAgICAgfSxcbiAgICAgIHBhbmVsQ2xhc3M6ICdjb25maXJtLW1vZGFsLWNvbnRhaW5lcidcbiAgICB9KTtcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlUVIoYXBwVmVyc2lvbklkLCBpbmRleCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRVc2VyUGVybWlzc2lvbnMoKSB7XG4gICAgdGhpcy5fY29tbW9uU2VydmljZS5nZXRVc2VyRGV0YWlsKHRydWUpLnN1YnNjcmliZShcbiAgICAgIChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09ICdzdWNjZXNzJyAmJiByZXNwb25zZS51ZCkge1xuICAgICAgICAgIHRoaXMucGVybWlzc2lvbnMgPSByZXNwb25zZS51ZC5wZXJtaXNzaW9uczsgLy8gRXh0cmFjdCBwZXJtaXNzaW9uc1xuICAgICAgICAgIHRoaXMuaGFzT3JnVXNlckFjY2VzcyA9IHRoaXMucGVybWlzc2lvbnMuaW5jbHVkZXMoJ09SR19JQU0nKTsgLy8gQ2hlY2sgaWYgJ09SR19JQU0nIGlzIGluIHRoZSBwZXJtaXNzaW9ucyBhcnJheVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIFNob3cgb3ZlcmxheSBvbmx5IGlmICdBQ0NFU1NfV0VCX1BPUlRBTCcgcGVybWlzc2lvbiBpcyBub3QgcHJlc2VudFxuICAgICAgICAgIHRoaXMuc2hvd1dlYlBvcnRhbEFjY2Vzc092ZXJsYXkgPSAhdGhpcy5wZXJtaXNzaW9ucy5pbmNsdWRlcygnQUNDRVNTX1dFQl9QT1JUQUwnKTtcbiAgICAgICAgICB0aGlzLmhhc0FwcEJ1aWxkZXJQZXJtaXNzaW9uID0gdGhpcy5wZXJtaXNzaW9ucy5pbmNsdWRlcyhcIkFQUF9CVUlMREVSXCIpICYmIHRoaXMucGVybWlzc2lvbnMuaW5jbHVkZXMoXCJBQ0NFU1NfV0VCX1BPUlRBTFwiKTtcblxuICAgICAgIFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHVzZXIgZGV0YWlsczonLCBlcnJvcik7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBpc1Jlc3RyaWN0ZWRVcmwoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVzdHJpY3RlZFVybHMgPSBbXG4gICAgICAnaHR0cHM6Ly9hbmRyb21lZGEtY29udGFpbmVyLXFhLmF4b25hdG9yLmNvbS9hcHBzJyxcbiAgICAgICdodHRwczovL2xvY2FsaG9zdDo0MjAxL2FwcHMnLFxuICAgICAgJ2h0dHBzOi8vd2ViLmF4b25hdG9yLmNvbS9hcHBzJ1xuICAgIF07XG4gICAgcmV0dXJuIHJlc3RyaWN0ZWRVcmxzLmluY2x1ZGVzKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBmbGV4LWF1dG8gaC1mdWxsLWFwcExpc3QgbXktYXBwLWxpc3Qgb3ZlcmZsb3ctaGlkZGVuIHBhZ2UtYmFja2dyb3VuZCBheG8tZm9udFwiPlxuICAgIDwhLS0gSGVhZGVyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJzdGlja3kgdG9wLTAgYmctd2hpdGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1saXN0LW1haW4taGVhZGVyIHJlbGF0aXZlIGZsZXggZmxleC0wIGgtMTIgei00OSBib3gtYm9yZGVyIHB4LTZcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtYXV0byBpdGVtcy1jZW50ZXIgbWluLXctMFwiPiA8aW1nIGNsYXNzPVwidy0zNiBoLTdcIiBzcmM9XCJhc3NldHMvaW1hZ2VzL2xvZ28vYXhvLWxvZ28uc3ZnXCIgYWx0PVwiTG9nbyBpbWFnZVwiPiA8c3BhbiBjbGFzcz1cImJldGFcIj5CZXRhPC9zcGFuPiA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtYXV0byBqdXN0aWZ5LWVuZCBpdGVtcy1jZW50ZXIgbWluLXctMCBnYXAtM1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwibXQtMS41XCI+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=
1210
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2F4LWNvbW1vbi11aS1saWIvc3JjL2xpYi9hcHAtbGlzdC9hcHAtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvYXgtY29tbW9uLXVpLWxpYi9zcmMvbGliL2FwcC1saXN0L2FwcC1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlDQUFpQztBQUNqQyx1REFBdUQ7QUFDdkQsMEJBQTBCO0FBQzFCLHFFQUFxRTtBQUVyRSxPQUFPLEVBQUUsU0FBUyxFQUFVLGlCQUFpQixFQUFhLEtBQUssRUFBRSxNQUFNLEVBQWlCLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0osT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBcUIsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RCxPQUFPLEVBQStCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEUsT0FBTyxFQUFFLFVBQVUsRUFBTyxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM3RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNy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QUFLO1lBQ0csY0FBYztrQkFBdEIsS0FBSztZQUNHLGFBQWE7a0JBQXJCLEtBQUs7WUFDRyxVQUFVO2tCQUFsQixLQUFLO1lBQ0ksa0JBQWtCO2tCQUEzQixNQUFNO1lBQ0csWUFBWTtrQkFBckIsTUFBTTtZQUNHLGVBQWU7a0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBhcnJvdy1wYXJlbnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmcgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJhZGl4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtZnVuY3Rpb24tcmV0dXJuLXR5cGUgKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBPbkRlc3Ryb3ksIElucHV0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIEV2ZW50RW1pdHRlciwgQ2hhbmdlRGV0ZWN0b3JSZWYsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1BVF9TRUxFQ1RfQ09ORklHIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IFJvdXRlciAsICBOYXZpZ2F0aW9uRXh0cmFzfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBeG9TbmFja0JhclNlcnZpY2UsIEF4b1NuYWNrQmFyVHlwZSB9IGZyb20gJy4uL2F4by1zbmFjay1iYXIvYXhvLXNuYWNrLWJhci5zZXJ2aWNlJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9hdXRoL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uL2NvcmUvdXNlci91c2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlciB9IGZyb20gJy4uL2NvcmUvdXNlci91c2VyLnR5cGVzJztcbmltcG9ydCB7IEFwcExpc3REdG8gfSBmcm9tICcuL2FwcC1saXN0LWR0byc7XG5pbXBvcnQgeyBNeUFwcExpc3RTZXJ2aWNlIH0gZnJvbSAnLi9teS1hcHAtbGlzdC5zZXJ2aWNlJztcbmltcG9ydCB7IE9yZ2FuaXphdGlvbkxpc3REdG8gfSBmcm9tICcuL29yZ2FuaXphdGlvbi1saXN0LWR0byc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgRmxhdHRlblNlcnZpY2UgfSBmcm9tICcuLi9mbGF0dGVuLW1vZHVsZS9mbGF0dGVuLnNlcnZpY2UnO1xuaW1wb3J0IHsgSUZsYXR0ZW4gfSBmcm9tICcuLi9jb21tb24tdXRpbHMvaUZsYXR0ZW4nO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDb29raWVTZXJ2aWNlIH0gZnJvbSAnbmd4LWNvb2tpZS1zZXJ2aWNlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEVubGlnaHRlbkxpYk1vZHVsZSB9IGZyb20gJy4uL2VubGlnaHRlbi1saWIvZW5saWdodGVuLWxpYi5tb2R1bGUnO1xuaW1wb3J0IHsgUXJkaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9xcmRpYWxvZy9xcmRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9nZ2luZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9sb2dnaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9hZGluZ0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2xvYWRpbmctZGlhbG9nL2xvYWRpbmctZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTG9hZGluZ0FwcGluc3RhbGxDb21wb25lbnQgfSBmcm9tICcuLi9sb2FkaW5nLWFwcGluc3RhbGwvbG9hZGluZy1hcHBpbnN0YWxsLmNvbXBvbmVudCc7IFxuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi5zZXJ2aWNlJztcbmltcG9ydCB7IFN1Y2Nlc3NEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9zdWNjZXNzLWRpYWxvZy9zdWNjZXNzLWRpYWxvZy5jb21wb25lbnQnOyBcbmltcG9ydCB7IHRha2UsICB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGZvcmtKb2luLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbG9jYWxlIH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IEFwcENyZWF0ZURpYWxvZ0NvbXBvbmVudENvbXBvbmVudCB9IGZyb20gJy4uL2FwcC1jcmVhdGUtZGlhbG9nLWNvbXBvbmVudC9hcHAtY3JlYXRlLWRpYWxvZy1jb21wb25lbnQuY29tcG9uZW50JzsgXG5cbi8vaW1wb3J0IHsgQ29uc29sZSB9IGZyb20gJ2NvbnNvbGUnO1xuaW1wb3J0IHsgQ29tbW9uTGliQ29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24tbGliLWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBEYXRhVmlld0ZpbHRlcnNTZXJ2aWNlIH0gZnJvbSAnLi4vZGF0YS12aWV3LWxpYi9kYXRhLXZpZXctZmlsdGVycy9kYXRhLXZpZXctZmlsdGVycy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vc2hhcmVkL2NvbWZpcm1hdGlvbi1tb2RhbC9jb25maXJtYXRpb24tbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IFN1YnNjcmliZWRQbGFuTmFtZSB9IGZyb20gJy4uL3N1YnNjcmliZWRQbGFuTmFtZS5zZXJ2aWNlJztcbmltcG9ydCB7IFN0cmlwZVNlcnZpY2UgfSBmcm9tICcuLi9zdHJpcGUuc2VydmljZSc7XG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1hcHAtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hcHAtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FwcC1saXN0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE1BVF9TRUxFQ1RfQ09ORklHLFxuICAgICAgdXNlVmFsdWU6IHsgb3ZlcmxheVBhbmVsQ2xhc3M6ICdvcmdhbml6YXRpb24tbGlzdC1vdmVybGF5LXBhbmVsJyB9LFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFwcExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGN1cnJlbnRPcmc6c3RyaW5nO1xuICBASW5wdXQoKSBhcHBMaXN0OiBBcnJheTxBcHBMaXN0RHRvPjtcbiAgQElucHV0KCkgYmFzZVVybDogc3RyaW5nO1xuICBASW5wdXQoKSBvcmdhbml6YXRpb25MaXN0OiBBcnJheTxPcmdhbml6YXRpb25MaXN0RHRvPiA9IFtdO1xuICBASW5wdXQoKSBzZWxlY3RlZE9yZ2FuaXphdGlvbjogT3JnYW5pemF0aW9uTGlzdER0bztcbiAgQElucHV0KCkgdXNlcjogVXNlcjtcbiAgQElucHV0KCkgbGlzdFR5cGU6IHN0cmluZztcbiAgQElucHV0KCkgc2hvd0NyZWF0ZUJ1dHRvbjpib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNob3dRUkljb246Ym9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93RG90c09wdGlvbjpib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNob3dDdXN0b21pemU6Ym9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93QWRkQnRuOmJvb2xlYW4gPSBmYWxzZTtcbiAgQE91dHB1dCgpIHN3aXRjaEFjY291bnRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb3BlbkFwcEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSB1cGRhdGVMaXN0RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgLy8gdXNlcjogVXNlcjtcbiAgaXNBcHBDaGFuZ2VkQWZ0ZXJQdWJsaXNoOiBib29sZWFuID0gZmFsc2U7XG4gIHVzZXJOYW1lOiBzdHJpbmc7XG4gIGFwcFZlcnNpb25JZDogbnVtYmVyO1xuICB1c2VyRW1haWw6IHN0cmluZztcbiAgZnVsbFZlcnNpb246IHN0cmluZztcbiAgZnVsbFZlcnNpb25zOiBzdHJpbmdbXSA9IFtdO1xuICB1c2VySW1hZ2U6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nID0gJyc7XG4gIG1pbm9yVmVyc2lvbjogc3RyaW5nID0gJyc7XG4gIGFwcElkOiBzdHJpbmcgPScnO1xuICBidWlsZGVyVXJsOiBzdHJpbmc7XG4gIG9wZW5Qb3B1cE1lbnU6IG51bWJlcjtcbiAgZ3JhZGllbnRzID0gW1xuICAgICdyYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDgwJSAyMCUsICNEQjZEODEsICNCRjQ1ODEpJyxcbiAgICAncmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4MCUgMjAlLCAjNDQ5MUQ5LCAjNDU1OUJGKScsXG4gICAgJ3JhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgODAlIDIwJSwgI0U3QTc3OSwgI0FBNTUyNSknLFxuICAgICdyYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDgwJSAyMCUsICM0NEQ5NTMsICMwRDkyMTIpJ1xuICBdO1xuICBjdXJyZW50VXJsID0gZG9jdW1lbnQuVVJMO1xuICBiYXNlVXNybCA9IGRvY3VtZW50LmJhc2VVUkk7XG4gIHJlZ2V4ID0gL1xcL2FwcHNcXC8oXFxkKylcXC8oXFx3KykvO1xuICBtYXRjaCA9IHRoaXMuY3VycmVudFVybC5tYXRjaCh0aGlzLnJlZ2V4KTtcbiAgcmVpbml0aWFsaXplRm9vdGVyID0gZmFsc2U7XG4gIGRhdGEgPSB7fTtcbiAgcHJldmlvdXNPcmc6c3RyaW5nO1xuXG4gIC8qXG4gICAgICogU3ViamVjdCBvYmplY3Qgd2hpY2ggaGVscHMgdW5zdWJzY3JpYmUgYWxsIHRoZSBzdWJzY3JpYmVkIG9iamVjdHMgaW4gdGhlIGNvbXBvbmVudFxuICAgICAqL1xuICBwcml2YXRlIF91bnN1YnNjcmliZUFsbDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICBvcmdhbml6YXRvbklkOiBudW1iZXI7XG4gIHVzZXJQZXJtaXNzaW9uczogc3RyaW5nW10gPSBbXTsgLy8gVmFyaWFibGUgdG8gaG9sZCB1c2VyIHBlcm1pc3Npb25zXG4gIGhhc09yZ1VzZXJBY2Nlc3M6IGJvb2xlYW47XG4gIGN1cnJlbnRBcHBWZXJzaW9uSWQ6IHN0cmluZztcbiAgc2hvd1dlYlBvcnRhbEFjY2Vzc092ZXJsYXk6IGJvb2xlYW4gPSBmYWxzZTsgLy8gRmxhZyB0byBjb250cm9sIG92ZXJsYXkgZGlzcGxheVxuICBwcml2YXRlIGhhc0NhbGxlZEdldFVzZXJQZXJtaXNzaW9uczogYm9vbGVhbiA9IGZhbHNlOyAvLyBGbGFnIHRvIHRyYWNrIGlmIHRoZSBmdW5jdGlvbiBoYXMgYmVlbiBjYWxsZWRcbiAgcGVybWlzc2lvbnM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2F1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcbiAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29tbW9uTGliQ29uZmlnOiBDb21tb25MaWJDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIF9tcEFwcExpc3RTZXJ2aWNlOiBNeUFwcExpc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgX2F4b1NuYWNrQmFyOiBBeG9TbmFja0JhclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwcml2YXRlIF9mbGF0dGVuU2VydmljZTogRmxhdHRlblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LCAvLyBJbmplY3QgSHR0cENsaWVudFxuICAgIHByaXZhdGUgX2h0dHBDbGllbnQ6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBjb29raWVTZXJ2aWNlOiBDb29raWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBfbG9nZ2luZ1NlcnZpY2UgOiBMb2dnaW5nU2VydmljZSxcbiAgICBwcml2YXRlIF9jb21tb25TZXJ2aWNlOkNvbW1vblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfZGF0YVZpZXdGaWx0ZXJzU2VydmljZTogRGF0YVZpZXdGaWx0ZXJzU2VydmljZSxcbiAgICBwcml2YXRlIF9zdWJzY3JpYmVkUGxhbk5hbWU6IFN1YnNjcmliZWRQbGFuTmFtZSxcbiAgICBwcml2YXRlIHN0cmlwZVNlcnZpY2U6IFN0cmlwZVNlcnZpY2UsXG5cbiAgICBcbiAgKSB7IH1cbiAgLyoqXG4gICAqIEdldHRlciBmb3IgY3VycmVudCB5ZWFyXG4gICAqL1xuICBnZXQgY3VycmVudFllYXIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xuICB9XG5cbiAgc2V0T3BlblBvcHVwTWVudShhcHBJZCkge1xuICAgIHRoaXMub3BlblBvcHVwTWVudSA9IGFwcElkO1xuICAgIGNvbnN0IG92ZXJsYXkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY2RrLW92ZXJsYXktY29udGFpbmVyJyk7XG4gICAgb3ZlcmxheS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgIHRoaXMub3BlblBvcHVwTWVudSA9IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgfVxuXG4gIG9wZW5RUkNvZGVEaWFsb2coKTogdm9pZCB7XG5cbiAgICBjb25zdCBxckRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oUXJkaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnMjUwcHgnLCAvLyBBZGp1c3Qgd2lkdGggYXMgbmVlZGVkXG4gICAgfSk7XG4gIH1cblxuICBuYXZpZ2F0ZXRvT3JnYW5pYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgdXJsTWFwOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgJ2xvY2FsaG9zdDo0MjAwJzogJ2h0dHBzOi8vbG9jYWxob3N0OjQyMDAvJyxcbiAgICAgICdsb2NhbGhvc3Q6NDIwMSc6ICdodHRwczovL2xvY2FsaG9zdDo0MjAwLycsXG4gICAgICAnYW5kcm9tZWRhLWJ1aWxkZXItcWEuYXhvbmF0b3IuY29tJzogJ2h0dHBzOi8vYW5kcm9tZWRhLWJ1aWxkZXItcWEuYXhvbmF0b3IuY29tLycsXG4gICAgICAnYW5kcm9tZWRhLWNvbnRhaW5lci1xYS5heG9uYXRvci5jb20nOiAnaHR0cHM6Ly9hbmRyb21lZGEtYnVpbGRlci1xYS5heG9uYXRvci5jb20vJyxcbiAgICAgICdidWlsZGVyLmF4b25hdG9yLmNvbSc6ICdodHRwczovL2J1aWxkZXIuYXhvbmF0b3IuY29tLycsXG4gICAgICAnd2ViLmF4b25hdG9yLmNvbSc6ICdodHRwczovL2J1aWxkZXIuYXhvbmF0b3IuY29tLydcbiAgICB9O1xuICAgIGNvbnN0IHVybDogc3RyaW5nID0gdXJsTWFwW3dpbmRvdy5sb2NhdGlvbi5ob3N0XSB8fCAnJztcbiAgICBpZiAodGhpcy5tYXRjaCkge1xuICAgICAgY29uc3QgdXNlckxpc3RVcmwgPSBgYXBwcy8ke3RoaXMubWF0Y2hbMV19L3VzZXJzYDsgLy8gZHluYW1pYyBwYXJ0IGJhc2VkIG9uIG1hdGNoXG4gICAgICB3aW5kb3cub3Blbih1cmwgKyB1c2VyTGlzdFVybCwgJ19zZWxmJyk7IC8vIG9wZW4gZHluYW1pYyBVUkxcbiAgICB9IGVsc2Uge1xuICAgICAgd2luZG93Lm9wZW4odXJsICsgJ29yZ2FuaXphdGlvbicsICdfc2VsZicpOyAvLyBmYWxsYmFjayB0byBvcmdhbml6YXRpb24gcm91dGVcbiAgICB9XG4gIH0gIFxuXG4gIG5hdmlnYXRldG9PcmdhbmlhdGlvblNldHRpbmdzKCk6IHZvaWQge1xuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKCdvcmdhbml6YXRpb24tc2V0dGluZ3MnKTtcbiAgfVxuICBcblxuXG5cbiAgLy8gZGVsZXRlQXBwKGFwcElkOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyk6IHZvaWQge1xuICAvLyAgIHRoaXMuX21wQXBwTGlzdFNlcnZpY2UuZGVsZXRlQXBwKGFwcElkLCB2ZXJzaW9uKVxuICAvLyAgICAgLnBpcGUoXG4gIC8vICAgICAgIHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbCksXG4gIC8vICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gIC8vICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIG9jY3VycmVkIHdoaWxlIGRlbGV0aW5nIGFwcDonLCBlcnJvcik7XG4gIC8vICAgICAgICAgLy8gdGhpcy5fc25hY2tiYXJTZXZpY2Uub3BlblNuYWNrQmFyKCdFcnJvciBvY2N1cnJlZCB3aGlsZSBkZWxldGluZyBhcHAuJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgLy8gICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gIC8vICAgICAgIH0pXG4gIC8vICAgICApXG4gIC8vICAgICAuc3Vic2NyaWJlKFxuICAvLyAgICAgICAvLyByZXNwb25zZSA9PiB0aGlzLmhhbmRsZURlbGV0ZVN1Y2Nlc3MocmVzcG9uc2UpLFxuICAvLyAgICAgICAvLyBlcnJvciA9PiB0aGlzLmhhbmRsZURlbGV0ZUVycm9yKGVycm9yKVxuICAvLyAgICAgKTtcbiAgLy8gfVxuXG4gIC8vIEFzc3VtaW5nIF9kZWxldGVTZXJ2aWNlIGhhcyBhIGRlbGV0ZUFwcCBtZXRob2QgdGhhdCBoYW5kbGVzIGFwcCBkZWxldGlvblxuICAvLyBBbHNvLCBhc3N1bWluZyBoYW5kbGVEZWxldGVTdWNjZXNzIGFuZCBoYW5kbGVEZWxldGVFcnJvciBhcmUgbWV0aG9kcyB0byBoYW5kbGUgc3VjY2VzcyBhbmQgZXJyb3Igc2NlbmFyaW9zXG5cbiAgcGFkWmVybyh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB2YXIgcGFkZGluZz0nJztcbiAgICBsZXQgbGVuZ3RoPXZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoO1xuICAgIGlmKGxlbmd0aD09MSlcbiAgICB7XG4gICAgICBwYWRkaW5nPScwMCcrdmFsdWVcbiAgICB9XG4gICAgZWxzZSBpZihsZW5ndGg9PTIpXG4gICAge1xuICAgICAgcGFkZGluZz0nMCcrdmFsdWVcbiAgICB9XG4gICAgZWxzZSBpZihsZW5ndGg9PTMpXG4gICAge1xuICAgICAgcGFkZGluZz12YWx1ZVxuICAgIH1cbiAgICByZXR1cm4gcGFkZGluZztcbiAgfVxuXG4gIHB1YmxpYyBoYXNBcHBCdWlsZGVyUGVybWlzc2lvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGdldFVzZXJEZXRhaWxzKCk6IHZvaWQge1xuICAgIHRoaXMuX2NvbW1vblNlcnZpY2UuZ2V0VXNlckRldGFpbCgpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlQWxsKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyB1c2VyIGRldGFpbHM6JywgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgodXNlclJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCB1c2VyUGVybWlzc2lvbnMgPSB1c2VyUmVzcG9uc2U/LnVkPy5wZXJtaXNzaW9ucyB8fCBbXTtcbiAgICAgICAgICAvLyBDaGVjayBpZiBcIkFQUF9CVUlMREVSXCIgcGVybWlzc2lvbiBleGlzdHNcbiAgICAgICAgICB0aGlzLmhhc0FwcEJ1aWxkZXJQZXJtaXNzaW9uID0gdXNlclBlcm1pc3Npb25zLmluY2x1ZGVzKFwiQVBQX0JVSUxERVJcIikgJiYgdXNlclBlcm1pc3Npb25zLmluY2x1ZGVzKFwiQUNDRVNTX1dFQl9QT1JUQUxcIik7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbk9wdGlvbnMgPSB7XG4gICAgICAgICAgYWNjb3VudElkOiByZXNwb25zZS51ZC5sYXN0dXNlZF9hY2NvdW50XG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICB0aGlzLnN0cmlwZVNlcnZpY2UuZ2V0U3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbk9wdGlvbnMpLnN1YnNjcmliZShcbiAgICAgICAgICAoc3Vic2NyaXB0aW9uUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoc3Vic2NyaXB0aW9uUmVzcG9uc2UgJiYgc3Vic2NyaXB0aW9uUmVzcG9uc2UubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBzdWJzY3JpcHRpb25JbmZvID0gc3Vic2NyaXB0aW9uUmVzcG9uc2VbMF07XG4gICAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIFByb2R1Y3RJZDogc3Vic2NyaXB0aW9uSW5mby5pdGVtc1swXS5wcm9kdWN0SWRcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIHRoaXMuc3RyaXBlU2VydmljZS5nZXRQcm9kdWN0RGV0YWlscyhwcm9kdWN0T3B0aW9ucykuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgIChwcm9kdWN0UmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3N1YnNjcmliZWRQbGFuTmFtZS5zdWJzY3JpYmVkUGxhbk5hbWUgPSBwcm9kdWN0UmVzcG9uc2UubmFtZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgcHJvZHVjdCBkZXRhaWxzOicsIGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHN1YnNjcmlwdGlvbiBkZXRhaWxzOicsIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgfVxuICBcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdldFVzZXJQZXJtaXNzaW9ucygpO1xuICAgXG4gICAgLy8gdGhpcy5jdXJyZW50QXBwVmVyc2lvbklkID0gd2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoXCIvXCIpWzRdO1xuICAgIC8vIHRoaXMuX25hdmlnYXRpb24udXBkYXRlQ2xhc3NpY05hdmlnYXRpb25Sb3V0ZXModGhpcy5jdXJyZW50QXBwVmVyc2lvbklkLnRvU3RyaW5nKCkpO1xuXG4gICAgLy8gRmV0Y2ggdXNlciBkZXRhaWxzXG4gICAgXG4gICAgXG4gICAgaWYgKHRoaXMudXNlcikge1xuICAgICAgdGhpcy51c2VyRW1haWwgPSB0aGlzLnVzZXIuZW1haWw7XG4gICAgICB0aGlzLnVzZXJOYW1lID0gdGhpcy51c2VyWydmbmFtZSddICsgJyAnICsgdGhpcy51c2VyWydsbmFtZSddO1xuICAgICAgdGhpcy51c2VySW1hZ2UgPSB0aGlzLnVzZXJbJ3VpbWcnXTtcbiAgICB9XG5cbiAgICB0aGlzLmdldFVzZXJEZXRhaWxzKCk7XG4gICAgXG4gIC8vQVhFLUk2Mzc2XG4gIC8vSXNzdWUgOiBQYXJhbWV0ZXJpemVkIHVybCB3YXMgbm90IG1haW50YWluIChhcHAgaW5zdGFsbGF0aW9uKSwgYXV0aG9yaXphdGlvbiBjYWxsIHNvbWVob3cgbG9zZXMgdGhlIHBhcmFtZXRlcnNcbiAgLy91cmwgc3RvcmFnZSBpcyBtYWludGFpbmVkIGJ5IHRoZSBuYW1lIFwiYXBwbmFtZVwiXG4gIC8vSXQgaXMgc2V0IGluIGF1dGgucmVzb2x2ZXIgYW5kIHJlbW92ZWQgaGVyZVxuICAvL2lmIGFwcG5hbWUgZXhpc3QgaW4gc2Vzc2lvbiB1c2VkIHRoZSBzdG9yZWQgbmFtZSwgaWYgbm90IHVzZWQgdGhlIHZhbHVlIGZyb20gdGhlIHVybFxuICAvL1xudmFyIGFwcE5hbWVjaGVjaz1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXBwbmFtZScpO1xuLy9jb25zb2xlLmxvZyhcIiExMTNcIik7XG4vLyBpZihhcHBOYW1lY2hlY2shPT1udWxsKVxuLy8ge1xuLy8gICBpZihhcHBOYW1lY2hlY2s9PVwiL2FwcHNcIilcbi8vICAge1xuLy8gICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiYXBwbmFtZVwiKTtcbi8vICAgfVxuLy8gfVxuLy8gYXBwTmFtZWNoZWNrPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhcHBuYW1lJyk7XG4vL2NvbnNvbGUubG9nKFwiITExM1wiKTtcbi8vY29uc29sZS5sb2coYXBwTmFtZWNoZWNrKVxuICAvL1xudmFyIGFwcE5hbWVjaGVjaz1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXBwbmFtZScpO1xudmFyIGFwcFB1Ymxpc2hTdGF0dXM9bG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3B1Ymxpc2hzdGF0dXMnKTtcbi8vY29uc29sZS5sb2coXCIhMTEzXCIpO1xuLy8gaWYoYXBwTmFtZWNoZWNrIT09bnVsbClcbi8vIHtcbi8vICAgaWYoYXBwTmFtZWNoZWNrPT1cIi9hcHBzXCIpXG4vLyAgIHtcbi8vICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImFwcG5hbWVcIik7XG4vLyAgIH1cbi8vIH1cbi8vIGFwcE5hbWVjaGVjaz1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXBwbmFtZScpO1xuLy9jb25zb2xlLmxvZyhcIiExMTNcIik7XG4vL2NvbnNvbGUubG9nKGFwcE5hbWVjaGVjaylcbiAgbGV0IGFwcG5hbWU6c3RyaW5nO1xuICBsZXQgY2F0ZWdvcnk6c3RyaW5nO1xuXG4vLyBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuLy8gY29uc3QgYXBwTmFtZUNoZWNrID0gdXJsUGFyYW1zLmdldCgnYXBwbmFtZScpO1xuLy8gY29uc29sZS5sb2coYXBwTmFtZUNoZWNrKVxuLy8gY29uc3QgY2F0ZWdvcnkgPSB1cmxQYXJhbXMuZ2V0KCdjYXRlZ29yeScpO1xuLy8gY29uc29sZS5sb2coY2F0ZWdvcnkpaVxuXG5cbmxldCBJbnN0YWxsQXBwTmFtZTpzdHJpbmc7XG5JbnN0YWxsQXBwTmFtZT1sb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIkluc3RhbGxlZEFwcE5hbWVcIik7XG5pZihJbnN0YWxsQXBwTmFtZSE9bnVsbCl7XG5jb25zdCBjYXBpdGFsaXplZEFwcE5hbWU6IHN0cmluZyA9IHRoaXMuY2FwaXRhbGl6ZVdvcmRzKEluc3RhbGxBcHBOYW1lLnJlcGxhY2UoLy0vZywgJyAnKSk7XG50aGlzLmNoZWNrQW5kUHVibGlzaEFwcChjYXBpdGFsaXplZEFwcE5hbWUpO1xubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJJbnN0YWxsZWRBcHBOYW1lXCIpO1xufVxuaWYgKGFwcE5hbWVjaGVjayAhPT0gbnVsbCkge1xuICAvL1xuICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKGFwcE5hbWVjaGVjay5zcGxpdCgnPycpWzFdKTtcbiAgY29uc3QgYXBwTmFtZVRlbXAgPSB1cmxQYXJhbXMuZ2V0KCdhcHBuYW1lJyk7XG4gIGNvbnN0IGNhdGVnb3J5VGVtcCA9IHVybFBhcmFtcy5nZXQoJ2NhdGVnb3J5Jyk7XG4gIC8vY29uc3QgYXBwTmFtZVRlbXAgPSBhcHBOYW1lY2hlY2suc3BsaXQoJz0nKVsxXS5zcGxpdCgnJicpWzBdOyAvLyBFeHRyYWN0aW5nIGFwcG5hbWUgdmFsdWUgZnJvbSBVUkwgcGFyYW1ldGVyXG4gIC8vbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJJbnN0YWxsZWRBcHBOYW1lXCIsYXBwTmFtZVRlbXApXG4vLyBFeHRyYWN0aW5nIGNhdGVnb3J5IHZhbHVlIGZyb20gVVJMIHBhcmFtZXRlclxuIC8vIGNvbnN0IGNhdGVnb3J5VGVtcCA9IGFwcE5hbWVjaGVjay5zcGxpdCgnY2F0ZWdvcnk9JylbMV07XG4gIC8vXG4gIGlmIChhcHBOYW1lVGVtcCkge1xuICAgIHRoaXMuaW5zdGFsbEFwcChhcHBOYW1lVGVtcCwgY2F0ZWdvcnlUZW1wKS50aGVuKCgpID0+IHtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiYXBwbmFtZVwiKTtcbiAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAvLyBIYW5kbGUgZXJyb3IgaWYgaW5zdGFsbEFwcCBmYWlsc1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW5zdGFsbGluZyBhcHA6JywgZXJyb3IpO1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJhcHBuYW1lXCIpO1xuICAgIH0pO1xuICB9XG5cbi8vIGxldCBhcHBOYW1lOiBzdHJpbmc7IFxuLy8gaWYoYXBwTmFtZWNoZWNrIT09bnVsbCl7XG4vLyAgIGFwcE5hbWU9YXBwTmFtZWNoZWNrLnNwbGl0KCc9JylbMV0uc3BsaXQoJyUyRicpWzBdO1xuLy8gICBpZiAoYXBwTmFtZSkge1xuLy8gICAgIHRoaXMuaW5zdGFsbEFwcChhcHBOYW1lLCkudGhlbigoKSA9PiB7XG4vLyAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImFwcG5hbWVcIik7XG4gICAgICBcbi8vICAgICB9KVxuLy8gICAgIC5jYXRjaChlcnJvciA9PiB7XG4vLyAgICAgICAvLyBIYW5kbGUgZXJyb3IgaWYgaW5zdGFsbEFwcCBmYWlsc1xuLy8gICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW5zdGFsbGluZyBhcHA6JywgZXJyb3IpO1xuLy8gICAgIH0pO1xuLy8gICB9XG4gIFxuICBcbiAgfVxuICBlbHNle1xuICAgIC8vIFZhcmlhYmxlIHRvIHN0b3JlIGFwcG5hbWVcblxuICAgIFxuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbClcbiAgICApLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgYXBwbmFtZSA9IHBhcmFtc1snYXBwbmFtZSddO1xuICAgICAgLy9sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIkluc3RhbGxlZEFwcE5hbWVcIixhcHBuYW1lKTtcbiAgICAgIFxuICAgICAgY2F0ZWdvcnkgPSBwYXJhbXNbJ2NhdGVnb3J5J107XG4gICAgICBcbiAgICBcbiAgICAgIGlmIChhcHBuYW1lKSB7XG4gICAgICAgIC8vIFNwbGl0IHRoZSBhcHBuYW1lIGF0IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mICcvJ1xuICAgICAgICBjb25zdCBhcHBOYW1lUGFydHMgPSBhcHBuYW1lLnNwbGl0KCcvJywgMSk7XG4gICAgICAgIGNvbnN0IGFwcE5hbWUgPSBhcHBOYW1lUGFydHNbMF07IC8vIFN0b3JlIGFwcG5hbWVcbiAgICAgICAgLy9jb25zdCBjYXRlZ29yeSA9IGNhdGVnb3J5OyAvLyBTdG9yZSBjYXRlZ29yeVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImFwcE5hbWU9XCIrYXBwTmFtZSk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiY2F0ZWdvcnk9XCIrY2F0ZWdvcnkpO1xuICAgICAgICBcbiAgICAgICAgLy8gTmF2aWdhdGUgdG8gdGhlIHNhbWUgcm91dGUgd2l0aG91dCBhbnkgcXVlcnkgcGFyYW1ldGVyc1xuICAgICAgICBjb25zdCBuYXZpZ2F0aW9uRXh0cmFzOiBOYXZpZ2F0aW9uRXh0cmFzID0ge1xuICAgICAgICAgIHJlcGxhY2VVcmw6IHRydWUsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCBuYXZpZ2F0aW9uRXh0cmFzKTtcbiAgICAgICAgXG5cbiAgICAgICAgaWYgKGFwcG5hbWUpIHtcbiAgICAgICAgICBcbiAgICAgICAgIFxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwicHVibGlzaHN0YXR1c1wiLFwiRmFsc2VcIilcbiAgICAgICAgICB0aGlzLmluc3RhbGxBcHAoYXBwbmFtZSxjYXRlZ29yeSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgc3VjY2Vzc2Z1bCBpbnN0YWxsYXRpb25cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdBcHAgaW5zdGFsbGVkIE1ldGhvZCBjYWxsZWQ6JywgYXBwbmFtZSwgY2F0ZWdvcnkpO1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJhcHBuYW1lXCIpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBlcnJvciBpZiBpbnN0YWxsQXBwIGZhaWxzXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbnN0YWxsaW5nIGFwcDonLCBlcnJvcik7XG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImFwcG5hbWVcIik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICB9XG4gICAgICAvLyB9IGVsc2Uge1xuICAgICAgLy8gICBjb25zb2xlLmVycm9yKCdhcHBuYW1lIG9yIGNhdGVnb3J5IHF1ZXJ5IHBhcmFtZXRlciBpcyBtaXNzaW5nJyk7XG4gICAgICB9fSk7XG5cbiAgICB9XG4gICAgXG4gICAgLy8gb25jZSB3ZSBmaXggaWRlbnRpdHkgc2VydmVyIEFQSSwgdGhpcyBjb2RlIHdpbGwgYmUgbmVlZGVkIGFnYWluXG4gICAgLy8gU3Vic2NyaWJlIHRvIHVzZXIgY2hhbmdlc1xuICAgIC8vIHRoaXMuX3VzZXJTZXJ2aWNlLnVzZXIkXG4gICAgLy8gLnBpcGUodGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlQWxsKSlcbiAgICAvLyAuc3Vic2NyaWJlKCh1c2VyOiBhbnkpID0+IHtcbiAgICAvLyAgICAgdGhpcy51c2VyID0gdXNlcjtcbiAgICAvLyAgICAgdGhpcy51c2VyRW1haWwgPSB1c2VyLmVtYWlsO1xuICAgIC8vICAgICB0aGlzLnVzZXJOYW1lID0gdXNlci5GaXJzdE5hbWUgKyAnICcrIHVzZXIuTGFzdE5hbWUgO1xuICAgIC8vICAgICB0aGlzLnVzZXJJbWFnZSA9IHVzZXIucGljdHVyZTtcbiAgICAvLyAgICAgLy8gTWFyayBmb3IgY2hlY2tcbiAgICAvLyAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgLy8gfSk7XG5cblxuXG5cbiAgICBjb25zdCB1cmwgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd1cmwnKTtcbiAgICBpZiAodXJsKSB7XG4gICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybDtcbiAgICAgIC8vIFJlbW92ZSBzYXZlZCBkYXRhIGZyb20gc2Vzc2lvblN0b3JhZ2VcbiAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ3VybCcpO1xuXG4gICAgICAvLyBSZW1vdmUgYWxsIHNhdmVkIGRhdGEgZnJvbSBzZXNzaW9uU3RvcmFnZVxuICAgICAgc2Vzc2lvblN0b3JhZ2UuY2xlYXIoKTtcbiAgICB9XG5cbiAgfVxuXG4gIFxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jdXJyZW50T3JnICE9PSB0aGlzLnByZXZpb3VzT3JnKSB7XG4gICAgICB0aGlzLmdldFVzZXJQZXJtaXNzaW9ucygpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMucHJldmlvdXNPcmcgPSB0aGlzLmN1cnJlbnRPcmc7XG4gICAgICAgICAgdGhpcy5yZWluaXRpYWxpemVGb290ZXIgPSB0cnVlO1xuXG4gICAgICAgICAgLy8gUmVzZXQgdGhlIHRyaWdnZXIgdG8gcHJldmVudCB1bmludGVuZGVkIHJlaW5pdGlhbGl6YXRpb25cbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5yZWluaXRpYWxpemVGb290ZXIgPSBmYWxzZTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBpbiBnZXRVc2VyUGVybWlzc2lvbnM6XCIsIGVycm9yKTtcbiAgICAgIH0pO1xuICB9XG4gICAgaWYgKGNoYW5nZXMuYXBwTGlzdCAmJiBjaGFuZ2VzLmFwcExpc3QuY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLmFzc2lnbkdyYWRpZW50cygpO1xuICAgIH1cbiAgfVxuXG4gIGFzc2lnbkdyYWRpZW50cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hcHBMaXN0ICYmIHRoaXMuYXBwTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmFwcExpc3QuZm9yRWFjaCgoYXBwLCBpbmRleCkgPT4ge1xuICAgICAgICBhcHAuZ3JhZGllbnQgPSB0aGlzLmdyYWRpZW50c1tpbmRleCAlIHRoaXMuZ3JhZGllbnRzLmxlbmd0aF07XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCBhcHBzIEFwcCBWZXJzaW9uIElkIHJvdXRlXG4gICAqXG4gICAqIEBwYXJhbSBhcHBWZXJzaW9uSWRcbiAgICovXG4gIG9wZW5BcHAoYXBwVmVyc2lvbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICBcbiAgICBjb25zdCBjdXJyZW50VXJsID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjsgLy8gR2V0IHRoZSBjdXJyZW50IFVSTFxuICAgIC8vIFVwZGF0ZWQgVVJMIGNoZWNrIGxvZ2ljXG4gICAgaWYgKGN1cnJlbnRVcmwuaW5jbHVkZXMoJ2xvY2FsaG9zdDo0MjAwJykgfHwgY3VycmVudFVybC5pbmNsdWRlcygnYnVpbGRlci5heG9uYXRvci5jb20nKSB8fCBjdXJyZW50VXJsLmluY2x1ZGVzKCdhbmRyb21lZGEtYnVpbGRlci1xYS5heG9uYXRvci5jb20nKSkge1xuICAgICAgXG4gICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgdXNlciBpcyBkZWZpbmVkIGFuZCBoYXMgYSBVc2VySURcbiAgICAgIGlmICghdGhpcy51c2VyKSB7XG4gICAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdVc2VyIG5vdCBmb3VuZCBvciBub3QgbG9nZ2VkIGluJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgICByZXR1cm47IC8vIEV4aXQgdGhlIG1ldGhvZCBpZiB1c2VyIGlzIG5vdCBhdmFpbGFibGVcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIHJlcXVpcmVkIHBlcm1pc3Npb25zXG4gICAgICBjb25zdCBoYXNSZXF1aXJlZFBlcm1pc3Npb24gPSB0aGlzLnBlcm1pc3Npb25zLmluY2x1ZGVzKCdBUFBfQlVJTERFUicpIHx8IHRoaXMucGVybWlzc2lvbnMuaW5jbHVkZXMoJ0FQUF9JQU0nKTtcbiAgICAgIGlmICghaGFzUmVxdWlyZWRQZXJtaXNzaW9uKSB7XG4gICAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdZb3UgbmVlZCBlaXRoZXIgQVBQX0JVSUxERVIgb3IgQVBQX0lBTSBwZXJtaXNzaW9ucyB0byBwZXJmb3JtIHRoaXMgYWN0aW9uLicsIEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERpcmVjdGx5IG9wZW4gdGhlIGFwcCByZWdhcmRsZXNzIG9mIFVSTCBpZiB0aGUgY29uZGl0aW9ucyBhcmUgbm90IG1ldFxuICAgIHRoaXMub3BlbkFwcEV2ZW50LmVtaXQoYXBwVmVyc2lvbklkKTtcbiAgfVxuXG5cblxuICBuYXZpZ2F0ZVRvSG9tZShhcHBWZXJzaW9uSWQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKGBhcHBzLyR7YXBwVmVyc2lvbklkfS9ob21lYCk7XG4gIH1cblxuICAvKipcbiAgICogZnVuY3Rpb24gdXNlIHRvIFN3aXRjaCB0aGUgb3JnYW5pemF0aW9uXG4gICAqL1xuICBzd2l0Y2hBY2NvdW50KG9yZ2FuaXphdGlvbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnN3aXRjaEFjY291bnRFdmVudC5lbWl0KG9yZ2FuaXphdGlvbklkKTtcbiAgICBcbiAgIFxuICB9XG5cbiAgLyoqXG4gICAqIFNpZ24gb3V0XG4gICAqL1xuICBzaWduT3V0KCk6IHZvaWQge1xuICAgIHRoaXMuX2xvZ2dpbmdTZXJ2aWNlLnRyYWNrRXZlbnQoJ3VzZXIgbG9nZ2VkIG91dCcse3N0ZXAgOiAnQnllIEJ5ZSAnK3RoaXMudXNlck5hbWV9KTtcbiAgICB0aGlzLl9hdXRoU2VydmljZS5zaWduT3V0KCk7XG4gIH1cblxuICAvKipcbiAgICogQmlsbGluZ1xuICAgKi9cbiAgbmF2aWdhdGVUb0JpbGxpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoJ3BheW1lbnRpbmZvL3ByaWNpbmcnKVxuICAgIFxuICB9XG5cblxuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLyBDcmVhdGUgQXBwcC8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLyoqXG4gICAqdG8gY3JlYXRlIG5ldyBhcHBcbiAgICovXG4gICBvcGVuQ3JlYXRlQXBwRGlhbG9nKCk6IHZvaWQge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQXBwQ3JlYXRlRGlhbG9nQ29tcG9uZW50Q29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogJzYwMHB4JyxcbiAgICAgIGhlaWdodDogJ2F1dG8nLFxuICAgICAgcGFuZWxDbGFzczogJ2N1c3RvbS1kaWFsb2ctY29udGFpbmVyJyxcbiAgICAgIGJhY2tkcm9wQ2xhc3M6ICdjdXN0b20tZGlhbG9nLWJhY2tkcm9wJ1xuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IHsgbmFtZSwgZGVzY3JpcHRpb24gfSA9IHJlc3VsdDtcblxuICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0NyZWF0aW5nIEFwcC4uLicsIEF4b1NuYWNrQmFyVHlwZS5pbmZvKTtcbiAgICAgICAgdGhpcy5jcmVhdGVBcHAobmFtZSwgZGVzY3JpcHRpb24pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY3JlYXRlQXBwKG5hbWU6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1EYXRhRm9yU2VydmljZSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGZvcm1EYXRhRm9yU2VydmljZS5hcHBlbmQoJ25hbWUnLCBuYW1lKTtcbiAgICBmb3JtRGF0YUZvclNlcnZpY2UuYXBwZW5kKCdkZXNjcmlwdGlvbicsIGRlc2NyaXB0aW9uKTtcblxuICAgIHRoaXMuX21wQXBwTGlzdFNlcnZpY2UuYWRkQXBwQmFzaWNJbmZvKGZvcm1EYXRhRm9yU2VydmljZSkudG9Qcm9taXNlKClcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlPy5hZGRBcHBCYXNpY0luZm8/LnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnICYmIHJlc3BvbnNlLmFkZEFwcEJhc2ljSW5mby5hcHA/LmFwcHZlcnNpb25faWQpIHtcbiAgICAgICAgICAvL3RoaXMuX25hdmlnYXRpb24udXBkYXRlQ2xhc3NpY05hdmlnYXRpb25Sb3V0ZXMocmVzcG9uc2UuYWRkQXBwQmFzaWNJbmZvLmFwcC5hcHB2ZXJzaW9uX2lkKTtcbiAgICAgICAgICAvL3RoaXMuX3JvdXRlci5uYXZpZ2F0ZShbJ2FwcHMnLCByZXNwb25zZS5hZGRBcHBCYXNpY0luZm8uYXBwLmFwcHZlcnNpb25faWRdKTtcbiAgICAgICAgICBcbiAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0FwcCBjcmVhdGVkLicsIEF4b1NuYWNrQmFyVHlwZS5zdWNjZXNzKTtcbiAgICAgICAgICB0aGlzLm9wZW5BcHAocmVzcG9uc2UuYWRkQXBwQmFzaWNJbmZvLmFwcC5hcHB2ZXJzaW9uX2lkKVxuICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlPy5hZGRBcHBCYXNpY0luZm8/LmFwcCA9PT0gJ2FscmVhZHlfZXhpc3RzJykge1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignQXBwIGFscmVhZHkgZXhpc3RzJywgQXhvU25hY2tCYXJUeXBlLndhcm5pbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignT29wcyEgU29tZXRoaW5nIHdlbnQgd3JvbmcnLCBBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgY3JlYXRpbmcgYXBwOicsIGVycm9yKTtcbiAgICAgICAgdmFyIGVycm9yTWVzc2FnZSA9ICdPb3BzISBTb21ldGhpbmcgd2VudCB3cm9uZydcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgaWYgKGVycm9yID09PSAnQVhfRVJSXzY3JylcbiAgICAgICAge1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gJ09vcHMhIENhblxcJ3QgcmVhY2ggb3VyIHNlcnZlcnMg8J+ToS4gUGxlYXNlIHdhaXQsIHdlXFwnbGwgbm90aWZ5IHlvdSBzb29uLic7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKGVycm9yTWVzc2FnZSwgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgIH0pO1xuICB9XG4vL1RyeWluZyB0byBpbXBsZW1lbnQgdXJsIGFzIHdlbGwgYXMgYnV0dG9uIGZ1bmN0aW9uYWxpdHkgZm9yIGluc3RhbGxpbmcgYXBwXG4vLyBhc3luYyBpbnN0YWxsQXBwKHVzZXJJbnB1dD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBcbi8vICAgaWYgKCF1c2VySW5wdXQpIHtcbi8vICAgICB1c2VySW5wdXQgPSBwcm9tcHQoJ0VudGVyIHRoZSBzdHJpbmcgdG8gc2VuZCB0byB0aGUgQVBJOicpO1xuLy8gICAgIGlmICghdXNlcklucHV0KSB7XG4vLyAgICAgICAvLyBJZiB1c2VyIGNhbmNlbHMgb3IgcHJvdmlkZXMgbm8gaW5wdXQsIGRvIG5vdGhpbmdcbi8vICAgICAgIHJldHVybjtcbi8vICAgICB9XG4vLyAgIH1cblxuLy8gICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0luc3RhbGxpbmcgQXBwLi4uJywgQXhvU25hY2tCYXJUeXBlLmluZm8pO1xuICBcbiBcbmNoZWNrQW5kUHVibGlzaEFwcChpbnN0YWxsZWRBcHA6IHN0cmluZykge1xuICAvL1xuICBjb25zdCBhcHBOYW1lY2hlY2sgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXBwbmFtZScpOyAvLyBSZXBsYWNlIHdpdGggeW91ciBsb2dpYyB0byBnZXQgYXBwTmFtZWNoZWNrXG4gIGNvbnN0IGFwcFB1Ymxpc2hTdGF0dXMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncHVibGlzaHN0YXR1cycpOyAvLyBSZXBsYWNlIHdpdGggeW91ciBsb2dpYyB0byBnZXQgYXBwUHVibGlzaFN0YXR1c1xuICBjb25zdCBhcHBJbnN0YWxsU3RhdHVzPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdpbnN0YWxsc3RhdHVzJylcblxuICAgaWYgKGFwcE5hbWVjaGVjayA9PSBudWxsICYmIGFwcFB1Ymxpc2hTdGF0dXMgPT0gXCJGYWxzZVwiICYmIGFwcEluc3RhbGxTdGF0dXM9PVwiVHJ1ZVwiKSB7XG4gICAgY29uc3QgYXBwSWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncHVibGlzaEFwcElkRGF0YScpO1xuICAgIGNvbnN0IGFwcFZlcnNpb24gPSBcIjEuMDBcIjtcbiAgICBjb25zdCBwdWJsaXNoU3RhdHVzID0gXCJQXCI7XG4gICAgaWYgKGFwcElkKSB7XG4gICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLnB1Ymxpc2hhcHAoYXBwSWQsIGFwcFZlcnNpb24sIHB1Ymxpc2hTdGF0dXMpLnN1YnNjcmliZShcbiAgICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICAgIC8vIEhhbmRsZSB0aGUgcmVzcG9uc2UgaWYgbmVlZGVkXG4gICAgICAgICAgY29uc29sZS5sb2coJ1B1Ymxpc2ggcmVzcG9uc2U6JywgcmVzcG9uc2UpO1xuICAgICAgICAgIC8vIGNvbnN0IGFwcE5hbWUgPSBpbnN0YWxsZWRBcHAgfHwgJ1lvdXIgQXBwJztcbiAgICAgICAgICAvLyBjb25zdCBhcHBWZXJzaW9uID0gJzEuMDAwJztcbiAgICAgICAgICAvLyBjb25zdCBzdWNjZXNzTWVzc2FnZSA9IGBBcHA6ICR7YXBwTmFtZX0gdmVyc2lvbiAke2FwcFZlcnNpb259IGlzIHB1Ymxpc2hlZCBzdWNjZXNzZnVsbHkuYDtcbiAgICAgICAgIC8vIHRoaXMub3BlblN1Y2Nlc3NEaWFsb2coJ3ZlcnNpb24gcHVibGlzaGVkIHN1Y2Nlc3NmdWxseSEnKTtcbiAgICAgICAgIGNvbnN0IGFwcE5hbWUgPSBpbnN0YWxsZWRBcHA7XG4gICAgICAgICBjb25zdCBhcHBWZXJzaW9uID0gJzEuMDAwJztcbiAgICAgICAgIGNvbnN0IGJveGhlYWRpbmc9YEluc3RhbGxlZGBcbiAgICAgICAgIGNvbnN0IHN1Y2Nlc3NNZXNzYWdlID0gYEFwcDogJHthcHBOYW1lfSB2ZXJzaW9uICR7YXBwVmVyc2lvbn0gaXMgaW5zdGFsbGVkIHN1Y2Nlc3NmdWxseS4gYDtcbiAgICAgICAgIGNvbnN0IHN1Y2Nlc3NEaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFN1Y2Nlc3NEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICAgd2lkdGg6ICc1MDBweCcsXG4gICAgICAgICAgIGRhdGE6IHsgbWVzc2FnZTogc3VjY2Vzc01lc3NhZ2UgLCBoZWFkaW5nOmJveGhlYWRpbmd9LFxuICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcbiAgICAgICAgIH0pO1xuICAgICAgICAgIC8vIFJlbW92ZSBsb2NhbCBzdG9yYWdlIGl0ZW1zXG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3B1Ymxpc2hBcHBJZERhdGEnKTtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgncHVibGlzaHN0YXR1cycpO1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdpbnN0YWxsc3RhdHVzJyk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICAvLyBIYW5kbGUgZXJyb3IgaWYgbmVlZGVkXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcHVibGlzaGluZyBhcHA6JywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuZmV0Y2hBcHBEZXRhaWxzKGZsYXR0ZW46IGFueSkge1xuICBpZiAoZmxhdHRlbiAmJiBmbGF0dGVuLmFwcFZlcnNpb25JZCkge1xuICAgIHRoaXMuX21wQXBwTGlzdFNlcnZpY2UuZmV0Y2hBcHBEZXRhaWxzKGZsYXR0ZW4uYXBwVmVyc2lvbklkLCB0aGlzLmNvbW1vbkxpYkNvbmZpZy5heG9uYXRvclgxVXJsKS5zdWJzY3JpYmUoXG4gICAgICAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBpc0FwcENoYW5nZWRBZnRlclB1Ymxpc2ggPSByZXNwb25zZT8uZGF0YT8uZGV0YWlscz8uaXNfYXBwX2NoYW5nZWRfZWRpdGVkX2FmdGVyX3B1Ymxpc2ggfHwgZmFsc2U7XG4gICAgICAgIHRoaXMuaXNBcHBDaGFuZ2VkQWZ0ZXJQdWJsaXNoID0gaXNBcHBDaGFuZ2VkQWZ0ZXJQdWJsaXNoO1xuXG4gICAgICAgIHRoaXMuaXNBcHBDaGFuZ2VkQWZ0ZXJQdWJsaXNoID0gdHJ1ZTtcbiAgICAgICAgY29uc29sZS5sb2coXCJEZXRhaWxzIEZvdW5kXCIpXG4gICAgICAgIC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiB0byB1cGRhdGUgdGhlIHZpZXdcbiAgICAgICAgLy8gdGhpcy5kZXRlY3RDaGFuZ2VzKCk7IC8vIDwtLS0gQ2FsbCBkZXRlY3RDaGFuZ2VzKCkgaGVyZVxuXG4gICAgICB9LFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGFwcCBkZXRhaWxzOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUuZXJyb3IoJ2FwcFZlcnNpb25JZCBpcyBtaXNzaW5nIG9yIGludmFsaWQgaW4gdGhlIGZsYXR0ZW4gb2JqZWN0OicsIGZsYXR0ZW4pO1xuICB9XG59XG5cblxuYXN5bmMgIGluc3RhbGxBcHAodXNlcklucHV0OiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy9cbiAgXG4gIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhciggJ0luc3RhbGxpbmcgQXBwLi4uJywgQXhvU25hY2tCYXJUeXBlLmluZm8pO1xuICBjb25zdCBsb2FkaW5nRGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihMb2FkaW5nQXBwaW5zdGFsbENvbXBvbmVudCwge1xuICAgIHdpZHRoOiAnNjAwcHgnLFxuICAgIGRhdGE6IHsgbG9hZGluZ01lc3NhZ2U6ICdJbnN0YWxsaW5nIGFwcCwgcGxlYXNlIHdhaXQuLi4nIH0sXG4gICAgZGlzYWJsZUNsb3NlOiB0cnVlXG4gIH0pO1xuICAvL2NvbnN0IGxvYWRpbmdEaWFsb2dSZWYgPSB0aGlzLm9wZW5Mb2FkaW5nRGlhbG9nV2l0aE1lc3NhZ2UoJ1BsZWFzZSB3YWl0LiBJbnN0YWxsaW5nIGluIHByb2dyZXNzLi4uJyk7XG4gIFxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICByZXF1ZXN0U3RyaW5nOiB1c2VySW5wdXQsXG4gICAgICBzZWNvbmRTdHJpbmc6IGNhdGVnb3J5XG4gICAgfTsgXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHAucG9zdDxzdHJpbmc+KCdJbnN0YWxsQXBwJywgZGF0YSwge1xuICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyAvLyBTZXQgY29udGVudCB0eXBlIHRvIGFwcGxpY2F0aW9uL2pzb25cbiAgICAgIH0pLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlXG4gICAgfSkudG9Qcm9taXNlKCk7XG5cbiAgICAvL2NvbnNvbGUubG9nKCdSZXNwb25zZSBmcm9tIHNlcnZlcjonLCByZXNwb25zZSk7IFxuICAgIFxuICAgIC8vY29uc3QgcmVzcG9uc2VPYmplY3QgPSBKU09OLnBhcnNlKHJlc3BvbnNlKTtcbiAgICBcbiAgICBcbiAgLy8gICBpZiAocmVzcG9uc2UpIHtcblxuICAvLyAgICAgaWYocmVzcG9uc2VPYmplY3Quc3RhdHVzPT1cInN1Y2Nlc3NcIil7XG4gIC8vICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0FwcCBpbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5JywgQXhvU25hY2tCYXJUeXBlLnN1Y2Nlc3MpO1xuICAvLyAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gIC8vICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgLy8gICAgIH0sIDE1MDAwKTtcbiAgLy8gICB9IGVsc2UgaWYocmVzcG9uc2VPYmplY3Quc3RhdHVzPT0nZmFpbHVyZScpIHtcbiAgLy8gICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignRm9ybSBOb3QgRm91bmQgaW4gdGhpcyBhcHAnLCBBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAvLyAgIH1cbiAgLy8gICAgIGVsc2Uge1xuICAvLyAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdPb3BzISBTb21ldGhpbmcgd2VudCB3cm9uZyB3aGlsZSBpbnN0YWxsaW5nIHRoZSBhcHAuJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgIFxuICAvLyAgICAgY29uc29sZS5lcnJvcihBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAvLyAgIH19XG4gIC8vIH0gY2F0Y2ggKGVycm9yKSB7XG4gIC8vICAgY29uc29sZS5lcnJvcignRXJyb3IgaW5zdGFsbGluZyBhcHA6JywgZXJyb3IpO1xuICAvLyAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignT29wcyEgU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2hpbGUgaW5zdGFsbGluZyB0aGUgYXBwLicsIEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gIC8vICAgLy90aGlzLl9sb2dnaW5nU2VydmljZS50cmFja0V2ZW50KCdFcnJvciBvY2N1cnJlZCB3aGlsZSBpbnN0YWxsaW5nIGFwcCcsIGVycm9yKTtcbiAgLy8gfVxuXG4gICAgXG4gICAgICAvL2NvbnN0IHJlc3BvbnNlT2JqZWN0ID0gSlNPTi5wYXJzZShyZXNwb25zZSk7XG4gICAgICAvL2NvbnNvbGUubG9nKHJlc3BvbnNlT2JqZWN0KTtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiSW5zdGFsbGVkQXBwTmFtZVwiLHVzZXJJbnB1dClcbiAgICAgIGNvbnN0IHJlc3BvbnNlT2JqZWN0ID0gdHlwZW9mIHJlc3BvbnNlID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UocmVzcG9uc2UpIDogcmVzcG9uc2U7XG4gICAgICBcbiAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAvL2lmIChyZXNwb25zZU9iamVjdCkge1xuICAgICAgICAgaWYgKHJlc3BvbnNlT2JqZWN0LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHsgICAgICAgICAgXG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJpbnN0YWxsc3RhdHVzXCIsXCJUcnVlXCIpXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignQXBwIGluc3RhbGxlZCBzdWNjZXNzZnVsbHknLCBBeG9TbmFja0JhclR5cGUuc3VjY2Vzcyk7XG4gICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgICAgbG9hZGluZ0RpYWxvZ1JlZi5jbG9zZSgpO1xuICAgICAgICAgICAgfSwgMjAwMDApO1xuICAgICAgICAgICAgXG4gICAgICAgICAgIFxuICAgICAgICAgIC8vIH0gZWxzZSBpZiAocmVzcG9uc2VPYmplY3Quc3RhdHVzID09PSAnZmFpbHVyZScpIHtcbiAgICAgICAgICAvLyAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignRm9ybSBOb3QgRm91bmQgaW4gdGhpcyBhcHAnLCBBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdGb3JtIGNhbm5vdCBiZSBmb3VuZCBmb3IgdGhpcyBhcHAnLCBBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAgICAgICAgIGxvYWRpbmdEaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gICAgICAgIH19XG4gICAgICAgIGVsc2V7XG4gICAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdPb3BzIVNvbWV0aGluZyB3ZW50IHdyb25nIHdoaWxlIGNyZWF0aW5nIHRoZSBhcHAnLCBBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAgICAgICAgIGxvYWRpbmdEaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gICAgICAgIH1cbiAgICB9ICAgXG5cblxuICAgIG9wZW5EZWxldGVBcHBEaWFsb2coYXBwVmVyc2lvbklkOm51bWJlcil7XG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50LCB7XG4gICAgICAgIHdpZHRoOiAnMzAlJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdGl0bGU6ICdEZWxldGUgQXBwJyxcbiAgICAgICAgbWVzc2FnZTogJ0FyZSB5b3Ugc3VyZSB3YW50IHRvIGRlbGV0ZSB0aGlzIGFwcD8nLFxuICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogJ0RlbGV0ZScsXG4gICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICdDYW5jZWwnLFxuICAgICAgICBjb25maXJtQnV0dG9uVHlwZTogJ2RlbGV0ZSdcbiAgICAgIH0sXG4gICAgICBwYW5lbENsYXNzOiAnY29uZmlybS1tb2RhbC1jb250YWluZXInXG4gICAgICB9KTtcblxuICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICB0aGlzLmRlbGV0ZUFwcChhcHBWZXJzaW9uSWQpOyAvLyBQcm9jZWVkIHdpdGggZGVsZXRpb25cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZGVsZXRlQXBwKGFwcFZlcnNpb25JZDpudW1iZXIpOiB2b2lkIHtcbiAgICBpZih0aGlzLmhhc0FwcEJ1aWxkZXJQZXJtaXNzaW9uKXtcbiAgICAgIHRoaXMuX2ZsYXR0ZW5TZXJ2aWNlLmdldEZsYXR0ZW5EYXRhKGFwcFZlcnNpb25JZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlQWxsKSxcbiAgICAgICAgICAgICAgc3dpdGNoTWFwKChmbGF0dGVuKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZmxhdHRlbiAmJiBmbGF0dGVuLmFwcElkICE9PSB1bmRlZmluZWQgJiYgZmxhdHRlbi52ZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcHBJZCA9IGZsYXR0ZW4uYXBwSWQudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcHBWZXJzaW9uID0gZmxhdHRlbi52ZXJzaW9uLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXBwVj1hcHBWZXJzaW9uSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJBcHAgdmVyc2lvbiBJZDpcIithcHBWZXJzaW9uSWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhPXtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQXBwIElkXCIgOiBmbGF0dGVuLmFwcElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJBcHAgTmFtZVwiIDogZmxhdHRlbi5hcHBOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJBcHAgdmVyc2lvblwiIDogZmxhdHRlbi52ZXJzaW9uXG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0ZldGNoZWQgYXBwIGRldGFpbHMgZnJvbSBmbGF0dGVuOicsIHsgYXBwSWQsIGFwcFZlcnNpb24gfSk7XG4gIFxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tcEFwcExpc3RTZXJ2aWNlLmRlbGV0ZUFwcChhcHBJZCwgYXBwVmVyc2lvbi50b1N0cmluZygpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIG9jY3VycmVkIHdoaWxlIGRlbGV0aW5nIGFwcDonLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBlcnJvciwgZS5nLiwgZGlzcGxheSBhIG1lc3NhZ2Ugb3IgcGVyZm9ybSBhZGRpdGlvbmFsIGFjdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3I6IGZsYXR0ZW4gb2JqZWN0IG9yIGl0cyBwcm9wZXJ0aWVzIGFyZSB1bmRlZmluZWQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIGZsYXR0ZW4gb3IgaXRzIHByb3BlcnRpZXMgYXJlIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCdGbGF0dGVuIG9iamVjdCBvciBpdHMgcHJvcGVydGllcyBhcmUgdW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBzdWNjZXNzIHJlc3BvbnNlIGhlcmUgaWYgbmVlZGVkXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRGVsZXRlIGFwcCBzdWNjZXNzOicsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBkZWxldGVkIGFwcCBmcm9tIHRoZSBhcHBMaXN0XG4gICAgICAgICAgICAgICAgIHRoaXMuYXBwTGlzdCA9IHRoaXMuYXBwTGlzdC5maWx0ZXIoYXBwID0+IGFwcC5hcHBWZXJzaW9uSWQgIT09IGFwcFZlcnNpb25JZCk7XG4gICAgICAgICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignQXBwIGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5JywgQXhvU25hY2tCYXJUeXBlLnN1Y2Nlc3MpO1xuICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnaW5nU2VydmljZS50cmFja0V2ZW50KCdBcHAgZGVsZXRlZCcsIHRoaXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAvLyBNYW51YWxseSB0cmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gdG8gdXBkYXRlIHRoZSB2aWV3XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7ICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBlcnJvciBoZXJlIGlmIG5lZWRlZFxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRGVsZXRlIGFwcCBlcnJvcjonLCBlcnJvcik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ1Blcm1pc3Npb24gRGVuaWVkJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgfVxuICB9XG4gICAgXG4gIFxuXG5wcml2YXRlIG9wZW5Mb2FkaW5nRGlhbG9nV2l0aE1lc3NhZ2UobWVzc2FnZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIFxuICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKExvYWRpbmdBcHBpbnN0YWxsQ29tcG9uZW50LCB7XG4gICAgd2lkdGg6ICc1MDBweCcsXG4gICAgXG4gICAgcGFuZWxDbGFzczogJ2FwcC1sb2FkaW5nLWRpYWxvZycsXG4gICAgZGF0YTogeyBtZXNzYWdlLCB0eXBlOiAnWW91ciBhcHAgaXMgYmVpbmcgUHVibGlzaGVkLi4uJyB9LFxuICB9KTtcblxuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGRpYWxvZ1JlZi5jbG9zZSgpO1xuICAgICAgLy90aGlzLm9wZW5TdWNjZXNzRGlhbG9nKCd2ZXJzaW9uIHB1Ymxpc2hlZCBzdWNjZXNzZnVsbHkhJyk7XG4gICAgICByZXNvbHZlKCk7IC8vIFJlc29sdmUgdGhlIHByb21pc2UgYWZ0ZXIgY2xvc2luZyB0aGUgZGlhbG9nXG4gICAgfSwgMTM4MDApOyAvLyAxMy42IHNlY29uZHMgaW4gbWlsbGlzZWNvbmRzXG4gIH0pO1xufVxuXG5wcml2YXRlIG9wZW5TdWNjZXNzRGlhbG9nKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAvL1xuICB0aGlzLl9mbGF0dGVuU2VydmljZS5mbGF0dGVuJC5waXBlKFxuICAgIHRha2UoMSksXG4gICAgc3dpdGNoTWFwKChmbGF0dGVuKSA9PiB7XG4gICAgICBpZiAoIWZsYXR0ZW4gfHwgIWZsYXR0ZW4uYXBwVmVyc2lvbklkKSB7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCdGbGF0dGVuIG9iamVjdCBvciBpdHMgcHJvcGVydGllcyBhcmUgdW5kZWZpbmVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm9ya0pvaW4oe1xuICAgICAgICBmbGF0dGVuOiBvZihmbGF0dGVuKSxcbiAgICAgICAgYXBwRGV0YWlsczogdGhpcy5fbXBBcHBMaXN0U2VydmljZS5mZXRjaEFwcERldGFpbHMoZmxhdHRlbi5hcHBWZXJzaW9uSWQsIHRoaXMuY29tbW9uTGliQ29uZmlnLmF4b25hdG9yWDFVcmwpLnBpcGUoXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGFwcCBkZXRhaWxzOicsIGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICB9KTtcbiAgICB9KVxuICApLnN1YnNjcmliZSgoeyBmbGF0dGVuLCBhcHBEZXRhaWxzIH0pID0+IHtcbiAgICBjb25zb2xlLmxvZygnZmV0Y2hBcHBEZXRhaWxzIGZ1bmN0aW9uIGNhbGxlZCA0Jyk7XG4gICAgdGhpcy5pc0FwcENoYW5nZWRBZnRlclB1Ymxpc2ggPSBhcHBEZXRhaWxzPy5kYXRhPy5kZXRhaWxzPy5pc19hcHBfY2hhbmdlZF9lZGl0ZWRfYWZ0ZXJfcHVibGlzaCB8fCBmYWxzZTsgLy8gU2V0IGlzQXBwQ2hhbmdlZEFmdGVyUHVibGlzaCBiYXNlZCBvbiB0aGUgQVBJIHJlc3BvbnNlXG4gICAgLy8gRmV0Y2ggdGhlIG1pbm9yIHZlcnNpb24gZnJvbSBnZXRWZXJzaW9uTGlzdFxuICAgIHRoaXMuX2NvbW1vblNlcnZpY2UuZ2V0VmVyc2lvbkxpc3QoZmxhdHRlbi5hcHBJZCwgZmxhdHRlbi52ZXJzaW9uKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgbGV0IGFwcE1pbm9yVmVyc2lvbiA9ICdVbmtub3duJzsgLy8gRGVmYXVsdCB2YWx1ZSBpZiBtaW5vciB2ZXJzaW9uIGlzIG5vdCBmb3VuZFxuICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQudiAmJiByZXN1bHQudi52ZXJzaW9uc2xpc3QgJiYgcmVzdWx0LnYudmVyc2lvbnNsaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgYXBwTWlub3JWZXJzaW9uID0gcmVzdWx0LnYudmVyc2lvbnNsaXN0WzBdLmFwcG1pbm9ydmVyc2lvbjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFwcE5hbWUgPSBmbGF0dGVuPy5hcHBOYW1lIHx8ICdZb3VyIEFwcCc7XG4gICAgICAgIGNvbnN0IGFwcFZlcnNpb24gPSBmbGF0dGVuPy52ZXJzaW9uIHx8ICd2ZXJzaW9uJztcbiAgICAgICAgY29uc3Qgc3VjY2Vzc01lc3NhZ2UgPSBgQXBwOiAke2FwcE5hbWV9IHZlcnNpb24gJHthcHBNaW5vclZlcnNpb259IGlzIEluc3RhbGxlZCBzdWNjZXNzZnVsbHkuYDtcbiAgICAgICAgY29uc3QgYXBwaGVhZGluZyA9YEluc3RhbGxlZGBcbiAgICAgICAgY29uc3Qgc3VjY2Vzc0RpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oU3VjY2Vzc0RpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICAgIHdpZHRoOiAnNTAwcHgnLFxuICAgICAgICAgIGRhdGE6IHsgbWVzc2FnZTogc3VjY2Vzc01lc3NhZ2V9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn1cblxuY2FwaXRhbGl6ZVdvcmRzKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0clxuICAgIC5zcGxpdCgnICcpXG4gICAgLm1hcCh3b3JkID0+IHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpKVxuICAgIC5qb2luKCcgJyk7XG59XG5cblxuICAvKipcbiAgICogT24gZGVzdHJveVxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBhbGwgc3Vic2NyaXB0aW9uc1xuICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsLm5leHQoKTtcbiAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgZGlzYWJsZVFSKGFwcFZlcnNpb25JZDogYW55ICwgaW5kZXg6IG51bWJlcil7XG4gICAgbGV0IGRhdGEgPSB7XG4gICAgICBhcHBWZXJzaW9uSWQgOiBhcHBWZXJzaW9uSWRcbiAgICB9O1xuICBcbiAgICB0aGlzLl9kYXRhVmlld0ZpbHRlcnNTZXJ2aWNlLmRpc2FibGVRUihkYXRhKVxuICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdRUiBjb2RlIGRpc2FibGVkIHN1Y2Nlc3NmdWxseScsIEF4b1NuYWNrQmFyVHlwZS5zdWNjZXNzKTtcbiAgICAgICAgICB0aGlzLl9sb2dnaW5nU2VydmljZS50cmFja0V2ZW50KCdRUiBEaXNhYmxlZCcse3Jlc3BvbnNlfSk7XG4gICAgICAgICAgdGhpcy5hcHBMaXN0W2luZGV4XS5xcl9zdGF0dXMgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycm9yKTtcbiAgICAgICAgICAvLyBIYW5kbGUgdGhlIGVycm9yXG4gICAgICAgIH1cbiAgICAgICk7ICBcbiAgfVxuXG4gIGRpc2FibGVRUkRpYWxvZyhhcHBWZXJzaW9uSWQ6IGFueSwgaW5kZXg6IG51bWJlcil7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICczMCUnLFxuICAgICAgZGF0YToge1xuICAgICAgICB0aXRsZTogJ0Rpc2FibGUgUVInLFxuICAgICAgICBtZXNzYWdlOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRpc2FibGUgUVIgZm9yIHRoaXMgZm9ybT8nLFxuICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogJ0Rpc2FibGUnLFxuICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiAnQ2FuY2VsJyxcbiAgICAgICAgY29uZmlybUJ1dHRvblR5cGU6ICdkZWxldGUnXG4gICAgICB9LFxuICAgICAgcGFuZWxDbGFzczogJ2NvbmZpcm0tbW9kYWwtY29udGFpbmVyJ1xuICAgIH0pO1xuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICB0aGlzLmRpc2FibGVRUihhcHBWZXJzaW9uSWQsIGluZGV4KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldFVzZXJQZXJtaXNzaW9ucygpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHRoaXMuX2NvbW1vblNlcnZpY2UuZ2V0VXNlckRldGFpbCh0cnVlKS5zdWJzY3JpYmUoXG4gICAgICAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAnc3VjY2VzcycgJiYgcmVzcG9uc2UudWQpIHtcbiAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zID0gcmVzcG9uc2UudWQucGVybWlzc2lvbnM7IC8vIEV4dHJhY3QgcGVybWlzc2lvbnNcbiAgICAgICAgICB0aGlzLmhhc09yZ1VzZXJBY2Nlc3MgPSB0aGlzLnBlcm1pc3Npb25zLmluY2x1ZGVzKCdPUkdfSUFNJyk7IC8vIENoZWNrIGlmICdPUkdfSUFNJyBpcyBpbiB0aGUgcGVybWlzc2lvbnMgYXJyYXlcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBTaG93IG92ZXJsYXkgb25seSBpZiAnQUNDRVNTX1dFQl9QT1JUQUwnIHBlcm1pc3Npb24gaXMgbm90IHByZXNlbnRcbiAgICAgICAgICB0aGlzLnNob3dXZWJQb3J0YWxBY2Nlc3NPdmVybGF5ID0gIXRoaXMucGVybWlzc2lvbnMuaW5jbHVkZXMoJ0FDQ0VTU19XRUJfUE9SVEFMJyk7XG4gICAgICAgICAgdGhpcy5oYXNBcHBCdWlsZGVyUGVybWlzc2lvbiA9IHRoaXMucGVybWlzc2lvbnMuaW5jbHVkZXMoXCJBUFBfQlVJTERFUlwiKSAmJiB0aGlzLnBlcm1pc3Npb25zLmluY2x1ZGVzKFwiQUNDRVNTX1dFQl9QT1JUQUxcIik7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHVzZXIgZGV0YWlsczonLCBlcnJvcik7XG4gICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgIH1cbiAgICApO1xuICB9KVxufVxuICBpc1Jlc3RyaWN0ZWRVcmwoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVzdHJpY3RlZFVybHMgPSBbXG4gICAgICAnaHR0cHM6Ly9hbmRyb21lZGEtY29udGFpbmVyLXFhLmF4b25hdG9yLmNvbS9hcHBzJyxcbiAgICAgICdodHRwczovL2xvY2FsaG9zdDo0MjAxL2FwcHMnLFxuICAgICAgJ2h0dHBzOi8vd2ViLmF4b25hdG9yLmNvbS9hcHBzJ1xuICAgIF07XG4gICAgcmV0dXJuIHJlc3RyaWN0ZWRVcmxzLmluY2x1ZGVzKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBmbGV4LWF1dG8gaC1mdWxsLWFwcExpc3QgbXktYXBwLWxpc3Qgb3ZlcmZsb3ctaGlkZGVuIHBhZ2UtYmFja2dyb3VuZCBheG8tZm9udFwiPlxuICAgIDwhLS0gSGVhZGVyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJzdGlja3kgdG9wLTAgYmctd2hpdGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1saXN0LW1haW4taGVhZGVyIHJlbGF0aXZlIGZsZXggZmxleC0wIGgtMTIgei00OSBib3gtYm9yZGVyIHB4LTZcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtYXV0byBpdGVtcy1jZW50ZXIgbWluLXctMFwiPiA8aW1nIGNsYXNzPVwidy0zNiBoLTdcIiBzcmM9XCJhc3NldHMvaW1hZ2VzL2xvZ28vYXhvLWxvZ28uc3ZnXCIgYWx0PVwiTG9nbyBpbWFnZVwiPiA8c3BhbiBjbGFzcz1cImJldGFcIj5CZXRhPC9zcGFuPiA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtYXV0byBqdXN0aWZ5LWVuZCBpdGVtcy1jZW50ZXIgbWluLXctMCBnYXAtM1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwibXQtMS41XCI+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+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8YXBwLWNvbW1vbi1mb290ZXIgW3Nob3dBZGRCdG5dPVwic2hvd0FkZEJ0blwiIFtzaG93VXBncmFkZUJ0bl09XCJ0cnVlXCIgW3JlaW5pdGlhbGl6ZV09XCJyZWluaXRpYWxpemVGb290ZXJcIj48L2FwcC1jb21tb24tZm9vdGVyPlxuICAgIDwhLS0gPGRpdiBjbGFzcz1cImZpeGVkIGJvdHRvbS0wIGZsZXggZmxleC0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LXN0YXJ0IHctZnVsbCBoLTE0IHB4LTQgbWQ6cHgtNiB6LTQ5IGJnLXdoaXRlIGFwcC1saXN0LWZvb3RlclwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtbWVkaXVtIHRleHQtc2Vjb25kYXJ5XCI+QXhvbmF0b3IgJmNvcHk7IHt7Y3VycmVudFllYXJ9fTwvc3Bhbj5cbiAgICA8L2Rpdj4gLS0+XG48L2Rpdj5cbiJdfQ==