tango-app-ui-analyse-zone 3.7.1-beta.42 → 3.7.1-beta.44

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.
@@ -9,7 +9,8 @@ import * as i2 from "@angular/forms";
9
9
  import * as i3 from "../services/zone.service";
10
10
  import * as i4 from "tango-app-ui-shared";
11
11
  import * as i5 from "tango-app-ui-global";
12
- import * as i6 from "@angular/common";
12
+ import * as i6 from "@angular/router";
13
+ import * as i7 from "@angular/common";
13
14
  export class ZoneConcentrationComponent {
14
15
  zone;
15
16
  modalService;
@@ -19,6 +20,7 @@ export class ZoneConcentrationComponent {
19
20
  toast;
20
21
  gs;
21
22
  elementRef;
23
+ router;
22
24
  dayjs = dayjs;
23
25
  searchInput = "";
24
26
  searchDisabled = false;
@@ -60,7 +62,7 @@ export class ZoneConcentrationComponent {
60
62
  this.destroy$.complete();
61
63
  }
62
64
  storeIdarray = [];
63
- constructor(zone, modalService, fb, ZoneService, changeDetector, toast, gs, elementRef) {
65
+ constructor(zone, modalService, fb, ZoneService, changeDetector, toast, gs, elementRef, router) {
64
66
  this.zone = zone;
65
67
  this.modalService = modalService;
66
68
  this.fb = fb;
@@ -69,8 +71,10 @@ export class ZoneConcentrationComponent {
69
71
  this.toast = toast;
70
72
  this.gs = gs;
71
73
  this.elementRef = elementRef;
74
+ this.router = router;
72
75
  }
73
76
  ngOnInit() {
77
+ // this.filteredZones = this.zones;
74
78
  this.gs.dataRangeValue
75
79
  .pipe(takeUntil(this.destroy$), debounceTime(300))
76
80
  .subscribe((data) => {
@@ -123,6 +127,7 @@ export class ZoneConcentrationComponent {
123
127
  this.zonesummaryLoading = false;
124
128
  if (response?.code === 200 && response?.status === "success") {
125
129
  this.zoneConcentrationData = response.data.zoneConcentrationData;
130
+ console.log(this.zoneConcentrationData);
126
131
  // this.zoneName = response.data.zoneConcentrationData[0].zoneName;
127
132
  this.zoneName = this.zoneConcentrationData.length ? this.zoneConcentrationData[0].zoneName : '';
128
133
  this.ZoneService.setData(this.zoneName);
@@ -393,14 +398,72 @@ export class ZoneConcentrationComponent {
393
398
  nextElement?.removeAttribute('style');
394
399
  }
395
400
  }
396
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ZoneConcentrationComponent, deps: [{ token: i0.NgZone }, { token: i1.NgbModal }, { token: i2.FormBuilder }, { token: i3.ZoneService }, { token: i0.ChangeDetectorRef }, { token: i4.ToastService }, { token: i5.GlobalStateService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
397
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ZoneConcentrationComponent, selector: "lib-zone-concentration", providers: [NgbCarouselConfig], viewQueries: [{ propertyName: "dateList", first: true, predicate: ["dateList"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"card\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-5 right-border my-2\">\r\n <div class=\"h-100\">\r\n <div class=\"card-header ps-3 pe-1\">\r\n <h3 class=\"card-title align-items-start flex-column ms-1\">\r\n <span class=\"headtext\">Concentration Summary <span\r\n ngbTooltip=\"Summary of overall zones at the store\"\r\n placement=\"top\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></span> \r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\">\r\n </rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <!-- [disabled]=\"searchDisabled\" -->\r\n <input [(ngModel)]=\"searchInput\" type=\"text\" class=\"form-control ps-10 invoicesearch\"\r\n placeholder=\"Search...\" autocomplete=\"off\" (keyup.enter)=\"searchField()\"\r\n />\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader ms-2\" [disabled]=\"!zoneConcentrationData.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <!-- <span class=\"ms-2\">Export</span> -->\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n \r\n \r\n <div *ngIf=\"!zonesummaryNoData && !zonesummaryLoading\" class=\"table-container m-4\">\r\n <table class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('zoneName')\">\r\n Zone Name\r\n <svg [ngClass]=\"sortColumName === 'zoneName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('footfallCount')\">\r\n Footfall <br>(Actuals)\r\n <svg [ngClass]=\"sortColumName === 'footfallCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'footfallCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n \r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('avgDwellTime')\">\r\n Dwell Time <br>(Average)\r\n <svg [ngClass]=\"sortColumName === 'avgDwellTime' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'avgDwellTime' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"conc cursor-pointer\" (click)=\"sortData('concentrationRate')\">\r\n Concentration\r\n <svg [ngClass]=\"sortColumName === 'concentrationRate' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'concentrationRate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody *ngIf=\"!zonesummaryLoading && !zonesummaryNoData\" class=\"table-responsive\">\r\n <tr *ngFor=\"let zone of zoneConcentrationData\">\r\n <td>\r\n <div class=\"table-title-primary overallstore mb-2\">\r\n <span\r\n class=\"text-capitalize cursor-pointer\"><a (click)=\"onZoneClick(zone.zoneName)\">{{ zone.zoneName || '--' }}</a>\r\n </span>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">\r\n {{ zone.footfallCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ zone.avgDwellTime?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }} mins\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">\r\n {{ zone.concentrationRate.toFixed(0) || '--' }}%\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody> \r\n </table>\r\n </div>\r\n <ng-container *ngIf=\"zonesummaryLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"zonesummaryNoData && !zonesummaryLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-18\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Zone Concentration Summary</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-7\">\r\n <div class=\"card-header border-0 p-4\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">{{ zoneName || '' }} Concentration Heatmap <span\r\n ngbTooltip=\"Density heatmap\"\r\n placement=\"top\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></span>\r\n </h3>\r\n\r\n <div class=\"card-toolbar text-nowrap me-4\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <!--begin::Nav group-->\r\n <div class=\"nav-group nav-group-outline border-1 btn-group p-0\">\r\n <button class=\"btn btn-outline\"\r\n [ngClass]=\"{\r\n 'activePlanBtn': type === 'daily',\r\n 'inactivePlanBtn': type !== 'daily',\r\n 'disabled': disableDay\r\n }\"\r\n (click)=\"selectPlan('daily')\"\r\n [attr.disabled]=\"disableDay ? true : null\">\r\n Day\r\n </button>\r\n\r\n <button class=\"btn btn-outline px-6 py-3\"\r\n [ngClass]=\"{\r\n 'activePlanBtn': type === 'weekly',\r\n 'inactivePlanBtn': type !== 'weekly',\r\n 'disabled': disableWeek\r\n }\"\r\n (click)=\"selectPlan('weekly')\" [disabled]=\"disableWeek\">\r\n Week\r\n </button>\r\n <button class=\"btn btn-outline px-6 py-3\"\r\n [ngClass]=\"{\r\n 'activePlanBtn': type === 'monthly',\r\n 'inactivePlanBtn': type !== 'monthly',\r\n 'disabled': disableMonth\r\n }\"\r\n (click)=\"selectPlan('monthly')\" [disabled]=\"disableMonth\">\r\n Month\r\n </button>\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-lg-8 mb-6\">\r\n \r\n <div class=\"d-flex\">\r\n <span *ngIf=\"customArrow && !heatmapLoading && !heatmapNoData\" class=\"mt-3 cursor-pointer\" (click)=\"scrollLeft()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M15 18L9 12L15 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n <ul *ngIf=\"periodzone === 1 && !customOption\" #dateList\r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center m-2\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon active\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n \r\n <ul *ngIf=\"(periodzone === 2 || periodzone === 3) && !customOption\"\r\n \r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 p-3 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center w-90px mx-3\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n \r\n <ul *ngIf=\"customOption\"\r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 p-3 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center w-90px mx-3\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n <span *ngIf=\"customArrow && !heatmapLoading && !heatmapNoData\" class=\"mt-3 cursor-pointer\" (click)=\"scrollRight()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M9 18L15 12L9 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n </div>\r\n <div *ngIf=\"!heatmapLoading && !heatmapNoData\">\r\n <ngb-carousel #carousel [interval]=\"0\" [pauseOnHover]=\"true\" (slide)=\"onSlideChange($event)\" [id]=\"selectedDate\">\r\n <ng-container *ngFor=\"let image of overallStoreData?.ImageURLs;let i=index;\">\r\n <ng-template ngbSlide [id]=\"'ngb-slide-'+ i\">\r\n <div class=\"w-100 image-container cursor-pointer\">\r\n <img (click)=\"concentrationHeatmap(overallStoreData?.ImageURLs)\" [src]=\"image.URL\" [alt]=\"image.streamName\" class=\"cardimg\" />\r\n <button *ngIf=\"image?.downtime !== null\" class=\"minsbadge position-absolute top-0 end-0 m-3 me-18\">\r\n <span class=\"minsbadgeprimary mt-2 mb-2 \">{{image.downtime}} mins<span class=\"ms-1\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 12 10\" fill=\"none\">\r\n <path d=\"M7.14063 0.000488281C7.79785 0.000488281 8.42578 0.135108 8.99902 0.379231C9.59375 0.632395 10.1289 1.0041 10.5771 1.46523C11.0244 1.92534 11.3857 2.47588 11.6318 3.0897C11.8691 3.67941 12 4.32538 12 5.00049C12 5.6766 11.8691 6.32257 11.6318 6.91228C11.3857 7.5241 11.0244 8.07463 10.5762 8.53575C10.1289 8.99587 9.59375 9.36758 8.99707 9.62074C8.42383 9.86487 7.7959 9.99949 7.13965 9.99949C6.48242 9.99949 5.85449 9.86487 5.28125 9.62074C4.68652 9.36758 4.15137 8.99587 3.7041 8.53575L3.70312 8.53475C3.25488 8.07363 2.89453 7.52309 2.64844 6.91228C2.57227 6.72241 2.50684 6.52751 2.45312 6.32759C2.55469 6.33764 2.6582 6.34266 2.7627 6.34266C2.96094 6.34266 3.1543 6.32458 3.34277 6.28942C3.37402 6.38586 3.4082 6.4813 3.44531 6.57473C3.64746 7.07704 3.94434 7.52912 4.31348 7.90887C4.68262 8.28862 5.12305 8.59402 5.61035 8.80198C6.08008 9.0019 6.59668 9.11341 7.13965 9.11341C7.68262 9.11341 8.19824 9.0029 8.66895 8.80198C9.15723 8.59402 9.59668 8.28862 9.96582 7.90887C10.335 7.52912 10.6318 7.07604 10.834 6.57473C11.0283 6.09151 11.1367 5.56006 11.1367 5.00149C11.1367 4.44292 11.0293 3.91248 10.834 3.42826C10.6318 2.92595 10.335 2.47387 9.96582 2.09412C9.59668 1.71437 9.15625 1.40897 8.66895 1.20101C8.19922 1.00109 7.68262 0.889578 7.13965 0.889578C6.59668 0.889578 6.08106 1.00009 5.61035 1.20101C5.56836 1.21909 5.52637 1.23818 5.48535 1.25727C5.3252 0.998077 5.13184 0.762996 4.91016 0.559058C5.03125 0.494762 5.15527 0.435489 5.28125 0.38124C5.85645 0.135108 6.4834 0.000488281 7.14063 0.000488281ZM6.58301 2.62355C6.58301 2.50099 6.63184 2.39048 6.70898 2.31011C6.78711 2.22974 6.89453 2.18052 7.01367 2.18052C7.13281 2.18052 7.24023 2.22974 7.31836 2.31011C7.39648 2.39048 7.44434 2.50099 7.44434 2.62355V4.95629L9.13867 5.99004C9.24023 6.05233 9.30859 6.15178 9.33594 6.26129C9.36328 6.37079 9.35059 6.49135 9.29004 6.59583V6.59683C9.22949 6.70131 9.13281 6.77164 9.02637 6.79977C8.91992 6.8279 8.80273 6.81484 8.70117 6.75255H8.7002L6.80469 5.59623C6.73926 5.55906 6.68555 5.50481 6.64648 5.44051C6.60645 5.3732 6.58301 5.29384 6.58301 5.20945V2.62355Z\" fill=\"#009BF3\"/>\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M2.63477 0.265717C4.08984 0.265717 5.26953 1.4793 5.26953 2.97618C5.26953 4.47307 4.08984 5.68665 2.63477 5.68665C1.17969 5.68665 0 4.47307 0 2.97618C0 1.4793 1.17969 0.265717 2.63477 0.265717ZM2.63477 4.53033L4.04883 2.73206H3.1709V1.77566H2.09863V2.73206H1.2207L2.63477 4.53033Z\" fill=\"#F04438\"/>\r\n </svg></span></span>\r\n </button>\r\n <a [href]=\"image.URL\" download><svg\r\n id=\"download-icon\"\r\n width=\"44\"\r\n height=\"44\"\r\n viewBox=\"0 0 44 44\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"icon-overlay\"\r\n >\r\n <g filter=\"url(#filter0_d_3822_19479)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M29.5 23.5V26.8333C29.5 27.2754 29.3244 27.6993 29.0118 28.0118C28.6993 28.3244 28.2754 28.5 27.8333 28.5H16.1667C15.7246 28.5 15.3007 28.3244 14.9882 28.0118C14.6756 27.6993 14.5 27.2754 14.5 26.8333V23.5M17.8333 19.3333L22 23.5M22 23.5L26.1667 19.3333M22 23.5V13.5\"\r\n stroke=\"#344054\"\r\n stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </g>\r\n <defs>\r\n <filter\r\n id=\"filter0_d_3822_19479\"\r\n x=\"0\"\r\n y=\"0\"\r\n width=\"44\"\r\n height=\"44\"\r\n filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\"\r\n >\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix\r\n in=\"SourceAlpha\"\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"\r\n />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\"\r\n />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_3822_19479\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_3822_19479\" result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg></a>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </ngb-carousel>\r\n </div>\r\n <ng-container *ngIf=\"heatmapLoading\">\r\n <div class=\"row loader concheatmap d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"heatmapNoData && !heatmapLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body concheatmap d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Overall Store Concentration Heatmap</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"col-lg-4\">\r\n <div class=\"body me-4\">\r\n <div class=\"pt-10 m-6\">\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Total Footfall\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">{{overallStoreData?.totalFootfall?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-4\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Concentration %\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <!-- <span class=\"table-title\">{{ roundof(overallStoreData?.concentrationRate) || '0' }} %</span> -->\r\n <span class=\"table-title\">{{ overallStoreData?.concentrationRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%</span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Bounced Footfall\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.bouncedCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div></div>\r\n <div></div>\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Engagers\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.engagersCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-4\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Avg. Dwell Time\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.avgDwellTime?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }} mins\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Age Range\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.ageRange?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Male Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.maleRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Female Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.femaleRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <!-- <div *ngIf=\"headerData?.client == '459'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"headerData?.client == '459'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Trolley\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.trolleyRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%\r\n </span>\r\n </div>\r\n </div> -->\r\n <!-- <div *ngIf=\"headerData?.client == '459'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"headerData?.client == '459'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Basket\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.basketRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%\r\n </span>\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".table-title-primary{color:var(--Primary-700, #009BF3);font-size:14px;font-weight:500;line-height:20px;text-decoration-line:underline;text-transform:capitalize}.table-title{color:var(--Gray-900, #101828);font-size:14px;font-weight:700;line-height:20px}.subtext{color:var(--Gray-800, #1D2939);font-size:14px;font-weight:500;line-height:20px}.headcount{color:var(--Gray-900, #101828);font-size:20px;font-weight:600;line-height:30px}.headtext{color:var(--Gray-700, #344054);font-size:18px;font-weight:600;line-height:28px}.subratetext{color:var(--Gray-500, #667085);font-size:12px;font-weight:500;line-height:18px}#zonechartdiv{width:100%;height:365px;margin-bottom:6%}.invoicesearch{color:var(--Gray-700, #344054)!important;width:200px;font-family:Inter;font-size:14px!important;font-style:normal;font-weight:500!important;line-height:20px}.exportwidth{width:40%}.invoicesearch::placeholder{color:var(--Gray-700, #344054)!important}.loader .title{width:65%}.loader .link{width:85%}.loader .description{width:95%}.loader .shimmer{padding:15px;width:95%;height:120px;margin:10px auto;background:#fff}.loader .shimmer .image-card{height:90px;width:90px;float:right;border-radius:8px}.loader .stroke{height:15px;background:#777;margin-top:20px}.loader .wrapper{width:0px;animation:fullView .5s forwards linear}@keyframes fullView{to{width:100%}}.loader .animate{animation:shimmer 3s;animation-iteration-count:infinite;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%}@keyframes shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.activePlanBtn{border-radius:6px;background:var(--Primary-50, #EAF8FF);color:var(--Gray-700, #344054);font-size:14px!important;font-weight:500!important;line-height:20px}.inactivePlanBtn{color:var(--Gray-500, #667085)!important;font-size:14px;font-weight:500!important;line-height:20px}.overalltext{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px}.borderdashed{border-bottom:1px solid var(--Gray-200, #EAECF0)}.conc{width:110%}.overallstore{width:155%}table td{height:70px!important;align-items:center;gap:12px;align-self:stretch}table tr{vertical-align:middle}::ng-deep .carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:-4%;margin-left:15%}.category_active{border-bottom:3px solid #009EF7!important;border-radius:3px;margin-bottom:3px!important}.timer_active{color:var(--Primary-700, #009BF3);font-size:14px;font-style:normal;font-weight:500;line-height:20px}.cardimg{width:100%;height:350px}.form-control:disabled{background-color:#f9fafb!important}.nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}.table-container{position:relative;max-height:400px;overflow-y:auto}.fixed-header th{position:sticky;top:0;background-color:#fff;z-index:2}.table.bottom-border thead th{border-bottom:2px solid #dee2e6}.table.bottom-border tbody tr td{border-bottom:1px solid #dee2e6}.table.bottom-border th,.table.bottom-border td{padding:8px 16px;white-space:nowrap}.table-responsive::-webkit-scrollbar{width:6px}.table-responsive::-webkit-scrollbar-thumb{background-color:#ddd;border-radius:4px}.rotate{transform:rotate(180deg)}.no-wrap-list{white-space:nowrap;overflow-x:auto;overflow-y:hidden;padding:0;margin:0;display:flex;flex-wrap:nowrap;-ms-overflow-style:none;scrollbar-width:none}.no-wrap-list::-webkit-scrollbar{display:none}.concheatmap{margin-top:10%}.right-border{border-right:1px solid #D0D5DD;padding-right:15px}.image-container{position:relative;display:inline-block}::ng-deep .carousel-control-next{position:absolute;top:40%!important;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff!important;text-align:center;background:none;border:0;opacity:.5;transition:opacity .15s ease;height:20px!important;background-color:transparent}::ng-deep .carousel-control-prev{position:absolute;top:40%!important;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff!important;text-align:center;background:none;border:0;opacity:.5;transition:opacity .15s ease;height:20px!important;background-color:transparent!important}::ng-deep .carousel-control-next-icon{display:inline-block;width:5rem;height:7rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}::ng-deep .carousel-control-prev-icon{display:inline-block;width:5rem;height:7rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.icon-overlay{position:absolute;cursor:pointer;top:10px;right:10px}::ng-deep .carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:8px;height:8px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#009bf3;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}.minsbadge{border-radius:8px;border:1px solid #D0D5DD;background:#fff;box-shadow:0 1px 2px #1018280d;display:flex;align-items:center;gap:4px;z-index:1;font-size:12px}.minsbadgeprimary{padding:4px 15px;justify-content:center;align-items:center;gap:4px;border-radius:16px!important;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3);text-align:center;font-size:12px;font-style:normal;font-weight:500;line-height:18px}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: i1.NgbCarousel, selector: "ngb-carousel", inputs: ["animation", "activeId", "interval", "wrap", "keyboard", "pauseOnHover", "pauseOnFocus", "showNavigationArrows", "showNavigationIndicators"], outputs: ["slide", "slid"], exportAs: ["ngbCarousel"] }, { kind: "directive", type: i1.NgbSlide, selector: "ng-template[ngbSlide]", inputs: ["id"], outputs: ["slid"] }] });
401
+ expandedZones = new Set();
402
+ toggleZone(zoneName, event) {
403
+ event.stopPropagation(); // prevent zone click
404
+ if (this.expandedZones.has(zoneName)) {
405
+ this.expandedZones.delete(zoneName);
406
+ }
407
+ else {
408
+ this.expandedZones.add(zoneName);
409
+ }
410
+ }
411
+ isExpanded(zoneName) {
412
+ return this.expandedZones.has(zoneName);
413
+ }
414
+ zoomPopup;
415
+ viewImage;
416
+ openModel() {
417
+ // Open modal
418
+ this.modalService.open(this.zoomPopup, {
419
+ centered: true,
420
+ size: 'xl'
421
+ });
422
+ // API request payload
423
+ const requestData = {
424
+ clientId: this.headerData?.client,
425
+ storeId: this.storeIdarray,
426
+ userEmailes: [],
427
+ fromDate: this.headerData?.date?.startDate,
428
+ toDate: this.headerData?.date?.endDate,
429
+ limit: 10,
430
+ offset: 0,
431
+ sortColumnName: 'checkListName',
432
+ sortBy: 1,
433
+ searchValue: '',
434
+ filter: 'runAI',
435
+ runAIChecklistName: []
436
+ };
437
+ // API call
438
+ this.ZoneService.getViewInsightsApi(requestData)
439
+ .pipe(takeUntil(this.destroy$))
440
+ .subscribe({
441
+ next: (res) => {
442
+ if (res?.code !== 200) {
443
+ this.toast.getErrorToast('No Data Found');
444
+ return;
445
+ }
446
+ this.viewImage = res?.data;
447
+ },
448
+ error: () => {
449
+ this.toast.getErrorToast('Something went wrong');
450
+ }
451
+ });
452
+ }
453
+ flagsView() {
454
+ this.router.navigate(['/manage/trax/flags']);
455
+ }
456
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ZoneConcentrationComponent, deps: [{ token: i0.NgZone }, { token: i1.NgbModal }, { token: i2.FormBuilder }, { token: i3.ZoneService }, { token: i0.ChangeDetectorRef }, { token: i4.ToastService }, { token: i5.GlobalStateService }, { token: i0.ElementRef }, { token: i6.Router }], target: i0.ɵɵFactoryTarget.Component });
457
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ZoneConcentrationComponent, selector: "lib-zone-concentration", providers: [NgbCarouselConfig], viewQueries: [{ propertyName: "dateList", first: true, predicate: ["dateList"], descendants: true, read: ElementRef }, { propertyName: "zoomPopup", first: true, predicate: ["zoomPopup"], descendants: true }], ngImport: i0, template: "<div class=\"card\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-5 right-border my-2\">\r\n <div class=\"h-100\">\r\n <div class=\"card-header ps-3 pe-1\">\r\n <h3 class=\"card-title align-items-start flex-column ms-1\">\r\n <span class=\"headtext\">Concentration Summary <span\r\n ngbTooltip=\"Summary of overall zones at the store\" placement=\"top\"\r\n triggers=\"mouseenter:mouseleave\" tooltipClass=\"custom-tooltip\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path\r\n d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\"\r\n stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span></span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\">\r\n </rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <!-- [disabled]=\"searchDisabled\" -->\r\n <input [(ngModel)]=\"searchInput\" type=\"text\" class=\"form-control ps-10 invoicesearch\"\r\n placeholder=\"Search...\" autocomplete=\"off\" (keyup.enter)=\"searchField()\"\r\n />\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader ms-2\" [disabled]=\"!zoneConcentrationData.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <!-- <span class=\"ms-2\">Export</span> -->\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n \r\n \r\n <div *ngIf=\"!zonesummaryNoData && !zonesummaryLoading\" class=\"table-container m-4\">\r\n <table class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th class=\"p-1\"></th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('zoneName')\">\r\n Zone Name\r\n <svg [ngClass]=\"sortColumName === 'zoneName' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('footfallCount')\">\r\n Footfall <br>(Actuals)\r\n <svg [ngClass]=\"sortColumName === 'footfallCount' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'footfallCount' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('avgDwellTime')\">\r\n Dwell Time <br>(Average)\r\n <svg [ngClass]=\"sortColumName === 'avgDwellTime' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'avgDwellTime' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"conc cursor-pointer\" (click)=\"sortData('concentrationRate')\">\r\n Concentration\r\n <svg [ngClass]=\"sortColumName === 'concentrationRate' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'concentrationRate' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody *ngIf=\"!zonesummaryLoading && !zonesummaryNoData\" class=\"table-responsive\">\r\n <ng-container *ngFor=\"let zone of zoneConcentrationData\">\r\n \r\n <!-- \u2705 PARENT ROW -->\r\n <tr>\r\n <td class=\"p-1\"> <span *ngIf=\"zone.rows?.length\" class=\"toggle-icon me-2\"\r\n (click)=\"toggleZone(zone.zoneName, $event)\">\r\n \r\n <!-- MINUS -->\r\n <svg *ngIf=\"isExpanded(zone.zoneName)\" xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M4.16797 10H15.8346\" stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n \r\n <!-- PLUS -->\r\n <svg *ngIf=\"!isExpanded(zone.zoneName)\" xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0013 4.1665V15.8332M4.16797 9.99984H15.8346\" stroke=\"#667085\"\r\n stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n \r\n </span></td>\r\n <td>\r\n <div class=\"table-title-primary overallstore mb-2 d-flex align-items-center\">\r\n <!-- ZONE NAME -->\r\n <span class=\"text-capitalize cursor-pointer\">\r\n <a (click)=\"onZoneClick(zone.zoneName)\">\r\n {{ zone.zoneName || '--' }}\r\n </a>\r\n </span>\r\n \r\n </div>\r\n </td>\r\n \r\n <td>\r\n <div class=\"table-title\">\r\n {{ zone.footfallCount?.toLocaleString('en-US') || '--' }}\r\n </div>\r\n </td>\r\n \r\n <td>\r\n <div class=\"table-title\">\r\n {{ zone.avgDwellTime?.toLocaleString('en-US') || '--' }} mins\r\n </div>\r\n </td>\r\n \r\n <td>\r\n <div class=\"table-title\">\r\n {{ zone.concentrationRate?.toLocaleString('en-US') || '--' }}%\r\n </div>\r\n </td>\r\n </tr>\r\n \r\n <!-- \u2705 CHILD ROWS -->\r\n <tr *ngFor=\"let row of zone.rows\" [hidden]=\"!isExpanded(zone.zoneName)\" class=\"child-row\">\r\n <td class=\"p-1\"></td>\r\n <td class=\"ps-15 text-primary underline text-capitalize\">\r\n {{ row.toZone }}\r\n </td>\r\n <td>{{ row.footfallCount }}</td>\r\n <td>{{ row.avgDwellTime }} mins</td>\r\n <td>{{ row.concentration }}%</td>\r\n </tr>\r\n \r\n </ng-container>\r\n \r\n \r\n </tbody>\r\n </table>\r\n <ng-container *ngIf=\"zonesummaryLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"zonesummaryNoData && !zonesummaryLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Zone Concentration Summary</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngIf=\"zonesummaryLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"zonesummaryNoData && !zonesummaryLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-18\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Zone Concentration Summary</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-7\">\r\n <div class=\"card-header border-0 p-4\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">{{ zoneName || '' }} Concentration Heatmap <span ngbTooltip=\"Density heatmap\"\r\n placement=\"top\" triggers=\"mouseenter:mouseleave\" tooltipClass=\"custom-tooltip\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path\r\n d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\"\r\n stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span></span>\r\n </h3>\r\n\r\n <div class=\"card-toolbar text-nowrap me-4\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <!--begin::Nav group-->\r\n <div class=\"nav-group nav-group-outline border-1 btn-group p-0\">\r\n <button class=\"btn btn-outline\" [ngClass]=\"{\r\n 'activePlanBtn': type === 'daily',\r\n 'inactivePlanBtn': type !== 'daily',\r\n 'disabled': disableDay\r\n }\" (click)=\"selectPlan('daily')\" [attr.disabled]=\"disableDay ? true : null\">\r\n Day\r\n </button>\r\n\r\n <button class=\"btn btn-outline px-6 py-3\" [ngClass]=\"{\r\n 'activePlanBtn': type === 'weekly',\r\n 'inactivePlanBtn': type !== 'weekly',\r\n 'disabled': disableWeek\r\n }\" (click)=\"selectPlan('weekly')\" [disabled]=\"disableWeek\">\r\n Week\r\n </button>\r\n <button class=\"btn btn-outline px-6 py-3\" [ngClass]=\"{\r\n 'activePlanBtn': type === 'monthly',\r\n 'inactivePlanBtn': type !== 'monthly',\r\n 'disabled': disableMonth\r\n }\" (click)=\"selectPlan('monthly')\" [disabled]=\"disableMonth\">\r\n Month\r\n </button>\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-lg-8 mb-6\">\r\n\r\n <div class=\"d-flex\">\r\n <span *ngIf=\"customArrow && !heatmapLoading && !heatmapNoData\" class=\"mt-3 cursor-pointer\"\r\n (click)=\"scrollLeft()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M15 18L9 12L15 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n <ul *ngIf=\"periodzone === 1 && !customOption\" #dateList\r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center m-2\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon active\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate\r\n }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n\r\n <ul *ngIf=\"(periodzone === 2 || periodzone === 3) && !customOption\"\r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 p-3 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center w-90px mx-3\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate\r\n }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n\r\n <ul *ngIf=\"customOption\"\r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 p-3 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center w-90px mx-3\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate\r\n }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n <span *ngIf=\"customArrow && !heatmapLoading && !heatmapNoData\" class=\"mt-3 cursor-pointer\"\r\n (click)=\"scrollRight()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M9 18L15 12L9 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </div>\r\n <div *ngIf=\"!heatmapLoading && !heatmapNoData\">\r\n <ngb-carousel #carousel [interval]=\"0\" [pauseOnHover]=\"true\" (slide)=\"onSlideChange($event)\"\r\n [id]=\"selectedDate\">\r\n <ng-container *ngFor=\"let image of overallStoreData?.ImageURLs;let i=index;\">\r\n <ng-template ngbSlide [id]=\"'ngb-slide-'+ i\">\r\n <div class=\"w-100 image-container cursor-pointer\">\r\n <img (click)=\"concentrationHeatmap(overallStoreData?.ImageURLs)\"\r\n [src]=\"image.URL\" [alt]=\"image.streamName\" class=\"cardimg\" />\r\n <a [href]=\"image.URL\" download><svg id=\"download-icon\" width=\"44\" height=\"44\"\r\n viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"icon-overlay\">\r\n <g filter=\"url(#filter0_d_3822_19479)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\"\r\n stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M29.5 23.5V26.8333C29.5 27.2754 29.3244 27.6993 29.0118 28.0118C28.6993 28.3244 28.2754 28.5 27.8333 28.5H16.1667C15.7246 28.5 15.3007 28.3244 14.9882 28.0118C14.6756 27.6993 14.5 27.2754 14.5 26.8333V23.5M17.8333 19.3333L22 23.5M22 23.5L26.1667 19.3333M22 23.5V13.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_3822_19479\" x=\"0\" y=\"0\" width=\"44\" height=\"44\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_3822_19479\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\r\n in2=\"effect1_dropShadow_3822_19479\" result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg></a>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </ngb-carousel>\r\n </div>\r\n <ng-container *ngIf=\"heatmapLoading\">\r\n <div class=\"row loader concheatmap d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"heatmapNoData && !heatmapLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body concheatmap d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Overall Store Concentration\r\n Heatmap</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"col-lg-4\">\r\n <div class=\"body me-4\">\r\n <div class=\"pt-10 m-6\">\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Total Footfall\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">{{overallStoreData?.totalFootfall?.toLocaleString('en-US',\r\n { minimumFractionDigits: 0 }) || '--' }}</span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-4\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Concentration %\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <!-- <span class=\"table-title\">{{ roundof(overallStoreData?.concentrationRate) || '0' }} %</span> -->\r\n <span class=\"table-title\">{{\r\n overallStoreData?.concentrationRate?.toLocaleString('en-US', {\r\n minimumFractionDigits: 0 }) || '--' }}%</span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Bounced Footfall\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.bouncedCount?.toLocaleString('en-US', {\r\n minimumFractionDigits: 0 }) || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div></div>\r\n <div></div>\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Engagers\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.engagersCount?.toLocaleString('en-US', {\r\n minimumFractionDigits: 0 }) || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-4\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Avg. Dwell Time\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.avgDwellTime?.toLocaleString('en-US', {\r\n minimumFractionDigits: 0 }) || '--' }} mins\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Age Range\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.ageRange?.toLocaleString('en-US', { minimumFractionDigits:\r\n 0 }) || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Male Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.maleRate?.toLocaleString('en-US', { minimumFractionDigits:\r\n 0 }) || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Female Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.femaleRate?.toLocaleString('en-US', {\r\n minimumFractionDigits: 0 }) || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <!-- <div *ngIf=\"headerData?.client == '459'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"headerData?.client == '459'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Trolley\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.trolleyRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%\r\n </span>\r\n </div>\r\n </div> -->\r\n <!-- <div *ngIf=\"headerData?.client == '459'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"headerData?.client == '459'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Basket\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.basketRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%\r\n </span>\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n <div class=\"footer me-2\">\r\n <button (click)=\"openModel()\" class=\"btn btn-light-primary mb-2 w-100\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_17126_73367)\">\r\n <path\r\n d=\"M4.16797 1.6665L4.3263 2.44984C4.43977 3.01234 4.69653 3.53603 5.07173 3.97021C5.44692 4.40439 5.92786 4.73435 6.46797 4.92817L6.66797 4.99984L6.46797 5.0715C5.92786 5.26532 5.44692 5.59529 5.07173 6.02947C4.69653 6.46365 4.43977 6.98733 4.3263 7.54984L4.16797 8.33317L4.00964 7.54984C3.89617 6.98733 3.63941 6.46365 3.26421 6.02947C2.88901 5.59529 2.40808 5.26532 1.86797 5.0715L1.66797 4.99984L1.86797 4.92817C2.40808 4.73435 2.88901 4.40439 3.26421 3.97021C3.63941 3.53603 3.89617 3.01234 4.00964 2.44984L4.16797 1.6665ZM6.66797 13.3332L6.85963 14.3965C6.9094 14.6739 7.02869 14.9341 7.20634 15.1528C7.38399 15.3716 7.61421 15.5417 7.87547 15.6473L8.33464 15.8332L7.87547 16.019C7.61416 16.1244 7.38384 16.2944 7.20605 16.513C7.02825 16.7316 6.90878 16.9917 6.8588 17.269L6.66797 18.3332L6.4763 17.2698C6.42653 16.9925 6.30725 16.7322 6.1296 16.5135C5.95194 16.2947 5.72173 16.1246 5.46047 16.019L5.0013 15.8332L5.46047 15.6473C5.72178 15.5419 5.9521 15.372 6.12989 15.1534C6.30769 14.9348 6.42716 14.6746 6.47714 14.3973L6.66797 13.3332ZM13.3346 2.49984L13.798 4.7115C14.0341 5.83907 14.5584 6.88621 15.3198 7.75081C16.0811 8.61541 17.0535 9.26796 18.1421 9.64484L19.168 9.99984L18.1421 10.3548C17.0535 10.7317 16.0811 11.3843 15.3198 12.2489C14.5584 13.1135 14.0341 14.1606 13.798 15.2882L13.3346 17.4998L12.8713 15.2882C12.6352 14.1606 12.1109 13.1135 11.3495 12.2489C10.5882 11.3843 9.61578 10.7317 8.52714 10.3548L7.5013 9.99984L8.52714 9.64484C9.61578 9.26796 10.5882 8.61541 11.3495 7.75081C12.1109 6.88621 12.6352 5.83907 12.8713 4.7115L13.3346 2.49984Z\"\r\n stroke=\"#009BF3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_17126_73367\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><span> View AI Insights</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<ng-template #zoomPopup let-model>\r\n <div class=\"ai-modal p-4\">\r\n\r\n <!-- HEADER -->\r\n <div class=\"d-flex justify-content-between align-items-center mb-4\">\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <div class=\"ai-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"56\" height=\"56\" viewBox=\"0 0 56 56\"\r\n fill=\"none\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#DAF1FF\" />\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#EAF8FF\" stroke-width=\"8\" />\r\n <path\r\n d=\"M21 18L21.19 18.94C21.3262 19.615 21.6343 20.2434 22.0845 20.7644C22.5347 21.2855 23.1119 21.6814 23.76 21.914L24 22L23.76 22.086C23.1119 22.3186 22.5347 22.7145 22.0845 23.2356C21.6343 23.7566 21.3262 24.385 21.19 25.06L21 26L20.81 25.06C20.6738 24.385 20.3657 23.7566 19.9155 23.2356C19.4653 22.7145 18.8881 22.3186 18.24 22.086L18 22L18.24 21.914C18.8881 21.6814 19.4653 21.2855 19.9155 20.7644C20.3657 20.2434 20.6738 19.615 20.81 18.94L21 18ZM24 32L24.23 33.276C24.2897 33.6088 24.4329 33.9211 24.646 34.1836C24.8592 34.4461 25.1355 34.6503 25.449 34.777L26 35L25.449 35.223C25.1354 35.3495 24.859 35.5535 24.6457 35.8158C24.4323 36.0781 24.289 36.3902 24.229 36.723L24 38L23.77 36.724C23.7103 36.3912 23.5671 36.0789 23.354 35.8164C23.1408 35.5539 22.8645 35.3497 22.551 35.223L22 35L22.551 34.777C22.8646 34.6505 23.141 34.4465 23.3543 34.1842C23.5677 33.9219 23.711 33.6098 23.771 33.277L24 32ZM32 19L32.556 21.654C32.8394 23.0071 33.4685 24.2636 34.3821 25.3012C35.2958 26.3387 36.4626 27.1217 37.769 27.574L39 28L37.769 28.426C36.4626 28.8783 35.2958 29.6613 34.3821 30.6988C33.4685 31.7364 32.8394 32.9929 32.556 34.346L32 37L31.444 34.346C31.1606 32.9929 30.5315 31.7364 29.6179 30.6988C28.7042 29.6613 27.5374 28.8783 26.231 28.426L25 28L26.231 27.574C27.5374 27.1217 28.7042 26.3387 29.6179 25.3012C30.5315 24.2636 31.1606 23.0071 31.444 21.654L32 19Z\"\r\n stroke=\"#009BF3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></div>\r\n <h5 class=\"mb-0 fw-semibold\">AI Insights for &lt;Overall Zones&gt;</h5>\r\n </div>\r\n\r\n <button class=\"btn btn-sm btn-icon\" (click)=\"model.dismiss()\">\r\n \u2715\r\n </button>\r\n </div>\r\n\r\n <!-- LIST -->\r\n <div *ngIf=\"viewImage?.mobileusagedetection || viewImage?.queueManagement || viewImage?.customerunattended || viewImage?.staffleftinthemiddle\" class=\"ai-card\">\r\n\r\n <div *ngIf=\"viewImage?.mobileusagedetection\" class=\"ai-row row\">\r\n <div class=\"left col-md-6\">\r\n <span class=\"row-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\"\r\n viewBox=\"0 0 32 32\" fill=\"none\">\r\n <path\r\n d=\"M16 1C7.716 1 1 7.716 1 16C1 24.2845 7.716 31 16 31C24.284 31 31 24.284 31 16C31 7.716 24.284 1 16 1ZM28 16C28.0029 18.6648 27.1151 21.2542 25.4775 23.3565L20.8045 18.6835V9.3875C20.8045 8.344 19.944 7.4985 18.8825 7.4985H13.1165C12.1545 7.4985 11.3645 8.1955 11.224 9.1025L8.6435 6.5225C10.7458 4.88494 13.3352 3.99707 16 4C22.627 4 28 9.3725 28 16ZM12.156 21.4795V14.277L19.3575 21.4795H12.156ZM16.576 22.9845C16.576 23.297 16.3185 23.551 16 23.551C15.6815 23.551 15.4235 23.297 15.4235 22.9845C15.4235 22.672 15.682 22.418 16 22.418C16.3185 22.418 16.576 22.672 16.576 22.9845ZM12.156 10.0345V9.3875H19.844V17.7225L12.156 10.0345ZM14.8195 8.4245C14.8195 8.294 14.927 8.188 15.0595 8.188H16.9395C17.0725 8.188 17.1805 8.294 17.1805 8.4245C17.1805 8.555 17.072 8.661 16.9395 8.661H15.0595C14.9964 8.66101 14.9359 8.6362 14.891 8.59195C14.8461 8.54769 14.8204 8.48754 14.8195 8.4245ZM4 16C3.99718 13.3353 4.88505 10.7462 6.5225 8.644L11.1945 13.3165V22.6125C11.1945 23.6565 12.055 24.502 13.1165 24.502H18.8825C19.8445 24.502 20.6345 23.8045 20.775 22.8975L23.355 25.4775C21.2531 27.1147 18.6643 28.0026 16 28C9.3725 28 4 22.628 4 16Z\"\r\n fill=\"#00A3FF\" />\r\n </svg></span>\r\n <span class=\"title\">Mobile Detection</span>\r\n </div>\r\n <div class=\"col-md-2\">\r\n\r\n <span class=\"badge mt-2\">{{viewImage?.mobileusagedetection ?? '--'}} Detections</span>\r\n </div>\r\n <div class=\"col-md-4 text-end\">\r\n <a (click)=\"flagsView()\" class=\"view-link cursor-pointer\">View In Detail <span class=\"ms-2\">\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"17\" height=\"17\" viewBox=\"0 0 17 17\" fill=\"none\">\r\n<path d=\"M13.3359 9.16829V14.1683C13.3359 14.6103 13.1603 15.0342 12.8478 15.3468C12.5352 15.6594 12.1113 15.835 11.6693 15.835H2.5026C2.06058 15.835 1.63665 15.6594 1.32409 15.3468C1.01153 15.0342 0.835938 14.6103 0.835938 14.1683V5.00163C0.835938 4.5596 1.01153 4.13568 1.32409 3.82312C1.63665 3.51056 2.06058 3.33496 2.5026 3.33496H7.5026M10.8359 0.834961H15.8359M15.8359 0.834961V5.83496M15.8359 0.834961L6.66927 10.0016\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n</svg>\r\n </span>\r\n </a>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"viewImage?.queueManagement\" class=\"ai-row row \">\r\n <div class=\"left col-md-6\">\r\n <span class=\"row-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"26\"\r\n viewBox=\"0 0 26 26\" fill=\"none\">\r\n <path\r\n d=\"M6.28571 1.71429C5.60373 1.71429 4.94968 1.9852 4.46744 2.46744C3.9852 2.94968 3.71429 3.60373 3.71429 4.28572C3.71429 4.9677 3.9852 5.62175 4.46744 6.10399C4.94968 6.58623 5.60373 6.85714 6.28571 6.85714C6.9677 6.85714 7.62175 6.58623 8.10399 6.10399C8.58623 5.62175 8.85714 4.9677 8.85714 4.28572C8.85714 3.60373 8.58623 2.94968 8.10399 2.46744C7.62175 1.9852 6.9677 1.71429 6.28571 1.71429ZM2 4.28572C2 3.14907 2.45153 2.05898 3.25526 1.25526C4.05898 0.45153 5.14907 4.12584e-07 6.28571 4.12584e-07C7.42236 4.12584e-07 8.51244 0.45153 9.31617 1.25526C10.1199 2.05898 10.5714 3.14907 10.5714 4.28572C10.5714 5.42236 10.1199 6.51245 9.31617 7.31617C8.51244 8.1199 7.42236 8.57143 6.28571 8.57143C5.14907 8.57143 4.05898 8.1199 3.25526 7.31617C2.45153 6.51245 2 5.42236 2 4.28572ZM0 12.8571C0 12.1752 0.270918 11.5211 0.753154 11.0389C1.23539 10.5566 1.88944 10.2857 2.57143 10.2857H10C10.682 10.2857 11.336 10.5566 11.8183 11.0389C12.3005 11.5211 12.5714 12.1752 12.5714 12.8571V18.8571C12.5714 20.5242 11.9092 22.123 10.7304 23.3018C9.55159 24.4806 7.95279 25.1429 6.28571 25.1429C4.61864 25.1429 3.01984 24.4806 1.84104 23.3018C0.662243 22.123 0 20.5242 0 18.8571V12.8571ZM2.57143 12C2.3441 12 2.12608 12.0903 1.96534 12.2511C1.80459 12.4118 1.71429 12.6298 1.71429 12.8571V18.8571C1.71429 20.0696 2.19592 21.2323 3.05323 22.0896C3.91054 22.9469 5.0733 23.4286 6.28571 23.4286C7.49813 23.4286 8.66089 22.9469 9.5182 22.0896C10.3755 21.2323 10.8571 20.0696 10.8571 18.8571V12.8571C10.8571 12.6298 10.7668 12.4118 10.6061 12.2511C10.4453 12.0903 10.2273 12 10 12H2.57143ZM12.5726 8.57143C11.7736 8.57303 10.9903 8.35007 10.312 7.928C10.696 7.50514 11.0137 7.01943 11.2491 6.49029C11.6393 6.72435 12.0847 6.85067 12.5397 6.85637C12.9946 6.86207 13.443 6.74694 13.8389 6.52272C14.2349 6.29851 14.5642 5.97325 14.7934 5.58014C15.0226 5.18704 15.1433 4.74016 15.1433 4.28514C15.1433 3.83012 15.0226 3.38325 14.7934 2.99014C14.5642 2.59704 14.2349 2.27178 13.8389 2.04756C13.443 1.82335 12.9946 1.70822 12.5397 1.71392C12.0847 1.71961 11.6393 1.84594 11.2491 2.08C11.014 1.55497 10.6978 1.07019 10.312 0.643429C10.8754 0.294038 11.5123 0.0801325 12.1724 0.0185371C12.8325 -0.0430583 13.4979 0.0493359 14.1163 0.288453C14.7346 0.527569 15.2891 0.906888 15.736 1.39657C16.183 1.88626 16.5102 2.47296 16.692 3.11054C16.8738 3.74811 16.9052 4.41917 16.7837 5.07093C16.6623 5.72269 16.3912 6.33738 15.992 6.86666C15.5927 7.39594 15.0761 7.82538 14.4828 8.12119C13.8894 8.417 13.2356 8.57112 12.5726 8.57143ZM12.5726 25.1429C11.929 25.1434 11.2892 25.0451 10.6754 24.8514C11.2343 24.4425 11.7332 23.9574 12.1577 23.4103C12.2949 23.4225 12.4331 23.4286 12.5726 23.4286C13.785 23.4286 14.9478 22.9469 15.8051 22.0896C16.6624 21.2323 17.144 20.0696 17.144 18.8571V12.8571C17.144 12.6298 17.0537 12.4118 16.893 12.2511C16.7322 12.0903 16.5142 12 16.2869 12H13.616C13.4634 11.3552 13.1405 10.7632 12.6811 10.2857H16.2869C16.9688 10.2857 17.6229 10.5566 18.1051 11.0389C18.5874 11.5211 18.8583 12.1752 18.8583 12.8571V18.8571C18.8583 19.6826 18.6957 20.5 18.3798 21.2626C18.0639 22.0252 17.6009 22.7181 17.0172 23.3018C16.4336 23.8855 15.7406 24.3485 14.978 24.6644C14.2154 24.9803 13.398 25.1429 12.5726 25.1429ZM16.5977 7.92686C17.2467 8.32977 17.9917 8.55188 18.7554 8.5702C19.5191 8.58851 20.2738 8.40237 20.9414 8.03103C21.609 7.6597 22.1652 7.11667 22.5524 6.45817C22.9396 5.79967 23.1438 5.04963 23.1438 4.28572C23.1438 3.5218 22.9396 2.77176 22.5524 2.11326C22.1652 1.45476 21.609 0.911734 20.9414 0.540398C20.2738 0.169062 19.5191 -0.0170835 18.7554 0.00123229C17.9917 0.019548 17.2467 0.24166 16.5977 0.644572C16.9817 1.06743 17.2994 1.552 17.5349 2.08114C17.925 1.84687 18.3704 1.72035 18.8255 1.7145C19.2806 1.70865 19.729 1.82369 20.1251 2.04786C20.5212 2.27203 20.8507 2.59731 21.0799 2.99048C21.3092 3.38364 21.43 3.8306 21.43 4.28572C21.43 4.74083 21.3092 5.18779 21.0799 5.58095C20.8507 5.97412 20.5212 6.29939 20.1251 6.52357C19.729 6.74774 19.2806 6.86278 18.8255 6.85693C18.3704 6.85108 17.925 6.72456 17.5349 6.49029C17.2997 7.01532 16.9835 7.5001 16.5977 7.92686ZM18.4423 23.4103C18.5794 23.4217 18.7185 23.4278 18.8594 23.4286C20.0718 23.4286 21.2346 22.9469 22.0919 22.0896C22.9492 21.2323 23.4309 20.0696 23.4309 18.8571V12.8571C23.4309 12.6298 23.3406 12.4118 23.1798 12.2511C23.0191 12.0903 22.801 12 22.5737 12H19.9017C19.7491 11.3552 19.4262 10.7632 18.9669 10.2857H22.5737C23.2557 10.2857 23.9098 10.5566 24.392 11.0389C24.8742 11.5211 25.1451 12.1752 25.1451 12.8571V18.8571C25.1455 19.8454 24.9128 20.8197 24.466 21.7012C24.0192 22.5826 23.3709 23.3463 22.5736 23.9302C21.7764 24.5141 20.8527 24.9019 19.8775 25.0619C18.9024 25.222 17.9032 25.1499 16.9611 24.8514C17.5196 24.4424 18.0181 23.9573 18.4423 23.4103Z\"\r\n fill=\"#00A3FF\" />\r\n </svg></span>\r\n\r\n <span class=\"title\">Queue Management</span>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <span class=\"badge mt-2\">{{viewImage?.queueManagement ?? '--'}} Detections</span>\r\n </div>\r\n <div class=\"col-md-4 text-end\">\r\n <a (click)=\"flagsView()\" class=\"view-link cursor-pointer\">View In Detail <span class=\"ms-2\">\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"17\" height=\"17\" viewBox=\"0 0 17 17\" fill=\"none\">\r\n<path d=\"M13.3359 9.16829V14.1683C13.3359 14.6103 13.1603 15.0342 12.8478 15.3468C12.5352 15.6594 12.1113 15.835 11.6693 15.835H2.5026C2.06058 15.835 1.63665 15.6594 1.32409 15.3468C1.01153 15.0342 0.835938 14.6103 0.835938 14.1683V5.00163C0.835938 4.5596 1.01153 4.13568 1.32409 3.82312C1.63665 3.51056 2.06058 3.33496 2.5026 3.33496H7.5026M10.8359 0.834961H15.8359M15.8359 0.834961V5.83496M15.8359 0.834961L6.66927 10.0016\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n</svg>\r\n </span>\r\n </a>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"viewImage?.customerunattended\" class=\"ai-row row\">\r\n <div class=\"left col-md-6\">\r\n <span class=\"row-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\"\r\n viewBox=\"0 0 32 32\" fill=\"none\">\r\n <path\r\n d=\"M12.3062 12.3076C14.6002 12.3076 16.46 10.4479 16.46 8.15381C16.46 5.85972 14.6002 4 12.3062 4C10.0121 4 8.15234 5.85972 8.15234 8.15381C8.15234 10.4479 10.0121 12.3076 12.3062 12.3076Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.91207\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M21.9999 27.9999C25.3136 27.9999 27.9999 25.3136 27.9999 21.9999C27.9999 18.6863 25.3136 16 21.9999 16C18.6863 16 16 18.6863 16 21.9999C16 25.3136 18.6863 27.9999 21.9999 27.9999Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.91207\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M17.7538 26.2459L26.246 17.7537M14.1538 15.2798C12.9364 14.9988 11.6713 14.9966 10.453 15.2733C9.23463 15.5501 8.09461 16.0987 7.11815 16.8781C6.14168 17.6574 5.35403 18.6475 4.81408 19.7742C4.27413 20.9008 3.99585 22.135 4.00005 23.3844V26.1536H11.3846\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.91207\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n\r\n\r\n <span class=\"title\">Customer Unattended</span>\r\n\r\n </div>\r\n <div class=\"col-md-2\">\r\n\r\n <span class=\"badge mt-2\">{{viewImage?.customerunattended ?? '--'}} Detections</span>\r\n </div>\r\n <div class=\"col-md-4 text-end\">\r\n <a (click)=\"flagsView()\" class=\"view-link cursor-pointer\">View In Detail <span class=\"ms-2\">\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"17\" height=\"17\" viewBox=\"0 0 17 17\" fill=\"none\">\r\n<path d=\"M13.3359 9.16829V14.1683C13.3359 14.6103 13.1603 15.0342 12.8478 15.3468C12.5352 15.6594 12.1113 15.835 11.6693 15.835H2.5026C2.06058 15.835 1.63665 15.6594 1.32409 15.3468C1.01153 15.0342 0.835938 14.6103 0.835938 14.1683V5.00163C0.835938 4.5596 1.01153 4.13568 1.32409 3.82312C1.63665 3.51056 2.06058 3.33496 2.5026 3.33496H7.5026M10.8359 0.834961H15.8359M15.8359 0.834961V5.83496M15.8359 0.834961L6.66927 10.0016\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n</svg>\r\n </span>\r\n </a>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"viewImage?.staffleftinthemiddle\" class=\"row ai-row\">\r\n <div class=\"col-md-6 left\">\r\n <span class=\"row-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"30\" height=\"26\"\r\n viewBox=\"0 0 30 26\" fill=\"none\">\r\n <path\r\n d=\"M6.7207 24.6533L6.80371 24.998L1.31738 25C1.17293 25 1 24.867 1 24.6406C1.0001 21.6993 2.70973 19.1869 5.12891 18.083L6.7207 24.6533ZM11.3115 24.665L11.3975 24.9971H8.60254L8.68848 24.6699L10 19.6426L11.3115 24.665ZM14.8701 18.0781C17.2897 19.1819 18.9999 21.6941 19 24.6357C19 24.8337 18.868 24.9606 18.7383 24.9893L18.6826 24.9951L13.1943 24.9961L13.2793 24.6484L14.8701 18.0781ZM11.166 16.6826L10.0186 18.0645L9.99707 18.0889L9.98145 18.0693L8.83398 16.6875H9.5332V16.6826H11.166ZM10 2C10.6218 2 11.2382 2.12678 11.8145 2.37305C12.3909 2.61939 12.917 2.981 13.3613 3.43945C13.8057 3.89796 14.1602 4.44377 14.4023 5.04688C14.6445 5.64998 14.7695 6.29761 14.7695 6.95215C14.7695 7.60665 14.6444 8.25434 14.4023 8.85742C14.1602 9.46055 13.8057 10.0073 13.3613 10.4658C12.917 10.9242 12.3908 11.2859 11.8145 11.5322C11.2382 11.7784 10.6218 11.9043 10 11.9043C9.37823 11.9043 8.76179 11.7784 8.18555 11.5322C7.60924 11.2859 7.08297 10.9242 6.63867 10.4658C6.19426 10.0073 5.83979 9.46055 5.59766 8.85742C5.35559 8.25434 5.23047 7.60665 5.23047 6.95215C5.2305 6.29761 5.35553 5.64998 5.59766 5.04688C5.83979 4.44377 6.19428 3.89796 6.63867 3.43945C7.08302 2.981 7.60913 2.61939 8.18555 2.37305C8.68995 2.15751 9.22496 2.03336 9.76758 2.00586L10 2Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"2\" />\r\n <path d=\"M23.3894 18.6693L28.0027 14.0026L23.3894 9.33594M26.6667 14.0026H16.6641\"\r\n stroke=\"#00A3FF\" stroke-width=\"2\" stroke-linecap=\"square\" />\r\n </svg></span>\r\n <span class=\"title\">Staff left in the Middle</span>\r\n </div>\r\n <div class=\"col-md-2\">\r\n\r\n <span class=\"badge mt-2\">{{viewImage?.staffleftinthemiddle ?? '--'}} Detections</span>\r\n </div>\r\n <div class=\"col-md-4 text-end\">\r\n <a (click)=\"flagsView()\" class=\"view-link cursor-pointer\">View In Detail <span class=\"ms-2\">\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"17\" height=\"17\" viewBox=\"0 0 17 17\" fill=\"none\">\r\n<path d=\"M13.3359 9.16829V14.1683C13.3359 14.6103 13.1603 15.0342 12.8478 15.3468C12.5352 15.6594 12.1113 15.835 11.6693 15.835H2.5026C2.06058 15.835 1.63665 15.6594 1.32409 15.3468C1.01153 15.0342 0.835938 14.6103 0.835938 14.1683V5.00163C0.835938 4.5596 1.01153 4.13568 1.32409 3.82312C1.63665 3.51056 2.06058 3.33496 2.5026 3.33496H7.5026M10.8359 0.834961H15.8359M15.8359 0.834961V5.83496M15.8359 0.834961L6.66927 10.0016\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n</svg>\r\n </span>\r\n </a>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div *ngIf=\"!viewImage?.mobileusagedetection && !viewImage?.queueManagement && !viewImage?.customerunattended && !viewImage?.staffleftinthemiddle\"\r\n class=\"text-center py-5\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">No AI Insights available for the selected zone.</div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".table-title-primary{color:var(--Primary-700, #009BF3);font-size:14px;font-weight:500;line-height:20px;text-decoration-line:underline;text-transform:capitalize}.table-title{color:var(--Gray-900, #101828);font-size:14px;font-weight:500;line-height:20px}.subtext{color:var(--Gray-800, #1D2939);font-size:14px;font-weight:500;line-height:20px}.headcount{color:var(--Gray-900, #101828);font-size:20px;font-weight:600;line-height:30px}.headtext{color:var(--Gray-700, #344054);font-size:18px;font-weight:600;line-height:28px}.subratetext{color:var(--Gray-500, #667085);font-size:12px;font-weight:500;line-height:18px}#zonechartdiv{width:100%;height:365px;margin-bottom:6%}.invoicesearch{color:var(--Gray-700, #344054)!important;width:200px;font-family:Inter;font-size:14px!important;font-style:normal;font-weight:500!important;line-height:20px}.exportwidth{width:40%}.invoicesearch::placeholder{color:var(--Gray-700, #344054)!important}.loader .title{width:65%}.loader .link{width:85%}.loader .description{width:95%}.loader .shimmer{padding:15px;width:95%;height:120px;margin:10px auto;background:#fff}.loader .shimmer .image-card{height:90px;width:90px;float:right;border-radius:8px}.loader .stroke{height:15px;background:#777;margin-top:20px}.loader .wrapper{width:0px;animation:fullView .5s forwards linear}@keyframes fullView{to{width:100%}}.loader .animate{animation:shimmer 3s;animation-iteration-count:infinite;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%}@keyframes shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.activePlanBtn{border-radius:6px;background:var(--Primary-50, #EAF8FF);color:var(--Gray-700, #344054);font-size:14px!important;font-weight:500!important;line-height:20px}.inactivePlanBtn{color:var(--Gray-500, #667085)!important;font-size:14px;font-weight:500!important;line-height:20px}.overalltext{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px}.borderdashed{border-bottom:1px solid var(--Gray-200, #EAECF0)}.conc{width:110%}.overallstore{width:155%}table td{height:70px!important;align-items:center;gap:12px;align-self:stretch}table tr{vertical-align:middle}::ng-deep .carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:-4%;margin-left:15%}.category_active{border-bottom:3px solid #009EF7!important;border-radius:3px;margin-bottom:3px!important}.timer_active{color:var(--Primary-700, #009BF3);font-size:14px;font-style:normal;font-weight:500;line-height:20px}.cardimg{width:100%;height:350px}.form-control:disabled{background-color:#f9fafb!important}.nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}.table-container{position:relative;max-height:400px;overflow-y:auto}.fixed-header th{position:sticky;top:0;background-color:#fff;z-index:2}.table.bottom-border thead th{border-bottom:2px solid #dee2e6}.table.bottom-border tbody tr td{border-bottom:1px solid #dee2e6}.table.bottom-border th,.table.bottom-border td{padding:8px 16px;white-space:nowrap}.table-responsive::-webkit-scrollbar{width:6px}.table-responsive::-webkit-scrollbar-thumb{background-color:#ddd;border-radius:4px}.rotate{transform:rotate(180deg)}.no-wrap-list{white-space:nowrap;overflow-x:auto;overflow-y:hidden;padding:0;margin:0;display:flex;flex-wrap:nowrap;-ms-overflow-style:none;scrollbar-width:none}.no-wrap-list::-webkit-scrollbar{display:none}.concheatmap{margin-top:10%}.right-border{border-right:1px solid #D0D5DD;padding-right:15px}.image-container{position:relative;display:inline-block}::ng-deep .carousel-control-next{position:absolute;top:40%!important;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff!important;text-align:center;background:none;border:0;opacity:.5;transition:opacity .15s ease;height:20px!important;background-color:transparent}::ng-deep .carousel-control-prev{position:absolute;top:40%!important;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff!important;text-align:center;background:none;border:0;opacity:.5;transition:opacity .15s ease;height:20px!important;background-color:transparent!important}::ng-deep .carousel-control-next-icon{display:inline-block;width:5rem;height:7rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}::ng-deep .carousel-control-prev-icon{display:inline-block;width:5rem;height:7rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.icon-overlay{position:absolute;cursor:pointer;top:10px;right:10px}::ng-deep .carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:8px;height:8px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#009bf3;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}::ng-deep .custom-tooltip{white-space:pre-line;max-width:500px}.head-title{color:var(--Gray-900, #101828);font-size:20px;font-weight:600;line-height:30px}.sub-title{color:var(--Gray-500, #667085);font-size:14px;font-weight:400;line-height:20px}.zone-compare-title{color:var(--Gray-800, #1D2939);font-size:14px;font-weight:500;line-height:20px}.border-full{border-radius:8px;border:1px solid var(--Gray-200, #EAECF0)}.shopper-title{color:var(--Gray-700, #344054);font-size:18px;font-weight:600;line-height:28px}.zone-selector{padding:10px;max-width:300px;position:relative;font-family:Arial,sans-serif}.title{font-weight:700;margin-bottom:8px;display:block}.zone-box{display:flex;align-items:center;justify-content:space-between;border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);padding:6px 10px;margin-bottom:6px}.remove-btn{border:none;background:transparent;cursor:pointer;font-weight:700;font-size:14px}.dropdown-input{position:relative;margin-bottom:8px}.dropdown-input input{width:100%;padding:6px;border:1px solid #51C1FF;border-radius:4px}.dropdown-list{position:absolute;top:100%;left:0;width:100%;max-height:150px;overflow-y:auto;border:1px solid #ccc;background:#fff;z-index:10;border-radius:0 0 4px 4px}.dropdown-list li{padding:8px;cursor:pointer}.dropdown-list li:hover{background-color:#e8f4ff}.limit-warning{color:red;font-size:12px;margin-bottom:8px;position:absolute;bottom:32px;left:30px;right:0}.actions{display:flex;justify-content:space-between;gap:8px}.actions button{padding:6px 12px;border:none;border-radius:4px;cursor:pointer}.apply-btn{background-color:#addbff}.apply-btn:disabled{opacity:.5;cursor:not-allowed}.ellipse1{border-radius:6px;border-bottom:2px solid var(--Gray-200, #EAECF0);background:radial-gradient(206.89% 107.47% at 16.16% 32.77%,#fff6,#45bbfe33),#f2f4f7;box-shadow:0 4px 10px #0000000d}.sub-header{color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:20px}.border-1{padding:8px;border-radius:12px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important}.shopper-ellipse1{border-radius:24px;background:var(--Primary-50, #EAF8FF);height:150px;padding:8px}.perctage{color:#475467!important}.minsbadge{border-radius:8px;border:1px solid #D0D5DD;background:#fff;box-shadow:0 1px 2px #1018280d;display:flex;align-items:center;gap:4px;z-index:1;font-size:12px}.minsbadgeprimary{padding:4px 15px;justify-content:center;align-items:center;gap:4px;border-radius:16px!important;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3);text-align:center;font-size:12px;font-style:normal;font-weight:500;line-height:18px}.toggle-icon{width:18px;cursor:pointer;font-weight:700}.child-row{background-color:#f6fcff}.concentration-table{width:100%;border-collapse:collapse}.concentration-table th{text-align:left;font-weight:600;padding:12px;border-bottom:1px solid #e5e7eb}.concentration-table td{padding:12px;border-bottom:1px solid #f1f5f9}.parent-row{background:#fff;font-weight:500}.child-row{background:F6FCFF}.child-zone{padding-left:36px;color:#009bf3}.toggle{display:inline-block;width:18px;cursor:pointer;font-weight:700;margin-right:6px}.zone-name{color:#009bf3;cursor:pointer}.underline{text-decoration:underline}.btn-light-primary{background-color:var(--Primary-50, #EAF8FF)!important;border-radius:8px;border-width:1px;padding:8px 14px;color:var(--Primary-700, #009BF3)}.btn.btn-light-primary:focus:not(.btn-active),.btn.btn-light-primary:hover:not(.btn-active),.btn.btn-light-primary:active:not(.btn-active){background-color:var(--Primary-50, #EAF8FF)!important;color:var(--Primary-700, #009BF3)!important}.ai-modal{background:#fff;border-radius:12px}.ai-icon{width:32px;height:32px;background:#eef4ff;border-radius:50%;display:flex;align-items:center;justify-content:center}.ai-card{border-radius:10px;padding:8px}.ai-row{padding:8px;border-radius:8px;border:1px solid #e5e7eb;margin-bottom:7px}.ai-row:last-child{margin-bottom:0}.left{display:flex;align-items:center;gap:10px}.row-icon{font-size:18px}.title{font-weight:500}.badge{background:#f1f5f9;color:#475569;font-size:12px;padding:4px 10px;border-radius:16px}.view-link{font-weight:600;font-size:14px;line-height:20px;letter-spacing:0%;text-transform:capitalize}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: i1.NgbCarousel, selector: "ngb-carousel", inputs: ["animation", "activeId", "interval", "wrap", "keyboard", "pauseOnHover", "pauseOnFocus", "showNavigationArrows", "showNavigationIndicators"], outputs: ["slide", "slid"], exportAs: ["ngbCarousel"] }, { kind: "directive", type: i1.NgbSlide, selector: "ng-template[ngbSlide]", inputs: ["id"], outputs: ["slid"] }] });
398
458
  }
399
459
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ZoneConcentrationComponent, decorators: [{
400
460
  type: Component,
401
- args: [{ selector: 'lib-zone-concentration', providers: [NgbCarouselConfig], template: "<div class=\"card\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-5 right-border my-2\">\r\n <div class=\"h-100\">\r\n <div class=\"card-header ps-3 pe-1\">\r\n <h3 class=\"card-title align-items-start flex-column ms-1\">\r\n <span class=\"headtext\">Concentration Summary <span\r\n ngbTooltip=\"Summary of overall zones at the store\"\r\n placement=\"top\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></span> \r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\">\r\n </rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <!-- [disabled]=\"searchDisabled\" -->\r\n <input [(ngModel)]=\"searchInput\" type=\"text\" class=\"form-control ps-10 invoicesearch\"\r\n placeholder=\"Search...\" autocomplete=\"off\" (keyup.enter)=\"searchField()\"\r\n />\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader ms-2\" [disabled]=\"!zoneConcentrationData.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <!-- <span class=\"ms-2\">Export</span> -->\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n \r\n \r\n <div *ngIf=\"!zonesummaryNoData && !zonesummaryLoading\" class=\"table-container m-4\">\r\n <table class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('zoneName')\">\r\n Zone Name\r\n <svg [ngClass]=\"sortColumName === 'zoneName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('footfallCount')\">\r\n Footfall <br>(Actuals)\r\n <svg [ngClass]=\"sortColumName === 'footfallCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'footfallCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n \r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('avgDwellTime')\">\r\n Dwell Time <br>(Average)\r\n <svg [ngClass]=\"sortColumName === 'avgDwellTime' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'avgDwellTime' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"conc cursor-pointer\" (click)=\"sortData('concentrationRate')\">\r\n Concentration\r\n <svg [ngClass]=\"sortColumName === 'concentrationRate' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'concentrationRate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody *ngIf=\"!zonesummaryLoading && !zonesummaryNoData\" class=\"table-responsive\">\r\n <tr *ngFor=\"let zone of zoneConcentrationData\">\r\n <td>\r\n <div class=\"table-title-primary overallstore mb-2\">\r\n <span\r\n class=\"text-capitalize cursor-pointer\"><a (click)=\"onZoneClick(zone.zoneName)\">{{ zone.zoneName || '--' }}</a>\r\n </span>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">\r\n {{ zone.footfallCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ zone.avgDwellTime?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }} mins\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">\r\n {{ zone.concentrationRate.toFixed(0) || '--' }}%\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody> \r\n </table>\r\n </div>\r\n <ng-container *ngIf=\"zonesummaryLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"zonesummaryNoData && !zonesummaryLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-18\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Zone Concentration Summary</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-7\">\r\n <div class=\"card-header border-0 p-4\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">{{ zoneName || '' }} Concentration Heatmap <span\r\n ngbTooltip=\"Density heatmap\"\r\n placement=\"top\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></span>\r\n </h3>\r\n\r\n <div class=\"card-toolbar text-nowrap me-4\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <!--begin::Nav group-->\r\n <div class=\"nav-group nav-group-outline border-1 btn-group p-0\">\r\n <button class=\"btn btn-outline\"\r\n [ngClass]=\"{\r\n 'activePlanBtn': type === 'daily',\r\n 'inactivePlanBtn': type !== 'daily',\r\n 'disabled': disableDay\r\n }\"\r\n (click)=\"selectPlan('daily')\"\r\n [attr.disabled]=\"disableDay ? true : null\">\r\n Day\r\n </button>\r\n\r\n <button class=\"btn btn-outline px-6 py-3\"\r\n [ngClass]=\"{\r\n 'activePlanBtn': type === 'weekly',\r\n 'inactivePlanBtn': type !== 'weekly',\r\n 'disabled': disableWeek\r\n }\"\r\n (click)=\"selectPlan('weekly')\" [disabled]=\"disableWeek\">\r\n Week\r\n </button>\r\n <button class=\"btn btn-outline px-6 py-3\"\r\n [ngClass]=\"{\r\n 'activePlanBtn': type === 'monthly',\r\n 'inactivePlanBtn': type !== 'monthly',\r\n 'disabled': disableMonth\r\n }\"\r\n (click)=\"selectPlan('monthly')\" [disabled]=\"disableMonth\">\r\n Month\r\n </button>\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-lg-8 mb-6\">\r\n \r\n <div class=\"d-flex\">\r\n <span *ngIf=\"customArrow && !heatmapLoading && !heatmapNoData\" class=\"mt-3 cursor-pointer\" (click)=\"scrollLeft()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M15 18L9 12L15 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n <ul *ngIf=\"periodzone === 1 && !customOption\" #dateList\r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center m-2\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon active\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n \r\n <ul *ngIf=\"(periodzone === 2 || periodzone === 3) && !customOption\"\r\n \r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 p-3 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center w-90px mx-3\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n \r\n <ul *ngIf=\"customOption\"\r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 p-3 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center w-90px mx-3\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n <span *ngIf=\"customArrow && !heatmapLoading && !heatmapNoData\" class=\"mt-3 cursor-pointer\" (click)=\"scrollRight()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M9 18L15 12L9 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n </div>\r\n <div *ngIf=\"!heatmapLoading && !heatmapNoData\">\r\n <ngb-carousel #carousel [interval]=\"0\" [pauseOnHover]=\"true\" (slide)=\"onSlideChange($event)\" [id]=\"selectedDate\">\r\n <ng-container *ngFor=\"let image of overallStoreData?.ImageURLs;let i=index;\">\r\n <ng-template ngbSlide [id]=\"'ngb-slide-'+ i\">\r\n <div class=\"w-100 image-container cursor-pointer\">\r\n <img (click)=\"concentrationHeatmap(overallStoreData?.ImageURLs)\" [src]=\"image.URL\" [alt]=\"image.streamName\" class=\"cardimg\" />\r\n <button *ngIf=\"image?.downtime !== null\" class=\"minsbadge position-absolute top-0 end-0 m-3 me-18\">\r\n <span class=\"minsbadgeprimary mt-2 mb-2 \">{{image.downtime}} mins<span class=\"ms-1\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 12 10\" fill=\"none\">\r\n <path d=\"M7.14063 0.000488281C7.79785 0.000488281 8.42578 0.135108 8.99902 0.379231C9.59375 0.632395 10.1289 1.0041 10.5771 1.46523C11.0244 1.92534 11.3857 2.47588 11.6318 3.0897C11.8691 3.67941 12 4.32538 12 5.00049C12 5.6766 11.8691 6.32257 11.6318 6.91228C11.3857 7.5241 11.0244 8.07463 10.5762 8.53575C10.1289 8.99587 9.59375 9.36758 8.99707 9.62074C8.42383 9.86487 7.7959 9.99949 7.13965 9.99949C6.48242 9.99949 5.85449 9.86487 5.28125 9.62074C4.68652 9.36758 4.15137 8.99587 3.7041 8.53575L3.70312 8.53475C3.25488 8.07363 2.89453 7.52309 2.64844 6.91228C2.57227 6.72241 2.50684 6.52751 2.45312 6.32759C2.55469 6.33764 2.6582 6.34266 2.7627 6.34266C2.96094 6.34266 3.1543 6.32458 3.34277 6.28942C3.37402 6.38586 3.4082 6.4813 3.44531 6.57473C3.64746 7.07704 3.94434 7.52912 4.31348 7.90887C4.68262 8.28862 5.12305 8.59402 5.61035 8.80198C6.08008 9.0019 6.59668 9.11341 7.13965 9.11341C7.68262 9.11341 8.19824 9.0029 8.66895 8.80198C9.15723 8.59402 9.59668 8.28862 9.96582 7.90887C10.335 7.52912 10.6318 7.07604 10.834 6.57473C11.0283 6.09151 11.1367 5.56006 11.1367 5.00149C11.1367 4.44292 11.0293 3.91248 10.834 3.42826C10.6318 2.92595 10.335 2.47387 9.96582 2.09412C9.59668 1.71437 9.15625 1.40897 8.66895 1.20101C8.19922 1.00109 7.68262 0.889578 7.13965 0.889578C6.59668 0.889578 6.08106 1.00009 5.61035 1.20101C5.56836 1.21909 5.52637 1.23818 5.48535 1.25727C5.3252 0.998077 5.13184 0.762996 4.91016 0.559058C5.03125 0.494762 5.15527 0.435489 5.28125 0.38124C5.85645 0.135108 6.4834 0.000488281 7.14063 0.000488281ZM6.58301 2.62355C6.58301 2.50099 6.63184 2.39048 6.70898 2.31011C6.78711 2.22974 6.89453 2.18052 7.01367 2.18052C7.13281 2.18052 7.24023 2.22974 7.31836 2.31011C7.39648 2.39048 7.44434 2.50099 7.44434 2.62355V4.95629L9.13867 5.99004C9.24023 6.05233 9.30859 6.15178 9.33594 6.26129C9.36328 6.37079 9.35059 6.49135 9.29004 6.59583V6.59683C9.22949 6.70131 9.13281 6.77164 9.02637 6.79977C8.91992 6.8279 8.80273 6.81484 8.70117 6.75255H8.7002L6.80469 5.59623C6.73926 5.55906 6.68555 5.50481 6.64648 5.44051C6.60645 5.3732 6.58301 5.29384 6.58301 5.20945V2.62355Z\" fill=\"#009BF3\"/>\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M2.63477 0.265717C4.08984 0.265717 5.26953 1.4793 5.26953 2.97618C5.26953 4.47307 4.08984 5.68665 2.63477 5.68665C1.17969 5.68665 0 4.47307 0 2.97618C0 1.4793 1.17969 0.265717 2.63477 0.265717ZM2.63477 4.53033L4.04883 2.73206H3.1709V1.77566H2.09863V2.73206H1.2207L2.63477 4.53033Z\" fill=\"#F04438\"/>\r\n </svg></span></span>\r\n </button>\r\n <a [href]=\"image.URL\" download><svg\r\n id=\"download-icon\"\r\n width=\"44\"\r\n height=\"44\"\r\n viewBox=\"0 0 44 44\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"icon-overlay\"\r\n >\r\n <g filter=\"url(#filter0_d_3822_19479)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M29.5 23.5V26.8333C29.5 27.2754 29.3244 27.6993 29.0118 28.0118C28.6993 28.3244 28.2754 28.5 27.8333 28.5H16.1667C15.7246 28.5 15.3007 28.3244 14.9882 28.0118C14.6756 27.6993 14.5 27.2754 14.5 26.8333V23.5M17.8333 19.3333L22 23.5M22 23.5L26.1667 19.3333M22 23.5V13.5\"\r\n stroke=\"#344054\"\r\n stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </g>\r\n <defs>\r\n <filter\r\n id=\"filter0_d_3822_19479\"\r\n x=\"0\"\r\n y=\"0\"\r\n width=\"44\"\r\n height=\"44\"\r\n filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\"\r\n >\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix\r\n in=\"SourceAlpha\"\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"\r\n />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\"\r\n />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_3822_19479\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_3822_19479\" result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg></a>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </ngb-carousel>\r\n </div>\r\n <ng-container *ngIf=\"heatmapLoading\">\r\n <div class=\"row loader concheatmap d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"heatmapNoData && !heatmapLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body concheatmap d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Overall Store Concentration Heatmap</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"col-lg-4\">\r\n <div class=\"body me-4\">\r\n <div class=\"pt-10 m-6\">\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Total Footfall\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">{{overallStoreData?.totalFootfall?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-4\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Concentration %\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <!-- <span class=\"table-title\">{{ roundof(overallStoreData?.concentrationRate) || '0' }} %</span> -->\r\n <span class=\"table-title\">{{ overallStoreData?.concentrationRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%</span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Bounced Footfall\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.bouncedCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div></div>\r\n <div></div>\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Engagers\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.engagersCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-4\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Avg. Dwell Time\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.avgDwellTime?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }} mins\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Age Range\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.ageRange?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Male Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.maleRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Female Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.femaleRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <!-- <div *ngIf=\"headerData?.client == '459'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"headerData?.client == '459'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Trolley\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.trolleyRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%\r\n </span>\r\n </div>\r\n </div> -->\r\n <!-- <div *ngIf=\"headerData?.client == '459'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"headerData?.client == '459'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Basket\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.basketRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%\r\n </span>\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".table-title-primary{color:var(--Primary-700, #009BF3);font-size:14px;font-weight:500;line-height:20px;text-decoration-line:underline;text-transform:capitalize}.table-title{color:var(--Gray-900, #101828);font-size:14px;font-weight:700;line-height:20px}.subtext{color:var(--Gray-800, #1D2939);font-size:14px;font-weight:500;line-height:20px}.headcount{color:var(--Gray-900, #101828);font-size:20px;font-weight:600;line-height:30px}.headtext{color:var(--Gray-700, #344054);font-size:18px;font-weight:600;line-height:28px}.subratetext{color:var(--Gray-500, #667085);font-size:12px;font-weight:500;line-height:18px}#zonechartdiv{width:100%;height:365px;margin-bottom:6%}.invoicesearch{color:var(--Gray-700, #344054)!important;width:200px;font-family:Inter;font-size:14px!important;font-style:normal;font-weight:500!important;line-height:20px}.exportwidth{width:40%}.invoicesearch::placeholder{color:var(--Gray-700, #344054)!important}.loader .title{width:65%}.loader .link{width:85%}.loader .description{width:95%}.loader .shimmer{padding:15px;width:95%;height:120px;margin:10px auto;background:#fff}.loader .shimmer .image-card{height:90px;width:90px;float:right;border-radius:8px}.loader .stroke{height:15px;background:#777;margin-top:20px}.loader .wrapper{width:0px;animation:fullView .5s forwards linear}@keyframes fullView{to{width:100%}}.loader .animate{animation:shimmer 3s;animation-iteration-count:infinite;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%}@keyframes shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.activePlanBtn{border-radius:6px;background:var(--Primary-50, #EAF8FF);color:var(--Gray-700, #344054);font-size:14px!important;font-weight:500!important;line-height:20px}.inactivePlanBtn{color:var(--Gray-500, #667085)!important;font-size:14px;font-weight:500!important;line-height:20px}.overalltext{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px}.borderdashed{border-bottom:1px solid var(--Gray-200, #EAECF0)}.conc{width:110%}.overallstore{width:155%}table td{height:70px!important;align-items:center;gap:12px;align-self:stretch}table tr{vertical-align:middle}::ng-deep .carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:-4%;margin-left:15%}.category_active{border-bottom:3px solid #009EF7!important;border-radius:3px;margin-bottom:3px!important}.timer_active{color:var(--Primary-700, #009BF3);font-size:14px;font-style:normal;font-weight:500;line-height:20px}.cardimg{width:100%;height:350px}.form-control:disabled{background-color:#f9fafb!important}.nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}.table-container{position:relative;max-height:400px;overflow-y:auto}.fixed-header th{position:sticky;top:0;background-color:#fff;z-index:2}.table.bottom-border thead th{border-bottom:2px solid #dee2e6}.table.bottom-border tbody tr td{border-bottom:1px solid #dee2e6}.table.bottom-border th,.table.bottom-border td{padding:8px 16px;white-space:nowrap}.table-responsive::-webkit-scrollbar{width:6px}.table-responsive::-webkit-scrollbar-thumb{background-color:#ddd;border-radius:4px}.rotate{transform:rotate(180deg)}.no-wrap-list{white-space:nowrap;overflow-x:auto;overflow-y:hidden;padding:0;margin:0;display:flex;flex-wrap:nowrap;-ms-overflow-style:none;scrollbar-width:none}.no-wrap-list::-webkit-scrollbar{display:none}.concheatmap{margin-top:10%}.right-border{border-right:1px solid #D0D5DD;padding-right:15px}.image-container{position:relative;display:inline-block}::ng-deep .carousel-control-next{position:absolute;top:40%!important;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff!important;text-align:center;background:none;border:0;opacity:.5;transition:opacity .15s ease;height:20px!important;background-color:transparent}::ng-deep .carousel-control-prev{position:absolute;top:40%!important;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff!important;text-align:center;background:none;border:0;opacity:.5;transition:opacity .15s ease;height:20px!important;background-color:transparent!important}::ng-deep .carousel-control-next-icon{display:inline-block;width:5rem;height:7rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}::ng-deep .carousel-control-prev-icon{display:inline-block;width:5rem;height:7rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.icon-overlay{position:absolute;cursor:pointer;top:10px;right:10px}::ng-deep .carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:8px;height:8px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#009bf3;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}.minsbadge{border-radius:8px;border:1px solid #D0D5DD;background:#fff;box-shadow:0 1px 2px #1018280d;display:flex;align-items:center;gap:4px;z-index:1;font-size:12px}.minsbadgeprimary{padding:4px 15px;justify-content:center;align-items:center;gap:4px;border-radius:16px!important;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3);text-align:center;font-size:12px;font-style:normal;font-weight:500;line-height:18px}\n"] }]
402
- }], ctorParameters: () => [{ type: i0.NgZone }, { type: i1.NgbModal }, { type: i2.FormBuilder }, { type: i3.ZoneService }, { type: i0.ChangeDetectorRef }, { type: i4.ToastService }, { type: i5.GlobalStateService }, { type: i0.ElementRef }], propDecorators: { dateList: [{
461
+ args: [{ selector: 'lib-zone-concentration', providers: [NgbCarouselConfig], template: "<div class=\"card\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-5 right-border my-2\">\r\n <div class=\"h-100\">\r\n <div class=\"card-header ps-3 pe-1\">\r\n <h3 class=\"card-title align-items-start flex-column ms-1\">\r\n <span class=\"headtext\">Concentration Summary <span\r\n ngbTooltip=\"Summary of overall zones at the store\" placement=\"top\"\r\n triggers=\"mouseenter:mouseleave\" tooltipClass=\"custom-tooltip\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path\r\n d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\"\r\n stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span></span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\">\r\n </rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <!-- [disabled]=\"searchDisabled\" -->\r\n <input [(ngModel)]=\"searchInput\" type=\"text\" class=\"form-control ps-10 invoicesearch\"\r\n placeholder=\"Search...\" autocomplete=\"off\" (keyup.enter)=\"searchField()\"\r\n />\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader ms-2\" [disabled]=\"!zoneConcentrationData.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <!-- <span class=\"ms-2\">Export</span> -->\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n \r\n \r\n <div *ngIf=\"!zonesummaryNoData && !zonesummaryLoading\" class=\"table-container m-4\">\r\n <table class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th class=\"p-1\"></th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('zoneName')\">\r\n Zone Name\r\n <svg [ngClass]=\"sortColumName === 'zoneName' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('footfallCount')\">\r\n Footfall <br>(Actuals)\r\n <svg [ngClass]=\"sortColumName === 'footfallCount' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'footfallCount' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('avgDwellTime')\">\r\n Dwell Time <br>(Average)\r\n <svg [ngClass]=\"sortColumName === 'avgDwellTime' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'avgDwellTime' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"conc cursor-pointer\" (click)=\"sortData('concentrationRate')\">\r\n Concentration\r\n <svg [ngClass]=\"sortColumName === 'concentrationRate' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'concentrationRate' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody *ngIf=\"!zonesummaryLoading && !zonesummaryNoData\" class=\"table-responsive\">\r\n <ng-container *ngFor=\"let zone of zoneConcentrationData\">\r\n \r\n <!-- \u2705 PARENT ROW -->\r\n <tr>\r\n <td class=\"p-1\"> <span *ngIf=\"zone.rows?.length\" class=\"toggle-icon me-2\"\r\n (click)=\"toggleZone(zone.zoneName, $event)\">\r\n \r\n <!-- MINUS -->\r\n <svg *ngIf=\"isExpanded(zone.zoneName)\" xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M4.16797 10H15.8346\" stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n \r\n <!-- PLUS -->\r\n <svg *ngIf=\"!isExpanded(zone.zoneName)\" xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0013 4.1665V15.8332M4.16797 9.99984H15.8346\" stroke=\"#667085\"\r\n stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n \r\n </span></td>\r\n <td>\r\n <div class=\"table-title-primary overallstore mb-2 d-flex align-items-center\">\r\n <!-- ZONE NAME -->\r\n <span class=\"text-capitalize cursor-pointer\">\r\n <a (click)=\"onZoneClick(zone.zoneName)\">\r\n {{ zone.zoneName || '--' }}\r\n </a>\r\n </span>\r\n \r\n </div>\r\n </td>\r\n \r\n <td>\r\n <div class=\"table-title\">\r\n {{ zone.footfallCount?.toLocaleString('en-US') || '--' }}\r\n </div>\r\n </td>\r\n \r\n <td>\r\n <div class=\"table-title\">\r\n {{ zone.avgDwellTime?.toLocaleString('en-US') || '--' }} mins\r\n </div>\r\n </td>\r\n \r\n <td>\r\n <div class=\"table-title\">\r\n {{ zone.concentrationRate?.toLocaleString('en-US') || '--' }}%\r\n </div>\r\n </td>\r\n </tr>\r\n \r\n <!-- \u2705 CHILD ROWS -->\r\n <tr *ngFor=\"let row of zone.rows\" [hidden]=\"!isExpanded(zone.zoneName)\" class=\"child-row\">\r\n <td class=\"p-1\"></td>\r\n <td class=\"ps-15 text-primary underline text-capitalize\">\r\n {{ row.toZone }}\r\n </td>\r\n <td>{{ row.footfallCount }}</td>\r\n <td>{{ row.avgDwellTime }} mins</td>\r\n <td>{{ row.concentration }}%</td>\r\n </tr>\r\n \r\n </ng-container>\r\n \r\n \r\n </tbody>\r\n </table>\r\n <ng-container *ngIf=\"zonesummaryLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"zonesummaryNoData && !zonesummaryLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Zone Concentration Summary</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngIf=\"zonesummaryLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"zonesummaryNoData && !zonesummaryLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-18\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Zone Concentration Summary</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-7\">\r\n <div class=\"card-header border-0 p-4\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">{{ zoneName || '' }} Concentration Heatmap <span ngbTooltip=\"Density heatmap\"\r\n placement=\"top\" triggers=\"mouseenter:mouseleave\" tooltipClass=\"custom-tooltip\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path\r\n d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\"\r\n stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span></span>\r\n </h3>\r\n\r\n <div class=\"card-toolbar text-nowrap me-4\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <!--begin::Nav group-->\r\n <div class=\"nav-group nav-group-outline border-1 btn-group p-0\">\r\n <button class=\"btn btn-outline\" [ngClass]=\"{\r\n 'activePlanBtn': type === 'daily',\r\n 'inactivePlanBtn': type !== 'daily',\r\n 'disabled': disableDay\r\n }\" (click)=\"selectPlan('daily')\" [attr.disabled]=\"disableDay ? true : null\">\r\n Day\r\n </button>\r\n\r\n <button class=\"btn btn-outline px-6 py-3\" [ngClass]=\"{\r\n 'activePlanBtn': type === 'weekly',\r\n 'inactivePlanBtn': type !== 'weekly',\r\n 'disabled': disableWeek\r\n }\" (click)=\"selectPlan('weekly')\" [disabled]=\"disableWeek\">\r\n Week\r\n </button>\r\n <button class=\"btn btn-outline px-6 py-3\" [ngClass]=\"{\r\n 'activePlanBtn': type === 'monthly',\r\n 'inactivePlanBtn': type !== 'monthly',\r\n 'disabled': disableMonth\r\n }\" (click)=\"selectPlan('monthly')\" [disabled]=\"disableMonth\">\r\n Month\r\n </button>\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-lg-8 mb-6\">\r\n\r\n <div class=\"d-flex\">\r\n <span *ngIf=\"customArrow && !heatmapLoading && !heatmapNoData\" class=\"mt-3 cursor-pointer\"\r\n (click)=\"scrollLeft()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M15 18L9 12L15 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n <ul *ngIf=\"periodzone === 1 && !customOption\" #dateList\r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center m-2\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon active\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate\r\n }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n\r\n <ul *ngIf=\"(periodzone === 2 || periodzone === 3) && !customOption\"\r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 p-3 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center w-90px mx-3\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate\r\n }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n\r\n <ul *ngIf=\"customOption\"\r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 p-3 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center w-90px mx-3\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate\r\n }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n <span *ngIf=\"customArrow && !heatmapLoading && !heatmapNoData\" class=\"mt-3 cursor-pointer\"\r\n (click)=\"scrollRight()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M9 18L15 12L9 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </div>\r\n <div *ngIf=\"!heatmapLoading && !heatmapNoData\">\r\n <ngb-carousel #carousel [interval]=\"0\" [pauseOnHover]=\"true\" (slide)=\"onSlideChange($event)\"\r\n [id]=\"selectedDate\">\r\n <ng-container *ngFor=\"let image of overallStoreData?.ImageURLs;let i=index;\">\r\n <ng-template ngbSlide [id]=\"'ngb-slide-'+ i\">\r\n <div class=\"w-100 image-container cursor-pointer\">\r\n <img (click)=\"concentrationHeatmap(overallStoreData?.ImageURLs)\"\r\n [src]=\"image.URL\" [alt]=\"image.streamName\" class=\"cardimg\" />\r\n <a [href]=\"image.URL\" download><svg id=\"download-icon\" width=\"44\" height=\"44\"\r\n viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"icon-overlay\">\r\n <g filter=\"url(#filter0_d_3822_19479)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\"\r\n stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M29.5 23.5V26.8333C29.5 27.2754 29.3244 27.6993 29.0118 28.0118C28.6993 28.3244 28.2754 28.5 27.8333 28.5H16.1667C15.7246 28.5 15.3007 28.3244 14.9882 28.0118C14.6756 27.6993 14.5 27.2754 14.5 26.8333V23.5M17.8333 19.3333L22 23.5M22 23.5L26.1667 19.3333M22 23.5V13.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_3822_19479\" x=\"0\" y=\"0\" width=\"44\" height=\"44\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_3822_19479\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\r\n in2=\"effect1_dropShadow_3822_19479\" result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg></a>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </ngb-carousel>\r\n </div>\r\n <ng-container *ngIf=\"heatmapLoading\">\r\n <div class=\"row loader concheatmap d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"heatmapNoData && !heatmapLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body concheatmap d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Overall Store Concentration\r\n Heatmap</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"col-lg-4\">\r\n <div class=\"body me-4\">\r\n <div class=\"pt-10 m-6\">\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Total Footfall\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">{{overallStoreData?.totalFootfall?.toLocaleString('en-US',\r\n { minimumFractionDigits: 0 }) || '--' }}</span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-4\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Concentration %\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <!-- <span class=\"table-title\">{{ roundof(overallStoreData?.concentrationRate) || '0' }} %</span> -->\r\n <span class=\"table-title\">{{\r\n overallStoreData?.concentrationRate?.toLocaleString('en-US', {\r\n minimumFractionDigits: 0 }) || '--' }}%</span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Bounced Footfall\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.bouncedCount?.toLocaleString('en-US', {\r\n minimumFractionDigits: 0 }) || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div></div>\r\n <div></div>\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Engagers\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.engagersCount?.toLocaleString('en-US', {\r\n minimumFractionDigits: 0 }) || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-4\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Avg. Dwell Time\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.avgDwellTime?.toLocaleString('en-US', {\r\n minimumFractionDigits: 0 }) || '--' }} mins\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Age Range\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.ageRange?.toLocaleString('en-US', { minimumFractionDigits:\r\n 0 }) || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Male Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.maleRate?.toLocaleString('en-US', { minimumFractionDigits:\r\n 0 }) || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Female Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.femaleRate?.toLocaleString('en-US', {\r\n minimumFractionDigits: 0 }) || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <!-- <div *ngIf=\"headerData?.client == '459'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"headerData?.client == '459'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Trolley\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.trolleyRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%\r\n </span>\r\n </div>\r\n </div> -->\r\n <!-- <div *ngIf=\"headerData?.client == '459'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"headerData?.client == '459'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Basket\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.basketRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%\r\n </span>\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n <div class=\"footer me-2\">\r\n <button (click)=\"openModel()\" class=\"btn btn-light-primary mb-2 w-100\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_17126_73367)\">\r\n <path\r\n d=\"M4.16797 1.6665L4.3263 2.44984C4.43977 3.01234 4.69653 3.53603 5.07173 3.97021C5.44692 4.40439 5.92786 4.73435 6.46797 4.92817L6.66797 4.99984L6.46797 5.0715C5.92786 5.26532 5.44692 5.59529 5.07173 6.02947C4.69653 6.46365 4.43977 6.98733 4.3263 7.54984L4.16797 8.33317L4.00964 7.54984C3.89617 6.98733 3.63941 6.46365 3.26421 6.02947C2.88901 5.59529 2.40808 5.26532 1.86797 5.0715L1.66797 4.99984L1.86797 4.92817C2.40808 4.73435 2.88901 4.40439 3.26421 3.97021C3.63941 3.53603 3.89617 3.01234 4.00964 2.44984L4.16797 1.6665ZM6.66797 13.3332L6.85963 14.3965C6.9094 14.6739 7.02869 14.9341 7.20634 15.1528C7.38399 15.3716 7.61421 15.5417 7.87547 15.6473L8.33464 15.8332L7.87547 16.019C7.61416 16.1244 7.38384 16.2944 7.20605 16.513C7.02825 16.7316 6.90878 16.9917 6.8588 17.269L6.66797 18.3332L6.4763 17.2698C6.42653 16.9925 6.30725 16.7322 6.1296 16.5135C5.95194 16.2947 5.72173 16.1246 5.46047 16.019L5.0013 15.8332L5.46047 15.6473C5.72178 15.5419 5.9521 15.372 6.12989 15.1534C6.30769 14.9348 6.42716 14.6746 6.47714 14.3973L6.66797 13.3332ZM13.3346 2.49984L13.798 4.7115C14.0341 5.83907 14.5584 6.88621 15.3198 7.75081C16.0811 8.61541 17.0535 9.26796 18.1421 9.64484L19.168 9.99984L18.1421 10.3548C17.0535 10.7317 16.0811 11.3843 15.3198 12.2489C14.5584 13.1135 14.0341 14.1606 13.798 15.2882L13.3346 17.4998L12.8713 15.2882C12.6352 14.1606 12.1109 13.1135 11.3495 12.2489C10.5882 11.3843 9.61578 10.7317 8.52714 10.3548L7.5013 9.99984L8.52714 9.64484C9.61578 9.26796 10.5882 8.61541 11.3495 7.75081C12.1109 6.88621 12.6352 5.83907 12.8713 4.7115L13.3346 2.49984Z\"\r\n stroke=\"#009BF3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_17126_73367\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><span> View AI Insights</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<ng-template #zoomPopup let-model>\r\n <div class=\"ai-modal p-4\">\r\n\r\n <!-- HEADER -->\r\n <div class=\"d-flex justify-content-between align-items-center mb-4\">\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <div class=\"ai-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"56\" height=\"56\" viewBox=\"0 0 56 56\"\r\n fill=\"none\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#DAF1FF\" />\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#EAF8FF\" stroke-width=\"8\" />\r\n <path\r\n d=\"M21 18L21.19 18.94C21.3262 19.615 21.6343 20.2434 22.0845 20.7644C22.5347 21.2855 23.1119 21.6814 23.76 21.914L24 22L23.76 22.086C23.1119 22.3186 22.5347 22.7145 22.0845 23.2356C21.6343 23.7566 21.3262 24.385 21.19 25.06L21 26L20.81 25.06C20.6738 24.385 20.3657 23.7566 19.9155 23.2356C19.4653 22.7145 18.8881 22.3186 18.24 22.086L18 22L18.24 21.914C18.8881 21.6814 19.4653 21.2855 19.9155 20.7644C20.3657 20.2434 20.6738 19.615 20.81 18.94L21 18ZM24 32L24.23 33.276C24.2897 33.6088 24.4329 33.9211 24.646 34.1836C24.8592 34.4461 25.1355 34.6503 25.449 34.777L26 35L25.449 35.223C25.1354 35.3495 24.859 35.5535 24.6457 35.8158C24.4323 36.0781 24.289 36.3902 24.229 36.723L24 38L23.77 36.724C23.7103 36.3912 23.5671 36.0789 23.354 35.8164C23.1408 35.5539 22.8645 35.3497 22.551 35.223L22 35L22.551 34.777C22.8646 34.6505 23.141 34.4465 23.3543 34.1842C23.5677 33.9219 23.711 33.6098 23.771 33.277L24 32ZM32 19L32.556 21.654C32.8394 23.0071 33.4685 24.2636 34.3821 25.3012C35.2958 26.3387 36.4626 27.1217 37.769 27.574L39 28L37.769 28.426C36.4626 28.8783 35.2958 29.6613 34.3821 30.6988C33.4685 31.7364 32.8394 32.9929 32.556 34.346L32 37L31.444 34.346C31.1606 32.9929 30.5315 31.7364 29.6179 30.6988C28.7042 29.6613 27.5374 28.8783 26.231 28.426L25 28L26.231 27.574C27.5374 27.1217 28.7042 26.3387 29.6179 25.3012C30.5315 24.2636 31.1606 23.0071 31.444 21.654L32 19Z\"\r\n stroke=\"#009BF3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></div>\r\n <h5 class=\"mb-0 fw-semibold\">AI Insights for &lt;Overall Zones&gt;</h5>\r\n </div>\r\n\r\n <button class=\"btn btn-sm btn-icon\" (click)=\"model.dismiss()\">\r\n \u2715\r\n </button>\r\n </div>\r\n\r\n <!-- LIST -->\r\n <div *ngIf=\"viewImage?.mobileusagedetection || viewImage?.queueManagement || viewImage?.customerunattended || viewImage?.staffleftinthemiddle\" class=\"ai-card\">\r\n\r\n <div *ngIf=\"viewImage?.mobileusagedetection\" class=\"ai-row row\">\r\n <div class=\"left col-md-6\">\r\n <span class=\"row-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\"\r\n viewBox=\"0 0 32 32\" fill=\"none\">\r\n <path\r\n d=\"M16 1C7.716 1 1 7.716 1 16C1 24.2845 7.716 31 16 31C24.284 31 31 24.284 31 16C31 7.716 24.284 1 16 1ZM28 16C28.0029 18.6648 27.1151 21.2542 25.4775 23.3565L20.8045 18.6835V9.3875C20.8045 8.344 19.944 7.4985 18.8825 7.4985H13.1165C12.1545 7.4985 11.3645 8.1955 11.224 9.1025L8.6435 6.5225C10.7458 4.88494 13.3352 3.99707 16 4C22.627 4 28 9.3725 28 16ZM12.156 21.4795V14.277L19.3575 21.4795H12.156ZM16.576 22.9845C16.576 23.297 16.3185 23.551 16 23.551C15.6815 23.551 15.4235 23.297 15.4235 22.9845C15.4235 22.672 15.682 22.418 16 22.418C16.3185 22.418 16.576 22.672 16.576 22.9845ZM12.156 10.0345V9.3875H19.844V17.7225L12.156 10.0345ZM14.8195 8.4245C14.8195 8.294 14.927 8.188 15.0595 8.188H16.9395C17.0725 8.188 17.1805 8.294 17.1805 8.4245C17.1805 8.555 17.072 8.661 16.9395 8.661H15.0595C14.9964 8.66101 14.9359 8.6362 14.891 8.59195C14.8461 8.54769 14.8204 8.48754 14.8195 8.4245ZM4 16C3.99718 13.3353 4.88505 10.7462 6.5225 8.644L11.1945 13.3165V22.6125C11.1945 23.6565 12.055 24.502 13.1165 24.502H18.8825C19.8445 24.502 20.6345 23.8045 20.775 22.8975L23.355 25.4775C21.2531 27.1147 18.6643 28.0026 16 28C9.3725 28 4 22.628 4 16Z\"\r\n fill=\"#00A3FF\" />\r\n </svg></span>\r\n <span class=\"title\">Mobile Detection</span>\r\n </div>\r\n <div class=\"col-md-2\">\r\n\r\n <span class=\"badge mt-2\">{{viewImage?.mobileusagedetection ?? '--'}} Detections</span>\r\n </div>\r\n <div class=\"col-md-4 text-end\">\r\n <a (click)=\"flagsView()\" class=\"view-link cursor-pointer\">View In Detail <span class=\"ms-2\">\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"17\" height=\"17\" viewBox=\"0 0 17 17\" fill=\"none\">\r\n<path d=\"M13.3359 9.16829V14.1683C13.3359 14.6103 13.1603 15.0342 12.8478 15.3468C12.5352 15.6594 12.1113 15.835 11.6693 15.835H2.5026C2.06058 15.835 1.63665 15.6594 1.32409 15.3468C1.01153 15.0342 0.835938 14.6103 0.835938 14.1683V5.00163C0.835938 4.5596 1.01153 4.13568 1.32409 3.82312C1.63665 3.51056 2.06058 3.33496 2.5026 3.33496H7.5026M10.8359 0.834961H15.8359M15.8359 0.834961V5.83496M15.8359 0.834961L6.66927 10.0016\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n</svg>\r\n </span>\r\n </a>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"viewImage?.queueManagement\" class=\"ai-row row \">\r\n <div class=\"left col-md-6\">\r\n <span class=\"row-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"26\"\r\n viewBox=\"0 0 26 26\" fill=\"none\">\r\n <path\r\n d=\"M6.28571 1.71429C5.60373 1.71429 4.94968 1.9852 4.46744 2.46744C3.9852 2.94968 3.71429 3.60373 3.71429 4.28572C3.71429 4.9677 3.9852 5.62175 4.46744 6.10399C4.94968 6.58623 5.60373 6.85714 6.28571 6.85714C6.9677 6.85714 7.62175 6.58623 8.10399 6.10399C8.58623 5.62175 8.85714 4.9677 8.85714 4.28572C8.85714 3.60373 8.58623 2.94968 8.10399 2.46744C7.62175 1.9852 6.9677 1.71429 6.28571 1.71429ZM2 4.28572C2 3.14907 2.45153 2.05898 3.25526 1.25526C4.05898 0.45153 5.14907 4.12584e-07 6.28571 4.12584e-07C7.42236 4.12584e-07 8.51244 0.45153 9.31617 1.25526C10.1199 2.05898 10.5714 3.14907 10.5714 4.28572C10.5714 5.42236 10.1199 6.51245 9.31617 7.31617C8.51244 8.1199 7.42236 8.57143 6.28571 8.57143C5.14907 8.57143 4.05898 8.1199 3.25526 7.31617C2.45153 6.51245 2 5.42236 2 4.28572ZM0 12.8571C0 12.1752 0.270918 11.5211 0.753154 11.0389C1.23539 10.5566 1.88944 10.2857 2.57143 10.2857H10C10.682 10.2857 11.336 10.5566 11.8183 11.0389C12.3005 11.5211 12.5714 12.1752 12.5714 12.8571V18.8571C12.5714 20.5242 11.9092 22.123 10.7304 23.3018C9.55159 24.4806 7.95279 25.1429 6.28571 25.1429C4.61864 25.1429 3.01984 24.4806 1.84104 23.3018C0.662243 22.123 0 20.5242 0 18.8571V12.8571ZM2.57143 12C2.3441 12 2.12608 12.0903 1.96534 12.2511C1.80459 12.4118 1.71429 12.6298 1.71429 12.8571V18.8571C1.71429 20.0696 2.19592 21.2323 3.05323 22.0896C3.91054 22.9469 5.0733 23.4286 6.28571 23.4286C7.49813 23.4286 8.66089 22.9469 9.5182 22.0896C10.3755 21.2323 10.8571 20.0696 10.8571 18.8571V12.8571C10.8571 12.6298 10.7668 12.4118 10.6061 12.2511C10.4453 12.0903 10.2273 12 10 12H2.57143ZM12.5726 8.57143C11.7736 8.57303 10.9903 8.35007 10.312 7.928C10.696 7.50514 11.0137 7.01943 11.2491 6.49029C11.6393 6.72435 12.0847 6.85067 12.5397 6.85637C12.9946 6.86207 13.443 6.74694 13.8389 6.52272C14.2349 6.29851 14.5642 5.97325 14.7934 5.58014C15.0226 5.18704 15.1433 4.74016 15.1433 4.28514C15.1433 3.83012 15.0226 3.38325 14.7934 2.99014C14.5642 2.59704 14.2349 2.27178 13.8389 2.04756C13.443 1.82335 12.9946 1.70822 12.5397 1.71392C12.0847 1.71961 11.6393 1.84594 11.2491 2.08C11.014 1.55497 10.6978 1.07019 10.312 0.643429C10.8754 0.294038 11.5123 0.0801325 12.1724 0.0185371C12.8325 -0.0430583 13.4979 0.0493359 14.1163 0.288453C14.7346 0.527569 15.2891 0.906888 15.736 1.39657C16.183 1.88626 16.5102 2.47296 16.692 3.11054C16.8738 3.74811 16.9052 4.41917 16.7837 5.07093C16.6623 5.72269 16.3912 6.33738 15.992 6.86666C15.5927 7.39594 15.0761 7.82538 14.4828 8.12119C13.8894 8.417 13.2356 8.57112 12.5726 8.57143ZM12.5726 25.1429C11.929 25.1434 11.2892 25.0451 10.6754 24.8514C11.2343 24.4425 11.7332 23.9574 12.1577 23.4103C12.2949 23.4225 12.4331 23.4286 12.5726 23.4286C13.785 23.4286 14.9478 22.9469 15.8051 22.0896C16.6624 21.2323 17.144 20.0696 17.144 18.8571V12.8571C17.144 12.6298 17.0537 12.4118 16.893 12.2511C16.7322 12.0903 16.5142 12 16.2869 12H13.616C13.4634 11.3552 13.1405 10.7632 12.6811 10.2857H16.2869C16.9688 10.2857 17.6229 10.5566 18.1051 11.0389C18.5874 11.5211 18.8583 12.1752 18.8583 12.8571V18.8571C18.8583 19.6826 18.6957 20.5 18.3798 21.2626C18.0639 22.0252 17.6009 22.7181 17.0172 23.3018C16.4336 23.8855 15.7406 24.3485 14.978 24.6644C14.2154 24.9803 13.398 25.1429 12.5726 25.1429ZM16.5977 7.92686C17.2467 8.32977 17.9917 8.55188 18.7554 8.5702C19.5191 8.58851 20.2738 8.40237 20.9414 8.03103C21.609 7.6597 22.1652 7.11667 22.5524 6.45817C22.9396 5.79967 23.1438 5.04963 23.1438 4.28572C23.1438 3.5218 22.9396 2.77176 22.5524 2.11326C22.1652 1.45476 21.609 0.911734 20.9414 0.540398C20.2738 0.169062 19.5191 -0.0170835 18.7554 0.00123229C17.9917 0.019548 17.2467 0.24166 16.5977 0.644572C16.9817 1.06743 17.2994 1.552 17.5349 2.08114C17.925 1.84687 18.3704 1.72035 18.8255 1.7145C19.2806 1.70865 19.729 1.82369 20.1251 2.04786C20.5212 2.27203 20.8507 2.59731 21.0799 2.99048C21.3092 3.38364 21.43 3.8306 21.43 4.28572C21.43 4.74083 21.3092 5.18779 21.0799 5.58095C20.8507 5.97412 20.5212 6.29939 20.1251 6.52357C19.729 6.74774 19.2806 6.86278 18.8255 6.85693C18.3704 6.85108 17.925 6.72456 17.5349 6.49029C17.2997 7.01532 16.9835 7.5001 16.5977 7.92686ZM18.4423 23.4103C18.5794 23.4217 18.7185 23.4278 18.8594 23.4286C20.0718 23.4286 21.2346 22.9469 22.0919 22.0896C22.9492 21.2323 23.4309 20.0696 23.4309 18.8571V12.8571C23.4309 12.6298 23.3406 12.4118 23.1798 12.2511C23.0191 12.0903 22.801 12 22.5737 12H19.9017C19.7491 11.3552 19.4262 10.7632 18.9669 10.2857H22.5737C23.2557 10.2857 23.9098 10.5566 24.392 11.0389C24.8742 11.5211 25.1451 12.1752 25.1451 12.8571V18.8571C25.1455 19.8454 24.9128 20.8197 24.466 21.7012C24.0192 22.5826 23.3709 23.3463 22.5736 23.9302C21.7764 24.5141 20.8527 24.9019 19.8775 25.0619C18.9024 25.222 17.9032 25.1499 16.9611 24.8514C17.5196 24.4424 18.0181 23.9573 18.4423 23.4103Z\"\r\n fill=\"#00A3FF\" />\r\n </svg></span>\r\n\r\n <span class=\"title\">Queue Management</span>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <span class=\"badge mt-2\">{{viewImage?.queueManagement ?? '--'}} Detections</span>\r\n </div>\r\n <div class=\"col-md-4 text-end\">\r\n <a (click)=\"flagsView()\" class=\"view-link cursor-pointer\">View In Detail <span class=\"ms-2\">\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"17\" height=\"17\" viewBox=\"0 0 17 17\" fill=\"none\">\r\n<path d=\"M13.3359 9.16829V14.1683C13.3359 14.6103 13.1603 15.0342 12.8478 15.3468C12.5352 15.6594 12.1113 15.835 11.6693 15.835H2.5026C2.06058 15.835 1.63665 15.6594 1.32409 15.3468C1.01153 15.0342 0.835938 14.6103 0.835938 14.1683V5.00163C0.835938 4.5596 1.01153 4.13568 1.32409 3.82312C1.63665 3.51056 2.06058 3.33496 2.5026 3.33496H7.5026M10.8359 0.834961H15.8359M15.8359 0.834961V5.83496M15.8359 0.834961L6.66927 10.0016\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n</svg>\r\n </span>\r\n </a>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"viewImage?.customerunattended\" class=\"ai-row row\">\r\n <div class=\"left col-md-6\">\r\n <span class=\"row-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\"\r\n viewBox=\"0 0 32 32\" fill=\"none\">\r\n <path\r\n d=\"M12.3062 12.3076C14.6002 12.3076 16.46 10.4479 16.46 8.15381C16.46 5.85972 14.6002 4 12.3062 4C10.0121 4 8.15234 5.85972 8.15234 8.15381C8.15234 10.4479 10.0121 12.3076 12.3062 12.3076Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.91207\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M21.9999 27.9999C25.3136 27.9999 27.9999 25.3136 27.9999 21.9999C27.9999 18.6863 25.3136 16 21.9999 16C18.6863 16 16 18.6863 16 21.9999C16 25.3136 18.6863 27.9999 21.9999 27.9999Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.91207\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M17.7538 26.2459L26.246 17.7537M14.1538 15.2798C12.9364 14.9988 11.6713 14.9966 10.453 15.2733C9.23463 15.5501 8.09461 16.0987 7.11815 16.8781C6.14168 17.6574 5.35403 18.6475 4.81408 19.7742C4.27413 20.9008 3.99585 22.135 4.00005 23.3844V26.1536H11.3846\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.91207\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n\r\n\r\n <span class=\"title\">Customer Unattended</span>\r\n\r\n </div>\r\n <div class=\"col-md-2\">\r\n\r\n <span class=\"badge mt-2\">{{viewImage?.customerunattended ?? '--'}} Detections</span>\r\n </div>\r\n <div class=\"col-md-4 text-end\">\r\n <a (click)=\"flagsView()\" class=\"view-link cursor-pointer\">View In Detail <span class=\"ms-2\">\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"17\" height=\"17\" viewBox=\"0 0 17 17\" fill=\"none\">\r\n<path d=\"M13.3359 9.16829V14.1683C13.3359 14.6103 13.1603 15.0342 12.8478 15.3468C12.5352 15.6594 12.1113 15.835 11.6693 15.835H2.5026C2.06058 15.835 1.63665 15.6594 1.32409 15.3468C1.01153 15.0342 0.835938 14.6103 0.835938 14.1683V5.00163C0.835938 4.5596 1.01153 4.13568 1.32409 3.82312C1.63665 3.51056 2.06058 3.33496 2.5026 3.33496H7.5026M10.8359 0.834961H15.8359M15.8359 0.834961V5.83496M15.8359 0.834961L6.66927 10.0016\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n</svg>\r\n </span>\r\n </a>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"viewImage?.staffleftinthemiddle\" class=\"row ai-row\">\r\n <div class=\"col-md-6 left\">\r\n <span class=\"row-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"30\" height=\"26\"\r\n viewBox=\"0 0 30 26\" fill=\"none\">\r\n <path\r\n d=\"M6.7207 24.6533L6.80371 24.998L1.31738 25C1.17293 25 1 24.867 1 24.6406C1.0001 21.6993 2.70973 19.1869 5.12891 18.083L6.7207 24.6533ZM11.3115 24.665L11.3975 24.9971H8.60254L8.68848 24.6699L10 19.6426L11.3115 24.665ZM14.8701 18.0781C17.2897 19.1819 18.9999 21.6941 19 24.6357C19 24.8337 18.868 24.9606 18.7383 24.9893L18.6826 24.9951L13.1943 24.9961L13.2793 24.6484L14.8701 18.0781ZM11.166 16.6826L10.0186 18.0645L9.99707 18.0889L9.98145 18.0693L8.83398 16.6875H9.5332V16.6826H11.166ZM10 2C10.6218 2 11.2382 2.12678 11.8145 2.37305C12.3909 2.61939 12.917 2.981 13.3613 3.43945C13.8057 3.89796 14.1602 4.44377 14.4023 5.04688C14.6445 5.64998 14.7695 6.29761 14.7695 6.95215C14.7695 7.60665 14.6444 8.25434 14.4023 8.85742C14.1602 9.46055 13.8057 10.0073 13.3613 10.4658C12.917 10.9242 12.3908 11.2859 11.8145 11.5322C11.2382 11.7784 10.6218 11.9043 10 11.9043C9.37823 11.9043 8.76179 11.7784 8.18555 11.5322C7.60924 11.2859 7.08297 10.9242 6.63867 10.4658C6.19426 10.0073 5.83979 9.46055 5.59766 8.85742C5.35559 8.25434 5.23047 7.60665 5.23047 6.95215C5.2305 6.29761 5.35553 5.64998 5.59766 5.04688C5.83979 4.44377 6.19428 3.89796 6.63867 3.43945C7.08302 2.981 7.60913 2.61939 8.18555 2.37305C8.68995 2.15751 9.22496 2.03336 9.76758 2.00586L10 2Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"2\" />\r\n <path d=\"M23.3894 18.6693L28.0027 14.0026L23.3894 9.33594M26.6667 14.0026H16.6641\"\r\n stroke=\"#00A3FF\" stroke-width=\"2\" stroke-linecap=\"square\" />\r\n </svg></span>\r\n <span class=\"title\">Staff left in the Middle</span>\r\n </div>\r\n <div class=\"col-md-2\">\r\n\r\n <span class=\"badge mt-2\">{{viewImage?.staffleftinthemiddle ?? '--'}} Detections</span>\r\n </div>\r\n <div class=\"col-md-4 text-end\">\r\n <a (click)=\"flagsView()\" class=\"view-link cursor-pointer\">View In Detail <span class=\"ms-2\">\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"17\" height=\"17\" viewBox=\"0 0 17 17\" fill=\"none\">\r\n<path d=\"M13.3359 9.16829V14.1683C13.3359 14.6103 13.1603 15.0342 12.8478 15.3468C12.5352 15.6594 12.1113 15.835 11.6693 15.835H2.5026C2.06058 15.835 1.63665 15.6594 1.32409 15.3468C1.01153 15.0342 0.835938 14.6103 0.835938 14.1683V5.00163C0.835938 4.5596 1.01153 4.13568 1.32409 3.82312C1.63665 3.51056 2.06058 3.33496 2.5026 3.33496H7.5026M10.8359 0.834961H15.8359M15.8359 0.834961V5.83496M15.8359 0.834961L6.66927 10.0016\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n</svg>\r\n </span>\r\n </a>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div *ngIf=\"!viewImage?.mobileusagedetection && !viewImage?.queueManagement && !viewImage?.customerunattended && !viewImage?.staffleftinthemiddle\"\r\n class=\"text-center py-5\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">No AI Insights available for the selected zone.</div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".table-title-primary{color:var(--Primary-700, #009BF3);font-size:14px;font-weight:500;line-height:20px;text-decoration-line:underline;text-transform:capitalize}.table-title{color:var(--Gray-900, #101828);font-size:14px;font-weight:500;line-height:20px}.subtext{color:var(--Gray-800, #1D2939);font-size:14px;font-weight:500;line-height:20px}.headcount{color:var(--Gray-900, #101828);font-size:20px;font-weight:600;line-height:30px}.headtext{color:var(--Gray-700, #344054);font-size:18px;font-weight:600;line-height:28px}.subratetext{color:var(--Gray-500, #667085);font-size:12px;font-weight:500;line-height:18px}#zonechartdiv{width:100%;height:365px;margin-bottom:6%}.invoicesearch{color:var(--Gray-700, #344054)!important;width:200px;font-family:Inter;font-size:14px!important;font-style:normal;font-weight:500!important;line-height:20px}.exportwidth{width:40%}.invoicesearch::placeholder{color:var(--Gray-700, #344054)!important}.loader .title{width:65%}.loader .link{width:85%}.loader .description{width:95%}.loader .shimmer{padding:15px;width:95%;height:120px;margin:10px auto;background:#fff}.loader .shimmer .image-card{height:90px;width:90px;float:right;border-radius:8px}.loader .stroke{height:15px;background:#777;margin-top:20px}.loader .wrapper{width:0px;animation:fullView .5s forwards linear}@keyframes fullView{to{width:100%}}.loader .animate{animation:shimmer 3s;animation-iteration-count:infinite;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%}@keyframes shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.activePlanBtn{border-radius:6px;background:var(--Primary-50, #EAF8FF);color:var(--Gray-700, #344054);font-size:14px!important;font-weight:500!important;line-height:20px}.inactivePlanBtn{color:var(--Gray-500, #667085)!important;font-size:14px;font-weight:500!important;line-height:20px}.overalltext{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px}.borderdashed{border-bottom:1px solid var(--Gray-200, #EAECF0)}.conc{width:110%}.overallstore{width:155%}table td{height:70px!important;align-items:center;gap:12px;align-self:stretch}table tr{vertical-align:middle}::ng-deep .carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:-4%;margin-left:15%}.category_active{border-bottom:3px solid #009EF7!important;border-radius:3px;margin-bottom:3px!important}.timer_active{color:var(--Primary-700, #009BF3);font-size:14px;font-style:normal;font-weight:500;line-height:20px}.cardimg{width:100%;height:350px}.form-control:disabled{background-color:#f9fafb!important}.nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}.table-container{position:relative;max-height:400px;overflow-y:auto}.fixed-header th{position:sticky;top:0;background-color:#fff;z-index:2}.table.bottom-border thead th{border-bottom:2px solid #dee2e6}.table.bottom-border tbody tr td{border-bottom:1px solid #dee2e6}.table.bottom-border th,.table.bottom-border td{padding:8px 16px;white-space:nowrap}.table-responsive::-webkit-scrollbar{width:6px}.table-responsive::-webkit-scrollbar-thumb{background-color:#ddd;border-radius:4px}.rotate{transform:rotate(180deg)}.no-wrap-list{white-space:nowrap;overflow-x:auto;overflow-y:hidden;padding:0;margin:0;display:flex;flex-wrap:nowrap;-ms-overflow-style:none;scrollbar-width:none}.no-wrap-list::-webkit-scrollbar{display:none}.concheatmap{margin-top:10%}.right-border{border-right:1px solid #D0D5DD;padding-right:15px}.image-container{position:relative;display:inline-block}::ng-deep .carousel-control-next{position:absolute;top:40%!important;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff!important;text-align:center;background:none;border:0;opacity:.5;transition:opacity .15s ease;height:20px!important;background-color:transparent}::ng-deep .carousel-control-prev{position:absolute;top:40%!important;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff!important;text-align:center;background:none;border:0;opacity:.5;transition:opacity .15s ease;height:20px!important;background-color:transparent!important}::ng-deep .carousel-control-next-icon{display:inline-block;width:5rem;height:7rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}::ng-deep .carousel-control-prev-icon{display:inline-block;width:5rem;height:7rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.icon-overlay{position:absolute;cursor:pointer;top:10px;right:10px}::ng-deep .carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:8px;height:8px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#009bf3;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}::ng-deep .custom-tooltip{white-space:pre-line;max-width:500px}.head-title{color:var(--Gray-900, #101828);font-size:20px;font-weight:600;line-height:30px}.sub-title{color:var(--Gray-500, #667085);font-size:14px;font-weight:400;line-height:20px}.zone-compare-title{color:var(--Gray-800, #1D2939);font-size:14px;font-weight:500;line-height:20px}.border-full{border-radius:8px;border:1px solid var(--Gray-200, #EAECF0)}.shopper-title{color:var(--Gray-700, #344054);font-size:18px;font-weight:600;line-height:28px}.zone-selector{padding:10px;max-width:300px;position:relative;font-family:Arial,sans-serif}.title{font-weight:700;margin-bottom:8px;display:block}.zone-box{display:flex;align-items:center;justify-content:space-between;border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);padding:6px 10px;margin-bottom:6px}.remove-btn{border:none;background:transparent;cursor:pointer;font-weight:700;font-size:14px}.dropdown-input{position:relative;margin-bottom:8px}.dropdown-input input{width:100%;padding:6px;border:1px solid #51C1FF;border-radius:4px}.dropdown-list{position:absolute;top:100%;left:0;width:100%;max-height:150px;overflow-y:auto;border:1px solid #ccc;background:#fff;z-index:10;border-radius:0 0 4px 4px}.dropdown-list li{padding:8px;cursor:pointer}.dropdown-list li:hover{background-color:#e8f4ff}.limit-warning{color:red;font-size:12px;margin-bottom:8px;position:absolute;bottom:32px;left:30px;right:0}.actions{display:flex;justify-content:space-between;gap:8px}.actions button{padding:6px 12px;border:none;border-radius:4px;cursor:pointer}.apply-btn{background-color:#addbff}.apply-btn:disabled{opacity:.5;cursor:not-allowed}.ellipse1{border-radius:6px;border-bottom:2px solid var(--Gray-200, #EAECF0);background:radial-gradient(206.89% 107.47% at 16.16% 32.77%,#fff6,#45bbfe33),#f2f4f7;box-shadow:0 4px 10px #0000000d}.sub-header{color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:20px}.border-1{padding:8px;border-radius:12px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important}.shopper-ellipse1{border-radius:24px;background:var(--Primary-50, #EAF8FF);height:150px;padding:8px}.perctage{color:#475467!important}.minsbadge{border-radius:8px;border:1px solid #D0D5DD;background:#fff;box-shadow:0 1px 2px #1018280d;display:flex;align-items:center;gap:4px;z-index:1;font-size:12px}.minsbadgeprimary{padding:4px 15px;justify-content:center;align-items:center;gap:4px;border-radius:16px!important;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3);text-align:center;font-size:12px;font-style:normal;font-weight:500;line-height:18px}.toggle-icon{width:18px;cursor:pointer;font-weight:700}.child-row{background-color:#f6fcff}.concentration-table{width:100%;border-collapse:collapse}.concentration-table th{text-align:left;font-weight:600;padding:12px;border-bottom:1px solid #e5e7eb}.concentration-table td{padding:12px;border-bottom:1px solid #f1f5f9}.parent-row{background:#fff;font-weight:500}.child-row{background:F6FCFF}.child-zone{padding-left:36px;color:#009bf3}.toggle{display:inline-block;width:18px;cursor:pointer;font-weight:700;margin-right:6px}.zone-name{color:#009bf3;cursor:pointer}.underline{text-decoration:underline}.btn-light-primary{background-color:var(--Primary-50, #EAF8FF)!important;border-radius:8px;border-width:1px;padding:8px 14px;color:var(--Primary-700, #009BF3)}.btn.btn-light-primary:focus:not(.btn-active),.btn.btn-light-primary:hover:not(.btn-active),.btn.btn-light-primary:active:not(.btn-active){background-color:var(--Primary-50, #EAF8FF)!important;color:var(--Primary-700, #009BF3)!important}.ai-modal{background:#fff;border-radius:12px}.ai-icon{width:32px;height:32px;background:#eef4ff;border-radius:50%;display:flex;align-items:center;justify-content:center}.ai-card{border-radius:10px;padding:8px}.ai-row{padding:8px;border-radius:8px;border:1px solid #e5e7eb;margin-bottom:7px}.ai-row:last-child{margin-bottom:0}.left{display:flex;align-items:center;gap:10px}.row-icon{font-size:18px}.title{font-weight:500}.badge{background:#f1f5f9;color:#475569;font-size:12px;padding:4px 10px;border-radius:16px}.view-link{font-weight:600;font-size:14px;line-height:20px;letter-spacing:0%;text-transform:capitalize}\n"] }]
462
+ }], ctorParameters: () => [{ type: i0.NgZone }, { type: i1.NgbModal }, { type: i2.FormBuilder }, { type: i3.ZoneService }, { type: i0.ChangeDetectorRef }, { type: i4.ToastService }, { type: i5.GlobalStateService }, { type: i0.ElementRef }, { type: i6.Router }], propDecorators: { dateList: [{
403
463
  type: ViewChild,
404
464
  args: ['dateList', { read: ElementRef }]
465
+ }], zoomPopup: [{
466
+ type: ViewChild,
467
+ args: ['zoomPopup']
405
468
  }] } });
406
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9uZS1jb25jZW50cmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLWFuYWx5c2Utem9uZS9zcmMvbGliL2NvbXBvbmVudHMvem9uZS1jb25jZW50cmF0aW9uL3pvbmUtY29uY2VudHJhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXpvbmUvc3JjL2xpYi9jb21wb25lbnRzL3pvbmUtY29uY2VudHJhdGlvbi96b25lLWNvbmNlbnRyYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsVUFBVSxFQUFrRCxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFcEksT0FBTyxFQUFFLGlCQUFpQixFQUEyQixNQUFNLDRCQUE0QixDQUFDO0FBSXhGLE9BQU8sRUFBYyxPQUFPLEVBQUUsWUFBWSxFQUF3QixTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUYsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDOzs7Ozs7OztBQVF0RyxNQUFNLE9BQU8sMEJBQTBCO0lBMENqQjtJQUFxQjtJQUFnQztJQUF5QjtJQUFrQztJQUEyQztJQUE0QjtJQUErQjtJQXpDMU8sS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNkLFdBQVcsR0FBTyxFQUFFLENBQUM7SUFDckIsY0FBYyxHQUFRLEtBQUssQ0FBQztJQUM1QixhQUFhLEdBQVcsRUFBRSxDQUFDO0lBQzNCLE1BQU0sR0FBUSxFQUFFLENBQUM7SUFDakIscUJBQXFCLEdBQVUsRUFBRSxDQUFDO0lBQ2xDLGdCQUFnQixHQUFRLEVBQUUsQ0FBQztJQUMzQixJQUFJLEdBQVcsT0FBTyxDQUFDO0lBQ3ZCLDhCQUE4QixHQUFVLEVB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Q0FBQyxDQUFDO1lBQ3RDLElBQUcsV0FBVyxFQUFFO2dCQUNkLFdBQVcsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFDLGNBQWMsQ0FBQyxDQUFBO2FBQ2pEO1NBRUY7YUFDSTtZQUNILFdBQVcsRUFBRSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEMsV0FBVyxFQUFFLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUN2QztJQUNQLENBQUM7d0dBdFlZLDBCQUEwQjs0RkFBMUIsMEJBQTBCLGlEQUYxQixDQUFDLGlCQUFpQixDQUFDLDJHQXNDRCxVQUFVLDZCQ3BEekMsbS90Q0FnZ0JNOzs0RkRoZk8sMEJBQTBCO2tCQU50QyxTQUFTOytCQUNFLHdCQUF3QixhQUd2QixDQUFDLGlCQUFpQixDQUFDOzJRQXNDWSxRQUFRO3NCQUFqRCxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFDLElBQUksRUFBQyxVQUFVLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBpbXBvcnRQcm92aWRlcnNGcm9tLCBOZ1pvbmUsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE5nYkNhcm91c2VsQ29uZmlnLCBOZ2JNb2RhbCwgTmdiU2xpZGVFdmVudCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgWm9uZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy96b25lLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktc2hhcmVkJztcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xyXG5pbXBvcnQgeyBDb25jZW50cmF0aW9uaGVhdG1hcENvbXBvbmVudCB9IGZyb20gJy4vY29uY2VudHJhdGlvbmhlYXRtYXAvY29uY2VudHJhdGlvbmhlYXRtYXAuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXpvbmUtY29uY2VudHJhdGlvbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3pvbmUtY29uY2VudHJhdGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3pvbmUtY29uY2VudHJhdGlvbi5jb21wb25lbnQuc2NzcycsXHJcbiAgcHJvdmlkZXJzOiBbTmdiQ2Fyb3VzZWxDb25maWddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgWm9uZUNvbmNlbnRyYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsT25EZXN0cm95IHtcclxuICBkYXlqcyA9IGRheWpzO1xyXG4gIHNlYXJjaElucHV0OiBhbnkgPVwiXCI7XHJcbiAgc2VhcmNoRGlzYWJsZWQ6IGFueSA9IGZhbHNlO1xyXG4gIHNvcnRDb2x1bU5hbWU6IHN0cmluZyA9ICcnO1xyXG4gIHNvcnRCeTogYW55ID0gJyc7XHJcbiAgem9uZUNvbmNlbnRyYXRpb25EYXRhOiBhbnlbXSA9IFtdO1xyXG4gIG92ZXJhbGxTdG9yZURhdGE6IGFueSA9IHt9O1xyXG4gIHR5cGU6IHN0cmluZyA9ICdkYWlseSc7IFxyXG4gIG92ZXJhbGxTdG9yZUNvbmNlbnRyYXRpb25EYXRlczogYW55W10gPSBbXTtcclxuICBzZWxlY3RlZERhdGU6IHN0cmluZyA9ICcnO1xyXG4gIHBlcmlvZHpvbmU6IG51bWJlciA9IDE7IFxyXG4gIGN1c3RvbU9wdGlvbjogYm9vbGVhbiA9IGZhbHNlOyBcclxuICB0aW1lcl9hY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTsgXHJcbiAgem9uZXN1bW1hcnlMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICB6b25lc3VtbWFyeU5vRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGhlYXRtYXBMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBoZWF0bWFwTm9EYXRhOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaGVhZGVyRGF0YTogYW55O1xyXG4gIHNvcnREaXJlY3Rpb246IGFueSA9ICcnO1xyXG4gIHpvbmVOYW1lOiBzdHJpbmcgPSAnJztcclxuICBkaXNhYmxlRGF5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgZGlzYWJsZVdlZWs6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBkaXNhYmxlTW9udGg6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjdXN0b21BcnJvdzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzRXhwb3J0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgY3VycmVudFNsaWRlID0gMDtcclxuICBjdXJyZW50U2xpZGVJbmRleCA9IDA7XHJcbiAgLy8gc3RhcnRJbmRleDogbnVtYmVyID0gMDtcclxuICAvLyBkYXRlc1BlclBhZ2U6IG51bWJlciA9IDU7XHJcbiAgLy8gdmlzaWJsZURhdGVzOiBhbnlbXSA9IFtdO1xyXG4gIC8vIHRpbWVyX2FjdGl2ZSA9IDA7XHJcbiAgLy8gcGVyaW9kem9uZSA9IDE7XHJcbiAgLy8gY3VzdG9tT3B0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLy8gb3ZlcmFsbFN0b3JlQ29uY2VudHJhdGlvbkRhdGVzOiBBcnJheTx7IHpvbmVEYXRlOiBzdHJpbmcgfT4gPSBbXTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuICBAVmlld0NoaWxkKCdkYXRlTGlzdCcsIHtyZWFkOkVsZW1lbnRSZWZ9KSBkYXRlTGlzdCE6RWxlbWVudFJlZjtcclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbiAgc3RvcmVJZGFycmF5OiBhbnkgPVtdO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgem9uZTogTmdab25lLCBwdWJsaWMgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCwgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsIHByaXZhdGUgWm9uZVNlcnZpY2U6IFpvbmVTZXJ2aWNlLCBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSB0b2FzdDogVG9hc3RTZXJ2aWNlLCBwdWJsaWMgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSxwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsKSB7fVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCksIGRlYm91bmNlVGltZSgzMDApKVxyXG4gICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuaGVhZGVyRGF0YSA9IGRhdGE7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlSWRhcnJheSA9IHRoaXMuaGVhZGVyRGF0YT8uc3RvcmVzLmZpbHRlcigoc3RvcmU6IGFueSkgPT4gc3RvcmUuY2hlY2tlZCkubWFwKChzdG9yZTogYW55KSA9PiBzdG9yZS5zdG9yZUlkKVxyXG4gICAgICAgICAgbGV0IHNEYXRlID0gdGhpcy5kYXlqcyh0aGlzLmhlYWRlckRhdGEuZGF0ZS5zdGFydERhdGUpO1xyXG4gICAgICAgICAgbGV0IGVEYXRlID0gdGhpcy5kYXlqcyh0aGlzLmhlYWRlckRhdGEuZGF0ZS5lbmREYXRlKTtcclxuICAgICAgICAgIHRoaXMuY3VzdG9tQXJyb3cgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudHlwZSA9ICdkYWlseSc7XHJcbiAgICAgICAgICAvLyBpZihlRGF0ZS5kaWZmKHNEYXRlLCdkYXknKSA8IDcpIHtcclxuICAgICAgICAgIC8vICAgdGhpcy5kaXNhYmxlV2VlayA9IHRydWU7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuZGlzYWJsZU1vbnRoID0gdHJ1ZTtcclxuICAgICAgICAgIC8vICAgLy8gdGhpcy50eXBlID0gJ2RhaWx5JztcclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIC8vIGVsc2UgaWYoZURhdGUuZGlmZihzRGF0ZSwnZGF5JykgPCAyNykge1xyXG4gICAgICAgICAgLy8gICB0aGlzLmRpc2FibGVNb250aCA9IHRydWU7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuZGlzYWJsZURheSA9IGZhbHNlO1xyXG4gICAgICAgICAgLy8gICB0aGlzLmRpc2FibGVXZWVrID0gZmFsc2U7XHJcbiAgICAgICAgICAvLyAgIC8vIHRoaXMudHlwZSA9ICd3ZWVrbHknO1xyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgLy8gZWxzZSB7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuZGlzYWJsZURheSA9IGZhbHNlO1xyXG4gICAgICAgICAgLy8gICB0aGlzLmRpc2FibGVXZWVrID0gZmFsc2U7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuZGlzYWJsZU1vbnRoID0gZmFsc2U7XHJcbiAgICAgICAgICAvLyAgIC8vIHRoaXMudHlwZSA9ICdtb250aGx5JztcclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIHRoaXMuZ2V0Wm9uZUNvbmNlbnRyYXRpb25EYXRhKCk7XHJcbiAgICAgICAgICAvLyB0aGlzLmdldE92ZXJhbGxTdG9yZUNvbmNlbnRyYXRpb25EYXRhKCk7XHJcbiAgICAgICAgICAvLyB0aGlzLmdldE92ZXJhbGxTdG9yZUhlYXRtYXBEYXRlcygpO1xyXG59KVxyXG4gIFxyXG4gIH1cclxuXHJcbiAgZ2V0Wm9uZUNvbmNlbnRyYXRpb25EYXRhKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWFyY2hEaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnpvbmVzdW1tYXJ5TG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnpvbmVzdW1tYXJ5Tm9EYXRhID0gdHJ1ZTtcclxuICAgIHRoaXMuaGVhdG1hcExvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5oZWF0bWFwTm9EYXRhID0gdHJ1ZTtcclxuICAgIGNvbnN0IHJlcXVlc3REYXRhID0ge1xyXG4gICAgICBmcm9tRGF0ZTogdGhpcy5oZWFkZXJEYXRhLmRhdGUuc3RhcnREYXRlLFxyXG4gICAgICB0b0RhdGU6IHRoaXMuaGVhZGVyRGF0YS5kYXRlLmVuZERhdGUsXHJcbiAgICAgIHN0b3JlSWQ6IHRoaXMuaGVhZGVyRGF0YS5zdG9yZXMuZmlsdGVyKChzdG9yZTphbnkpID0+IHN0b3JlLmNoZWNrZWQpLm1hcCgoc3RvcmU6YW55KSA9PiBzdG9yZS5zdG9yZUlkKSxcclxuICAgICAgLy8gc3RvcmVJZDogW1wiMjE4LTJcIl0sXHJcbiAgICAgIGNsaWVudElkOnRoaXMuaGVhZGVyRGF0YS5jbGllbnQsXHJcbiAgICAgIHNlYXJjaDogdGhpcy5zZWFyY2hJbnB1dCxcclxuICAgICAgc29ydDogdGhpcy5zb3J0Q29sdW1OYW1lLFxyXG4gICAgICBzb3J0Qnk6IHRoaXMuc29ydERpcmVjdGlvbixcclxuICAgICAgZXhwb3J0OiBmYWxzZSxcclxuICAgIH07XHJcblxyXG5cclxuICAgIHRoaXMuWm9uZVNlcnZpY2Uuem9uZUNvbmNlbnRyYXRpb25UYWJsZURhdGEocmVxdWVzdERhdGEpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy56b25lc3VtbWFyeUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAocmVzcG9uc2U/LmNvZGUgPT09IDIwMCAmJiByZXNwb25zZT8uc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xyXG4gICAgICAgICAgdGhpcy56b25lQ29uY2VudHJhdGlvbkRhdGEgPSByZXNwb25zZS5kYXRhLnpvbmVDb25jZW50cmF0aW9uRGF0YTtcclxuICAgICAgICAgIC8vIHRoaXMuem9uZU5hbWUgPSByZXNwb25zZS5kYXRhLnpvbmVDb25jZW50cmF0aW9uRGF0YVswXS56b25lTmFtZTtcclxuICAgICAgICAgIHRoaXMuem9uZU5hbWUgPSB0aGlzLnpvbmVDb25jZW50cmF0aW9uRGF0YS5sZW5ndGggPyB0aGlzLnpvbmVDb25jZW50cmF0aW9uRGF0YVswXS56b25lTmFtZSA6ICcnO1xyXG4gICAgICAgICAgdGhpcy5ab25lU2VydmljZS5zZXREYXRhKHRoaXMuem9uZU5hbWUpO1xyXG4gICAgICAgICAgdGhpcy56b25lc3VtbWFyeUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuem9uZXN1bW1hcnlOb0RhdGEgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaGVhdG1hcExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaGVhdG1hcE5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hEaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5nZXRPdmVyYWxsU3RvcmVIZWF0bWFwRGF0ZXMoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gdGhpcy5oZWFkZXJEYXRhLmRhdGUuc3RhcnREYXRlID0gbnVsbDtcclxuICAgICAgICAgIC8vICAgdGhpcy5oZWFkZXJEYXRhLmRhdGUuZW5kRGF0ZSA9IG51bGw7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuem9uZUNvbmNlbnRyYXRpb25EYXRhID0gW107XHJcbiAgICAgICAgICB0aGlzLnpvbmVzdW1tYXJ5TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy56b25lc3VtbWFyeU5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmhlYXRtYXBMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmhlYXRtYXBOb0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hEaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hJbnB1dD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRGlzYWJsZWQgPSB0cnVlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnpvbmVDb25jZW50cmF0aW9uRGF0YSA9IFtdXHJcbiAgICAgICAgICB0aGlzLm92ZXJhbGxTdG9yZURhdGEgPSBbXVxyXG4gICAgICAgICAgdGhpcy5vdmVyYWxsU3RvcmVDb25jZW50cmF0aW9uRGF0ZXMgPSBbXVxyXG4gICAgICAgICAgdGhpcy56b25lTmFtZSA9IFwiXCJcclxuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgdGhpcy56b25lQ29uY2VudHJhdGlvbkRhdGEgPSBbXVxyXG4gICAgICAgIHRoaXMub3ZlcmFsbFN0b3JlQ29uY2VudHJhdGlvbkRhdGVzID0gW11cclxuICAgICAgICB0aGlzLnpvbmVOYW1lID0gXCJcIlxyXG4gICAgICAgIC8vIHRoaXMuaGVhZGVyRGF0YS5kYXRlLnN0YXJ0RGF0ZSA9IG51bGw7XHJcbiAgICAgICAgLy8gdGhpcy5oZWFkZXJEYXRhLmRhdGUuZW5kRGF0ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKClcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9uRXhwb3J0KCkge1xyXG4gICAgY29uc3QgcmVxdWVzdERhdGEgPSB7XHJcbiAgICAgIGZyb21EYXRlOiB0aGlzLmhlYWRlckRhdGEuZGF0ZS5zdGFydERhdGUsXHJcbiAgICAgIHRvRGF0ZTogdGhpcy5oZWFkZXJEYXRhLmRhdGUuZW5kRGF0ZSxcclxuICAgICAgc3RvcmVJZDogdGhpcy5oZWFkZXJEYXRhLnN0b3Jlcy5maWx0ZXIoKHN0b3JlOmFueSkgPT4gc3RvcmUuY2hlY2tlZCkubWFwKChzdG9yZTphbnkpID0+IHN0b3JlLnN0b3JlSWQpLFxyXG4gICAgICAvLyBzdG9yZUlkOiBbXCIxMS0yNTNcIiwgXCIxMS01MTFcIixcIjExLTExNzZcIl0sXHJcbiAgICAgIGNsaWVudElkOnRoaXMuaGVhZGVyRGF0YS5jbGllbnQsXHJcbiAgICAgIHNlYXJjaDogdGhpcy5zZWFyY2hJbnB1dCxcclxuICAgICAgZXhwb3J0OiB0cnVlLFxyXG4gICAgICBzb3J0OiB0aGlzLnNvcnRDb2x1bU5hbWUsXHJcbiAgICAgIHNvcnRCeTogdGhpcy5zb3J0RGlyZWN0aW9uLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLlpvbmVTZXJ2aWNlLnpvbmVDb25jZW50cmF0aW9uVGFibGVEYXRhRXhwb3J0KHJlcXVlc3REYXRhKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlcykgPT4ge1xyXG4gICAgICAgIHRoaXMuWm9uZVNlcnZpY2Uuc2F2ZUFzRXhjZWxGaWxlKHJlcywgJ1pvbmVDb25jZW50cmF0aW9uU3VtbWFyeScpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGUpID0+IHtcclxuICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ1NvbWV0aGluZyB3ZW50IFdyb25nLi4nKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgc29ydERhdGEoY29sdW1uOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNvcnRDb2x1bU5hbWUgPT09IGNvbHVtbikge1xyXG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSB0aGlzLnNvcnREaXJlY3Rpb24gPT09IDEgPyAtMSA6IDE7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNvcnRDb2x1bU5hbWUgPSBjb2x1bW47XHJcbiAgICAgIHRoaXMuc29ydERpcmVjdGlvbiA9IDE7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdldFpvbmVDb25jZW50cmF0aW9uRGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoRmllbGQoKTogdm9pZCB7XHJcbiAgIHRoaXMuc2VhcmNoRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy56b25lc3VtbWFyeUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy56b25lc3VtbWFyeU5vRGF0YSA9IHRydWU7XHJcbiAgICBjb25zdCByZXF1ZXN0RGF0YSA9IHtcclxuICAgICAgZnJvbURhdGU6IHRoaXMuaGVhZGVyRGF0YS5kYXRlLnN0YXJ0RGF0ZSxcclxuICAgICAgdG9EYXRlOiB0aGlzLmhlYWRlckRhdGEuZGF0ZS5lbmREYXRlLFxyXG4gICAgICBzdG9yZUlkOiB0aGlzLmhlYWRlckRhdGEuc3RvcmVzLmZpbHRlcigoc3RvcmU6YW55KSA9PiBzdG9yZS5jaGVja2VkKS5tYXAoKHN0b3JlOmFueSkgPT4gc3RvcmUuc3RvcmVJZCksXHJcbiAgICAgIC8vIHN0b3JlSWQ6IFtcIjIxOC0yXCJdLFxyXG4gICAgICBjbGllbnRJZDp0aGlzLmhlYWRlckRhdGEuY2xpZW50LFxyXG4gICAgICBzZWFyY2g6IHRoaXMuc2VhcmNoSW5wdXQsXHJcbiAgICAgIHNvcnQ6IHRoaXMuc29ydENvbHVtTmFtZSxcclxuICAgICAgc29ydEJ5OiB0aGlzLnNvcnREaXJlY3Rpb24sXHJcbiAgICAgIGV4cG9ydDogZmFsc2UsXHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICB0aGlzLlpvbmVTZXJ2aWNlLnpvbmVDb25jZW50cmF0aW9uVGFibGVEYXRhKHJlcXVlc3REYXRhKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuem9uZXN1bW1hcnlMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlPy5jb2RlID09PSAyMDAgJiYgcmVzcG9uc2U/LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcclxuICAgICAgICAgIHRoaXMuem9uZUNvbmNlbnRyYXRpb25EYXRhID0gcmVzcG9uc2UuZGF0YS56b25lQ29uY2VudHJhdGlvbkRhdGE7XHJcbiAgICAgICAgICAvLyB0aGlzLnpvbmVOYW1lID0gcmVzcG9uc2UuZGF0YS56b25lQ29uY2VudHJhdGlvbkRhdGFbMF0uem9uZU5hbWU7XHJcbiAgICAgICAgICAvLyB0aGlzLnpvbmVOYW1lID0gdGhpcy56b25lQ29uY2VudHJhdGlvbkRhdGEubGVuZ3RoID8gdGhpcy56b25lQ29uY2VudHJhdGlvbkRhdGFbMF0uem9uZU5hbWUgOiAnJztcclxuICAgICAgICAgIHRoaXMuem9uZXN1bW1hcnlMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnpvbmVzdW1tYXJ5Tm9EYXRhID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaERpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIHRoaXMuaGVhZGVyRGF0YS5kYXRlLnN0YXJ0RGF0ZSA9IG51bGw7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuaGVhZGVyRGF0YS5kYXRlLmVuZERhdGUgPSBudWxsO1xyXG4gICAgICAgICAgICAvLyB0aGlzLnpvbmVDb25jZW50cmF0aW9uRGF0YSA9IFtdO1xyXG4gICAgICAgICAgdGhpcy56b25lc3VtbWFyeUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuem9uZXN1bW1hcnlOb0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hEaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hJbnB1dD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRGlzYWJsZWQgPSB0cnVlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnpvbmVDb25jZW50cmF0aW9uRGF0YSA9IFtdXHJcbiAgICAgICAgICB0aGlzLm92ZXJhbGxTdG9yZURhdGEgPSBbXVxyXG4gICAgICAgICAgdGhpcy5vdmVyYWxsU3RvcmVDb25jZW50cmF0aW9uRGF0ZXMgPSBbXVxyXG4gICAgICAgICAgdGhpcy56b25lTmFtZSA9IFwiXCJcclxuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgdGhpcy56b25lQ29uY2VudHJhdGlvbkRhdGEgPSBbXVxyXG4gICAgICAgIHRoaXMub3ZlcmFsbFN0b3JlQ29uY2VudHJhdGlvbkRhdGVzID0gW11cclxuICAgICAgICB0aGlzLnpvbmVOYW1lID0gXCJcIlxyXG4gICAgICAgIC8vIHRoaXMuaGVhZGVyRGF0YS5kYXRlLnN0YXJ0RGF0ZSA9IG51bGw7XHJcbiAgICAgICAgLy8gdGhpcy5oZWFkZXJEYXRhLmRhdGUuZW5kRGF0ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKClcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIFxyXG4gIH1cclxuXHJcbiAgZ2V0T3ZlcmFsbFN0b3JlQ29uY2VudHJhdGlvbkRhdGEoKTogdm9pZCB7XHJcbiAgICB0aGlzLmhlYXRtYXBMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuaGVhdG1hcE5vRGF0YSA9IHRydWU7XHJcbiAgICBjb25zdCByZXF1ZXN0RGF0YSA9IHtcclxuICAgICAgZnJvbURhdGU6IHRoaXMuaGVhZGVyRGF0YS5kYXRlLnN0YXJ0RGF0ZSxcclxuICAgICAgdG9EYXRlOiB0aGlzLmhlYWRlckRhdGEuZGF0ZS5lbmREYXRlLFxyXG4gICAgICBzdG9yZUlkOiB0aGlzLmhlYWRlckRhdGEuc3RvcmVzLmZpbHRlcigoc3RvcmU6YW55KSA9PiBzdG9yZS5jaGVja2VkKS5tYXAoKHN0b3JlOmFueSkgPT4gc3RvcmUuc3RvcmVJZCksXHJcbiAgICAgIC8vIHN0b3JlSWQ6IFtcIjExLTExNzZcIl0sXHJcbiAgICAgIGNsaWVudElkOnRoaXMuaGVhZGVyRGF0YS5jbGllbnQsXHJcbiAgICAgIHpvbmVOYW1lOiB0aGlzLnpvbmVOYW1lLFxyXG4gICAgICBkYXRlVHlwZTogdGhpcy50eXBlLFxyXG4gICAgICB6b25lRGF0ZTogdGhpcy5zZWxlY3RlZERhdGVcclxuICAgIH07XHJcbiAgICB0aGlzLlpvbmVTZXJ2aWNlLmdldE92ZXJhbGxTdG9yZUNvbmNlbnRyYXRpb25EYXRhKHJlcXVlc3REYXRhKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIC8vIHRoaXMuaGVhdG1hcExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAocmVzcG9uc2U/LmNvZGUgPT09IDIwMCAmJiByZXNwb25zZT8uc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xyXG4gICAgICAgICAgLy8gdGhpcy5vdmVyYWxsU3RvcmVEYXRhID0gcmVzcG9uc2UuZGF0YS5vdmVyYWxsU3RvcmVDb25jZW50cmF0aW9uRGF0YXM7XHJcbiAgICAgICAgICB0aGlzLm92ZXJhbGxTdG9yZURhdGEgPSByZXNwb25zZS5kYXRhLm92ZXJhbGxTdG9yZUNvbmNlbnRyYXRpb25EYXRhcztcclxuICAgICAgICAgIHRoaXMuaGVhdG1hcExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaGVhdG1hcE5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBwcmV2RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jYXJvdXNlbC1jb250cm9sLXByZXYnKTtcclxuICAgICAgICAgICAgcHJldkVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCdkaXNwbGF5Om5vbmUnKTtcclxuICAgICAgICAgIH0sIDIwMCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMub3ZlcmFsbFN0b3JlRGF0YSA9W11cclxuICAgICAgICAgIC8vIHRoaXMuem9uZUNvbmNlbnRyYXRpb25EYXRhID0gW11cclxuICAgICAgICAgIHRoaXMuaGVhdG1hcExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaGVhdG1hcE5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgdGhpcy5vdmVyYWxsU3RvcmVEYXRhID1bXVxyXG4gICAgICAgIC8vIHRoaXMuem9uZUNvbmNlbnRyYXRpb25EYXRhID0gW11cclxuICAgICAgICAvLyBjb25zb2xlLmVycm9yKCdBUEkgY2FsbCBmYWlsZWQnLCBlcnJvcik7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRPdmVyYWxsU3RvcmVIZWF0bWFwRGF0ZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLm92ZXJhbGxTdG9yZUNvbmNlbnRyYXRpb25EYXRlcyA9IFtdXHJcbiAgICAgIHRoaXMub3ZlcmFsbFN0b3JlRGF0YSA9W11cclxuICAgIHRoaXMuY3VzdG9tQXJyb3cgPSBmYWxzZTtcclxuICAgIHRoaXMuaGVhdG1hcExvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5oZWF0bWFwTm9EYXRhID0gdHJ1ZTtcclxuICAgIGNvbnN0IHJlcXVlc3REYXRhID0ge1xyXG4gICAgICBmcm9tRGF0ZTogdGhpcy5oZWFkZXJEYXRhLmRhdGUuc3RhcnREYXRlLFxyXG4gICAgICB0b0RhdGU6IHRoaXMuaGVhZGVyRGF0YS5kYXRlLmVuZERhdGUsXHJcbiAgICAgIHN0b3JlSWQ6IHRoaXMuaGVhZGVyRGF0YS5zdG9yZXMuZmlsdGVyKChzdG9yZTphbnkpID0+IHN0b3JlLmNoZWNrZWQpLm1hcCgoc3RvcmU6YW55KSA9PiBzdG9yZS5zdG9yZUlkKSxcclxuICAgICAgLy8gc3RvcmVJZDogW1wiMTEtMTE3NlwiXSxcclxuICAgICAgY2xpZW50SWQ6dGhpcy5oZWFkZXJEYXRhLmNsaWVudCxcclxuICAgICAgem9uZU5hbWU6IHRoaXMuem9uZU5hbWUsXHJcbiAgICAgIGRhdGVUeXBlOiB0aGlzLnR5cGVcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5ab25lU2VydmljZS5nZXRPdmVyYWxsU3RvcmVIZWF0bWFwRGF0ZXMocmVxdWVzdERhdGEpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYocmVzcG9uc2UgJiYgcmVzcG9uc2UuZGF0YSl7XHJcbiAgICAgICAgdGhpcy5vdmVyYWxsU3RvcmVDb25jZW50cmF0aW9uRGF0ZXMgPSByZXNwb25zZS5kYXRhLm92ZXJhbGxTdG9yZUNvbmNlbnRyYXRpb25EYXRlcztcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IHRoaXMub3ZlcmFsbFN0b3JlQ29uY2VudHJhdGlvbkRhdGVzWzBdLnpvbmVEYXRlOyBcclxuICAgICAgICBpZiAocmVzcG9uc2U/LmNvZGUgPT09IDIwMCAmJiByZXNwb25zZT8uc3RhdHVzID09PSBcInN1Y2Nlc3NcIiAmJiByZXNwb25zZS5kYXRhLm92ZXJhbGxTdG9yZUNvbmNlbnRyYXRpb25EYXRlcy5sZW5ndGgpIHtcclxuICAgICAgICAgXHJcbiAgICAgICAgICAvLyBpZihbJ3dlZWtseScsJ21vbnRobHknXS5pbmNsdWRlcyh0aGlzLnR5cGUpKSB7XHJcbiAgICAgICAgICAvLyAgIGxldCBsYXN0RGlnaXQgPSB0aGlzLm92ZXJhbGxTdG9yZUNvbmNlbnRyYXRpb25EYXRlc1t0aGlzLm92ZXJhbGxTdG9yZUNvbmNlbnRyYXRpb25EYXRlcy5sZW5ndGggLTFdLnpvbmVEYXRlO1xyXG4gICAgICAgICAgLy8gICBsZXQgbGFzdFNwbGl0ID0gbGFzdERpZ2l0LnNwbGl0KCctJylbMV07XHJcbiAgICAgICAgICAvLyAgIGxhc3RTcGxpdCA9IGxhc3RTcGxpdCArJyAnKyB0aGlzLmRheWpzKCkuZm9ybWF0KCdZWVlZJyk7XHJcbiAgICAgICAgICAvLyAgIGlmKHRoaXMuZGF5anMobGFzdFNwbGl0LCdNTU0gREQgWVlZWScpLmZvcm1hdCgnWVlZWS1NTS1ERCcpID4gdGhpcy5kYXlqcyh0aGlzLmhlYWRlckRhdGEuZGF0ZS5lbmREYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQnKSlcclxuICAgICAgICAgIC8vICAgICB0aGlzLm92ZXJhbGxTdG9yZUNvbmNlbnRyYXRpb25EYXRlcy5zcGxpY2UodGhpcy5vdmVyYWxsU3RvcmVDb25jZW50cmF0aW9uRGF0ZXMubGVuZ3RoLTEsMSk7XHJcbiAgICAgICAgICAvLyAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2RhaWx5Jykge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLm92ZXJhbGxTdG9yZUNvbmNlbnRyYXRpb25EYXRlcy5sZW5ndGggPiA3KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbUFycm93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSAnd2Vla2x5Jykge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLm92ZXJhbGxTdG9yZUNvbmNlbnRyYXRpb25EYXRlcy5sZW5ndGggPiA0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbUFycm93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0T3ZlcmFsbFN0b3JlQ29uY2VudHJhdGlvbkRhdGEoKTtcclxuICAgICAgICAgIC8vICAgdGhpcy5oZWF0bWFwTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgLy8gdGhpcy5oZWF0bWFwTm9EYXRhID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcclxuICAgICAgICAgIHRoaXMuaGVhdG1hcExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaGVhdG1hcE5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICB0aGlzLmhlYXRtYXBMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmhlYXRtYXBOb0RhdGEgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgdGhpcy5vdmVyYWxsU3RvcmVEYXRhID1bXVxyXG4gICAgICAgIHRoaXMuaGVhdG1hcExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmhlYXRtYXBOb0RhdGEgPSB0cnVlO1xyXG4gICAgICAgIC8vIGNvbnNvbGUuZXJyb3IoJ0FQSSBjYWxsIGZhaWxlZCcsIGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9uRGF0ZUNoYW5nZShkYXRlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0ZSAhPT0gZGF0ZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IGRhdGU7XHJcbiAgICAgIHRoaXMuZ2V0T3ZlcmFsbFN0b3JlQ29uY2VudHJhdGlvbkRhdGEoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdFBsYW4oc2VsZWN0ZWRUeXBlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMudHlwZSA9IHNlbGVjdGVkVHlwZTtcclxuICAgIHRoaXMuZ2V0T3ZlcmFsbFN0b3JlSGVhdG1hcERhdGVzKCk7IFxyXG4gICAgLy8gdGhpcy5nZXRPdmVyYWxsU3RvcmVDb25jZW50cmF0aW9uRGF0YSgpO1xyXG59XHJcblxyXG5vblpvbmVDbGljayh6b25lTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgdGhpcy56b25lTmFtZSA9IHpvbmVOYW1lOyBcclxuICB0aGlzLmdldE92ZXJhbGxTdG9yZUhlYXRtYXBEYXRlcygpO1xyXG4gIHRoaXMuWm9uZVNlcnZpY2Uuem9uZVNlZ21lbnRhdGlvbi5uZXh0KHpvbmVOYW1lKVxyXG4gIC8vIHRoaXMuZ2V0Wm9uZVNlZ21lbnRhdGlvbih6b25lTmFtZSkgXHJcbn1cclxuY29uY2VudHJhdGlvbkhlYXRtYXAoaW1hZ2VVUkxWMTogc3RyaW5nKSB7XHJcbiAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKENvbmNlbnRyYXRpb25oZWF0bWFwQ29tcG9uZW50LCB7XHJcbiAgICBjZW50ZXJlZDogdHJ1ZSwgc2l6ZTogJ3hsJ1xyXG4gIH0pO1xyXG4gIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmltYWdlVVJMVjEgPSBpbWFnZVVSTFYxO1xyXG4gIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgXHJcbiAgfSk7XHJcbn1cclxuXHJcbnNjcm9sbExlZnQoKSB7Y29uc3QgZWxlbWVudCA9IHRoaXMuZGF0ZUxpc3QubmF0aXZlRWxlbWVudDsgZWxlbWVudC5zY3JvbGxCeVxyXG4gICh7bGVmdDogLTIwMCxiZWhhdmlvcjonc21vb3RoJ30pO31cclxuc2Nyb2xsUmlnaHQoKSB7Y29uc3QgZWxlbWVudCA9IHRoaXMuZGF0ZUxpc3QubmF0aXZlRWxlbWVudDsgZWxlbWVudC5zY3JvbGxCeVxyXG4gICh7bGVmdDogMjAwLGJlaGF2aW9yOidzbW9vdGgnfSk7fVxyXG5cclxuICBvblNsaWRlQ2hhbmdlXHJcbiAgKHNsaWRlRXZlbnQ6IE5nYlNsaWRlRXZlbnQpIHtcclxuICBjb25zdFxyXG4gICAgc2xpZGVJbmRleCA9ICtzbGlkZUV2ZW50LmN1cnJlbnQuXHJcbiAgICAgIHJlcGxhY2VcclxuICAgICAgKFxyXG4gICAgICAgICduZ2Itc2xpZGUtJ1xyXG4gICAgICAgICxcclxuICAgICAgICAnJ1xyXG4gICAgICApOyB0aGlzLmN1cnJlbnRTbGlkZSA9IHNsaWRlSW5kZXg7IFxyXG4gICAgICBsZXQgcHJldkVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY2Fyb3VzZWwtY29udHJvbC1wcmV2Jyk7XHJcbiAgICAgIGxldCBuZXh0RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jYXJvdXNlbC1jb250cm9sLW5leHQnKTtcclxuICAgICAgaWYodGhpcy5jdXJyZW50U2xpZGUgPT0gMCkge1xyXG4gICAgICAgIG5leHRFbGVtZW50Py5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJyk7XHJcbiAgICAgICAgaWYocHJldkVsZW1lbnQpIHtcclxuICAgICAgICAgIHByZXZFbGVtZW50LnNldEF0dHJpYnV0ZSgnc3R5bGUnLFwiZGlzcGxheTpub25lXCIpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYodGhpcy5jdXJyZW50U2xpZGUgPT09IHRoaXMub3ZlcmFsbFN0b3JlRGF0YT8uSW1hZ2VVUkxzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICBwcmV2RWxlbWVudD8ucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xyXG4gICAgICAgIGlmKG5leHRFbGVtZW50KSB7XHJcbiAgICAgICAgICBuZXh0RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJyxcImRpc3BsYXk6bm9uZVwiKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgcHJldkVsZW1lbnQ/LnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTtcclxuICAgICAgICBuZXh0RWxlbWVudD8ucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xyXG4gICAgICB9XHJcbn1cclxuXHJcblxyXG59XHJcblxyXG4iLCI8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNSByaWdodC1ib3JkZXIgbXktMlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC0xMDBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBwcy0zIHBlLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIG1zLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWFkdGV4dFwiPkNvbmNlbnRyYXRpb24gU3VtbWFyeSA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdiVG9vbHRpcD1cIlN1bW1hcnkgb2Ygb3ZlcmFsbCB6b25lcyBhdCB0aGUgc3RvcmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwidG9wXCIgdHJpZ2dlcnM9XCJtb3VzZWVudGVyOm1vdXNlbGVhdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwiY3VzdG9tLXRvb2x0aXBcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzM1MTJfMzI4NjgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk04LjAwMDE2IDEwLjY2NjZWNy45OTk5OE04LjAwMDE2IDUuMzMzMzFIOC4wMDY4M00xNC42NjY4IDcuOTk5OThDMTQuNjY2OCAxMS42ODE5IDExLjY4MjEgMTQuNjY2NiA4LjAwMDE2IDE0LjY2NjZDNC4zMTgyNiAxNC42NjY2IDEuMzMzNSAxMS42ODE5IDEuMzMzNSA3Ljk5OTk4QzEuMzMzNSA0LjMxODA4IDQuMzE4MjYgMS4zMzMzMSA4LjAwMDE2IDEuMzMzMzFDMTEuNjgyMSAxLjMzMzMxIDE0LjY2NjggNC4zMTgwOCAxNC42NjY4IDcuOTk5OThaXCIgc3Ryb2tlPVwiIzk4QTJCM1wiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMzUxMl8zMjg2OFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJ3aGl0ZVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+PC9zcGFuPiBcclxuICAgICAgICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgIHBvc2l0aW9uLXJlbGF0aXZlIG15LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTEgcG9zaXRpb24tYWJzb2x1dGUgIG1zLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgb3BhY2l0eT1cIjAuNVwiIHg9XCIxNy4wMzY1XCIgeT1cIjE1LjEyMjNcIiB3aWR0aD1cIjguMTU1NDZcIiBoZWlnaHQ9XCIyXCIgcng9XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJyb3RhdGUoNDUgMTcuMDM2NSAxNS4xMjIzKVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMSAxOUM2LjU1NTU2IDE5IDMgMTUuNDQ0NCAzIDExQzMgNi41NTU1NiA2LjU1NTU2IDMgMTEgM0MxNS40NDQ0IDMgMTkgNi41NTU1NiAxOSAxMUMxOSAxNS40NDQ0IDE1LjQ0NDQgMTkgMTEgMTlaTTExIDVDNy41MzMzMyA1IDUgNy41MzMzMyA1IDExQzUgMTQuNDY2NyA3LjUzMzMzIDE3IDExIDE3QzE0LjQ2NjcgMTcgMTcgMTQuNDY2NyAxNyAxMUMxNyA3LjUzMzMzIDE0LjQ2NjcgNSAxMSA1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gW2Rpc2FibGVkXT1cInNlYXJjaERpc2FibGVkXCIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwic2VhcmNoSW5wdXRcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHBzLTEwIGludm9pY2VzZWFyY2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChrZXl1cC5lbnRlcik9XCJzZWFyY2hGaWVsZCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25FeHBvcnQoKVwiIGNsYXNzPVwiYnRuLW91dGxpbmUgYnRuIGFsaWduLWl0ZW1zLWVuZCB0ZXh0LW5vd3JhcCBpbnZoZWFkZXIgbXMtMlwiIFtkaXNhYmxlZF09XCIhem9uZUNvbmNlbnRyYXRpb25EYXRhLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTcuNSAxMi41VjE1LjgzMzNDMTcuNSAxNi4yNzU0IDE3LjMyNDQgMTYuNjk5MyAxNy4wMTE4IDE3LjAxMThDMTYuNjk5MyAxNy4zMjQ0IDE2LjI3NTQgMTcuNSAxNS44MzMzIDE3LjVINC4xNjY2N0MzLjcyNDY0IDE3LjUgMy4zMDA3MiAxNy4zMjQ0IDIuOTg4MTYgMTcuMDExOEMyLjY3NTU5IDE2LjY5OTMgMi41IDE2LjI3NTQgMi41IDE1LjgzMzNWMTIuNU0xNC4xNjY3IDYuNjY2NjdMMTAgMi41TTEwIDIuNUw1LjgzMzMzIDYuNjY2NjdNMTAgMi41VjEyLjVcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJtcy0yXCI+RXhwb3J0PC9zcGFuPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXpvbmVzdW1tYXJ5Tm9EYXRhICYmICF6b25lc3VtbWFyeUxvYWRpbmdcIiBjbGFzcz1cInRhYmxlLWNvbnRhaW5lciAgbS00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRhYmxlICBjbGFzcz1cInRhYmxlIGJvdHRvbS1ib3JkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkIGNsYXNzPVwiZml4ZWQtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ3pvbmVOYW1lJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpvbmUgTmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAgW25nQ2xhc3NdPVwic29ydENvbHVtTmFtZSA9PT0gJ3pvbmVOYW1lJyAmJiBzb3J0RGlyZWN0aW9uID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0Q29sdW1OYW1lID09PSAnem9uZU5hbWUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ2Zvb3RmYWxsQ291bnQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9vdGZhbGwgPGJyPihBY3R1YWxzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAgW25nQ2xhc3NdPVwic29ydENvbHVtTmFtZSA9PT0gJ2Zvb3RmYWxsQ291bnQnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRDb2x1bU5hbWUgPT09ICdmb290ZmFsbENvdW50JyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzb3J0RGF0YSgnYXZnRHdlbGxUaW1lJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIER3ZWxsIFRpbWUgPGJyPihBdmVyYWdlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAgW25nQ2xhc3NdPVwic29ydENvbHVtTmFtZSA9PT0gJ2F2Z0R3ZWxsVGltZScgJiYgc29ydERpcmVjdGlvbiA9PT0gMSA/ICdyb3RhdGUnIDogJydcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydENvbHVtTmFtZSA9PT0gJ2F2Z0R3ZWxsVGltZScgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25jIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhKCdjb25jZW50cmF0aW9uUmF0ZScpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25jZW50cmF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICBbbmdDbGFzc109XCJzb3J0Q29sdW1OYW1lID09PSAnY29uY2VudHJhdGlvblJhdGUnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRDb2x1bU5hbWUgPT09ICdjb25jZW50cmF0aW9uUmF0ZScgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keSAqbmdJZj1cIiF6b25lc3VtbWFyeUxvYWRpbmcgJiYgIXpvbmVzdW1tYXJ5Tm9EYXRhXCIgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHpvbmUgb2Ygem9uZUNvbmNlbnRyYXRpb25EYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlLXByaW1hcnkgb3ZlcmFsbHN0b3JlIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWNhcGl0YWxpemUgY3Vyc29yLXBvaW50ZXJcIj48YSAoY2xpY2spPVwib25ab25lQ2xpY2soem9uZS56b25lTmFtZSlcIj57eyB6b25lLnpvbmVOYW1lIHx8ICctLScgfX08L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB6b25lLmZvb3RmYWxsQ291bnQ/LnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAwIH0pIHx8ICctLScgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlXCI+e3sgem9uZS5hdmdEd2VsbFRpbWU/LnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAwIH0pIHx8ICctLScgfX0gbWluc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHpvbmUuY29uY2VudHJhdGlvblJhdGUudG9GaXhlZCgwKSB8fCAnLS0nIH19JVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4gICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ6b25lc3VtbWFyeUxvYWRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGxvYWRlciAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInpvbmVzdW1tYXJ5Tm9EYXRhICYmICF6b25lc3VtbWFyeUxvYWRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTIgbXktMThcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNhcmQtYm9keSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLXNyY1wiIHNyYz1cIi4vYXNzZXRzL3RhbmdvL0ljb25zL05vZGF0YTEuc3ZnXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vZGF0YW1haW50ZXh0IG10LTNcIj5ObyBkYXRhIGZvdW5kPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vZGF0YXN1YnRleHRcIj5UaGVyZSBpcyBubyByZXN1bHQgZm9yIFpvbmUgQ29uY2VudHJhdGlvbiBTdW1tYXJ5PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy03XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMCBwLTRcIj5cclxuICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlYWR0ZXh0XCI+e3sgem9uZU5hbWUgfHwgJycgfX0gQ29uY2VudHJhdGlvbiBIZWF0bWFwIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5nYlRvb2x0aXA9XCJEZW5zaXR5IGhlYXRtYXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ0b3BcIiB0cmlnZ2Vycz1cIm1vdXNlZW50ZXI6bW91c2VsZWF2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cImN1c3RvbS10b29sdGlwXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzM1MTJfMzI4NjgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTguMDAwMTYgMTAuNjY2NlY3Ljk5OTk4TTguMDAwMTYgNS4zMzMzMUg4LjAwNjgzTTE0LjY2NjggNy45OTk5OEMxNC42NjY4IDExLjY4MTkgMTEuNjgyMSAxNC42NjY2IDguMDAwMTYgMTQuNjY2NkM0LjMxODI2IDE0LjY2NjYgMS4zMzM1IDExLjY4MTkgMS4zMzM1IDcuOTk5OThDMS4zMzM1IDQuMzE4MDggNC4zMTgyNiAxLjMzMzMxIDguMDAwMTYgMS4zMzMzMUMxMS42ODIxIDEuMzMzMzEgMTQuNjY2OCA0LjMxODA4IDE0LjY2NjggNy45OTk5OFpcIiBzdHJva2U9XCIjOThBMkIzXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8zNTEyXzMyODY4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwid2hpdGVcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvaDM+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiAgY2xhc3M9XCJjYXJkLXRvb2xiYXIgdGV4dC1ub3dyYXAgbWUtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcG9zaXRpb24tcmVsYXRpdmUgbXktMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLWJlZ2luOjpOYXYgZ3JvdXAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYXYtZ3JvdXAgbmF2LWdyb3VwLW91dGxpbmUgYm9yZGVyLTEgYnRuLWdyb3VwIHAtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FjdGl2ZVBsYW5CdG4nOiB0eXBlID09PSAnZGFpbHknLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5hY3RpdmVQbGFuQnRuJzogdHlwZSAhPT0gJ2RhaWx5JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rpc2FibGVkJzogZGlzYWJsZURheVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UGxhbignZGFpbHknKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cImRpc2FibGVEYXkgPyB0cnVlIDogbnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSAgcHgtNiBweS0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3RpdmVQbGFuQnRuJzogdHlwZSA9PT0gJ3dlZWtseScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbmFjdGl2ZVBsYW5CdG4nOiB0eXBlICE9PSAnd2Vla2x5JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rpc2FibGVkJzogZGlzYWJsZVdlZWtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFBsYW4oJ3dlZWtseScpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVXZWVrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlZWtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIHB4LTYgcHktM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWN0aXZlUGxhbkJ0bic6IHR5cGUgPT09ICdtb250aGx5JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luYWN0aXZlUGxhbkJ0bic6IHR5cGUgIT09ICdtb250aGx5JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rpc2FibGVkJzogZGlzYWJsZU1vbnRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RQbGFuKCdtb250aGx5JylcIiAgW2Rpc2FibGVkXT1cImRpc2FibGVNb250aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb250aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctOCBtYi02XCI+XHJcbiAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY3VzdG9tQXJyb3cgJiYgIWhlYXRtYXBMb2FkaW5nICYmICFoZWF0bWFwTm9EYXRhXCIgY2xhc3M9XCJtdC0zIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNjcm9sbExlZnQoKVwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNSAxOEw5IDEyTDE1IDZcIiBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHVsICpuZ0lmPVwicGVyaW9kem9uZSA9PT0gMSAmJiAhY3VzdG9tT3B0aW9uXCIgI2RhdGVMaXN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBwaWxscyBuYXYgbmF2LXN0cmV0Y2ggbmF2LWxpbmUtdGFicyBuYXYtbGluZS10YWJzLTJ4IGJvcmRlci10cmFuc3BhcmVudCBmcy01IGZ3LWJvbGRlciBhbGlnbi1pdGVtcy1zdGFydCBtYi01IG10LTEgbm8td3JhcC1saXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gbmF2LW92ZXJmbG93XCIgKm5nRm9yPVwibGV0IGRhdGUgb2Ygb3ZlcmFsbFN0b3JlQ29uY2VudHJhdGlvbkRhdGVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWJzLXRvZ2dsZT1cInBpbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZGF0ZS56b25lRGF0ZSA9PT0gc2VsZWN0ZWREYXRlID8gJ2NhdGVnb3J5X2FjdGl2ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBmbGV4LWNvbHVtbiBjdXJzb3ItcG9pbnRlciBmbGV4LWNlbnRlciBtLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGF0ZUNoYW5nZShkYXRlLnpvbmVEYXRlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LWljb24gYWN0aXZlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibmF2LXRleHQgdGV4dC1ncmF5LTcwMCBmdy1ib2xkZXIgZnMtNyBsaC0xIG14LTNcIj57eyBkYXRlLnpvbmVEYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ1bGxldC1jdXN0b20gcG9zaXRpb24tYWJzb2x1dGUgYm90dG9tLTAgaC00cHggYmctcHJpbWFyeVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dWwgKm5nSWY9XCIocGVyaW9kem9uZSA9PT0gMiB8fCBwZXJpb2R6b25lID09PSAzKSAmJiAhY3VzdG9tT3B0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggcGlsbHMgbmF2IG5hdi1zdHJldGNoIG5hdi1saW5lLXRhYnMgbmF2LWxpbmUtdGFicy0yeCBib3JkZXItdHJhbnNwYXJlbnQgZnMtNSBmdy1ib2xkZXIgYWxpZ24taXRlbXMtc3RhcnQgbWItNSBtdC0xIHAtMyBuby13cmFwLWxpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbSBuYXYtb3ZlcmZsb3dcIiAqbmdGb3I9XCJsZXQgZGF0ZSBvZiBvdmVyYWxsU3RvcmVDb25jZW50cmF0aW9uRGF0ZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtYnMtdG9nZ2xlPVwicGlsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJkYXRlLnpvbmVEYXRlID09PSBzZWxlY3RlZERhdGUgPyAnY2F0ZWdvcnlfYWN0aXZlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibmF2LWxpbmsgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGZsZXgtY29sdW1uIGN1cnNvci1wb2ludGVyIGZsZXgtY2VudGVyIHctOTBweCBteC0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkRhdGVDaGFuZ2UoZGF0ZS56b25lRGF0ZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hdi1pY29uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibmF2LXRleHQgdGV4dC1ncmF5LTcwMCBmdy1ib2xkZXIgZnMtNyBsaC0xIG14LTNcIj57eyBkYXRlLnpvbmVEYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ1bGxldC1jdXN0b20gcG9zaXRpb24tYWJzb2x1dGUgYm90dG9tLTAgaC00cHggYmctcHJpbWFyeVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCAqbmdJZj1cImN1c3RvbU9wdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBwaWxscyBuYXYgbmF2LXN0cmV0Y2ggbmF2LWxpbmUtdGFicyBuYXYtbGluZS10YWJzLTJ4IGJvcmRlci10cmFuc3BhcmVudCBmcy01IGZ3LWJvbGRlciBhbGlnbi1pdGVtcy1zdGFydCBtYi01IG10LTEgcC0zIG5vLXdyYXAtbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIG5hdi1vdmVyZmxvd1wiICpuZ0Zvcj1cImxldCBkYXRlIG9mIG92ZXJhbGxTdG9yZUNvbmNlbnRyYXRpb25EYXRlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1icy10b2dnbGU9XCJwaWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImRhdGUuem9uZURhdGUgPT09IHNlbGVjdGVkRGF0ZSA/ICdjYXRlZ29yeV9hY3RpdmUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJuYXYtbGluayBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gZmxleC1jb2x1bW4gY3Vyc29yLXBvaW50ZXIgZmxleC1jZW50ZXIgdy05MHB4IG14LTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGF0ZUNoYW5nZShkYXRlLnpvbmVEYXRlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LWljb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuYXYtdGV4dCB0ZXh0LWdyYXktNzAwIGZ3LWJvbGRlciBmcy03IGxoLTEgbXgtM1wiPnt7IGRhdGUuem9uZURhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnVsbGV0LWN1c3RvbSBwb3NpdGlvbi1hYnNvbHV0ZSBib3R0b20tMCBoLTRweCBiZy1wcmltYXJ5XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY3VzdG9tQXJyb3cgJiYgIWhlYXRtYXBMb2FkaW5nICYmICFoZWF0bWFwTm9EYXRhXCIgIGNsYXNzPVwibXQtMyBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzY3JvbGxSaWdodCgpXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkgMThMMTUgMTJMOSA2XCIgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaGVhdG1hcExvYWRpbmcgJiYgIWhlYXRtYXBOb0RhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmdiLWNhcm91c2VsICNjYXJvdXNlbCBbaW50ZXJ2YWxdPVwiMFwiIFtwYXVzZU9uSG92ZXJdPVwidHJ1ZVwiICAoc2xpZGUpPVwib25TbGlkZUNoYW5nZSgkZXZlbnQpXCIgW2lkXT1cInNlbGVjdGVkRGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICAqbmdGb3I9XCJsZXQgaW1hZ2Ugb2Ygb3ZlcmFsbFN0b3JlRGF0YT8uSW1hZ2VVUkxzO2xldCBpPWluZGV4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYlNsaWRlIFtpZF09XCInbmdiLXNsaWRlLScrIGlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgaW1hZ2UtY29udGFpbmVyIGN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgKGNsaWNrKT1cImNvbmNlbnRyYXRpb25IZWF0bWFwKG92ZXJhbGxTdG9yZURhdGE/LkltYWdlVVJMcylcIiBbc3JjXT1cImltYWdlLlVSTFwiIFthbHRdPVwiaW1hZ2Uuc3RyZWFtTmFtZVwiIGNsYXNzPVwiY2FyZGltZ1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpbWFnZT8uZG93bnRpbWUgIT09IG51bGxcIiBjbGFzcz1cIm1pbnNiYWRnZSBwb3NpdGlvbi1hYnNvbHV0ZSB0b3AtMCBlbmQtMCBtLTMgbWUtMThcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWluc2JhZGdlcHJpbWFyeSBtdC0yIG1iLTIgXCI+e3tpbWFnZS5kb3dudGltZX19IG1pbnM8c3BhbiBjbGFzcz1cIm1zLTFcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDEyIDEwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTcuMTQwNjMgMC4wMDA0ODgyODFDNy43OTc4NSAwLjAwMDQ4ODI4MSA4LjQyNTc4IDAuMTM1MTA4IDguOTk5MDIgMC4zNzkyMzFDOS41OTM3NSAwLjYzMjM5NSAxMC4xMjg5IDEuMDA0MSAxMC41NzcxIDEuNDY1MjNDMTEuMDI0NCAxLjkyNTM0IDExLjM4NTcgMi40NzU4OCAxMS42MzE4IDMuMDg5N0MxMS44NjkxIDMuNjc5NDEgMTIgNC4zMjUzOCAxMiA1LjAwMDQ5QzEyIDUuNjc2NiAxMS44NjkxIDYuMzIyNTcgMTEuNjMxOCA2LjkxMjI4QzExLjM4NTcgNy41MjQxIDExLjAyNDQgOC4wNzQ2MyAxMC41NzYyIDguNTM1NzVDMTAuMTI4OSA4Ljk5NTg3IDkuNTkzNzUgOS4zNjc1OCA4Ljk5NzA3IDkuNjIwNzRDOC40MjM4MyA5Ljg2NDg3IDcuNzk1OSA5Ljk5OTQ5IDcuMTM5NjUgOS45OTk0OUM2LjQ4MjQyIDkuOTk5NDkgNS44NTQ0OSA5Ljg2NDg3IDUuMjgxMjUgOS42MjA3NEM0LjY4NjUyIDkuMzY3NTggNC4xNTEzNyA4Ljk5NTg3IDMuNzA0MSA4LjUzNTc1TDMuNzAzMTIgOC41MzQ3NUMzLjI1NDg4IDguMDczNjMgMi44OTQ1MyA3LjUyMzA5IDIuNjQ4NDQgNi45MTIyOEMyLjU3MjI3IDYuNzIyNDEgMi41MDY4NCA2LjUyNzUxIDIuNDUzMTIgNi4zMjc1OUMyLjU1NDY5IDYuMzM3NjQgMi42NTgyIDYuMzQyNjYgMi43NjI3IDYuMzQyNjZDMi45NjA5NCA2LjM0MjY2IDMuMTU0MyA2LjMyNDU4IDMuMzQyNzcgNi4yODk0MkMzLjM3NDAyIDYuMzg1ODYgMy40MDgyIDYuNDgxMyAzLjQ0NTMxIDYuNTc0NzNDMy42NDc0NiA3LjA3NzA0IDMuOTQ0MzQgNy41MjkxMiA0LjMxMzQ4IDcuOTA4ODdDNC42ODI2MiA4LjI4ODYyIDUuMTIzMDUgOC41OTQwMiA1LjYxMDM1IDguODAxOThDNi4wODAwOCA5LjAwMTkgNi41OTY2OCA5LjExMzQxIDcuMTM5NjUgOS4xMTM0MUM3LjY4MjYyIDkuMTEzNDEgOC4xOTgyNCA5LjAwMjkgOC42Njg5NSA4LjgwMTk4QzkuMTU3MjMgOC41OTQwMiA5LjU5NjY4IDguMjg4NjIgOS45NjU4MiA3LjkwODg3QzEwLjMzNSA3LjUyOTEyIDEwLjYzMTggNy4wNzYwNCAxMC44MzQgNi41NzQ3M0MxMS4wMjgzIDYuMDkxNTEgMTEuMTM2NyA1LjU2MDA2IDExLjEzNjcgNS4wMDE0OUMxMS4xMzY3IDQuNDQyOTIgMTEuMDI5MyAzLjkxMjQ4IDEwLjgzNCAzLjQyODI2QzEwLjYzMTggMi45MjU5NSAxMC4zMzUgMi40NzM4NyA5Ljk2NTgyIDIuMDk0MTJDOS41OTY2OCAxLjcxNDM3IDkuMTU2MjUgMS40MDg5NyA4LjY2ODk1IDEuMjAxMDFDOC4xOTkyMiAxLjAwMTA5IDcuNjgyNjIgMC44ODk1NzggNy4xMzk2NSAwLjg4OTU3OEM2LjU5NjY4IDAuODg5NTc4IDYuMDgxMDYgMS4wMDAwOSA1LjYxMDM1IDEuMjAxMDFDNS41NjgzNiAxLjIxOTA5IDUuNTI2MzcgMS4yMzgxOCA1LjQ4NTM1IDEuMjU3MjdDNS4zMjUyIDAuOTk4MDc3IDUuMTMxODQgMC43NjI5OTYgNC45MTAxNiAwLjU1OTA1OEM1LjAzMTI1IDAuNDk0NzYyIDUuMTU1MjcgMC40MzU0ODkgNS4yODEyNSAwLjM4MTI0QzUuODU2NDUgMC4xMzUxMDggNi40ODM0IDAuMDAwNDg4MjgxIDcuMTQwNjMgMC4wMDA0ODgyODFaTTYuNTgzMDEgMi42MjM1NUM2LjU4MzAxIDIuNTAwOTkgNi42MzE4NCAyLjM5MDQ4IDYuNzA4OTggMi4zMTAxMUM2Ljc4NzExIDIuMjI5NzQgNi44OTQ1MyAyLjE4MDUyIDcuMDEzNjcgMi4xODA1MkM3LjEzMjgxIDIuMTgwNTIgNy4yNDAyMyAyLjIyOTc0IDcuMzE4MzYgMi4zMTAxMUM3LjM5NjQ4IDIuMzkwNDggNy40NDQzNCAyLjUwMDk5IDcuNDQ0MzQgMi42MjM1NVY0Ljk1NjI5TDkuMTM4NjcgNS45OTAwNEM5LjI0MDIzIDYuMDUyMzMgOS4zMDg1OSA2LjE1MTc4IDkuMzM1OTQgNi4yNjEyOUM5LjM2MzI4IDYuMzcwNzkgOS4zNTA1OSA2LjQ5MTM1IDkuMjkwMDQgNi41OTU4M1Y2LjU5NjgzQzkuMjI5NDkgNi43MDEzMSA5LjEzMjgxIDYuNzcxNjQgOS4wMjYzNyA2Ljc5OTc3QzguOTE5OTIgNi44Mjc5IDguODAyNzMgNi44MTQ4NCA4LjcwMTE3IDYuNzUyNTVIOC43MDAyTDYuODA0NjkgNS41OTYyM0M2LjczOTI2IDUuNTU5MDYgNi42ODU1NSA1LjUwNDgxIDYuNjQ2NDggNS40NDA1MUM2LjYwNjQ1IDUuMzczMiA2LjU4MzAxIDUuMjkzODQgNi41ODMwMSA1LjIwOTQ1VjIuNjIzNTVaXCIgZmlsbD1cIiMwMDlCRjNcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTIuNjM0NzcgMC4yNjU3MTdDNC4wODk4NCAwLjI2NTcxNyA1LjI2OTUzIDEuNDc5MyA1LjI2OTUzIDIuOTc2MThDNS4yNjk1MyA0LjQ3MzA3IDQuMDg5ODQgNS42ODY2NSAyLjYzNDc3IDUuNjg2NjVDMS4xNzk2OSA1LjY4NjY1IDAgNC40NzMwNyAwIDIuOTc2MThDMCAxLjQ3OTMgMS4xNzk2OSAwLjI2NTcxNyAyLjYzNDc3IDAuMjY1NzE3Wk0yLjYzNDc3IDQuNTMwMzNMNC4wNDg4MyAyLjczMjA2SDMuMTcwOVYxLjc3NTY2SDIuMDk4NjNWMi43MzIwNkgxLjIyMDdMMi42MzQ3NyA0LjUzMDMzWlwiIGZpbGw9XCIjRjA0NDM4XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgW2hyZWZdPVwiaW1hZ2UuVVJMXCIgZG93bmxvYWQ+PHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImRvd25sb2FkLWljb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjQ0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiNDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDQ0IDQ0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uLW92ZXJsYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBmaWx0ZXI9XCJ1cmwoI2ZpbHRlcjBfZF8zODIyXzE5NDc5KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyXCIgeT1cIjFcIiB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiByeD1cIjhcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyLjVcIiB5PVwiMS41XCIgd2lkdGg9XCIzOVwiIGhlaWdodD1cIjM5XCIgcng9XCI3LjVcIiBzdHJva2U9XCIjRDBENUREXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0yOS41IDIzLjVWMjYuODMzM0MyOS41IDI3LjI3NTQgMjkuMzI0NCAyNy42OTkzIDI5LjAxMTggMjguMDExOEMyOC42OTkzIDI4LjMyNDQgMjguMjc1NCAyOC41IDI3LjgzMzMgMjguNUgxNi4xNjY3QzE1LjcyNDYgMjguNSAxNS4zMDA3IDI4LjMyNDQgMTQuOTg4MiAyOC4wMTE4QzE0LjY3NTYgMjcuNjk5MyAxNC41IDI3LjI3NTQgMTQuNSAyNi44MzMzVjIzLjVNMTcuODMzMyAxOS4zMzMzTDIyIDIzLjVNMjIgMjMuNUwyNi4xNjY3IDE5LjMzMzNNMjIgMjMuNVYxMy41XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS42N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWx0ZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiZmlsdGVyMF9kXzM4MjJfMTk0NzlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeD1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeT1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCI0NFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCI0NFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJVbml0cz1cInVzZXJTcGFjZU9uVXNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz1cInNSR0JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUZsb29kIGZsb29kLW9wYWNpdHk9XCIwXCIgcmVzdWx0PVwiQmFja2dyb3VuZEltYWdlRml4XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluPVwiU291cmNlQWxwaGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibWF0cml4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPVwiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9XCJoYXJkQWxwaGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZU9mZnNldCBkeT1cIjFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj1cIjFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm1hdHJpeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz1cIjAgMCAwIDAgMC4wNjI3NDUxIDAgMCAwIDAgMC4wOTQxMTc2IDAgMCAwIDAgMC4xNTY4NjMgMCAwIDAgMC4wNSAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVCbGVuZCBtb2RlPVwibm9ybWFsXCIgaW4yPVwiQmFja2dyb3VuZEltYWdlRml4XCIgcmVzdWx0PVwiZWZmZWN0MV9kcm9wU2hhZG93XzM4MjJfMTk0NzlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluPVwiU291cmNlR3JhcGhpY1wiIGluMj1cImVmZmVjdDFfZHJvcFNoYWRvd18zODIyXzE5NDc5XCIgcmVzdWx0PVwic2hhcGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsdGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nYi1jYXJvdXNlbD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWF0bWFwTG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGxvYWRlciBjb25jaGVhdG1hcCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhdG1hcE5vRGF0YSAmJiAhaGVhdG1hcExvYWRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMiBteS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNhcmQtYm9keSBjb25jaGVhdG1hcCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1zcmNcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9Ob2RhdGExLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9kYXRhbWFpbnRleHQgbXQtM1wiPk5vIGRhdGEgZm91bmQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vZGF0YXN1YnRleHRcIj5UaGVyZSBpcyBubyByZXN1bHQgZm9yIE92ZXJhbGwgU3RvcmUgQ29uY2VudHJhdGlvbiBIZWF0bWFwPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib2R5IG1lLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB0LTEwIG0tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXN0YWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkLWZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdmVyYWxsdGV4dCBtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb3RhbCBGb290ZmFsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWJsZS10aXRsZVwiPnt7b3ZlcmFsbFN0b3JlRGF0YT8udG90YWxGb290ZmFsbD8udG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywgeyBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDAgfSkgfHwgJy0tJyAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXJkYXNoZWQgbXktNFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXN0YWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkLWZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdmVyYWxsdGV4dCBtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25jZW50cmF0aW9uICVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJ0YWJsZS10aXRsZVwiPnt7IHJvdW5kb2Yob3ZlcmFsbFN0b3JlRGF0YT8uY29uY2VudHJhdGlvblJhdGUpIHx8ICAnMCcgfX0gJTwvc3Bhbj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGFibGUtdGl0bGVcIj57eyBvdmVyYWxsU3RvcmVEYXRhPy5jb25jZW50cmF0aW9uUmF0ZT8udG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywgeyBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDAgfSkgfHwgICctLScgfX0lPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaGVhZGVyRGF0YT8uY2xpZW50ICE9PSAnNDU5J1wiIGNsYXNzPVwiYm9yZGVyZGFzaGVkIG15LTRcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJoZWFkZXJEYXRhPy5jbGllbnQgIT09ICc0NTknXCIgY2xhc3M9XCJkLWZsZXggZmxleC1zdGFja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZC1mbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3ZlcmFsbHRleHQgbWUtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQm91bmNlZCBGb290ZmFsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWJsZS10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3ZlcmFsbFN0b3JlRGF0YT8uYm91bmNlZENvdW50Py50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7IG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMCB9KSB8fCAgJy0tJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImhlYWRlckRhdGE/LmNsaWVudCAhPT0gJzQ1OSdcIiBjbGFzcz1cImJvcmRlcmRhc2hlZCBteS00XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaGVhZGVyRGF0YT8uY2xpZW50ICE9PSAnNDU5J1wiIGNsYXNzPVwiZC1mbGV4IGZsZXgtc3RhY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImQtZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm92ZXJhbGx0ZXh0IG1lLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuZ2FnZXJzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhYmxlLXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvdmVyYWxsU3RvcmVEYXRhPy5lbmdhZ2Vyc0NvdW50Py50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7IG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMCB9KSB8fCAgJy0tJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXJkYXNoZWQgbXktNFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXN0YWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkLWZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdmVyYWxsdGV4dCBtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdmcuIER3ZWxsIFRpbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGFibGUtdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG92ZXJhbGxTdG9yZURhdGE/LmF2Z0R3ZWxsVGltZT8udG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywgeyBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDAgfSkgfHwgICctLScgfX0gbWluc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzdG9yZUlkYXJyYXlbMF0gIT09JzQ1OS0yJyAmJiBzdG9yZUlkYXJyYXlbMF0gIT09JzQ1OS00J1wiIGNsYXNzPVwiYm9yZGVyZGFzaGVkIG15LTRcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzdG9yZUlkYXJyYXlbMF0gIT09JzQ1OS0yJyAmJiBzdG9yZUlkYXJyYXlbMF0gIT09JzQ1OS00J1wiIGNsYXNzPVwiZC1mbGV4IGZsZXgtc3RhY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImQtZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm92ZXJhbGx0ZXh0IG1lLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFnZSBSYW5nZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWJsZS10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3ZlcmFsbFN0b3JlRGF0YT8uYWdlUmFuZ2U/LnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAwIH0pIHx8ICAnLS0nIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInN0b3JlSWRhcnJheVswXSAhPT0nNDU5LTInICYmIHN0b3JlSWRhcnJheVswXSAhPT0nNDU5LTQnXCIgY2xhc3M9XCJib3JkZXJkYXNoZWQgbXktNFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInN0b3JlSWRhcnJheVswXSAhPT0nNDU5LTInICYmIHN0b3JlSWRhcnJheVswXSAhPT0nNDU5LTQnXCIgY2xhc3M9XCJkLWZsZXggZmxleC1zdGFja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZC1mbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3ZlcmFsbHRleHQgbWUtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFsZSBSYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhYmxlLXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvdmVyYWxsU3RvcmVEYXRhPy5tYWxlUmF0ZT8udG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywgeyBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDAgfSkgfHwgICctLScgfX0lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInN0b3JlSWRhcnJheVswXSAhPT0nNDU5LTInICYmIHN0b3JlSWRhcnJheVswXSAhPT0nNDU5LTQnXCIgY2xhc3M9XCJib3JkZXJkYXNoZWQgbXktNFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInN0b3JlSWRhcnJheVswXSAhPT0nNDU5LTInICYmIHN0b3JlSWRhcnJheVswXSAhPT0nNDU5LTQnXCIgY2xhc3M9XCJkLWZsZXggZmxleC1zdGFja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZC1mbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3ZlcmFsbHRleHQgbWUtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmVtYWxlIFJhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGFibGUtdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG92ZXJhbGxTdG9yZURhdGE/LmZlbWFsZVJhdGU/LnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAwIH0pIHx8ICAnLS0nIH19JVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCJoZWFkZXJEYXRhPy5jbGllbnQgPT0gJzQ1OSdcIiBjbGFzcz1cImJvcmRlcmRhc2hlZCBteS00XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaGVhZGVyRGF0YT8uY2xpZW50ID09ICc0NTknXCIgY2xhc3M9XCJkLWZsZXggZmxleC1zdGFja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZC1mbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3ZlcmFsbHRleHQgbWUtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJvbGxleVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWJsZS10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3ZlcmFsbFN0b3JlRGF0YT8udHJvbGxleVJhdGU/LnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAwIH0pIHx8ICAnLS0nIH19JVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCJoZWFkZXJEYXRhPy5jbGllbnQgPT0gJzQ1OSdcIiBjbGFzcz1cImJvcmRlcmRhc2hlZCBteS00XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaGVhZGVyRGF0YT8uY2xpZW50ID09ICc0NTknXCIgY2xhc3M9XCJkLWZsZXggZmxleC1zdGFja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZC1mbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3ZlcmFsbHRleHQgbWUtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFza2V0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhYmxlLXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvdmVyYWxsU3RvcmVEYXRhPy5iYXNrZXRSYXRlPy50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7IG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMCB9KSB8fCAgJy0tJyB9fSVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=
469
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9uZS1jb25jZW50cmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLWFuYWx5c2Utem9uZS9zcmMvbGliL2NvbXBvbmVudHMvem9uZS1jb25jZW50cmF0aW9uL3pvbmUtY29uY2VudHJhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXpvbmUvc3JjL2xpYi9jb21wb25lbnRzL3pvbmUtY29uY2VudHJhdGlvbi96b25lLWNvbmNlbnRyYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsVUFBVSxFQUFnRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbEosT0FBTyxFQUFFLGlCQUFpQixFQUEyQixNQUFNLDRCQUE0QixDQUFDO0FBSXhGLE9BQU8sRUFBYyxPQUFPLEVBQUUsWUFBWSxFQUF3QixTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUYsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDOzs7Ozs7Ozs7QUFTdEcsTUFBTSxPQUFPLDBCQUEwQjtJQTRDakI7SUFBcUI7SUFBZ0M7SUFBeUI7SUFBa0M7SUFDMUg7SUFBNEI7SUFBK0I7SUFBK0I7SUE1Q3BHLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDZCxXQUFXLEdBQU8sRUFBRSxDQUFDO0lBQ3JCLGNBQWMsR0FBUSxLQUFLLENBQUM7SUFDNUIsYUFBYSxHQUFXLEVBQUUsQ0FBQztJQUMzQixNQUFNLEdBQVEsRUFBRSxDQUFDO0lBQ2pCLHFCQUFxQixHQUFVLEVBQUUsQ0FBQztJQUNsQyxnQkFBZ0IsR0FBUSxFQUFFLENBQUM7SUFDM0IsSUFBSSxHQUFXLE9BQU8sQ0FBQztJQUN2Qiw4QkFBOEIs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QUFpQixDQUFDLDJHQXdDRCxVQUFVLHNIQ3ZEekMsaXgrREEwdkJBOzs0RkR6dUJhLDBCQUEwQjtrQkFOdEMsU0FBUzsrQkFDRSx3QkFBd0IsYUFHdkIsQ0FBQyxpQkFBaUIsQ0FBQztnU0F3Q1ksUUFBUTtzQkFBakQsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBQyxJQUFJLEVBQUMsVUFBVSxFQUFDO2dCQXFYbEIsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBpbXBvcnRQcm92aWRlcnNGcm9tLCBOZ1pvbmUsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE5nYkNhcm91c2VsQ29uZmlnLCBOZ2JNb2RhbCwgTmdiU2xpZGVFdmVudCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgWm9uZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy96b25lLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktc2hhcmVkJztcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xyXG5pbXBvcnQgeyBDb25jZW50cmF0aW9uaGVhdG1hcENvbXBvbmVudCB9IGZyb20gJy4vY29uY2VudHJhdGlvbmhlYXRtYXAvY29uY2VudHJhdGlvbmhlYXRtYXAuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXpvbmUtY29uY2VudHJhdGlvbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3pvbmUtY29uY2VudHJhdGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3pvbmUtY29uY2VudHJhdGlvbi5jb21wb25lbnQuc2NzcycsXHJcbiAgcHJvdmlkZXJzOiBbTmdiQ2Fyb3VzZWxDb25maWddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgWm9uZUNvbmNlbnRyYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksT25Jbml0IHtcclxuICBkYXlqcyA9IGRheWpzO1xyXG4gIHNlYXJjaElucHV0OiBhbnkgPVwiXCI7XHJcbiAgc2VhcmNoRGlzYWJsZWQ6IGFueSA9IGZhbHNlO1xyXG4gIHNvcnRDb2x1bU5hbWU6IHN0cmluZyA9ICcnO1xyXG4gIHNvcnRCeTogYW55ID0gJyc7XHJcbiAgem9uZUNvbmNlbnRyYXRpb25EYXRhOiBhbnlbXSA9IFtdO1xyXG4gIG92ZXJhbGxTdG9yZURhdGE6IGFueSA9IHt9O1xyXG4gIHR5cGU6IHN0cmluZyA9ICdkYWlseSc7IFxyXG4gIG92ZXJhbGxTdG9yZUNvbmNlbnRyYXRpb25EYXRlczogYW55W10gPSBbXTtcclxuICBzZWxlY3RlZERhdGU6IHN0cmluZyA9ICcnO1xyXG4gIHBlcmlvZHpvbmU6IG51bWJlciA9IDE7IFxyXG4gIGN1c3RvbU9wdGlvbjogYm9vbGVhbiA9IGZhbHNlOyBcclxuICB0aW1lcl9hY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTsgXHJcbiAgem9uZXN1bW1hcnlMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICB6b25lc3VtbWFyeU5vRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGhlYXRtYXBMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBoZWF0bWFwTm9EYXRhOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaGVhZGVyRGF0YTogYW55O1xyXG4gIHNvcnREaXJlY3Rpb246IGFueSA9ICcnO1xyXG4gIHpvbmVOYW1lOiBzdHJpbmcgPSAnJztcclxuICBkaXNhYmxlRGF5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgZGlzYWJsZVdlZWs6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBkaXNhYmxlTW9udGg6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjdXN0b21BcnJvdzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzRXhwb3J0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgY3VycmVudFNsaWRlID0gMDtcclxuICBjdXJyZW50U2xpZGVJbmRleCA9IDA7XHJcbiAgLy8gc3RhcnRJbmRleDogbnVtYmVyID0gMDtcclxuICAvLyBkYXRlc1BlclBhZ2U6IG51bWJlciA9IDU7XHJcbiAgLy8gdmlzaWJsZURhdGVzOiBhbnlbXSA9IFtdO1xyXG4gIC8vIHRpbWVyX2FjdGl2ZSA9IDA7XHJcbiAgLy8gcGVyaW9kem9uZSA9IDE7XHJcbiAgLy8gY3VzdG9tT3B0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLy8gb3ZlcmFsbFN0b3JlQ29uY2VudHJhdGlvbkRhdGVzOiBBcnJheTx7IHpvbmVEYXRlOiBzdHJpbmcgfT4gPSBbXTtcclxuIFxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuICBAVmlld0NoaWxkKCdkYXRlTGlzdCcsIHtyZWFkOkVsZW1lbnRSZWZ9KSBkYXRlTGlzdCE6RWxlbWVudFJlZjtcclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbiAgc3RvcmVJZGFycmF5OiBhbnkgPVtdO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgem9uZTogTmdab25lLCBwdWJsaWMgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCwgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsIHByaXZhdGUgWm9uZVNlcnZpY2U6IFpvbmVTZXJ2aWNlLCBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZiwgXHJcbiAgICBwcml2YXRlIHRvYXN0OiBUb2FzdFNlcnZpY2UsIHB1YmxpYyBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixwcml2YXRlIHJvdXRlcjogUm91dGVyKSB7fVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gdGhpcy5maWx0ZXJlZFpvbmVzID0gdGhpcy56b25lcztcclxuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWVcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLCBkZWJvdW5jZVRpbWUoMzAwKSlcclxuICAgICAgLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmhlYWRlckRhdGEgPSBkYXRhO1xyXG4gICAgICAgICAgdGhpcy5zdG9yZUlkYXJyYXkgPSB0aGlzLmhlYWRlckRhdGE/LnN0b3Jlcy5maWx0ZXIoKHN0b3JlOiBhbnkpID0+IHN0b3JlLmNoZWNrZWQpLm1hcCgoc3RvcmU6IGFueSkgPT4gc3RvcmUuc3RvcmVJZClcclxuICAgICAgICAgIGxldCBzRGF0ZSA9IHRoaXMuZGF5anModGhpcy5oZWFkZXJEYXRhLmRhdGUuc3RhcnREYXRlKTtcclxuICAgICAgICAgIGxldCBlRGF0ZSA9IHRoaXMuZGF5anModGhpcy5oZWFkZXJEYXRhLmRhdGUuZW5kRGF0ZSk7XHJcbiAgICAgICAgICB0aGlzLmN1c3RvbUFycm93ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnR5cGUgPSAnZGFpbHknO1xyXG4gICAgICAgICAgLy8gaWYoZURhdGUuZGlmZihzRGF0ZSwnZGF5JykgPCA3KSB7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuZGlzYWJsZVdlZWsgPSB0cnVlO1xyXG4gICAgICAgICAgLy8gICB0aGlzLmRpc2FibGVNb250aCA9IHRydWU7XHJcbiAgICAgICAgICAvLyAgIC8vIHRoaXMudHlwZSA9ICdkYWlseSc7XHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAvLyBlbHNlIGlmKGVEYXRlLmRpZmYoc0RhdGUsJ2RheScpIDwgMjcpIHtcclxuICAgICAgICAgIC8vICAgdGhpcy5kaXNhYmxlTW9udGggPSB0cnVlO1xyXG4gICAgICAgICAgLy8gICB0aGlzLmRpc2FibGVEYXkgPSBmYWxzZTtcclxuICAgICAgICAgIC8vICAgdGhpcy5kaXNhYmxlV2VlayA9IGZhbHNlO1xyXG4gICAgICAgICAgLy8gICAvLyB0aGlzLnR5cGUgPSAnd2Vla2x5JztcclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIC8vIGVsc2Uge1xyXG4gICAgICAgICAgLy8gICB0aGlzLmRpc2FibGVEYXkgPSBmYWxzZTtcclxuICAgICAgICAgIC8vICAgdGhpcy5kaXNhYmxlV2VlayA9IGZhbHNlO1xyXG4gICAgICAgICAgLy8gICB0aGlzLmRpc2FibGVNb250aCA9IGZhbHNlO1xyXG4gICAgICAgICAgLy8gICAvLyB0aGlzLnR5cGUgPSAnbW9udGhseSc7XHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICB0aGlzLmdldFpvbmVDb25jZW50cmF0aW9uRGF0YSgpO1xyXG4gICAgICAgICAgLy8gdGhpcy5nZXRPdmVyYWxsU3RvcmVDb25jZW50cmF0aW9uRGF0YSgpO1xyXG4gICAgICAgICAgLy8gdGhpcy5nZXRPdmVyYWxsU3RvcmVIZWF0bWFwRGF0ZXMoKTtcclxufSlcclxuICBcclxuICB9XHJcblxyXG4gIGdldFpvbmVDb25jZW50cmF0aW9uRGF0YSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VhcmNoRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy56b25lc3VtbWFyeUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy56b25lc3VtbWFyeU5vRGF0YSA9IHRydWU7XHJcbiAgICB0aGlzLmhlYXRtYXBMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuaGVhdG1hcE5vRGF0YSA9IHRydWU7XHJcbiAgICBjb25zdCByZXF1ZXN0RGF0YSA9IHtcclxuICAgICAgZnJvbURhdGU6IHRoaXMuaGVhZGVyRGF0YS5kYXRlLnN0YXJ0RGF0ZSxcclxuICAgICAgdG9EYXRlOiB0aGlzLmhlYWRlckRhdGEuZGF0ZS5lbmREYXRlLFxyXG4gICAgICBzdG9yZUlkOiB0aGlzLmhlYWRlckRhdGEuc3RvcmVzLmZpbHRlcigoc3RvcmU6YW55KSA9PiBzdG9yZS5jaGVja2VkKS5tYXAoKHN0b3JlOmFueSkgPT4gc3RvcmUuc3RvcmVJZCksXHJcbiAgICAgIC8vIHN0b3JlSWQ6IFtcIjIxOC0yXCJdLFxyXG4gICAgICBjbGllbnRJZDp0aGlzLmhlYWRlckRhdGEuY2xpZW50LFxyXG4gICAgICBzZWFyY2g6IHRoaXMuc2VhcmNoSW5wdXQsXHJcbiAgICAgIHNvcnQ6IHRoaXMuc29ydENvbHVtTmFtZSxcclxuICAgICAgc29ydEJ5OiB0aGlzLnNvcnREaXJlY3Rpb24sXHJcbiAgICAgIGV4cG9ydDogZmFsc2UsXHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICB0aGlzLlpvbmVTZXJ2aWNlLnpvbmVDb25jZW50cmF0aW9uVGFibGVEYXRhKHJlcXVlc3REYXRhKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuem9uZXN1bW1hcnlMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlPy5jb2RlID09PSAyMDAgJiYgcmVzcG9uc2U/LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcclxuICAgICAgICAgIHRoaXMuem9uZUNvbmNlbnRyYXRpb25EYXRhID0gcmVzcG9uc2UuZGF0YS56b25lQ29uY2VudHJhdGlvbkRhdGE7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnpvbmVDb25jZW50cmF0aW9uRGF0YSlcclxuICAgICAgICAgIC8vIHRoaXMuem9uZU5hbWUgPSByZXNwb25zZS5kYXRhLnpvbmVDb25jZW50cmF0aW9uRGF0YVswXS56b25lTmFtZTtcclxuICAgICAgICAgIHRoaXMuem9uZU5hbWUgPSB0aGlzLnpvbmVDb25jZW50cmF0aW9uRGF0YS5sZW5ndGggPyB0aGlzLnpvbmVDb25jZW50cmF0aW9uRGF0YVswXS56b25lTmFtZSA6ICcnO1xyXG4gICAgICAgICAgdGhpcy5ab25lU2VydmljZS5zZXREYXRhKHRoaXMuem9uZU5hbWUpO1xyXG4gICAgICAgICAgdGhpcy56b25lc3VtbWFyeUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuem9uZXN1bW1hcnlOb0RhdGEgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaGVhdG1hcExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaGVhdG1hcE5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hEaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5nZXRPdmVyYWxsU3RvcmVIZWF0bWFwRGF0ZXMoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gdGhpcy5oZWFkZXJEYXRhLmRhdGUuc3RhcnREYXRlID0gbnVsbDtcclxuICAgICAgICAgIC8vICAgdGhpcy5oZWFkZXJEYXRhLmRhdGUuZW5kRGF0ZSA9IG51bGw7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuem9uZUNvbmNlbnRyYXRpb25EYXRhID0gW107XHJcbiAgICAgICAgICB0aGlzLnpvbmVzdW1tYXJ5TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy56b25lc3VtbWFyeU5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmhlYXRtYXBMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmhlYXRtYXBOb0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hEaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hJbnB1dD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRGlzYWJsZWQgPSB0cnVlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnpvbmVDb25jZW50cmF0aW9uRGF0YSA9IFtdXHJcbiAgICAgICAgICB0aGlzLm92ZXJhbGxTdG9yZURhdGEgPSBbXVxyXG4gICAgICAgICAgdGhpcy5vdmVyYWxsU3RvcmVDb25jZW50cmF0aW9uRGF0ZXMgPSBbXVxyXG4gICAgICAgICAgdGhpcy56b25lTmFtZSA9IFwiXCJcclxuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgdGhpcy56b25lQ29uY2VudHJhdGlvbkRhdGEgPSBbXVxyXG4gICAgICAgIHRoaXMub3ZlcmFsbFN0b3JlQ29uY2VudHJhdGlvbkRhdGVzID0gW11cclxuICAgICAgICB0aGlzLnpvbmVOYW1lID0gXCJcIlxyXG4gICAgICAgIC8vIHRoaXMuaGVhZGVyRGF0YS5kYXRlLnN0YXJ0RGF0ZSA9IG51bGw7XHJcbiAgICAgICAgLy8gdGhpcy5oZWFkZXJEYXRhLmRhdGUuZW5kRGF0ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKClcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9uRXhwb3J0KCkge1xyXG4gICAgY29uc3QgcmVxdWVzdERhdGEgPSB7XHJcbiAgICAgIGZyb21EYXRlOiB0aGlzLmhlYWRlckRhdGEuZGF0ZS5zdGFydERhdGUsXHJcbiAgICAgIHRvRGF0ZTogdGhpcy5oZWFkZXJEYXRhLmRhdGUuZW5kRGF0ZSxcclxuICAgICAgc3RvcmVJZDogdGhpcy5oZWFkZXJEYXRhLnN0b3Jlcy5maWx0ZXIoKHN0b3JlOmFueSkgPT4gc3RvcmUuY2hlY2tlZCkubWFwKChzdG9yZTphbnkpID0+IHN0b3JlLnN0b3JlSWQpLFxyXG4gICAgICAvLyBzdG9yZUlkOiBbXCIxMS0yNTNcIiwgXCIxMS01MTFcIixcIjExLTExNzZcIl0sXHJcbiAgICAgIGNsaWVudElkOnRoaXMuaGVhZGVyRGF0YS5jbGllbnQsXHJcbiAgICAgIHNlYXJjaDogdGhpcy5zZWFyY2hJbnB1dCxcclxuICAgICAgZXhwb3J0OiB0cnVlLFxyXG4gICAgICBzb3J0OiB0aGlzLnNvcnRDb2x1bU5hbWUsXHJcbiAgICAgIHNvcnRCeTogdGhpcy5zb3J0RGlyZWN0aW9uLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLlpvbmVTZXJ2aWNlLnpvbmVDb25jZW50cmF0aW9uVGFibGVEYXRhRXhwb3J0KHJlcXVlc3REYXRhKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlcykgPT4ge1xyXG4gICAgICAgIHRoaXMuWm9uZVNlcnZpY2Uuc2F2ZUFzRXhjZWxGaWxlKHJlcywgJ1pvbmVDb25jZW50cmF0aW9uU3VtbWFyeScpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGUpID0+IHtcclxuICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ1NvbWV0aGluZyB3ZW50IFdyb25nLi4nKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgc29ydERhdGEoY29sdW1uOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNvcnRDb2x1bU5hbWUgPT09IGNvbHVtbikge1xyXG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSB0aGlzLnNvcnREaXJlY3Rpb24gPT09IDEgPyAtMSA6IDE7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNvcnRDb2x1bU5hbWUgPSBjb2x1bW47XHJcbiAgICAgIHRoaXMuc29ydERpcmVjdGlvbiA9IDE7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdldFpvbmVDb25jZW50cmF0aW9uRGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoRmllbGQoKTogdm9pZCB7XHJcbiAgIHRoaXMuc2VhcmNoRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy56b25lc3VtbWFyeUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy56b25lc3VtbWFyeU5vRGF0YSA9IHRydWU7XHJcbiAgICBjb25zdCByZXF1ZXN0RGF0YSA9IHtcclxuICAgICAgZnJvbURhdGU6IHRoaXMuaGVhZGVyRGF0YS5kYXRlLnN0YXJ0RGF0ZSxcclxuICAgICAgdG9EYXRlOiB0aGlzLmhlYWRlckRhdGEuZGF0ZS5lbmREYXRlLFxyXG4gICAgICBzdG9yZUlkOiB0aGlzLmhlYWRlckRhdGEuc3RvcmVzLmZpbHRlcigoc3RvcmU6YW55KSA9PiBzdG9yZS5jaGVja2VkKS5tYXAoKHN0b3JlOmFueSkgPT4gc3RvcmUuc3RvcmVJZCksXHJcbiAgICAgIC8vIHN0b3JlSWQ6IFtcIjIxOC0yXCJdLFxyXG4gICAgICBjbGllbnRJZDp0aGlzLmhlYWRlckRhdGEuY2xpZW50LFxyXG4gICAgICBzZWFyY2g6IHRoaXMuc2VhcmNoSW5wdXQsXHJcbiAgICAgIHNvcnQ6IHRoaXMuc29ydENvbHVtTmFtZSxcclxuICAgICAgc29ydEJ5OiB0aGlzLnNvcnREaXJlY3Rpb24sXHJcbiAgICAgIGV4cG9ydDogZmFsc2UsXHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICB0aGlzLlpvbmVTZXJ2aWNlLnpvbmVDb25jZW50cmF0aW9uVGFibGVEYXRhKHJlcXVlc3REYXRhKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuem9uZXN1bW1hcnlMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlPy5jb2RlID09PSAyMDAgJiYgcmVzcG9uc2U/LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcclxuICAgICAgICAgIHRoaXMuem9uZUNvbmNlbnRyYXRpb25EYXRhID0gcmVzcG9uc2UuZGF0YS56b25lQ29uY2VudHJhdGlvbkRhdGE7XHJcbiAgICAgICAgICAvLyB0aGlzLnpvbmVOYW1lID0gcmVzcG9uc2UuZGF0YS56b25lQ29uY2VudHJhdGlvbkRhdGFbMF0uem9uZU5hbWU7XHJcbiAgICAgICAgICAvLyB0aGlzLnpvbmVOYW1lID0gdGhpcy56b25lQ29uY2VudHJhdGlvbkRhdGEubGVuZ3RoID8gdGhpcy56b25lQ29uY2VudHJhdGlvbkRhdGFbMF0uem9uZU5hbWUgOiAnJztcclxuICAgICAgICAgIHRoaXMuem9uZXN1bW1hcnlMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnpvbmVzdW1tYXJ5Tm9EYXRhID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaERpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIHRoaXMuaGVhZGVyRGF0YS5kYXRlLnN0YXJ0RGF0ZSA9IG51bGw7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuaGVhZGVyRGF0YS5kYXRlLmVuZERhdGUgPSBudWxsO1xyXG4gICAgICAgICAgICAvLyB0aGlzLnpvbmVDb25jZW50cmF0aW9uRGF0YSA9IFtdO1xyXG4gICAgICAgICAgdGhpcy56b25lc3VtbWFyeUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuem9uZXN1bW1hcnlOb0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hEaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hJbnB1dD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRGlzYWJsZWQgPSB0cnVlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnpvbmVDb25jZW50cmF0aW9uRGF0YSA9IFtdXHJcbiAgICAgICAgICB0aGlzLm92ZXJhbGxTdG9yZURhdGEgPSBbXVxyXG4gICAgICAgICAgdGhpcy5vdmVyYWxsU3RvcmVDb25jZW50cmF0aW9uRGF0ZXMgPSBbXVxyXG4gICAgICAgICAgdGhpcy56b25lTmFtZSA9IFwiXCJcclxuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgdGhpcy56b25lQ29uY2VudHJhdGlvbkRhdGEgPSBbXVxyXG4gICAgICAgIHRoaXMub3ZlcmFsbFN0b3JlQ29uY2VudHJhdGlvbkRhdGVzID0gW11cclxuICAgICAgICB0aGlzLnpvbmVOYW1lID0gXCJcIlxyXG4gICAgICAgIC8vIHRoaXMuaGVhZGVyRGF0YS5kYXRlLnN0YXJ0RGF0ZSA9IG51bGw7XHJcbiAgICAgICAgLy8gdGhpcy5oZWFkZXJEYXRhLmRhdGUuZW5kRGF0ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKClcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIFxyXG4gIH1cclxuXHJcbiAgZ2V0T3ZlcmFsbFN0b3JlQ29uY2VudHJhdGlvbkRhdGEoKTogdm9pZCB7XHJcbiAgICB0aGlzLmhlYXRtYXBMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuaGVhdG1hcE5vRGF0YSA9IHRydWU7XHJcbiAgICBjb25zdCByZXF1ZXN0RGF0YSA9IHtcclxuICAgICAgZnJvbURhdGU6IHRoaXMuaGVhZGVyRGF0YS5kYXRlLnN0YXJ0RGF0ZSxcclxuICAgICAgdG9EYXRlOiB0aGlzLmhlYWRlckRhdGEuZGF0ZS5lbmREYXRlLFxyXG4gICAgICBzdG9yZUlkOiB0aGlzLmhlYWRlckRhdGEuc3RvcmVzLmZpbHRlcigoc3RvcmU6YW55KSA9PiBzdG9yZS5jaGVja2VkKS5tYXAoKHN0b3JlOmFueSkgPT4gc3RvcmUuc3RvcmVJZCksXHJcbiAgICAgIC8vIHN0b3JlSWQ6IFtcIjExLTExNzZcIl0sXHJcbiAgICAgIGNsaWVudElkOnRoaXMuaGVhZGVyRGF0YS5jbGllbnQsXHJcbiAgICAgIHpvbmVOYW1lOiB0aGlzLnpvbmVOYW1lLFxyXG4gICAgICBkYXRlVHlwZTogdGhpcy50eXBlLFxyXG4gICAgICB6b25lRGF0ZTogdGhpcy5zZWxlY3RlZERhdGVcclxuICAgIH07XHJcbiAgICB0aGlzLlpvbmVTZXJ2aWNlLmdldE92ZXJhbGxTdG9yZUNvbmNlbnRyYXRpb25EYXRhKHJlcXVlc3REYXRhKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIC8vIHRoaXMuaGVhdG1hcExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAocmVzcG9uc2U/LmNvZGUgPT09IDIwMCAmJiByZXNwb25zZT8uc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xyXG4gICAgICAgICAgLy8gdGhpcy5vdmVyYWxsU3RvcmVEYXRhID0gcmVzcG9uc2UuZGF0YS5vdmVyYWxsU3RvcmVDb25jZW50cmF0aW9uRGF0YXM7XHJcbiAgICAgICAgICB0aGlzLm92ZXJhbGxTdG9yZURhdGEgPSByZXNwb25zZS5kYXRhLm92ZXJhbGxTdG9yZUNvbmNlbnRyYXRpb25EYXRhcztcclxuICAgICAgICAgIHRoaXMuaGVhdG1hcExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaGVhdG1hcE5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBwcmV2RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jYXJvdXNlbC1jb250cm9sLXByZXYnKTtcclxuICAgICAgICAgICAgcHJldkVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCdkaXNwbGF5Om5vbmUnKTtcclxuICAgICAgICAgIH0sIDIwMCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMub3ZlcmFsbFN0b3JlRGF0YSA9W11cclxuICAgICAgICAgIC8vIHRoaXMuem9uZUNvbmNlbnRyYXRpb25EYXRhID0gW11cclxuICAgICAgICAgIHRoaXMuaGVhdG1hcExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaGVhdG1hcE5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgdGhpcy5vdmVyYWxsU3RvcmVEYXRhID1bXVxyXG4gICAgICAgIC8vIHRoaXMuem9uZUNvbmNlbnRyYXRpb25EYXRhID0gW11cclxuICAgICAgICAvLyBjb25zb2xlLmVycm9yKCdBUEkgY2FsbCBmYWlsZWQnLCBlcnJvcik7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRPdmVyYWxsU3RvcmVIZWF0bWFwRGF0ZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLm92ZXJhbGxTdG9yZUNvbmNlbnRyYXRpb25EYXRlcyA9IFtdXHJcbiAgICAgIHRoaXMub3ZlcmFsbFN0b3JlRGF0YSA9W11cclxuICAgIHRoaXMuY3VzdG9tQXJyb3cgPSBmYWxzZTtcclxuICAgIHRoaXMuaGVhdG1hcExvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5oZWF0bWFwTm9EYXRhID0gdHJ1ZTtcclxuICAgIGNvbnN0IHJlcXVlc3REYXRhID0ge1xyXG4gICAgICBmcm9tRGF0ZTogdGhpcy5oZWFkZXJEYXRhLmRhdGUuc3RhcnREYXRlLFxyXG4gICAgICB0b0RhdGU6IHRoaXMuaGVhZGVyRGF0YS5kYXRlLmVuZERhdGUsXHJcbiAgICAgIHN0b3JlSWQ6IHRoaXMuaGVhZGVyRGF0YS5zdG9yZXMuZmlsdGVyKChzdG9yZTphbnkpID0+IHN0b3JlLmNoZWNrZWQpLm1hcCgoc3RvcmU6YW55KSA9PiBzdG9yZS5zdG9yZUlkKSxcclxuICAgICAgLy8gc3RvcmVJZDogW1wiMTEtMTE3NlwiXSxcclxuICAgICAgY2xpZW50SWQ6dGhpcy5oZWFkZXJEYXRhLmNsaWVudCxcclxuICAgICAgem9uZU5hbWU6IHRoaXMuem9uZU5hbWUsXHJcbiAgICAgIGRhdGVUeXBlOiB0aGlzLnR5cGVcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5ab25lU2VydmljZS5nZXRPdmVyYWxsU3RvcmVIZWF0bWFwRGF0ZXMocmVxdWVzdERhdGEpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYocmVzcG9uc2UgJiYgcmVzcG9uc2UuZGF0YSl7XHJcbiAgICAgICAgdGhpcy5vdmVyYWxsU3RvcmVDb25jZW50cmF0aW9uRGF0ZXMgPSByZXNwb25zZS5kYXRhLm92ZXJhbGxTdG9yZUNvbmNlbnRyYXRpb25EYXRlcztcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IHRoaXMub3ZlcmFsbFN0b3JlQ29uY2VudHJhdGlvbkRhdGVzWzBdLnpvbmVEYXRlOyBcclxuICAgICAgICBpZiAocmVzcG9uc2U/LmNvZGUgPT09IDIwMCAmJiByZXNwb25zZT8uc3RhdHVzID09PSBcInN1Y2Nlc3NcIiAmJiByZXNwb25zZS5kYXRhLm92ZXJhbGxTdG9yZUNvbmNlbnRyYXRpb25EYXRlcy5sZW5ndGgpIHtcclxuICAgICAgICAgXHJcbiAgICAgICAgICAvLyBpZihbJ3dlZWtseScsJ21vbnRobHknXS5pbmNsdWRlcyh0aGlzLnR5cGUpKSB7XHJcbiAgICAgICAgICAvLyAgIGxldCBsYXN0RGlnaXQgPSB0aGlzLm92ZXJhbGxTdG9yZUNvbmNlbnRyYXRpb25EYXRlc1t0aGlzLm92ZXJhbGxTdG9yZUNvbmNlbnRyYXRpb25EYXRlcy5sZW5ndGggLTFdLnpvbmVEYXRlO1xyXG4gICAgICAgICAgLy8gICBsZXQgbGFzdFNwbGl0ID0gbGFzdERpZ2l0LnNwbGl0KCctJylbMV07XHJcbiAgICAgICAgICAvLyAgIGxhc3RTcGxpdCA9IGxhc3RTcGxpdCArJyAnKyB0aGlzLmRheWpzKCkuZm9ybWF0KCdZWVlZJyk7XHJcbiAgICAgICAgICAvLyAgIGlmKHRoaXMuZGF5anMobGFzdFNwbGl0LCdNTU0gREQgWVlZWScpLmZvcm1hdCgnWVlZWS1NTS1ERCcpID4gdGhpcy5kYXlqcyh0aGlzLmhlYWRlckRhdGEuZGF0ZS5lbmREYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQnKSlcclxuICAgICAgICAgIC8vICAgICB0aGlzLm92ZXJhbGxTdG9yZUNvbmNlbnRyYXRpb25EYXRlcy5zcGxpY2UodGhpcy5vdmVyYWxsU3RvcmVDb25jZW50cmF0aW9uRGF0ZXMubGVuZ3RoLTEsMSk7XHJcbiAgICAgICAgICAvLyAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2RhaWx5Jykge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLm92ZXJhbGxTdG9yZUNvbmNlbnRyYXRpb25EYXRlcy5sZW5ndGggPiA3KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbUFycm93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSAnd2Vla2x5Jykge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLm92ZXJhbGxTdG9yZUNvbmNlbnRyYXRpb25EYXRlcy5sZW5ndGggPiA0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbUFycm93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0T3ZlcmFsbFN0b3JlQ29uY2VudHJhdGlvbkRhdGEoKTtcclxuICAgICAgICAgIC8vICAgdGhpcy5oZWF0bWFwTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgLy8gdGhpcy5oZWF0bWFwTm9EYXRhID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcclxuICAgICAgICAgIHRoaXMuaGVhdG1hcExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaGVhdG1hcE5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICB0aGlzLmhlYXRtYXBMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmhlYXRtYXBOb0RhdGEgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgdGhpcy5vdmVyYWxsU3RvcmVEYXRhID1bXVxyXG4gICAgICAgIHRoaXMuaGVhdG1hcExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmhlYXRtYXBOb0RhdGEgPSB0cnVlO1xyXG4gICAgICAgIC8vIGNvbnNvbGUuZXJyb3IoJ0FQSSBjYWxsIGZhaWxlZCcsIGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9uRGF0ZUNoYW5nZShkYXRlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0ZSAhPT0gZGF0ZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IGRhdGU7XHJcbiAgICAgIHRoaXMuZ2V0T3ZlcmFsbFN0b3JlQ29uY2VudHJhdGlvbkRhdGEoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdFBsYW4oc2VsZWN0ZWRUeXBlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMudHlwZSA9IHNlbGVjdGVkVHlwZTtcclxuICAgIHRoaXMuZ2V0T3ZlcmFsbFN0b3JlSGVhdG1hcERhdGVzKCk7IFxyXG4gICAgLy8gdGhpcy5nZXRPdmVyYWxsU3RvcmVDb25jZW50cmF0aW9uRGF0YSgpO1xyXG59XHJcblxyXG5vblpvbmVDbGljayh6b25lTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgdGhpcy56b25lTmFtZSA9IHpvbmVOYW1lOyBcclxuICB0aGlzLmdldE92ZXJhbGxTdG9yZUhlYXRtYXBEYXRlcygpO1xyXG4gIHRoaXMuWm9uZVNlcnZpY2Uuem9uZVNlZ21lbnRhdGlvbi5uZXh0KHpvbmVOYW1lKVxyXG4gIC8vIHRoaXMuZ2V0Wm9uZVNlZ21lbnRhdGlvbih6b25lTmFtZSkgXHJcbn1cclxuY29uY2VudHJhdGlvbkhlYXRtYXAoaW1hZ2VVUkxWMTogc3RyaW5nKSB7XHJcbiAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKENvbmNlbnRyYXRpb25oZWF0bWFwQ29tcG9uZW50LCB7XHJcbiAgICBjZW50ZXJlZDogdHJ1ZSwgc2l6ZTogJ3hsJ1xyXG4gIH0pO1xyXG4gIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmltYWdlVVJMVjEgPSBpbWFnZVVSTFYxO1xyXG4gIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgXHJcbiAgfSk7XHJcbn1cclxuXHJcbnNjcm9sbExlZnQoKSB7Y29uc3QgZWxlbWVudCA9IHRoaXMuZGF0ZUxpc3QubmF0aXZlRWxlbWVudDsgZWxlbWVudC5zY3JvbGxCeVxyXG4gICh7bGVmdDogLTIwMCxiZWhhdmlvcjonc21vb3RoJ30pO31cclxuc2Nyb2xsUmlnaHQoKSB7Y29uc3QgZWxlbWVudCA9IHRoaXMuZGF0ZUxpc3QubmF0aXZlRWxlbWVudDsgZWxlbWVudC5zY3JvbGxCeVxyXG4gICh7bGVmdDogMjAwLGJlaGF2aW9yOidzbW9vdGgnfSk7fVxyXG5cclxuICBvblNsaWRlQ2hhbmdlXHJcbiAgKHNsaWRlRXZlbnQ6IE5nYlNsaWRlRXZlbnQpIHtcclxuICBjb25zdFxyXG4gICAgc2xpZGVJbmRleCA9ICtzbGlkZUV2ZW50LmN1cnJlbnQuXHJcbiAgICAgIHJlcGxhY2VcclxuICAgICAgKFxyXG4gICAgICAgICduZ2Itc2xpZGUtJ1xyXG4gICAgICAgICxcclxuICAgICAgICAnJ1xyXG4gICAgICApOyB0aGlzLmN1cnJlbnRTbGlkZSA9IHNsaWRlSW5kZXg7IFxyXG4gICAgICBsZXQgcHJldkVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY2Fyb3VzZWwtY29udHJvbC1wcmV2Jyk7XHJcbiAgICAgIGxldCBuZXh0RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jYXJvdXNlbC1jb250cm9sLW5leHQnKTtcclxuICAgICAgaWYodGhpcy5jdXJyZW50U2xpZGUgPT0gMCkge1xyXG4gICAgICAgIG5leHRFbGVtZW50Py5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJyk7XHJcbiAgICAgICAgaWYocHJldkVsZW1lbnQpIHtcclxuICAgICAgICAgIHByZXZFbGVtZW50LnNldEF0dHJpYnV0ZSgnc3R5bGUnLFwiZGlzcGxheTpub25lXCIpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYodGhpcy5jdXJyZW50U2xpZGUgPT09IHRoaXMub3ZlcmFsbFN0b3JlRGF0YT8uSW1hZ2VVUkxzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICBwcmV2RWxlbWVudD8ucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xyXG4gICAgICAgIGlmKG5leHRFbGVtZW50KSB7XHJcbiAgICAgICAgICBuZXh0RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJyxcImRpc3BsYXk6bm9uZVwiKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgcHJldkVsZW1lbnQ/LnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTtcclxuICAgICAgICBuZXh0RWxlbWVudD8ucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xyXG4gICAgICB9XHJcbn1cclxuZXhwYW5kZWRab25lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG5cclxudG9nZ2xlWm9uZSh6b25lTmFtZTogc3RyaW5nLCBldmVudDogRXZlbnQpIHtcclxuICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgLy8gcHJldmVudCB6b25lIGNsaWNrXHJcbiAgaWYgKHRoaXMuZXhwYW5kZWRab25lcy5oYXMoem9uZU5hbWUpKSB7XHJcbiAgICB0aGlzLmV4cGFuZGVkWm9uZXMuZGVsZXRlKHpvbmVOYW1lKTtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5leHBhbmRlZFpvbmVzLmFkZCh6b25lTmFtZSk7XHJcbiAgfVxyXG59XHJcblxyXG5pc0V4cGFuZGVkKHpvbmVOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICByZXR1cm4gdGhpcy5leHBhbmRlZFpvbmVzLmhhcyh6b25lTmFtZSk7XHJcbn1cclxuXHJcbkBWaWV3Q2hpbGQoJ3pvb21Qb3B1cCcpIHpvb21Qb3B1cCE6IEVsZW1lbnRSZWY7XHJcbnZpZXdJbWFnZTphbnk7XHJcbm9wZW5Nb2RlbCgpOiB2b2lkIHtcclxuICAvLyBPcGVuIG1vZGFsXHJcbiAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih0aGlzLnpvb21Qb3B1cCwge1xyXG4gICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICBzaXplOiAneGwnXHJcbiAgfSk7XHJcblxyXG4gIC8vIEFQSSByZXF1ZXN0IHBheWxvYWRcclxuICBjb25zdCByZXF1ZXN0RGF0YSA9IHtcclxuICAgIGNsaWVudElkOiB0aGlzLmhlYWRlckRhdGE/LmNsaWVudCxcclxuICAgIHN0b3JlSWQ6IHRoaXMuc3RvcmVJZGFycmF5LFxyXG4gICAgdXNlckVtYWlsZXM6IFtdLFxyXG4gICAgZnJvbURhdGU6IHRoaXMuaGVhZGVyRGF0YT8uZGF0ZT8uc3RhcnREYXRlLFxyXG4gICAgdG9EYXRlOiB0aGlzLmhlYWRlckRhdGE/LmRhdGU/LmVuZERhdGUsXHJcbiAgICBsaW1pdDogMTAsXHJcbiAgICBvZmZzZXQ6IDAsXHJcbiAgICBzb3J0Q29sdW1uTmFtZTogJ2NoZWNrTGlzdE5hbWUnLFxyXG4gICAgc29ydEJ5OiAxLFxyXG4gICAgc2VhcmNoVmFsdWU6ICcnLFxyXG4gICAgZmlsdGVyOiAncnVuQUknLFxyXG4gICAgcnVuQUlDaGVja2xpc3ROYW1lOiBbXVxyXG4gIH07XHJcblxyXG4gIC8vIEFQSSBjYWxsXHJcbiAgdGhpcy5ab25lU2VydmljZS5nZXRWaWV3SW5zaWdodHNBcGkocmVxdWVzdERhdGEpXHJcbiAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcz8uY29kZSAhPT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ05vIERhdGEgRm91bmQnKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmlld0ltYWdlID0gcmVzPy5kYXRhO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCgnU29tZXRoaW5nIHdlbnQgd3JvbmcnKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZsYWdzVmlldygpe1xyXG4gIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL21hbmFnZS90cmF4L2ZsYWdzJ10pOyBcclxufVxyXG5cclxufVxyXG4gIC8vIHRlc3RpbmcgcHVycG9zZSBmb3IgdGhlIHBhbnQgcHJvamVjdCBzdGFydFxyXG5cclxuLy8gICAgIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duQ29udGFpbmVyJykgZHJvcGRvd25SZWYhOiBFbGVtZW50UmVmO1xyXG4vLyAgIHpvbmVzID0gWydSZWFkeSB0byB3ZWFyJywgJ0plYW5zJywgJ0JpbGxpbmcnLCAnU2hvcHBlciBab25lIFBhdGgnLCAnT3ZlcmFsbCBGb290ZmFsbCddO1xyXG4vLyAgIHNlbGVjdGVkWm9uZXM6IHN0cmluZ1tdID0gW107XHJcbi8vICAgZmlsdGVyZWRab25lczogc3RyaW5nW10gPSBbXTtcclxuLy8gICBzZWFyY2hUZXh0ID0gJyc7XHJcbi8vICAgZHJvcGRvd25PcGVuID0gZmFsc2U7XHJcbi8vICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXHJcbi8vICAgb25Eb2N1bWVudENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbi8vICAgICBpZiAoIXRoaXMuZHJvcGRvd25SZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XHJcbi8vICAgICAgIHRoaXMuZHJvcGRvd25PcGVuID0gZmFsc2U7XHJcbi8vICAgICB9XHJcbi8vICAgfVxyXG4vLyAgIHRvZ2dsZURyb3Bkb3duKCkge1xyXG4vLyAgICAgdGhpcy5kcm9wZG93bk9wZW4gPSAhdGhpcy5kcm9wZG93bk9wZW47XHJcbi8vICAgICB0aGlzLmZpbHRlclpvbmVzKCk7XHJcbi8vICAgfVxyXG5cclxuLy8gICBjbG9zZURyb3Bkb3duKCkge1xyXG4vLyAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmRyb3Bkb3duT3BlbiA9IGZhbHNlLCAyMDApOyAvLyBmb3IgY2xpY2sgdG8gcmVnaXN0ZXJcclxuLy8gICB9XHJcblxyXG4vLyAgIGZpbHRlclpvbmVzKCkge1xyXG4vLyAgICAgY29uc3QgbG93ZXIgPSB0aGlzLnNlYXJjaFRleHQudG9Mb3dlckNhc2UoKTtcclxuLy8gICAgIHRoaXMuZmlsdGVyZWRab25lcyA9IHRoaXMuem9uZXMuZmlsdGVyKHpvbmUgPT5cclxuLy8gICAgICAgem9uZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGxvd2VyKSAmJlxyXG4vLyAgICAgICAhdGhpcy5zZWxlY3RlZFpvbmVzLmluY2x1ZGVzKHpvbmUpXHJcbi8vICAgICApO1xyXG4vLyAgIH1cclxuXHJcbi8vICAgYWRkWm9uZSh6b25lOiBzdHJpbmcpIHtcclxuLy8gICAgIGlmICh0aGlzLnNlbGVjdGVkWm9uZXMubGVuZ3RoIDwgMyAmJiAhdGhpcy5zZWxlY3RlZFpvbmVzLmluY2x1ZGVzKHpvbmUpKSB7XHJcbi8vICAgICAgIHRoaXMuc2VsZWN0ZWRab25lcy5wdXNoKHpvbmUpO1xyXG4vLyAgICAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcclxuLy8gICAgICAgdGhpcy5maWx0ZXJab25lcygpO1xyXG4vLyAgICAgfVxyXG4vLyAgIH1cclxuXHJcbi8vICAgcmVtb3ZlWm9uZShpbmRleDogbnVtYmVyKSB7XHJcbi8vICAgICB0aGlzLnNlbGVjdGVkWm9uZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuLy8gICAgIHRoaXMuZmlsdGVyWm9uZXMoKTtcclxuLy8gICB9XHJcblxyXG4vLyAgIHJlc2V0Wm9uZXMoKSB7XHJcbi8vICAgICB0aGlzLnNlbGVjdGVkWm9uZXMgPSBbXTtcclxuLy8gICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4vLyAgICAgdGhpcy5maWx0ZXJab25lcygpO1xyXG4vLyAgIH1cclxuLy8gICBhcHBseVpvbmVzKCl7XHJcbiAgICBcclxuLy8gICB9XHJcbi8vICAgIC8vIHRlc3RpbmcgcHVycG9zZSBmb3IgdGhlIHBhbnQgcHJvamVjdCBlbmRcclxuLy8gfVxyXG5cclxuIiwiPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTUgcmlnaHQtYm9yZGVyIG15LTJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImgtMTAwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgcHMtMyBwZS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBtcy0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVhZHRleHRcIj5Db25jZW50cmF0aW9uIFN1bW1hcnkgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2JUb29sdGlwPVwiU3VtbWFyeSBvZiBvdmVyYWxsIHpvbmVzIGF0IHRoZSBzdG9yZVwiIHBsYWNlbWVudD1cInRvcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJtb3VzZWVudGVyOm1vdXNlbGVhdmVcIiB0b29sdGlwQ2xhc3M9XCJjdXN0b20tdG9vbHRpcFwiPjxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzM1MTJfMzI4NjgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAxMC42NjY2VjcuOTk5OThNOC4wMDAxNiA1LjMzMzMxSDguMDA2ODNNMTQuNjY2OCA3Ljk5OTk4QzE0LjY2NjggMTEuNjgxOSAxMS42ODIxIDE0LjY2NjYgOC4wMDAxNiAxNC42NjY2QzQuMzE4MjYgMTQuNjY2NiAxLjMzMzUgMTEuNjgxOSAxLjMzMzUgNy45OTk5OEMxLjMzMzUgNC4zMTgwOCA0LjMxODI2IDEuMzMzMzEgOC4wMDAxNiAxLjMzMzMxQzExLjY4MjEgMS4zMzMzMSAxNC42NjY4IDQuMzE4MDggMTQuNjY2OCA3Ljk5OTk4WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzk4QTJCM1wiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzM1MTJfMzI4NjhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyICBwb3NpdGlvbi1yZWxhdGl2ZSBteS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xIHBvc2l0aW9uLWFic29sdXRlICBtcy0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IG9wYWNpdHk9XCIwLjVcIiB4PVwiMTcuMDM2NVwiIHk9XCIxNS4xMjIzXCIgd2lkdGg9XCI4LjE1NTQ2XCIgaGVpZ2h0PVwiMlwiIHJ4PVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwicm90YXRlKDQ1IDE3LjAzNjUgMTUuMTIyMylcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTEgMTlDNi41NTU1NiAxOSAzIDE1LjQ0NDQgMyAxMUMzIDYuNTU1NTYgNi41NTU1NiAzIDExIDNDMTUuNDQ0NCAzIDE5IDYuNTU1NTYgMTkgMTFDMTkgMTUuNDQ0NCAxNS40NDQ0IDE5IDExIDE5Wk0xMSA1QzcuNTMzMzMgNSA1IDcuNTMzMzMgNSAxMUM1IDE0LjQ2NjcgNy41MzMzMyAxNyAxMSAxN0MxNC40NjY3IDE3IDE3IDE0LjQ2NjcgMTcgMTFDMTcgNy41MzMzMyAxNC40NjY3IDUgMTEgNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFtkaXNhYmxlZF09XCJzZWFyY2hEaXNhYmxlZFwiIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cInNlYXJjaElucHV0XCIgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBwcy0xMCBpbnZvaWNlc2VhcmNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIiBhdXRvY29tcGxldGU9XCJvZmZcIiAoa2V5dXAuZW50ZXIpPVwic2VhcmNoRmllbGQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uRXhwb3J0KClcIiBjbGFzcz1cImJ0bi1vdXRsaW5lIGJ0biBhbGlnbi1pdGVtcy1lbmQgdGV4dC1ub3dyYXAgaW52aGVhZGVyIG1zLTJcIiBbZGlzYWJsZWRdPVwiIXpvbmVDb25jZW50cmF0aW9uRGF0YS5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE3LjUgMTIuNVYxNS44MzMzQzE3LjUgMTYuMjc1NCAxNy4zMjQ0IDE2LjY5OTMgMTcuMDExOCAxNy4wMTE4QzE2LjY5OTMgMTcuMzI0NCAxNi4yNzU0IDE3LjUgMTUuODMzMyAxNy41SDQuMTY2NjdDMy43MjQ2NCAxNy41IDMuMzAwNzIgMTcuMzI0NCAyLjk4ODE2IDE3LjAxMThDMi42NzU1OSAxNi42OTkzIDIuNSAxNi4yNzU0IDIuNSAxNS44MzMzVjEyLjVNMTQuMTY2NyA2LjY2NjY3TDEwIDIuNU0xMCAyLjVMNS44MzMzMyA2LjY2NjY3TTEwIDIuNVYxMi41XCIgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwibXMtMlwiPkV4cG9ydDwvc3Bhbj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXpvbmVzdW1tYXJ5Tm9EYXRhICYmICF6b25lc3VtbWFyeUxvYWRpbmdcIiBjbGFzcz1cInRhYmxlLWNvbnRhaW5lciAgbS00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRhYmxlICBjbGFzcz1cInRhYmxlIGJvdHRvbS1ib3JkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkIGNsYXNzPVwiZml4ZWQtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwicC0xXCI+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzb3J0RGF0YSgnem9uZU5hbWUnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWm9uZSBOYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFtuZ0NsYXNzXT1cInNvcnRDb2x1bU5hbWUgPT09ICd6b25lTmFtZScgJiYgc29ydERpcmVjdGlvbiA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydENvbHVtTmFtZSA9PT0gJ3pvbmVOYW1lJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ2Zvb3RmYWxsQ291bnQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9vdGZhbGwgPGJyPihBY3R1YWxzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBbbmdDbGFzc109XCJzb3J0Q29sdW1OYW1lID09PSAnZm9vdGZhbGxDb3VudCcgJiYgc29ydERpcmVjdGlvbiA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydENvbHVtTmFtZSA9PT0gJ2Zvb3RmYWxsQ291bnQnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ2F2Z0R3ZWxsVGltZScpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEd2VsbCBUaW1lIDxicj4oQXZlcmFnZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgW25nQ2xhc3NdPVwic29ydENvbHVtTmFtZSA9PT0gJ2F2Z0R3ZWxsVGltZScgJiYgc29ydERpcmVjdGlvbiA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydENvbHVtTmFtZSA9PT0gJ2F2Z0R3ZWxsVGltZScgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmMgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ2NvbmNlbnRyYXRpb25SYXRlJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmNlbnRyYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgW25nQ2xhc3NdPVwic29ydENvbHVtTmFtZSA9PT0gJ2NvbmNlbnRyYXRpb25SYXRlJyAmJiBzb3J0RGlyZWN0aW9uID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0Q29sdW1OYW1lID09PSAnY29uY2VudHJhdGlvblJhdGUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keSAqbmdJZj1cIiF6b25lc3VtbWFyeUxvYWRpbmcgJiYgIXpvbmVzdW1tYXJ5Tm9EYXRhXCIgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB6b25lIG9mIHpvbmVDb25jZW50cmF0aW9uRGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIOKchSBQQVJFTlQgUk9XIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwicC0xXCI+IDxzcGFuICpuZ0lmPVwiem9uZS5yb3dzPy5sZW5ndGhcIiBjbGFzcz1cInRvZ2dsZS1pY29uIG1lLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVab25lKHpvbmUuem9uZU5hbWUsICRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBNSU5VUyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiaXNFeHBhbmRlZCh6b25lLnpvbmVOYW1lKVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk00LjE2Nzk3IDEwSDE1LjgzNDZcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFBMVVMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cIiFpc0V4cGFuZGVkKHpvbmUuem9uZU5hbWUpXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwLjAwMTMgNC4xNjY1VjE1LjgzMzJNNC4xNjc5NyA5Ljk5OTg0SDE1LjgzNDZcIiBzdHJva2U9XCIjNjY3MDg1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGUtcHJpbWFyeSBvdmVyYWxsc3RvcmUgbWItMiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBaT05FIE5BTUUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWNhcGl0YWxpemUgY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cIm9uWm9uZUNsaWNrKHpvbmUuem9uZU5hbWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB6b25lLnpvbmVOYW1lIHx8ICctLScgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHpvbmUuZm9vdGZhbGxDb3VudD8udG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJykgfHwgJy0tJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB6b25lLmF2Z0R3ZWxsVGltZT8udG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJykgfHwgJy0tJyB9fSBtaW5zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHpvbmUuY29uY2VudHJhdGlvblJhdGU/LnRvTG9jYWxlU3RyaW5nKCdlbi1VUycpIHx8ICctLScgfX0lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIOKchSBDSElMRCBST1dTIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcm93IG9mIHpvbmUucm93c1wiIFtoaWRkZW5dPVwiIWlzRXhwYW5kZWQoem9uZS56b25lTmFtZSlcIiBjbGFzcz1cImNoaWxkLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJwLTFcIj48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJwcy0xNSB0ZXh0LXByaW1hcnkgdW5kZXJsaW5lIHRleHQtY2FwaXRhbGl6ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcm93LnRvWm9uZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgcm93LmZvb3RmYWxsQ291bnQgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgcm93LmF2Z0R3ZWxsVGltZSB9fSBtaW5zPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IHJvdy5jb25jZW50cmF0aW9uIH19JTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInpvbmVzdW1tYXJ5TG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGxvYWRlciAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ6b25lc3VtbWFyeU5vRGF0YSAmJiAhem9uZXN1bW1hcnlMb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTIgbXktNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctc3JjXCIgc3JjPVwiLi9hc3NldHMvdGFuZ28vSWNvbnMvTm9kYXRhMS5zdmdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vZGF0YW1haW50ZXh0IG10LTNcIj5ObyBkYXRhIGZvdW5kPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGFzdWJ0ZXh0XCI+VGhlcmUgaXMgbm8gcmVzdWx0IGZvciBab25lIENvbmNlbnRyYXRpb24gU3VtbWFyeTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiem9uZXN1bW1hcnlMb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBsb2FkZXIgIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ6b25lc3VtbWFyeU5vRGF0YSAmJiAhem9uZXN1bW1hcnlMb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyIG15LTE4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjYXJkLWJvZHkgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1zcmNcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9Ob2RhdGExLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGFtYWludGV4dCBtdC0zXCI+Tm8gZGF0YSBmb3VuZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGFzdWJ0ZXh0XCI+VGhlcmUgaXMgbm8gcmVzdWx0IGZvciBab25lIENvbmNlbnRyYXRpb24gU3VtbWFyeTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctN1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcC00XCI+XHJcbiAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWFkdGV4dFwiPnt7IHpvbmVOYW1lIHx8ICcnIH19IENvbmNlbnRyYXRpb24gSGVhdG1hcCA8c3BhbiBuZ2JUb29sdGlwPVwiRGVuc2l0eSBoZWF0bWFwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInRvcFwiIHRyaWdnZXJzPVwibW91c2VlbnRlcjptb3VzZWxlYXZlXCIgdG9vbHRpcENsYXNzPVwiY3VzdG9tLXRvb2x0aXBcIj48c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8zNTEyXzMyODY4KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDEwLjY2NjZWNy45OTk5OE04LjAwMDE2IDUuMzMzMzFIOC4wMDY4M00xNC42NjY4IDcuOTk5OThDMTQuNjY2OCAxMS42ODE5IDExLjY4MjEgMTQuNjY2NiA4LjAwMDE2IDE0LjY2NjZDNC4zMTgyNiAxNC42NjY2IDEuMzMzNSAxMS42ODE5IDEuMzMzNSA3Ljk5OTk4QzEuMzMzNSA0LjMxODA4IDQuMzE4MjYgMS4zMzMzMSA4LjAwMDE2IDEuMzMzMzFDMTEuNjgyMSAxLjMzMzMxIDE0LjY2NjggNC4zMTgwOCAxNC42NjY4IDcuOTk5OThaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM5OEEyQjNcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzM1MTJfMzI4NjhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvaDM+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhciB0ZXh0LW5vd3JhcCBtZS00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBteS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tYmVnaW46Ok5hdiBncm91cC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hdi1ncm91cCBuYXYtZ3JvdXAtb3V0bGluZSBib3JkZXItMSBidG4tZ3JvdXAgcC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FjdGl2ZVBsYW5CdG4nOiB0eXBlID09PSAnZGFpbHknLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5hY3RpdmVQbGFuQnRuJzogdHlwZSAhPT0gJ2RhaWx5JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rpc2FibGVkJzogZGlzYWJsZURheVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIiAoY2xpY2spPVwic2VsZWN0UGxhbignZGFpbHknKVwiIFthdHRyLmRpc2FibGVkXT1cImRpc2FibGVEYXkgPyB0cnVlIDogbnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSAgcHgtNiBweS0zXCIgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWN0aXZlUGxhbkJ0bic6IHR5cGUgPT09ICd3ZWVrbHknLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5hY3RpdmVQbGFuQnRuJzogdHlwZSAhPT0gJ3dlZWtseScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaXNhYmxlZCc6IGRpc2FibGVXZWVrXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiIChjbGljayk9XCJzZWxlY3RQbGFuKCd3ZWVrbHknKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlV2Vla1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWVrXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBweC02IHB5LTNcIiBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3RpdmVQbGFuQnRuJzogdHlwZSA9PT0gJ21vbnRobHknLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5hY3RpdmVQbGFuQnRuJzogdHlwZSAhPT0gJ21vbnRobHknLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlzYWJsZWQnOiBkaXNhYmxlTW9udGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCIgKGNsaWNrKT1cInNlbGVjdFBsYW4oJ21vbnRobHknKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlTW9udGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9udGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTggbWItNlwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY3VzdG9tQXJyb3cgJiYgIWhlYXRtYXBMb2FkaW5nICYmICFoZWF0bWFwTm9EYXRhXCIgY2xhc3M9XCJtdC0zIGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzY3JvbGxMZWZ0KClcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTUgMThMOSAxMkwxNSA2XCIgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dWwgKm5nSWY9XCJwZXJpb2R6b25lID09PSAxICYmICFjdXN0b21PcHRpb25cIiAjZGF0ZUxpc3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IHBpbGxzIG5hdiBuYXYtc3RyZXRjaCBuYXYtbGluZS10YWJzIG5hdi1saW5lLXRhYnMtMnggYm9yZGVyLXRyYW5zcGFyZW50IGZzLTUgZnctYm9sZGVyIGFsaWduLWl0ZW1zLXN0YXJ0IG1iLTUgbXQtMSBuby13cmFwLWxpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIG5hdi1vdmVyZmxvd1wiICpuZ0Zvcj1cImxldCBkYXRlIG9mIG92ZXJhbGxTdG9yZUNvbmNlbnRyYXRpb25EYXRlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtYnMtdG9nZ2xlPVwicGlsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImRhdGUuem9uZURhdGUgPT09IHNlbGVjdGVkRGF0ZSA/ICdjYXRlZ29yeV9hY3RpdmUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBmbGV4LWNvbHVtbiBjdXJzb3ItcG9pbnRlciBmbGV4LWNlbnRlciBtLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EYXRlQ2hhbmdlKGRhdGUuem9uZURhdGUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYXYtaWNvbiBhY3RpdmVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuYXYtdGV4dCB0ZXh0LWdyYXktNzAwIGZ3LWJvbGRlciBmcy03IGxoLTEgbXgtM1wiPnt7IGRhdGUuem9uZURhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ1bGxldC1jdXN0b20gcG9zaXRpb24tYWJzb2x1dGUgYm90dG9tLTAgaC00cHggYmctcHJpbWFyeVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHVsICpuZ0lmPVwiKHBlcmlvZHpvbmUgPT09IDIgfHwgcGVyaW9kem9uZSA9PT0gMykgJiYgIWN1c3RvbU9wdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBwaWxscyBuYXYgbmF2LXN0cmV0Y2ggbmF2LWxpbmUtdGFicyBuYXYtbGluZS10YWJzLTJ4IGJvcmRlci10cmFuc3BhcmVudCBmcy01IGZ3LWJvbGRlciBhbGlnbi1pdGVtcy1zdGFydCBtYi01IG10LTEgcC0zIG5vLXdyYXAtbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gbmF2LW92ZXJmbG93XCIgKm5nRm9yPVwibGV0IGRhdGUgb2Ygb3ZlcmFsbFN0b3JlQ29uY2VudHJhdGlvbkRhdGVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1icy10b2dnbGU9XCJwaWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZGF0ZS56b25lRGF0ZSA9PT0gc2VsZWN0ZWREYXRlID8gJ2NhdGVnb3J5X2FjdGl2ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibmF2LWxpbmsgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGZsZXgtY29sdW1uIGN1cnNvci1wb2ludGVyIGZsZXgtY2VudGVyIHctOTBweCBteC0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGF0ZUNoYW5nZShkYXRlLnpvbmVEYXRlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LWljb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuYXYtdGV4dCB0ZXh0LWdyYXktNzAwIGZ3LWJvbGRlciBmcy03IGxoLTEgbXgtM1wiPnt7IGRhdGUuem9uZURhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ1bGxldC1jdXN0b20gcG9zaXRpb24tYWJzb2x1dGUgYm90dG9tLTAgaC00cHggYmctcHJpbWFyeVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHVsICpuZ0lmPVwiY3VzdG9tT3B0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IHBpbGxzIG5hdiBuYXYtc3RyZXRjaCBuYXYtbGluZS10YWJzIG5hdi1saW5lLXRhYnMtMnggYm9yZGVyLXRyYW5zcGFyZW50IGZzLTUgZnctYm9sZGVyIGFsaWduLWl0ZW1zLXN0YXJ0IG1iLTUgbXQtMSBwLTMgbm8td3JhcC1saXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbSBuYXYtb3ZlcmZsb3dcIiAqbmdGb3I9XCJsZXQgZGF0ZSBvZiBvdmVyYWxsU3RvcmVDb25jZW50cmF0aW9uRGF0ZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWJzLXRvZ2dsZT1cInBpbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJkYXRlLnpvbmVEYXRlID09PSBzZWxlY3RlZERhdGUgPyAnY2F0ZWdvcnlfYWN0aXZlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJuYXYtbGluayBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gZmxleC1jb2x1bW4gY3Vyc29yLXBvaW50ZXIgZmxleC1jZW50ZXIgdy05MHB4IG14LTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EYXRlQ2hhbmdlKGRhdGUuem9uZURhdGUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYXYtaWNvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5hdi10ZXh0IHRleHQtZ3JheS03MDAgZnctYm9sZGVyIGZzLTcgbGgtMSBteC0zXCI+e3sgZGF0ZS56b25lRGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnVsbGV0LWN1c3RvbSBwb3NpdGlvbi1hYnNvbHV0ZSBib3R0b20tMCBoLTRweCBiZy1wcmltYXJ5XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY3VzdG9tQXJyb3cgJiYgIWhlYXRtYXBMb2FkaW5nICYmICFoZWF0bWFwTm9EYXRhXCIgY2xhc3M9XCJtdC0zIGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzY3JvbGxSaWdodCgpXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkgMThMMTUgMTJMOSA2XCIgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaGVhdG1hcExvYWRpbmcgJiYgIWhlYXRtYXBOb0RhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nYi1jYXJvdXNlbCAjY2Fyb3VzZWwgW2ludGVydmFsXT1cIjBcIiBbcGF1c2VPbkhvdmVyXT1cInRydWVcIiAoc2xpZGUpPVwib25TbGlkZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJzZWxlY3RlZERhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGltYWdlIG9mIG92ZXJhbGxTdG9yZURhdGE/LkltYWdlVVJMcztsZXQgaT1pbmRleDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiU2xpZGUgW2lkXT1cIiduZ2Itc2xpZGUtJysgaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgaW1hZ2UtY29udGFpbmVyIGN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIChjbGljayk9XCJjb25jZW50cmF0aW9uSGVhdG1hcChvdmVyYWxsU3RvcmVEYXRhPy5JbWFnZVVSTHMpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImltYWdlLlVSTFwiIFthbHRdPVwiaW1hZ2Uuc3RyZWFtTmFtZVwiIGNsYXNzPVwiY2FyZGltZ1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBbaHJlZl09XCJpbWFnZS5VUkxcIiBkb3dubG9hZD48c3ZnIGlkPVwiZG93bmxvYWQtaWNvblwiIHdpZHRoPVwiNDRcIiBoZWlnaHQ9XCI0NFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNDQgNDRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb24tb3ZlcmxheVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBmaWx0ZXI9XCJ1cmwoI2ZpbHRlcjBfZF8zODIyXzE5NDc5KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjJcIiB5PVwiMVwiIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIHJ4PVwiOFwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMi41XCIgeT1cIjEuNVwiIHdpZHRoPVwiMzlcIiBoZWlnaHQ9XCIzOVwiIHJ4PVwiNy41XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjRDBENUREXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0yOS41IDIzLjVWMjYuODMzM0MyOS41IDI3LjI3NTQgMjkuMzI0NCAyNy42OTkzIDI5LjAxMTggMjguMDExOEMyOC42OTkzIDI4LjMyNDQgMjguMjc1NCAyOC41IDI3LjgzMzMgMjguNUgxNi4xNjY3QzE1LjcyNDYgMjguNSAxNS4zMDA3IDI4LjMyNDQgMTQuOTg4MiAyOC4wMTE4QzE0LjY3NTYgMjcuNjk5MyAxNC41IDI3LjI3NTQgMTQuNSAyNi44MzMzVjIzLjVNMTcuODMzMyAxOS4zMzMzTDIyIDIzLjVNMjIgMjMuNUwyNi4xNjY3IDE5LjMzMzNNMjIgMjMuNVYxMy41XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWx0ZXIgaWQ9XCJmaWx0ZXIwX2RfMzgyMl8xOTQ3OVwiIHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjQ0XCIgaGVpZ2h0PVwiNDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclVuaXRzPVwidXNlclNwYWNlT25Vc2VcIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9XCJzUkdCXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT1cIjBcIiByZXN1bHQ9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IGluPVwiU291cmNlQWxwaGFcIiB0eXBlPVwibWF0cml4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPVwiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9XCJoYXJkQWxwaGFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZU9mZnNldCBkeT1cIjFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249XCIxXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCB0eXBlPVwibWF0cml4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPVwiMCAwIDAgMCAwLjA2Mjc0NTEgMCAwIDAgMCAwLjA5NDExNzYgMCAwIDAgMCAwLjE1Njg2MyAwIDAgMCAwLjA1IDBcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUJsZW5kIG1vZGU9XCJub3JtYWxcIiBpbjI9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfMzgyMl8xOTQ3OVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluPVwiU291cmNlR3JhcGhpY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluMj1cImVmZmVjdDFfZHJvcFNoYWRvd18zODIyXzE5NDc5XCIgcmVzdWx0PVwic2hhcGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9maWx0ZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ2ItY2Fyb3VzZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYXRtYXBMb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbG9hZGVyIGNvbmNoZWF0bWFwIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhdG1hcE5vRGF0YSAmJiAhaGVhdG1hcExvYWRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMiBteS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNhcmQtYm9keSBjb25jaGVhdG1hcCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1zcmNcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9Ob2RhdGExLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9kYXRhbWFpbnRleHQgbXQtM1wiPk5vIGRhdGEgZm91bmQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vZGF0YXN1YnRleHRcIj5UaGVyZSBpcyBubyByZXN1bHQgZm9yIE92ZXJhbGwgU3RvcmUgQ29uY2VudHJhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGVhdG1hcDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9keSBtZS00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdC0xMCBtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1zdGFja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZC1mbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3ZlcmFsbHRleHQgbWUtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG90YWwgRm9vdGZhbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGFibGUtdGl0bGVcIj57e292ZXJhbGxTdG9yZURhdGE/LnRvdGFsRm9vdGZhbGw/LnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMCB9KSB8fCAnLS0nIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyZGFzaGVkIG15LTRcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1zdGFja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZC1mbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3ZlcmFsbHRleHQgbWUtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uY2VudHJhdGlvbiAlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwidGFibGUtdGl0bGVcIj57eyByb3VuZG9mKG92ZXJhbGxTdG9yZURhdGE/LmNvbmNlbnRyYXRpb25SYXRlKSB8fCAgJzAnIH19ICU8L3NwYW4+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhYmxlLXRpdGxlXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJhbGxTdG9yZURhdGE/LmNvbmNlbnRyYXRpb25SYXRlPy50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDAgfSkgfHwgJy0tJyB9fSU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJoZWFkZXJEYXRhPy5jbGllbnQgIT09ICc0NTknXCIgY2xhc3M9XCJib3JkZXJkYXNoZWQgbXktNFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImhlYWRlckRhdGE/LmNsaWVudCAhPT0gJzQ1OSdcIiBjbGFzcz1cImQtZmxleCBmbGV4LXN0YWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkLWZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdmVyYWxsdGV4dCBtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCb3VuY2VkIEZvb3RmYWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhYmxlLXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvdmVyYWxsU3RvcmVEYXRhPy5ib3VuY2VkQ291bnQ/LnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMCB9KSB8fCAnLS0nIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaGVhZGVyRGF0YT8uY2xpZW50ICE9PSAnNDU5J1wiIGNsYXNzPVwiYm9yZGVyZGFzaGVkIG15LTRcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJoZWFkZXJEYXRhPy5jbGllbnQgIT09ICc0NTknXCIgY2xhc3M9XCJkLWZsZXggZmxleC1zdGFja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZC1mbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3ZlcmFsbHRleHQgbWUtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5nYWdlcnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGFibGUtdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG92ZXJhbGxTdG9yZURhdGE/LmVuZ2FnZXJzQ291bnQ/LnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMCB9KSB8fCAnLS0nIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlcmRhc2hlZCBteS00XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtc3RhY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImQtZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm92ZXJhbGx0ZXh0IG1lLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF2Zy4gRHdlbGwgVGltZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWJsZS10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3ZlcmFsbFN0b3JlRGF0YT8uYXZnRHdlbGxUaW1lPy50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDAgfSkgfHwgJy0tJyB9fSBtaW5zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInN0b3JlSWRhcnJheVswXSAhPT0nNDU5LTInICYmIHN0b3JlSWRhcnJheVswXSAhPT0nNDU5LTQnXCIgY2xhc3M9XCJib3JkZXJkYXNoZWQgbXktNFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInN0b3JlSWRhcnJheVswXSAhPT0nNDU5LTInICYmIHN0b3JlSWRhcnJheVswXSAhPT0nNDU5LTQnXCIgY2xhc3M9XCJkLWZsZXggZmxleC1zdGFja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZC1mbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3ZlcmFsbHRleHQgbWUtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWdlIFJhbmdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhYmxlLXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvdmVyYWxsU3RvcmVEYXRhPy5hZ2VSYW5nZT8udG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywgeyBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIH0pIHx8ICctLScgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic3RvcmVJZGFycmF5WzBdICE9PSc0NTktMicgJiYgc3RvcmVJZGFycmF5WzBdICE9PSc0NTktNCdcIiBjbGFzcz1cImJvcmRlcmRhc2hlZCBteS00XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic3RvcmVJZGFycmF5WzBdICE9PSc0NTktMicgJiYgc3RvcmVJZGFycmF5WzBdICE9PSc0NTktNCdcIiBjbGFzcz1cImQtZmxleCBmbGV4LXN0YWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkLWZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdmVyYWxsdGV4dCBtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWxlIFJhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGFibGUtdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG92ZXJhbGxTdG9yZURhdGE/Lm1hbGVSYXRlPy50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7IG1pbmltdW1GcmFjdGlvbkRpZ2l0czpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgfSkgfHwgJy0tJyB9fSVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic3RvcmVJZGFycmF5WzBdICE9PSc0NTktMicgJiYgc3RvcmVJZGFycmF5WzBdICE9PSc0NTktNCdcIiBjbGFzcz1cImJvcmRlcmRhc2hlZCBteS00XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic3RvcmVJZGFycmF5WzBdICE9PSc0NTktMicgJiYgc3RvcmVJZGFycmF5WzBdICE9PSc0NTktNCdcIiBjbGFzcz1cImQtZmxleCBmbGV4LXN0YWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkLWZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdmVyYWxsdGV4dCBtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGZW1hbGUgUmF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWJsZS10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3ZlcmFsbFN0b3JlRGF0YT8uZmVtYWxlUmF0ZT8udG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAwIH0pIHx8ICctLScgfX0lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwiaGVhZGVyRGF0YT8uY2xpZW50ID09ICc0NTknXCIgY2xhc3M9XCJib3JkZXJkYXNoZWQgbXktNFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImhlYWRlckRhdGE/LmNsaWVudCA9PSAnNDU5J1wiIGNsYXNzPVwiZC1mbGV4IGZsZXgtc3RhY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImQtZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm92ZXJhbGx0ZXh0IG1lLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyb2xsZXlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGFibGUtdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG92ZXJhbGxTdG9yZURhdGE/LnRyb2xsZXlSYXRlPy50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7IG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMCB9KSB8fCAgJy0tJyB9fSVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwiaGVhZGVyRGF0YT8uY2xpZW50ID09ICc0NTknXCIgY2xhc3M9XCJib3JkZXJkYXNoZWQgbXktNFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImhlYWRlckRhdGE/LmNsaWVudCA9PSAnNDU5J1wiIGNsYXNzPVwiZC1mbGV4IGZsZXgtc3RhY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImQtZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm92ZXJhbGx0ZXh0IG1lLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2tldFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWJsZS10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3ZlcmFsbFN0b3JlRGF0YT8uYmFza2V0UmF0ZT8udG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywgeyBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDAgfSkgfHwgICctLScgfX0lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3RlciBtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwib3Blbk1vZGVsKClcIiBjbGFzcz1cImJ0biBidG4tbGlnaHQtcHJpbWFyeSBtYi0yIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8xNzEyNl83MzM2NylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTQuMTY3OTcgMS42NjY1TDQuMzI2MyAyLjQ0OTg0QzQuNDM5NzcgMy4wMTIzNCA0LjY5NjUzIDMuNTM2MDMgNS4wNzE3MyAzLjk3MDIxQzUuNDQ2OTIgNC40MDQzOSA1LjkyNzg2IDQuNzM0MzUgNi40Njc5NyA0LjkyODE3TDYuNjY3OTcgNC45OTk4NEw2LjQ2Nzk3IDUuMDcxNUM1LjkyNzg2IDUuMjY1MzIgNS40NDY5MiA1LjU5NTI5IDUuMDcxNzMgNi4wMjk0N0M0LjY5NjUzIDYuNDYzNjUgNC40Mzk3NyA2Ljk4NzMzIDQuMzI2MyA3LjU0OTg0TDQuMTY3OTcgOC4zMzMxN0w0LjAwOTY0IDcuNTQ5ODRDMy44OTYxNyA2Ljk4NzMzIDMuNjM5NDEgNi40NjM2NSAzLjI2NDIxIDYuMDI5NDdDMi44ODkwMSA1LjU5NTI5IDIuNDA4MDggNS4yNjUzMiAxLjg2Nzk3IDUuMDcxNUwxLjY2Nzk3IDQuOTk5ODRMMS44Njc5NyA0LjkyODE3QzIuNDA4MDggNC43MzQzNSAyLjg4OTAxIDQuNDA0MzkgMy4yNjQyMSAzLjk3MDIxQzMuNjM5NDEgMy41MzYwMyAzLjg5NjE3IDMuMDEyMzQgNC4wMDk2NCAyLjQ0OTg0TDQuMTY3OTcgMS42NjY1Wk02LjY2Nzk3IDEzLjMzMzJMNi44NTk2MyAxNC4zOTY1QzYuOTA5NCAxNC42NzM5IDcuMDI4NjkgMTQuOTM0MSA3LjIwNjM0IDE1LjE1MjhDNy4zODM5OSAxNS4zNzE2IDcuNjE0MjEgMTUuNTQxNyA3Ljg3NTQ3IDE1LjY0NzNMOC4zMzQ2NCAxNS44MzMyTDcuODc1NDcgMTYuMDE5QzcuNjE0MTYgMTYuMTI0NCA3LjM4Mzg0IDE2LjI5NDQgNy4yMDYwNSAxNi41MTNDNy4wMjgyNSAxNi43MzE2IDYuOTA4NzggMTYuOTkxNyA2Ljg1ODggMTcuMjY5TDYuNjY3OTcgMTguMzMzMkw2LjQ3NjMgMTcuMjY5OEM2LjQyNjUzIDE2Ljk5MjUgNi4zMDcyNSAxNi43MzIyIDYuMTI5NiAxNi41MTM1QzUuOTUxOTQgMTYuMjk0NyA1LjcyMTczIDE2LjEyNDYgNS40NjA0NyAxNi4wMTlMNS4wMDEzIDE1LjgzMzJMNS40NjA0NyAxNS42NDczQzUuNzIxNzggMTUuNTQxOSA1Ljk1MjEgMTUuMzcyIDYuMTI5ODkgMTUuMTUzNEM2LjMwNzY5IDE0LjkzNDggNi40MjcxNiAxNC42NzQ2IDYuNDc3MTQgMTQuMzk3M0w2LjY2Nzk3IDEzLjMzMzJaTTEzLjMzNDYgMi40OTk4NEwxMy43OTggNC43MTE1QzE0LjAzNDEgNS44MzkwNyAxNC41NTg0IDYuODg2MjEgMTUuMzE5OCA3Ljc1MDgxQzE2LjA4MTEgOC42MTU0MSAxNy4wNTM1IDkuMjY3OTYgMTguMTQyMSA5LjY0NDg0TDE5LjE2OCA5Ljk5OTg0TDE4LjE0MjEgMTAuMzU0OEMxNy4wNTM1IDEwLjczMTcgMTYuMDgxMSAxMS4zODQzIDE1LjMxOTggMTIuMjQ4OUMxNC41NTg0IDEzLjExMzUgMTQuMDM0MSAxNC4xNjA2IDEzLjc5OCAxNS4yODgyTDEzLjMzNDYgMTcuNDk5OEwxMi44NzEzIDE1LjI4ODJDMTIuNjM1MiAxNC4xNjA2IDEyLjExMDkgMTMuMTEzNSAxMS4zNDk1IDEyLjI0ODlDMTAuNTg4MiAxMS4zODQzIDkuNjE1NzggMTAuNzMxNyA4LjUyNzE0IDEwLjM1NDhMNy41MDEzIDkuOTk5ODRMOC41MjcxNCA5LjY0NDg0QzkuNjE1NzggOS4yNjc5NiAxMC41ODgyIDguNjE1NDEgMTEuMzQ5NSA3Ljc1MDgxQzEyLjExMDkgNi44ODYyMSAxMi42MzUyIDUuODM5MDcgMTIuODcxMyA0LjcxMTVMMTMuMzM0NiAyLjQ5OTg0WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMDlCRjNcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMTcxMjZfNzMzNjdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48c3Bhbj4gVmlldyBBSSBJbnNpZ2h0czwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcblxyXG48bmctdGVtcGxhdGUgI3pvb21Qb3B1cCBsZXQtbW9kZWw+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYWktbW9kYWwgcC00XCI+XHJcblxyXG4gICAgICAgIDwhLS0gSEVBREVSIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1pY29uXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCI1NlwiIGhlaWdodD1cIjU2XCIgdmlld0JveD1cIjAgMCA1NiA1NlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiByeD1cIjI0XCIgZmlsbD1cIiNEQUYxRkZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIHN0cm9rZT1cIiNFQUY4RkZcIiBzdHJva2Utd2lkdGg9XCI4XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMjEgMThMMjEuMTkgMTguOTRDMjEuMzI2MiAxOS42MTUgMjEuNjM0MyAyMC4yNDM0IDIyLjA4NDUgMjAuNzY0NEMyMi41MzQ3IDIxLjI4NTUgMjMuMTExOSAyMS42ODE0IDIzLjc2IDIxLjkxNEwyNCAyMkwyMy43NiAyMi4wODZDMjMuMTExOSAyMi4zMTg2IDIyLjUzNDcgMjIuNzE0NSAyMi4wODQ1IDIzLjIzNTZDMjEuNjM0MyAyMy43NTY2IDIxLjMyNjIgMjQuMzg1IDIxLjE5IDI1LjA2TDIxIDI2TDIwLjgxIDI1LjA2QzIwLjY3MzggMjQuMzg1IDIwLjM2NTcgMjMuNzU2NiAxOS45MTU1IDIzLjIzNTZDMTkuNDY1MyAyMi43MTQ1IDE4Ljg4ODEgMjIuMzE4NiAxOC4yNCAyMi4wODZMMTggMjJMMTguMjQgMjEuOTE0QzE4Ljg4ODEgMjEuNjgxNCAxOS40NjUzIDIxLjI4NTUgMTkuOTE1NSAyMC43NjQ0QzIwLjM2NTcgMjAuMjQzNCAyMC42NzM4IDE5LjYxNSAyMC44MSAxOC45NEwyMSAxOFpNMjQgMzJMMjQuMjMgMzMuMjc2QzI0LjI4OTcgMzMuNjA4OCAyNC40MzI5IDMzLjkyMTEgMjQuNjQ2IDM0LjE4MzZDMjQuODU5MiAzNC40NDYxIDI1LjEzNTUgMzQuNjUwMyAyNS40NDkgMzQuNzc3TDI2IDM1TDI1LjQ0OSAzNS4yMjNDMjUuMTM1NCAzNS4zNDk1IDI0Ljg1OSAzNS41NTM1IDI0LjY0NTcgMzUuODE1OEMyNC40MzIzIDM2LjA3ODEgMjQuMjg5IDM2LjM5MDIgMjQuMjI5IDM2LjcyM0wyNCAzOEwyMy43NyAzNi43MjRDMjMuNzEwMyAzNi4zOTEyIDIzLjU2NzEgMzYuMDc4OSAyMy4zNTQgMzUuODE2NEMyMy4xNDA4IDM1LjU1MzkgMjIuODY0NSAzNS4zNDk3IDIyLjU1MSAzNS4yMjNMMjIgMzVMMjIuNTUxIDM0Ljc3N0MyMi44NjQ2IDM0LjY1MDUgMjMuMTQxIDM0LjQ0NjUgMjMuMzU0MyAzNC4xODQyQzIzLjU2NzcgMzMuOTIxOSAyMy43MTEgMzMuNjA5OCAyMy43NzEgMzMuMjc3TDI0IDMyWk0zMiAxOUwzMi41NTYgMjEuNjU0QzMyLjgzOTQgMjMuMDA3MSAzMy40Njg1IDI0LjI2MzYgMzQuMzgyMSAyNS4zMDEyQzM1LjI5NTggMjYuMzM4NyAzNi40NjI2IDI3LjEyMTcgMzcuNzY5IDI3LjU3NEwzOSAyOEwzNy43NjkgMjguNDI2QzM2LjQ2MjYgMjguODc4MyAzNS4yOTU4IDI5LjY2MTMgMzQuMzgyMSAzMC42OTg4QzMzLjQ2ODUgMzEuNzM2NCAzMi44Mzk0IDMyLjk5MjkgMzIuNTU2IDM0LjM0NkwzMiAzN0wzMS40NDQgMzQuMzQ2QzMxLjE2MDYgMzIuOTkyOSAzMC41MzE1IDMxLjczNjQgMjkuNjE3OSAzMC42OTg4QzI4LjcwNDIgMjkuNjYxMyAyNy41Mzc0IDI4Ljg3ODMgMjYuMjMxIDI4LjQyNkwyNSAyOEwyNi4yMzEgMjcuNTc0QzI3LjUzNzQgMjcuMTIxNyAyOC43MDQyIDI2LjMzODcgMjkuNjE3OSAyNS4zMDEyQzMwLjUzMTUgMjQuMjYzNiAzMS4xNjA2IDIzLjAwNzEgMzEuNDQ0IDIxLjY1NEwzMiAxOVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAwOUJGM1wiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtYi0wIGZ3LXNlbWlib2xkXCI+QUkgSW5zaWdodHMgZm9yICZsdDtPdmVyYWxsIFpvbmVzJmd0OzwvaDU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb25cIiAoY2xpY2spPVwibW9kZWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgICAgICAgICDinJVcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gTElTVCAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwidmlld0ltYWdlPy5tb2JpbGV1c2FnZWRldGVjdGlvbiB8fCB2aWV3SW1hZ2U/LnF1ZXVlTWFuYWdlbWVudCB8fCB2aWV3SW1hZ2U/LmN1c3RvbWVydW5hdHRlbmRlZCB8fCB2aWV3SW1hZ2U/LnN0YWZmbGVmdGludGhlbWlkZGxlXCIgY2xhc3M9XCJhaS1jYXJkXCI+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidmlld0ltYWdlPy5tb2JpbGV1c2FnZWRldGVjdGlvblwiIGNsYXNzPVwiYWktcm93IHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZnQgY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJvdy1pY29uXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIzMlwiIGhlaWdodD1cIjMyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMzIgMzJcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE2IDFDNy43MTYgMSAxIDcuNzE2IDEgMTZDMSAyNC4yODQ1IDcuNzE2IDMxIDE2IDMxQzI0LjI4NCAzMSAzMSAyNC4yODQgMzEgMTZDMzEgNy43MTYgMjQuMjg0IDEgMTYgMVpNMjggMTZDMjguMDAyOSAxOC42NjQ4IDI3LjExNTEgMjEuMjU0MiAyNS40Nzc1IDIzLjM1NjVMMjAuODA0NSAxOC42ODM1VjkuMzg3NUMyMC44MDQ1IDguMzQ0IDE5Ljk0NCA3LjQ5ODUgMTguODgyNSA3LjQ5ODVIMTMuMTE2NUMxMi4xNTQ1IDcuNDk4NSAxMS4zNjQ1IDguMTk1NSAxMS4yMjQgOS4xMDI1TDguNjQzNSA2LjUyMjVDMTAuNzQ1OCA0Ljg4NDk0IDEzLjMzNTIgMy45OTcwNyAxNiA0QzIyLjYyNyA0IDI4IDkuMzcyNSAyOCAxNlpNMTIuMTU2IDIxLjQ3OTVWMTQuMjc3TDE5LjM1NzUgMjEuNDc5NUgxMi4xNTZaTTE2LjU3NiAyMi45ODQ1QzE2LjU3NiAyMy4yOTcgMTYuMzE4NSAyMy41NTEgMTYgMjMuNTUxQzE1LjY4MTUgMjMuNTUxIDE1LjQyMzUgMjMuMjk3IDE1LjQyMzUgMjIuOTg0NUMxNS40MjM1IDIyLjY3MiAxNS42ODIgMjIuNDE4IDE2IDIyLjQxOEMxNi4zMTg1IDIyLjQxOCAxNi41NzYgMjIuNjcyIDE2LjU3NiAyMi45ODQ1Wk0xMi4xNTYgMTAuMDM0NVY5LjM4NzVIMTkuODQ0VjE3LjcyMjVMMTIuMTU2IDEwLjAzNDVaTTE0LjgxOTUgOC40MjQ1QzE0LjgxOTUgOC4yOTQgMTQuOTI3IDguMTg4IDE1LjA1OTUgOC4xODhIMTYuOTM5NUMxNy4wNzI1IDguMTg4IDE3LjE4MDUgOC4yOTQgMTcuMTgwNSA4LjQyNDVDMTcuMTgwNSA4LjU1NSAxNy4wNzIgOC42NjEgMTYuOTM5NSA4LjY2MUgxNS4wNTk1QzE0Ljk5NjQgOC42NjEwMSAxNC45MzU5IDguNjM2MiAxNC44OTEgOC41OTE5NUMxNC44NDYxIDguNTQ3NjkgMTQuODIwNCA4LjQ4NzU0IDE0LjgxOTUgOC40MjQ1Wk00IDE2QzMuOTk3MTggMTMuMzM1MyA0Ljg4NTA1IDEwLjc0NjIgNi41MjI1IDguNjQ0TDExLjE5NDUgMTMuMzE2NVYyMi42MTI1QzExLjE5NDUgMjMuNjU2NSAxMi4wNTUgMjQuNTAyIDEzLjExNjUgMjQuNTAySDE4Ljg4MjVDMTkuODQ0NSAyNC41MDIgMjAuNjM0NSAyMy44MDQ1IDIwLjc3NSAyMi44OTc1TDIzLjM1NSAyNS40Nzc1QzIxLjI1MzEgMjcuMTE0NyAxOC42NjQzIDI4LjAwMjYgMTYgMjhDOS4zNzI1IDI4IDQgMjIuNjI4IDQgMTZaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzAwQTNGRlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCI+TW9iaWxlIERldGVjdGlvbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgbXQtMlwiPnt7dmlld0ltYWdlPy5tb2JpbGV1c2FnZWRldGVjdGlvbiA/PyAnLS0nfX0gRGV0ZWN0aW9uczwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IHRleHQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cImZsYWdzVmlldygpXCIgY2xhc3M9XCJ2aWV3LWxpbmsgY3Vyc29yLXBvaW50ZXJcIj5WaWV3IEluIERldGFpbCA8c3BhbiBjbGFzcz1cIm1zLTJcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxN1wiIGhlaWdodD1cIjE3XCIgdmlld0JveD1cIjAgMCAxNyAxN1wiIGZpbGw9XCJub25lXCI+XHJcbjxwYXRoIGQ9XCJNMTMuMzM1OSA5LjE2ODI5VjE0LjE2ODNDMTMuMzM1OSAxNC42MTAzIDEzLjE2MDMgMTUuMDM0MiAxMi44NDc4IDE1LjM0NjhDMTIuNTM1MiAxNS42NTk0IDEyLjExMTMgMTUuODM1IDExLjY2OTMgMTUuODM1SDIuNTAyNkMyLjA2MDU4IDE1LjgzNSAxLjYzNjY1IDE1LjY1OTQgMS4zMjQwOSAxNS4zNDY4QzEuMDExNTMgMTUuMDM0MiAwLjgzNTkzOCAxNC42MTAzIDAuODM1OTM4IDE0LjE2ODNWNS4wMDE2M0MwLjgzNTkzOCA0LjU1OTYgMS4wMTE1MyA0LjEzNTY4IDEuMzI0MDkgMy44MjMxMkMxLjYzNjY1IDMuNTEwNTYgMi4wNjA1OCAzLjMzNDk2IDIuNTAyNiAzLjMzNDk2SDcuNTAyNk0xMC44MzU5IDAuODM0OTYxSDE1LjgzNTlNMTUuODM1OSAwLjgzNDk2MVY1LjgzNDk2TTE1LjgzNTkgMC44MzQ5NjFMNi42NjkyNyAxMC4wMDE2XCIgc3Ryb2tlPVwiIzAwOUJGM1wiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbjwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInZpZXdJbWFnZT8ucXVldWVNYW5hZ2VtZW50XCIgY2xhc3M9XCJhaS1yb3cgcm93IFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZnQgY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJvdy1pY29uXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNlwiIGhlaWdodD1cIjI2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjYgMjZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTYuMjg1NzEgMS43MTQyOUM1LjYwMzczIDEuNzE0MjkgNC45NDk2OCAxLjk4NTIgNC40Njc0NCAyLjQ2NzQ0QzMuOTg1MiAyLjk0OTY4IDMuNzE0MjkgMy42MDM3MyAzLjcxNDI5IDQuMjg1NzJDMy43MTQyOSA0Ljk2NzcgMy45ODUyIDUuNjIxNzUgNC40Njc0NCA2LjEwMzk5QzQuOTQ5NjggNi41ODYyMyA1LjYwMzczIDYuODU3MTQgNi4yODU3MSA2Ljg1NzE0QzYuOTY3NyA2Ljg1NzE0IDcuNjIxNzUgNi41ODYyMyA4LjEwMzk5IDYuMTAzOTlDOC41ODYyMyA1LjYyMTc1IDguODU3MTQgNC45Njc3IDguODU3MTQgNC4yODU3MkM4Ljg1NzE0IDMuNjAzNzMgOC41ODYyMyAyLjk0OTY4IDguMTAzOTkgMi40Njc0NEM3LjYyMTc1IDEuOTg1MiA2Ljk2NzcgMS43MTQyOSA2LjI4NTcxIDEuNzE0MjlaTTIgNC4yODU3MkMyIDMuMTQ5MDcgMi40NTE1MyAyLjA1ODk4IDMuMjU1MjYgMS4yNTUyNkM0LjA1ODk4IDAuNDUxNTMgNS4xNDkwNyA0LjEyNTg0ZS0wNyA2LjI4NTcxIDQuMTI1ODRlLTA3QzcuNDIyMzYgNC4xMjU4NGUtMDcgOC41MTI0NCAwLjQ1MTUzIDkuMzE2MTcgMS4yNTUyNkMxMC4xMTk5IDIuMDU4OTggMTAuNTcxNCAzLjE0OTA3IDEwLjU3MTQgNC4yODU3MkMxMC41NzE0IDUuNDIyMzYgMTAuMTE5OSA2LjUxMjQ1IDkuMzE2MTcgNy4zMTYxN0M4LjUxMjQ0IDguMTE5OSA3LjQyMjM2IDguNTcxNDMgNi4yODU3MSA4LjU3MTQzQzUuMTQ5MDcgOC41NzE0MyA0LjA1ODk4IDguMTE5OSAzLjI1NTI2IDcuMzE2MTdDMi40NTE1MyA2LjUxMjQ1IDIgNS40MjIzNiAyIDQuMjg1NzJaTTAgMTIuODU3MUMwIDEyLjE3NTIgMC4yNzA5MTggMTEuNTIxMSAwLjc1MzE1NCAxMS4wMzg5QzEuMjM1MzkgMTAuNTU2NiAxLjg4OTQ0IDEwLjI4NTcgMi41NzE0MyAxMC4yODU3SDEwQzEwLjY4MiAxMC4yODU3IDExLjMzNiAxMC41NTY2IDExLjgxODMgMTEuMDM4OUMxMi4zMDA1IDExLjUyMTEgMTIuNTcxNCAxMi4xNzUyIDEyLjU3MTQgMTIuODU3MVYxOC44NTcxQzEyLjU3MTQgMjAuNTI0MiAxMS45MDkyIDIyLjEyMyAxMC43MzA0IDIzLjMwMThDOS41NTE1OSAyNC40ODA2IDcuOTUyNzkgMjUuMTQyOSA2LjI4NTcxIDI1LjE0MjlDNC42MTg2NCAyNS4xNDI5IDMuMDE5ODQgMjQuNDgwNiAxLjg0MTA0IDIzLjMwMThDMC42NjIyNDMgMjIuMTIzIDAgMjAuNTI0MiAwIDE4Ljg1NzFWMTIuODU3MVpNMi41NzE0MyAxMkMyLjM0NDEgMTIgMi4xMjYwOCAxMi4wOTAzIDEuOTY1MzQgMTIuMjUxMUMxLjgwNDU5IDEyLjQxMTggMS43MTQyOSAxMi42Mjk4IDEuNzE0MjkgMTIuODU3MVYxOC44NTcxQzEuNzE0MjkgMjAuMDY5NiAyLjE5NTkyIDIxLjIzMjMgMy4wNTMyMyAyMi4wODk2QzMuOTEwNTQgMjIuOTQ2OSA1LjA3MzMgMjMuNDI4NiA2LjI4NTcxIDIzLjQyODZDNy40OTgxMyAyMy40Mjg2IDguNjYwODkgMjIuOTQ2OSA5LjUxODIgMjIuMDg5NkMxMC4zNzU1IDIxLjIzMjMgMTAuODU3MSAyMC4wNjk2IDEwLjg1NzEgMTguODU3MVYxMi44NTcxQzEwLjg1NzEgMTIuNjI5OCAxMC43NjY4IDEyLjQxMTggMTAuNjA2MSAxMi4yNTExQzEwLjQ0NTMgMTIuMDkwMyAxMC4yMjczIDEyIDEwIDEySDIuNTcxNDNaTTEyLjU3MjYgOC41NzE0M0MxMS43NzM2IDguNTczMDMgMTAuOTkwMyA4LjM1MDA3IDEwLjMxMiA3LjkyOEMxMC42OTYgNy41MDUxNCAxMS4wMTM3IDcuMDE5NDMgMTEuMjQ5MSA2LjQ5MDI5QzExLjYzOTMgNi43MjQzNSAxMi4wODQ3IDYuODUwNjcgMTIuNTM5NyA2Ljg1NjM3QzEyLjk5NDYgNi44NjIwNyAxMy40NDMgNi43NDY5NCAxMy44Mzg5IDYuNTIyNzJDMTQuMjM0OSA2LjI5ODUxIDE0LjU2NDIgNS45NzMyNSAxNC43OTM0IDUuNTgwMTRDMTUuMDIyNiA1LjE4NzA0IDE1LjE0MzMgNC43NDAxNiAxNS4xNDMzIDQuMjg1MTRDMTUuMTQzMyAzLjgzMDEyIDE1LjAyMjYgMy4zODMyNSAxNC43OTM0IDIuOTkwMTRDMTQuNTY0MiAyLjU5NzA0IDE0LjIzNDkgMi4yNzE3OCAxMy44Mzg5IDIuMDQ3NTZDMTMuNDQzIDEuODIzMzUgMTIuOTk0NiAxLjcwODIyIDEyLjUzOTcgMS43MTM5MkMxMi4wODQ3IDEuNzE5NjEgMTEuNjM5MyAxLjg0NTk0IDExLjI0OTEgMi4wOEMxMS4wMTQgMS41NTQ5NyAxMC42OTc4IDEuMDcwMTkgMTAuMzEyIDAuNjQzNDI5QzEwLjg3NTQgMC4yOTQwMzggMTEuNTEyMyAwLjA4MDEzMjUgMTIuMTcyNCAwLjAxODUzNzFDMTIuODMyNSAtMC4wNDMwNTgzIDEzLjQ5NzkgMC4wNDkzMzU5IDE0LjExNjMgMC4yODg0NTNDMTQuNzM0NiAwLjUyNzU2OSAxNS4yODkxIDAuOTA2ODg4IDE1LjczNiAxLjM5NjU3QzE2LjE4MyAxLjg4NjI2IDE2LjUxMDIgMi40NzI5NiAxNi42OTIgMy4xMTA1NEMxNi44NzM4IDMuNzQ4MTEgMTYuOTA1MiA0LjQxOTE3IDE2Ljc4MzcgNS4wNzA5M0MxNi42NjIzIDUuNzIyNjkgMTYuMzkxMiA2LjMzNzM4IDE1Ljk5MiA2Ljg2NjY2QzE1LjU5MjcgNy4zOTU5NCAxNS4wNzYxIDcuODI1MzggMTQuNDgyOCA4LjEyMTE5QzEzLjg4OTQgOC40MTcgMTMuMjM1NiA4LjU3MTEyIDEyLjU3MjYgOC41NzE0M1pNMTIuNTcyNiAyNS4xNDI5QzExLjkyOSAyNS4xNDM0IDExLjI4OTIgMjUuMDQ1MSAxMC42NzU0IDI0Ljg1MTRDMTEuMjM0MyAyNC40NDI1IDExLjczMzIgMjMuOTU3NCAxMi4xNTc3IDIzLjQxMDNDMTIuMjk0OSAyMy40MjI1IDEyLjQzMzEgMjMuNDI4NiAxMi41NzI2IDIzLjQyODZDMTMuNzg1IDIzLjQyODYgMTQuOTQ3OCAyMi45NDY5IDE1LjgwNTEgMjIuMDg5NkMxNi42NjI0IDIxLjIzMjMgMTcuMTQ0IDIwLjA2OTYgMTcuMTQ0IDE4Ljg1NzFWMTIuODU3MUMxNy4xNDQgMTIuNjI5OCAxNy4wNTM3IDEyLjQxMTggMTYuODkzIDEyLjI1MTFDMTYuNzMyMiAxMi4wOTAzIDE2LjUxNDIgMTIgMTYuMjg2OSAxMkgxMy42MTZDMTMuNDYzNCAxMS4zNTUyIDEzLjE0MDUgMTAuNzYzMiAxMi42ODExIDEwLjI4NTdIMTYuMjg2OUMxNi45Njg4IDEwLjI4NTcgMTcuNjIyOSAxMC41NTY2IDE4LjEwNTEgMTEuMDM4OUMxOC41ODc0IDExLjUyMTEgMTguODU4MyAxMi4xNzUyIDE4Ljg1ODMgMTIuODU3MVYxOC44NTcxQzE4Ljg1ODMgMTkuNjgyNiAxOC42OTU3IDIwLjUgMTguMzc5OCAyMS4yNjI2QzE4LjA2MzkgMjIuMDI1MiAxNy42MDA5IDIyLjcxODEgMTcuMDE3MiAyMy4zMDE4QzE2LjQzMzYgMjMuODg1NSAxNS43NDA2IDI0LjM0ODUgMTQuOTc4IDI0LjY2NDRDMTQuMjE1NCAyNC45ODAzIDEzLjM5OCAyNS4xNDI5IDEyLjU3MjYgMjUuMTQyOVpNMTYuNTk3NyA3LjkyNjg2QzE3LjI0NjcgOC4zMjk3NyAxNy45OTE3IDguNTUxODggMTguNzU1NCA4LjU3MDJDMTkuNTE5MSA4LjU4ODUxIDIwLjI3MzggOC40MDIzNyAyMC45NDE0IDguMDMxMDNDMjEuNjA5IDcuNjU5NyAyMi4xNjUyIDcuMTE2NjcgMjIuNTUyNCA2LjQ1ODE3QzIyLjkzOTYgNS43OTk2NyAyMy4xNDM4IDUuMDQ5NjMgMjMuMTQzOCA0LjI4NTcyQzIzLjE0MzggMy41MjE4IDIyLjkzOTYgMi43NzE3NiAyMi41NTI0IDIuMTEzMjZDMjIuMTY1MiAxLjQ1NDc2IDIxLjYwOSAwLjkxMTczNCAyMC45NDE0IDAuNTQwMzk4QzIwLjI3MzggMC4xNjkwNjIgMTkuNTE5MSAtMC4wMTcwODM1IDE4Ljc1NTQgMC4wMDEyMzIyOUMxNy45OTE3IDAuMDE5NTQ4IDE3LjI0NjcgMC4yNDE2NiAxNi41OTc3IDAuNjQ0NTcyQzE2Ljk4MTcgMS4wNjc0MyAxNy4yOTk0IDEuNTUyIDE3LjUzNDkgMi4wODExNEMxNy45MjUgMS44NDY4NyAxOC4zNzA0IDEuNzIwMzUgMTguODI1NSAxLjcxNDVDMTkuMjgwNiAxLjcwODY1IDE5LjcyOSAxLjgyMzY5IDIwLjEyNTEgMi4wNDc4NkMyMC41MjEyIDIuMjcyMDMgMjAuODUwNyAyLjU5NzMxIDIxLjA3OTkgMi45OTA0OEMyMS4zMDkyIDMuMzgzNjQgMjEuNDMgMy44MzA2IDIxLjQzIDQuMjg1NzJDMjEuNDMgNC43NDA4MyAyMS4zMDkyIDUuMTg3NzkgMjEuMDc5OSA1LjU4MDk1QzIwLjg1MDcgNS45NzQxMiAyMC41MjEyIDYuMjk5MzkgMjAuMTI1MSA2LjUyMzU3QzE5LjcyOSA2Ljc0Nzc0IDE5LjI4MDYgNi44NjI3OCAxOC44MjU1IDYuODU2OTNDMTguMzcwNCA2Ljg1MTA4IDE3LjkyNSA2LjcyNDU2IDE3LjUzNDkgNi40OTAyOUMxNy4yOTk3IDcuMDE1MzIgMTYuOTgzNSA3LjUwMDEgMTYuNTk3NyA3LjkyNjg2Wk0xOC40NDIzIDIzLjQxMDNDMTguNTc5NCAyMy40MjE3IDE4LjcxODUgMjMuNDI3OCAxOC44NTk0IDIzLjQyODZDMjAuMDcxOCAyMy40Mjg2IDIxLjIzNDYgMjIuOTQ2OSAyMi4wOTE5IDIyLjA4OTZDMjIuOTQ5MiAyMS4yMzIzIDIzLjQzMDkgMjAuMDY5NiAyMy40MzA5IDE4Ljg1NzFWMTIuODU3MUMyMy40MzA5IDEyLjYyOTggMjMuMzQwNiAxMi40MTE4IDIzLjE3OTggMTIuMjUxMUMyMy4wMTkxIDEyLjA5MDMgMjIuODAxIDEyIDIyLjU3MzcgMTJIMTkuOTAxN0MxOS43NDkxIDExLjM1NTIgMTkuNDI2MiAxMC43NjMyIDE4Ljk2NjkgMTAuMjg1N0gyMi41NzM3QzIzLjI1NTcgMTAuMjg1NyAyMy45MDk4IDEwLjU1NjYgMjQuMzkyIDExLjAzODlDMjQuODc0MiAxMS41MjExIDI1LjE0NTEgMTIuMTc1MiAyNS4xNDUxIDEyLjg1NzFWMTguODU3MUMyNS4xNDU1IDE5Ljg0NTQgMjQuOTEyOCAyMC44MTk3IDI0LjQ2NiAyMS43MDEyQzI0LjAxOTIgMjIuNTgyNiAyMy4zNzA5IDIzLjM0NjMgMjIuNTczNiAyMy45MzAyQzIxLjc3NjQgMjQuNTE0MSAyMC44NTI3IDI0LjkwMTkgMTkuODc3NSAyNS4wNjE5QzE4LjkwMjQgMjUuMjIyIDE3LjkwMzIgMjUuMTQ5OSAxNi45NjExIDI0Ljg1MTRDMTcuNTE5NiAyNC40NDI0IDE4LjAxODEgMjMuOTU3MyAxOC40NDIzIDIzLjQxMDNaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzAwQTNGRlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZVwiPlF1ZXVlIE1hbmFnZW1lbnQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgbXQtMlwiPnt7dmlld0ltYWdlPy5xdWV1ZU1hbmFnZW1lbnQgPz8gJy0tJ319IERldGVjdGlvbnM8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNCB0ZXh0LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIChjbGljayk9XCJmbGFnc1ZpZXcoKVwiIGNsYXNzPVwidmlldy1saW5rIGN1cnNvci1wb2ludGVyXCI+VmlldyBJbiBEZXRhaWwgPHNwYW4gY2xhc3M9XCJtcy0yXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE3XCIgaGVpZ2h0PVwiMTdcIiB2aWV3Qm94PVwiMCAwIDE3IDE3XCIgZmlsbD1cIm5vbmVcIj5cclxuPHBhdGggZD1cIk0xMy4zMzU5IDkuMTY4MjlWMTQuMTY4M0MxMy4zMzU5IDE0LjYxMDMgMTMuMTYwMyAxNS4wMzQyIDEyLjg0NzggMTUuMzQ2OEMxMi41MzUyIDE1LjY1OTQgMTIuMTExMyAxNS44MzUgMTEuNjY5MyAxNS44MzVIMi41MDI2QzIuMDYwNTggMTUuODM1IDEuNjM2NjUgMTUuNjU5NCAxLjMyNDA5IDE1LjM0NjhDMS4wMTE1MyAxNS4wMzQyIDAuODM1OTM4IDE0LjYxMDMgMC44MzU5MzggMTQuMTY4M1Y1LjAwMTYzQzAuODM1OTM4IDQuNTU5NiAxLjAxMTUzIDQuMTM1NjggMS4zMjQwOSAzLjgyMzEyQzEuNjM2NjUgMy41MTA1NiAyLjA2MDU4IDMuMzM0OTYgMi41MDI2IDMuMzM0OTZINy41MDI2TTEwLjgzNTkgMC44MzQ5NjFIMTUuODM1OU0xNS44MzU5IDAuODM0OTYxVjUuODM0OTZNMTUuODM1OSAwLjgzNDk2MUw2LjY2OTI3IDEwLjAwMTZcIiBzdHJva2U9XCIjMDA5QkYzXCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidmlld0ltYWdlPy5jdXN0b21lcnVuYXR0ZW5kZWRcIiBjbGFzcz1cImFpLXJvdyByb3dcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0IGNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyb3ctaWNvblwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMzJcIiBoZWlnaHQ9XCIzMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDMyIDMyXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMi4zMDYyIDEyLjMwNzZDMTQuNjAwMiAxMi4zMDc2IDE2LjQ2IDEwLjQ0NzkgMTYuNDYgOC4xNTM4MUMxNi40NiA1Ljg1OTcyIDE0LjYwMDIgNCAxMi4zMDYyIDRDMTAuMDEyMSA0IDguMTUyMzQgNS44NTk3MiA4LjE1MjM0IDguMTUzODFDOC4xNTIzNCAxMC40NDc5IDEwLjAxMjEgMTIuMzA3NiAxMi4zMDYyIDEyLjMwNzZaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDBBM0ZGXCIgc3Ryb2tlLXdpZHRoPVwiMS45MTIwN1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0yMS45OTk5IDI3Ljk5OTlDMjUuMzEzNiAyNy45OTk5IDI3Ljk5OTkgMjUuMzEzNiAyNy45OTk5IDIxLjk5OTlDMjcuOTk5OSAxOC42ODYzIDI1LjMxMzYgMTYgMjEuOTk5OSAxNkMxOC42ODYzIDE2IDE2IDE4LjY4NjMgMTYgMjEuOTk5OUMxNiAyNS4zMTM2IDE4LjY4NjMgMjcuOTk5OSAyMS45OTk5IDI3Ljk5OTlaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDBBM0ZGXCIgc3Ryb2tlLXdpZHRoPVwiMS45MTIwN1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNy43NTM4IDI2LjI0NTlMMjYuMjQ2IDE3Ljc1MzdNMTQuMTUzOCAxNS4yNzk4QzEyLjkzNjQgMTQuOTk4OCAxMS42NzEzIDE0Ljk5NjYgMTAuNDUzIDE1LjI3MzNDOS4yMzQ2MyAxNS41NTAxIDguMDk0NjEgMTYuMDk4NyA3LjExODE1IDE2Ljg3ODFDNi4xNDE2OCAxNy42NTc0IDUuMzU0MDMgMTguNjQ3NSA0LjgxNDA4IDE5Ljc3NDJDNC4yNzQxMyAyMC45MDA4IDMuOTk1ODUgMjIuMTM1IDQuMDAwMDUgMjMuMzg0NFYyNi4xNTM2SDExLjM4NDZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMEEzRkZcIiBzdHJva2Utd2lkdGg9XCIxLjkxMjA3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCI+Q3VzdG9tZXIgVW5hdHRlbmRlZDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMlwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIG10LTJcIj57e3ZpZXdJbWFnZT8uY3VzdG9tZXJ1bmF0dGVuZGVkID8/ICctLSd9fSBEZXRlY3Rpb25zPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgdGV4dC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSAoY2xpY2spPVwiZmxhZ3NWaWV3KClcIiBjbGFzcz1cInZpZXctbGluayBjdXJzb3ItcG9pbnRlclwiPlZpZXcgSW4gRGV0YWlsIDxzcGFuIGNsYXNzPVwibXMtMlwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTdcIiBoZWlnaHQ9XCIxN1wiIHZpZXdCb3g9XCIwIDAgMTcgMTdcIiBmaWxsPVwibm9uZVwiPlxyXG48cGF0aCBkPVwiTTEzLjMzNTkgOS4xNjgyOVYxNC4xNjgzQzEzLjMzNTkgMTQuNjEwMyAxMy4xNjAzIDE1LjAzNDIgMTIuODQ3OCAxNS4zNDY4QzEyLjUzNTIgMTUuNjU5NCAxMi4xMTEzIDE1LjgzNSAxMS42NjkzIDE1LjgzNUgyLjUwMjZDMi4wNjA1OCAxNS44MzUgMS42MzY2NSAxNS42NTk0IDEuMzI0MDkgMTUuMzQ2OEMxLjAxMTUzIDE1LjAzNDIgMC44MzU5MzggMTQuNjEwMyAwLjgzNTkzOCAxNC4xNjgzVjUuMDAxNjNDMC44MzU5MzggNC41NTk2IDEuMDExNTMgNC4xMzU2OCAxLjMyNDA5IDMuODIzMTJDMS42MzY2NSAzLjUxMDU2IDIuMDYwNTggMy4zMzQ5NiAyLjUwMjYgMy4zMzQ5Nkg3LjUwMjZNMTAuODM1OSAwLjgzNDk2MUgxNS44MzU5TTE1LjgzNTkgMC44MzQ5NjFWNS44MzQ5Nk0xNS44MzU5IDAuODM0OTYxTDYuNjY5MjcgMTAuMDAxNlwiIHN0cm9rZT1cIiMwMDlCRjNcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG48L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ2aWV3SW1hZ2U/LnN0YWZmbGVmdGludGhlbWlkZGxlXCIgY2xhc3M9XCJyb3cgYWktcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicm93LWljb25cIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjMwXCIgaGVpZ2h0PVwiMjZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAzMCAyNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNi43MjA3IDI0LjY1MzNMNi44MDM3MSAyNC45OThMMS4zMTczOCAyNUMxLjE3MjkzIDI1IDEgMjQuODY3IDEgMjQuNjQwNkMxLjAwMDEgMjEuNjk5MyAyLjcwOTczIDE5LjE4NjkgNS4xMjg5MSAxOC4wODNMNi43MjA3IDI0LjY1MzNaTTExLjMxMTUgMjQuNjY1TDExLjM5NzUgMjQuOTk3MUg4LjYwMjU0TDguNjg4NDggMjQuNjY5OUwxMCAxOS42NDI2TDExLjMxMTUgMjQuNjY1Wk0xNC44NzAxIDE4LjA3ODFDMTcuMjg5NyAxOS4xODE5IDE4Ljk5OTkgMjEuNjk0MSAxOSAyNC42MzU3QzE5IDI0LjgzMzcgMTguODY4IDI0Ljk2MDYgMTguNzM4MyAyNC45ODkzTDE4LjY4MjYgMjQuOTk1MUwxMy4xOTQzIDI0Ljk5NjFMMTMuMjc5MyAyNC42NDg0TDE0Ljg3MDEgMTguMDc4MVpNMTEuMTY2IDE2LjY4MjZMMTAuMDE4NiAxOC4wNjQ1TDkuOTk3MDcgMTguMDg4OUw5Ljk4MTQ1IDE4LjA2OTNMOC44MzM5OCAxNi42ODc1SDkuNTMzMlYxNi42ODI2SDExLjE2NlpNMTAgMkMxMC42MjE4IDIgMTEuMjM4MiAyLjEyNjc4IDExLjgxNDUgMi4zNzMwNUMxMi4zOTA5IDIuNjE5MzkgMTIuOTE3IDIuOTgxIDEzLjM2MTMgMy40Mzk0NUMxMy44MDU3IDMuODk3OTYgMTQuMTYwMiA0LjQ0Mzc3IDE0LjQwMjMgNS4wNDY4OEMxNC42NDQ1IDUuNjQ5OTggMTQuNzY5NSA2LjI5NzYxIDE0Ljc2OTUgNi45NTIxNUMxNC43Njk1IDcuNjA2NjUgMTQuNjQ0NCA4LjI1NDM0IDE0LjQwMjMgOC44NTc0MkMxNC4xNjAyIDkuNDYwNTUgMTMuODA1NyAxMC4wMDczIDEzLjM2MTMgMTAuNDY1OEMxMi45MTcgMTAuOTI0MiAxMi4zOTA4IDExLjI4NTkgMTEuODE0NSAxMS41MzIyQzExLjIzODIgMTEuNzc4NCAxMC42MjE4IDExLjkwNDMgMTAgMTEuOTA0M0M5LjM3ODIzIDExLjkwNDMgOC43NjE3OSAxMS43Nzg0IDguMTg1NTUgMTEuNTMyMkM3LjYwOTI0IDExLjI4NTkgNy4wODI5NyAxMC45MjQyIDYuNjM4NjcgMTAuNDY1OEM2LjE5NDI2IDEwLjAwNzMgNS44Mzk3OSA5LjQ2MDU1IDUuNTk3NjYgOC44NTc0MkM1LjM1NTU5IDguMjU0MzQgNS4yMzA0NyA3LjYwNjY1IDUuMjMwNDcgNi45NTIxNUM1LjIzMDUgNi4yOTc2MSA1LjM1NTUzIDUuNjQ5OTggNS41OTc2NiA1LjA0Njg4QzUuODM5NzkgNC40NDM3NyA2LjE5NDI4IDMuODk3OTYgNi42Mzg2NyAzLjQzOTQ1QzcuMDgzMDIgMi45ODEgNy42MDkxMyAyLjYxOTM5IDguMTg1NTUgMi4zNzMwNUM4LjY4OTk1IDIuMTU3NTEgOS4yMjQ5NiAyLjAzMzM2IDkuNzY3NTggMi4wMDU4NkwxMCAyWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAwQTNGRlwiIHN0cm9rZS13aWR0aD1cIjJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMy4zODk0IDE4LjY2OTNMMjguMDAyNyAxNC4wMDI2TDIzLjM4OTQgOS4zMzU5NE0yNi42NjY3IDE0LjAwMjZIMTYuNjY0MVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAwQTNGRlwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInNxdWFyZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCI+U3RhZmYgbGVmdCBpbiB0aGUgTWlkZGxlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBtdC0yXCI+e3t2aWV3SW1hZ2U/LnN0YWZmbGVmdGludGhlbWlkZGxlID8/ICctLSd9fSBEZXRlY3Rpb25zPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgdGV4dC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSAoY2xpY2spPVwiZmxhZ3NWaWV3KClcIiBjbGFzcz1cInZpZXctbGluayBjdXJzb3ItcG9pbnRlclwiPlZpZXcgSW4gRGV0YWlsIDxzcGFuIGNsYXNzPVwibXMtMlwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTdcIiBoZWlnaHQ9XCIxN1wiIHZpZXdCb3g9XCIwIDAgMTcgMTdcIiBmaWxsPVwibm9uZVwiPlxyXG48cGF0aCBkPVwiTTEzLjMzNTkgOS4xNjgyOVYxNC4xNjgzQzEzLjMzNTkgMTQuNjEwMyAxMy4xNjAzIDE1LjAzNDIgMTIuODQ3OCAxNS4zNDY4QzEyLjUzNTIgMTUuNjU5NCAxMi4xMTEzIDE1LjgzNSAxMS42NjkzIDE1LjgzNUgyLjUwMjZDMi4wNjA1OCAxNS44MzUgMS42MzY2NSAxNS42NTk0IDEuMzI0MDkgMTUuMzQ2OEMxLjAxMTUzIDE1LjAzNDIgMC44MzU5MzggMTQuNjEwMyAwLjgzNTkzOCAxNC4xNjgzVjUuMDAxNjNDMC44MzU5MzggNC41NTk2IDEuMDExNTMgNC4xMzU2OCAxLjMyNDA5IDMuODIzMTJDMS42MzY2NSAzLjUxMDU2IDIuMDYwNTggMy4zMzQ5NiAyLjUwMjYgMy4zMzQ5Nkg3LjUwMjZNMTAuODM1OSAwLjgzNDk2MUgxNS44MzU5TTE1LjgzNTkgMC44MzQ5NjFWNS44MzQ5Nk0xNS44MzU5IDAuODM0OTYxTDYuNjY5MjcgMTAuMDAxNlwiIHN0cm9rZT1cIiMwMDlCRjNcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG48L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiF2aWV3SW1hZ2U/Lm1vYmlsZXVzYWdlZGV0ZWN0aW9uICYmICF2aWV3SW1hZ2U/LnF1ZXVlTWFuYWdlbWVudCAmJiAhdmlld0ltYWdlPy5jdXN0b21lcnVuYXR0ZW5kZWQgJiYgIXZpZXdJbWFnZT8uc3RhZmZsZWZ0aW50aGVtaWRkbGVcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtY2VudGVyIHB5LTVcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyIG15LTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2FyZC1ib2R5IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLXNyY1wiIHNyYz1cIi4vYXNzZXRzL3RhbmdvL0ljb25zL05vZGF0YTEuc3ZnXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGFtYWludGV4dCBtdC0zXCI+Tm8gZGF0YSBmb3VuZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9kYXRhc3VidGV4dFwiPk5vIEFJIEluc2lnaHRzIGF2YWlsYWJsZSBmb3IgdGhlIHNlbGVjdGVkIHpvbmUuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==