@oneteme/jquery-organizer 0.0.1 → 0.0.2
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.
- package/README.md +159 -60
- package/esm2022/lib/models/organizer-chart-adapter.mjs +37 -3
- package/esm2022/lib/models/organizer-config.interface.mjs +1 -1
- package/esm2022/lib/models/organizer-utils.mjs +127 -1
- package/esm2022/lib/organizer-button/organizer-button.component.mjs +38 -18
- package/esm2022/lib/organizer-button/template-manager.utility.mjs +7 -0
- package/esm2022/public-api.mjs +2 -2
- package/fesm2022/oneteme-jquery-organizer.mjs +229 -45
- package/fesm2022/oneteme-jquery-organizer.mjs.map +1 -1
- package/lib/models/organizer-chart-adapter.d.ts +10 -0
- package/lib/models/organizer-config.interface.d.ts +1 -0
- package/lib/models/organizer-utils.d.ts +4 -1
- package/lib/organizer-button/organizer-button.component.d.ts +1 -0
- package/lib/organizer-button/template-manager.utility.d.ts +4 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -1
package/README.md
CHANGED
|
@@ -7,7 +7,11 @@ Bibliothèque Angular autonome pour la gestion décentralisée des configuration
|
|
|
7
7
|
- **Adapters** — Fonctions de conversion ChartConfig ↔ OrganizerConfig avec auto-détection d'unités
|
|
8
8
|
- **Facade** — Gestion centralisée d'état pour les champs visibles, regroupements, filtres
|
|
9
9
|
|
|
10
|
-
**
|
|
10
|
+
**Fonctionnalités principales** :
|
|
11
|
+
- **UnitConfig avec auto-scaling intelligent** des unités Y (ms → µs → s, etc.)
|
|
12
|
+
- **Template normalization** avec validation permissive des états et auto-détection de templates
|
|
13
|
+
- **Slice loading unification** dans le composant organizer (Promise/Observable dual-support)
|
|
14
|
+
- **Chart binding facade** pour simplifier l'intégration ChartConfig ↔ Organizer (50% réduction de boilerplate)
|
|
11
15
|
|
|
12
16
|
---
|
|
13
17
|
|
|
@@ -251,31 +255,87 @@ Valeur Format Raison
|
|
|
251
255
|
|
|
252
256
|
## Chart Adapter
|
|
253
257
|
|
|
254
|
-
Les fonctions `organizer-chart-adapter.ts`
|
|
258
|
+
Les fonctions `organizer-chart-adapter.ts` fournissent une façade complète pour l'intégration ChartConfig ↔ OrganizerConfig :
|
|
259
|
+
|
|
260
|
+
### Normalisation d'État (Étape 1)
|
|
261
|
+
|
|
262
|
+
```typescript
|
|
263
|
+
// Valide permissivement un état contre une config
|
|
264
|
+
export function normalizeOrganizerState(
|
|
265
|
+
state: OrganizerState,
|
|
266
|
+
config: OrganizerConfig
|
|
267
|
+
): OrganizerState
|
|
268
|
+
// - Filtre les références invalides (selectedY, selectedGroupBy, selectedSlices)
|
|
269
|
+
// - Maintient les fallbacks si nécessaire
|
|
270
|
+
// - Auto-détecte le template matching l'état final
|
|
271
|
+
|
|
272
|
+
// Applique un template et recalcule le template actif
|
|
273
|
+
export function normalizeTemplateToState(
|
|
274
|
+
template: OrganizerTemplate,
|
|
275
|
+
currentState: OrganizerState,
|
|
276
|
+
config: OrganizerConfig
|
|
277
|
+
): OrganizerState
|
|
278
|
+
// - Applique les champs du template (xField, yField, groupBy, etc.)
|
|
279
|
+
// - Recalcule selectedTemplate en matchant l'état final contre tous les templates
|
|
280
|
+
// - Gère les fallbacks si le template n'est pas complet
|
|
281
|
+
|
|
282
|
+
// Trouve le template matching l'état courant
|
|
283
|
+
export function resolveMatchingTemplateId(
|
|
284
|
+
templates: OrganizerTemplate[],
|
|
285
|
+
state: OrganizerState,
|
|
286
|
+
config: OrganizerConfig
|
|
287
|
+
): string | undefined
|
|
288
|
+
// - Itère sur tous les templates et retourne le premier match
|
|
289
|
+
// - Utilisé pour auto-set selectedTemplate lors de changements d'état
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
### Façade de Binding (Étape 3)
|
|
255
293
|
|
|
256
294
|
```typescript
|
|
257
|
-
//
|
|
295
|
+
// Interface pour les callbacks
|
|
296
|
+
export interface OrganizerChartBridgeOptions {
|
|
297
|
+
onFetchSliceData?: (filterKey: string) => Observable<any[]> | Promise<any[]>;
|
|
298
|
+
onExportVisual?: () => void;
|
|
299
|
+
onExportData?: () => void;
|
|
300
|
+
switchView?: {
|
|
301
|
+
currentView: 'chart' | 'table';
|
|
302
|
+
onSwitch: (newView: 'chart' | 'table') => void;
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
// Construit un binding prêt à utiliser
|
|
307
|
+
export function buildOrganizerChartBinding(
|
|
308
|
+
chartConfig: any,
|
|
309
|
+
options: OrganizerChartBridgeOptions
|
|
310
|
+
): OrganizerChartBinding
|
|
311
|
+
// Retourne: { config: OrganizerConfig, state: OrganizerState }
|
|
312
|
+
// - Appelle chartConfigToOrganizer + normalizeOrganizerState
|
|
313
|
+
// - Injecte les options (callbacks, export, etc.)
|
|
314
|
+
|
|
315
|
+
// Gestion unifiée des événements organizer
|
|
316
|
+
export function handleOrganizerChartEvent(
|
|
317
|
+
event: OrganizerButtonEvent,
|
|
318
|
+
chartConfig: any,
|
|
319
|
+
currentBinding: OrganizerChartBinding,
|
|
320
|
+
options: OrganizerChartBridgeOptions
|
|
321
|
+
): { binding: OrganizerChartBinding, shouldRefetch: boolean }
|
|
322
|
+
// - Applique l'événement au ChartConfig
|
|
323
|
+
// - Reconstruit le binding
|
|
324
|
+
// - Retourne shouldRefetch = true si ySelected ou templateSelected
|
|
325
|
+
|
|
326
|
+
// Utilitaires (existants, maintenant intégrés à la façade)
|
|
258
327
|
export function chartConfigToOrganizer(
|
|
259
328
|
chartConfig: any,
|
|
260
329
|
options?: OrganizerChartBridgeOptions
|
|
261
330
|
): OrganizerConfig
|
|
262
331
|
|
|
263
|
-
// ChartConfig → OrganizerState
|
|
264
332
|
export function chartConfigToState(chartConfig: any): OrganizerState
|
|
265
333
|
|
|
266
|
-
// ChartConfig → Événement + État unifié
|
|
267
|
-
export function chartConfigToUnifiedState(
|
|
268
|
-
chartConfig: any,
|
|
269
|
-
viewMode?: 'chart' | 'table'
|
|
270
|
-
): OrganizerUnifiedState
|
|
271
|
-
|
|
272
|
-
// Applique un OrganizerEvent à ChartConfig
|
|
273
334
|
export function applyOrganizerEventToChart(
|
|
274
335
|
event: OrganizerButtonEvent,
|
|
275
336
|
chartConfig: any
|
|
276
337
|
): void
|
|
277
338
|
|
|
278
|
-
// Résout l'unité Y pour l'événement
|
|
279
339
|
export function resolveYUnit(
|
|
280
340
|
chartConfig: any,
|
|
281
341
|
selectedY?: string,
|
|
@@ -287,17 +347,12 @@ export function resolveYUnit(
|
|
|
287
347
|
|
|
288
348
|
## Intégration avec jquery-echarts
|
|
289
349
|
|
|
290
|
-
### Pattern
|
|
291
|
-
|
|
292
|
-
1. **Initialisation** : Construire OrganizerConfig depuis ChartConfig
|
|
293
|
-
2. **Réaction aux événements** : Appliquer OrganizerEvent à ChartConfig
|
|
294
|
-
3. **Refetch** : Recharger les données avec la nouvelle config
|
|
350
|
+
### Pattern Simplifié avec Binding Facade (v0.0.44+) ⭐ **Recommandé**
|
|
295
351
|
|
|
296
|
-
|
|
352
|
+
La **façade de binding** unifie les 3 étapes et réduit le boilerplate de ~50% :
|
|
297
353
|
|
|
298
354
|
```typescript
|
|
299
|
-
import {
|
|
300
|
-
import { chartConfigToOrganizer, chartConfigToState, applyOrganizerEventToChart } from '@oneteme/jquery-organizer';
|
|
355
|
+
import { buildOrganizerChartBinding, handleOrganizerChartEvent, OrganizerChartBridgeOptions } from '@oneteme/jquery-organizer';
|
|
301
356
|
|
|
302
357
|
@Component({
|
|
303
358
|
selector: 'app-kpi',
|
|
@@ -312,44 +367,56 @@ import { chartConfigToOrganizer, chartConfigToState, applyOrganizerEventToChart
|
|
|
312
367
|
`
|
|
313
368
|
})
|
|
314
369
|
export class KpiComponent {
|
|
315
|
-
$latency
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
chartConfig: REST_LATENCY_CHART_CONFIG('day'),
|
|
319
|
-
chartProvider: {},
|
|
320
|
-
data: []
|
|
321
|
-
};
|
|
370
|
+
$latency: any; // { config, state, chartProvider, data }
|
|
371
|
+
private $latencyChartConfig = REST_LATENCY_CHART_CONFIG('day');
|
|
372
|
+
@ViewChild('latencyChart') private _latencyChart: ChartComponent<any, any>;
|
|
322
373
|
|
|
323
374
|
ngOnInit() {
|
|
324
|
-
// Initialisation
|
|
325
|
-
this.$latency
|
|
326
|
-
|
|
375
|
+
// Initialisation unifiée via façade
|
|
376
|
+
this.$latency = buildOrganizerChartBinding(
|
|
377
|
+
this.$latencyChartConfig,
|
|
378
|
+
this._latencyOrganizerOptions()
|
|
379
|
+
);
|
|
327
380
|
this._fetchLatency();
|
|
328
381
|
}
|
|
329
382
|
|
|
330
383
|
onLatencyViewChange(event: OrganizerButtonEvent): void {
|
|
331
|
-
//
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
384
|
+
// Traitement événement + calcul intelligent du refetch
|
|
385
|
+
const result = handleOrganizerChartEvent(
|
|
386
|
+
event,
|
|
387
|
+
this.$latencyChartConfig,
|
|
388
|
+
this.$latency,
|
|
389
|
+
this._latencyOrganizerOptions()
|
|
390
|
+
);
|
|
391
|
+
this.$latency = result.binding;
|
|
336
392
|
|
|
337
|
-
// Refetch
|
|
338
|
-
|
|
393
|
+
// Refetch uniquement si nécessaire (ySelected, templateSelected, etc.)
|
|
394
|
+
if (result.shouldRefetch) {
|
|
395
|
+
this._fetchLatency();
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
private _latencyOrganizerOptions(): OrganizerChartBridgeOptions {
|
|
400
|
+
return {
|
|
401
|
+
onFetchSliceData: (filterKey: string) => this._fetchSliceData(filterKey),
|
|
402
|
+
onExportVisual: () => this._latencyChart?.exportImage('latence'),
|
|
403
|
+
onExportData: () => this._latencyChart?.exportData('latence')
|
|
404
|
+
};
|
|
339
405
|
}
|
|
340
406
|
|
|
341
407
|
private _fetchLatency(): void {
|
|
342
|
-
const cfg = this.$
|
|
408
|
+
const cfg = this.$latencyChartConfig;
|
|
343
409
|
const ind = cfg.indicators.items.find(i => i.selected);
|
|
410
|
+
const grp = cfg.groups.items.find(g => g.selected);
|
|
344
411
|
|
|
345
|
-
this._httpService.getLatency({ indicator: ind,
|
|
346
|
-
const series = buildSeries(cfg.series.items, ind,
|
|
412
|
+
this._httpService.getLatency({ indicator: ind, group: grp }).subscribe(data => {
|
|
413
|
+
const series = buildSeries(cfg.series.items, ind, grp, null, data);
|
|
347
414
|
|
|
348
|
-
// Injection de l'unité (simple string ou UnitConfig)
|
|
349
415
|
this.$latency.chartProvider = {
|
|
350
416
|
...this.BASE_CHART_PROVIDER,
|
|
351
417
|
series,
|
|
352
|
-
|
|
418
|
+
xtitle: grp?.menu?.label || 'Date', // Titre X dynamique
|
|
419
|
+
yUnit: ind?.unit // ← string | UnitConfig (auto-scaling)
|
|
353
420
|
};
|
|
354
421
|
|
|
355
422
|
this.$latency.data = data;
|
|
@@ -358,6 +425,43 @@ export class KpiComponent {
|
|
|
358
425
|
}
|
|
359
426
|
```
|
|
360
427
|
|
|
428
|
+
### Architecture des 3 Étapes
|
|
429
|
+
|
|
430
|
+
**Étape 1: Normalisation d'État**
|
|
431
|
+
- `normalizeOrganizerState()` valide les références et auto-détecte le template
|
|
432
|
+
- Utilisée automatiquement par `buildOrganizerChartBinding()`
|
|
433
|
+
- Stratégie permissive : filtre les références invalides sans levée d'exception
|
|
434
|
+
|
|
435
|
+
**Étape 2: Chargement des Slices (organizer-button.component.ts)**
|
|
436
|
+
- Méthode `syncSliceState()` gère Promise et Observable uniformément
|
|
437
|
+
- Unifie les chemins manuels (onSliceClick) et template-driven (onTemplateSelect)
|
|
438
|
+
- Émet sliceStateChange pour mise à jour du binding côté app
|
|
439
|
+
|
|
440
|
+
**Étape 3: Façade de Binding**
|
|
441
|
+
- `buildOrganizerChartBinding()` : Construction du binding initial
|
|
442
|
+
- `handleOrganizerChartEvent()` : Traitement unifié avec retour du shouldRefetch
|
|
443
|
+
- Encapsule applyOrganizerEventToChart + normalisation + refetch logic
|
|
444
|
+
|
|
445
|
+
### Pattern Détaillé (Utilitaires bas-niveau)
|
|
446
|
+
|
|
447
|
+
Pour des besoins avancés ou migration progressive :
|
|
448
|
+
|
|
449
|
+
```typescript
|
|
450
|
+
import { chartConfigToOrganizer, chartConfigToState, applyOrganizerEventToChart } from '@oneteme/jquery-organizer';
|
|
451
|
+
|
|
452
|
+
onLatencyViewChange(event: OrganizerButtonEvent): void {
|
|
453
|
+
// Étape 1: Appliquer l'événement au ChartConfig
|
|
454
|
+
applyOrganizerEventToChart(event, this.$latencyChartConfig);
|
|
455
|
+
|
|
456
|
+
// Étape 2: Recalculer l'état (avec normalisation)
|
|
457
|
+
this.$latency.config = chartConfigToOrganizer(this.$latencyChartConfig);
|
|
458
|
+
this.$latency.state = chartConfigToState(this.$latencyChartConfig);
|
|
459
|
+
|
|
460
|
+
// Étape 3: Refetch
|
|
461
|
+
this._fetchLatency();
|
|
462
|
+
}
|
|
463
|
+
```
|
|
464
|
+
|
|
361
465
|
---
|
|
362
466
|
|
|
363
467
|
## Intégration avec jquery-table
|
|
@@ -397,11 +501,22 @@ export { OrganizerButtonModule } from './organizer-button.module';
|
|
|
397
501
|
export { SlicePanelComponent } from './slice-panel.component';
|
|
398
502
|
|
|
399
503
|
// Interfaces
|
|
400
|
-
export { OrganizerConfig, OrganizerState, OrganizerButtonEvent, OrganizerSliceState } from './organizer-config.interface';
|
|
504
|
+
export { OrganizerConfig, OrganizerState, OrganizerButtonEvent, OrganizerSliceState, OrganizerChartBinding } from './organizer-config.interface';
|
|
505
|
+
export { OrganizerChartBridgeOptions, OrganizerTemplate } from './organizer-chart-adapter';
|
|
401
506
|
export { SliceConfig, SliceColumnDef, SliceCategory } from './slice-panel.model';
|
|
402
507
|
|
|
403
|
-
// Adapters
|
|
508
|
+
// Adapters & Façade (v0.0.44+)
|
|
404
509
|
export {
|
|
510
|
+
// Binding Facade (recommandé)
|
|
511
|
+
buildOrganizerChartBinding,
|
|
512
|
+
handleOrganizerChartEvent,
|
|
513
|
+
|
|
514
|
+
// Normalisation d'état
|
|
515
|
+
normalizeOrganizerState,
|
|
516
|
+
normalizeTemplateToState,
|
|
517
|
+
resolveMatchingTemplateId,
|
|
518
|
+
|
|
519
|
+
// Utilitaires bas-niveau
|
|
405
520
|
chartConfigToOrganizer,
|
|
406
521
|
chartConfigToState,
|
|
407
522
|
chartConfigToUnifiedState,
|
|
@@ -418,22 +533,6 @@ export { OrganizerFacade } from './organizer-facade/organizer-facade';
|
|
|
418
533
|
|
|
419
534
|
---
|
|
420
535
|
|
|
421
|
-
## Changelog
|
|
422
|
-
|
|
423
|
-
### v0.0.43+ (2026-07-03)
|
|
424
|
-
- Ajout du support **UnitConfig** avec auto-scaling intelligent
|
|
425
|
-
- Exports des adapters (chartConfigToOrganizer, resolveYUnit, etc.)
|
|
426
|
-
- Renommage des propriétés OrganizerFacade (Column → Field) dans jquery-table
|
|
427
|
-
- Support des `ScaleConfig` pour conversion dynamique d'unités
|
|
428
|
-
- Formatage adaptatif de la précision (smartFormatY) en chart-utils
|
|
429
|
-
- Intégration complète avec REST_LATENCY_CHART_CONFIG
|
|
430
|
-
|
|
431
|
-
### v0.0.42
|
|
432
|
-
- Refactoring des exports publics
|
|
433
|
-
- Consolidation de SlicePanelComponent
|
|
434
|
-
|
|
435
|
-
---
|
|
436
|
-
|
|
437
536
|
## Support
|
|
438
537
|
|
|
439
538
|
Pour des questions ou des bugs, ouvrir une issue dans le repository jquery-charts.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { buildYFields, resolveYKey } from './organizer-utils';
|
|
1
|
+
import { buildYFields, normalizeOrganizerState, resolveYKey } from './organizer-utils';
|
|
2
2
|
export function chartConfigToOrganizer(chartConfig, options = {}) {
|
|
3
3
|
if (!chartConfig)
|
|
4
4
|
return {};
|
|
@@ -23,6 +23,7 @@ export function chartConfigToOrganizer(chartConfig, options = {}) {
|
|
|
23
23
|
yFields,
|
|
24
24
|
groups: mergedGroupFields,
|
|
25
25
|
slices: (chartConfig.filters?.items || []).map(f => ({ id: f.key, label: f.menu.label || f.key })),
|
|
26
|
+
templates: chartConfig.templates,
|
|
26
27
|
showReset: false,
|
|
27
28
|
onFetchSliceData,
|
|
28
29
|
showExport: !!(onExportVisual || onExportData),
|
|
@@ -39,13 +40,21 @@ export function chartConfigToState(chartConfig) {
|
|
|
39
40
|
const activeGroup = chartConfig.groups?.items?.find(g => g.selected);
|
|
40
41
|
const activeSlices = (chartConfig.filters?.items || []).filter(f => f.selected);
|
|
41
42
|
const indicatorGroup = activeIndicator?.group;
|
|
42
|
-
|
|
43
|
+
const state = {
|
|
43
44
|
selectedX: activeGroup?.key,
|
|
44
45
|
selectedY: indicatorGroup ?? activeIndicator?.key,
|
|
45
46
|
selectedYAggregate: indicatorGroup ? activeIndicator?.key : undefined,
|
|
46
47
|
selectedGroupBy: activeStack?.key,
|
|
47
48
|
selectedSlices: activeSlices.map(f => f.key),
|
|
48
49
|
};
|
|
50
|
+
const organizerConfig = chartConfigToOrganizer(chartConfig);
|
|
51
|
+
return normalizeOrganizerState(state, organizerConfig);
|
|
52
|
+
}
|
|
53
|
+
export function buildOrganizerChartBinding(chartConfig, options = {}) {
|
|
54
|
+
return {
|
|
55
|
+
config: chartConfigToOrganizer(chartConfig, options),
|
|
56
|
+
state: chartConfigToState(chartConfig)
|
|
57
|
+
};
|
|
49
58
|
}
|
|
50
59
|
export function chartConfigToUnifiedState(chartConfig, viewMode = 'chart') {
|
|
51
60
|
const state = chartConfigToState(chartConfig);
|
|
@@ -73,6 +82,31 @@ export function applyOrganizerEventToChart(event, chartConfig) {
|
|
|
73
82
|
_applySliceSelection(state.selectedSlices, chartConfig);
|
|
74
83
|
event.resolvedYUnit = resolveYUnit(chartConfig, event.state.selectedY, event.state.selectedYAggregate);
|
|
75
84
|
}
|
|
85
|
+
export function handleOrganizerChartEvent(event, chartConfig, currentBinding, options = {}) {
|
|
86
|
+
if (event.type === 'viewSwitched') {
|
|
87
|
+
return {
|
|
88
|
+
binding: {
|
|
89
|
+
config: chartConfigToOrganizer(chartConfig, options),
|
|
90
|
+
state: { ...event.state }
|
|
91
|
+
},
|
|
92
|
+
shouldRefetch: false
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
applyOrganizerEventToChart(event, chartConfig);
|
|
96
|
+
if (event.type === 'ySelected' || event.type === 'templateSelected') {
|
|
97
|
+
return {
|
|
98
|
+
binding: buildOrganizerChartBinding(chartConfig, options),
|
|
99
|
+
shouldRefetch: true
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
binding: {
|
|
104
|
+
config: currentBinding?.config ?? chartConfigToOrganizer(chartConfig, options),
|
|
105
|
+
state: event.state
|
|
106
|
+
},
|
|
107
|
+
shouldRefetch: event.type !== 'sliceSelected'
|
|
108
|
+
};
|
|
109
|
+
}
|
|
76
110
|
export function resolveYUnit(chartConfig, selectedY, selectedYAggregate) {
|
|
77
111
|
if (!chartConfig || !selectedY)
|
|
78
112
|
return undefined;
|
|
@@ -161,4 +195,4 @@ function _applyGroupBySelection(effectiveGroupBy, chartConfig) {
|
|
|
161
195
|
function _applySliceSelection(selectedSlices, chartConfig) {
|
|
162
196
|
chartConfig.filters?.items?.forEach(f => { f.selected = selectedSlices.includes(f.key); });
|
|
163
197
|
}
|
|
164
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemVyLWNoYXJ0LWFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmV0ZW1lL2pxdWVyeS1vcmdhbml6ZXIvc3JjL2xpYi9tb2RlbHMvb3JnYW5pemVyLWNoYXJ0LWFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQXVDOUQsTUFBTSxVQUFVLHNCQUFzQixDQUNwQyxXQUFnQixFQUNoQixVQUF1QyxFQUFFO0lBRXpDLElBQUksQ0FBQyxXQUFXO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDNUIsTUFBTSxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQy9FLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUU3RSxNQUFNLFdBQVcsR0FBc0IsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7U0FDckUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRTNELE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FDMUIsQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FB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Q0wsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbEQ7QUFDSCxDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxjQUF3QixFQUFFLFdBQWlDO0lBQ3ZGLFdBQVcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3JnYW5pemVyQnV0dG9uRXZlbnQsIE9yZ2FuaXplckNvbmZpZywgT3JnYW5pemVyU3RhdGUsIE9yZ2FuaXplclVuaWZpZWRTdGF0ZSwgT3JnYW5pemVyVmlld1NsaWNlLCBPcmdhbml6ZXJYRmllbGQgfSBmcm9tICcuL29yZ2FuaXplci1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IGJ1aWxkWUZpZWxkcywgcmVzb2x2ZVlLZXkgfSBmcm9tICcuL29yZ2FuaXplci11dGlscyc7XG5pbXBvcnQgeyBVbml0Q29uZmlnIH0gZnJvbSAnQG9uZXRlbWUvanF1ZXJ5LWNvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplckNoYXJ0SXRlbSB7XG4gIGtleTogc3RyaW5nO1xuICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgbWVudTogeyBsYWJlbDogc3RyaW5nIH07XG4gIHVuaXQ/OiBzdHJpbmcgfCBVbml0Q29uZmlnO1xuICBqcXVlcnk/OiB7XG4gICAgdmFsdWU6IChzPzogc3RyaW5nKSA9PiBzdHJpbmc7XG4gICAgYnVpbGRBbGlhczogKHM/OiBzdHJpbmcpID0+IHN0cmluZztcbiAgICBidWlsZE5hbWU/OiAoaXRlbTogYW55LCB2YWx1ZT86IHN0cmluZykgPT4gc3RyaW5nO1xuICAgIGJ1aWxkQ29sb3I/OiAodmFsdWU/OiBzdHJpbmcpID0+IHN0cmluZztcbiAgfTtcbiAgZ3JvdXA/OiBzdHJpbmc7XG4gIGV4dHJhPzoge1xuICAgIHN0YWNrcz86IHsgb3B0aW9uYWw6IGJvb2xlYW47IGl0ZW1zOiBPcmdhbml6ZXJDaGFydEl0ZW1bXSB9O1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJDaGFydFNlY3Rpb24ge1xuICBvcHRpb25hbDogYm9vbGVhbjtcbiAgaXRlbXM6IE9yZ2FuaXplckNoYXJ0SXRlbVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplckNoYXJ0Q29uZmlnIHtcbiAgZ3JvdXBzOiBPcmdhbml6ZXJDaGFydFNlY3Rpb247XG4gIGluZGljYXRvcnM6IE9yZ2FuaXplckNoYXJ0U2VjdGlvbjtcbiAgZmlsdGVycz86IE9yZ2FuaXplckNoYXJ0U2VjdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJDaGFydEJyaWRnZU9wdGlvbnMge1xuICBvbkZldGNoU2xpY2VEYXRhPzogT3JnYW5pemVyQ29uZmlnWydvbkZldGNoU2xpY2VEYXRhJ107XG4gIG9uRXhwb3J0VmlzdWFsPzogKCkgPT4gdm9pZDtcbiAgb25FeHBvcnREYXRhPzogKCkgPT4gdm9pZDtcbiAgc3dpdGNoVmlldz86IE9yZ2FuaXplckNvbmZpZ1snc3dpdGNoVmlldyddO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hhcnRDb25maWdUb09yZ2FuaXplcihcbiAgY2hhcnRDb25maWc6IGFueSxcbiAgb3B0aW9uczogT3JnYW5pemVyQ2hhcnRCcmlkZ2VPcHRpb25zID0ge31cbik6IE9yZ2FuaXplckNvbmZpZyB7XG4gIGlmICghY2hhcnRDb25maWcpIHJldHVybiB7fTtcbiAgY29uc3QgeyBvbkZldGNoU2xpY2VEYXRhLCBvbkV4cG9ydFZpc3VhbCwgb25FeHBvcnREYXRhLCBzd2l0Y2hWaWV3IH0gPSBvcHRpb25zO1xuICBjb25zdCBhY3RpdmVJbmRpY2F0b3IgPSBjaGFydENvbmZpZy5pbmRpY2F0b3JzPy5pdGVtcz8uZmluZChpID0+IGkuc2VsZWN0ZWQpO1xuXG4gIGNvbnN0IGJhc2VYRmllbGRzOiBPcmdhbml6ZXJYRmllbGRbXSA9IChjaGFydENvbmZpZy5ncm91cHM/Lml0ZW1zIHx8IFtdKVxuICAgIC5maWx0ZXIoZyA9PiAhX2lzU3ludGhldGljKGcpKVxuICAgIC5tYXAoZyA9PiAoeyBpZDogZy5rZXksIGxhYmVsOiBnLm1lbnUubGFiZWwgfHwgZy5rZXkgfSkpO1xuXG4gIGNvbnN0IHlGaWVsZHMgPSBidWlsZFlGaWVsZHMoXG4gICAgKGNoYXJ0Q29uZmlnLmluZGljYXRvcnM/Lml0ZW1zIHx8IFtdKS5tYXAoaSA9PiAoeyBpZDogaS5rZXksIGxhYmVsOiBpLm1lbnUubGFiZWwgfHwgaS5rZXksIGdyb3VwOiBpLmdyb3VwIH0pKVxuICApO1xuXG4gIGNvbnN0IHN0YWNrRmllbGRzID0gKGFjdGl2ZUluZGljYXRvcj8uZXh0cmE/LnN0YWNrcz8uaXRlbXMgfHwgW10pXG4gICAgLmZpbHRlcigoczogT3JnYW5pemVyQ2hhcnRJdGVtKSA9PiAhX2lzU3ludGhldGljKHMpKVxuICAgIC5tYXAoKHM6IE9yZ2FuaXplckNoYXJ0SXRlbSkgPT4gKHsgaWQ6IHMua2V5LCBsYWJlbDogcy5tZW51LmxhYmVsIHx8IHMua2V5IH0pKTtcblxuICBjb25zdCBzZWVuS2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBtZXJnZWRHcm91cEZpZWxkcyA9IFsuLi5iYXNlWEZpZWxkcywgLi4uc3RhY2tGaWVsZHNdLmZpbHRlcihmID0+IHtcbiAgICBpZiAoc2VlbktleXMuaGFzKGYuaWQpKSByZXR1cm4gZmFsc2U7XG4gICAgc2VlbktleXMuYWRkKGYuaWQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHhGaWVsZHM6IG1lcmdlZEdyb3VwRmllbGRzLFxuICAgIHlGaWVsZHMsXG4gICAgZ3JvdXBzOiBtZXJnZWRHcm91cEZpZWxkcyxcbiAgICBzbGljZXM6IChjaGFydENvbmZpZy5maWx0ZXJzPy5pdGVtcyB8fCBbXSkubWFwKGYgPT4gKHsgaWQ6IGYua2V5LCBsYWJlbDogZi5tZW51LmxhYmVsIHx8IGYua2V5IH0pIGFzIE9yZ2FuaXplclZpZXdTbGljZSksXG4gICAgc2hvd1Jlc2V0OiBmYWxzZSxcbiAgICBvbkZldGNoU2xpY2VEYXRhLFxuICAgIHNob3dFeHBvcnQ6ICEhKG9uRXhwb3J0VmlzdWFsIHx8IG9uRXhwb3J0RGF0YSksXG4gICAgb25FeHBvcnRWaXN1YWwsXG4gICAgb25FeHBvcnREYXRhLFxuICAgIHN3aXRjaFZpZXcsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFydENvbmZpZ1RvU3RhdGUoY2hhcnRDb25maWc6IGFueSk6IE9yZ2FuaXplclN0YXRlIHtcbiAgaWYgKCFjaGFydENvbmZpZykgcmV0dXJuIHt9O1xuICBjb25zdCBhY3RpdmVJbmRpY2F0b3IgPSBjaGFydENvbmZpZy5pbmRpY2F0b3JzPy5pdGVtcz8uZmluZChpID0+IGkuc2VsZWN0ZWQpO1xuICBjb25zdCBhY3RpdmVTdGFjayA9IChhY3RpdmVJbmRpY2F0b3I/LmV4dHJhPy5zdGFja3M/Lml0ZW1zIHx8IFtdKS5maW5kKChzOiBPcmdhbml6ZXJDaGFydEl0ZW0pID0+IHMuc2VsZWN0ZWQpO1xuICBjb25zdCBhY3RpdmVHcm91cCA9IGNoYXJ0Q29uZmlnLmdyb3Vwcz8uaXRlbXM/LmZpbmQoZyA9PiBnLnNlbGVjdGVkKTtcbiAgY29uc3QgYWN0aXZlU2xpY2VzID0gKGNoYXJ0Q29uZmlnLmZpbHRlcnM/Lml0ZW1zIHx8IFtdKS5maWx0ZXIoZiA9PiBmLnNlbGVjdGVkKTtcbiAgY29uc3QgaW5kaWNhdG9yR3JvdXAgPSBhY3RpdmVJbmRpY2F0b3I/Lmdyb3VwO1xuICByZXR1cm4ge1xuICAgIHNlbGVjdGVkWDogYWN0aXZlR3JvdXA/LmtleSxcbiAgICBzZWxlY3RlZFk6IGluZGljYXRvckdyb3VwID8/IGFjdGl2ZUluZGljYXRvcj8ua2V5LFxuICAgIHNlbGVjdGVkWUFnZ3JlZ2F0ZTogaW5kaWNhdG9yR3JvdXAgPyBhY3RpdmVJbmRpY2F0b3I/LmtleSA6IHVuZGVmaW5lZCxcbiAgICBzZWxlY3RlZEdyb3VwQnk6IGFjdGl2ZVN0YWNrPy5rZXksXG4gICAgc2VsZWN0ZWRTbGljZXM6IGFjdGl2ZVNsaWNlcy5tYXAoZiA9PiBmLmtleSksXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFydENvbmZpZ1RvVW5pZmllZFN0YXRlKFxuICBjaGFydENvbmZpZzogYW55LFxuICB2aWV3TW9kZTogJ2NoYXJ0JyB8ICd0YWJsZScgPSAnY2hhcnQnXG4pOiBPcmdhbml6ZXJVbmlmaWVkU3RhdGUge1xuICBjb25zdCBzdGF0ZSA9IGNoYXJ0Q29uZmlnVG9TdGF0ZShjaGFydENvbmZpZyk7XG4gIHJldHVybiB7XG4gICAgdmlld01vZGUsXG4gICAgZGltZW5zaW9uOiBzdGF0ZS5zZWxlY3RlZFgsXG4gICAgbWV0cmljOiByZXNvbHZlWUtleShzdGF0ZS5zZWxlY3RlZFksIHN0YXRlLnNlbGVjdGVkWUFnZ3JlZ2F0ZSksXG4gICAgbWV0cmljQWdncmVnYXRlOiBzdGF0ZS5zZWxlY3RlZFlBZ2dyZWdhdGUsXG4gICAgYnJlYWtkb3duOiBzdGF0ZS5zZWxlY3RlZEdyb3VwQnksXG4gICAgZmlsdGVyczogc3RhdGUuc2VsZWN0ZWRTbGljZXMsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseU9yZ2FuaXplckV2ZW50VG9DaGFydChcbiAgZXZlbnQ6IE9yZ2FuaXplckJ1dHRvbkV2ZW50LFxuICBjaGFydENvbmZpZzogYW55XG4pOiB2b2lkIHtcbiAgaWYgKCFjaGFydENvbmZpZykgcmV0dXJuO1xuICBjb25zdCBzdGF0ZSA9IGV2ZW50LnN0YXRlO1xuICBfY2xlYW5TeW50aGV0aWNzKGNoYXJ0Q29uZmlnKTtcbiAgaWYgKHN0YXRlLnNlbGVjdGVkWCAhPT0gdW5kZWZpbmVkKSBfYXBwbHlYU2VsZWN0aW9uKHN0YXRlLnNlbGVjdGVkWCwgY2hhcnRDb25maWcpO1xuICBpZiAoc3RhdGUuc2VsZWN0ZWRZICE9PSB1bmRlZmluZWQpIF9hcHBseVlTZWxlY3Rpb24oc3RhdGUuc2VsZWN0ZWRZLCBzdGF0ZS5zZWxlY3RlZFlBZ2dyZWdhdGUsIGNoYXJ0Q29uZmlnKTtcbiAgY29uc3QgZWZmZWN0aXZlR3JvdXBCeSA9IHN0YXRlLnNlbGVjdGVkR3JvdXBCeSAhPT0gc3RhdGUuc2VsZWN0ZWRYID8gc3RhdGUuc2VsZWN0ZWRHcm91cEJ5IDogdW5kZWZpbmVkO1xuICBfYXBwbHlHcm91cEJ5U2VsZWN0aW9uKGVmZmVjdGl2ZUdyb3VwQnksIGNoYXJ0Q29uZmlnKTtcbiAgaWYgKHN0YXRlLnNlbGVjdGVkU2xpY2VzICE9PSB1bmRlZmluZWQpIF9hcHBseVNsaWNlU2VsZWN0aW9uKHN0YXRlLnNlbGVjdGVkU2xpY2VzLCBjaGFydENvbmZpZyk7XG4gIGV2ZW50LnJlc29sdmVkWVVuaXQgPSByZXNvbHZlWVVuaXQoY2hhcnRDb25maWcsIGV2ZW50LnN0YXRlLnNlbGVjdGVkWSwgZXZlbnQuc3RhdGUuc2VsZWN0ZWRZQWdncmVnYXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVZVW5pdChcbiAgY2hhcnRDb25maWc6IGFueSxcbiAgc2VsZWN0ZWRZOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHNlbGVjdGVkWUFnZ3JlZ2F0ZTogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBzdHJpbmcgfCBVbml0Q29uZmlnIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFjaGFydENvbmZpZyB8fCAhc2VsZWN0ZWRZKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBhY3R1YWxLZXkgPSByZXNvbHZlWUtleShzZWxlY3RlZFksIHNlbGVjdGVkWUFnZ3JlZ2F0ZSk7XG4gIHJldHVybiBjaGFydENvbmZpZy5pbmRpY2F0b3JzPy5pdGVtcz8uZmluZChpID0+IGkua2V5ID09PSBhY3R1YWxLZXkpPy51bml0O1xufVxuXG5jb25zdCBfc3ludGhldGljSXRlbXMgPSBuZXcgV2Vha1NldDxPcmdhbml6ZXJDaGFydEl0ZW0+KCk7XG5cbmZ1bmN0aW9uIF9tYWtlU3ludGhldGljKGl0ZW06IE9yZ2FuaXplckNoYXJ0SXRlbSk6IE9yZ2FuaXplckNoYXJ0SXRlbSB7XG4gIF9zeW50aGV0aWNJdGVtcy5hZGQoaXRlbSk7XG4gIHJldHVybiBpdGVtO1xufVxuXG5mdW5jdGlvbiBfaXNTeW50aGV0aWMoaXRlbTogT3JnYW5pemVyQ2hhcnRJdGVtKTogYm9vbGVhbiB7XG4gIHJldHVybiBfc3ludGhldGljSXRlbXMuaGFzKGl0ZW0pO1xufVxuXG5mdW5jdGlvbiBfY2xlYW5TeW50aGV0aWNzKGNoYXJ0Q29uZmlnOiBPcmdhbml6ZXJDaGFydENvbmZpZyk6IHZvaWQge1xuICBjaGFydENvbmZpZy5ncm91cHMuaXRlbXMgPSBjaGFydENvbmZpZy5ncm91cHMuaXRlbXMuZmlsdGVyKGcgPT4gIV9pc1N5bnRoZXRpYyhnKSk7XG4gIGNoYXJ0Q29uZmlnLmluZGljYXRvcnMuaXRlbXMuZm9yRWFjaChpbmQgPT4ge1xuICAgIGlmIChpbmQuZXh0cmE/LnN0YWNrcz8uaXRlbXMpIHtcbiAgICAgIGluZC5leHRyYS5zdGFja3MuaXRlbXMgPSBpbmQuZXh0cmEuc3RhY2tzLml0ZW1zLmZpbHRlcigoczogT3JnYW5pemVyQ2hhcnRJdGVtKSA9PiAhX2lzU3ludGhldGljKHMpKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBfYXBwbHlYU2VsZWN0aW9uKHNlbGVjdGVkWDogc3RyaW5nLCBjaGFydENvbmZpZzogT3JnYW5pemVyQ2hhcnRDb25maWcpOiB2b2lkIHtcbiAgY29uc3QgaXNHcm91cEl0ZW0gPSBjaGFydENvbmZpZy5ncm91cHMuaXRlbXMuc29tZShnID0+IGcua2V5ID09PSBzZWxlY3RlZFgpO1xuICBpZiAoaXNHcm91cEl0ZW0pIHtcbiAgICBjaGFydENvbmZpZy5ncm91cHMuaXRlbXMuZm9yRWFjaChnID0+IHsgZy5zZWxlY3RlZCA9IGcua2V5ID09PSBzZWxlY3RlZFg7IH0pO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBhbGxTdGFja3M6IE9yZ2FuaXplckNoYXJ0SXRlbVtdID0gY2hhcnRDb25maWcuaW5kaWNhdG9ycy5pdGVtcy5mbGF0TWFwKGkgPT4gaS5leHRyYT8uc3RhY2tzPy5pdGVtcyA/PyBbXSk7XG4gIGNvbnN0IHN0YWNrSXRlbSA9IGFsbFN0YWNrcy5maW5kKHMgPT4gcy5rZXkgPT09IHNlbGVjdGVkWCk7XG4gIGlmIChzdGFja0l0ZW0pIHtcbiAgICBjaGFydENvbmZpZy5ncm91cHMuaXRlbXMuZm9yRWFjaChnID0+IHsgZy5zZWxlY3RlZCA9IGZhbHNlOyB9KTtcbiAgICBjaGFydENvbmZpZy5ncm91cHMuaXRlbXMucHVzaChfbWFrZVN5bnRoZXRpYyh7XG4gICAgICBrZXk6IHN0YWNrSXRlbS5rZXksXG4gICAgICBzZWxlY3RlZDogdHJ1ZSxcbiAgICAgIG1lbnU6IHN0YWNrSXRlbS5tZW51LFxuICAgICAganF1ZXJ5OiBzdGFja0l0ZW0uanF1ZXJ5XG4gICAgICAgID8geyB2YWx1ZTogKCkgPT4gc3RhY2tJdGVtLmpxdWVyeSEudmFsdWUoKSwgYnVpbGRBbGlhczogKCkgPT4gc3RhY2tJdGVtLmpxdWVyeSEuYnVpbGRBbGlhcygpIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfSkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9hcHBseVlTZWxlY3Rpb24oc2VsZWN0ZWRZOiBzdHJpbmcsIHNlbGVjdGVkWUFnZ3JlZ2F0ZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBjaGFydENvbmZpZzogT3JnYW5pemVyQ2hhcnRDb25maWcpOiB2b2lkIHtcbiAgY29uc3QgYWN0dWFsS2V5ID0gcmVzb2x2ZVlLZXkoc2VsZWN0ZWRZLCBzZWxlY3RlZFlBZ2dyZWdhdGUpO1xuICBjaGFydENvbmZpZy5pbmRpY2F0b3JzLml0ZW1zLmZvckVhY2goaSA9PiB7IGkuc2VsZWN0ZWQgPSBpLmtleSA9PT0gYWN0dWFsS2V5OyB9KTtcbiAgY2hhcnRDb25maWcuaW5kaWNhdG9ycy5pdGVtcy5mb3JFYWNoKGkgPT4ge1xuICAgIGkuZXh0cmE/LnN0YWNrcz8uaXRlbXM/LmZvckVhY2goKHM6IE9yZ2FuaXplckNoYXJ0SXRlbSkgPT4geyBzLnNlbGVjdGVkID0gZmFsc2U7IH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gX2FwcGx5R3JvdXBCeVNlbGVjdGlvbihlZmZlY3RpdmVHcm91cEJ5OiBzdHJpbmcgfCB1bmRlZmluZWQsIGNoYXJ0Q29uZmlnOiBPcmdhbml6ZXJDaGFydENvbmZpZyk6IHZvaWQge1xuICBjb25zdCBhY3RpdmVJbmRpY2F0b3IgPSBjaGFydENvbmZpZy5pbmRpY2F0b3JzLml0ZW1zLmZpbmQoaSA9PiBpLnNlbGVjdGVkKTtcbiAgY29uc3Qgc3RhY2tJdGVtczogT3JnYW5pemVyQ2hhcnRJdGVtW10gPSBhY3RpdmVJbmRpY2F0b3I/LmV4dHJhPy5zdGFja3M/Lml0ZW1zID8/IFtdO1xuICBpZiAoZWZmZWN0aXZlR3JvdXBCeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RhY2tJdGVtcy5mb3JFYWNoKHMgPT4geyBzLnNlbGVjdGVkID0gZmFsc2U7IH0pO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBpc1N0YWNrSXRlbSA9IHN0YWNrSXRlbXMuc29tZShzID0+IHMua2V5ID09PSBlZmZlY3RpdmVHcm91cEJ5KTtcbiAgaWYgKGlzU3RhY2tJdGVtKSB7XG4gICAgc3RhY2tJdGVtcy5mb3JFYWNoKHMgPT4geyBzLnNlbGVjdGVkID0gcy5rZXkgPT09IGVmZmVjdGl2ZUdyb3VwQnk7IH0pO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBncm91cEl0ZW0gPSBjaGFydENvbmZpZy5ncm91cHMuaXRlbXMuZmluZChnID0+IGcua2V5ID09PSBlZmZlY3RpdmVHcm91cEJ5KTtcbiAgaWYgKGdyb3VwSXRlbSAmJiBhY3RpdmVJbmRpY2F0b3IpIHtcbiAgICBzdGFja0l0ZW1zLmZvckVhY2gocyA9PiB7IHMuc2VsZWN0ZWQgPSBmYWxzZTsgfSk7XG4gICAgaWYgKCFhY3RpdmVJbmRpY2F0b3IuZXh0cmEpIHtcbiAgICAgIGFjdGl2ZUluZGljYXRvci5leHRyYSA9IHsgc3RhY2tzOiB7IG9wdGlvbmFsOiB0cnVlLCBpdGVtczogW10gfSB9O1xuICAgIH0gZWxzZSBpZiAoIWFjdGl2ZUluZGljYXRvci5leHRyYS5zdGFja3MpIHtcbiAgICAgIGFjdGl2ZUluZGljYXRvci5leHRyYS5zdGFja3MgPSB7IG9wdGlvbmFsOiB0cnVlLCBpdGVtczogW10gfTtcbiAgICB9XG4gICAgYWN0aXZlSW5kaWNhdG9yLmV4dHJhLnN0YWNrcy5pdGVtcy5wdXNoKF9tYWtlU3ludGhldGljKHtcbiAgICAgIGtleTogZ3JvdXBJdGVtLmtleSxcbiAgICAgIHNlbGVjdGVkOiB0cnVlLFxuICAgICAgbWVudTogZ3JvdXBJdGVtLm1lbnUsXG4gICAgICBqcXVlcnk6IGdyb3VwSXRlbS5qcXVlcnkgPyB7XG4gICAgICAgIHZhbHVlOiAoKSA9PiBncm91cEl0ZW0uanF1ZXJ5IS52YWx1ZSgpLFxuICAgICAgICBidWlsZEFsaWFzOiAoKSA9PiBncm91cEl0ZW0uanF1ZXJ5IS5idWlsZEFsaWFzKCksXG4gICAgICAgIGJ1aWxkTmFtZTogKF9pdGVtOiBhbnksIHZhbHVlOiBzdHJpbmcpID0+IFN0cmluZyh2YWx1ZSksXG4gICAgICB9IDogdW5kZWZpbmVkLFxuICAgIH0pKTtcbiAgfSBlbHNlIHtcbiAgICBzdGFja0l0ZW1zLmZvckVhY2gocyA9PiB7IHMuc2VsZWN0ZWQgPSBmYWxzZTsgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2FwcGx5U2xpY2VTZWxlY3Rpb24oc2VsZWN0ZWRTbGljZXM6IHN0cmluZ1tdLCBjaGFydENvbmZpZzogT3JnYW5pemVyQ2hhcnRDb25maWcpOiB2b2lkIHtcbiAgY2hhcnRDb25maWcuZmlsdGVycz8uaXRlbXM/LmZvckVhY2goZiA9PiB7IGYuc2VsZWN0ZWQgPSBzZWxlY3RlZFNsaWNlcy5pbmNsdWRlcyhmLmtleSk7IH0pO1xufVxuIl19
|
|
198
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemVyLWNoYXJ0LWFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmV0ZW1lL2pxdWVyeS1vcmdhbml6ZXIvc3JjL2xpYi9tb2RlbHMvb3JnYW5pemVyLWNoYXJ0LWFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSx1QkFBdUIsRUFBNkIsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFpRGxILE1BQU0sVUFBVSxzQkFBc0IsQ0FDcEMsV0FBZ0IsRUFDaEIsVUFBdUMsRUFBRTtJQUV6QyxJQUFJLENBQUMsV0FBVztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzVCLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUMvRSxNQUFNLGVBQWUsR0FBRyxXQUFXLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFN0UsTUFBTSxXQUFXLEdBQXNCLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1NBQ3JFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUUzRCxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQzFCLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMs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QUFhLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7YUFDeEQsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUNkLENBQUMsQ0FBQyxDQUFDO0tBQ0w7U0FBTTtRQUNMLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2xEO0FBQ0gsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUMsY0FBd0IsRUFBRSxXQUFpQztJQUN2RixXQUFXLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9yZ2FuaXplckJ1dHRvbkV2ZW50LCBPcmdhbml6ZXJDb25maWcsIE9yZ2FuaXplclN0YXRlLCBPcmdhbml6ZXJVbmlmaWVkU3RhdGUsIE9yZ2FuaXplclZpZXdTbGljZSwgT3JnYW5pemVyWEZpZWxkIH0gZnJvbSAnLi9vcmdhbml6ZXItY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBidWlsZFlGaWVsZHMsIG5vcm1hbGl6ZU9yZ2FuaXplclN0YXRlLCByZXNvbHZlTWF0Y2hpbmdUZW1wbGF0ZUlkLCByZXNvbHZlWUtleSB9IGZyb20gJy4vb3JnYW5pemVyLXV0aWxzJztcbmltcG9ydCB7IFVuaXRDb25maWcgfSBmcm9tICdAb25ldGVtZS9qcXVlcnktY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyQ2hhcnRJdGVtIHtcbiAga2V5OiBzdHJpbmc7XG4gIHNlbGVjdGVkOiBib29sZWFuO1xuICBtZW51OiB7IGxhYmVsOiBzdHJpbmcgfTtcbiAgdW5pdD86IHN0cmluZyB8IFVuaXRDb25maWc7XG4gIGpxdWVyeT86IHtcbiAgICB2YWx1ZTogKHM/OiBzdHJpbmcpID0+IHN0cmluZztcbiAgICBidWlsZEFsaWFzOiAocz86IHN0cmluZykgPT4gc3RyaW5nO1xuICAgIGJ1aWxkTmFtZT86IChpdGVtOiBhbnksIHZhbHVlPzogc3RyaW5nKSA9PiBzdHJpbmc7XG4gICAgYnVpbGRDb2xvcj86ICh2YWx1ZT86IHN0cmluZykgPT4gc3RyaW5nO1xuICB9O1xuICBncm91cD86IHN0cmluZztcbiAgZXh0cmE/OiB7XG4gICAgc3RhY2tzPzogeyBvcHRpb25hbDogYm9vbGVhbjsgaXRlbXM6IE9yZ2FuaXplckNoYXJ0SXRlbVtdIH07XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplckNoYXJ0U2VjdGlvbiB7XG4gIG9wdGlvbmFsOiBib29sZWFuO1xuICBpdGVtczogT3JnYW5pemVyQ2hhcnRJdGVtW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyQ2hhcnRDb25maWcge1xuICBncm91cHM6IE9yZ2FuaXplckNoYXJ0U2VjdGlvbjtcbiAgaW5kaWNhdG9yczogT3JnYW5pemVyQ2hhcnRTZWN0aW9uO1xuICBmaWx0ZXJzPzogT3JnYW5pemVyQ2hhcnRTZWN0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplckNoYXJ0QnJpZGdlT3B0aW9ucyB7XG4gIG9uRmV0Y2hTbGljZURhdGE/OiBPcmdhbml6ZXJDb25maWdbJ29uRmV0Y2hTbGljZURhdGEnXTtcbiAgb25FeHBvcnRWaXN1YWw/OiAoKSA9PiB2b2lkO1xuICBvbkV4cG9ydERhdGE/OiAoKSA9PiB2b2lkO1xuICBzd2l0Y2hWaWV3PzogT3JnYW5pemVyQ29uZmlnWydzd2l0Y2hWaWV3J107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyQ2hhcnRCaW5kaW5nIHtcbiAgY29uZmlnOiBPcmdhbml6ZXJDb25maWc7XG4gIHN0YXRlOiBPcmdhbml6ZXJTdGF0ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJDaGFydEV2ZW50UmVzdWx0IHtcbiAgYmluZGluZzogT3JnYW5pemVyQ2hhcnRCaW5kaW5nO1xuICBzaG91bGRSZWZldGNoOiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hhcnRDb25maWdUb09yZ2FuaXplcihcbiAgY2hhcnRDb25maWc6IGFueSxcbiAgb3B0aW9uczogT3JnYW5pemVyQ2hhcnRCcmlkZ2VPcHRpb25zID0ge31cbik6IE9yZ2FuaXplckNvbmZpZyB7XG4gIGlmICghY2hhcnRDb25maWcpIHJldHVybiB7fTtcbiAgY29uc3QgeyBvbkZldGNoU2xpY2VEYXRhLCBvbkV4cG9ydFZpc3VhbCwgb25FeHBvcnREYXRhLCBzd2l0Y2hWaWV3IH0gPSBvcHRpb25zO1xuICBjb25zdCBhY3RpdmVJbmRpY2F0b3IgPSBjaGFydENvbmZpZy5pbmRpY2F0b3JzPy5pdGVtcz8uZmluZChpID0+IGkuc2VsZWN0ZWQpO1xuXG4gIGNvbnN0IGJhc2VYRmllbGRzOiBPcmdhbml6ZXJYRmllbGRbXSA9IChjaGFydENvbmZpZy5ncm91cHM/Lml0ZW1zIHx8IFtdKVxuICAgIC5maWx0ZXIoZyA9PiAhX2lzU3ludGhldGljKGcpKVxuICAgIC5tYXAoZyA9PiAoeyBpZDogZy5rZXksIGxhYmVsOiBnLm1lbnUubGFiZWwgfHwgZy5rZXkgfSkpO1xuXG4gIGNvbnN0IHlGaWVsZHMgPSBidWlsZFlGaWVsZHMoXG4gICAgKGNoYXJ0Q29uZmlnLmluZGljYXRvcnM/Lml0ZW1zIHx8IFtdKS5tYXAoaSA9PiAoeyBpZDogaS5rZXksIGxhYmVsOiBpLm1lbnUubGFiZWwgfHwgaS5rZXksIGdyb3VwOiBpLmdyb3VwIH0pKVxuICApO1xuXG4gIGNvbnN0IHN0YWNrRmllbGRzID0gKGFjdGl2ZUluZGljYXRvcj8uZXh0cmE/LnN0YWNrcz8uaXRlbXMgfHwgW10pXG4gICAgLmZpbHRlcigoczogT3JnYW5pemVyQ2hhcnRJdGVtKSA9PiAhX2lzU3ludGhldGljKHMpKVxuICAgIC5tYXAoKHM6IE9yZ2FuaXplckNoYXJ0SXRlbSkgPT4gKHsgaWQ6IHMua2V5LCBsYWJlbDogcy5tZW51LmxhYmVsIHx8IHMua2V5IH0pKTtcblxuICBjb25zdCBzZWVuS2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBtZXJnZWRHcm91cEZpZWxkcyA9IFsuLi5iYXNlWEZpZWxkcywgLi4uc3RhY2tGaWVsZHNdLmZpbHRlcihmID0+IHtcbiAgICBpZiAoc2VlbktleXMuaGFzKGYuaWQpKSByZXR1cm4gZmFsc2U7XG4gICAgc2VlbktleXMuYWRkKGYuaWQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHhGaWVsZHM6IG1lcmdlZEdyb3VwRmllbGRzLFxuICAgIHlGaWVsZHMsXG4gICAgZ3JvdXBzOiBtZXJnZWRHcm91cEZpZWxkcyxcbiAgICBzbGljZXM6IChjaGFydENvbmZpZy5maWx0ZXJzPy5pdGVtcyB8fCBbXSkubWFwKGYgPT4gKHsgaWQ6IGYua2V5LCBsYWJlbDogZi5tZW51LmxhYmVsIHx8IGYua2V5IH0pIGFzIE9yZ2FuaXplclZpZXdTbGljZSksXG4gICAgdGVtcGxhdGVzOiBjaGFydENvbmZpZy50ZW1wbGF0ZXMsXG4gICAgc2hvd1Jlc2V0OiBmYWxzZSxcbiAgICBvbkZldGNoU2xpY2VEYXRhLFxuICAgIHNob3dFeHBvcnQ6ICEhKG9uRXhwb3J0VmlzdWFsIHx8IG9uRXhwb3J0RGF0YSksXG4gICAgb25FeHBvcnRWaXN1YWwsXG4gICAgb25FeHBvcnREYXRhLFxuICAgIHN3aXRjaFZpZXcsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFydENvbmZpZ1RvU3RhdGUoY2hhcnRDb25maWc6IGFueSk6IE9yZ2FuaXplclN0YXRlIHtcbiAgaWYgKCFjaGFydENvbmZpZykgcmV0dXJuIHt9O1xuICBjb25zdCBhY3RpdmVJbmRpY2F0b3IgPSBjaGFydENvbmZpZy5pbmRpY2F0b3JzPy5pdGVtcz8uZmluZChpID0+IGkuc2VsZWN0ZWQpO1xuICBjb25zdCBhY3RpdmVTdGFjayA9IChhY3RpdmVJbmRpY2F0b3I/LmV4dHJhPy5zdGFja3M/Lml0ZW1zIHx8IFtdKS5maW5kKChzOiBPcmdhbml6ZXJDaGFydEl0ZW0pID0+IHMuc2VsZWN0ZWQpO1xuICBjb25zdCBhY3RpdmVHcm91cCA9IGNoYXJ0Q29uZmlnLmdyb3Vwcz8uaXRlbXM/LmZpbmQoZyA9PiBnLnNlbGVjdGVkKTtcbiAgY29uc3QgYWN0aXZlU2xpY2VzID0gKGNoYXJ0Q29uZmlnLmZpbHRlcnM/Lml0ZW1zIHx8IFtdKS5maWx0ZXIoZiA9PiBmLnNlbGVjdGVkKTtcbiAgY29uc3QgaW5kaWNhdG9yR3JvdXAgPSBhY3RpdmVJbmRpY2F0b3I/Lmdyb3VwO1xuICBjb25zdCBzdGF0ZSA9IHtcbiAgICBzZWxlY3RlZFg6IGFjdGl2ZUdyb3VwPy5rZXksXG4gICAgc2VsZWN0ZWRZOiBpbmRpY2F0b3JHcm91cCA/PyBhY3RpdmVJbmRpY2F0b3I/LmtleSxcbiAgICBzZWxlY3RlZFlBZ2dyZWdhdGU6IGluZGljYXRvckdyb3VwID8gYWN0aXZlSW5kaWNhdG9yPy5rZXkgOiB1bmRlZmluZWQsXG4gICAgc2VsZWN0ZWRHcm91cEJ5OiBhY3RpdmVTdGFjaz8ua2V5LFxuICAgIHNlbGVjdGVkU2xpY2VzOiBhY3RpdmVTbGljZXMubWFwKGYgPT4gZi5rZXkpLFxuICB9O1xuICBjb25zdCBvcmdhbml6ZXJDb25maWcgPSBjaGFydENvbmZpZ1RvT3JnYW5pemVyKGNoYXJ0Q29uZmlnKTtcbiAgcmV0dXJuIG5vcm1hbGl6ZU9yZ2FuaXplclN0YXRlKHN0YXRlLCBvcmdhbml6ZXJDb25maWcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRPcmdhbml6ZXJDaGFydEJpbmRpbmcoXG4gIGNoYXJ0Q29uZmlnOiBhbnksXG4gIG9wdGlvbnM6IE9yZ2FuaXplckNoYXJ0QnJpZGdlT3B0aW9ucyA9IHt9XG4pOiBPcmdhbml6ZXJDaGFydEJpbmRpbmcge1xuICByZXR1cm4ge1xuICAgIGNvbmZpZzogY2hhcnRDb25maWdUb09yZ2FuaXplcihjaGFydENvbmZpZywgb3B0aW9ucyksXG4gICAgc3RhdGU6IGNoYXJ0Q29uZmlnVG9TdGF0ZShjaGFydENvbmZpZylcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoYXJ0Q29uZmlnVG9VbmlmaWVkU3RhdGUoXG4gIGNoYXJ0Q29uZmlnOiBhbnksXG4gIHZpZXdNb2RlOiAnY2hhcnQnIHwgJ3RhYmxlJyA9ICdjaGFydCdcbik6IE9yZ2FuaXplclVuaWZpZWRTdGF0ZSB7XG4gIGNvbnN0IHN0YXRlID0gY2hhcnRDb25maWdUb1N0YXRlKGNoYXJ0Q29uZmlnKTtcbiAgcmV0dXJuIHtcbiAgICB2aWV3TW9kZSxcbiAgICBkaW1lbnNpb246IHN0YXRlLnNlbGVjdGVkWCxcbiAgICBtZXRyaWM6IHJlc29sdmVZS2V5KHN0YXRlLnNlbGVjdGVkWSwgc3RhdGUuc2VsZWN0ZWRZQWdncmVnYXRlKSxcbiAgICBtZXRyaWNBZ2dyZWdhdGU6IHN0YXRlLnNlbGVjdGVkWUFnZ3JlZ2F0ZSxcbiAgICBicmVha2Rvd246IHN0YXRlLnNlbGVjdGVkR3JvdXBCeSxcbiAgICBmaWx0ZXJzOiBzdGF0ZS5zZWxlY3RlZFNsaWNlcyxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5T3JnYW5pemVyRXZlbnRUb0NoYXJ0KFxuICBldmVudDogT3JnYW5pemVyQnV0dG9uRXZlbnQsXG4gIGNoYXJ0Q29uZmlnOiBhbnlcbik6IHZvaWQge1xuICBpZiAoIWNoYXJ0Q29uZmlnKSByZXR1cm47XG4gIGNvbnN0IHN0YXRlID0gZXZlbnQuc3RhdGU7XG4gIF9jbGVhblN5bnRoZXRpY3MoY2hhcnRDb25maWcpO1xuICBpZiAoc3RhdGUuc2VsZWN0ZWRYICE9PSB1bmRlZmluZWQpIF9hcHBseVhTZWxlY3Rpb24oc3RhdGUuc2VsZWN0ZWRYLCBjaGFydENvbmZpZyk7XG4gIGlmIChzdGF0ZS5zZWxlY3RlZFkgIT09IHVuZGVmaW5lZCkgX2FwcGx5WVNlbGVjdGlvbihzdGF0ZS5zZWxlY3RlZFksIHN0YXRlLnNlbGVjdGVkWUFnZ3JlZ2F0ZSwgY2hhcnRDb25maWcpO1xuICBjb25zdCBlZmZlY3RpdmVHcm91cEJ5ID0gc3RhdGUuc2VsZWN0ZWRHcm91cEJ5ICE9PSBzdGF0ZS5zZWxlY3RlZFggPyBzdGF0ZS5zZWxlY3RlZEdyb3VwQnkgOiB1bmRlZmluZWQ7XG4gIF9hcHBseUdyb3VwQnlTZWxlY3Rpb24oZWZmZWN0aXZlR3JvdXBCeSwgY2hhcnRDb25maWcpO1xuICBpZiAoc3RhdGUuc2VsZWN0ZWRTbGljZXMgIT09IHVuZGVmaW5lZCkgX2FwcGx5U2xpY2VTZWxlY3Rpb24oc3RhdGUuc2VsZWN0ZWRTbGljZXMsIGNoYXJ0Q29uZmlnKTtcbiAgZXZlbnQucmVzb2x2ZWRZVW5pdCA9IHJlc29sdmVZVW5pdChjaGFydENvbmZpZywgZXZlbnQuc3RhdGUuc2VsZWN0ZWRZLCBldmVudC5zdGF0ZS5zZWxlY3RlZFlBZ2dyZWdhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlT3JnYW5pemVyQ2hhcnRFdmVudChcbiAgZXZlbnQ6IE9yZ2FuaXplckJ1dHRvbkV2ZW50LFxuICBjaGFydENvbmZpZzogYW55LFxuICBjdXJyZW50QmluZGluZzogT3JnYW5pemVyQ2hhcnRCaW5kaW5nIHwgdW5kZWZpbmVkLFxuICBvcHRpb25zOiBPcmdhbml6ZXJDaGFydEJyaWRnZU9wdGlvbnMgPSB7fVxuKTogT3JnYW5pemVyQ2hhcnRFdmVudFJlc3VsdCB7XG4gIGlmIChldmVudC50eXBlID09PSAndmlld1N3aXRjaGVkJykge1xuICAgIHJldHVybiB7XG4gICAgICBiaW5kaW5nOiB7XG4gICAgICAgIGNvbmZpZzogY2hhcnRDb25maWdUb09yZ2FuaXplcihjaGFydENvbmZpZywgb3B0aW9ucyksXG4gICAgICAgIHN0YXRlOiB7IC4uLmV2ZW50LnN0YXRlIH1cbiAgICAgIH0sXG4gICAgICBzaG91bGRSZWZldGNoOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBhcHBseU9yZ2FuaXplckV2ZW50VG9DaGFydChldmVudCwgY2hhcnRDb25maWcpO1xuXG4gIGlmIChldmVudC50eXBlID09PSAneVNlbGVjdGVkJyB8fCBldmVudC50eXBlID09PSAndGVtcGxhdGVTZWxlY3RlZCcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYmluZGluZzogYnVpbGRPcmdhbml6ZXJDaGFydEJpbmRpbmcoY2hhcnRDb25maWcsIG9wdGlvbnMpLFxuICAgICAgc2hvdWxkUmVmZXRjaDogdHJ1ZVxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGJpbmRpbmc6IHtcbiAgICAgIGNvbmZpZzogY3VycmVudEJpbmRpbmc/LmNvbmZpZyA/PyBjaGFydENvbmZpZ1RvT3JnYW5pemVyKGNoYXJ0Q29uZmlnLCBvcHRpb25zKSxcbiAgICAgIHN0YXRlOiBldmVudC5zdGF0ZVxuICAgIH0sXG4gICAgc2hvdWxkUmVmZXRjaDogZXZlbnQudHlwZSAhPT0gJ3NsaWNlU2VsZWN0ZWQnXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlWVVuaXQoXG4gIGNoYXJ0Q29uZmlnOiBhbnksXG4gIHNlbGVjdGVkWTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBzZWxlY3RlZFlBZ2dyZWdhdGU6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogc3RyaW5nIHwgVW5pdENvbmZpZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghY2hhcnRDb25maWcgfHwgIXNlbGVjdGVkWSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgYWN0dWFsS2V5ID0gcmVzb2x2ZVlLZXkoc2VsZWN0ZWRZLCBzZWxlY3RlZFlBZ2dyZWdhdGUpO1xuICByZXR1cm4gY2hhcnRDb25maWcuaW5kaWNhdG9ycz8uaXRlbXM/LmZpbmQoaSA9PiBpLmtleSA9PT0gYWN0dWFsS2V5KT8udW5pdDtcbn1cblxuY29uc3QgX3N5bnRoZXRpY0l0ZW1zID0gbmV3IFdlYWtTZXQ8T3JnYW5pemVyQ2hhcnRJdGVtPigpO1xuXG5mdW5jdGlvbiBfbWFrZVN5bnRoZXRpYyhpdGVtOiBPcmdhbml6ZXJDaGFydEl0ZW0pOiBPcmdhbml6ZXJDaGFydEl0ZW0ge1xuICBfc3ludGhldGljSXRlbXMuYWRkKGl0ZW0pO1xuICByZXR1cm4gaXRlbTtcbn1cblxuZnVuY3Rpb24gX2lzU3ludGhldGljKGl0ZW06IE9yZ2FuaXplckNoYXJ0SXRlbSk6IGJvb2xlYW4ge1xuICByZXR1cm4gX3N5bnRoZXRpY0l0ZW1zLmhhcyhpdGVtKTtcbn1cblxuZnVuY3Rpb24gX2NsZWFuU3ludGhldGljcyhjaGFydENvbmZpZzogT3JnYW5pemVyQ2hhcnRDb25maWcpOiB2b2lkIHtcbiAgY2hhcnRDb25maWcuZ3JvdXBzLml0ZW1zID0gY2hhcnRDb25maWcuZ3JvdXBzLml0ZW1zLmZpbHRlcihnID0+ICFfaXNTeW50aGV0aWMoZykpO1xuICBjaGFydENvbmZpZy5pbmRpY2F0b3JzLml0ZW1zLmZvckVhY2goaW5kID0+IHtcbiAgICBpZiAoaW5kLmV4dHJhPy5zdGFja3M/Lml0ZW1zKSB7XG4gICAgICBpbmQuZXh0cmEuc3RhY2tzLml0ZW1zID0gaW5kLmV4dHJhLnN0YWNrcy5pdGVtcy5maWx0ZXIoKHM6IE9yZ2FuaXplckNoYXJ0SXRlbSkgPT4gIV9pc1N5bnRoZXRpYyhzKSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gX2FwcGx5WFNlbGVjdGlvbihzZWxlY3RlZFg6IHN0cmluZywgY2hhcnRDb25maWc6IE9yZ2FuaXplckNoYXJ0Q29uZmlnKTogdm9pZCB7XG4gIGNvbnN0IGlzR3JvdXBJdGVtID0gY2hhcnRDb25maWcuZ3JvdXBzLml0ZW1zLnNvbWUoZyA9PiBnLmtleSA9PT0gc2VsZWN0ZWRYKTtcbiAgaWYgKGlzR3JvdXBJdGVtKSB7XG4gICAgY2hhcnRDb25maWcuZ3JvdXBzLml0ZW1zLmZvckVhY2goZyA9PiB7IGcuc2VsZWN0ZWQgPSBnLmtleSA9PT0gc2VsZWN0ZWRYOyB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgYWxsU3RhY2tzOiBPcmdhbml6ZXJDaGFydEl0ZW1bXSA9IGNoYXJ0Q29uZmlnLmluZGljYXRvcnMuaXRlbXMuZmxhdE1hcChpID0+IGkuZXh0cmE/LnN0YWNrcz8uaXRlbXMgPz8gW10pO1xuICBjb25zdCBzdGFja0l0ZW0gPSBhbGxTdGFja3MuZmluZChzID0+IHMua2V5ID09PSBzZWxlY3RlZFgpO1xuICBpZiAoc3RhY2tJdGVtKSB7XG4gICAgY2hhcnRDb25maWcuZ3JvdXBzLml0ZW1zLmZvckVhY2goZyA9PiB7IGcuc2VsZWN0ZWQgPSBmYWxzZTsgfSk7XG4gICAgY2hhcnRDb25maWcuZ3JvdXBzLml0ZW1zLnB1c2goX21ha2VTeW50aGV0aWMoe1xuICAgICAga2V5OiBzdGFja0l0ZW0ua2V5LFxuICAgICAgc2VsZWN0ZWQ6IHRydWUsXG4gICAgICBtZW51OiBzdGFja0l0ZW0ubWVudSxcbiAgICAgIGpxdWVyeTogc3RhY2tJdGVtLmpxdWVyeVxuICAgICAgICA/IHsgdmFsdWU6ICgpID0+IHN0YWNrSXRlbS5qcXVlcnkhLnZhbHVlKCksIGJ1aWxkQWxpYXM6ICgpID0+IHN0YWNrSXRlbS5qcXVlcnkhLmJ1aWxkQWxpYXMoKSB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0pKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfYXBwbHlZU2VsZWN0aW9uKHNlbGVjdGVkWTogc3RyaW5nLCBzZWxlY3RlZFlBZ2dyZWdhdGU6IHN0cmluZyB8IHVuZGVmaW5lZCwgY2hhcnRDb25maWc6IE9yZ2FuaXplckNoYXJ0Q29uZmlnKTogdm9pZCB7XG4gIGNvbnN0IGFjdHVhbEtleSA9IHJlc29sdmVZS2V5KHNlbGVjdGVkWSwgc2VsZWN0ZWRZQWdncmVnYXRlKTtcbiAgY2hhcnRDb25maWcuaW5kaWNhdG9ycy5pdGVtcy5mb3JFYWNoKGkgPT4geyBpLnNlbGVjdGVkID0gaS5rZXkgPT09IGFjdHVhbEtleTsgfSk7XG4gIGNoYXJ0Q29uZmlnLmluZGljYXRvcnMuaXRlbXMuZm9yRWFjaChpID0+IHtcbiAgICBpLmV4dHJhPy5zdGFja3M/Lml0ZW1zPy5mb3JFYWNoKChzOiBPcmdhbml6ZXJDaGFydEl0ZW0pID0+IHsgcy5zZWxlY3RlZCA9IGZhbHNlOyB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIF9hcHBseUdyb3VwQnlTZWxlY3Rpb24oZWZmZWN0aXZlR3JvdXBCeTogc3RyaW5nIHwgdW5kZWZpbmVkLCBjaGFydENvbmZpZzogT3JnYW5pemVyQ2hhcnRDb25maWcpOiB2b2lkIHtcbiAgY29uc3QgYWN0aXZlSW5kaWNhdG9yID0gY2hhcnRDb25maWcuaW5kaWNhdG9ycy5pdGVtcy5maW5kKGkgPT4gaS5zZWxlY3RlZCk7XG4gIGNvbnN0IHN0YWNrSXRlbXM6IE9yZ2FuaXplckNoYXJ0SXRlbVtdID0gYWN0aXZlSW5kaWNhdG9yPy5leHRyYT8uc3RhY2tzPy5pdGVtcyA/PyBbXTtcbiAgaWYgKGVmZmVjdGl2ZUdyb3VwQnkgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0YWNrSXRlbXMuZm9yRWFjaChzID0+IHsgcy5zZWxlY3RlZCA9IGZhbHNlOyB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgaXNTdGFja0l0ZW0gPSBzdGFja0l0ZW1zLnNvbWUocyA9PiBzLmtleSA9PT0gZWZmZWN0aXZlR3JvdXBCeSk7XG4gIGlmIChpc1N0YWNrSXRlbSkge1xuICAgIHN0YWNrSXRlbXMuZm9yRWFjaChzID0+IHsgcy5zZWxlY3RlZCA9IHMua2V5ID09PSBlZmZlY3RpdmVHcm91cEJ5OyB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZ3JvdXBJdGVtID0gY2hhcnRDb25maWcuZ3JvdXBzLml0ZW1zLmZpbmQoZyA9PiBnLmtleSA9PT0gZWZmZWN0aXZlR3JvdXBCeSk7XG4gIGlmIChncm91cEl0ZW0gJiYgYWN0aXZlSW5kaWNhdG9yKSB7XG4gICAgc3RhY2tJdGVtcy5mb3JFYWNoKHMgPT4geyBzLnNlbGVjdGVkID0gZmFsc2U7IH0pO1xuICAgIGlmICghYWN0aXZlSW5kaWNhdG9yLmV4dHJhKSB7XG4gICAgICBhY3RpdmVJbmRpY2F0b3IuZXh0cmEgPSB7IHN0YWNrczogeyBvcHRpb25hbDogdHJ1ZSwgaXRlbXM6IFtdIH0gfTtcbiAgICB9IGVsc2UgaWYgKCFhY3RpdmVJbmRpY2F0b3IuZXh0cmEuc3RhY2tzKSB7XG4gICAgICBhY3RpdmVJbmRpY2F0b3IuZXh0cmEuc3RhY2tzID0geyBvcHRpb25hbDogdHJ1ZSwgaXRlbXM6IFtdIH07XG4gICAgfVxuICAgIGFjdGl2ZUluZGljYXRvci5leHRyYS5zdGFja3MuaXRlbXMucHVzaChfbWFrZVN5bnRoZXRpYyh7XG4gICAgICBrZXk6IGdyb3VwSXRlbS5rZXksXG4gICAgICBzZWxlY3RlZDogdHJ1ZSxcbiAgICAgIG1lbnU6IGdyb3VwSXRlbS5tZW51LFxuICAgICAganF1ZXJ5OiBncm91cEl0ZW0uanF1ZXJ5ID8ge1xuICAgICAgICB2YWx1ZTogKCkgPT4gZ3JvdXBJdGVtLmpxdWVyeSEudmFsdWUoKSxcbiAgICAgICAgYnVpbGRBbGlhczogKCkgPT4gZ3JvdXBJdGVtLmpxdWVyeSEuYnVpbGRBbGlhcygpLFxuICAgICAgICBidWlsZE5hbWU6IChfaXRlbTogYW55LCB2YWx1ZTogc3RyaW5nKSA9PiBTdHJpbmcodmFsdWUpLFxuICAgICAgfSA6IHVuZGVmaW5lZCxcbiAgICB9KSk7XG4gIH0gZWxzZSB7XG4gICAgc3RhY2tJdGVtcy5mb3JFYWNoKHMgPT4geyBzLnNlbGVjdGVkID0gZmFsc2U7IH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9hcHBseVNsaWNlU2VsZWN0aW9uKHNlbGVjdGVkU2xpY2VzOiBzdHJpbmdbXSwgY2hhcnRDb25maWc6IE9yZ2FuaXplckNoYXJ0Q29uZmlnKTogdm9pZCB7XG4gIGNoYXJ0Q29uZmlnLmZpbHRlcnM/Lml0ZW1zPy5mb3JFYWNoKGYgPT4geyBmLnNlbGVjdGVkID0gc2VsZWN0ZWRTbGljZXMuaW5jbHVkZXMoZi5rZXkpOyB9KTtcbn1cblxuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemVyLWNvbmZpZy5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmV0ZW1lL2pxdWVyeS1vcmdhbml6ZXIvc3JjL2xpYi9tb2RlbHMvb3JnYW5pemVyLWNvbmZpZy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNsaWNlQ29uZmlnIH0gZnJvbSAnLi4vc2xpY2UtcGFuZWwvc2xpY2UtcGFuZWwubW9kZWwnO1xuaW1wb3J0IHsgVW5pdENvbmZpZyB9IGZyb20gJ0BvbmV0ZW1lL2pxdWVyeS1jb3JlJztcblxuZXhwb3J0IHR5cGUgRmllbGRTdGF0ZSA9ICdyZWFkeScgfCAnbG9hZGluZycgfCAnZXJyb3InO1xuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJWaWV3RmllbGQge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICB2aXNpYmxlPzogYm9vbGVhbjtcbiAgc3RhdGU/OiBGaWVsZFN0YXRlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplclhGaWVsZCB7XG4gIGlkOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJZQWdncmVnYXRlIHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJZRmllbGQge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBhZ2dyZWdhdGVzPzogT3JnYW5pemVyWUFnZ3JlZ2F0ZVtdO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyVmlld0dyb3VwIHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJWaWV3U2xpY2Uge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplclRlbXBsYXRlIHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbiAgeEZpZWxkPzogc3RyaW5nO1xuICB5RmllbGQ/OiBzdHJpbmc7XG4gIHlBZ2dyZWdhdGU/OiBzdHJpbmc7XG4gIGdyb3VwQnk/
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemVyLWNvbmZpZy5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmV0ZW1lL2pxdWVyeS1vcmdhbml6ZXIvc3JjL2xpYi9tb2RlbHMvb3JnYW5pemVyLWNvbmZpZy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNsaWNlQ29uZmlnIH0gZnJvbSAnLi4vc2xpY2UtcGFuZWwvc2xpY2UtcGFuZWwubW9kZWwnO1xuaW1wb3J0IHsgVW5pdENvbmZpZyB9IGZyb20gJ0BvbmV0ZW1lL2pxdWVyeS1jb3JlJztcblxuZXhwb3J0IHR5cGUgRmllbGRTdGF0ZSA9ICdyZWFkeScgfCAnbG9hZGluZycgfCAnZXJyb3InO1xuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJWaWV3RmllbGQge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICB2aXNpYmxlPzogYm9vbGVhbjtcbiAgc3RhdGU/OiBGaWVsZFN0YXRlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplclhGaWVsZCB7XG4gIGlkOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJZQWdncmVnYXRlIHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJZRmllbGQge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBhZ2dyZWdhdGVzPzogT3JnYW5pemVyWUFnZ3JlZ2F0ZVtdO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyVmlld0dyb3VwIHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJWaWV3U2xpY2Uge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplclRlbXBsYXRlIHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbiAgeEZpZWxkPzogc3RyaW5nO1xuICB5RmllbGQ/OiBzdHJpbmc7XG4gIHlBZ2dyZWdhdGU/OiBzdHJpbmc7XG4gIGdyb3VwQnk/OiBzdHJpbmc7XG4gIHNlbGVjdGVkU2xpY2VzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyQ29uZmlnIHtcbiAgZmllbGRzPzogT3JnYW5pemVyVmlld0ZpZWxkW107XG4gIHhGaWVsZHM/OiBPcmdhbml6ZXJYRmllbGRbXTtcbiAgeUZpZWxkcz86IE9yZ2FuaXplcllGaWVsZFtdO1xuICBncm91cHM/OiBPcmdhbml6ZXJWaWV3R3JvdXBbXTtcbiAgc2xpY2VzPzogT3JnYW5pemVyVmlld1NsaWNlW107XG4gIHRlbXBsYXRlcz86IE9yZ2FuaXplclRlbXBsYXRlW107XG5cbiAgb25GZXRjaEZpZWxkRGF0YT86IChmaWVsZElkOiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBhbnk+W10+O1xuICBvbkZldGNoU2xpY2VEYXRhPzogKGZpbHRlcktleTogc3RyaW5nKSA9PiBPYnNlcnZhYmxlPGFueVtdPiB8IFByb21pc2U8YW55W10+O1xuICBvblNsaWNlQ2xpY2s/OiAoKSA9PiB2b2lkO1xuXG4gIHNob3dFeHBvcnQ/OiBib29sZWFuO1xuICBvbkV4cG9ydD86ICgpID0+IHZvaWQ7XG4gIG9uRXhwb3J0VmlzdWFsPzogKCkgPT4gdm9pZDtcbiAgb25FeHBvcnREYXRhPzogKCkgPT4gdm9pZDtcblxuICBzaG93UHJlZmVyZW5jZXM/OiBib29sZWFuO1xuICBoYXNTYXZlZFByZWZlcmVuY2VzPzogYm9vbGVhbjtcbiAgb25QcmVmZXJlbmNlc0VkaXQ/OiAoKSA9PiB2b2lkO1xuICBvblByZWZlcmVuY2VzU2F2ZT86ICgpID0+IHZvaWQ7XG4gIG9uUHJlZmVyZW5jZXNDbGVhcj86ICgpID0+IHZvaWQ7XG5cbiAgc2hvd1Jlc2V0PzogYm9vbGVhbjtcbiAgbWVudVBvc2l0aW9uPzogJ2Fib3ZlJyB8ICdiZWxvdyc7XG4gIG1lbnVDbGFzcz86IHN0cmluZztcbiAgYnV0dG9uTGFiZWw/OiBzdHJpbmc7XG4gIGJ1dHRvbkljb24/OiBzdHJpbmc7XG4gIHNob3dCdXR0b25JY29uPzogYm9vbGVhbjtcblxuICBzd2l0Y2hWaWV3Pzoge1xuICAgIGN1cnJlbnRWaWV3OiAnY2hhcnQnIHwgJ3RhYmxlJztcbiAgICBvblN3aXRjaDogKG5ld1ZpZXc6ICdjaGFydCcgfCAndGFibGUnKSA9PiB2b2lkO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplclNsaWNlU3RhdGUge1xuICBzbGljZUNvbmZpZ3M6IFNsaWNlQ29uZmlnPGFueT5bXTtcbiAgdGFza3M6IGFueVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplclN0YXRlIHtcbiAgdmlld01vZGU/OiAnY2hhcnQnIHwgJ3RhYmxlJztcblxuICB2aXNpYmxlRmllbGRzPzogc3RyaW5nW107XG5cbiAgc2VsZWN0ZWRYPzogc3RyaW5nO1xuICBzZWxlY3RlZFk/OiBzdHJpbmc7XG4gIHNlbGVjdGVkWUFnZ3JlZ2F0ZT86IHN0cmluZztcblxuICBzZWxlY3RlZEdyb3VwQnk/OiBzdHJpbmc7XG4gIHNlbGVjdGVkU2xpY2VzPzogc3RyaW5nW107XG4gIHNlbGVjdGVkVGVtcGxhdGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyQnV0dG9uRXZlbnQge1xuICB0eXBlOiAnZmllbGRUb2dnbGVkJyB8ICd4U2VsZWN0ZWQnIHwgJ3lTZWxlY3RlZCcgfCAnZ3JvdXBCeVNlbGVjdGVkJyB8ICd0ZW1wbGF0ZVNlbGVjdGVkJyB8ICdzbGljZVNlbGVjdGVkJyB8ICdyZXNldCcgfCAndmlld1N3aXRjaGVkJztcbiAgc3RhdGU6IE9yZ2FuaXplclN0YXRlO1xuICBzb3VyY2U/OiAndXNlcicgfCAnYXBpJztcbiAgcmVzb2x2ZWRZVW5pdD86IHN0cmluZyB8IFVuaXRDb25maWc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyVW5pZmllZFN0YXRlIHtcbiAgdmlld01vZGU6ICdjaGFydCcgfCAndGFibGUnO1xuICBkaW1lbnNpb24/OiBzdHJpbmc7XG4gIG1ldHJpYz86IHN0cmluZztcbiAgbWV0cmljQWdncmVnYXRlPzogc3RyaW5nO1xuICBicmVha2Rvd24/OiBzdHJpbmc7XG4gIGZpbHRlcnM/OiBzdHJpbmdbXTtcbn1cbiJdfQ==
|