@tuki-io/tuki-widgets 0.0.144 → 0.0.146

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.
@@ -5,16 +5,12 @@ export interface UccxServerEntityStats {
5
5
  [key in EntityType]: number;
6
6
  };
7
7
  }
8
- export interface WebexLicenseFeatureUsage {
9
- feature: 'PERSON' | 'ORPHANED_DEVICE';
10
- totalCount: number;
11
- usageCount: number;
12
- unUsedCount: number;
8
+ export interface CcLicense {
9
+ name: string;
10
+ totalUnits: number;
11
+ consumedUnits: number;
13
12
  }
14
13
  export interface WebexLicenseUsageSummary {
15
- webexReadinessLicenseStats: WebexLicenseFeatureUsage[];
16
- totalProfessionalLicenseCount: number;
17
- totalWorkspaceProfessionalLicenseCount: number;
18
- professionalWebexReadinessTotalLicenseStatCoverage: number;
19
- workspaceWebexReadinessTotalLicenseStatCoverage: number;
14
+ licenses: CcLicense[];
15
+ totalExistingLicenses: number;
20
16
  }
@@ -1,5 +1,5 @@
1
1
  import { OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';
2
- import { ApexChart, ApexDataLabels, ApexLegend, ApexNonAxisChartSeries, ApexPlotOptions } from 'ng-apexcharts';
2
+ import { ApexChart, ApexDataLabels, ApexLegend, ApexNonAxisChartSeries, ApexPlotOptions, ApexTooltip } from 'ng-apexcharts';
3
3
  import * as i0 from "@angular/core";
4
4
  interface LicenseLegendItem {
5
5
  label: string;
@@ -19,6 +19,7 @@ interface LicenseChartOptions {
19
19
  legend: ApexLegend;
20
20
  plotOptions: ApexPlotOptions;
21
21
  dataLabels: ApexDataLabels;
22
+ tooltip: ApexTooltip;
22
23
  }
23
24
  interface LicenseRequirementViewModel {
24
25
  chartOptions: LicenseChartOptions;
@@ -1,5 +1,3 @@
1
1
  ;
2
- ;
3
- ;
4
2
  export {};
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2MtcmVhZGluZXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL2NvbnRhY3QtY2VudGVyL2NjLXJlYWRpbmVzcy90eXBlcy9jYy1yZWFkaW5lc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBa0JDLENBQUM7QUFPRCxDQUFDO0FBUUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIEVudGl0eVR5cGUgPVxyXG4gICAgfCAnYXBwbGljYXRpb25zJ1xyXG4gICAgfCAndHJpZ2dlcnMnXHJcbiAgICB8ICdjb250YWN0U2VydmljZVF1ZXVlcydcclxuICAgIHwgJ3Jlc291cmNlcydcclxuICAgIHwgJ3Jlc291cmNlR3JvdXBzJ1xyXG4gICAgfCAnc2tpbGxzJ1xyXG4gICAgfCAneG1sJ1xyXG4gICAgfCAnc2NyaXB0cydcclxuICAgIHwgJ2F1ZGlvUHJvbXB0cydcclxuICAgIHwgJ3RlYW1zJ1xyXG4gICAgLy8gfCAncmVhc29uQ29kZXMnXHJcbiAgICB8ICdwaG9uZWJvb2tzJ1xyXG4gICAgfCAnd3JhcFVwQ29kZXMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBVY2N4U2VydmVyRW50aXR5U3RhdHMge1xyXG4gICAgdWNjeElwOiBzdHJpbmc7XHJcbiAgICBjb3VudHM6IHsgW2tleSBpbiBFbnRpdHlUeXBlXTogbnVtYmVyIH1cclxufTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgV2ViZXhMaWNlbnNlRmVhdHVyZVVzYWdlIHtcclxuICAgIGZlYXR1cmU6ICdQRVJTT04nIHwgJ09SUEhBTkVEX0RFVklDRScsXHJcbiAgICB0b3RhbENvdW50OiBudW1iZXIsXHJcbiAgICB1c2FnZUNvdW50OiBudW1iZXIsXHJcbiAgICB1blVzZWRDb3VudDogbnVtYmVyXHJcbn07XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFdlYmV4TGljZW5zZVVzYWdlU3VtbWFyeSB7XHJcbiAgICB3ZWJleFJlYWRpbmVzc0xpY2Vuc2VTdGF0czogV2ViZXhMaWNlbnNlRmVhdHVyZVVzYWdlW10sXHJcbiAgICB0b3RhbFByb2Zlc3Npb25hbExpY2Vuc2VDb3VudDogbnVtYmVyLFxyXG4gICAgdG90YWxXb3Jrc3BhY2VQcm9mZXNzaW9uYWxMaWNlbnNlQ291bnQ6IG51bWJlcixcclxuICAgIHByb2Zlc3Npb25hbFdlYmV4UmVhZGluZXNzVG90YWxMaWNlbnNlU3RhdENvdmVyYWdlOiBudW1iZXIsXHJcbiAgICB3b3Jrc3BhY2VXZWJleFJlYWRpbmVzc1RvdGFsTGljZW5zZVN0YXRDb3ZlcmFnZTogbnVtYmVyXHJcbn07Il19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2MtcmVhZGluZXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL2NvbnRhY3QtY2VudGVyL2NjLXJlYWRpbmVzcy90eXBlcy9jYy1yZWFkaW5lc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBa0JDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBFbnRpdHlUeXBlID1cclxuICAgIHwgJ2FwcGxpY2F0aW9ucydcclxuICAgIHwgJ3RyaWdnZXJzJ1xyXG4gICAgfCAnY29udGFjdFNlcnZpY2VRdWV1ZXMnXHJcbiAgICB8ICdyZXNvdXJjZXMnXHJcbiAgICB8ICdyZXNvdXJjZUdyb3VwcydcclxuICAgIHwgJ3NraWxscydcclxuICAgIHwgJ3htbCdcclxuICAgIHwgJ3NjcmlwdHMnXHJcbiAgICB8ICdhdWRpb1Byb21wdHMnXHJcbiAgICB8ICd0ZWFtcydcclxuICAgIC8vIHwgJ3JlYXNvbkNvZGVzJ1xyXG4gICAgfCAncGhvbmVib29rcydcclxuICAgIHwgJ3dyYXBVcENvZGVzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVWNjeFNlcnZlckVudGl0eVN0YXRzIHtcclxuICAgIHVjY3hJcDogc3RyaW5nO1xyXG4gICAgY291bnRzOiB7IFtrZXkgaW4gRW50aXR5VHlwZV06IG51bWJlciB9XHJcbn07XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENjTGljZW5zZSB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICB0b3RhbFVuaXRzOiBudW1iZXI7XHJcbiAgICBjb25zdW1lZFVuaXRzOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgV2ViZXhMaWNlbnNlVXNhZ2VTdW1tYXJ5IHtcclxuICAgIGxpY2Vuc2VzOiBDY0xpY2Vuc2VbXTtcclxuICAgIHRvdGFsRXhpc3RpbmdMaWNlbnNlczogbnVtYmVyO1xyXG59Il19
@@ -9,7 +9,8 @@ import * as i4 from "@angular/material/core";
9
9
  import * as i5 from "../../components/card/card.component";
10
10
  const LEGEND_COLORS = {
11
11
  existing: '#16A693',
12
- missing: '#808080'
12
+ missing: '#808080',
13
+ empty: '#E0E0E0'
13
14
  };
14
15
  export class LicencesRequirementComponent {
15
16
  constructor() {
@@ -17,7 +18,7 @@ export class LicencesRequirementComponent {
17
18
  this.viewModel = null;
18
19
  this.loading = false;
19
20
  this.error = false;
20
- this.filters = ['All', 'Professional licenses', 'Workspace licenses'];
21
+ this.filters = ['All'];
21
22
  this.selectedSummaryIndex = 0;
22
23
  this.summary = null;
23
24
  }
@@ -68,6 +69,13 @@ export class LicencesRequirementComponent {
68
69
  else {
69
70
  this.summary = null;
70
71
  }
72
+ // Build filters dynamically from license names
73
+ if (this.summary?.licenses?.length) {
74
+ this.filters = ['All', ...this.summary.licenses.map(l => l.name)];
75
+ }
76
+ else {
77
+ this.filters = ['All'];
78
+ }
71
79
  console.log('Processed summary:', this.summary);
72
80
  this.selectFilter(0);
73
81
  });
@@ -83,38 +91,25 @@ export class LicencesRequirementComponent {
83
91
  }
84
92
  mapSummaryToViewModel(summary, filterIndex) {
85
93
  console.log('Mapping summary to viewModel:', summary, 'filterIndex:', filterIndex);
86
- // Extract data from webexReadinessLicenseStats and license counts
87
- const personStat = summary.webexReadinessLicenseStats?.find(stat => stat.feature === 'PERSON');
88
- const deviceStat = summary.webexReadinessLicenseStats?.find(stat => stat.feature === 'ORPHANED_DEVICE');
89
- const professionalNeeded = personStat?.totalCount ?? 0;
90
- const workspaceNeeded = deviceStat?.totalCount ?? 0;
91
- const professionalOwned = Number(summary.totalProfessionalLicenseCount ?? 0);
92
- const workspaceOwned = Number(summary.totalWorkspaceProfessionalLicenseCount ?? 0);
93
- // Filter data based on selection
94
+ const licenses = summary.licenses || [];
94
95
  let existingCount;
95
96
  let missingCount;
96
97
  let rows;
97
98
  if (filterIndex === 0) {
98
- // All - show both
99
- existingCount = professionalOwned + workspaceOwned;
100
- const totalNeeded = professionalNeeded + workspaceNeeded;
101
- missingCount = Math.max(0, totalNeeded - existingCount);
102
- rows = [
103
- { label: 'Professional licenses', value: professionalNeeded },
104
- { label: 'Workspace licenses', value: workspaceNeeded }
105
- ];
106
- }
107
- else if (filterIndex === 1) {
108
- // Professional licenses only
109
- existingCount = professionalOwned;
110
- missingCount = Math.max(0, professionalNeeded - professionalOwned);
111
- rows = [{ label: 'Professional licenses', value: professionalNeeded }];
99
+ // "All" filter: show totalExistingLicenses vs total consumedUnits
100
+ existingCount = summary.totalExistingLicenses ?? 0;
101
+ missingCount = licenses.reduce((acc, l) => acc + l.consumedUnits, 0);
102
+ rows = licenses.map(l => ({
103
+ label: l.name,
104
+ value: l.consumedUnits
105
+ }));
112
106
  }
113
107
  else {
114
- // Workspace licenses only
115
- existingCount = workspaceOwned;
116
- missingCount = Math.max(0, workspaceNeeded - workspaceOwned);
117
- rows = [{ label: 'Workspace licenses', value: workspaceNeeded }];
108
+ // Specific license filter: show 0 existing vs consumedUnits for that license
109
+ const selectedLicense = licenses[filterIndex - 1];
110
+ existingCount = 0;
111
+ missingCount = selectedLicense?.consumedUnits ?? 0;
112
+ rows = selectedLicense ? [{ label: selectedLicense.name, value: selectedLicense.consumedUnits }] : [];
118
113
  }
119
114
  const totalLicenses = existingCount + missingCount;
120
115
  const legendItems = [
@@ -133,7 +128,7 @@ export class LicencesRequirementComponent {
133
128
  ];
134
129
  console.log('Legend items:', legendItems);
135
130
  console.log('Table rows:', rows);
136
- const totalRequired = rows.reduce((acc, row) => acc + row.value, 0);
131
+ const totalRequired = existingCount + missingCount;
137
132
  return {
138
133
  chartOptions: this.buildChartOptions(legendItems),
139
134
  legendItems,
@@ -142,14 +137,20 @@ export class LicencesRequirementComponent {
142
137
  };
143
138
  }
144
139
  buildChartOptions(legendItems) {
140
+ const totalCount = legendItems.reduce((acc, item) => acc + item.count, 0);
141
+ const isEmpty = totalCount === 0;
142
+ // For empty chart, show a full light gray donut
143
+ const series = isEmpty ? [1] : legendItems.map(item => item.count);
144
+ const labels = isEmpty ? ['No data'] : legendItems.map(item => item.label);
145
+ const colors = isEmpty ? [LEGEND_COLORS.empty] : legendItems.map(item => item.color);
145
146
  return {
146
- series: legendItems.map(item => item.count),
147
+ series,
147
148
  chart: {
148
149
  type: 'donut',
149
150
  height: 220
150
151
  },
151
- labels: legendItems.map(item => item.label),
152
- colors: legendItems.map(item => item.color),
152
+ labels,
153
+ colors,
153
154
  legend: {
154
155
  show: false
155
156
  },
@@ -162,6 +163,9 @@ export class LicencesRequirementComponent {
162
163
  },
163
164
  dataLabels: {
164
165
  enabled: false
166
+ },
167
+ tooltip: {
168
+ enabled: !isEmpty
165
169
  }
166
170
  };
167
171
  }
@@ -175,13 +179,13 @@ export class LicencesRequirementComponent {
175
179
  }
176
180
  }
177
181
  LicencesRequirementComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: LicencesRequirementComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
178
- LicencesRequirementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: LicencesRequirementComponent, selector: "cc-licenses-requirement", inputs: { customerId: "customerId", token: "token" }, usesOnChanges: true, ngImport: i0, template: "<tk-card title=\"Licenses requirement\">\n <ng-container ngProjectAs=\"card-content\">\n <div\n class=\"widget-body\"\n *ngIf=\"!loading && !error && viewModel; else widgetState\"\n >\n <div class=\"left-section\">\n <mat-select\n [(value)]=\"selectedSummaryIndex\"\n (selectionChange)=\"onFilterChange($event.value)\"\n class=\"filter-select\"\n >\n <mat-option *ngFor=\"let option of filters; index as i\" [value]=\"i\">\n {{ option }}\n </mat-option>\n </mat-select>\n\n <div class=\"chart-section\">\n <div class=\"chart-wrapper\">\n <apx-chart\n [series]=\"viewModel.chartOptions.series\"\n [chart]=\"viewModel.chartOptions.chart\"\n [labels]=\"viewModel.chartOptions.labels\"\n [colors]=\"viewModel.chartOptions.colors\"\n [legend]=\"viewModel.chartOptions.legend\"\n [plotOptions]=\"viewModel.chartOptions.plotOptions\"\n [dataLabels]=\"viewModel.chartOptions.dataLabels\"\n >\n </apx-chart>\n </div>\n <div class=\"legend\">\n <div class=\"legend-item\" *ngFor=\"let item of viewModel.legendItems\">\n <span\n class=\"legend-marker\"\n [style.backgroundColor]=\"item.color\"\n ></span>\n <span class=\"legend-label\">{{ item.label }}</span>\n <span class=\"legend-value\">{{ item.count | number }}</span>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"divider\" aria-hidden=\"true\"></div>\n\n <div class=\"table-section\">\n <div class=\"lic-table-header\">\n <span>License</span>\n <span>Required</span>\n </div>\n <div class=\"table-row\" *ngFor=\"let row of viewModel.rows\">\n <span>{{ row.label }}</span>\n <span>{{ row.value | number }}</span>\n </div>\n <div class=\"table-row total-row\">\n <span>Total</span>\n <span>{{ viewModel.totalRequired | number }}</span>\n </div>\n </div>\n </div>\n\n <ng-template #widgetState>\n <div class=\"state-message\" *ngIf=\"loading\">\n Loading license requirements\u2026\n </div>\n <div class=\"state-message error\" *ngIf=\"!loading && error\">\n Unable to load license requirements.\n </div>\n <div class=\"state-message\" *ngIf=\"!loading && !error && !viewModel\">\n No license data available.\n </div>\n </ng-template>\n </ng-container>\n</tk-card>\n", styles: ["@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400&display=swap\";:host{display:block;width:100%;box-sizing:border-box}.filter-select{font-family:Inter,Inter,sans-serif;font-size:14px;min-width:140px;border:1px solid #e5e7eb;border-radius:.5rem;padding:.5rem .75rem;background-color:#fff}.filter-select:hover{border-color:#d1d5db}:host ::ng-deep .filter-select.mat-mdc-select{border:1px solid #e5e7eb;border-radius:.5rem;background-color:#fff}:host ::ng-deep .filter-select.mat-mdc-select:hover{border-color:#d1d5db}:host ::ng-deep .filter-select.mat-mdc-select.mat-focused{border-color:#16a693}:host ::ng-deep .filter-select .mat-mdc-select-trigger{font-size:14px;padding:.5rem .75rem}:host ::ng-deep .filter-select .mat-mdc-select-value{color:#111827}:host ::ng-deep .filter-select .mat-mdc-select-arrow-wrapper{padding-left:.5rem}.widget-body{display:flex;gap:2.5rem;align-items:flex-start}.left-section{flex:2;display:flex;flex-direction:column;gap:1rem}.chart-section{display:flex;gap:1.5rem;align-items:center}.chart-wrapper{width:220px;min-height:220px;flex-shrink:0}.chart-wrapper apx-chart{width:220px!important;height:220px!important}.legend{display:flex;flex-direction:column;gap:.75rem}.legend-item{display:flex;align-items:center;gap:.5rem;font-family:Inter,Inter,sans-serif;font-size:14px}.legend-marker{width:14px;height:14px;border-radius:50%;display:inline-flex}.legend-label{color:#4b5563}.legend-value{margin-left:auto;font-weight:600;color:#111827}.divider{width:1px;min-height:200px;align-self:stretch;background:#e5e7eb}.table-section{flex:3;display:flex;flex-direction:column;gap:.75rem;font-family:Inter,Inter,sans-serif}.lic-table-header,.table-row{display:flex;justify-content:space-between;font-size:14px}.lic-table-header{font-weight:600;color:#6b7280;padding-bottom:.5rem;border-bottom:1px solid #e5e7eb}.table-row{color:#111827}.total-row{font-weight:700;margin-top:.5rem;padding-top:.5rem;border-top:1px solid #e5e7eb}.state-message{font-family:Inter,Inter,sans-serif;font-size:14px;color:#6b7280}.state-message.error{color:#b91c1c}@media (max-width: 960px){.widget-body{flex-direction:column}.divider{display:none}.chart-section{justify-content:space-between}}:host ::ng-deep .apexcharts-legend{display:none!important}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ChartComponent, selector: "apx-chart", inputs: ["chart", "annotations", "colors", "dataLabels", "series", "stroke", "labels", "legend", "markers", "noData", "fill", "tooltip", "plotOptions", "responsive", "xaxis", "yaxis", "forecastDataPoints", "grid", "states", "title", "subtitle", "theme", "autoUpdateSeries"] }, { kind: "component", type: i3.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i5.CardComponent, selector: "tk-card", inputs: ["title"] }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }] });
182
+ LicencesRequirementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: LicencesRequirementComponent, selector: "cc-licenses-requirement", inputs: { customerId: "customerId", token: "token" }, usesOnChanges: true, ngImport: i0, template: "<tk-card title=\"Licenses requirement\">\n <ng-container ngProjectAs=\"card-content\">\n <div\n class=\"widget-body\"\n *ngIf=\"!loading && !error && viewModel; else widgetState\"\n >\n <div class=\"left-section\">\n <mat-select\n [(value)]=\"selectedSummaryIndex\"\n (selectionChange)=\"onFilterChange($event.value)\"\n class=\"filter-select\"\n >\n <mat-option *ngFor=\"let option of filters; index as i\" [value]=\"i\">\n {{ option }}\n </mat-option>\n </mat-select>\n\n <div class=\"chart-section\">\n <div class=\"chart-wrapper\">\n <apx-chart\n [series]=\"viewModel.chartOptions.series\"\n [chart]=\"viewModel.chartOptions.chart\"\n [labels]=\"viewModel.chartOptions.labels\"\n [colors]=\"viewModel.chartOptions.colors\"\n [legend]=\"viewModel.chartOptions.legend\"\n [plotOptions]=\"viewModel.chartOptions.plotOptions\"\n [dataLabels]=\"viewModel.chartOptions.dataLabels\"\n [tooltip]=\"viewModel.chartOptions.tooltip\"\n >\n </apx-chart>\n </div>\n <div class=\"legend\">\n <div class=\"legend-item\" *ngFor=\"let item of viewModel.legendItems\">\n <span\n class=\"legend-marker\"\n [style.backgroundColor]=\"item.color\"\n ></span>\n <span class=\"legend-label\">{{ item.label }}</span>\n <span class=\"legend-value\">{{ item.count | number }}</span>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"divider\" aria-hidden=\"true\"></div>\n\n <div class=\"table-section\">\n <div class=\"lic-table-header\">\n <span>License</span>\n <span>Required</span>\n </div>\n <div class=\"table-row\" *ngFor=\"let row of viewModel.rows\">\n <span>{{ row.label }}</span>\n <span>{{ row.value | number }}</span>\n </div>\n <div class=\"table-row total-row\">\n <span>Total</span>\n <span>{{ viewModel.totalRequired | number }}</span>\n </div>\n </div>\n </div>\n\n <ng-template #widgetState>\n <div class=\"state-message\" *ngIf=\"loading\">\n Loading license requirements\u2026\n </div>\n <div class=\"state-message error\" *ngIf=\"!loading && error\">\n Unable to load license requirements.\n </div>\n <div class=\"state-message\" *ngIf=\"!loading && !error && !viewModel\">\n No license data available.\n </div>\n </ng-template>\n </ng-container>\n</tk-card>\n", styles: ["@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400&display=swap\";:host{display:block;width:100%;box-sizing:border-box}.filter-select{font-family:Inter,Inter,sans-serif;font-size:14px;min-width:140px;border:1px solid #e5e7eb;border-radius:.5rem;padding:.5rem .75rem;background-color:#fff}.filter-select:hover{border-color:#d1d5db}:host ::ng-deep .filter-select.mat-mdc-select{border:1px solid #e5e7eb;border-radius:.5rem;background-color:#fff}:host ::ng-deep .filter-select.mat-mdc-select:hover{border-color:#d1d5db}:host ::ng-deep .filter-select.mat-mdc-select.mat-focused{border-color:#16a693}:host ::ng-deep .filter-select .mat-mdc-select-trigger{font-size:14px;padding:.5rem .75rem}:host ::ng-deep .filter-select .mat-mdc-select-value{color:#111827}:host ::ng-deep .filter-select .mat-mdc-select-arrow-wrapper{padding-left:.5rem}.widget-body{display:flex;gap:2.5rem;align-items:flex-start}.left-section{flex:2;display:flex;flex-direction:column;gap:1rem}.chart-section{display:flex;gap:1.5rem;align-items:center}.chart-wrapper{width:220px;min-height:220px;flex-shrink:0}.chart-wrapper apx-chart{width:220px!important;height:220px!important}.legend{display:flex;flex-direction:column;gap:.75rem}.legend-item{display:flex;align-items:center;gap:.5rem;font-family:Inter,Inter,sans-serif;font-size:14px}.legend-marker{width:14px;height:14px;border-radius:50%;display:inline-flex}.legend-label{color:#4b5563}.legend-value{margin-left:auto;font-weight:600;color:#111827}.divider{width:1px;min-height:200px;align-self:stretch;background:#e5e7eb}.table-section{flex:3;display:flex;flex-direction:column;gap:.75rem;font-family:Inter,Inter,sans-serif}.lic-table-header,.table-row{display:flex;justify-content:space-between;font-size:14px}.lic-table-header{font-weight:600;color:#6b7280;padding-bottom:.5rem;border-bottom:1px solid #e5e7eb}.table-row{color:#111827}.total-row{font-weight:700;margin-top:.5rem;padding-top:.5rem;border-top:1px solid #e5e7eb}.state-message{font-family:Inter,Inter,sans-serif;font-size:14px;color:#6b7280}.state-message.error{color:#b91c1c}@media (max-width: 960px){.widget-body{flex-direction:column}.divider{display:none}.chart-section{justify-content:space-between}}:host ::ng-deep .apexcharts-legend{display:none!important}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ChartComponent, selector: "apx-chart", inputs: ["chart", "annotations", "colors", "dataLabels", "series", "stroke", "labels", "legend", "markers", "noData", "fill", "tooltip", "plotOptions", "responsive", "xaxis", "yaxis", "forecastDataPoints", "grid", "states", "title", "subtitle", "theme", "autoUpdateSeries"] }, { kind: "component", type: i3.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i5.CardComponent, selector: "tk-card", inputs: ["title"] }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }] });
179
183
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: LicencesRequirementComponent, decorators: [{
180
184
  type: Component,
181
- args: [{ selector: 'cc-licenses-requirement', template: "<tk-card title=\"Licenses requirement\">\n <ng-container ngProjectAs=\"card-content\">\n <div\n class=\"widget-body\"\n *ngIf=\"!loading && !error && viewModel; else widgetState\"\n >\n <div class=\"left-section\">\n <mat-select\n [(value)]=\"selectedSummaryIndex\"\n (selectionChange)=\"onFilterChange($event.value)\"\n class=\"filter-select\"\n >\n <mat-option *ngFor=\"let option of filters; index as i\" [value]=\"i\">\n {{ option }}\n </mat-option>\n </mat-select>\n\n <div class=\"chart-section\">\n <div class=\"chart-wrapper\">\n <apx-chart\n [series]=\"viewModel.chartOptions.series\"\n [chart]=\"viewModel.chartOptions.chart\"\n [labels]=\"viewModel.chartOptions.labels\"\n [colors]=\"viewModel.chartOptions.colors\"\n [legend]=\"viewModel.chartOptions.legend\"\n [plotOptions]=\"viewModel.chartOptions.plotOptions\"\n [dataLabels]=\"viewModel.chartOptions.dataLabels\"\n >\n </apx-chart>\n </div>\n <div class=\"legend\">\n <div class=\"legend-item\" *ngFor=\"let item of viewModel.legendItems\">\n <span\n class=\"legend-marker\"\n [style.backgroundColor]=\"item.color\"\n ></span>\n <span class=\"legend-label\">{{ item.label }}</span>\n <span class=\"legend-value\">{{ item.count | number }}</span>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"divider\" aria-hidden=\"true\"></div>\n\n <div class=\"table-section\">\n <div class=\"lic-table-header\">\n <span>License</span>\n <span>Required</span>\n </div>\n <div class=\"table-row\" *ngFor=\"let row of viewModel.rows\">\n <span>{{ row.label }}</span>\n <span>{{ row.value | number }}</span>\n </div>\n <div class=\"table-row total-row\">\n <span>Total</span>\n <span>{{ viewModel.totalRequired | number }}</span>\n </div>\n </div>\n </div>\n\n <ng-template #widgetState>\n <div class=\"state-message\" *ngIf=\"loading\">\n Loading license requirements\u2026\n </div>\n <div class=\"state-message error\" *ngIf=\"!loading && error\">\n Unable to load license requirements.\n </div>\n <div class=\"state-message\" *ngIf=\"!loading && !error && !viewModel\">\n No license data available.\n </div>\n </ng-template>\n </ng-container>\n</tk-card>\n", styles: ["@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400&display=swap\";:host{display:block;width:100%;box-sizing:border-box}.filter-select{font-family:Inter,Inter,sans-serif;font-size:14px;min-width:140px;border:1px solid #e5e7eb;border-radius:.5rem;padding:.5rem .75rem;background-color:#fff}.filter-select:hover{border-color:#d1d5db}:host ::ng-deep .filter-select.mat-mdc-select{border:1px solid #e5e7eb;border-radius:.5rem;background-color:#fff}:host ::ng-deep .filter-select.mat-mdc-select:hover{border-color:#d1d5db}:host ::ng-deep .filter-select.mat-mdc-select.mat-focused{border-color:#16a693}:host ::ng-deep .filter-select .mat-mdc-select-trigger{font-size:14px;padding:.5rem .75rem}:host ::ng-deep .filter-select .mat-mdc-select-value{color:#111827}:host ::ng-deep .filter-select .mat-mdc-select-arrow-wrapper{padding-left:.5rem}.widget-body{display:flex;gap:2.5rem;align-items:flex-start}.left-section{flex:2;display:flex;flex-direction:column;gap:1rem}.chart-section{display:flex;gap:1.5rem;align-items:center}.chart-wrapper{width:220px;min-height:220px;flex-shrink:0}.chart-wrapper apx-chart{width:220px!important;height:220px!important}.legend{display:flex;flex-direction:column;gap:.75rem}.legend-item{display:flex;align-items:center;gap:.5rem;font-family:Inter,Inter,sans-serif;font-size:14px}.legend-marker{width:14px;height:14px;border-radius:50%;display:inline-flex}.legend-label{color:#4b5563}.legend-value{margin-left:auto;font-weight:600;color:#111827}.divider{width:1px;min-height:200px;align-self:stretch;background:#e5e7eb}.table-section{flex:3;display:flex;flex-direction:column;gap:.75rem;font-family:Inter,Inter,sans-serif}.lic-table-header,.table-row{display:flex;justify-content:space-between;font-size:14px}.lic-table-header{font-weight:600;color:#6b7280;padding-bottom:.5rem;border-bottom:1px solid #e5e7eb}.table-row{color:#111827}.total-row{font-weight:700;margin-top:.5rem;padding-top:.5rem;border-top:1px solid #e5e7eb}.state-message{font-family:Inter,Inter,sans-serif;font-size:14px;color:#6b7280}.state-message.error{color:#b91c1c}@media (max-width: 960px){.widget-body{flex-direction:column}.divider{display:none}.chart-section{justify-content:space-between}}:host ::ng-deep .apexcharts-legend{display:none!important}\n"] }]
185
+ args: [{ selector: 'cc-licenses-requirement', template: "<tk-card title=\"Licenses requirement\">\n <ng-container ngProjectAs=\"card-content\">\n <div\n class=\"widget-body\"\n *ngIf=\"!loading && !error && viewModel; else widgetState\"\n >\n <div class=\"left-section\">\n <mat-select\n [(value)]=\"selectedSummaryIndex\"\n (selectionChange)=\"onFilterChange($event.value)\"\n class=\"filter-select\"\n >\n <mat-option *ngFor=\"let option of filters; index as i\" [value]=\"i\">\n {{ option }}\n </mat-option>\n </mat-select>\n\n <div class=\"chart-section\">\n <div class=\"chart-wrapper\">\n <apx-chart\n [series]=\"viewModel.chartOptions.series\"\n [chart]=\"viewModel.chartOptions.chart\"\n [labels]=\"viewModel.chartOptions.labels\"\n [colors]=\"viewModel.chartOptions.colors\"\n [legend]=\"viewModel.chartOptions.legend\"\n [plotOptions]=\"viewModel.chartOptions.plotOptions\"\n [dataLabels]=\"viewModel.chartOptions.dataLabels\"\n [tooltip]=\"viewModel.chartOptions.tooltip\"\n >\n </apx-chart>\n </div>\n <div class=\"legend\">\n <div class=\"legend-item\" *ngFor=\"let item of viewModel.legendItems\">\n <span\n class=\"legend-marker\"\n [style.backgroundColor]=\"item.color\"\n ></span>\n <span class=\"legend-label\">{{ item.label }}</span>\n <span class=\"legend-value\">{{ item.count | number }}</span>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"divider\" aria-hidden=\"true\"></div>\n\n <div class=\"table-section\">\n <div class=\"lic-table-header\">\n <span>License</span>\n <span>Required</span>\n </div>\n <div class=\"table-row\" *ngFor=\"let row of viewModel.rows\">\n <span>{{ row.label }}</span>\n <span>{{ row.value | number }}</span>\n </div>\n <div class=\"table-row total-row\">\n <span>Total</span>\n <span>{{ viewModel.totalRequired | number }}</span>\n </div>\n </div>\n </div>\n\n <ng-template #widgetState>\n <div class=\"state-message\" *ngIf=\"loading\">\n Loading license requirements\u2026\n </div>\n <div class=\"state-message error\" *ngIf=\"!loading && error\">\n Unable to load license requirements.\n </div>\n <div class=\"state-message\" *ngIf=\"!loading && !error && !viewModel\">\n No license data available.\n </div>\n </ng-template>\n </ng-container>\n</tk-card>\n", styles: ["@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400&display=swap\";:host{display:block;width:100%;box-sizing:border-box}.filter-select{font-family:Inter,Inter,sans-serif;font-size:14px;min-width:140px;border:1px solid #e5e7eb;border-radius:.5rem;padding:.5rem .75rem;background-color:#fff}.filter-select:hover{border-color:#d1d5db}:host ::ng-deep .filter-select.mat-mdc-select{border:1px solid #e5e7eb;border-radius:.5rem;background-color:#fff}:host ::ng-deep .filter-select.mat-mdc-select:hover{border-color:#d1d5db}:host ::ng-deep .filter-select.mat-mdc-select.mat-focused{border-color:#16a693}:host ::ng-deep .filter-select .mat-mdc-select-trigger{font-size:14px;padding:.5rem .75rem}:host ::ng-deep .filter-select .mat-mdc-select-value{color:#111827}:host ::ng-deep .filter-select .mat-mdc-select-arrow-wrapper{padding-left:.5rem}.widget-body{display:flex;gap:2.5rem;align-items:flex-start}.left-section{flex:2;display:flex;flex-direction:column;gap:1rem}.chart-section{display:flex;gap:1.5rem;align-items:center}.chart-wrapper{width:220px;min-height:220px;flex-shrink:0}.chart-wrapper apx-chart{width:220px!important;height:220px!important}.legend{display:flex;flex-direction:column;gap:.75rem}.legend-item{display:flex;align-items:center;gap:.5rem;font-family:Inter,Inter,sans-serif;font-size:14px}.legend-marker{width:14px;height:14px;border-radius:50%;display:inline-flex}.legend-label{color:#4b5563}.legend-value{margin-left:auto;font-weight:600;color:#111827}.divider{width:1px;min-height:200px;align-self:stretch;background:#e5e7eb}.table-section{flex:3;display:flex;flex-direction:column;gap:.75rem;font-family:Inter,Inter,sans-serif}.lic-table-header,.table-row{display:flex;justify-content:space-between;font-size:14px}.lic-table-header{font-weight:600;color:#6b7280;padding-bottom:.5rem;border-bottom:1px solid #e5e7eb}.table-row{color:#111827}.total-row{font-weight:700;margin-top:.5rem;padding-top:.5rem;border-top:1px solid #e5e7eb}.state-message{font-family:Inter,Inter,sans-serif;font-size:14px;color:#6b7280}.state-message.error{color:#b91c1c}@media (max-width: 960px){.widget-body{flex-direction:column}.divider{display:none}.chart-section{justify-content:space-between}}:host ::ng-deep .apexcharts-legend{display:none!important}\n"] }]
182
186
  }], propDecorators: { customerId: [{
183
187
  type: Input
184
188
  }], token: [{
185
189
  type: Input
186
190
  }] } });
187
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGljZW5jZXMtcmVxdWlyZW1lbnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL2NvbnRhY3QtY2VudGVyL2NjLXJlYWRpbmVzcy93aWRnZXRzL2xpY2VuY2VzLXJlcXVpcmVtZW50L2xpY2VuY2VzLXJlcXVpcmVtZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy9jb250YWN0LWNlbnRlci9jYy1yZWFkaW5lc3Mvd2lkZ2V0cy9saWNlbmNlcy1yZXF1aXJlbWVudC9saWNlbmNlcy1yZXF1aXJlbWVudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBK0MsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXRHLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7QUFnQ2hFLE1BQU0sYUFBYSxHQUFHO0lBQ3BCLFFBQVEsRUFBRSxTQUFTO0lBQ25CLE9BQU8sRUFBRSxTQUFTO0NBQ25CLENBQUM7QUFPRixNQUFNLE9BQU8sNEJBQTRCO0lBTHpDO1FBU21CLHVCQUFrQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBR2pFLGNBQVMsR0FBdUMsSUFBSSxDQUFDO1FBQ3JELFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUVkLFlBQU8sR0FBYSxDQUFDLEtBQUssRUFBRSx1QkFBdUIsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1FBQzNFLHlCQUFvQixHQUFHLENBQUMsQ0FBQztRQUVqQixZQUFPLEdBQW9DLElBQUksQ0FBQztLQWlMekQ7SUEvS0MsUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLFdBQVcsQ0FBQztZQUMvRCxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUNyRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDdEI7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQWE7UUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUM5RCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUVPLGFBQWE7UUFDbkIsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDckMsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO1FBRTlCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLDZCQUE2QixDQUFDLGlCQUFpQixDQUFDO2FBQ3pGLElBQUksQ0FDSCxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDakIsT0FBTyxDQUFDLEtBQUssQ0FBQyw0Q0FBNEMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNuRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNsQixPQUFPLEVBQUUsQ0FBNkIsRUFBRSxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDLEVBQ0YsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQ3JDO2FBQ0EsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDeEMsZ0RBQWdEO1lBQ2hELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDNUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDekI7aUJBQU0sSUFBSSxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDdEUsNkNBQTZDO2dCQUM3QyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQTRDLENBQUM7YUFDN0Q7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7YUFDckI7WUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLFlBQVksQ0FBQyxLQUFhO1FBQ2hDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7UUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdEIsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNqRSxPQUFPLENBQUMsR0FBRyxDQUFDLG9DQUFvQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxPQUFpQyxFQUFFLFdBQW1CO1FBQ2xGLE9BQU8sQ0FBQyxHQUFHLENBQUMsK0JBQStCLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUVuRixrRUFBa0U7UUFDbEUsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLDBCQUEwQixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEtBQUssUUFBUSxDQUFDLENBQUM7UUFDL0YsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLDBCQUEwQixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEtBQUssaUJBQWlCLENBQUMsQ0FBQztRQUV4RyxNQUFNLGtCQUFrQixHQUFHLFVBQVUsRUFBRSxVQUFVLElBQUksQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sZUFBZSxHQUFHLFVBQVUsRUFBRSxVQUFVLElBQUksQ0FBQyxDQUFDO1FBRXBELE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM3RSxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLHNDQUFzQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRW5GLGlDQUFpQztRQUNqQyxJQUFJLGFBQXFCLENBQUM7UUFDMUIsSUFBSSxZQUFvQixDQUFDO1FBQ3pCLElBQUksSUFBdUIsQ0FBQztRQUU1QixJQUFJLFdBQVcsS0FBSyxDQUFDLEVBQUU7WUFDckIsa0JBQWtCO1lBQ2xCLGFBQWEsR0FBRyxpQkFBaUIsR0FBRyxjQUFjLENBQUM7WUFDbkQsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLEdBQUcsZUFBZSxDQUFDO1lBQ3pELFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLEdBQUcsYUFBYSxDQUFDLENBQUM7WUFFeEQsSUFBSSxHQUFHO2dCQUNMLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRTtnQkFDN0QsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRTthQUN4RCxDQUFDO1NBQ0g7YUFBTSxJQUFJLFdBQVcsS0FBSyxDQUFDLEVBQUU7WUFDNUIsNkJBQTZCO1lBQzdCLGFBQWEsR0FBRyxpQkFBaUIsQ0FBQztZQUNsQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLEdBQUcsaUJBQWlCLENBQUMsQ0FBQztZQUVuRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSx1QkFBdUIsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1NBQ3hFO2FBQU07WUFDTCwwQkFBMEI7WUFDMUIsYUFBYSxHQUFHLGNBQWMsQ0FBQztZQUMvQixZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsZUFBZSxHQUFHLGNBQWMsQ0FBQyxDQUFDO1lBRTdELElBQUksR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO1NBQ2xFO1FBRUQsTUFBTSxhQUFhLEdBQUcsYUFBYSxHQUFHLFlBQVksQ0FBQztRQUVuRCxNQUFNLFdBQVcsR0FBd0I7WUFDdkM7Z0JBQ0UsS0FBSyxFQUFFLG1CQUFtQjtnQkFDMUIsS0FBSyxFQUFFLGFBQWE7Z0JBQ3BCLFVBQVUsRUFBRSxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pFLEtBQUssRUFBRSxhQUFhLENBQUMsUUFBUTthQUM5QjtZQUNEO2dCQUNFLEtBQUssRUFBRSxrQkFBa0I7Z0JBQ3pCLEtBQUssRUFBRSxZQUFZO2dCQUNuQixVQUFVLEVBQUUsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4RSxLQUFLLEVBQUUsYUFBYSxDQUFDLE9BQU87YUFDN0I7U0FDRixDQUFDO1FBRUYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDMUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFakMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXBFLE9BQU87WUFDTCxZQUFZLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQztZQUNqRCxXQUFXO1lBQ1gsSUFBSTtZQUNKLGFBQWE7U0FDZCxDQUFDO0lBQ0osQ0FBQztJQUVPLGlCQUFpQixDQUFDLFdBQWdDO1FBQ3hELE9BQU87WUFDTCxNQUFNLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDM0MsS0FBSyxFQUFFO2dCQUNMLElBQUksRUFBRSxPQUFPO2dCQUNiLE1BQU0sRUFBRSxHQUFHO2FBQ1o7WUFDRCxNQUFNLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDM0MsTUFBTSxFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQzNDLE1BQU0sRUFBRTtnQkFDTixJQUFJLEVBQUUsS0FBSzthQUNaO1lBQ0QsV0FBVyxFQUFFO2dCQUNYLEdBQUcsRUFBRTtvQkFDSCxLQUFLLEVBQUU7d0JBQ0wsSUFBSSxFQUFFLEtBQUs7cUJBQ1o7aUJBQ0Y7YUFDRjtZQUNELFVBQVUsRUFBRTtnQkFDVixPQUFPLEVBQUUsS0FBSzthQUNmO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxLQUFhO1FBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDcEIsT0FBTyxDQUFDLENBQUM7U0FDVjtRQUNELGdEQUFnRDtRQUNoRCxNQUFNLFVBQVUsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDO1FBQy9CLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzFDLENBQUM7OzBIQTlMVSw0QkFBNEI7OEdBQTVCLDRCQUE0QiwwSUM3Q3pDLGduRkEwRUE7NEZEN0JhLDRCQUE0QjtrQkFMeEMsU0FBUzsrQkFDRSx5QkFBeUI7OEJBSzFCLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgU2ltcGxlQ2hhbmdlcywgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBcGV4Q2hhcnQsIEFwZXhEYXRhTGFiZWxzLCBBcGV4TGVnZW5kLCBBcGV4Tm9uQXhpc0NoYXJ0U2VyaWVzLCBBcGV4UGxvdE9wdGlvbnMgfSBmcm9tICduZy1hcGV4Y2hhcnRzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbmFsaXplLCBvZiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDY1JlYWRpbmVzc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jYy1yZWFkaW5lc3Muc2VydmljZSc7XG5pbXBvcnQgeyBXZWJleExpY2Vuc2VVc2FnZVN1bW1hcnkgfSBmcm9tICcuLi8uLi90eXBlcy9jYy1yZWFkaW5lc3MnO1xuXG5pbnRlcmZhY2UgTGljZW5zZUxlZ2VuZEl0ZW0ge1xuICBsYWJlbDogc3RyaW5nO1xuICBjb3VudDogbnVtYmVyO1xuICBwZXJjZW50YWdlOiBudW1iZXI7XG4gIGNvbG9yOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBMaWNlbnNlVGFibGVSb3cge1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgTGljZW5zZUNoYXJ0T3B0aW9ucyB7XG4gIHNlcmllczogQXBleE5vbkF4aXNDaGFydFNlcmllcztcbiAgY2hhcnQ6IEFwZXhDaGFydDtcbiAgbGFiZWxzOiBzdHJpbmdbXTtcbiAgY29sb3JzOiBzdHJpbmdbXTtcbiAgbGVnZW5kOiBBcGV4TGVnZW5kO1xuICBwbG90T3B0aW9uczogQXBleFBsb3RPcHRpb25zO1xuICBkYXRhTGFiZWxzOiBBcGV4RGF0YUxhYmVscztcbn1cblxuaW50ZXJmYWNlIExpY2Vuc2VSZXF1aXJlbWVudFZpZXdNb2RlbCB7XG4gIGNoYXJ0T3B0aW9uczogTGljZW5zZUNoYXJ0T3B0aW9ucztcbiAgbGVnZW5kSXRlbXM6IExpY2Vuc2VMZWdlbmRJdGVtW107XG4gIHJvd3M6IExpY2Vuc2VUYWJsZVJvd1tdO1xuICB0b3RhbFJlcXVpcmVkOiBudW1iZXI7XG59XG5cbmNvbnN0IExFR0VORF9DT0xPUlMgPSB7XG4gIGV4aXN0aW5nOiAnIzE2QTY5MycsXG4gIG1pc3Npbmc6ICcjODA4MDgwJ1xufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2MtbGljZW5zZXMtcmVxdWlyZW1lbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vbGljZW5jZXMtcmVxdWlyZW1lbnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9saWNlbmNlcy1yZXF1aXJlbWVudC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIExpY2VuY2VzUmVxdWlyZW1lbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgY3VzdG9tZXJJZCE6IG51bWJlcjtcbiAgQElucHV0KCkgdG9rZW4hOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjY1JlYWRpbmVzc1NlcnZpY2UgPSBpbmplY3QoQ2NSZWFkaW5lc3NTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgdmlld01vZGVsOiBMaWNlbnNlUmVxdWlyZW1lbnRWaWV3TW9kZWwgfCBudWxsID0gbnVsbDtcbiAgbG9hZGluZyA9IGZhbHNlO1xuICBlcnJvciA9IGZhbHNlO1xuXG4gIGZpbHRlcnM6IHN0cmluZ1tdID0gWydBbGwnLCAnUHJvZmVzc2lvbmFsIGxpY2Vuc2VzJywgJ1dvcmtzcGFjZSBsaWNlbnNlcyddO1xuICBzZWxlY3RlZFN1bW1hcnlJbmRleCA9IDA7XG5cbiAgcHJpdmF0ZSBzdW1tYXJ5OiBXZWJleExpY2Vuc2VVc2FnZVN1bW1hcnkgfCBudWxsID0gbnVsbDtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRTdW1tYXJpZXMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICgoY2hhbmdlc1snY3VzdG9tZXJJZCddICYmICFjaGFuZ2VzWydjdXN0b21lcklkJ10uZmlyc3RDaGFuZ2UpIHx8XG4gICAgICAoY2hhbmdlc1sndG9rZW4nXSAmJiAhY2hhbmdlc1sndG9rZW4nXS5maXJzdENoYW5nZSkpIHtcbiAgICAgIHRoaXMubG9hZFN1bW1hcmllcygpO1xuICAgIH1cbiAgfVxuXG4gIG9uRmlsdGVyQ2hhbmdlKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIWlzTmFOKGluZGV4KSAmJiBpbmRleCA+PSAwICYmIGluZGV4IDwgdGhpcy5maWx0ZXJzLmxlbmd0aCkge1xuICAgICAgdGhpcy5zZWxlY3RGaWx0ZXIoaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZFN1bW1hcmllcygpOiB2b2lkIHtcbiAgICBjb25zdCBudW1lcmljQ3VzdG9tZXJJZCA9IE51bWJlcih0aGlzLmN1c3RvbWVySWQpO1xuICAgIGlmICghbnVtZXJpY0N1c3RvbWVySWQgfHwgIXRoaXMudG9rZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuZXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLnZpZXdNb2RlbCA9IG51bGw7XG4gICAgdGhpcy5zZWxlY3RlZFN1bW1hcnlJbmRleCA9IDA7XG5cbiAgICB0aGlzLmNjUmVhZGluZXNzU2VydmljZS5zZXRUb2tlbih0aGlzLnRva2VuKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuY2NSZWFkaW5lc3NTZXJ2aWNlLmZldGNoV2ViZXhMaWNlbnNlVXNhZ2VTdW1tYXJ5KG51bWVyaWNDdXN0b21lcklkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuYWJsZSB0byBsb2FkIFdlYmV4IGxpY2Vuc2UgdXNhZ2Ugc3VtbWFyeScsIGVycm9yKTtcbiAgICAgICAgICB0aGlzLmVycm9yID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gb2Y8V2ViZXhMaWNlbnNlVXNhZ2VTdW1tYXJ5W10+KFtdKTtcbiAgICAgICAgfSksXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMubG9hZGluZyA9IGZhbHNlKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShpdGVtcyA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdSYXcgQVBJIHJlc3BvbnNlOicsIGl0ZW1zKTtcbiAgICAgICAgLy8gSGFuZGxlIGJvdGggYXJyYXkgYW5kIHNpbmdsZSBvYmplY3QgcmVzcG9uc2VzXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW1zKSAmJiBpdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5zdW1tYXJ5ID0gaXRlbXNbMF07XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbXMgJiYgdHlwZW9mIGl0ZW1zID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICAgICAgICAvLyBJZiBzaW5nbGUgb2JqZWN0IHJldHVybmVkLCB1c2UgaXQgZGlyZWN0bHlcbiAgICAgICAgICB0aGlzLnN1bW1hcnkgPSBpdGVtcyBhcyB1bmtub3duIGFzIFdlYmV4TGljZW5zZVVzYWdlU3VtbWFyeTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN1bW1hcnkgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coJ1Byb2Nlc3NlZCBzdW1tYXJ5OicsIHRoaXMuc3VtbWFyeSk7XG4gICAgICAgIHRoaXMuc2VsZWN0RmlsdGVyKDApO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdEZpbHRlcihpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFN1bW1hcnlJbmRleCA9IGluZGV4O1xuICAgIGlmICghdGhpcy5zdW1tYXJ5KSB7XG4gICAgICB0aGlzLnZpZXdNb2RlbCA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudmlld01vZGVsID0gdGhpcy5tYXBTdW1tYXJ5VG9WaWV3TW9kZWwodGhpcy5zdW1tYXJ5LCBpbmRleCk7XG4gICAgY29uc29sZS5sb2coJ0NyZWF0ZWQgdmlld01vZGVsIGZvciBmaWx0ZXIgaW5kZXgnLCBpbmRleCwgJzonLCB0aGlzLnZpZXdNb2RlbCk7XG4gIH1cblxuICBwcml2YXRlIG1hcFN1bW1hcnlUb1ZpZXdNb2RlbChzdW1tYXJ5OiBXZWJleExpY2Vuc2VVc2FnZVN1bW1hcnksIGZpbHRlckluZGV4OiBudW1iZXIpOiBMaWNlbnNlUmVxdWlyZW1lbnRWaWV3TW9kZWwge1xuICAgIGNvbnNvbGUubG9nKCdNYXBwaW5nIHN1bW1hcnkgdG8gdmlld01vZGVsOicsIHN1bW1hcnksICdmaWx0ZXJJbmRleDonLCBmaWx0ZXJJbmRleCk7XG5cbiAgICAvLyBFeHRyYWN0IGRhdGEgZnJvbSB3ZWJleFJlYWRpbmVzc0xpY2Vuc2VTdGF0cyBhbmQgbGljZW5zZSBjb3VudHNcbiAgICBjb25zdCBwZXJzb25TdGF0ID0gc3VtbWFyeS53ZWJleFJlYWRpbmVzc0xpY2Vuc2VTdGF0cz8uZmluZChzdGF0ID0+IHN0YXQuZmVhdHVyZSA9PT0gJ1BFUlNPTicpO1xuICAgIGNvbnN0IGRldmljZVN0YXQgPSBzdW1tYXJ5LndlYmV4UmVhZGluZXNzTGljZW5zZVN0YXRzPy5maW5kKHN0YXQgPT4gc3RhdC5mZWF0dXJlID09PSAnT1JQSEFORURfREVWSUNFJyk7XG5cbiAgICBjb25zdCBwcm9mZXNzaW9uYWxOZWVkZWQgPSBwZXJzb25TdGF0Py50b3RhbENvdW50ID8/IDA7XG4gICAgY29uc3Qgd29ya3NwYWNlTmVlZGVkID0gZGV2aWNlU3RhdD8udG90YWxDb3VudCA/PyAwO1xuXG4gICAgY29uc3QgcHJvZmVzc2lvbmFsT3duZWQgPSBOdW1iZXIoc3VtbWFyeS50b3RhbFByb2Zlc3Npb25hbExpY2Vuc2VDb3VudCA/PyAwKTtcbiAgICBjb25zdCB3b3Jrc3BhY2VPd25lZCA9IE51bWJlcihzdW1tYXJ5LnRvdGFsV29ya3NwYWNlUHJvZmVzc2lvbmFsTGljZW5zZUNvdW50ID8/IDApO1xuXG4gICAgLy8gRmlsdGVyIGRhdGEgYmFzZWQgb24gc2VsZWN0aW9uXG4gICAgbGV0IGV4aXN0aW5nQ291bnQ6IG51bWJlcjtcbiAgICBsZXQgbWlzc2luZ0NvdW50OiBudW1iZXI7XG4gICAgbGV0IHJvd3M6IExpY2Vuc2VUYWJsZVJvd1tdO1xuXG4gICAgaWYgKGZpbHRlckluZGV4ID09PSAwKSB7XG4gICAgICAvLyBBbGwgLSBzaG93IGJvdGhcbiAgICAgIGV4aXN0aW5nQ291bnQgPSBwcm9mZXNzaW9uYWxPd25lZCArIHdvcmtzcGFjZU93bmVkO1xuICAgICAgY29uc3QgdG90YWxOZWVkZWQgPSBwcm9mZXNzaW9uYWxOZWVkZWQgKyB3b3Jrc3BhY2VOZWVkZWQ7XG4gICAgICBtaXNzaW5nQ291bnQgPSBNYXRoLm1heCgwLCB0b3RhbE5lZWRlZCAtIGV4aXN0aW5nQ291bnQpO1xuXG4gICAgICByb3dzID0gW1xuICAgICAgICB7IGxhYmVsOiAnUHJvZmVzc2lvbmFsIGxpY2Vuc2VzJywgdmFsdWU6IHByb2Zlc3Npb25hbE5lZWRlZCB9LFxuICAgICAgICB7IGxhYmVsOiAnV29ya3NwYWNlIGxpY2Vuc2VzJywgdmFsdWU6IHdvcmtzcGFjZU5lZWRlZCB9XG4gICAgICBdO1xuICAgIH0gZWxzZSBpZiAoZmlsdGVySW5kZXggPT09IDEpIHtcbiAgICAgIC8vIFByb2Zlc3Npb25hbCBsaWNlbnNlcyBvbmx5XG4gICAgICBleGlzdGluZ0NvdW50ID0gcHJvZmVzc2lvbmFsT3duZWQ7XG4gICAgICBtaXNzaW5nQ291bnQgPSBNYXRoLm1heCgwLCBwcm9mZXNzaW9uYWxOZWVkZWQgLSBwcm9mZXNzaW9uYWxPd25lZCk7XG5cbiAgICAgIHJvd3MgPSBbeyBsYWJlbDogJ1Byb2Zlc3Npb25hbCBsaWNlbnNlcycsIHZhbHVlOiBwcm9mZXNzaW9uYWxOZWVkZWQgfV07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFdvcmtzcGFjZSBsaWNlbnNlcyBvbmx5XG4gICAgICBleGlzdGluZ0NvdW50ID0gd29ya3NwYWNlT3duZWQ7XG4gICAgICBtaXNzaW5nQ291bnQgPSBNYXRoLm1heCgwLCB3b3Jrc3BhY2VOZWVkZWQgLSB3b3Jrc3BhY2VPd25lZCk7XG5cbiAgICAgIHJvd3MgPSBbeyBsYWJlbDogJ1dvcmtzcGFjZSBsaWNlbnNlcycsIHZhbHVlOiB3b3Jrc3BhY2VOZWVkZWQgfV07XG4gICAgfVxuXG4gICAgY29uc3QgdG90YWxMaWNlbnNlcyA9IGV4aXN0aW5nQ291bnQgKyBtaXNzaW5nQ291bnQ7XG5cbiAgICBjb25zdCBsZWdlbmRJdGVtczogTGljZW5zZUxlZ2VuZEl0ZW1bXSA9IFtcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdFeGlzdGluZyBsaWNlbnNlcycsXG4gICAgICAgIGNvdW50OiBleGlzdGluZ0NvdW50LFxuICAgICAgICBwZXJjZW50YWdlOiB0b3RhbExpY2Vuc2VzID4gMCA/IChleGlzdGluZ0NvdW50IC8gdG90YWxMaWNlbnNlcykgKiAxMDAgOiAwLFxuICAgICAgICBjb2xvcjogTEVHRU5EX0NPTE9SUy5leGlzdGluZ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdNaXNzaW5nIGxpY2Vuc2VzJyxcbiAgICAgICAgY291bnQ6IG1pc3NpbmdDb3VudCxcbiAgICAgICAgcGVyY2VudGFnZTogdG90YWxMaWNlbnNlcyA+IDAgPyAobWlzc2luZ0NvdW50IC8gdG90YWxMaWNlbnNlcykgKiAxMDAgOiAwLFxuICAgICAgICBjb2xvcjogTEVHRU5EX0NPTE9SUy5taXNzaW5nXG4gICAgICB9XG4gICAgXTtcblxuICAgIGNvbnNvbGUubG9nKCdMZWdlbmQgaXRlbXM6JywgbGVnZW5kSXRlbXMpO1xuICAgIGNvbnNvbGUubG9nKCdUYWJsZSByb3dzOicsIHJvd3MpO1xuXG4gICAgY29uc3QgdG90YWxSZXF1aXJlZCA9IHJvd3MucmVkdWNlKChhY2MsIHJvdykgPT4gYWNjICsgcm93LnZhbHVlLCAwKTtcblxuICAgIHJldHVybiB7XG4gICAgICBjaGFydE9wdGlvbnM6IHRoaXMuYnVpbGRDaGFydE9wdGlvbnMobGVnZW5kSXRlbXMpLFxuICAgICAgbGVnZW5kSXRlbXMsXG4gICAgICByb3dzLFxuICAgICAgdG90YWxSZXF1aXJlZFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQ2hhcnRPcHRpb25zKGxlZ2VuZEl0ZW1zOiBMaWNlbnNlTGVnZW5kSXRlbVtdKTogTGljZW5zZUNoYXJ0T3B0aW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlcmllczogbGVnZW5kSXRlbXMubWFwKGl0ZW0gPT4gaXRlbS5jb3VudCksXG4gICAgICBjaGFydDoge1xuICAgICAgICB0eXBlOiAnZG9udXQnLFxuICAgICAgICBoZWlnaHQ6IDIyMFxuICAgICAgfSxcbiAgICAgIGxhYmVsczogbGVnZW5kSXRlbXMubWFwKGl0ZW0gPT4gaXRlbS5sYWJlbCksXG4gICAgICBjb2xvcnM6IGxlZ2VuZEl0ZW1zLm1hcChpdGVtID0+IGl0ZW0uY29sb3IpLFxuICAgICAgbGVnZW5kOiB7XG4gICAgICAgIHNob3c6IGZhbHNlXG4gICAgICB9LFxuICAgICAgcGxvdE9wdGlvbnM6IHtcbiAgICAgICAgcGllOiB7XG4gICAgICAgICAgZG9udXQ6IHtcbiAgICAgICAgICAgIHNpemU6ICc3NSUnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGF0YUxhYmVsczoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZVBlcmNlbnRhZ2UodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKCFpc0Zpbml0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICAvLyBDb252ZXJ0IGRlY2ltYWwgdG8gcGVyY2VudGFnZSAoMC45NDg3IOKGkiA5NC45KVxuICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSB2YWx1ZSAqIDEwMDtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChwZXJjZW50YWdlICogMTApIC8gMTA7XG4gIH1cbn1cbiIsIjx0ay1jYXJkIHRpdGxlPVwiTGljZW5zZXMgcmVxdWlyZW1lbnRcIj5cbiAgPG5nLWNvbnRhaW5lciBuZ1Byb2plY3RBcz1cImNhcmQtY29udGVudFwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwid2lkZ2V0LWJvZHlcIlxuICAgICAgKm5nSWY9XCIhbG9hZGluZyAmJiAhZXJyb3IgJiYgdmlld01vZGVsOyBlbHNlIHdpZGdldFN0YXRlXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdC1zZWN0aW9uXCI+XG4gICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgWyh2YWx1ZSldPVwic2VsZWN0ZWRTdW1tYXJ5SW5kZXhcIlxuICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25GaWx0ZXJDaGFuZ2UoJGV2ZW50LnZhbHVlKVwiXG4gICAgICAgICAgY2xhc3M9XCJmaWx0ZXItc2VsZWN0XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyczsgaW5kZXggYXMgaVwiIFt2YWx1ZV09XCJpXCI+XG4gICAgICAgICAgICB7eyBvcHRpb24gfX1cbiAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbWF0LXNlbGVjdD5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2hhcnQtc2VjdGlvblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGFydC13cmFwcGVyXCI+XG4gICAgICAgICAgICA8YXB4LWNoYXJ0XG4gICAgICAgICAgICAgIFtzZXJpZXNdPVwidmlld01vZGVsLmNoYXJ0T3B0aW9ucy5zZXJpZXNcIlxuICAgICAgICAgICAgICBbY2hhcnRdPVwidmlld01vZGVsLmNoYXJ0T3B0aW9ucy5jaGFydFwiXG4gICAgICAgICAgICAgIFtsYWJlbHNdPVwidmlld01vZGVsLmNoYXJ0T3B0aW9ucy5sYWJlbHNcIlxuICAgICAgICAgICAgICBbY29sb3JzXT1cInZpZXdNb2RlbC5jaGFydE9wdGlvbnMuY29sb3JzXCJcbiAgICAgICAgICAgICAgW2xlZ2VuZF09XCJ2aWV3TW9kZWwuY2hhcnRPcHRpb25zLmxlZ2VuZFwiXG4gICAgICAgICAgICAgIFtwbG90T3B0aW9uc109XCJ2aWV3TW9kZWwuY2hhcnRPcHRpb25zLnBsb3RPcHRpb25zXCJcbiAgICAgICAgICAgICAgW2RhdGFMYWJlbHNdPVwidmlld01vZGVsLmNoYXJ0T3B0aW9ucy5kYXRhTGFiZWxzXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvYXB4LWNoYXJ0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtaXRlbVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIHZpZXdNb2RlbC5sZWdlbmRJdGVtc1wiPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwibGVnZW5kLW1hcmtlclwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJpdGVtLmNvbG9yXCJcbiAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsZWdlbmQtbGFiZWxcIj57eyBpdGVtLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxlZ2VuZC12YWx1ZVwiPnt7IGl0ZW0uY291bnQgfCBudW1iZXIgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImRpdmlkZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXNlY3Rpb25cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxpYy10YWJsZS1oZWFkZXJcIj5cbiAgICAgICAgICA8c3Bhbj5MaWNlbnNlPC9zcGFuPlxuICAgICAgICAgIDxzcGFuPlJlcXVpcmVkPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJvd1wiICpuZ0Zvcj1cImxldCByb3cgb2Ygdmlld01vZGVsLnJvd3NcIj5cbiAgICAgICAgICA8c3Bhbj57eyByb3cubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4+e3sgcm93LnZhbHVlIHwgbnVtYmVyIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJvdyB0b3RhbC1yb3dcIj5cbiAgICAgICAgICA8c3Bhbj5Ub3RhbDwvc3Bhbj5cbiAgICAgICAgICA8c3Bhbj57eyB2aWV3TW9kZWwudG90YWxSZXF1aXJlZCB8IG51bWJlciB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy10ZW1wbGF0ZSAjd2lkZ2V0U3RhdGU+XG4gICAgICA8ZGl2IGNsYXNzPVwic3RhdGUtbWVzc2FnZVwiICpuZ0lmPVwibG9hZGluZ1wiPlxuICAgICAgICBMb2FkaW5nIGxpY2Vuc2UgcmVxdWlyZW1lbnRz4oCmXG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdGF0ZS1tZXNzYWdlIGVycm9yXCIgKm5nSWY9XCIhbG9hZGluZyAmJiBlcnJvclwiPlxuICAgICAgICBVbmFibGUgdG8gbG9hZCBsaWNlbnNlIHJlcXVpcmVtZW50cy5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInN0YXRlLW1lc3NhZ2VcIiAqbmdJZj1cIiFsb2FkaW5nICYmICFlcnJvciAmJiAhdmlld01vZGVsXCI+XG4gICAgICAgIE5vIGxpY2Vuc2UgZGF0YSBhdmFpbGFibGUuXG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvdGstY2FyZD5cbiJdfQ==
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGljZW5jZXMtcmVxdWlyZW1lbnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL2NvbnRhY3QtY2VudGVyL2NjLXJlYWRpbmVzcy93aWRnZXRzL2xpY2VuY2VzLXJlcXVpcmVtZW50L2xpY2VuY2VzLXJlcXVpcmVtZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy9jb250YWN0LWNlbnRlci9jYy1yZWFkaW5lc3Mvd2lkZ2V0cy9saWNlbmNlcy1yZXF1aXJlbWVudC9saWNlbmNlcy1yZXF1aXJlbWVudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBK0MsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXRHLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7QUFpQ2hFLE1BQU0sYUFBYSxHQUFHO0lBQ3BCLFFBQVEsRUFBRSxTQUFTO0lBQ25CLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLEtBQUssRUFBRSxTQUFTO0NBQ2pCLENBQUM7QUFPRixNQUFNLE9BQU8sNEJBQTRCO0lBTHpDO1FBU21CLHVCQUFrQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBR2pFLGNBQVMsR0FBdUMsSUFBSSxDQUFDO1FBQ3JELFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUVkLFlBQU8sR0FBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLHlCQUFvQixHQUFHLENBQUMsQ0FBQztRQUVqQixZQUFPLEdBQW9DLElBQUksQ0FBQztL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V0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVyRixPQUFPO1lBQ0wsTUFBTTtZQUNOLEtBQUssRUFBRTtnQkFDTCxJQUFJLEVBQUUsT0FBTztnQkFDYixNQUFNLEVBQUUsR0FBRzthQUNaO1lBQ0QsTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNLEVBQUU7Z0JBQ04sSUFBSSxFQUFFLEtBQUs7YUFDWjtZQUNELFdBQVcsRUFBRTtnQkFDWCxHQUFHLEVBQUU7b0JBQ0gsS0FBSyxFQUFFO3dCQUNMLElBQUksRUFBRSxLQUFLO3FCQUNaO2lCQUNGO2FBQ0Y7WUFDRCxVQUFVLEVBQUU7Z0JBQ1YsT0FBTyxFQUFFLEtBQUs7YUFDZjtZQUNELE9BQU8sRUFBRTtnQkFDUCxPQUFPLEVBQUUsQ0FBQyxPQUFPO2FBQ2xCO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxLQUFhO1FBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDcEIsT0FBTyxDQUFDLENBQUM7U0FDVjtRQUNELGdEQUFnRDtRQUNoRCxNQUFNLFVBQVUsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDO1FBQy9CLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzFDLENBQUM7OzBIQS9MVSw0QkFBNEI7OEdBQTVCLDRCQUE0QiwwSUMvQ3pDLDRxRkEyRUE7NEZENUJhLDRCQUE0QjtrQkFMeEMsU0FBUzsrQkFDRSx5QkFBeUI7OEJBSzFCLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgU2ltcGxlQ2hhbmdlcywgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBcGV4Q2hhcnQsIEFwZXhEYXRhTGFiZWxzLCBBcGV4TGVnZW5kLCBBcGV4Tm9uQXhpc0NoYXJ0U2VyaWVzLCBBcGV4UGxvdE9wdGlvbnMsIEFwZXhUb29sdGlwIH0gZnJvbSAnbmctYXBleGNoYXJ0cyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaW5hbGl6ZSwgb2YsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ2NSZWFkaW5lc3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2MtcmVhZGluZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgV2ViZXhMaWNlbnNlVXNhZ2VTdW1tYXJ5IH0gZnJvbSAnLi4vLi4vdHlwZXMvY2MtcmVhZGluZXNzJztcblxuaW50ZXJmYWNlIExpY2Vuc2VMZWdlbmRJdGVtIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgY291bnQ6IG51bWJlcjtcbiAgcGVyY2VudGFnZTogbnVtYmVyO1xuICBjb2xvcjogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgTGljZW5zZVRhYmxlUm93IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIExpY2Vuc2VDaGFydE9wdGlvbnMge1xuICBzZXJpZXM6IEFwZXhOb25BeGlzQ2hhcnRTZXJpZXM7XG4gIGNoYXJ0OiBBcGV4Q2hhcnQ7XG4gIGxhYmVsczogc3RyaW5nW107XG4gIGNvbG9yczogc3RyaW5nW107XG4gIGxlZ2VuZDogQXBleExlZ2VuZDtcbiAgcGxvdE9wdGlvbnM6IEFwZXhQbG90T3B0aW9ucztcbiAgZGF0YUxhYmVsczogQXBleERhdGFMYWJlbHM7XG4gIHRvb2x0aXA6IEFwZXhUb29sdGlwO1xufVxuXG5pbnRlcmZhY2UgTGljZW5zZVJlcXVpcmVtZW50Vmlld01vZGVsIHtcbiAgY2hhcnRPcHRpb25zOiBMaWNlbnNlQ2hhcnRPcHRpb25zO1xuICBsZWdlbmRJdGVtczogTGljZW5zZUxlZ2VuZEl0ZW1bXTtcbiAgcm93czogTGljZW5zZVRhYmxlUm93W107XG4gIHRvdGFsUmVxdWlyZWQ6IG51bWJlcjtcbn1cblxuY29uc3QgTEVHRU5EX0NPTE9SUyA9IHtcbiAgZXhpc3Rpbmc6ICcjMTZBNjkzJyxcbiAgbWlzc2luZzogJyM4MDgwODAnLFxuICBlbXB0eTogJyNFMEUwRTAnXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjYy1saWNlbnNlcy1yZXF1aXJlbWVudCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9saWNlbmNlcy1yZXF1aXJlbWVudC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2xpY2VuY2VzLXJlcXVpcmVtZW50LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTGljZW5jZXNSZXF1aXJlbWVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBjdXN0b21lcklkITogbnVtYmVyO1xuICBASW5wdXQoKSB0b2tlbiE6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IGNjUmVhZGluZXNzU2VydmljZSA9IGluamVjdChDY1JlYWRpbmVzc1NlcnZpY2UpO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICB2aWV3TW9kZWw6IExpY2Vuc2VSZXF1aXJlbWVudFZpZXdNb2RlbCB8IG51bGwgPSBudWxsO1xuICBsb2FkaW5nID0gZmFsc2U7XG4gIGVycm9yID0gZmFsc2U7XG5cbiAgZmlsdGVyczogc3RyaW5nW10gPSBbJ0FsbCddO1xuICBzZWxlY3RlZFN1bW1hcnlJbmRleCA9IDA7XG5cbiAgcHJpdmF0ZSBzdW1tYXJ5OiBXZWJleExpY2Vuc2VVc2FnZVN1bW1hcnkgfCBudWxsID0gbnVsbDtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRTdW1tYXJpZXMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICgoY2hhbmdlc1snY3VzdG9tZXJJZCddICYmICFjaGFuZ2VzWydjdXN0b21lcklkJ10uZmlyc3RDaGFuZ2UpIHx8XG4gICAgICAoY2hhbmdlc1sndG9rZW4nXSAmJiAhY2hhbmdlc1sndG9rZW4nXS5maXJzdENoYW5nZSkpIHtcbiAgICAgIHRoaXMubG9hZFN1bW1hcmllcygpO1xuICAgIH1cbiAgfVxuXG4gIG9uRmlsdGVyQ2hhbmdlKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIWlzTmFOKGluZGV4KSAmJiBpbmRleCA+PSAwICYmIGluZGV4IDwgdGhpcy5maWx0ZXJzLmxlbmd0aCkge1xuICAgICAgdGhpcy5zZWxlY3RGaWx0ZXIoaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZFN1bW1hcmllcygpOiB2b2lkIHtcbiAgICBjb25zdCBudW1lcmljQ3VzdG9tZXJJZCA9IE51bWJlcih0aGlzLmN1c3RvbWVySWQpO1xuICAgIGlmICghbnVtZXJpY0N1c3RvbWVySWQgfHwgIXRoaXMudG9rZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuZXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLnZpZXdNb2RlbCA9IG51bGw7XG4gICAgdGhpcy5zZWxlY3RlZFN1bW1hcnlJbmRleCA9IDA7XG5cbiAgICB0aGlzLmNjUmVhZGluZXNzU2VydmljZS5zZXRUb2tlbih0aGlzLnRva2VuKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuY2NSZWFkaW5lc3NTZXJ2aWNlLmZldGNoV2ViZXhMaWNlbnNlVXNhZ2VTdW1tYXJ5KG51bWVyaWNDdXN0b21lcklkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuYWJsZSB0byBsb2FkIFdlYmV4IGxpY2Vuc2UgdXNhZ2Ugc3VtbWFyeScsIGVycm9yKTtcbiAgICAgICAgICB0aGlzLmVycm9yID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gb2Y8V2ViZXhMaWNlbnNlVXNhZ2VTdW1tYXJ5W10+KFtdKTtcbiAgICAgICAgfSksXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMubG9hZGluZyA9IGZhbHNlKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShpdGVtcyA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdSYXcgQVBJIHJlc3BvbnNlOicsIGl0ZW1zKTtcbiAgICAgICAgLy8gSGFuZGxlIGJvdGggYXJyYXkgYW5kIHNpbmdsZSBvYmplY3QgcmVzcG9uc2VzXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW1zKSAmJiBpdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5zdW1tYXJ5ID0gaXRlbXNbMF07XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbXMgJiYgdHlwZW9mIGl0ZW1zID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICAgICAgICAvLyBJZiBzaW5nbGUgb2JqZWN0IHJldHVybmVkLCB1c2UgaXQgZGlyZWN0bHlcbiAgICAgICAgICB0aGlzLnN1bW1hcnkgPSBpdGVtcyBhcyB1bmtub3duIGFzIFdlYmV4TGljZW5zZVVzYWdlU3VtbWFyeTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN1bW1hcnkgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQnVpbGQgZmlsdGVycyBkeW5hbWljYWxseSBmcm9tIGxpY2Vuc2UgbmFtZXNcbiAgICAgICAgaWYgKHRoaXMuc3VtbWFyeT8ubGljZW5zZXM/Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuZmlsdGVycyA9IFsnQWxsJywgLi4udGhpcy5zdW1tYXJ5LmxpY2Vuc2VzLm1hcChsID0+IGwubmFtZSldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZmlsdGVycyA9IFsnQWxsJ107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZygnUHJvY2Vzc2VkIHN1bW1hcnk6JywgdGhpcy5zdW1tYXJ5KTtcbiAgICAgICAgdGhpcy5zZWxlY3RGaWx0ZXIoMCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2VsZWN0RmlsdGVyKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkU3VtbWFyeUluZGV4ID0gaW5kZXg7XG4gICAgaWYgKCF0aGlzLnN1bW1hcnkpIHtcbiAgICAgIHRoaXMudmlld01vZGVsID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy52aWV3TW9kZWwgPSB0aGlzLm1hcFN1bW1hcnlUb1ZpZXdNb2RlbCh0aGlzLnN1bW1hcnksIGluZGV4KTtcbiAgICBjb25zb2xlLmxvZygnQ3JlYXRlZCB2aWV3TW9kZWwgZm9yIGZpbHRlciBpbmRleCcsIGluZGV4LCAnOicsIHRoaXMudmlld01vZGVsKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwU3VtbWFyeVRvVmlld01vZGVsKHN1bW1hcnk6IFdlYmV4TGljZW5zZVVzYWdlU3VtbWFyeSwgZmlsdGVySW5kZXg6IG51bWJlcik6IExpY2Vuc2VSZXF1aXJlbWVudFZpZXdNb2RlbCB7XG4gICAgY29uc29sZS5sb2coJ01hcHBpbmcgc3VtbWFyeSB0byB2aWV3TW9kZWw6Jywgc3VtbWFyeSwgJ2ZpbHRlckluZGV4OicsIGZpbHRlckluZGV4KTtcblxuICAgIGNvbnN0IGxpY2Vuc2VzID0gc3VtbWFyeS5saWNlbnNlcyB8fCBbXTtcblxuICAgIGxldCBleGlzdGluZ0NvdW50OiBudW1iZXI7XG4gICAgbGV0IG1pc3NpbmdDb3VudDogbnVtYmVyO1xuICAgIGxldCByb3dzOiBMaWNlbnNlVGFibGVSb3dbXTtcblxuICAgIGlmIChmaWx0ZXJJbmRleCA9PT0gMCkge1xuICAgICAgLy8gXCJBbGxcIiBmaWx0ZXI6IHNob3cgdG90YWxFeGlzdGluZ0xpY2Vuc2VzIHZzIHRvdGFsIGNvbnN1bWVkVW5pdHNcbiAgICAgIGV4aXN0aW5nQ291bnQgPSBzdW1tYXJ5LnRvdGFsRXhpc3RpbmdMaWNlbnNlcyA/PyAwO1xuICAgICAgbWlzc2luZ0NvdW50ID0gbGljZW5zZXMucmVkdWNlKChhY2MsIGwpID0+IGFjYyArIGwuY29uc3VtZWRVbml0cywgMCk7XG4gICAgICByb3dzID0gbGljZW5zZXMubWFwKGwgPT4gKHtcbiAgICAgICAgbGFiZWw6IGwubmFtZSxcbiAgICAgICAgdmFsdWU6IGwuY29uc3VtZWRVbml0c1xuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTcGVjaWZpYyBsaWNlbnNlIGZpbHRlcjogc2hvdyAwIGV4aXN0aW5nIHZzIGNvbnN1bWVkVW5pdHMgZm9yIHRoYXQgbGljZW5zZVxuICAgICAgY29uc3Qgc2VsZWN0ZWRMaWNlbnNlID0gbGljZW5zZXNbZmlsdGVySW5kZXggLSAxXTtcbiAgICAgIGV4aXN0aW5nQ291bnQgPSAwO1xuICAgICAgbWlzc2luZ0NvdW50ID0gc2VsZWN0ZWRMaWNlbnNlPy5jb25zdW1lZFVuaXRzID8/IDA7XG4gICAgICByb3dzID0gc2VsZWN0ZWRMaWNlbnNlID8gW3sgbGFiZWw6IHNlbGVjdGVkTGljZW5zZS5uYW1lLCB2YWx1ZTogc2VsZWN0ZWRMaWNlbnNlLmNvbnN1bWVkVW5pdHMgfV0gOiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCB0b3RhbExpY2Vuc2VzID0gZXhpc3RpbmdDb3VudCArIG1pc3NpbmdDb3VudDtcblxuICAgIGNvbnN0IGxlZ2VuZEl0ZW1zOiBMaWNlbnNlTGVnZW5kSXRlbVtdID0gW1xuICAgICAge1xuICAgICAgICBsYWJlbDogJ0V4aXN0aW5nIGxpY2Vuc2VzJyxcbiAgICAgICAgY291bnQ6IGV4aXN0aW5nQ291bnQsXG4gICAgICAgIHBlcmNlbnRhZ2U6IHRvdGFsTGljZW5zZXMgPiAwID8gKGV4aXN0aW5nQ291bnQgLyB0b3RhbExpY2Vuc2VzKSAqIDEwMCA6IDAsXG4gICAgICAgIGNvbG9yOiBMRUdFTkRfQ09MT1JTLmV4aXN0aW5nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ01pc3NpbmcgbGljZW5zZXMnLFxuICAgICAgICBjb3VudDogbWlzc2luZ0NvdW50LFxuICAgICAgICBwZXJjZW50YWdlOiB0b3RhbExpY2Vuc2VzID4gMCA/IChtaXNzaW5nQ291bnQgLyB0b3RhbExpY2Vuc2VzKSAqIDEwMCA6IDAsXG4gICAgICAgIGNvbG9yOiBMRUdFTkRfQ09MT1JTLm1pc3NpbmdcbiAgICAgIH1cbiAgICBdO1xuXG4gICAgY29uc29sZS5sb2coJ0xlZ2VuZCBpdGVtczonLCBsZWdlbmRJdGVtcyk7XG4gICAgY29uc29sZS5sb2coJ1RhYmxlIHJvd3M6Jywgcm93cyk7XG5cbiAgICBjb25zdCB0b3RhbFJlcXVpcmVkID0gZXhpc3RpbmdDb3VudCArIG1pc3NpbmdDb3VudDtcblxuICAgIHJldHVybiB7XG4gICAgICBjaGFydE9wdGlvbnM6IHRoaXMuYnVpbGRDaGFydE9wdGlvbnMobGVnZW5kSXRlbXMpLFxuICAgICAgbGVnZW5kSXRlbXMsXG4gICAgICByb3dzLFxuICAgICAgdG90YWxSZXF1aXJlZFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQ2hhcnRPcHRpb25zKGxlZ2VuZEl0ZW1zOiBMaWNlbnNlTGVnZW5kSXRlbVtdKTogTGljZW5zZUNoYXJ0T3B0aW9ucyB7XG4gICAgY29uc3QgdG90YWxDb3VudCA9IGxlZ2VuZEl0ZW1zLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiBhY2MgKyBpdGVtLmNvdW50LCAwKTtcbiAgICBjb25zdCBpc0VtcHR5ID0gdG90YWxDb3VudCA9PT0gMDtcblxuICAgIC8vIEZvciBlbXB0eSBjaGFydCwgc2hvdyBhIGZ1bGwgbGlnaHQgZ3JheSBkb251dFxuICAgIGNvbnN0IHNlcmllcyA9IGlzRW1wdHkgPyBbMV0gOiBsZWdlbmRJdGVtcy5tYXAoaXRlbSA9PiBpdGVtLmNvdW50KTtcbiAgICBjb25zdCBsYWJlbHMgPSBpc0VtcHR5ID8gWydObyBkYXRhJ10gOiBsZWdlbmRJdGVtcy5tYXAoaXRlbSA9PiBpdGVtLmxhYmVsKTtcbiAgICBjb25zdCBjb2xvcnMgPSBpc0VtcHR5ID8gW0xFR0VORF9DT0xPUlMuZW1wdHldIDogbGVnZW5kSXRlbXMubWFwKGl0ZW0gPT4gaXRlbS5jb2xvcik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2VyaWVzLFxuICAgICAgY2hhcnQ6IHtcbiAgICAgICAgdHlwZTogJ2RvbnV0JyxcbiAgICAgICAgaGVpZ2h0OiAyMjBcbiAgICAgIH0sXG4gICAgICBsYWJlbHMsXG4gICAgICBjb2xvcnMsXG4gICAgICBsZWdlbmQ6IHtcbiAgICAgICAgc2hvdzogZmFsc2VcbiAgICAgIH0sXG4gICAgICBwbG90T3B0aW9uczoge1xuICAgICAgICBwaWU6IHtcbiAgICAgICAgICBkb251dDoge1xuICAgICAgICAgICAgc2l6ZTogJzc1JSdcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBkYXRhTGFiZWxzOiB7XG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICB9LFxuICAgICAgdG9vbHRpcDoge1xuICAgICAgICBlbmFibGVkOiAhaXNFbXB0eVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZVBlcmNlbnRhZ2UodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKCFpc0Zpbml0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICAvLyBDb252ZXJ0IGRlY2ltYWwgdG8gcGVyY2VudGFnZSAoMC45NDg3IOKGkiA5NC45KVxuICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSB2YWx1ZSAqIDEwMDtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChwZXJjZW50YWdlICogMTApIC8gMTA7XG4gIH1cbn1cbiIsIjx0ay1jYXJkIHRpdGxlPVwiTGljZW5zZXMgcmVxdWlyZW1lbnRcIj5cbiAgPG5nLWNvbnRhaW5lciBuZ1Byb2plY3RBcz1cImNhcmQtY29udGVudFwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwid2lkZ2V0LWJvZHlcIlxuICAgICAgKm5nSWY9XCIhbG9hZGluZyAmJiAhZXJyb3IgJiYgdmlld01vZGVsOyBlbHNlIHdpZGdldFN0YXRlXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdC1zZWN0aW9uXCI+XG4gICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgWyh2YWx1ZSldPVwic2VsZWN0ZWRTdW1tYXJ5SW5kZXhcIlxuICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25GaWx0ZXJDaGFuZ2UoJGV2ZW50LnZhbHVlKVwiXG4gICAgICAgICAgY2xhc3M9XCJmaWx0ZXItc2VsZWN0XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyczsgaW5kZXggYXMgaVwiIFt2YWx1ZV09XCJpXCI+XG4gICAgICAgICAgICB7eyBvcHRpb24gfX1cbiAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbWF0LXNlbGVjdD5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2hhcnQtc2VjdGlvblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGFydC13cmFwcGVyXCI+XG4gICAgICAgICAgICA8YXB4LWNoYXJ0XG4gICAgICAgICAgICAgIFtzZXJpZXNdPVwidmlld01vZGVsLmNoYXJ0T3B0aW9ucy5zZXJpZXNcIlxuICAgICAgICAgICAgICBbY2hhcnRdPVwidmlld01vZGVsLmNoYXJ0T3B0aW9ucy5jaGFydFwiXG4gICAgICAgICAgICAgIFtsYWJlbHNdPVwidmlld01vZGVsLmNoYXJ0T3B0aW9ucy5sYWJlbHNcIlxuICAgICAgICAgICAgICBbY29sb3JzXT1cInZpZXdNb2RlbC5jaGFydE9wdGlvbnMuY29sb3JzXCJcbiAgICAgICAgICAgICAgW2xlZ2VuZF09XCJ2aWV3TW9kZWwuY2hhcnRPcHRpb25zLmxlZ2VuZFwiXG4gICAgICAgICAgICAgIFtwbG90T3B0aW9uc109XCJ2aWV3TW9kZWwuY2hhcnRPcHRpb25zLnBsb3RPcHRpb25zXCJcbiAgICAgICAgICAgICAgW2RhdGFMYWJlbHNdPVwidmlld01vZGVsLmNoYXJ0T3B0aW9ucy5kYXRhTGFiZWxzXCJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwidmlld01vZGVsLmNoYXJ0T3B0aW9ucy50b29sdGlwXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvYXB4LWNoYXJ0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtaXRlbVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIHZpZXdNb2RlbC5sZWdlbmRJdGVtc1wiPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwibGVnZW5kLW1hcmtlclwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJpdGVtLmNvbG9yXCJcbiAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsZWdlbmQtbGFiZWxcIj57eyBpdGVtLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxlZ2VuZC12YWx1ZVwiPnt7IGl0ZW0uY291bnQgfCBudW1iZXIgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImRpdmlkZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXNlY3Rpb25cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxpYy10YWJsZS1oZWFkZXJcIj5cbiAgICAgICAgICA8c3Bhbj5MaWNlbnNlPC9zcGFuPlxuICAgICAgICAgIDxzcGFuPlJlcXVpcmVkPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJvd1wiICpuZ0Zvcj1cImxldCByb3cgb2Ygdmlld01vZGVsLnJvd3NcIj5cbiAgICAgICAgICA8c3Bhbj57eyByb3cubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4+e3sgcm93LnZhbHVlIHwgbnVtYmVyIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJvdyB0b3RhbC1yb3dcIj5cbiAgICAgICAgICA8c3Bhbj5Ub3RhbDwvc3Bhbj5cbiAgICAgICAgICA8c3Bhbj57eyB2aWV3TW9kZWwudG90YWxSZXF1aXJlZCB8IG51bWJlciB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy10ZW1wbGF0ZSAjd2lkZ2V0U3RhdGU+XG4gICAgICA8ZGl2IGNsYXNzPVwic3RhdGUtbWVzc2FnZVwiICpuZ0lmPVwibG9hZGluZ1wiPlxuICAgICAgICBMb2FkaW5nIGxpY2Vuc2UgcmVxdWlyZW1lbnRz4oCmXG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdGF0ZS1tZXNzYWdlIGVycm9yXCIgKm5nSWY9XCIhbG9hZGluZyAmJiBlcnJvclwiPlxuICAgICAgICBVbmFibGUgdG8gbG9hZCBsaWNlbnNlIHJlcXVpcmVtZW50cy5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInN0YXRlLW1lc3NhZ2VcIiAqbmdJZj1cIiFsb2FkaW5nICYmICFlcnJvciAmJiAhdmlld01vZGVsXCI+XG4gICAgICAgIE5vIGxpY2Vuc2UgZGF0YSBhdmFpbGFibGUuXG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvdGstY2FyZD5cbiJdfQ==
@@ -1,7 +1,7 @@
1
1
  export const API = {
2
2
  READINESS: {
3
3
  UCCX_SERVER_ENTITY_STATS: (customerId) => `/api/uccx/migration/customer/${customerId}/entity-counts`,
4
- LICENSE_USAGE_SUMMARY: (customerId) => `/api/webexreadiness/customers/${customerId}/callinglicesnsecountperfeature`,
4
+ LICENSE_USAGE_SUMMARY: (customerId) => `/api/uccx/migration/customer/${customerId}/cc-license-stats`,
5
5
  }
6
6
  };
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmVuZHBvaW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy9jb250YWN0LWNlbnRlci9zaGFyZWQvYXBpLmVuZHBvaW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUc7SUFDZixTQUFTLEVBQUU7UUFDUCx3QkFBd0IsRUFBRSxDQUFDLFVBQWtCLEVBQUUsRUFBRSxDQUFDLGdDQUFnQyxVQUFVLGdCQUFnQjtRQUM1RyxxQkFBcUIsRUFBRSxDQUFDLFVBQWtCLEVBQUUsRUFBRSxDQUFDLGlDQUFpQyxVQUFVLGlDQUFpQztLQUM5SDtDQUNKLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgQVBJID0ge1xyXG4gICAgUkVBRElORVNTOiB7XHJcbiAgICAgICAgVUNDWF9TRVJWRVJfRU5USVRZX1NUQVRTOiAoY3VzdG9tZXJJZDogbnVtYmVyKSA9PiBgL2FwaS91Y2N4L21pZ3JhdGlvbi9jdXN0b21lci8ke2N1c3RvbWVySWR9L2VudGl0eS1jb3VudHNgLFxyXG4gICAgICAgIExJQ0VOU0VfVVNBR0VfU1VNTUFSWTogKGN1c3RvbWVySWQ6IG51bWJlcikgPT4gYC9hcGkvd2ViZXhyZWFkaW5lc3MvY3VzdG9tZXJzLyR7Y3VzdG9tZXJJZH0vY2FsbGluZ2xpY2VzbnNlY291bnRwZXJmZWF0dXJlYCxcclxuICAgIH1cclxufSJdfQ==
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmVuZHBvaW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy9jb250YWN0LWNlbnRlci9zaGFyZWQvYXBpLmVuZHBvaW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUc7SUFDZixTQUFTLEVBQUU7UUFDUCx3QkFBd0IsRUFBRSxDQUFDLFVBQWtCLEVBQUUsRUFBRSxDQUFDLGdDQUFnQyxVQUFVLGdCQUFnQjtRQUM1RyxxQkFBcUIsRUFBRSxDQUFDLFVBQWtCLEVBQUUsRUFBRSxDQUFDLGdDQUFnQyxVQUFVLG1CQUFtQjtLQUMvRztDQUNKLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgQVBJID0ge1xyXG4gICAgUkVBRElORVNTOiB7XHJcbiAgICAgICAgVUNDWF9TRVJWRVJfRU5USVRZX1NUQVRTOiAoY3VzdG9tZXJJZDogbnVtYmVyKSA9PiBgL2FwaS91Y2N4L21pZ3JhdGlvbi9jdXN0b21lci8ke2N1c3RvbWVySWR9L2VudGl0eS1jb3VudHNgLFxyXG4gICAgICAgIExJQ0VOU0VfVVNBR0VfU1VNTUFSWTogKGN1c3RvbWVySWQ6IG51bWJlcikgPT4gYC9hcGkvdWNjeC9taWdyYXRpb24vY3VzdG9tZXIvJHtjdXN0b21lcklkfS9jYy1saWNlbnNlLXN0YXRzYCxcclxuICAgIH1cclxufSJdfQ==