valtech-components 2.0.501 → 2.0.503

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.
@@ -1,7 +1,8 @@
1
1
  import { CommonModule } from '@angular/common';
2
2
  import { Component, EventEmitter, inject, Input, Output } from '@angular/core';
3
+ import { IonButton, IonIcon, IonPopover, IonList, IonItem, IonLabel } from '@ionic/angular/standalone';
3
4
  import { addIcons } from 'ionicons';
4
- import { language } from 'ionicons/icons';
5
+ import { language, globeOutline, checkmark } from 'ionicons/icons';
5
6
  import { I18nService } from '../../../services/i18n';
6
7
  import { PopoverSelectorComponent } from '../popover-selector/popover-selector.component';
7
8
  import * as i0 from "@angular/core";
@@ -12,11 +13,16 @@ import * as i0 from "@angular/core";
12
13
  * By default, language changes are reactive (no page reload).
13
14
  * Set forceReload: true in props to reload on change.
14
15
  *
15
- * @example
16
+ * @example Default mode (dropdown with label):
16
17
  * <val-language-selector
17
18
  * [props]="{ showLabel: true, showFlags: true }">
18
19
  * </val-language-selector>
19
20
  *
21
+ * @example Icon mode (compact for headers/toolbars):
22
+ * <val-language-selector
23
+ * [props]="{ mode: 'icon', color: 'primary' }">
24
+ * </val-language-selector>
25
+ *
20
26
  * @input props: LanguageSelectorMetadata - Configuration for the language selector
21
27
  * @output languageChange: EventEmitter<string> - Emitted when language changes
22
28
  */
@@ -31,6 +37,12 @@ export class LanguageSelectorComponent {
31
37
  * Emits the selected language code.
32
38
  */
33
39
  this.languageChange = new EventEmitter();
40
+ /** Unique ID for the icon mode popover trigger */
41
+ this.popoverId = `lang-selector-${Math.random().toString(36).substring(2, 9)}`;
42
+ /** Available languages (exposed for icon mode template) */
43
+ this.availableLanguages = [];
44
+ /** Current language (exposed for icon mode template) */
45
+ this.currentLanguage = '';
34
46
  this.i18n = inject(I18nService);
35
47
  /** Default language display names */
36
48
  this.defaultLanguageNames = {
@@ -48,9 +60,11 @@ export class LanguageSelectorComponent {
48
60
  fr: '🇫🇷',
49
61
  de: '🇩🇪',
50
62
  };
51
- addIcons({ language });
63
+ addIcons({ language, globeOutline, checkmark });
52
64
  }
53
65
  ngOnInit() {
66
+ this.currentLanguage = this.i18n.lang();
67
+ this.availableLanguages = this.props.availableLanguages || this.i18n.supportedLanguages();
54
68
  this.initializePopoverProps();
55
69
  }
56
70
  initializePopoverProps() {
@@ -81,6 +95,7 @@ export class LanguageSelectorComponent {
81
95
  okText: 'Aceptar',
82
96
  };
83
97
  }
98
+ /** Get display name for a language code (public for template access) */
84
99
  getLanguageDisplayName(languageCode) {
85
100
  // Use custom names if provided
86
101
  if (this.props.customLanguageNames?.[languageCode]) {
@@ -100,29 +115,105 @@ export class LanguageSelectorComponent {
100
115
  onLanguageChange(selectedLanguage) {
101
116
  if (typeof selectedLanguage === 'string') {
102
117
  const newLang = selectedLanguage;
118
+ // Update current language for icon mode
119
+ this.currentLanguage = newLang;
103
120
  // Emit the change event
104
121
  this.languageChange.emit(selectedLanguage);
105
122
  // Set the new language (reactive by default, reload if forceReload is true)
106
123
  this.i18n.setLanguage(newLang, this.props.forceReload);
107
- // Update popover selected value for reactive UI
124
+ // Update popover selected value for reactive UI (default mode)
108
125
  if (this.popoverProps) {
109
126
  this.popoverProps = { ...this.popoverProps, selectedValue: newLang };
110
127
  }
111
128
  }
112
129
  }
113
130
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LanguageSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
114
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: LanguageSelectorComponent, isStandalone: true, selector: "val-language-selector", inputs: { props: "props" }, outputs: { languageChange: "languageChange" }, ngImport: i0, template: `
115
- <val-popover-selector [props]="popoverProps" (selectionChange)="onLanguageChange($event)"> </val-popover-selector>
116
- `, isInline: true, styles: [":host{display:inline-block;width:auto}val-popover-selector .popover-selector-container{display:inline-block;width:auto}val-popover-selector .selector-trigger .trigger-text{display:inline-flex;align-items:center;gap:8px;font-weight:700}val-popover-selector .selector-trigger .trigger-text .flag-emoji{font-size:1.2em;line-height:1;filter:drop-shadow(0 1px 2px rgba(0,0,0,.1));transition:transform .2s ease}val-popover-selector .selector-trigger.has-flag .trigger-text{letter-spacing:.025em}val-popover-selector .selector-trigger:hover:not([disabled]) .trigger-text .flag-emoji{transform:scale(1.1)}val-popover-selector .option-content{gap:10px;padding:8px 0}val-popover-selector .option-content .flag-emoji{font-size:1.1em;filter:drop-shadow(0 1px 2px rgba(0,0,0,.08))}val-popover-selector .option-content span{font-weight:600;letter-spacing:.01em}.language-flag{font-size:1.2em;margin-right:6px;vertical-align:middle;line-height:1;filter:drop-shadow(0 1px 3px rgba(0,0,0,.1));transition:all .2s ease}@media (max-width: 768px){val-popover-selector .selector-trigger .trigger-text{font-size:13px;gap:6px}val-popover-selector .selector-trigger .trigger-text .flag-emoji{font-size:1.1em}}val-popover-selector .selector-trigger:hover:not([disabled]) .trigger-text .flag-emoji{transform:scale(1.1) rotate(3deg);transition:transform .25s cubic-bezier(.4,0,.2,1)}val-popover-selector .selector-trigger:active .trigger-text .flag-emoji{transform:scale(1.05)}val-popover-selector .language-changing .flag-emoji{animation:languageSwitch .4s ease-in-out}@keyframes languageSwitch{0%{transform:scale(1)}50%{transform:scale(1.15) rotate(8deg)}to{transform:scale(1)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: PopoverSelectorComponent, selector: "val-popover-selector", inputs: ["props"], outputs: ["selectionChange"] }] }); }
131
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LanguageSelectorComponent, isStandalone: true, selector: "val-language-selector", inputs: { props: "props" }, outputs: { languageChange: "languageChange" }, ngImport: i0, template: `
132
+ <!-- Default mode: use popover-selector -->
133
+ @if (props.mode !== 'icon') {
134
+ <val-popover-selector [props]="popoverProps" (selectionChange)="onLanguageChange($event)"> </val-popover-selector>
135
+ }
136
+
137
+ <!-- Icon mode: compact globe button with popover -->
138
+ @if (props.mode === 'icon') {
139
+ <ion-button
140
+ [id]="popoverId"
141
+ [color]="props.color || 'medium'"
142
+ [fill]="props.fill || 'clear'"
143
+ [size]="props.size || 'default'"
144
+ [disabled]="props.disabled"
145
+ class="icon-mode-button"
146
+ >
147
+ <ion-icon slot="icon-only" [name]="props.icon || 'globe-outline'"></ion-icon>
148
+ </ion-button>
149
+
150
+ <ion-popover [trigger]="popoverId" [dismissOnSelect]="true">
151
+ <ng-template>
152
+ <ion-list>
153
+ @for (lang of availableLanguages; track lang) {
154
+ <ion-item
155
+ [button]="true"
156
+ [detail]="false"
157
+ (click)="onLanguageChange(lang)"
158
+ [class.selected]="lang === currentLanguage"
159
+ >
160
+ <ion-label>{{ getLanguageDisplayName(lang) }}</ion-label>
161
+ @if (lang === currentLanguage) {
162
+ <ion-icon slot="end" name="checkmark" color="primary"></ion-icon>
163
+ }
164
+ </ion-item>
165
+ }
166
+ </ion-list>
167
+ </ng-template>
168
+ </ion-popover>
169
+ }
170
+ `, isInline: true, styles: [":host{display:inline-block;width:auto}val-popover-selector .popover-selector-container{display:inline-block;width:auto}val-popover-selector .selector-trigger .trigger-text{display:inline-flex;align-items:center;gap:8px;font-weight:700}val-popover-selector .selector-trigger .trigger-text .flag-emoji{font-size:1.2em;line-height:1;filter:drop-shadow(0 1px 2px rgba(0,0,0,.1));transition:transform .2s ease}val-popover-selector .selector-trigger.has-flag .trigger-text{letter-spacing:.025em}val-popover-selector .selector-trigger:hover:not([disabled]) .trigger-text .flag-emoji{transform:scale(1.1)}val-popover-selector .option-content{gap:10px;padding:8px 0}val-popover-selector .option-content .flag-emoji{font-size:1.1em;filter:drop-shadow(0 1px 2px rgba(0,0,0,.08))}val-popover-selector .option-content span{font-weight:600;letter-spacing:.01em}.language-flag{font-size:1.2em;margin-right:6px;vertical-align:middle;line-height:1;filter:drop-shadow(0 1px 3px rgba(0,0,0,.1));transition:all .2s ease}@media (max-width: 768px){val-popover-selector .selector-trigger .trigger-text{font-size:13px;gap:6px}val-popover-selector .selector-trigger .trigger-text .flag-emoji{font-size:1.1em}}val-popover-selector .selector-trigger:hover:not([disabled]) .trigger-text .flag-emoji{transform:scale(1.1) rotate(3deg);transition:transform .25s cubic-bezier(.4,0,.2,1)}val-popover-selector .selector-trigger:active .trigger-text .flag-emoji{transform:scale(1.05)}val-popover-selector .language-changing .flag-emoji{animation:languageSwitch .4s ease-in-out}@keyframes languageSwitch{0%{transform:scale(1)}50%{transform:scale(1.15) rotate(8deg)}to{transform:scale(1)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: PopoverSelectorComponent, selector: "val-popover-selector", inputs: ["props"], outputs: ["selectionChange"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonPopover, selector: "ion-popover" }, { kind: "component", type: IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }] }); }
117
171
  }
118
172
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LanguageSelectorComponent, decorators: [{
119
173
  type: Component,
120
- args: [{ selector: 'val-language-selector', standalone: true, imports: [CommonModule, PopoverSelectorComponent], template: `
121
- <val-popover-selector [props]="popoverProps" (selectionChange)="onLanguageChange($event)"> </val-popover-selector>
174
+ args: [{ selector: 'val-language-selector', standalone: true, imports: [CommonModule, PopoverSelectorComponent, IonButton, IonIcon, IonPopover, IonList, IonItem, IonLabel], template: `
175
+ <!-- Default mode: use popover-selector -->
176
+ @if (props.mode !== 'icon') {
177
+ <val-popover-selector [props]="popoverProps" (selectionChange)="onLanguageChange($event)"> </val-popover-selector>
178
+ }
179
+
180
+ <!-- Icon mode: compact globe button with popover -->
181
+ @if (props.mode === 'icon') {
182
+ <ion-button
183
+ [id]="popoverId"
184
+ [color]="props.color || 'medium'"
185
+ [fill]="props.fill || 'clear'"
186
+ [size]="props.size || 'default'"
187
+ [disabled]="props.disabled"
188
+ class="icon-mode-button"
189
+ >
190
+ <ion-icon slot="icon-only" [name]="props.icon || 'globe-outline'"></ion-icon>
191
+ </ion-button>
192
+
193
+ <ion-popover [trigger]="popoverId" [dismissOnSelect]="true">
194
+ <ng-template>
195
+ <ion-list>
196
+ @for (lang of availableLanguages; track lang) {
197
+ <ion-item
198
+ [button]="true"
199
+ [detail]="false"
200
+ (click)="onLanguageChange(lang)"
201
+ [class.selected]="lang === currentLanguage"
202
+ >
203
+ <ion-label>{{ getLanguageDisplayName(lang) }}</ion-label>
204
+ @if (lang === currentLanguage) {
205
+ <ion-icon slot="end" name="checkmark" color="primary"></ion-icon>
206
+ }
207
+ </ion-item>
208
+ }
209
+ </ion-list>
210
+ </ng-template>
211
+ </ion-popover>
212
+ }
122
213
  `, styles: [":host{display:inline-block;width:auto}val-popover-selector .popover-selector-container{display:inline-block;width:auto}val-popover-selector .selector-trigger .trigger-text{display:inline-flex;align-items:center;gap:8px;font-weight:700}val-popover-selector .selector-trigger .trigger-text .flag-emoji{font-size:1.2em;line-height:1;filter:drop-shadow(0 1px 2px rgba(0,0,0,.1));transition:transform .2s ease}val-popover-selector .selector-trigger.has-flag .trigger-text{letter-spacing:.025em}val-popover-selector .selector-trigger:hover:not([disabled]) .trigger-text .flag-emoji{transform:scale(1.1)}val-popover-selector .option-content{gap:10px;padding:8px 0}val-popover-selector .option-content .flag-emoji{font-size:1.1em;filter:drop-shadow(0 1px 2px rgba(0,0,0,.08))}val-popover-selector .option-content span{font-weight:600;letter-spacing:.01em}.language-flag{font-size:1.2em;margin-right:6px;vertical-align:middle;line-height:1;filter:drop-shadow(0 1px 3px rgba(0,0,0,.1));transition:all .2s ease}@media (max-width: 768px){val-popover-selector .selector-trigger .trigger-text{font-size:13px;gap:6px}val-popover-selector .selector-trigger .trigger-text .flag-emoji{font-size:1.1em}}val-popover-selector .selector-trigger:hover:not([disabled]) .trigger-text .flag-emoji{transform:scale(1.1) rotate(3deg);transition:transform .25s cubic-bezier(.4,0,.2,1)}val-popover-selector .selector-trigger:active .trigger-text .flag-emoji{transform:scale(1.05)}val-popover-selector .language-changing .flag-emoji{animation:languageSwitch .4s ease-in-out}@keyframes languageSwitch{0%{transform:scale(1)}50%{transform:scale(1.15) rotate(8deg)}to{transform:scale(1)}}\n"] }]
123
214
  }], ctorParameters: () => [], propDecorators: { props: [{
124
215
  type: Input
125
216
  }], languageChange: [{
126
217
  type: Output
127
218
  }] } });
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2Utc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy9sYW5ndWFnZS1zZWxlY3Rvci9sYW5ndWFnZS1zZWxlY3Rvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxXQUFXLEVBQVksTUFBTSx3QkFBd0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQzs7QUFhMUY7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLE9BQU8seUJBQXlCO0lBcUNwQztRQXBDQTs7V0FFRztRQUVILFVBQUssR0FBNkIsRUFBRSxDQUFDO1FBRXJDOzs7V0FHRztRQUVILG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUtwQyxTQUFJLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRW5DLHFDQUFxQztRQUNwQix5QkFBb0IsR0FBMkI7WUFDOUQsRUFBRSxFQUFFLFNBQVM7WUFDYixFQUFFLEVBQUUsU0FBUztZQUNiLEVBQUUsRUFBRSxXQUFXO1lBQ2YsRUFBRSxFQUFFLFVBQVU7WUFDZCxFQUFFLEVBQUUsU0FBUztTQUNkLENBQUM7UUFFRix1Q0FBdUM7UUFDdEIseUJBQW9CLEdBQTJCO1lBQzlELEVBQUUsRUFBRSxNQUFNO1lBQ1YsRUFBRSxFQUFFLE1BQU07WUFD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QVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7SUFDdkQsQ0FBQztJQUVEOzs7T0FHRztJQUNILGdCQUFnQixDQUFDLGdCQUFtQztRQUNsRCxJQUFJLE9BQU8sZ0JBQWdCLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDekMsTUFBTSxPQUFPLEdBQUcsZ0JBQTRCLENBQUM7WUFFN0Msd0JBQXdCO1lBQ3hCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFFM0MsNEVBQTRFO1lBQzVFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRXZELGdEQUFnRDtZQUNoRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDdkUsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDOytHQTdHVSx5QkFBeUI7bUdBQXpCLHlCQUF5Qiw0SkFwQjFCOztHQUVULCtyREFIUyxZQUFZLCtCQUFFLHdCQUF3Qjs7NEZBcUJyQyx5QkFBeUI7a0JBeEJyQyxTQUFTOytCQUNFLHVCQUF1QixjQUNyQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsd0JBQXdCLENBQUMsWUFDdkM7O0dBRVQ7d0RBdUJELEtBQUs7c0JBREosS0FBSztnQkFRTixjQUFjO3NCQURiLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7IGxhbmd1YWdlIH0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuaW1wb3J0IHsgSTE4blNlcnZpY2UsIEkxOG5MYW5nIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5pbXBvcnQgeyBQb3BvdmVyU2VsZWN0b3JDb21wb25lbnQgfSBmcm9tICcuLi9wb3BvdmVyLXNlbGVjdG9yL3BvcG92ZXItc2VsZWN0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IFBvcG92ZXJPcHRpb24sIFBvcG92ZXJTZWxlY3Rvck1ldGFkYXRhIH0gZnJvbSAnLi4vcG9wb3Zlci1zZWxlY3Rvci90eXBlcyc7XG5pbXBvcnQgeyBMYW5ndWFnZVNlbGVjdG9yTWV0YWRhdGEgfSBmcm9tICcuL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLWxhbmd1YWdlLXNlbGVjdG9yJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUG9wb3ZlclNlbGVjdG9yQ29tcG9uZW50XSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8dmFsLXBvcG92ZXItc2VsZWN0b3IgW3Byb3BzXT1cInBvcG92ZXJQcm9wc1wiIChzZWxlY3Rpb25DaGFuZ2UpPVwib25MYW5ndWFnZUNoYW5nZSgkZXZlbnQpXCI+IDwvdmFsLXBvcG92ZXItc2VsZWN0b3I+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL2xhbmd1YWdlLXNlbGVjdG9yLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuLyoqXG4gKiB2YWwtbGFuZ3VhZ2Utc2VsZWN0b3JcbiAqXG4gKiBBIGxhbmd1YWdlIHNlbGVjdG9yIGNvbXBvbmVudCB0aGF0IHVzZXMgSTE4blNlcnZpY2UuXG4gKiBCeSBkZWZhdWx0LCBsYW5ndWFnZSBjaGFuZ2VzIGFyZSByZWFjdGl2ZSAobm8gcGFnZSByZWxvYWQpLlxuICogU2V0IGZvcmNlUmVsb2FkOiB0cnVlIGluIHByb3BzIHRvIHJlbG9hZCBvbiBjaGFuZ2UuXG4gKlxuICogQGV4YW1wbGVcbiAqIDx2YWwtbGFuZ3VhZ2Utc2VsZWN0b3JcbiAqICAgW3Byb3BzXT1cInsgc2hvd0xhYmVsOiB0cnVlLCBzaG93RmxhZ3M6IHRydWUgfVwiPlxuICogPC92YWwtbGFuZ3VhZ2Utc2VsZWN0b3I+XG4gKlxuICogQGlucHV0IHByb3BzOiBMYW5ndWFnZVNlbGVjdG9yTWV0YWRhdGEgLSBDb25maWd1cmF0aW9uIGZvciB0aGUgbGFuZ3VhZ2Ugc2VsZWN0b3JcbiAqIEBvdXRwdXQgbGFuZ3VhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+IC0gRW1pdHRlZCB3aGVuIGxhbmd1YWdlIGNoYW5nZXNcbiAqL1xuZXhwb3J0IGNsYXNzIExhbmd1YWdlU2VsZWN0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvKipcbiAgICogTGFuZ3VhZ2Ugc2VsZWN0b3IgY29uZmlndXJhdGlvbiBvYmplY3QuXG4gICAqL1xuICBASW5wdXQoKVxuICBwcm9wczogTGFuZ3VhZ2VTZWxlY3Rvck1ldGFkYXRhID0ge307XG5cbiAgLyoqXG4gICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgbGFuZ3VhZ2Ugc2VsZWN0aW9uIGNoYW5nZXMuXG4gICAqIEVtaXRzIHRoZSBzZWxlY3RlZCBsYW5ndWFnZSBjb2RlLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIGxhbmd1YWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgLyoqIFBvcG92ZXIgc2VsZWN0b3IgY29uZmlndXJhdGlvbiAqL1xuICBwb3BvdmVyUHJvcHM6IFBvcG92ZXJTZWxlY3Rvck1ldGFkYXRhO1xuXG4gIHByaXZhdGUgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG5cbiAgLyoqIERlZmF1bHQgbGFuZ3VhZ2UgZGlzcGxheSBuYW1lcyAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRMYW5ndWFnZU5hbWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIGVzOiAnRXNwYcOxb2wnLFxuICAgIGVuOiAnRW5nbGlzaCcsXG4gICAgcHQ6ICdQb3J0dWd1w6pzJyxcbiAgICBmcjogJ0ZyYW7Dp2FpcycsXG4gICAgZGU6ICdEZXV0c2NoJyxcbiAgfTtcblxuICAvKiogRGVmYXVsdCBmbGFnIGljb25zIGZvciBsYW5ndWFnZXMgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0TGFuZ3VhZ2VGbGFnczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICBlczogJ/Cfh6rwn4e4JyxcbiAgICBlbjogJ/Cfh7rwn4e4JyxcbiAgICBwdDogJ/Cfh6fwn4e3JyxcbiAgICBmcjogJ/Cfh6vwn4e3JyxcbiAgICBkZTogJ/Cfh6nwn4eqJyxcbiAgfTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBhZGRJY29ucyh7IGxhbmd1YWdlIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pbml0aWFsaXplUG9wb3ZlclByb3BzKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVQb3BvdmVyUHJvcHMoKSB7XG4gICAgY29uc3QgY3VycmVudExhbmd1YWdlID0gdGhpcy5pMThuLmxhbmcoKTtcbiAgICBjb25zdCBhdmFpbGFibGVMYW5ndWFnZXMgPSB0aGlzLnByb3BzLmF2YWlsYWJsZUxhbmd1YWdlcyB8fCB0aGlzLmkxOG4uc3VwcG9ydGVkTGFuZ3VhZ2VzKCk7XG5cbiAgICAvLyBDb252ZXJ0IGxhbmd1YWdlIGNvZGVzIHRvIHBvcG92ZXIgb3B0aW9uc1xuICAgIGNvbnN0IG9wdGlvbnM6IFBvcG92ZXJPcHRpb25bXSA9IGF2YWlsYWJsZUxhbmd1YWdlcy5tYXAobGFuZyA9PiAoe1xuICAgICAgdmFsdWU6IGxhbmcsXG4gICAgICBsYWJlbDogdGhpcy5nZXRMYW5ndWFnZURpc3BsYXlOYW1lKGxhbmcpLFxuICAgIH0pKTtcblxuICAgIC8vIENyZWF0ZSBwb3BvdmVyIGNvbmZpZ3VyYXRpb25cbiAgICB0aGlzLnBvcG92ZXJQcm9wcyA9IHtcbiAgICAgIG9wdGlvbnMsXG4gICAgICBzZWxlY3RlZFZhbHVlOiBjdXJyZW50TGFuZ3VhZ2UsXG4gICAgICBsYWJlbDogdGhpcy5wcm9wcy5zaG93TGFiZWwgIT09IGZhbHNlID8gKHRoaXMucHJvcHMubGFiZWwgfHwgJ0lkaW9tYScpIDogdW5kZWZpbmVkLFxuICAgICAgaWNvbjogJ2xhbmd1YWdlJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnU2VsZWNjaW9uYXIgaWRpb21hLi4uJyxcbiAgICAgIGNvbG9yOiB0aGlzLnByb3BzLmNvbG9yIHx8ICdtZWRpdW0nLFxuICAgICAgc2l6ZTogdGhpcy5wcm9wcy5zaXplIHx8ICdkZWZhdWx0JyxcbiAgICAgIGZpbGw6IHRoaXMucHJvcHMuZmlsbCB8fCAnb3V0bGluZScsXG4gICAgICBzaGFwZTogdGhpcy5wcm9wcy5zaGFwZSxcbiAgICAgIGV4cGFuZDogdGhpcy5wcm9wcy5leHBhbmQsXG4gICAgICBkaXNhYmxlZDogdGhpcy5wcm9wcy5kaXNhYmxlZCB8fCBmYWxzZSxcbiAgICAgIGludGVyZmFjZTogJ3BvcG92ZXInLFxuICAgICAgc2hvd0NoZWNrbWFyazogdHJ1ZSxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIGNhbmNlbFRleHQ6ICdDYW5jZWxhcicsXG4gICAgICBva1RleHQ6ICdBY2VwdGFyJyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMYW5ndWFnZURpc3BsYXlOYW1lKGxhbmd1YWdlQ29kZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBVc2UgY3VzdG9tIG5hbWVzIGlmIHByb3ZpZGVkXG4gICAgaWYgKHRoaXMucHJvcHMuY3VzdG9tTGFuZ3VhZ2VOYW1lcz8uW2xhbmd1YWdlQ29kZV0pIHtcbiAgICAgIGNvbnN0IGN1c3RvbU5hbWUgPSB0aGlzLnByb3BzLmN1c3RvbUxhbmd1YWdlTmFtZXNbbGFuZ3VhZ2VDb2RlXTtcbiAgICAgIGNvbnN0IGZsYWcgPSB0aGlzLnByb3BzLnNob3dGbGFncyA/IHRoaXMuZGVmYXVsdExhbmd1YWdlRmxhZ3NbbGFuZ3VhZ2VDb2RlXSA6ICcnO1xuICAgICAgcmV0dXJuIGZsYWcgPyBgJHtmbGFnfSAke2N1c3RvbU5hbWV9YCA6IGN1c3RvbU5hbWU7XG4gICAgfVxuXG4gICAgLy8gVXNlIGRlZmF1bHQgbmFtZXNcbiAgICBjb25zdCBkZWZhdWx0TmFtZSA9IHRoaXMuZGVmYXVsdExhbmd1YWdlTmFtZXNbbGFuZ3VhZ2VDb2RlXSB8fCBsYW5ndWFnZUNvZGUudG9VcHBlckNhc2UoKTtcbiAgICBjb25zdCBmbGFnID0gdGhpcy5wcm9wcy5zaG93RmxhZ3MgPyB0aGlzLmRlZmF1bHRMYW5ndWFnZUZsYWdzW2xhbmd1YWdlQ29kZV0gOiAnJztcbiAgICByZXR1cm4gZmxhZyA/IGAke2ZsYWd9ICR7ZGVmYXVsdE5hbWV9YCA6IGRlZmF1bHROYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBsYW5ndWFnZSBzZWxlY3Rpb24gY2hhbmdlLlxuICAgKiBAcGFyYW0gc2VsZWN0ZWRMYW5ndWFnZSAtIFRoZSBzZWxlY3RlZCBsYW5ndWFnZSBjb2RlKHMpXG4gICAqL1xuICBvbkxhbmd1YWdlQ2hhbmdlKHNlbGVjdGVkTGFuZ3VhZ2U6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgaWYgKHR5cGVvZiBzZWxlY3RlZExhbmd1YWdlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgbmV3TGFuZyA9IHNlbGVjdGVkTGFuZ3VhZ2UgYXMgSTE4bkxhbmc7XG5cbiAgICAgIC8vIEVtaXQgdGhlIGNoYW5nZSBldmVudFxuICAgICAgdGhpcy5sYW5ndWFnZUNoYW5nZS5lbWl0KHNlbGVjdGVkTGFuZ3VhZ2UpO1xuXG4gICAgICAvLyBTZXQgdGhlIG5ldyBsYW5ndWFnZSAocmVhY3RpdmUgYnkgZGVmYXVsdCwgcmVsb2FkIGlmIGZvcmNlUmVsb2FkIGlzIHRydWUpXG4gICAgICB0aGlzLmkxOG4uc2V0TGFuZ3VhZ2UobmV3TGFuZywgdGhpcy5wcm9wcy5mb3JjZVJlbG9hZCk7XG5cbiAgICAgIC8vIFVwZGF0ZSBwb3BvdmVyIHNlbGVjdGVkIHZhbHVlIGZvciByZWFjdGl2ZSBVSVxuICAgICAgaWYgKHRoaXMucG9wb3ZlclByb3BzKSB7XG4gICAgICAgIHRoaXMucG9wb3ZlclByb3BzID0geyAuLi50aGlzLnBvcG92ZXJQcm9wcywgc2VsZWN0ZWRWYWx1ZTogbmV3TGFuZyB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2Utc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy9sYW5ndWFnZS1zZWxlY3Rvci9sYW5ndWFnZS1zZWxlY3Rvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFdBQVcsRUFBWSxNQUFNLHdCQUF3QixDQUFDO0FBQy9ELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDOztBQWtEMUY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxNQUFNLE9BQU8seUJBQXlCO0lBOENwQztRQTdDQTs7V0FFRztRQUVILFVBQUssR0FBNkIsRUFBRSxDQUFDO1FBRXJDOzs7V0FHRztRQUVILG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUs1QyxrREFBa0Q7UUFDbEQsY0FBUyxHQUFHLGlCQUFpQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUUxRSwyREFBMkQ7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RCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDdkUsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDOytHQTVIVSx5QkFBeUI7bUdBQXpCLHlCQUF5Qiw0SkE5RDFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Q1QsK3JEQXhDUyxZQUFZLCtCQUFFLHdCQUF3QixrSEFBRSxTQUFTLG9QQUFFLE9BQU8sMkpBQUUsVUFBVSx3REFBRSxPQUFPLHlGQUFFLE9BQU8sME5BQUUsUUFBUTs7NEZBK0RqRyx5QkFBeUI7a0JBbEVyQyxTQUFTOytCQUNFLHVCQUF1QixjQUNyQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsd0JBQXdCLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsWUFDbkc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVDVDt3REE0QkQsS0FBSztzQkFESixLQUFLO2dCQVFOLGNBQWM7c0JBRGIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElvbkJ1dHRvbiwgSW9uSWNvbiwgSW9uUG9wb3ZlciwgSW9uTGlzdCwgSW9uSXRlbSwgSW9uTGFiZWwgfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHsgbGFuZ3VhZ2UsIGdsb2JlT3V0bGluZSwgY2hlY2ttYXJrIH0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuaW1wb3J0IHsgSTE4blNlcnZpY2UsIEkxOG5MYW5nIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5pbXBvcnQgeyBQb3BvdmVyU2VsZWN0b3JDb21wb25lbnQgfSBmcm9tICcuLi9wb3BvdmVyLXNlbGVjdG9yL3BvcG92ZXItc2VsZWN0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IFBvcG92ZXJPcHRpb24sIFBvcG92ZXJTZWxlY3Rvck1ldGFkYXRhIH0gZnJvbSAnLi4vcG9wb3Zlci1zZWxlY3Rvci90eXBlcyc7XG5pbXBvcnQgeyBMYW5ndWFnZVNlbGVjdG9yTWV0YWRhdGEgfSBmcm9tICcuL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLWxhbmd1YWdlLXNlbGVjdG9yJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUG9wb3ZlclNlbGVjdG9yQ29tcG9uZW50LCBJb25CdXR0b24sIElvbkljb24sIElvblBvcG92ZXIsIElvbkxpc3QsIElvbkl0ZW0sIElvbkxhYmVsXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8IS0tIERlZmF1bHQgbW9kZTogdXNlIHBvcG92ZXItc2VsZWN0b3IgLS0+XG4gICAgQGlmIChwcm9wcy5tb2RlICE9PSAnaWNvbicpIHtcbiAgICAgIDx2YWwtcG9wb3Zlci1zZWxlY3RvciBbcHJvcHNdPVwicG9wb3ZlclByb3BzXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkxhbmd1YWdlQ2hhbmdlKCRldmVudClcIj4gPC92YWwtcG9wb3Zlci1zZWxlY3Rvcj5cbiAgICB9XG5cbiAgICA8IS0tIEljb24gbW9kZTogY29tcGFjdCBnbG9iZSBidXR0b24gd2l0aCBwb3BvdmVyIC0tPlxuICAgIEBpZiAocHJvcHMubW9kZSA9PT0gJ2ljb24nKSB7XG4gICAgICA8aW9uLWJ1dHRvblxuICAgICAgICBbaWRdPVwicG9wb3ZlcklkXCJcbiAgICAgICAgW2NvbG9yXT1cInByb3BzLmNvbG9yIHx8ICdtZWRpdW0nXCJcbiAgICAgICAgW2ZpbGxdPVwicHJvcHMuZmlsbCB8fCAnY2xlYXInXCJcbiAgICAgICAgW3NpemVdPVwicHJvcHMuc2l6ZSB8fCAnZGVmYXVsdCdcIlxuICAgICAgICBbZGlzYWJsZWRdPVwicHJvcHMuZGlzYWJsZWRcIlxuICAgICAgICBjbGFzcz1cImljb24tbW9kZS1idXR0b25cIlxuICAgICAgPlxuICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIFtuYW1lXT1cInByb3BzLmljb24gfHwgJ2dsb2JlLW91dGxpbmUnXCI+PC9pb24taWNvbj5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cblxuICAgICAgPGlvbi1wb3BvdmVyIFt0cmlnZ2VyXT1cInBvcG92ZXJJZFwiIFtkaXNtaXNzT25TZWxlY3RdPVwidHJ1ZVwiPlxuICAgICAgICA8bmctdGVtcGxhdGU+XG4gICAgICAgICAgPGlvbi1saXN0PlxuICAgICAgICAgICAgQGZvciAobGFuZyBvZiBhdmFpbGFibGVMYW5ndWFnZXM7IHRyYWNrIGxhbmcpIHtcbiAgICAgICAgICAgICAgPGlvbi1pdGVtXG4gICAgICAgICAgICAgICAgW2J1dHRvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbZGV0YWlsXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25MYW5ndWFnZUNoYW5nZShsYW5nKVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImxhbmcgPT09IGN1cnJlbnRMYW5ndWFnZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsPnt7IGdldExhbmd1YWdlRGlzcGxheU5hbWUobGFuZykgfX08L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICBAaWYgKGxhbmcgPT09IGN1cnJlbnRMYW5ndWFnZSkge1xuICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJlbmRcIiBuYW1lPVwiY2hlY2ttYXJrXCIgY29sb3I9XCJwcmltYXJ5XCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9pb24tbGlzdD5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvaW9uLXBvcG92ZXI+XG4gICAgfVxuICBgLFxuICBzdHlsZVVybHM6IFsnLi9sYW5ndWFnZS1zZWxlY3Rvci5jb21wb25lbnQuc2NzcyddLFxufSlcbi8qKlxuICogdmFsLWxhbmd1YWdlLXNlbGVjdG9yXG4gKlxuICogQSBsYW5ndWFnZSBzZWxlY3RvciBjb21wb25lbnQgdGhhdCB1c2VzIEkxOG5TZXJ2aWNlLlxuICogQnkgZGVmYXVsdCwgbGFuZ3VhZ2UgY2hhbmdlcyBhcmUgcmVhY3RpdmUgKG5vIHBhZ2UgcmVsb2FkKS5cbiAqIFNldCBmb3JjZVJlbG9hZDogdHJ1ZSBpbiBwcm9wcyB0byByZWxvYWQgb24gY2hhbmdlLlxuICpcbiAqIEBleGFtcGxlIERlZmF1bHQgbW9kZSAoZHJvcGRvd24gd2l0aCBsYWJlbCk6XG4gKiA8dmFsLWxhbmd1YWdlLXNlbGVjdG9yXG4gKiAgIFtwcm9wc109XCJ7IHNob3dMYWJlbDogdHJ1ZSwgc2hvd0ZsYWdzOiB0cnVlIH1cIj5cbiAqIDwvdmFsLWxhbmd1YWdlLXNlbGVjdG9yPlxuICpcbiAqIEBleGFtcGxlIEljb24gbW9kZSAoY29tcGFjdCBmb3IgaGVhZGVycy90b29sYmFycyk6XG4gKiA8dmFsLWxhbmd1YWdlLXNlbGVjdG9yXG4gKiAgIFtwcm9wc109XCJ7IG1vZGU6ICdpY29uJywgY29sb3I6ICdwcmltYXJ5JyB9XCI+XG4gKiA8L3ZhbC1sYW5ndWFnZS1zZWxlY3Rvcj5cbiAqXG4gKiBAaW5wdXQgcHJvcHM6IExhbmd1YWdlU2VsZWN0b3JNZXRhZGF0YSAtIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBsYW5ndWFnZSBzZWxlY3RvclxuICogQG91dHB1dCBsYW5ndWFnZUNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gLSBFbWl0dGVkIHdoZW4gbGFuZ3VhZ2UgY2hhbmdlc1xuICovXG5leHBvcnQgY2xhc3MgTGFuZ3VhZ2VTZWxlY3RvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8qKlxuICAgKiBMYW5ndWFnZSBzZWxlY3RvciBjb25maWd1cmF0aW9uIG9iamVjdC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHByb3BzOiBMYW5ndWFnZVNlbGVjdG9yTWV0YWRhdGEgPSB7fTtcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBsYW5ndWFnZSBzZWxlY3Rpb24gY2hhbmdlcy5cbiAgICogRW1pdHMgdGhlIHNlbGVjdGVkIGxhbmd1YWdlIGNvZGUuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgbGFuZ3VhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAvKiogUG9wb3ZlciBzZWxlY3RvciBjb25maWd1cmF0aW9uIChmb3IgZGVmYXVsdCBtb2RlKSAqL1xuICBwb3BvdmVyUHJvcHM6IFBvcG92ZXJTZWxlY3Rvck1ldGFkYXRhO1xuXG4gIC8qKiBVbmlxdWUgSUQgZm9yIHRoZSBpY29uIG1vZGUgcG9wb3ZlciB0cmlnZ2VyICovXG4gIHBvcG92ZXJJZCA9IGBsYW5nLXNlbGVjdG9yLSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWA7XG5cbiAgLyoqIEF2YWlsYWJsZSBsYW5ndWFnZXMgKGV4cG9zZWQgZm9yIGljb24gbW9kZSB0ZW1wbGF0ZSkgKi9cbiAgYXZhaWxhYmxlTGFuZ3VhZ2VzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8qKiBDdXJyZW50IGxhbmd1YWdlIChleHBvc2VkIGZvciBpY29uIG1vZGUgdGVtcGxhdGUpICovXG4gIGN1cnJlbnRMYW5ndWFnZTogc3RyaW5nID0gJyc7XG5cbiAgcHJpdmF0ZSBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcblxuICAvKiogRGVmYXVsdCBsYW5ndWFnZSBkaXNwbGF5IG5hbWVzICovXG4gIHJlYWRvbmx5IGRlZmF1bHRMYW5ndWFnZU5hbWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIGVzOiAnRXNwYcOxb2wnLFxuICAgIGVuOiAnRW5nbGlzaCcsXG4gICAgcHQ6ICdQb3J0dWd1w6pzJyxcbiAgICBmcjogJ0ZyYW7Dp2FpcycsXG4gICAgZGU6ICdEZXV0c2NoJyxcbiAgfTtcblxuICAvKiogRGVmYXVsdCBmbGFnIGljb25zIGZvciBsYW5ndWFnZXMgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdExhbmd1YWdlRmxhZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgZXM6ICfwn4eq8J+HuCcsXG4gICAgZW46ICfwn4e68J+HuCcsXG4gICAgcHQ6ICfwn4en8J+HtycsXG4gICAgZnI6ICfwn4er8J+HtycsXG4gICAgZGU6ICfwn4ep8J+HqicsXG4gIH07XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgYWRkSWNvbnMoeyBsYW5ndWFnZSwgZ2xvYmVPdXRsaW5lLCBjaGVja21hcmsgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZSA9IHRoaXMuaTE4bi5sYW5nKCk7XG4gICAgdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMgPSB0aGlzLnByb3BzLmF2YWlsYWJsZUxhbmd1YWdlcyB8fCB0aGlzLmkxOG4uc3VwcG9ydGVkTGFuZ3VhZ2VzKCk7XG4gICAgdGhpcy5pbml0aWFsaXplUG9wb3ZlclByb3BzKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVQb3BvdmVyUHJvcHMoKSB7XG4gICAgY29uc3QgY3VycmVudExhbmd1YWdlID0gdGhpcy5pMThuLmxhbmcoKTtcbiAgICBjb25zdCBhdmFpbGFibGVMYW5ndWFnZXMgPSB0aGlzLnByb3BzLmF2YWlsYWJsZUxhbmd1YWdlcyB8fCB0aGlzLmkxOG4uc3VwcG9ydGVkTGFuZ3VhZ2VzKCk7XG5cbiAgICAvLyBDb252ZXJ0IGxhbmd1YWdlIGNvZGVzIHRvIHBvcG92ZXIgb3B0aW9uc1xuICAgIGNvbnN0IG9wdGlvbnM6IFBvcG92ZXJPcHRpb25bXSA9IGF2YWlsYWJsZUxhbmd1YWdlcy5tYXAobGFuZyA9PiAoe1xuICAgICAgdmFsdWU6IGxhbmcsXG4gICAgICBsYWJlbDogdGhpcy5nZXRMYW5ndWFnZURpc3BsYXlOYW1lKGxhbmcpLFxuICAgIH0pKTtcblxuICAgIC8vIENyZWF0ZSBwb3BvdmVyIGNvbmZpZ3VyYXRpb25cbiAgICB0aGlzLnBvcG92ZXJQcm9wcyA9IHtcbiAgICAgIG9wdGlvbnMsXG4gICAgICBzZWxlY3RlZFZhbHVlOiBjdXJyZW50TGFuZ3VhZ2UsXG4gICAgICBsYWJlbDogdGhpcy5wcm9wcy5zaG93TGFiZWwgIT09IGZhbHNlID8gKHRoaXMucHJvcHMubGFiZWwgfHwgJ0lkaW9tYScpIDogdW5kZWZpbmVkLFxuICAgICAgaWNvbjogJ2xhbmd1YWdlJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnU2VsZWNjaW9uYXIgaWRpb21hLi4uJyxcbiAgICAgIGNvbG9yOiB0aGlzLnByb3BzLmNvbG9yIHx8ICdtZWRpdW0nLFxuICAgICAgc2l6ZTogdGhpcy5wcm9wcy5zaXplIHx8ICdkZWZhdWx0JyxcbiAgICAgIGZpbGw6IHRoaXMucHJvcHMuZmlsbCB8fCAnb3V0bGluZScsXG4gICAgICBzaGFwZTogdGhpcy5wcm9wcy5zaGFwZSxcbiAgICAgIGV4cGFuZDogdGhpcy5wcm9wcy5leHBhbmQsXG4gICAgICBkaXNhYmxlZDogdGhpcy5wcm9wcy5kaXNhYmxlZCB8fCBmYWxzZSxcbiAgICAgIGludGVyZmFjZTogJ3BvcG92ZXInLFxuICAgICAgc2hvd0NoZWNrbWFyazogdHJ1ZSxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIGNhbmNlbFRleHQ6ICdDYW5jZWxhcicsXG4gICAgICBva1RleHQ6ICdBY2VwdGFyJyxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEdldCBkaXNwbGF5IG5hbWUgZm9yIGEgbGFuZ3VhZ2UgY29kZSAocHVibGljIGZvciB0ZW1wbGF0ZSBhY2Nlc3MpICovXG4gIGdldExhbmd1YWdlRGlzcGxheU5hbWUobGFuZ3VhZ2VDb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIFVzZSBjdXN0b20gbmFtZXMgaWYgcHJvdmlkZWRcbiAgICBpZiAodGhpcy5wcm9wcy5jdXN0b21MYW5ndWFnZU5hbWVzPy5bbGFuZ3VhZ2VDb2RlXSkge1xuICAgICAgY29uc3QgY3VzdG9tTmFtZSA9IHRoaXMucHJvcHMuY3VzdG9tTGFuZ3VhZ2VOYW1lc1tsYW5ndWFnZUNvZGVdO1xuICAgICAgY29uc3QgZmxhZyA9IHRoaXMucHJvcHMuc2hvd0ZsYWdzID8gdGhpcy5kZWZhdWx0TGFuZ3VhZ2VGbGFnc1tsYW5ndWFnZUNvZGVdIDogJyc7XG4gICAgICByZXR1cm4gZmxhZyA/IGAke2ZsYWd9ICR7Y3VzdG9tTmFtZX1gIDogY3VzdG9tTmFtZTtcbiAgICB9XG5cbiAgICAvLyBVc2UgZGVmYXVsdCBuYW1lc1xuICAgIGNvbnN0IGRlZmF1bHROYW1lID0gdGhpcy5kZWZhdWx0TGFuZ3VhZ2VOYW1lc1tsYW5ndWFnZUNvZGVdIHx8IGxhbmd1YWdlQ29kZS50b1VwcGVyQ2FzZSgpO1xuICAgIGNvbnN0IGZsYWcgPSB0aGlzLnByb3BzLnNob3dGbGFncyA/IHRoaXMuZGVmYXVsdExhbmd1YWdlRmxhZ3NbbGFuZ3VhZ2VDb2RlXSA6ICcnO1xuICAgIHJldHVybiBmbGFnID8gYCR7ZmxhZ30gJHtkZWZhdWx0TmFtZX1gIDogZGVmYXVsdE5hbWU7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGxhbmd1YWdlIHNlbGVjdGlvbiBjaGFuZ2UuXG4gICAqIEBwYXJhbSBzZWxlY3RlZExhbmd1YWdlIC0gVGhlIHNlbGVjdGVkIGxhbmd1YWdlIGNvZGUocylcbiAgICovXG4gIG9uTGFuZ3VhZ2VDaGFuZ2Uoc2VsZWN0ZWRMYW5ndWFnZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICBpZiAodHlwZW9mIHNlbGVjdGVkTGFuZ3VhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBuZXdMYW5nID0gc2VsZWN0ZWRMYW5ndWFnZSBhcyBJMThuTGFuZztcblxuICAgICAgLy8gVXBkYXRlIGN1cnJlbnQgbGFuZ3VhZ2UgZm9yIGljb24gbW9kZVxuICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2UgPSBuZXdMYW5nO1xuXG4gICAgICAvLyBFbWl0IHRoZSBjaGFuZ2UgZXZlbnRcbiAgICAgIHRoaXMubGFuZ3VhZ2VDaGFuZ2UuZW1pdChzZWxlY3RlZExhbmd1YWdlKTtcblxuICAgICAgLy8gU2V0IHRoZSBuZXcgbGFuZ3VhZ2UgKHJlYWN0aXZlIGJ5IGRlZmF1bHQsIHJlbG9hZCBpZiBmb3JjZVJlbG9hZCBpcyB0cnVlKVxuICAgICAgdGhpcy5pMThuLnNldExhbmd1YWdlKG5ld0xhbmcsIHRoaXMucHJvcHMuZm9yY2VSZWxvYWQpO1xuXG4gICAgICAvLyBVcGRhdGUgcG9wb3ZlciBzZWxlY3RlZCB2YWx1ZSBmb3IgcmVhY3RpdmUgVUkgKGRlZmF1bHQgbW9kZSlcbiAgICAgIGlmICh0aGlzLnBvcG92ZXJQcm9wcykge1xuICAgICAgICB0aGlzLnBvcG92ZXJQcm9wcyA9IHsgLi4udGhpcy5wb3BvdmVyUHJvcHMsIHNlbGVjdGVkVmFsdWU6IG5ld0xhbmcgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2xhbmd1YWdlLXNlbGVjdG9yL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2xvciB9IGZyb20gJ0Bpb25pYy9jb3JlJztcblxuLyoqXG4gKiBQcm9wcyBmb3IgdmFsLWxhbmd1YWdlLXNlbGVjdG9yIGNvbXBvbmVudC5cbiAqIEEgc3BlY2lhbGl6ZWQgY29tcG9uZW50IGZvciBsYW5ndWFnZSBzZWxlY3Rpb24uXG4gKlxuICogQHByb3BlcnR5IGN1cnJlbnRMYW5ndWFnZSAtIEN1cnJlbnRseSBzZWxlY3RlZCBsYW5ndWFnZSBjb2RlLlxuICogQHByb3BlcnR5IGF2YWlsYWJsZUxhbmd1YWdlcyAtIEFycmF5IG9mIGF2YWlsYWJsZSBsYW5ndWFnZSBjb2Rlcy5cbiAqIEBwcm9wZXJ0eSBzaG93TGFiZWwgLSBXaGV0aGVyIHRvIHNob3cgdGhlIGxhYmVsLlxuICogQHByb3BlcnR5IGxhYmVsIC0gQ3VzdG9tIGxhYmVsIHRleHQgKHN0YXRpYykuXG4gKiBAcHJvcGVydHkgbGFiZWxDb25maWcgLSBSZWFjdGl2ZSBjb250ZW50IGNvbmZpZ3VyYXRpb24gZm9yIGxhYmVsLlxuICogQHByb3BlcnR5IHNob3dGbGFncyAtIFdoZXRoZXIgdG8gc2hvdyBmbGFnIGljb25zIGZvciBsYW5ndWFnZXMuXG4gKiBAcHJvcGVydHkgY29sb3IgLSBCdXR0b24gY29sb3IgKElvbmljIGNvbG9yIHN0cmluZykuXG4gKiBAcHJvcGVydHkgc2l6ZSAtIEJ1dHRvbiBzaXplICgnc21hbGwnIHwgJ2RlZmF1bHQnIHwgJ2xhcmdlJykuXG4gKiBAcHJvcGVydHkgZmlsbCAtIEJ1dHRvbiBmaWxsIHN0eWxlICgnY2xlYXInIHwgJ291dGxpbmUnIHwgJ3NvbGlkJyB8ICdkZWZhdWx0JykuXG4gKiBAcHJvcGVydHkgc2hhcGUgLSBCdXR0b24gc2hhcGUgKCdyb3VuZCcgfCB1bmRlZmluZWQpLlxuICogQHByb3BlcnR5IGV4cGFuZCAtIEJ1dHRvbiBleHBhbnNpb24gKCdmdWxsJyB8ICdibG9jaycgfCB1bmRlZmluZWQpLlxuICogQHByb3BlcnR5IGRpc2FibGVkIC0gV2hldGhlciB0aGUgc2VsZWN0b3IgaXMgZGlzYWJsZWQuXG4gKiBAcHJvcGVydHkgY3VzdG9tTGFuZ3VhZ2VOYW1lcyAtIEN1c3RvbSBkaXNwbGF5IG5hbWVzIGZvciBsYW5ndWFnZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFuZ3VhZ2VTZWxlY3Rvck1ldGFkYXRhIHtcbiAgLyoqIEN1cnJlbnRseSBzZWxlY3RlZCBsYW5ndWFnZSBjb2RlICovXG4gIGN1cnJlbnRMYW5ndWFnZT86IHN0cmluZztcbiAgLyoqIEFycmF5IG9mIGF2YWlsYWJsZSBsYW5ndWFnZSBjb2RlcyAqL1xuICBhdmFpbGFibGVMYW5ndWFnZXM/OiBzdHJpbmdbXTtcbiAgLyoqIFdoZXRoZXIgdG8gc2hvdyB0aGUgbGFiZWwgKi9cbiAgc2hvd0xhYmVsPzogYm9vbGVhbjtcbiAgLyoqIFN0YXRpYyBsYWJlbCB0ZXh0ICh0YWtlcyBwcmVjZWRlbmNlIG92ZXIgbGFiZWxDb25maWcpICovXG4gIGxhYmVsPzogc3RyaW5nO1xuICAvKiogUmVhY3RpdmUgY29udGVudCBjb25maWd1cmF0aW9uIGZvciBsYWJlbCAqL1xuICBsYWJlbENvbmZpZz86IHtcbiAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgZmFsbGJhY2s/OiBzdHJpbmc7XG4gICAgaW50ZXJwb2xhdGlvbj86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIH07XG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgZmxhZyBpY29ucyBmb3IgbGFuZ3VhZ2VzICovXG4gIHNob3dGbGFncz86IGJvb2xlYW47XG4gIC8qKiBCdXR0b24gY29sb3IgKi9cbiAgY29sb3I/OiBDb2xvcjtcbiAgLyoqIEJ1dHRvbiBzaXplICovXG4gIHNpemU/OiAnc21hbGwnIHwgJ2RlZmF1bHQnIHwgJ2xhcmdlJztcbiAgLyoqIEJ1dHRvbiBmaWxsIHN0eWxlICovXG4gIGZpbGw/OiAnY2xlYXInIHwgJ291dGxpbmUnIHwgJ3NvbGlkJyB8ICdkZWZhdWx0JztcbiAgLyoqIEJ1dHRvbiBzaGFwZSAqL1xuICBzaGFwZT86ICdyb3VuZCc7XG4gIC8qKiBCdXR0b24gZXhwYW5zaW9uICovXG4gIGV4cGFuZD86ICdmdWxsJyB8ICdibG9jayc7XG4gIC8qKiBXaGV0aGVyIHRoZSBzZWxlY3RvciBpcyBkaXNhYmxlZCAqL1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKiBDdXN0b20gZGlzcGxheSBuYW1lcyBmb3IgbGFuZ3VhZ2VzICovXG4gIGN1c3RvbUxhbmd1YWdlTmFtZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKipcbiAgICogRm9yY2UgcGFnZSByZWxvYWQgb24gbGFuZ3VhZ2UgY2hhbmdlLlxuICAgKiBCeSBkZWZhdWx0IChmYWxzZSksIGxhbmd1YWdlIGNoYW5nZXMgYXJlIHJlYWN0aXZlIHdpdGhvdXQgcmVsb2FkLlxuICAgKiBTZXQgdG8gdHJ1ZSBmb3IgbGVnYWN5IGJlaGF2aW9yIG9yIGlmIHJlYWN0aXZlIHVwZGF0ZXMgZG9uJ3Qgd29yay5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZvcmNlUmVsb2FkPzogYm9vbGVhbjtcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2xhbmd1YWdlLXNlbGVjdG9yL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2xvciB9IGZyb20gJ0Bpb25pYy9jb3JlJztcblxuLyoqXG4gKiBEaXNwbGF5IG1vZGUgZm9yIHRoZSBsYW5ndWFnZSBzZWxlY3Rvci5cbiAqIC0gJ2RlZmF1bHQnOiBTaG93cyBidXR0b24gd2l0aCBsYWJlbCBhbmQvb3IgY3VycmVudCBsYW5ndWFnZVxuICogLSAnaWNvbic6IENvbXBhY3QgbW9kZSBzaG93aW5nIG9ubHkgYSBnbG9iZSBpY29uIChpZGVhbCBmb3IgaGVhZGVycylcbiAqL1xuZXhwb3J0IHR5cGUgTGFuZ3VhZ2VTZWxlY3Rvck1vZGUgPSAnZGVmYXVsdCcgfCAnaWNvbic7XG5cbi8qKlxuICogUHJvcHMgZm9yIHZhbC1sYW5ndWFnZS1zZWxlY3RvciBjb21wb25lbnQuXG4gKiBBIHNwZWNpYWxpemVkIGNvbXBvbmVudCBmb3IgbGFuZ3VhZ2Ugc2VsZWN0aW9uLlxuICpcbiAqIEBwcm9wZXJ0eSBtb2RlIC0gRGlzcGxheSBtb2RlOiAnZGVmYXVsdCcgb3IgJ2ljb24nIChjb21wYWN0IGZvciBoZWFkZXJzKS5cbiAqIEBwcm9wZXJ0eSBpY29uIC0gQ3VzdG9tIGljb24gbmFtZSBmb3IgaWNvbiBtb2RlIChkZWZhdWx0OiAnZ2xvYmUtb3V0bGluZScpLlxuICogQHByb3BlcnR5IGN1cnJlbnRMYW5ndWFnZSAtIEN1cnJlbnRseSBzZWxlY3RlZCBsYW5ndWFnZSBjb2RlLlxuICogQHByb3BlcnR5IGF2YWlsYWJsZUxhbmd1YWdlcyAtIEFycmF5IG9mIGF2YWlsYWJsZSBsYW5ndWFnZSBjb2Rlcy5cbiAqIEBwcm9wZXJ0eSBzaG93TGFiZWwgLSBXaGV0aGVyIHRvIHNob3cgdGhlIGxhYmVsLlxuICogQHByb3BlcnR5IGxhYmVsIC0gQ3VzdG9tIGxhYmVsIHRleHQgKHN0YXRpYykuXG4gKiBAcHJvcGVydHkgbGFiZWxDb25maWcgLSBSZWFjdGl2ZSBjb250ZW50IGNvbmZpZ3VyYXRpb24gZm9yIGxhYmVsLlxuICogQHByb3BlcnR5IHNob3dGbGFncyAtIFdoZXRoZXIgdG8gc2hvdyBmbGFnIGljb25zIGZvciBsYW5ndWFnZXMuXG4gKiBAcHJvcGVydHkgY29sb3IgLSBCdXR0b24gY29sb3IgKElvbmljIGNvbG9yIHN0cmluZykuXG4gKiBAcHJvcGVydHkgc2l6ZSAtIEJ1dHRvbiBzaXplICgnc21hbGwnIHwgJ2RlZmF1bHQnIHwgJ2xhcmdlJykuXG4gKiBAcHJvcGVydHkgZmlsbCAtIEJ1dHRvbiBmaWxsIHN0eWxlICgnY2xlYXInIHwgJ291dGxpbmUnIHwgJ3NvbGlkJyB8ICdkZWZhdWx0JykuXG4gKiBAcHJvcGVydHkgc2hhcGUgLSBCdXR0b24gc2hhcGUgKCdyb3VuZCcgfCB1bmRlZmluZWQpLlxuICogQHByb3BlcnR5IGV4cGFuZCAtIEJ1dHRvbiBleHBhbnNpb24gKCdmdWxsJyB8ICdibG9jaycgfCB1bmRlZmluZWQpLlxuICogQHByb3BlcnR5IGRpc2FibGVkIC0gV2hldGhlciB0aGUgc2VsZWN0b3IgaXMgZGlzYWJsZWQuXG4gKiBAcHJvcGVydHkgY3VzdG9tTGFuZ3VhZ2VOYW1lcyAtIEN1c3RvbSBkaXNwbGF5IG5hbWVzIGZvciBsYW5ndWFnZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFuZ3VhZ2VTZWxlY3Rvck1ldGFkYXRhIHtcbiAgLyoqXG4gICAqIERpc3BsYXkgbW9kZSBmb3IgdGhlIHNlbGVjdG9yLlxuICAgKiAtICdkZWZhdWx0JzogRnVsbCBidXR0b24gd2l0aCBsYWJlbC9kcm9wZG93blxuICAgKiAtICdpY29uJzogQ29tcGFjdCBnbG9iZSBpY29uIG9ubHkgKGlkZWFsIGZvciBoZWFkZXJzL3Rvb2xiYXJzKVxuICAgKiBAZGVmYXVsdCAnZGVmYXVsdCdcbiAgICovXG4gIG1vZGU/OiBMYW5ndWFnZVNlbGVjdG9yTW9kZTtcbiAgLyoqXG4gICAqIEljb24gbmFtZSBmb3IgaWNvbiBtb2RlLlxuICAgKiBAZGVmYXVsdCAnZ2xvYmUtb3V0bGluZSdcbiAgICovXG4gIGljb24/OiBzdHJpbmc7XG4gIC8qKiBDdXJyZW50bHkgc2VsZWN0ZWQgbGFuZ3VhZ2UgY29kZSAqL1xuICBjdXJyZW50TGFuZ3VhZ2U/OiBzdHJpbmc7XG4gIC8qKiBBcnJheSBvZiBhdmFpbGFibGUgbGFuZ3VhZ2UgY29kZXMgKi9cbiAgYXZhaWxhYmxlTGFuZ3VhZ2VzPzogc3RyaW5nW107XG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgdGhlIGxhYmVsICovXG4gIHNob3dMYWJlbD86IGJvb2xlYW47XG4gIC8qKiBTdGF0aWMgbGFiZWwgdGV4dCAodGFrZXMgcHJlY2VkZW5jZSBvdmVyIGxhYmVsQ29uZmlnKSAqL1xuICBsYWJlbD86IHN0cmluZztcbiAgLyoqIFJlYWN0aXZlIGNvbnRlbnQgY29uZmlndXJhdGlvbiBmb3IgbGFiZWwgKi9cbiAgbGFiZWxDb25maWc/OiB7XG4gICAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAgIGtleTogc3RyaW5nO1xuICAgIGZhbGxiYWNrPzogc3RyaW5nO1xuICAgIGludGVycG9sYXRpb24/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICB9O1xuICAvKiogV2hldGhlciB0byBzaG93IGZsYWcgaWNvbnMgZm9yIGxhbmd1YWdlcyAqL1xuICBzaG93RmxhZ3M/OiBib29sZWFuO1xuICAvKiogQnV0dG9uIGNvbG9yICovXG4gIGNvbG9yPzogQ29sb3I7XG4gIC8qKiBCdXR0b24gc2l6ZSAqL1xuICBzaXplPzogJ3NtYWxsJyB8ICdkZWZhdWx0JyB8ICdsYXJnZSc7XG4gIC8qKiBCdXR0b24gZmlsbCBzdHlsZSAqL1xuICBmaWxsPzogJ2NsZWFyJyB8ICdvdXRsaW5lJyB8ICdzb2xpZCcgfCAnZGVmYXVsdCc7XG4gIC8qKiBCdXR0b24gc2hhcGUgKi9cbiAgc2hhcGU/OiAncm91bmQnO1xuICAvKiogQnV0dG9uIGV4cGFuc2lvbiAqL1xuICBleHBhbmQ/OiAnZnVsbCcgfCAnYmxvY2snO1xuICAvKiogV2hldGhlciB0aGUgc2VsZWN0b3IgaXMgZGlzYWJsZWQgKi9cbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAvKiogQ3VzdG9tIGRpc3BsYXkgbmFtZXMgZm9yIGxhbmd1YWdlcyAqL1xuICBjdXN0b21MYW5ndWFnZU5hbWVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqXG4gICAqIEZvcmNlIHBhZ2UgcmVsb2FkIG9uIGxhbmd1YWdlIGNoYW5nZS5cbiAgICogQnkgZGVmYXVsdCAoZmFsc2UpLCBsYW5ndWFnZSBjaGFuZ2VzIGFyZSByZWFjdGl2ZSB3aXRob3V0IHJlbG9hZC5cbiAgICogU2V0IHRvIHRydWUgZm9yIGxlZ2FjeSBiZWhhdmlvciBvciBpZiByZWFjdGl2ZSB1cGRhdGVzIGRvbid0IHdvcmsuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmb3JjZVJlbG9hZD86IGJvb2xlYW47XG59XG4iXX0=
@@ -4,11 +4,12 @@
4
4
  * Servicio principal para Google Ad Manager (GPT).
5
5
  * Integra con el sistema de consent existente y respeta usuarios premium.
6
6
  */
7
- import { Inject, Injectable, PLATFORM_ID, signal, computed } from '@angular/core';
7
+ import { Inject, Injectable, PLATFORM_ID, signal, computed, inject } from '@angular/core';
8
8
  import { isPlatformBrowser } from '@angular/common';
9
9
  import { NavigationEnd } from '@angular/router';
10
10
  import { filter } from 'rxjs/operators';
11
11
  import { VALTECH_ADS_CONFIG } from './config';
12
+ import { AuthStateService } from '../auth/auth-state.service';
12
13
  import { AD_SIZE_MAP, } from './types';
13
14
  import * as i0 from "@angular/core";
14
15
  import * as i1 from "@angular/router";
@@ -45,9 +46,9 @@ export class AdsService {
45
46
  // ===========================================================================
46
47
  // ESTADO (Signals)
47
48
  // ===========================================================================
49
+ this.authStateService = inject(AuthStateService);
48
50
  this._isInitialized = signal(false);
49
51
  this._isEnabled = signal(false);
50
- this._isPremiumUser = signal(false);
51
52
  this._isDebugMode = signal(false);
52
53
  this._slots = signal(new Map());
53
54
  this._slotStates = signal(new Map());
@@ -58,11 +59,11 @@ export class AdsService {
58
59
  this.isEnabled = computed(() => {
59
60
  return (this._isInitialized() &&
60
61
  this._isEnabled() &&
61
- !this._isPremiumUser() &&
62
+ !this.authStateService.isPremium() &&
62
63
  this.consentService.canShowAds());
63
64
  });
64
- /** Indica si el usuario es premium (no ve ads) */
65
- this.isPremiumUser = this._isPremiumUser.asReadonly();
65
+ /** Indica si el usuario es premium (no ve ads) - lee de AuthStateService */
66
+ this.isPremiumUser = this.authStateService.isPremium;
66
67
  /** Indica si esta en modo debug */
67
68
  this.isDebugMode = this._isDebugMode.asReadonly();
68
69
  /** Estado de consent para ads */
@@ -89,17 +90,8 @@ export class AdsService {
89
90
  if (!isPlatformBrowser(this.platformId)) {
90
91
  return;
91
92
  }
92
- // Verificar si usuario es premium
93
- if (this.config.isPremiumUser) {
94
- try {
95
- this._isPremiumUser.set(this.config.isPremiumUser());
96
- }
97
- catch {
98
- this._isPremiumUser.set(false);
99
- }
100
- }
101
- // Si es premium, no inicializar ads
102
- if (this._isPremiumUser()) {
93
+ // Si es premium, no inicializar ads (lee de AuthStateService)
94
+ if (this.authStateService.isPremium()) {
103
95
  if (this._isDebugMode()) {
104
96
  console.log('[ValtechAds] Usuario premium detectado - ads deshabilitados');
105
97
  }
@@ -285,32 +277,11 @@ export class AdsService {
285
277
  return this._slotStates().get(slotId) ?? 'idle';
286
278
  }
287
279
  // ===========================================================================
288
- // PREMIUM USER
280
+ // SLOT CLEANUP
289
281
  // ===========================================================================
290
- /**
291
- * Actualiza el estado premium del usuario.
292
- * Llamar cuando cambie el estado de suscripcion.
293
- *
294
- * @param isPremium - Nuevo estado premium
295
- */
296
- updatePremiumStatus(isPremium) {
297
- const wasEnabled = this.isEnabled();
298
- this._isPremiumUser.set(isPremium);
299
- if (isPremium && wasEnabled) {
300
- // Destruir todos los slots activos
301
- this.destroyAllSlots();
302
- if (this._isDebugMode()) {
303
- console.log('[ValtechAds] Usuario ahora es premium - ads deshabilitados');
304
- }
305
- }
306
- else if (!isPremium && !wasEnabled && this._isInitialized()) {
307
- if (this._isDebugMode()) {
308
- console.log('[ValtechAds] Usuario ya no es premium - ads habilitados');
309
- }
310
- }
311
- }
312
282
  /**
313
283
  * Destruye todos los slots activos.
284
+ * Llamar cuando el usuario se vuelve premium o cambia de página.
314
285
  */
315
286
  destroyAllSlots() {
316
287
  const googletag = window.googletag;
@@ -446,4 +417,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
446
417
  type: Inject,
447
418
  args: [PLATFORM_ID]
448
419
  }] }, { type: i1.Router }, { type: i2.AdsLoaderService }, { type: i3.AdsConsentService }] });
449
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2Fkcy9hZHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFZLFdBQVcsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBVSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHeEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRzlDLE9BQU8sRUFRTCxXQUFXLEdBRVosTUFBTSxTQUFTLENBQUM7Ozs7O0FBRWpCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBRUgsTUFBTSxPQUFPLFVBQVU7SUE4Q3JCLFlBQ1UsUUFBa0IsRUFDVSxNQUF3QixFQUMvQixVQUFrQixFQUN2QyxNQUFjLEVBQ2QsYUFBK0IsRUFDL0IsY0FBaUM7UUFMakMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNVLFdBQU0sR0FBTixNQUFNLENBQWtCO1FBQy9CLGVBQVUsR0FBVixVQUFVLENBQVE7UUFDdkMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUMvQixtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFuRDNDLDhFQUE4RTtRQUM5RSxtQkFBbUI7UUFDbkIsOEVBQThFO1FBRTdELG1CQUFjLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLGVBQVUsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDcEMsbUJBQWMsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFD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QUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNoRCxNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNsQyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsOEVBQThFO0lBQzlFLFlBQVk7SUFDWiw4RUFBOEU7SUFFOUUsV0FBVztRQUNULElBQUksQ0FBQyxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUV2QyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN4QixhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3JDLENBQUM7UUFFRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNoQyxDQUFDOytHQW5kVSxVQUFVLDBDQWdEWCxrQkFBa0IsYUFDbEIsV0FBVzttSEFqRFYsVUFBVSxjQURHLE1BQU07OzRGQUNuQixVQUFVO2tCQUR0QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBaUQ3QixNQUFNOzJCQUFDLGtCQUFrQjs7MEJBQ3pCLE1BQU07MkJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQWRzIFNlcnZpY2VcbiAqXG4gKiBTZXJ2aWNpbyBwcmluY2lwYWwgcGFyYSBHb29nbGUgQWQgTWFuYWdlciAoR1BUKS5cbiAqIEludGVncmEgY29uIGVsIHNpc3RlbWEgZGUgY29uc2VudCBleGlzdGVudGUgeSByZXNwZXRhIHVzdWFyaW9zIHByZW1pdW0uXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciwgUExBVEZPUk1fSUQsIHNpZ25hbCwgY29tcHV0ZWQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUm91dGVyLCBOYXZpZ2F0aW9uRW5kIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBWQUxURUNIX0FEU19DT05GSUcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBBZHNMb2FkZXJTZXJ2aWNlIH0gZnJvbSAnLi9hZHMtbG9hZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWRzQ29uc2VudFNlcnZpY2UgfSBmcm9tICcuL2Fkcy1jb25zZW50LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgVmFsdGVjaEFkc0NvbmZpZyxcbiAgQWRTbG90Q29uZmlnLFxuICBBZFNsb3RTdGF0ZSxcbiAgQWRFdmVudCxcbiAgR1BUU2xvdCxcbiAgR1BUTmFtZXNwYWNlLFxuICBTaXplTWFwcGluZyxcbiAgQURfU0laRV9NQVAsXG4gIEFkU2xvdFNpemUsXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFNlcnZpY2lvIHByaW5jaXBhbCBkZSBHb29nbGUgQWQgTWFuYWdlci5cbiAqXG4gKiBNYW5lamEgbGEgY3JlYWNpb24sIGRlc3RydWNjaW9uIHkgcmVmcmVzaCBkZSBhZCBzbG90cy5cbiAqIEludGVncmEgYXV0b21hdGljYW1lbnRlIGNvbiBjb25zZW50IG1vZGUgeSBkZXRlY3RhIHVzdWFyaW9zIHByZW1pdW0uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIEBDb21wb25lbnQoey4uLn0pXG4gKiBleHBvcnQgY2xhc3MgTXlDb21wb25lbnQge1xuICogICBwcml2YXRlIGFkcyA9IGluamVjdChBZHNTZXJ2aWNlKTtcbiAqXG4gKiAgIC8vIFZlcmlmaWNhciBzaSBtb3N0cmFyIGFkc1xuICogICBzaG93QWRzID0gdGhpcy5hZHMuaXNFbmFibGVkO1xuICpcbiAqICAgLy8gVmVyaWZpY2FyIHNpIHVzdWFyaW8gZXMgcHJlbWl1bVxuICogICBpc1ByZW1pdW0gPSB0aGlzLmFkcy5pc1ByZW1pdW1Vc2VyO1xuICogfVxuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQWRzU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBFU1RBRE8gKFNpZ25hbHMpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzSW5pdGlhbGl6ZWQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0VuYWJsZWQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc1ByZW1pdW1Vc2VyID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNEZWJ1Z01vZGUgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zbG90cyA9IHNpZ25hbDxNYXA8c3RyaW5nLCBHUFRTbG90Pj4obmV3IE1hcCgpKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2xvdFN0YXRlcyA9IHNpZ25hbDxNYXA8c3RyaW5nLCBBZFNsb3RTdGF0ZT4+KG5ldyBNYXAoKSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2V2ZW50cyA9IHNpZ25hbDxBZEV2ZW50W10+KFtdKTtcblxuICAvKiogSW5kaWNhIHNpIGVsIHNlcnZpY2lvIGVzdGEgaW5pY2lhbGl6YWRvICovXG4gIHJlYWRvbmx5IGlzSW5pdGlhbGl6ZWQgPSB0aGlzLl9pc0luaXRpYWxpemVkLmFzUmVhZG9ubHkoKTtcblxuICAvKiogSW5kaWNhIHNpIGxvcyBhZHMgZXN0YW4gaGFiaWxpdGFkb3MgKGNvbnNlbnQgKyBubyBwcmVtaXVtKSAqL1xuICByZWFkb25seSBpc0VuYWJsZWQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQoKSAmJlxuICAgICAgdGhpcy5faXNFbmFibGVkKCkgJiZcbiAgICAgICF0aGlzLl9pc1ByZW1pdW1Vc2VyKCkgJiZcbiAgICAgIHRoaXMuY29uc2VudFNlcnZpY2UuY2FuU2hvd0FkcygpXG4gICAgKTtcbiAgfSk7XG5cbiAgLyoqIEluZGljYSBzaSBlbCB1c3VhcmlvIGVzIHByZW1pdW0gKG5vIHZlIGFkcykgKi9cbiAgcmVhZG9ubHkgaXNQcmVtaXVtVXNlciA9IHRoaXMuX2lzUHJlbWl1bVVzZXIuYXNSZWFkb25seSgpO1xuXG4gIC8qKiBJbmRpY2Egc2kgZXN0YSBlbiBtb2RvIGRlYnVnICovXG4gIHJlYWRvbmx5IGlzRGVidWdNb2RlID0gdGhpcy5faXNEZWJ1Z01vZGUuYXNSZWFkb25seSgpO1xuXG4gIC8qKiBFc3RhZG8gZGUgY29uc2VudCBwYXJhIGFkcyAqL1xuICByZWFkb25seSBjb25zZW50U3RhdGUgPSB0aGlzLmNvbnNlbnRTZXJ2aWNlLmFkc0NvbnNlbnRTdGF0ZTtcblxuICAvKiogRXZlbnRvcyBkZSBhZHMgKGhpc3RvcmlhbCkgKi9cbiAgcmVhZG9ubHkgZXZlbnRzID0gdGhpcy5fZXZlbnRzLmFzUmVhZG9ubHkoKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gSU5URVJOT1NcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSBhY3RpdmVTbG90czogTWFwPHN0cmluZywgR1BUU2xvdD4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgcm91dGVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWZyZXNoVGltZXJJZDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgQEluamVjdChWQUxURUNIX0FEU19DT05GSUcpIHByaXZhdGUgY29uZmlnOiBWYWx0ZWNoQWRzQ29uZmlnLFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogT2JqZWN0LFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBsb2FkZXJTZXJ2aWNlOiBBZHNMb2FkZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uc2VudFNlcnZpY2U6IEFkc0NvbnNlbnRTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuX2lzRGVidWdNb2RlLnNldChjb25maWcuZGVidWdNb2RlID8/IGZhbHNlKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBJTklDSUFMSVpBQ0lPTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogSW5pY2lhbGl6YSBlbCBzZXJ2aWNpbyBkZSBhZHMuXG4gICAqIExsYW1hZG8gYXV0b21hdGljYW1lbnRlIHBvciBBUFBfSU5JVElBTElaRVIuXG4gICAqIE5PIGNhcmdhIGVsIHNjcmlwdCBHUFQgaGFzdGEgcXVlIHNlIG5lY2VzaXRlIGVsIHByaW1lciBhZC5cbiAgICovXG4gIGFzeW5jIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVmVyaWZpY2FyIHNpIHVzdWFyaW8gZXMgcHJlbWl1bVxuICAgIGlmICh0aGlzLmNvbmZpZy5pc1ByZW1pdW1Vc2VyKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLl9pc1ByZW1pdW1Vc2VyLnNldCh0aGlzLmNvbmZpZy5pc1ByZW1pdW1Vc2VyKCkpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRoaXMuX2lzUHJlbWl1bVVzZXIuc2V0KGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTaSBlcyBwcmVtaXVtLCBubyBpbmljaWFsaXphciBhZHNcbiAgICBpZiAodGhpcy5faXNQcmVtaXVtVXNlcigpKSB7XG4gICAgICBpZiAodGhpcy5faXNEZWJ1Z01vZGUoKSkge1xuICAgICAgICBjb25zb2xlLmxvZygnW1ZhbHRlY2hBZHNdIFVzdWFyaW8gcHJlbWl1bSBkZXRlY3RhZG8gLSBhZHMgZGVzaGFiaWxpdGFkb3MnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQuc2V0KHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFZlcmlmaWNhciBjb25zZW50IGJhc2ljb1xuICAgIGlmICghdGhpcy5jb25zZW50U2VydmljZS5jYW5TaG93QWRzKCkgJiYgIXRoaXMuY29uZmlnLnNob3dOb25QZXJzb25hbGl6ZWRBZHMpIHtcbiAgICAgIGlmICh0aGlzLl9pc0RlYnVnTW9kZSgpKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdbVmFsdGVjaEFkc10gU2luIGNvbnNlbnQgcGFyYSBhZHMnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQuc2V0KHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFN1c2NyaWJpcnNlIGEgY2FtYmlvcyBkZSBydXRhIHBhcmEgdmVyaWZpY2FyIGV4Y2x1c2lvbmVzXG4gICAgdGhpcy5zZXR1cFJvdXRlTGlzdGVuZXIoKTtcblxuICAgIC8vIENvbmZpZ3VyYXIgYXV0by1yZWZyZXNoIHNpIGVzdGEgaGFiaWxpdGFkb1xuICAgIGlmICh0aGlzLmNvbmZpZy5hdXRvUmVmcmVzaEludGVydmFsICYmIHRoaXMuY29uZmlnLmF1dG9SZWZyZXNoSW50ZXJ2YWwgPiAwKSB7XG4gICAgICB0aGlzLnNldHVwQXV0b1JlZnJlc2goKTtcbiAgICB9XG5cbiAgICB0aGlzLl9pc0VuYWJsZWQuc2V0KHRydWUpO1xuICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQuc2V0KHRydWUpO1xuXG4gICAgaWYgKHRoaXMuX2lzRGVidWdNb2RlKCkpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdbVmFsdGVjaEFkc10gSW5pY2lhbGl6YWRvIGVuIG1vZG8gZGVidWcnLCB7XG4gICAgICAgIG5ldHdvcmtJZDogdGhpcy5jb25maWcubmV0d29ya0lkLFxuICAgICAgICBsYXp5TG9hZDogdGhpcy5jb25maWcubGF6eUxvYWQsXG4gICAgICAgIGV4Y2x1ZGVSb3V0ZXM6IHRoaXMuY29uZmlnLmV4Y2x1ZGVSb3V0ZXMsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FyZ2EgZWwgc2NyaXB0IEdQVCBkZSBmb3JtYSBsYXp5LlxuICAgKiBMbGFtYWRvIGF1dG9tYXRpY2FtZW50ZSBjdWFuZG8gc2UgcmVuZGVyaXphIGVsIHByaW1lciBhZCBzbG90LlxuICAgKi9cbiAgYXN5bmMgZW5zdXJlR1BUTG9hZGVkKCk6IFByb21pc2U8R1BUTmFtZXNwYWNlIHwgbnVsbD4ge1xuICAgIGlmICghdGhpcy5pc0VuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubG9hZGVyU2VydmljZS5sb2FkR1BUKCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gR0VTVElPTiBERSBTTE9UU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogRGVmaW5lIHkgbXVlc3RyYSB1biBhZCBzbG90LlxuICAgKiBMbGFtYWRvIGludGVybmFtZW50ZSBwb3IgZWwgY29tcG9uZW50ZSBBZFNsb3QuXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgLSBDb25maWd1cmFjaW9uIGRlbCBzbG90XG4gICAqIEByZXR1cm5zIElEIGRlbCBzbG90IG8gbnVsbCBzaSBubyBzZSBwdWVkZSBtb3N0cmFyXG4gICAqL1xuICBhc3luYyBkZWZpbmVTbG90KGNvbmZpZzogQWRTbG90Q29uZmlnKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgaWYgKCF0aGlzLmlzRW5hYmxlZCgpKSB7XG4gICAgICB0aGlzLnVwZGF0ZVNsb3RTdGF0ZShjb25maWcuc2xvdElkLCAnaGlkZGVuJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBWZXJpZmljYXIgc2kgbGEgcnV0YSBhY3R1YWwgZXN0YSBleGNsdWlkYVxuICAgIGlmICh0aGlzLmlzUm91dGVFeGNsdWRlZCgpKSB7XG4gICAgICB0aGlzLnVwZGF0ZVNsb3RTdGF0ZShjb25maWcuc2xvdElkLCAnaGlkZGVuJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVNsb3RTdGF0ZShjb25maWcuc2xvdElkLCAnbG9hZGluZycpO1xuXG4gICAgY29uc3QgZ29vZ2xldGFnID0gYXdhaXQgdGhpcy5lbnN1cmVHUFRMb2FkZWQoKTtcbiAgICBpZiAoIWdvb2dsZXRhZykge1xuICAgICAgdGhpcy51cGRhdGVTbG90U3RhdGUoY29uZmlnLnNsb3RJZCwgJ2Vycm9yJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGdvb2dsZXRhZy5jbWQucHVzaCgoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgYWRVbml0UGF0aCA9IGAke3RoaXMuY29uZmlnLm5ldHdvcmtJZH0ke2NvbmZpZy5hZFVuaXRQYXRofWA7XG4gICAgICAgICAgY29uc3Qgc2l6ZXMgPSB0aGlzLnJlc29sdmVTaXplcyhjb25maWcuc2l6ZSk7XG5cbiAgICAgICAgICBjb25zdCBzbG90ID0gZ29vZ2xldGFnLmRlZmluZVNsb3QoYWRVbml0UGF0aCwgc2l6ZXMsIGNvbmZpZy5zbG90SWQpO1xuICAgICAgICAgIGlmICghc2xvdCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTbG90U3RhdGUoY29uZmlnLnNsb3RJZCwgJ2Vycm9yJyk7XG4gICAgICAgICAgICB0aGlzLmVtaXRFdmVudCh7IHR5cGU6ICdlcnJvcicsIHNsb3RJZDogY29uZmlnLnNsb3RJZCwgZXJyb3I6IG5ldyBFcnJvcignTm8gc2UgcHVkbyBjcmVhciBlbCBzbG90JykgfSk7XG4gICAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEFncmVnYXIgYWwgc2VydmljaW8gcHViYWRzXG4gICAgICAgICAgc2xvdC5hZGRTZXJ2aWNlKGdvb2dsZXRhZy5wdWJhZHMoKSk7XG5cbiAgICAgICAgICAvLyBDb25maWd1cmFyIHNpemUgbWFwcGluZyByZXNwb25zaXZvXG4gICAgICAgICAgaWYgKGNvbmZpZy5zaXplTWFwcGluZyAmJiBjb25maWcuc2l6ZU1hcHBpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgbWFwcGluZyA9IHRoaXMuYnVpbGRTaXplTWFwcGluZyhnb29nbGV0YWcsIGNvbmZpZy5zaXplTWFwcGluZyk7XG4gICAgICAgICAgICBzbG90LmRlZmluZVNpemVNYXBwaW5nKG1hcHBpbmcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENvbmZpZ3VyYXIgdGFyZ2V0aW5nXG4gICAgICAgICAgdGhpcy5hcHBseVRhcmdldGluZyhzbG90LCBjb25maWcudGFyZ2V0aW5nKTtcblxuICAgICAgICAgIC8vIENvbGFwc2FyIHNpIGVzdGEgdmFjaW9cbiAgICAgICAgICBpZiAoY29uZmlnLmNvbGxhcHNlRW1wdHkgPz8gdGhpcy5jb25maWcuZGVmYXVsdFNsb3RDb25maWc/LmNvbGxhcHNlRW1wdHkpIHtcbiAgICAgICAgICAgIHNsb3Quc2V0Q29sbGFwc2VFbXB0eURpdih0cnVlLCB0cnVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBHdWFyZGFyIHJlZmVyZW5jaWFcbiAgICAgICAgICB0aGlzLmFjdGl2ZVNsb3RzLnNldChjb25maWcuc2xvdElkLCBzbG90KTtcbiAgICAgICAgICB0aGlzLl9zbG90cy51cGRhdGUoKHNsb3RzKSA9PiBuZXcgTWFwKHNsb3RzKS5zZXQoY29uZmlnLnNsb3RJZCwgc2xvdCkpO1xuXG4gICAgICAgICAgLy8gTW9zdHJhciBlbCBhZFxuICAgICAgICAgIGdvb2dsZXRhZy5lbmFibGVTZXJ2aWNlcygpO1xuICAgICAgICAgIGdvb2dsZXRhZy5kaXNwbGF5KGNvbmZpZy5zbG90SWQpO1xuXG4gICAgICAgICAgdGhpcy51cGRhdGVTbG90U3RhdGUoY29uZmlnLnNsb3RJZCwgJ3JlbmRlcmVkJyk7XG4gICAgICAgICAgdGhpcy5lbWl0RXZlbnQoeyB0eXBlOiAnbG9hZGVkJywgc2xvdElkOiBjb25maWcuc2xvdElkLCBpc0VtcHR5OiBmYWxzZSB9KTtcblxuICAgICAgICAgIGlmICh0aGlzLl9pc0RlYnVnTW9kZSgpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgW1ZhbHRlY2hBZHNdIFNsb3QgZGVmaW5pZG86ICR7Y29uZmlnLnNsb3RJZH1gLCB7XG4gICAgICAgICAgICAgIGFkVW5pdFBhdGgsXG4gICAgICAgICAgICAgIHNpemVzOiBjb25maWcuc2l6ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc29sdmUoY29uZmlnLnNsb3RJZCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignW1ZhbHRlY2hBZHNdIEVycm9yIGRlZmluaWVuZG8gc2xvdDonLCBlcnJvcik7XG4gICAgICAgICAgdGhpcy51cGRhdGVTbG90U3RhdGUoY29uZmlnLnNsb3RJZCwgJ2Vycm9yJyk7XG4gICAgICAgICAgdGhpcy5lbWl0RXZlbnQoeyB0eXBlOiAnZXJyb3InLCBzbG90SWQ6IGNvbmZpZy5zbG90SWQsIGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cnV5ZSB1biBzbG90IHkgbGliZXJhIHJlY3Vyc29zLlxuICAgKlxuICAgKiBAcGFyYW0gc2xvdElkIC0gSUQgZGVsIHNsb3QgYSBkZXN0cnVpclxuICAgKi9cbiAgZGVzdHJveVNsb3Qoc2xvdElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBzbG90ID0gdGhpcy5hY3RpdmVTbG90cy5nZXQoc2xvdElkKTtcbiAgICBpZiAoIXNsb3QpIHJldHVybjtcblxuICAgIGNvbnN0IGdvb2dsZXRhZyA9IHdpbmRvdy5nb29nbGV0YWc7XG4gICAgaWYgKGdvb2dsZXRhZykge1xuICAgICAgZ29vZ2xldGFnLmNtZC5wdXNoKCgpID0+IHtcbiAgICAgICAgZ29vZ2xldGFnLmRlc3Ryb3lTbG90cyhbc2xvdF0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5hY3RpdmVTbG90cy5kZWxldGUoc2xvdElkKTtcbiAgICB0aGlzLl9zbG90cy51cGRhdGUoKHNsb3RzKSA9PiB7XG4gICAgICBjb25zdCBuZXdTbG90cyA9IG5ldyBNYXAoc2xvdHMpO1xuICAgICAgbmV3U2xvdHMuZGVsZXRlKHNsb3RJZCk7XG4gICAgICByZXR1cm4gbmV3U2xvdHM7XG4gICAgfSk7XG4gICAgdGhpcy5fc2xvdFN0YXRlcy51cGRhdGUoKHN0YXRlcykgPT4ge1xuICAgICAgY29uc3QgbmV3U3RhdGVzID0gbmV3IE1hcChzdGF0ZXMpO1xuICAgICAgbmV3U3RhdGVzLmRlbGV0ZShzbG90SWQpO1xuICAgICAgcmV0dXJuIG5ld1N0YXRlcztcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLl9pc0RlYnVnTW9kZSgpKSB7XG4gICAgICBjb25zb2xlLmxvZyhgW1ZhbHRlY2hBZHNdIFNsb3QgZGVzdHJ1aWRvOiAke3Nsb3RJZH1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzY2EgdW4gc2xvdCBlc3BlY2lmaWNvIG8gdG9kb3MgbG9zIHNsb3RzIGFjdGl2b3MuXG4gICAqXG4gICAqIEBwYXJhbSBzbG90SWRzIC0gSURzIGRlIHNsb3RzIGEgcmVmcmVzY2FyICh1bmRlZmluZWQgPSB0b2RvcylcbiAgICovXG4gIHJlZnJlc2hTbG90cyhzbG90SWRzPzogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcblxuICAgIGNvbnN0IGdvb2dsZXRhZyA9IHdpbmRvdy5nb29nbGV0YWc7XG4gICAgaWYgKCFnb29nbGV0YWcpIHJldHVybjtcblxuICAgIGdvb2dsZXRhZy5jbWQucHVzaCgoKSA9PiB7XG4gICAgICBpZiAoc2xvdElkcyAmJiBzbG90SWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3Qgc2xvdHMgPSBzbG90SWRzLm1hcCgoaWQpID0+IHRoaXMuYWN0aXZlU2xvdHMuZ2V0KGlkKSkuZmlsdGVyKChzKTogcyBpcyBHUFRTbG90ID0+ICEhcyk7XG4gICAgICAgIGlmIChzbG90cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLnJlZnJlc2goc2xvdHMpO1xuICAgICAgICAgIGlmICh0aGlzLl9pc0RlYnVnTW9kZSgpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgW1ZhbHRlY2hBZHNdIFNsb3RzIHJlZnJlc2NhZG9zOiAke3Nsb3RJZHMuam9pbignLCAnKX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdvb2dsZXRhZy5wdWJhZHMoKS5yZWZyZXNoKCk7XG4gICAgICAgIGlmICh0aGlzLl9pc0RlYnVnTW9kZSgpKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1tWYWx0ZWNoQWRzXSBUb2RvcyBsb3Mgc2xvdHMgcmVmcmVzY2Fkb3MnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgZWwgZXN0YWRvIGRlIHVuIHNsb3QuXG4gICAqXG4gICAqIEBwYXJhbSBzbG90SWQgLSBJRCBkZWwgc2xvdFxuICAgKiBAcmV0dXJucyBFc3RhZG8gYWN0dWFsIGRlbCBzbG90XG4gICAqL1xuICBnZXRTbG90U3RhdGUoc2xvdElkOiBzdHJpbmcpOiBBZFNsb3RTdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3Nsb3RTdGF0ZXMoKS5nZXQoc2xvdElkKSA/PyAnaWRsZSc7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUFJFTUlVTSBVU0VSXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBBY3R1YWxpemEgZWwgZXN0YWRvIHByZW1pdW0gZGVsIHVzdWFyaW8uXG4gICAqIExsYW1hciBjdWFuZG8gY2FtYmllIGVsIGVzdGFkbyBkZSBzdXNjcmlwY2lvbi5cbiAgICpcbiAgICogQHBhcmFtIGlzUHJlbWl1bSAtIE51ZXZvIGVzdGFkbyBwcmVtaXVtXG4gICAqL1xuICB1cGRhdGVQcmVtaXVtU3RhdHVzKGlzUHJlbWl1bTogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHdhc0VuYWJsZWQgPSB0aGlzLmlzRW5hYmxlZCgpO1xuICAgIHRoaXMuX2lzUHJlbWl1bVVzZXIuc2V0KGlzUHJlbWl1bSk7XG5cbiAgICBpZiAoaXNQcmVtaXVtICYmIHdhc0VuYWJsZWQpIHtcbiAgICAgIC8vIERlc3RydWlyIHRvZG9zIGxvcyBzbG90cyBhY3Rpdm9zXG4gICAgICB0aGlzLmRlc3Ryb3lBbGxTbG90cygpO1xuICAgICAgaWYgKHRoaXMuX2lzRGVidWdNb2RlKCkpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1tWYWx0ZWNoQWRzXSBVc3VhcmlvIGFob3JhIGVzIHByZW1pdW0gLSBhZHMgZGVzaGFiaWxpdGFkb3MnKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFpc1ByZW1pdW0gJiYgIXdhc0VuYWJsZWQgJiYgdGhpcy5faXNJbml0aWFsaXplZCgpKSB7XG4gICAgICBpZiAodGhpcy5faXNEZWJ1Z01vZGUoKSkge1xuICAgICAgICBjb25zb2xlLmxvZygnW1ZhbHRlY2hBZHNdIFVzdWFyaW8geWEgbm8gZXMgcHJlbWl1bSAtIGFkcyBoYWJpbGl0YWRvcycpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cnV5ZSB0b2RvcyBsb3Mgc2xvdHMgYWN0aXZvcy5cbiAgICovXG4gIGRlc3Ryb3lBbGxTbG90cygpOiB2b2lkIHtcbiAgICBjb25zdCBnb29nbGV0YWcgPSB3aW5kb3cuZ29vZ2xldGFnO1xuICAgIGlmIChnb29nbGV0YWcpIHtcbiAgICAgIGdvb2dsZXRhZy5jbWQucHVzaCgoKSA9PiB7XG4gICAgICAgIGdvb2dsZXRhZy5kZXN0cm95U2xvdHMoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmFjdGl2ZVNsb3RzLmNsZWFyKCk7XG4gICAgdGhpcy5fc2xvdHMuc2V0KG5ldyBNYXAoKSk7XG4gICAgdGhpcy5fc2xvdFN0YXRlcy5zZXQobmV3IE1hcCgpKTtcblxuICAgIGlmICh0aGlzLl9pc0RlYnVnTW9kZSgpKSB7XG4gICAgICBjb25zb2xlLmxvZygnW1ZhbHRlY2hBZHNdIFRvZG9zIGxvcyBzbG90cyBkZXN0cnVpZG9zJyk7XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBSSVZBVEUgTUVUSE9EU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBwcml2YXRlIHJlc29sdmVTaXplcyhzaXplOiBBZFNsb3RDb25maWdbJ3NpemUnXSk6IHVua25vd24ge1xuICAgIGlmICh0eXBlb2Ygc2l6ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIFNpbmdsZSBwcmVzZXQgc2l6ZVxuICAgICAgY29uc3QgbWFwcGVkID0gQURfU0laRV9NQVBbc2l6ZSBhcyBBZFNsb3RTaXplXTtcbiAgICAgIHJldHVybiBtYXBwZWQgPT09ICdmbHVpZCcgPyAnZmx1aWQnIDogW21hcHBlZF07XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2l6ZSkpIHtcbiAgICAgIGlmICh0eXBlb2Ygc2l6ZVswXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gQXJyYXkgb2YgcHJlc2V0IHNpemVzXG4gICAgICAgIHJldHVybiAoc2l6ZSBhcyBBZFNsb3RTaXplW10pLm1hcCgocykgPT4ge1xuICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IEFEX1NJWkVfTUFQW3NdO1xuICAgICAgICAgIHJldHVybiBtYXBwZWQgPT09ICdmbHVpZCcgPyAnZmx1aWQnIDogbWFwcGVkO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIC8vIERpcmVjdCBzaXplIGFycmF5XG4gICAgICByZXR1cm4gc2l6ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gJ2ZsdWlkJztcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTaXplTWFwcGluZyhnb29nbGV0YWc6IEdQVE5hbWVzcGFjZSwgbWFwcGluZzogU2l6ZU1hcHBpbmdbXSk6IHVua25vd24ge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBnb29nbGV0YWcuc2l6ZU1hcHBpbmcoKTtcblxuICAgIC8vIE9yZGVuYXIgcG9yIHZpZXdwb3J0IGRlc2NlbmRlbnRlXG4gICAgY29uc3Qgc29ydGVkID0gWy4uLm1hcHBpbmddLnNvcnQoKGEsIGIpID0+IGIudmlld3BvcnRXaWR0aCAtIGEudmlld3BvcnRXaWR0aCk7XG5cbiAgICBmb3IgKGNvbnN0IG0gb2Ygc29ydGVkKSB7XG4gICAgICBidWlsZGVyLmFkZFNpemUoW20udmlld3BvcnRXaWR0aCwgMF0sIG0uc2l6ZXMpO1xuICAgIH1cblxuICAgIHJldHVybiBidWlsZGVyLmJ1aWxkKCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5VGFyZ2V0aW5nKHNsb3Q6IEdQVFNsb3QsIHRhcmdldGluZz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHN0cmluZ1tdPik6IHZvaWQge1xuICAgIC8vIEFwbGljYXIgdGFyZ2V0aW5nIGdsb2JhbFxuICAgIGlmICh0aGlzLmNvbmZpZy5nbG9iYWxUYXJnZXRpbmcpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuY29uZmlnLmdsb2JhbFRhcmdldGluZykpIHtcbiAgICAgICAgc2xvdC5zZXRUYXJnZXRpbmcoa2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXBsaWNhciB0YXJnZXRpbmcgZGVsIHNsb3RcbiAgICBpZiAodGFyZ2V0aW5nKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0YXJnZXRpbmcpKSB7XG4gICAgICAgIHNsb3Quc2V0VGFyZ2V0aW5nKGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFncmVnYXIgdGFyZ2V0aW5nIGRlIGRlYnVnIHNpIGVzdGEgaGFiaWxpdGFkb1xuICAgIGlmICh0aGlzLl9pc0RlYnVnTW9kZSgpKSB7XG4gICAgICBzbG90LnNldFRhcmdldGluZygndGVzdCcsICd0cnVlJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTbG90U3RhdGUoc2xvdElkOiBzdHJpbmcsIHN0YXRlOiBBZFNsb3RTdGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuX3Nsb3RTdGF0ZXMudXBkYXRlKChzdGF0ZXMpID0+IG5ldyBNYXAoc3RhdGVzKS5zZXQoc2xvdElkLCBzdGF0ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0RXZlbnQoZXZlbnQ6IE9taXQ8QWRFdmVudCwgJ3RpbWVzdGFtcCc+KTogdm9pZCB7XG4gICAgY29uc3QgZnVsbEV2ZW50OiBBZEV2ZW50ID0geyAuLi5ldmVudCwgdGltZXN0YW1wOiBuZXcgRGF0ZSgpIH07XG4gICAgdGhpcy5fZXZlbnRzLnVwZGF0ZSgoZXZlbnRzKSA9PiBbLi4uZXZlbnRzLnNsaWNlKC05OSksIGZ1bGxFdmVudF0pO1xuXG4gICAgLy8gQ2FsbGJhY2tzIGRlIGNvbmZpZ3VyYWNpb25cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2xvYWRlZCcgfHwgZXZlbnQudHlwZSA9PT0gJ2VtcHR5Jykge1xuICAgICAgdGhpcy5jb25maWcub25BZExvYWRlZD8uKGV2ZW50LnNsb3RJZCwgZXZlbnQuaXNFbXB0eSA/PyBmYWxzZSk7XG4gICAgfSBlbHNlIGlmIChldmVudC50eXBlID09PSAnZXJyb3InICYmIGV2ZW50LmVycm9yKSB7XG4gICAgICB0aGlzLmNvbmZpZy5vbkFkRXJyb3I/LihldmVudC5zbG90SWQsIGV2ZW50LmVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldHVwUm91dGVMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmV4Y2x1ZGVSb3V0ZXMgfHwgdGhpcy5jb25maWcuZXhjbHVkZVJvdXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJvdXRlclN1YnNjcmlwdGlvbiA9IHRoaXMucm91dGVyLmV2ZW50c1xuICAgICAgLnBpcGUoZmlsdGVyKChldmVudCk6IGV2ZW50IGlzIE5hdmlnYXRpb25FbmQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBOYXZpZ2F0aW9uRW5kKSA9PiB7XG4gICAgICAgIGNvbnN0IHNob3VsZEhpZGUgPSB0aGlzLmlzUm91dGVFeGNsdWRlZChldmVudC51cmxBZnRlclJlZGlyZWN0cyk7XG5cbiAgICAgICAgaWYgKHNob3VsZEhpZGUpIHtcbiAgICAgICAgICB0aGlzLmRlc3Ryb3lBbGxTbG90cygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBBdXRvUmVmcmVzaCgpOiB2b2lkIHtcbiAgICBjb25zdCBpbnRlcnZhbE1zID0gKHRoaXMuY29uZmlnLmF1dG9SZWZyZXNoSW50ZXJ2YWwgPz8gMCkgKiAxMDAwO1xuICAgIGlmIChpbnRlcnZhbE1zIDw9IDApIHJldHVybjtcblxuICAgIHRoaXMucmVmcmVzaFRpbWVySWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc0VuYWJsZWQoKSAmJiB0aGlzLmFjdGl2ZVNsb3RzLnNpemUgPiAwKSB7XG4gICAgICAgIHRoaXMucmVmcmVzaFNsb3RzKCk7XG4gICAgICB9XG4gICAgfSwgaW50ZXJ2YWxNcyk7XG4gIH1cblxuICBwcml2YXRlIGlzUm91dGVFeGNsdWRlZCh1cmw/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmV4Y2x1ZGVSb3V0ZXMgfHwgdGhpcy5jb25maWcuZXhjbHVkZVJvdXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50VXJsID0gdXJsID8/IHRoaXMucm91dGVyLnVybDtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZXhjbHVkZVJvdXRlcy5zb21lKChwYXR0ZXJuKSA9PiB7XG4gICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAocGF0dGVybik7XG4gICAgICByZXR1cm4gcmVnZXgudGVzdChjdXJyZW50VXJsKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMSUZFQ1lDTEVcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5yb3V0ZXJTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG5cbiAgICBpZiAodGhpcy5yZWZyZXNoVGltZXJJZCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnJlZnJlc2hUaW1lcklkKTtcbiAgICB9XG5cbiAgICB0aGlzLmRlc3Ryb3lBbGxTbG90cygpO1xuICAgIHRoaXMuY29uc2VudFNlcnZpY2UuZGVzdHJveSgpO1xuICB9XG59XG4iXX0=
420
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2Fkcy9hZHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFZLFdBQVcsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFhLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQVUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3hDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUc5QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBUUwsV0FBVyxHQUVaLE1BQU0sU0FBUyxDQUFDOzs7OztBQUVqQjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUVILE1BQU0sT0FBTyxVQUFVO0lBOENyQixZQUNVLFFBQWtCLEVBQ1UsTUFBd0IsRUFDL0IsVUFBa0IsRUFDdkMsTUFBYyxFQUNkLGFBQStCLEVBQy9CLGNBQWlDO1FBTGpDLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDVSxXQUFNLEdBQU4sTUFBTSxDQUFrQjtRQUMvQixlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQ3ZDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFDL0IsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBbkQzQyw4RUFBOEU7UUFDOUUsbUJBQW1CO1FBQ25CLDhFQUE4RTtRQUU3RCxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1QyxtQkFBYyxHQUFHLE1B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QyxHQUFZO1FBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekUsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQzFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDaEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbEMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDhFQUE4RTtJQUM5RSxZQUFZO0lBQ1osOEVBQThFO0lBRTlFLFdBQVc7UUFDVCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFFdkMsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsYUFBYSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBRUQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDaEMsQ0FBQzsrR0FwYlUsVUFBVSwwQ0FnRFgsa0JBQWtCLGFBQ2xCLFdBQVc7bUhBakRWLFVBQVUsY0FERyxNQUFNOzs0RkFDbkIsVUFBVTtrQkFEdEIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQWlEN0IsTUFBTTsyQkFBQyxrQkFBa0I7OzBCQUN6QixNQUFNOzJCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFkcyBTZXJ2aWNlXG4gKlxuICogU2VydmljaW8gcHJpbmNpcGFsIHBhcmEgR29vZ2xlIEFkIE1hbmFnZXIgKEdQVCkuXG4gKiBJbnRlZ3JhIGNvbiBlbCBzaXN0ZW1hIGRlIGNvbnNlbnQgZXhpc3RlbnRlIHkgcmVzcGV0YSB1c3VhcmlvcyBwcmVtaXVtLlxuICovXG5cbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIFBMQVRGT1JNX0lELCBzaWduYWwsIGNvbXB1dGVkLCBPbkRlc3Ryb3ksIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUm91dGVyLCBOYXZpZ2F0aW9uRW5kIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBWQUxURUNIX0FEU19DT05GSUcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBBZHNMb2FkZXJTZXJ2aWNlIH0gZnJvbSAnLi9hZHMtbG9hZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWRzQ29uc2VudFNlcnZpY2UgfSBmcm9tICcuL2Fkcy1jb25zZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQXV0aFN0YXRlU2VydmljZSB9IGZyb20gJy4uL2F1dGgvYXV0aC1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIFZhbHRlY2hBZHNDb25maWcsXG4gIEFkU2xvdENvbmZpZyxcbiAgQWRTbG90U3RhdGUsXG4gIEFkRXZlbnQsXG4gIEdQVFNsb3QsXG4gIEdQVE5hbWVzcGFjZSxcbiAgU2l6ZU1hcHBpbmcsXG4gIEFEX1NJWkVfTUFQLFxuICBBZFNsb3RTaXplLFxufSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBTZXJ2aWNpbyBwcmluY2lwYWwgZGUgR29vZ2xlIEFkIE1hbmFnZXIuXG4gKlxuICogTWFuZWphIGxhIGNyZWFjaW9uLCBkZXN0cnVjY2lvbiB5IHJlZnJlc2ggZGUgYWQgc2xvdHMuXG4gKiBJbnRlZ3JhIGF1dG9tYXRpY2FtZW50ZSBjb24gY29uc2VudCBtb2RlIHkgZGV0ZWN0YSB1c3VhcmlvcyBwcmVtaXVtLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBAQ29tcG9uZW50KHsuLi59KVxuICogZXhwb3J0IGNsYXNzIE15Q29tcG9uZW50IHtcbiAqICAgcHJpdmF0ZSBhZHMgPSBpbmplY3QoQWRzU2VydmljZSk7XG4gKlxuICogICAvLyBWZXJpZmljYXIgc2kgbW9zdHJhciBhZHNcbiAqICAgc2hvd0FkcyA9IHRoaXMuYWRzLmlzRW5hYmxlZDtcbiAqXG4gKiAgIC8vIFZlcmlmaWNhciBzaSB1c3VhcmlvIGVzIHByZW1pdW1cbiAqICAgaXNQcmVtaXVtID0gdGhpcy5hZHMuaXNQcmVtaXVtVXNlcjtcbiAqIH1cbiAqIGBgYFxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEFkc1NlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRVNUQURPIChTaWduYWxzKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBwcml2YXRlIHJlYWRvbmx5IGF1dGhTdGF0ZVNlcnZpY2UgPSBpbmplY3QoQXV0aFN0YXRlU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzSW5pdGlhbGl6ZWQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0VuYWJsZWQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0RlYnVnTW9kZSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Nsb3RzID0gc2lnbmFsPE1hcDxzdHJpbmcsIEdQVFNsb3Q+PihuZXcgTWFwKCkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zbG90U3RhdGVzID0gc2lnbmFsPE1hcDxzdHJpbmcsIEFkU2xvdFN0YXRlPj4obmV3IE1hcCgpKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXZlbnRzID0gc2lnbmFsPEFkRXZlbnRbXT4oW10pO1xuXG4gIC8qKiBJbmRpY2Egc2kgZWwgc2VydmljaW8gZXN0YSBpbmljaWFsaXphZG8gKi9cbiAgcmVhZG9ubHkgaXNJbml0aWFsaXplZCA9IHRoaXMuX2lzSW5pdGlhbGl6ZWQuYXNSZWFkb25seSgpO1xuXG4gIC8qKiBJbmRpY2Egc2kgbG9zIGFkcyBlc3RhbiBoYWJpbGl0YWRvcyAoY29uc2VudCArIG5vIHByZW1pdW0pICovXG4gIHJlYWRvbmx5IGlzRW5hYmxlZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5faXNJbml0aWFsaXplZCgpICYmXG4gICAgICB0aGlzLl9pc0VuYWJsZWQoKSAmJlxuICAgICAgIXRoaXMuYXV0aFN0YXRlU2VydmljZS5pc1ByZW1pdW0oKSAmJlxuICAgICAgdGhpcy5jb25zZW50U2VydmljZS5jYW5TaG93QWRzKClcbiAgICApO1xuICB9KTtcblxuICAvKiogSW5kaWNhIHNpIGVsIHVzdWFyaW8gZXMgcHJlbWl1bSAobm8gdmUgYWRzKSAtIGxlZSBkZSBBdXRoU3RhdGVTZXJ2aWNlICovXG4gIHJlYWRvbmx5IGlzUHJlbWl1bVVzZXIgPSB0aGlzLmF1dGhTdGF0ZVNlcnZpY2UuaXNQcmVtaXVtO1xuXG4gIC8qKiBJbmRpY2Egc2kgZXN0YSBlbiBtb2RvIGRlYnVnICovXG4gIHJlYWRvbmx5IGlzRGVidWdNb2RlID0gdGhpcy5faXNEZWJ1Z01vZGUuYXNSZWFkb25seSgpO1xuXG4gIC8qKiBFc3RhZG8gZGUgY29uc2VudCBwYXJhIGFkcyAqL1xuICByZWFkb25seSBjb25zZW50U3RhdGUgPSB0aGlzLmNvbnNlbnRTZXJ2aWNlLmFkc0NvbnNlbnRTdGF0ZTtcblxuICAvKiogRXZlbnRvcyBkZSBhZHMgKGhpc3RvcmlhbCkgKi9cbiAgcmVhZG9ubHkgZXZlbnRzID0gdGhpcy5fZXZlbnRzLmFzUmVhZG9ubHkoKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gSU5URVJOT1NcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSBhY3RpdmVTbG90czogTWFwPHN0cmluZywgR1BUU2xvdD4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgcm91dGVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWZyZXNoVGltZXJJZDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgQEluamVjdChWQUxURUNIX0FEU19DT05GSUcpIHByaXZhdGUgY29uZmlnOiBWYWx0ZWNoQWRzQ29uZmlnLFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogT2JqZWN0LFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBsb2FkZXJTZXJ2aWNlOiBBZHNMb2FkZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uc2VudFNlcnZpY2U6IEFkc0NvbnNlbnRTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuX2lzRGVidWdNb2RlLnNldChjb25maWcuZGVidWdNb2RlID8/IGZhbHNlKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBJTklDSUFMSVpBQ0lPTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogSW5pY2lhbGl6YSBlbCBzZXJ2aWNpbyBkZSBhZHMuXG4gICAqIExsYW1hZG8gYXV0b21hdGljYW1lbnRlIHBvciBBUFBfSU5JVElBTElaRVIuXG4gICAqIE5PIGNhcmdhIGVsIHNjcmlwdCBHUFQgaGFzdGEgcXVlIHNlIG5lY2VzaXRlIGVsIHByaW1lciBhZC5cbiAgICovXG4gIGFzeW5jIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2kgZXMgcHJlbWl1bSwgbm8gaW5pY2lhbGl6YXIgYWRzIChsZWUgZGUgQXV0aFN0YXRlU2VydmljZSlcbiAgICBpZiAodGhpcy5hdXRoU3RhdGVTZXJ2aWNlLmlzUHJlbWl1bSgpKSB7XG4gICAgICBpZiAodGhpcy5faXNEZWJ1Z01vZGUoKSkge1xuICAgICAgICBjb25zb2xlLmxvZygnW1ZhbHRlY2hBZHNdIFVzdWFyaW8gcHJlbWl1bSBkZXRlY3RhZG8gLSBhZHMgZGVzaGFiaWxpdGFkb3MnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQuc2V0KHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFZlcmlmaWNhciBjb25zZW50IGJhc2ljb1xuICAgIGlmICghdGhpcy5jb25zZW50U2VydmljZS5jYW5TaG93QWRzKCkgJiYgIXRoaXMuY29uZmlnLnNob3dOb25QZXJzb25hbGl6ZWRBZHMpIHtcbiAgICAgIGlmICh0aGlzLl9pc0RlYnVnTW9kZSgpKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdbVmFsdGVjaEFkc10gU2luIGNvbnNlbnQgcGFyYSBhZHMnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQuc2V0KHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFN1c2NyaWJpcnNlIGEgY2FtYmlvcyBkZSBydXRhIHBhcmEgdmVyaWZpY2FyIGV4Y2x1c2lvbmVzXG4gICAgdGhpcy5zZXR1cFJvdXRlTGlzdGVuZXIoKTtcblxuICAgIC8vIENvbmZpZ3VyYXIgYXV0by1yZWZyZXNoIHNpIGVzdGEgaGFiaWxpdGFkb1xuICAgIGlmICh0aGlzLmNvbmZpZy5hdXRvUmVmcmVzaEludGVydmFsICYmIHRoaXMuY29uZmlnLmF1dG9SZWZyZXNoSW50ZXJ2YWwgPiAwKSB7XG4gICAgICB0aGlzLnNldHVwQXV0b1JlZnJlc2goKTtcbiAgICB9XG5cbiAgICB0aGlzLl9pc0VuYWJsZWQuc2V0KHRydWUpO1xuICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQuc2V0KHRydWUpO1xuXG4gICAgaWYgKHRoaXMuX2lzRGVidWdNb2RlKCkpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdbVmFsdGVjaEFkc10gSW5pY2lhbGl6YWRvIGVuIG1vZG8gZGVidWcnLCB7XG4gICAgICAgIG5ldHdvcmtJZDogdGhpcy5jb25maWcubmV0d29ya0lkLFxuICAgICAgICBsYXp5TG9hZDogdGhpcy5jb25maWcubGF6eUxvYWQsXG4gICAgICAgIGV4Y2x1ZGVSb3V0ZXM6IHRoaXMuY29uZmlnLmV4Y2x1ZGVSb3V0ZXMsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FyZ2EgZWwgc2NyaXB0IEdQVCBkZSBmb3JtYSBsYXp5LlxuICAgKiBMbGFtYWRvIGF1dG9tYXRpY2FtZW50ZSBjdWFuZG8gc2UgcmVuZGVyaXphIGVsIHByaW1lciBhZCBzbG90LlxuICAgKi9cbiAgYXN5bmMgZW5zdXJlR1BUTG9hZGVkKCk6IFByb21pc2U8R1BUTmFtZXNwYWNlIHwgbnVsbD4ge1xuICAgIGlmICghdGhpcy5pc0VuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubG9hZGVyU2VydmljZS5sb2FkR1BUKCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gR0VTVElPTiBERSBTTE9UU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogRGVmaW5lIHkgbXVlc3RyYSB1biBhZCBzbG90LlxuICAgKiBMbGFtYWRvIGludGVybmFtZW50ZSBwb3IgZWwgY29tcG9uZW50ZSBBZFNsb3QuXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgLSBDb25maWd1cmFjaW9uIGRlbCBzbG90XG4gICAqIEByZXR1cm5zIElEIGRlbCBzbG90IG8gbnVsbCBzaSBubyBzZSBwdWVkZSBtb3N0cmFyXG4gICAqL1xuICBhc3luYyBkZWZpbmVTbG90KGNvbmZpZzogQWRTbG90Q29uZmlnKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgaWYgKCF0aGlzLmlzRW5hYmxlZCgpKSB7XG4gICAgICB0aGlzLnVwZGF0ZVNsb3RTdGF0ZShjb25maWcuc2xvdElkLCAnaGlkZGVuJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBWZXJpZmljYXIgc2kgbGEgcnV0YSBhY3R1YWwgZXN0YSBleGNsdWlkYVxuICAgIGlmICh0aGlzLmlzUm91dGVFeGNsdWRlZCgpKSB7XG4gICAgICB0aGlzLnVwZGF0ZVNsb3RTdGF0ZShjb25maWcuc2xvdElkLCAnaGlkZGVuJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVNsb3RTdGF0ZShjb25maWcuc2xvdElkLCAnbG9hZGluZycpO1xuXG4gICAgY29uc3QgZ29vZ2xldGFnID0gYXdhaXQgdGhpcy5lbnN1cmVHUFRMb2FkZWQoKTtcbiAgICBpZiAoIWdvb2dsZXRhZykge1xuICAgICAgdGhpcy51cGRhdGVTbG90U3RhdGUoY29uZmlnLnNsb3RJZCwgJ2Vycm9yJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGdvb2dsZXRhZy5jbWQucHVzaCgoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgYWRVbml0UGF0aCA9IGAke3RoaXMuY29uZmlnLm5ldHdvcmtJZH0ke2NvbmZpZy5hZFVuaXRQYXRofWA7XG4gICAgICAgICAgY29uc3Qgc2l6ZXMgPSB0aGlzLnJlc29sdmVTaXplcyhjb25maWcuc2l6ZSk7XG5cbiAgICAgICAgICBjb25zdCBzbG90ID0gZ29vZ2xldGFnLmRlZmluZVNsb3QoYWRVbml0UGF0aCwgc2l6ZXMsIGNvbmZpZy5zbG90SWQpO1xuICAgICAgICAgIGlmICghc2xvdCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTbG90U3RhdGUoY29uZmlnLnNsb3RJZCwgJ2Vycm9yJyk7XG4gICAgICAgICAgICB0aGlzLmVtaXRFdmVudCh7IHR5cGU6ICdlcnJvcicsIHNsb3RJZDogY29uZmlnLnNsb3RJZCwgZXJyb3I6IG5ldyBFcnJvcignTm8gc2UgcHVkbyBjcmVhciBlbCBzbG90JykgfSk7XG4gICAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEFncmVnYXIgYWwgc2VydmljaW8gcHViYWRzXG4gICAgICAgICAgc2xvdC5hZGRTZXJ2aWNlKGdvb2dsZXRhZy5wdWJhZHMoKSk7XG5cbiAgICAgICAgICAvLyBDb25maWd1cmFyIHNpemUgbWFwcGluZyByZXNwb25zaXZvXG4gICAgICAgICAgaWYgKGNvbmZpZy5zaXplTWFwcGluZyAmJiBjb25maWcuc2l6ZU1hcHBpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgbWFwcGluZyA9IHRoaXMuYnVpbGRTaXplTWFwcGluZyhnb29nbGV0YWcsIGNvbmZpZy5zaXplTWFwcGluZyk7XG4gICAgICAgICAgICBzbG90LmRlZmluZVNpemVNYXBwaW5nKG1hcHBpbmcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENvbmZpZ3VyYXIgdGFyZ2V0aW5nXG4gICAgICAgICAgdGhpcy5hcHBseVRhcmdldGluZyhzbG90LCBjb25maWcudGFyZ2V0aW5nKTtcblxuICAgICAgICAgIC8vIENvbGFwc2FyIHNpIGVzdGEgdmFjaW9cbiAgICAgICAgICBpZiAoY29uZmlnLmNvbGxhcHNlRW1wdHkgPz8gdGhpcy5jb25maWcuZGVmYXVsdFNsb3RDb25maWc/LmNvbGxhcHNlRW1wdHkpIHtcbiAgICAgICAgICAgIHNsb3Quc2V0Q29sbGFwc2VFbXB0eURpdih0cnVlLCB0cnVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBHdWFyZGFyIHJlZmVyZW5jaWFcbiAgICAgICAgICB0aGlzLmFjdGl2ZVNsb3RzLnNldChjb25maWcuc2xvdElkLCBzbG90KTtcbiAgICAgICAgICB0aGlzLl9zbG90cy51cGRhdGUoKHNsb3RzKSA9PiBuZXcgTWFwKHNsb3RzKS5zZXQoY29uZmlnLnNsb3RJZCwgc2xvdCkpO1xuXG4gICAgICAgICAgLy8gTW9zdHJhciBlbCBhZFxuICAgICAgICAgIGdvb2dsZXRhZy5lbmFibGVTZXJ2aWNlcygpO1xuICAgICAgICAgIGdvb2dsZXRhZy5kaXNwbGF5KGNvbmZpZy5zbG90SWQpO1xuXG4gICAgICAgICAgdGhpcy51cGRhdGVTbG90U3RhdGUoY29uZmlnLnNsb3RJZCwgJ3JlbmRlcmVkJyk7XG4gICAgICAgICAgdGhpcy5lbWl0RXZlbnQoeyB0eXBlOiAnbG9hZGVkJywgc2xvdElkOiBjb25maWcuc2xvdElkLCBpc0VtcHR5OiBmYWxzZSB9KTtcblxuICAgICAgICAgIGlmICh0aGlzLl9pc0RlYnVnTW9kZSgpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgW1ZhbHRlY2hBZHNdIFNsb3QgZGVmaW5pZG86ICR7Y29uZmlnLnNsb3RJZH1gLCB7XG4gICAgICAgICAgICAgIGFkVW5pdFBhdGgsXG4gICAgICAgICAgICAgIHNpemVzOiBjb25maWcuc2l6ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc29sdmUoY29uZmlnLnNsb3RJZCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignW1ZhbHRlY2hBZHNdIEVycm9yIGRlZmluaWVuZG8gc2xvdDonLCBlcnJvcik7XG4gICAgICAgICAgdGhpcy51cGRhdGVTbG90U3RhdGUoY29uZmlnLnNsb3RJZCwgJ2Vycm9yJyk7XG4gICAgICAgICAgdGhpcy5lbWl0RXZlbnQoeyB0eXBlOiAnZXJyb3InLCBzbG90SWQ6IGNvbmZpZy5zbG90SWQsIGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cnV5ZSB1biBzbG90IHkgbGliZXJhIHJlY3Vyc29zLlxuICAgKlxuICAgKiBAcGFyYW0gc2xvdElkIC0gSUQgZGVsIHNsb3QgYSBkZXN0cnVpclxuICAgKi9cbiAgZGVzdHJveVNsb3Qoc2xvdElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBzbG90ID0gdGhpcy5hY3RpdmVTbG90cy5nZXQoc2xvdElkKTtcbiAgICBpZiAoIXNsb3QpIHJldHVybjtcblxuICAgIGNvbnN0IGdvb2dsZXRhZyA9IHdpbmRvdy5nb29nbGV0YWc7XG4gICAgaWYgKGdvb2dsZXRhZykge1xuICAgICAgZ29vZ2xldGFnLmNtZC5wdXNoKCgpID0+IHtcbiAgICAgICAgZ29vZ2xldGFnLmRlc3Ryb3lTbG90cyhbc2xvdF0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5hY3RpdmVTbG90cy5kZWxldGUoc2xvdElkKTtcbiAgICB0aGlzLl9zbG90cy51cGRhdGUoKHNsb3RzKSA9PiB7XG4gICAgICBjb25zdCBuZXdTbG90cyA9IG5ldyBNYXAoc2xvdHMpO1xuICAgICAgbmV3U2xvdHMuZGVsZXRlKHNsb3RJZCk7XG4gICAgICByZXR1cm4gbmV3U2xvdHM7XG4gICAgfSk7XG4gICAgdGhpcy5fc2xvdFN0YXRlcy51cGRhdGUoKHN0YXRlcykgPT4ge1xuICAgICAgY29uc3QgbmV3U3RhdGVzID0gbmV3IE1hcChzdGF0ZXMpO1xuICAgICAgbmV3U3RhdGVzLmRlbGV0ZShzbG90SWQpO1xuICAgICAgcmV0dXJuIG5ld1N0YXRlcztcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLl9pc0RlYnVnTW9kZSgpKSB7XG4gICAgICBjb25zb2xlLmxvZyhgW1ZhbHRlY2hBZHNdIFNsb3QgZGVzdHJ1aWRvOiAke3Nsb3RJZH1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzY2EgdW4gc2xvdCBlc3BlY2lmaWNvIG8gdG9kb3MgbG9zIHNsb3RzIGFjdGl2b3MuXG4gICAqXG4gICAqIEBwYXJhbSBzbG90SWRzIC0gSURzIGRlIHNsb3RzIGEgcmVmcmVzY2FyICh1bmRlZmluZWQgPSB0b2RvcylcbiAgICovXG4gIHJlZnJlc2hTbG90cyhzbG90SWRzPzogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcblxuICAgIGNvbnN0IGdvb2dsZXRhZyA9IHdpbmRvdy5nb29nbGV0YWc7XG4gICAgaWYgKCFnb29nbGV0YWcpIHJldHVybjtcblxuICAgIGdvb2dsZXRhZy5jbWQucHVzaCgoKSA9PiB7XG4gICAgICBpZiAoc2xvdElkcyAmJiBzbG90SWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3Qgc2xvdHMgPSBzbG90SWRzLm1hcCgoaWQpID0+IHRoaXMuYWN0aXZlU2xvdHMuZ2V0KGlkKSkuZmlsdGVyKChzKTogcyBpcyBHUFRTbG90ID0+ICEhcyk7XG4gICAgICAgIGlmIChzbG90cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLnJlZnJlc2goc2xvdHMpO1xuICAgICAgICAgIGlmICh0aGlzLl9pc0RlYnVnTW9kZSgpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgW1ZhbHRlY2hBZHNdIFNsb3RzIHJlZnJlc2NhZG9zOiAke3Nsb3RJZHMuam9pbignLCAnKX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdvb2dsZXRhZy5wdWJhZHMoKS5yZWZyZXNoKCk7XG4gICAgICAgIGlmICh0aGlzLl9pc0RlYnVnTW9kZSgpKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1tWYWx0ZWNoQWRzXSBUb2RvcyBsb3Mgc2xvdHMgcmVmcmVzY2Fkb3MnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgZWwgZXN0YWRvIGRlIHVuIHNsb3QuXG4gICAqXG4gICAqIEBwYXJhbSBzbG90SWQgLSBJRCBkZWwgc2xvdFxuICAgKiBAcmV0dXJucyBFc3RhZG8gYWN0dWFsIGRlbCBzbG90XG4gICAqL1xuICBnZXRTbG90U3RhdGUoc2xvdElkOiBzdHJpbmcpOiBBZFNsb3RTdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3Nsb3RTdGF0ZXMoKS5nZXQoc2xvdElkKSA/PyAnaWRsZSc7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gU0xPVCBDTEVBTlVQXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBEZXN0cnV5ZSB0b2RvcyBsb3Mgc2xvdHMgYWN0aXZvcy5cbiAgICogTGxhbWFyIGN1YW5kbyBlbCB1c3VhcmlvIHNlIHZ1ZWx2ZSBwcmVtaXVtIG8gY2FtYmlhIGRlIHDDoWdpbmEuXG4gICAqL1xuICBkZXN0cm95QWxsU2xvdHMoKTogdm9pZCB7XG4gICAgY29uc3QgZ29vZ2xldGFnID0gd2luZG93Lmdvb2dsZXRhZztcbiAgICBpZiAoZ29vZ2xldGFnKSB7XG4gICAgICBnb29nbGV0YWcuY21kLnB1c2goKCkgPT4ge1xuICAgICAgICBnb29nbGV0YWcuZGVzdHJveVNsb3RzKCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmVTbG90cy5jbGVhcigpO1xuICAgIHRoaXMuX3Nsb3RzLnNldChuZXcgTWFwKCkpO1xuICAgIHRoaXMuX3Nsb3RTdGF0ZXMuc2V0KG5ldyBNYXAoKSk7XG5cbiAgICBpZiAodGhpcy5faXNEZWJ1Z01vZGUoKSkge1xuICAgICAgY29uc29sZS5sb2coJ1tWYWx0ZWNoQWRzXSBUb2RvcyBsb3Mgc2xvdHMgZGVzdHJ1aWRvcycpO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQUklWQVRFIE1FVEhPRFNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSByZXNvbHZlU2l6ZXMoc2l6ZTogQWRTbG90Q29uZmlnWydzaXplJ10pOiB1bmtub3duIHtcbiAgICBpZiAodHlwZW9mIHNpemUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBTaW5nbGUgcHJlc2V0IHNpemVcbiAgICAgIGNvbnN0IG1hcHBlZCA9IEFEX1NJWkVfTUFQW3NpemUgYXMgQWRTbG90U2l6ZV07XG4gICAgICByZXR1cm4gbWFwcGVkID09PSAnZmx1aWQnID8gJ2ZsdWlkJyA6IFttYXBwZWRdO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHNpemUpKSB7XG4gICAgICBpZiAodHlwZW9mIHNpemVbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIEFycmF5IG9mIHByZXNldCBzaXplc1xuICAgICAgICByZXR1cm4gKHNpemUgYXMgQWRTbG90U2l6ZVtdKS5tYXAoKHMpID0+IHtcbiAgICAgICAgICBjb25zdCBtYXBwZWQgPSBBRF9TSVpFX01BUFtzXTtcbiAgICAgICAgICByZXR1cm4gbWFwcGVkID09PSAnZmx1aWQnID8gJ2ZsdWlkJyA6IG1hcHBlZDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAvLyBEaXJlY3Qgc2l6ZSBhcnJheVxuICAgICAgcmV0dXJuIHNpemU7XG4gICAgfVxuXG4gICAgcmV0dXJuICdmbHVpZCc7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2l6ZU1hcHBpbmcoZ29vZ2xldGFnOiBHUFROYW1lc3BhY2UsIG1hcHBpbmc6IFNpemVNYXBwaW5nW10pOiB1bmtub3duIHtcbiAgICBjb25zdCBidWlsZGVyID0gZ29vZ2xldGFnLnNpemVNYXBwaW5nKCk7XG5cbiAgICAvLyBPcmRlbmFyIHBvciB2aWV3cG9ydCBkZXNjZW5kZW50ZVxuICAgIGNvbnN0IHNvcnRlZCA9IFsuLi5tYXBwaW5nXS5zb3J0KChhLCBiKSA9PiBiLnZpZXdwb3J0V2lkdGggLSBhLnZpZXdwb3J0V2lkdGgpO1xuXG4gICAgZm9yIChjb25zdCBtIG9mIHNvcnRlZCkge1xuICAgICAgYnVpbGRlci5hZGRTaXplKFttLnZpZXdwb3J0V2lkdGgsIDBdLCBtLnNpemVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVpbGRlci5idWlsZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVRhcmdldGluZyhzbG90OiBHUFRTbG90LCB0YXJnZXRpbmc/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXT4pOiB2b2lkIHtcbiAgICAvLyBBcGxpY2FyIHRhcmdldGluZyBnbG9iYWxcbiAgICBpZiAodGhpcy5jb25maWcuZ2xvYmFsVGFyZ2V0aW5nKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmNvbmZpZy5nbG9iYWxUYXJnZXRpbmcpKSB7XG4gICAgICAgIHNsb3Quc2V0VGFyZ2V0aW5nKGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFwbGljYXIgdGFyZ2V0aW5nIGRlbCBzbG90XG4gICAgaWYgKHRhcmdldGluZykge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGFyZ2V0aW5nKSkge1xuICAgICAgICBzbG90LnNldFRhcmdldGluZyhrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZ3JlZ2FyIHRhcmdldGluZyBkZSBkZWJ1ZyBzaSBlc3RhIGhhYmlsaXRhZG9cbiAgICBpZiAodGhpcy5faXNEZWJ1Z01vZGUoKSkge1xuICAgICAgc2xvdC5zZXRUYXJnZXRpbmcoJ3Rlc3QnLCAndHJ1ZScpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2xvdFN0YXRlKHNsb3RJZDogc3RyaW5nLCBzdGF0ZTogQWRTbG90U3RhdGUpOiB2b2lkIHtcbiAgICB0aGlzLl9zbG90U3RhdGVzLnVwZGF0ZSgoc3RhdGVzKSA9PiBuZXcgTWFwKHN0YXRlcykuc2V0KHNsb3RJZCwgc3RhdGUpKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdEV2ZW50KGV2ZW50OiBPbWl0PEFkRXZlbnQsICd0aW1lc3RhbXAnPik6IHZvaWQge1xuICAgIGNvbnN0IGZ1bGxFdmVudDogQWRFdmVudCA9IHsgLi4uZXZlbnQsIHRpbWVzdGFtcDogbmV3IERhdGUoKSB9O1xuICAgIHRoaXMuX2V2ZW50cy51cGRhdGUoKGV2ZW50cykgPT4gWy4uLmV2ZW50cy5zbGljZSgtOTkpLCBmdWxsRXZlbnRdKTtcblxuICAgIC8vIENhbGxiYWNrcyBkZSBjb25maWd1cmFjaW9uXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdsb2FkZWQnIHx8IGV2ZW50LnR5cGUgPT09ICdlbXB0eScpIHtcbiAgICAgIHRoaXMuY29uZmlnLm9uQWRMb2FkZWQ/LihldmVudC5zbG90SWQsIGV2ZW50LmlzRW1wdHkgPz8gZmFsc2UpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PT0gJ2Vycm9yJyAmJiBldmVudC5lcnJvcikge1xuICAgICAgdGhpcy5jb25maWcub25BZEVycm9yPy4oZXZlbnQuc2xvdElkLCBldmVudC5lcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFJvdXRlTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5leGNsdWRlUm91dGVzIHx8IHRoaXMuY29uZmlnLmV4Y2x1ZGVSb3V0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5yb3V0ZXJTdWJzY3JpcHRpb24gPSB0aGlzLnJvdXRlci5ldmVudHNcbiAgICAgIC5waXBlKGZpbHRlcigoZXZlbnQpOiBldmVudCBpcyBOYXZpZ2F0aW9uRW5kID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkpXG4gICAgICAuc3Vic2NyaWJlKChldmVudDogTmF2aWdhdGlvbkVuZCkgPT4ge1xuICAgICAgICBjb25zdCBzaG91bGRIaWRlID0gdGhpcy5pc1JvdXRlRXhjbHVkZWQoZXZlbnQudXJsQWZ0ZXJSZWRpcmVjdHMpO1xuXG4gICAgICAgIGlmIChzaG91bGRIaWRlKSB7XG4gICAgICAgICAgdGhpcy5kZXN0cm95QWxsU2xvdHMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwQXV0b1JlZnJlc2goKTogdm9pZCB7XG4gICAgY29uc3QgaW50ZXJ2YWxNcyA9ICh0aGlzLmNvbmZpZy5hdXRvUmVmcmVzaEludGVydmFsID8/IDApICogMTAwMDtcbiAgICBpZiAoaW50ZXJ2YWxNcyA8PSAwKSByZXR1cm47XG5cbiAgICB0aGlzLnJlZnJlc2hUaW1lcklkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNFbmFibGVkKCkgJiYgdGhpcy5hY3RpdmVTbG90cy5zaXplID4gMCkge1xuICAgICAgICB0aGlzLnJlZnJlc2hTbG90cygpO1xuICAgICAgfVxuICAgIH0sIGludGVydmFsTXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1JvdXRlRXhjbHVkZWQodXJsPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5leGNsdWRlUm91dGVzIHx8IHRoaXMuY29uZmlnLmV4Y2x1ZGVSb3V0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFVybCA9IHVybCA/PyB0aGlzLnJvdXRlci51cmw7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmV4Y2x1ZGVSb3V0ZXMuc29tZSgocGF0dGVybikgPT4ge1xuICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHBhdHRlcm4pO1xuICAgICAgcmV0dXJuIHJlZ2V4LnRlc3QoY3VycmVudFVybCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTElGRUNZQ0xFXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMucm91dGVyU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuXG4gICAgaWYgKHRoaXMucmVmcmVzaFRpbWVySWQpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5yZWZyZXNoVGltZXJJZCk7XG4gICAgfVxuXG4gICAgdGhpcy5kZXN0cm95QWxsU2xvdHMoKTtcbiAgICB0aGlzLmNvbnNlbnRTZXJ2aWNlLmRlc3Ryb3koKTtcbiAgfVxufVxuIl19
@@ -20,4 +20,4 @@ export const AD_SIZE_MAP = {
20
20
  native: 'fluid',
21
21
  custom: 'fluid',
22
22
  };
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2Fkcy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQXdGSDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBbUQ7SUFDekUsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUN0QixTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0lBQ3JCLGtCQUFrQixFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUM5QixpQkFBaUIsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDN0IsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUN2QixVQUFVLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0lBQ3RCLGVBQWUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDMUIsb0JBQW9CLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0lBQ2hDLEtBQUssRUFBRSxPQUFPO0lBQ2QsTUFBTSxFQUFFLE9BQU87SUFDZixNQUFNLEVBQUUsT0FBTztDQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBZHMgVHlwZXNcbiAqXG4gKiBUaXBvcyBlIGludGVyZmFjZXMgcGFyYSBlbCBzZXJ2aWNpbyBkZSBHb29nbGUgQWQgTWFuYWdlci5cbiAqIFVzYSBHb29nbGUgUHVibGlzaGVyIFRhZ3MgKEdQVCkgcGFyYSByZW5kZXJpemFyIGFkcy5cbiAqL1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDT05GSUdVUkFDSU9OXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQ29uZmlndXJhY2lvbiBkZWwgc2VydmljaW8gZGUgQWRzLlxuICogUGFzYWRhIGEgcHJvdmlkZVZhbHRlY2hBZHMoKSBlbiBlbCBib290c3RyYXAgZGUgbGEgYXBsaWNhY2lvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYWx0ZWNoQWRzQ29uZmlnIHtcbiAgLyoqIE5ldHdvcmsgSUQgZGUgR29vZ2xlIEFkIE1hbmFnZXIgKGVqOiAnLzEyMzQ1Njc4JykgKi9cbiAgbmV0d29ya0lkOiBzdHJpbmc7XG5cbiAgLyoqIEhhYmlsaXRhciBtb2RvIGRlYnVnIChtdWVzdHJhIGluZm8gZGUgYWRzIGVuIGNvbnNvbGEpICovXG4gIGRlYnVnTW9kZT86IGJvb2xlYW47XG5cbiAgLyoqIEFjdGl2YXIgbGF6eSBsb2FkaW5nIGRlIGFkcyAodmlld3BvcnQgaW50ZXJzZWN0aW9uKSAqL1xuICBsYXp5TG9hZD86IGJvb2xlYW47XG5cbiAgLyoqIENvbmZpZ3VyYWNpb24gZGUgbGF6eSBsb2FkaW5nICovXG4gIGxhenlMb2FkQ29uZmlnPzogTGF6eUxvYWRDb25maWc7XG5cbiAgLyoqIEZ1bmNpb24gcGFyYSBkZXRlcm1pbmFyIHNpIGVsIHVzdWFyaW8gZXMgcHJlbWl1bSAoc2luIGFkcykgKi9cbiAgaXNQcmVtaXVtVXNlcj86ICgpID0+IGJvb2xlYW47XG5cbiAgLyoqIENvbmZpZ3VyYWNpb24gcG9yIGRlZmVjdG8gcGFyYSBhZCBzbG90cyAqL1xuICBkZWZhdWx0U2xvdENvbmZpZz86IFBhcnRpYWw8QWRTbG90Q29uZmlnPjtcblxuICAvKiogVGFyZ2V0aW5nIGdsb2JhbCAoYXBsaWNhIGEgdG9kb3MgbG9zIHNsb3RzKSAqL1xuICBnbG9iYWxUYXJnZXRpbmc/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXT47XG5cbiAgLyoqIEhhYmlsaXRhciBwZXJzb25hbGl6YWNpb24gZGUgYWRzIChyZXF1aWVyZSBjb25zZW50KSAqL1xuICBlbmFibGVQZXJzb25hbGl6YXRpb24/OiBib29sZWFuO1xuXG4gIC8qKiBNb3N0cmFyIGFkcyBkZSBmYWxsYmFjayBzaSBubyBoYXkgY29uc2VudCAqL1xuICBzaG93Tm9uUGVyc29uYWxpemVkQWRzPzogYm9vbGVhbjtcblxuICAvKiogQ2FsbGJhY2sgY3VhbmRvIHNlIGNhcmdhIHVuIGFkICovXG4gIG9uQWRMb2FkZWQ/OiAoc2xvdElkOiBzdHJpbmcsIGlzRW1wdHk6IGJvb2xlYW4pID0+IHZvaWQ7XG5cbiAgLyoqIENhbGxiYWNrIGN1YW5kbyBmYWxsYSB1biBhZCAqL1xuICBvbkFkRXJyb3I/OiAoc2xvdElkOiBzdHJpbmcsIGVycm9yOiBFcnJvcikgPT4gdm9pZDtcblxuICAvKiogUmVmcmVzaCBhdXRvbWF0aWNvIGRlIGFkcyAoZW4gc2VndW5kb3MsIDAgPSBkZXNoYWJpbGl0YWRvKSAqL1xuICBhdXRvUmVmcmVzaEludGVydmFsPzogbnVtYmVyO1xuXG4gIC8qKiBSdXRhcyBkb25kZSBOTyBtb3N0cmFyIGFkcyAocmVnZXggcGF0dGVybnMpICovXG4gIGV4Y2x1ZGVSb3V0ZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBDb25maWd1cmFjaW9uIGRlIGxhenkgbG9hZGluZyBwYXJhIEdQVC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYXp5TG9hZENvbmZpZyB7XG4gIC8qKiBNYXJnZW4gZGVsIHZpZXdwb3J0IHBhcmEgY2FyZ2FyIChlajogJzIwMHB4JykgKi9cbiAgcm9vdE1hcmdpbj86IHN0cmluZztcblxuICAvKiogVGhyZXNob2xkIGRlIGludGVyc2VjY2lvbiAoMC0xKSAqL1xuICB0aHJlc2hvbGQ/OiBudW1iZXI7XG5cbiAgLyoqIEZldGNoIG1hcmdpbiBwYXJhIEdQVCAocGl4ZWxzIGFudGVzIGRlbCB2aWV3cG9ydCkgKi9cbiAgZmV0Y2hNYXJnaW5QZXJjZW50PzogbnVtYmVyO1xuXG4gIC8qKiBSZW5kZXIgbWFyZ2luIHBhcmEgR1BUICovXG4gIHJlbmRlck1hcmdpblBlcmNlbnQ/OiBudW1iZXI7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEFEIFNMT1RTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogVGFtYW5vcyBkZSBhZCBwcmVkZWZpbmlkb3MgKElBQiBzdGFuZGFyZCkuXG4gKi9cbmV4cG9ydCB0eXBlIEFkU2xvdFNpemUgPVxuICB8ICdsZWFkZXJib2FyZCcgLy8gNzI4eDkwIC0gRGVza3RvcCBoZWFkZXJcbiAgfCAnYmlsbGJvYXJkJyAvLyA5NzB4MjUwIC0gTGFyZ2UgZGVza3RvcFxuICB8ICdtZWRpdW0tcmVjdGFuZ2xlJyAvLyAzMDB4MjUwIC0gVW5pdmVyc2FsXG4gIHwgJ2xhcmdlLXJlY3RhbmdsZScgLy8gMzM2eDI4MCAtIExhcmdlIHJlY3RhbmdsZVxuICB8ICdoYWxmLXBhZ2UnIC8vIDMwMHg2MDAgLSBTaWRlYmFyXG4gIHwgJ3NreXNjcmFwZXInIC8vIDE2MHg2MDAgLSBTaWRlYmFyXG4gIHwgJ21vYmlsZS1iYW5uZXInIC8vIDMyMHg1MCAtIE1vYmlsZVxuICB8ICdtb2JpbGUtbGVhZGVyYm9hcmQnIC8vIDMyMHgxMDAgLSBNb2JpbGUgbGFyZ2VcbiAgfCAnZmx1aWQnIC8vIFJlc3BvbnNpdmVcbiAgfCAnbmF0aXZlJyAvLyBOYXRpdmUgYWQgZm9ybWF0XG4gIHwgJ2N1c3RvbSc7IC8vIFRhbWFubyBjdXN0b21cblxuLyoqXG4gKiBNYXBlbyBkZSB0YW1hbm9zIHByZWRlZmluaWRvcyBhIGRpbWVuc2lvbmVzLlxuICovXG5leHBvcnQgY29uc3QgQURfU0laRV9NQVA6IFJlY29yZDxBZFNsb3RTaXplLCBbbnVtYmVyLCBudW1iZXJdIHwgJ2ZsdWlkJz4gPSB7XG4gIGxlYWRlcmJvYXJkOiBbNzI4LCA5MF0sXG4gIGJpbGxib2FyZDogWzk3MCwgMjUwXSxcbiAgJ21lZGl1bS1yZWN0YW5nbGUnOiBbMzAwLCAyNTBdLFxuICAnbGFyZ2UtcmVjdGFuZ2xlJzogWzMzNiwgMjgwXSxcbiAgJ2hhbGYtcGFnZSc6IFszMDAsIDYwMF0sXG4gIHNreXNjcmFwZXI6IFsxNjAsIDYwMF0sXG4gICdtb2JpbGUtYmFubmVyJzogWzMyMCwgNTBdLFxuICAnbW9iaWxlLWxlYWRlcmJvYXJkJzogWzMyMCwgMTAwXSxcbiAgZmx1aWQ6ICdmbHVpZCcsXG4gIG5hdGl2ZTogJ2ZsdWlkJyxcbiAgY3VzdG9tOiAnZmx1aWQnLFxufTtcblxuLyoqXG4gKiBDb25maWd1cmFjaW9uIGRlIHVuIGFkIHNsb3QgaW5kaXZpZHVhbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZFNsb3RDb25maWcge1xuICAvKiogSUQgdW5pY28gZGVsIHNsb3QgKHVzYWRvIHBhcmEgZWwgZGl2IGNvbnRhaW5lcikgKi9cbiAgc2xvdElkOiBzdHJpbmc7XG5cbiAgLyoqIEFkIHVuaXQgcGF0aCAoZWo6ICcvaG9tZXBhZ2UvdG9wJykgLSBzZSBjb25jYXRlbmEgY29uIG5ldHdvcmtJZCAqL1xuICBhZFVuaXRQYXRoOiBzdHJpbmc7XG5cbiAgLyoqIFRhbWFubyBkZWwgYWQgbyB0YW1hbm9zIHJlc3BvbnNpdm9zICovXG4gIHNpemU6IEFkU2xvdFNpemUgfCBBZFNsb3RTaXplW10gfCBbbnVtYmVyLCBudW1iZXJdIHwgW251bWJlciwgbnVtYmVyXVtdO1xuXG4gIC8qKiBNYXBwaW5nIHJlc3BvbnNpdm86IFt2aWV3cG9ydC13aWR0aCwgc2l6ZXNdICovXG4gIHNpemVNYXBwaW5nPzogU2l6ZU1hcHBpbmdbXTtcblxuICAvKiogVGFyZ2V0aW5nIGVzcGVjaWZpY28gcGFyYSBlc3RlIHNsb3QgKi9cbiAgdGFyZ2V0aW5nPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+O1xuXG4gIC8qKiBDb2xhcHNhciBzbG90IHNpIGVzdGEgdmFjaW8gKi9cbiAgY29sbGFwc2VFbXB0eT86IGJvb2xlYW47XG5cbiAgLyoqIEVzIHVuIG5hdGl2ZSBhZCAqL1xuICBpc05hdGl2ZT86IGJvb2xlYW47XG5cbiAgLyoqIENTUyBjbGFzcyBhZGljaW9uYWwgKi9cbiAgY3NzQ2xhc3M/OiBzdHJpbmc7XG5cbiAgLyoqIEFsdHVyYSBtaW5pbWEgbWllbnRyYXMgY2FyZ2EgKi9cbiAgbWluSGVpZ2h0Pzogc3RyaW5nO1xuXG4gIC8qKiBNb3N0cmFyIHNrZWxldG9uIG1pZW50cmFzIGNhcmdhICovXG4gIHNob3dTa2VsZXRvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogTWFwcGluZyBkZSB0YW1hbm9zIHJlc3BvbnNpdm9zLlxuICogRGVmaW5lIHF1ZSB0YW1hbm9zIGRlIGFkIG1vc3RyYXIgc2VndW4gZWwgdmlld3BvcnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2l6ZU1hcHBpbmcge1xuICAvKiogQW5jaG8gbWluaW1vIGRlbCB2aWV3cG9ydCAqL1xuICB2aWV3cG9ydFdpZHRoOiBudW1iZXI7XG4gIC8qKiBUYW1hbm9zIGRlIGFkIHBhcmEgZXN0ZSB2aWV3cG9ydCAqL1xuICBzaXplczogKFtudW1iZXIsIG51bWJlcl0gfCAnZmx1aWQnKVtdO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBFU1RBRE9cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBFc3RhZG8gZGUgdW4gYWQgc2xvdC5cbiAqL1xuZXhwb3J0IHR5cGUgQWRTbG90U3RhdGUgPVxuICB8ICdpZGxlJyAvLyBObyBjYXJnYWRvXG4gIHwgJ2xvYWRpbmcnIC8vIFNjcmlwdC9hZCBjYXJnYW5kb1xuICB8ICdyZW5kZXJlZCcgLy8gQWQgdmlzaWJsZVxuICB8ICdlbXB0eScgLy8gU2luIGFkIGRpc3BvbmlibGVcbiAgfCAnaGlkZGVuJyAvLyBVc3VhcmlvIHByZW1pdW0gbyBzaW4gY29uc2VudFxuICB8ICdlcnJvcic7IC8vIEVycm9yIGRlIGNhcmdhXG5cbi8qKlxuICogRXZlbnRvIGVtaXRpZG8gcG9yIGVsIHNlcnZpY2lvIGRlIGFkcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZEV2ZW50IHtcbiAgdHlwZTogJ2xvYWRlZCcgfCAnZW1wdHknIHwgJ2Vycm9yJyB8ICd2aWV3YWJsZScgfCAnY2xpY2tlZCc7XG4gIHNsb3RJZDogc3RyaW5nO1xuICB0aW1lc3RhbXA6IERhdGU7XG4gIGlzRW1wdHk/OiBib29sZWFuO1xuICBlcnJvcj86IEVycm9yO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDT05TRU5UXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogRXN0YWRvIGRlIGNvbnNlbnQgcGFyYSBhZHMgKG1hcGVhZG8gZGVzZGUgQW5hbHl0aWNzU2VydmljZSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWRzQ29uc2VudFN0YXRlIHtcbiAgLyoqIFBlcm1pdGUgYWxtYWNlbmFtaWVudG8gZGUgYWRzICovXG4gIGFkU3RvcmFnZTogYm9vbGVhbjtcblxuICAvKiogUGVybWl0ZSBwZXJzb25hbGl6YWNpb24gZGUgYWRzICovXG4gIGFkUGVyc29uYWxpemF0aW9uOiBib29sZWFuO1xuXG4gIC8qKiBQZXJtaXRlIGRhdG9zIGRlIHVzdWFyaW8gcGFyYSBhZHMgKi9cbiAgYWRVc2VyRGF0YTogYm9vbGVhbjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gR1BUIChHb29nbGUgUHVibGlzaGVyIFRhZykgVHlwZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEdQVCBTbG90IHJlZmVyZW5jZSAqL1xuZXhwb3J0IGludGVyZmFjZSBHUFRTbG90IHtcbiAgZ2V0U2xvdEVsZW1lbnRJZCgpOiBzdHJpbmc7XG4gIGdldEFkVW5pdFBhdGgoKTogc3RyaW5nO1xuICBhZGRTZXJ2aWNlKHNlcnZpY2U6IHVua25vd24pOiBHUFRTbG90O1xuICBkZWZpbmVTaXplTWFwcGluZyhtYXBwaW5nOiB1bmtub3duKTogR1BUU2xvdDtcbiAgc2V0VGFyZ2V0aW5nKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pOiBHUFRTbG90O1xuICBzZXRDb2xsYXBzZUVtcHR5RGl2KGNvbGxhcHNlOiBib29sZWFuLCBjb2xsYXBzZUJlZm9yZUFkRmV0Y2g/OiBib29sZWFuKTogR1BUU2xvdDtcbn1cblxuLyoqIEdQVCBnbG9iYWwgbmFtZXNwYWNlICh3aW5kb3cuZ29vZ2xldGFnKSAqL1xuZXhwb3J0IGludGVyZmFjZSBHUFROYW1lc3BhY2Uge1xuICBjbWQ6IEFycmF5PCgpID0+IHZvaWQ+O1xuICBkZWZpbmVTbG90KGFkVW5pdFBhdGg6IHN0cmluZywgc2l6ZTogdW5rbm93biwgZGl2SWQ6IHN0cmluZyk6IEdQVFNsb3QgfCBudWxsO1xuICBwdWJhZHMoKTogR1BUUHViYWRzU2VydmljZTtcbiAgZW5hYmxlU2VydmljZXMoKTogdm9pZDtcbiAgZGlzcGxheShkaXZJZDogc3RyaW5nKTogdm9pZDtcbiAgZGVzdHJveVNsb3RzKHNsb3RzPzogR1BUU2xvdFtdKTogYm9vbGVhbjtcbiAgc2l6ZU1hcHBpbmcoKTogR1BUU2l6ZU1hcHBpbmdCdWlsZGVyO1xufVxuXG4vKiogR1BUIFB1YmFkcyBTZXJ2aWNlICovXG5leHBvcnQgaW50ZXJmYWNlIEdQVFB1YmFkc1NlcnZpY2Uge1xuICBlbmFibGVTaW5nbGVSZXF1ZXN0KCk6IHZvaWQ7XG4gIGVuYWJsZUxhenlMb2FkKGNvbmZpZz86IG9iamVjdCk6IHZvaWQ7XG4gIHNldFRhcmdldGluZyhrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZDtcbiAgc2V0UmVxdWVzdE5vblBlcnNvbmFsaXplZEFkcyh2YWx1ZTogMCB8IDEpOiB2b2lkO1xuICBhZGRFdmVudExpc3RlbmVyKGV2ZW50OiBzdHJpbmcsIGNhbGxiYWNrOiAoZXZlbnQ6IEdQVEV2ZW50KSA9PiB2b2lkKTogdm9pZDtcbiAgcmVmcmVzaChzbG90cz86IEdQVFNsb3RbXSk6IHZvaWQ7XG4gIGNvbGxhcHNlRW1wdHlEaXZzKGNvbGxhcHNlQmVmb3JlQWRGZXRjaD86IGJvb2xlYW4pOiB2b2lkO1xufVxuXG4vKiogR1BUIFNpemUgTWFwcGluZyBCdWlsZGVyICovXG5leHBvcnQgaW50ZXJmYWNlIEdQVFNpemVNYXBwaW5nQnVpbGRlciB7XG4gIGFkZFNpemUodmlld3BvcnQ6IFtudW1iZXIsIG51bWJlcl0sIHNpemVzOiB1bmtub3duKTogR1BUU2l6ZU1hcHBpbmdCdWlsZGVyO1xuICBidWlsZCgpOiB1bmtub3duO1xufVxuXG4vKiogR1BUIEV2ZW50ICovXG5leHBvcnQgaW50ZXJmYWNlIEdQVEV2ZW50IHtcbiAgc2xvdDogR1BUU2xvdDtcbiAgaXNFbXB0eT86IGJvb2xlYW47XG59XG5cbi8vIEV4dGVuZCBXaW5kb3cgaW50ZXJmYWNlIGZvciBnb29nbGV0YWdcbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgZ29vZ2xldGFnPzogR1BUTmFtZXNwYWNlO1xuICB9XG59XG4iXX0=
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2Fkcy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQXFGSDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBbUQ7SUFDekUsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUN0QixTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0lBQ3JCLGtCQUFrQixFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUM5QixpQkFBaUIsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDN0IsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUN2QixVQUFVLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0lBQ3RCLGVBQWUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDMUIsb0JBQW9CLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0lBQ2hDLEtBQUssRUFBRSxPQUFPO0lBQ2QsTUFBTSxFQUFFLE9BQU87SUFDZixNQUFNLEVBQUUsT0FBTztDQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBZHMgVHlwZXNcbiAqXG4gKiBUaXBvcyBlIGludGVyZmFjZXMgcGFyYSBlbCBzZXJ2aWNpbyBkZSBHb29nbGUgQWQgTWFuYWdlci5cbiAqIFVzYSBHb29nbGUgUHVibGlzaGVyIFRhZ3MgKEdQVCkgcGFyYSByZW5kZXJpemFyIGFkcy5cbiAqL1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDT05GSUdVUkFDSU9OXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQ29uZmlndXJhY2lvbiBkZWwgc2VydmljaW8gZGUgQWRzLlxuICogUGFzYWRhIGEgcHJvdmlkZVZhbHRlY2hBZHMoKSBlbiBlbCBib290c3RyYXAgZGUgbGEgYXBsaWNhY2lvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYWx0ZWNoQWRzQ29uZmlnIHtcbiAgLyoqIE5ldHdvcmsgSUQgZGUgR29vZ2xlIEFkIE1hbmFnZXIgKGVqOiAnLzEyMzQ1Njc4JykgKi9cbiAgbmV0d29ya0lkOiBzdHJpbmc7XG5cbiAgLyoqIEhhYmlsaXRhciBtb2RvIGRlYnVnIChtdWVzdHJhIGluZm8gZGUgYWRzIGVuIGNvbnNvbGEpICovXG4gIGRlYnVnTW9kZT86IGJvb2xlYW47XG5cbiAgLyoqIEFjdGl2YXIgbGF6eSBsb2FkaW5nIGRlIGFkcyAodmlld3BvcnQgaW50ZXJzZWN0aW9uKSAqL1xuICBsYXp5TG9hZD86IGJvb2xlYW47XG5cbiAgLyoqIENvbmZpZ3VyYWNpb24gZGUgbGF6eSBsb2FkaW5nICovXG4gIGxhenlMb2FkQ29uZmlnPzogTGF6eUxvYWRDb25maWc7XG5cbiAgLyoqIENvbmZpZ3VyYWNpb24gcG9yIGRlZmVjdG8gcGFyYSBhZCBzbG90cyAqL1xuICBkZWZhdWx0U2xvdENvbmZpZz86IFBhcnRpYWw8QWRTbG90Q29uZmlnPjtcblxuICAvKiogVGFyZ2V0aW5nIGdsb2JhbCAoYXBsaWNhIGEgdG9kb3MgbG9zIHNsb3RzKSAqL1xuICBnbG9iYWxUYXJnZXRpbmc/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXT47XG5cbiAgLyoqIEhhYmlsaXRhciBwZXJzb25hbGl6YWNpb24gZGUgYWRzIChyZXF1aWVyZSBjb25zZW50KSAqL1xuICBlbmFibGVQZXJzb25hbGl6YXRpb24/OiBib29sZWFuO1xuXG4gIC8qKiBNb3N0cmFyIGFkcyBkZSBmYWxsYmFjayBzaSBubyBoYXkgY29uc2VudCAqL1xuICBzaG93Tm9uUGVyc29uYWxpemVkQWRzPzogYm9vbGVhbjtcblxuICAvKiogQ2FsbGJhY2sgY3VhbmRvIHNlIGNhcmdhIHVuIGFkICovXG4gIG9uQWRMb2FkZWQ/OiAoc2xvdElkOiBzdHJpbmcsIGlzRW1wdHk6IGJvb2xlYW4pID0+IHZvaWQ7XG5cbiAgLyoqIENhbGxiYWNrIGN1YW5kbyBmYWxsYSB1biBhZCAqL1xuICBvbkFkRXJyb3I/OiAoc2xvdElkOiBzdHJpbmcsIGVycm9yOiBFcnJvcikgPT4gdm9pZDtcblxuICAvKiogUmVmcmVzaCBhdXRvbWF0aWNvIGRlIGFkcyAoZW4gc2VndW5kb3MsIDAgPSBkZXNoYWJpbGl0YWRvKSAqL1xuICBhdXRvUmVmcmVzaEludGVydmFsPzogbnVtYmVyO1xuXG4gIC8qKiBSdXRhcyBkb25kZSBOTyBtb3N0cmFyIGFkcyAocmVnZXggcGF0dGVybnMpICovXG4gIGV4Y2x1ZGVSb3V0ZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBDb25maWd1cmFjaW9uIGRlIGxhenkgbG9hZGluZyBwYXJhIEdQVC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYXp5TG9hZENvbmZpZyB7XG4gIC8qKiBNYXJnZW4gZGVsIHZpZXdwb3J0IHBhcmEgY2FyZ2FyIChlajogJzIwMHB4JykgKi9cbiAgcm9vdE1hcmdpbj86IHN0cmluZztcblxuICAvKiogVGhyZXNob2xkIGRlIGludGVyc2VjY2lvbiAoMC0xKSAqL1xuICB0aHJlc2hvbGQ/OiBudW1iZXI7XG5cbiAgLyoqIEZldGNoIG1hcmdpbiBwYXJhIEdQVCAocGl4ZWxzIGFudGVzIGRlbCB2aWV3cG9ydCkgKi9cbiAgZmV0Y2hNYXJnaW5QZXJjZW50PzogbnVtYmVyO1xuXG4gIC8qKiBSZW5kZXIgbWFyZ2luIHBhcmEgR1BUICovXG4gIHJlbmRlck1hcmdpblBlcmNlbnQ/OiBudW1iZXI7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEFEIFNMT1RTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogVGFtYW5vcyBkZSBhZCBwcmVkZWZpbmlkb3MgKElBQiBzdGFuZGFyZCkuXG4gKi9cbmV4cG9ydCB0eXBlIEFkU2xvdFNpemUgPVxuICB8ICdsZWFkZXJib2FyZCcgLy8gNzI4eDkwIC0gRGVza3RvcCBoZWFkZXJcbiAgfCAnYmlsbGJvYXJkJyAvLyA5NzB4MjUwIC0gTGFyZ2UgZGVza3RvcFxuICB8ICdtZWRpdW0tcmVjdGFuZ2xlJyAvLyAzMDB4MjUwIC0gVW5pdmVyc2FsXG4gIHwgJ2xhcmdlLXJlY3RhbmdsZScgLy8gMzM2eDI4MCAtIExhcmdlIHJlY3RhbmdsZVxuICB8ICdoYWxmLXBhZ2UnIC8vIDMwMHg2MDAgLSBTaWRlYmFyXG4gIHwgJ3NreXNjcmFwZXInIC8vIDE2MHg2MDAgLSBTaWRlYmFyXG4gIHwgJ21vYmlsZS1iYW5uZXInIC8vIDMyMHg1MCAtIE1vYmlsZVxuICB8ICdtb2JpbGUtbGVhZGVyYm9hcmQnIC8vIDMyMHgxMDAgLSBNb2JpbGUgbGFyZ2VcbiAgfCAnZmx1aWQnIC8vIFJlc3BvbnNpdmVcbiAgfCAnbmF0aXZlJyAvLyBOYXRpdmUgYWQgZm9ybWF0XG4gIHwgJ2N1c3RvbSc7IC8vIFRhbWFubyBjdXN0b21cblxuLyoqXG4gKiBNYXBlbyBkZSB0YW1hbm9zIHByZWRlZmluaWRvcyBhIGRpbWVuc2lvbmVzLlxuICovXG5leHBvcnQgY29uc3QgQURfU0laRV9NQVA6IFJlY29yZDxBZFNsb3RTaXplLCBbbnVtYmVyLCBudW1iZXJdIHwgJ2ZsdWlkJz4gPSB7XG4gIGxlYWRlcmJvYXJkOiBbNzI4LCA5MF0sXG4gIGJpbGxib2FyZDogWzk3MCwgMjUwXSxcbiAgJ21lZGl1bS1yZWN0YW5nbGUnOiBbMzAwLCAyNTBdLFxuICAnbGFyZ2UtcmVjdGFuZ2xlJzogWzMzNiwgMjgwXSxcbiAgJ2hhbGYtcGFnZSc6IFszMDAsIDYwMF0sXG4gIHNreXNjcmFwZXI6IFsxNjAsIDYwMF0sXG4gICdtb2JpbGUtYmFubmVyJzogWzMyMCwgNTBdLFxuICAnbW9iaWxlLWxlYWRlcmJvYXJkJzogWzMyMCwgMTAwXSxcbiAgZmx1aWQ6ICdmbHVpZCcsXG4gIG5hdGl2ZTogJ2ZsdWlkJyxcbiAgY3VzdG9tOiAnZmx1aWQnLFxufTtcblxuLyoqXG4gKiBDb25maWd1cmFjaW9uIGRlIHVuIGFkIHNsb3QgaW5kaXZpZHVhbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZFNsb3RDb25maWcge1xuICAvKiogSUQgdW5pY28gZGVsIHNsb3QgKHVzYWRvIHBhcmEgZWwgZGl2IGNvbnRhaW5lcikgKi9cbiAgc2xvdElkOiBzdHJpbmc7XG5cbiAgLyoqIEFkIHVuaXQgcGF0aCAoZWo6ICcvaG9tZXBhZ2UvdG9wJykgLSBzZSBjb25jYXRlbmEgY29uIG5ldHdvcmtJZCAqL1xuICBhZFVuaXRQYXRoOiBzdHJpbmc7XG5cbiAgLyoqIFRhbWFubyBkZWwgYWQgbyB0YW1hbm9zIHJlc3BvbnNpdm9zICovXG4gIHNpemU6IEFkU2xvdFNpemUgfCBBZFNsb3RTaXplW10gfCBbbnVtYmVyLCBudW1iZXJdIHwgW251bWJlciwgbnVtYmVyXVtdO1xuXG4gIC8qKiBNYXBwaW5nIHJlc3BvbnNpdm86IFt2aWV3cG9ydC13aWR0aCwgc2l6ZXNdICovXG4gIHNpemVNYXBwaW5nPzogU2l6ZU1hcHBpbmdbXTtcblxuICAvKiogVGFyZ2V0aW5nIGVzcGVjaWZpY28gcGFyYSBlc3RlIHNsb3QgKi9cbiAgdGFyZ2V0aW5nPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+O1xuXG4gIC8qKiBDb2xhcHNhciBzbG90IHNpIGVzdGEgdmFjaW8gKi9cbiAgY29sbGFwc2VFbXB0eT86IGJvb2xlYW47XG5cbiAgLyoqIEVzIHVuIG5hdGl2ZSBhZCAqL1xuICBpc05hdGl2ZT86IGJvb2xlYW47XG5cbiAgLyoqIENTUyBjbGFzcyBhZGljaW9uYWwgKi9cbiAgY3NzQ2xhc3M/OiBzdHJpbmc7XG5cbiAgLyoqIEFsdHVyYSBtaW5pbWEgbWllbnRyYXMgY2FyZ2EgKi9cbiAgbWluSGVpZ2h0Pzogc3RyaW5nO1xuXG4gIC8qKiBNb3N0cmFyIHNrZWxldG9uIG1pZW50cmFzIGNhcmdhICovXG4gIHNob3dTa2VsZXRvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogTWFwcGluZyBkZSB0YW1hbm9zIHJlc3BvbnNpdm9zLlxuICogRGVmaW5lIHF1ZSB0YW1hbm9zIGRlIGFkIG1vc3RyYXIgc2VndW4gZWwgdmlld3BvcnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2l6ZU1hcHBpbmcge1xuICAvKiogQW5jaG8gbWluaW1vIGRlbCB2aWV3cG9ydCAqL1xuICB2aWV3cG9ydFdpZHRoOiBudW1iZXI7XG4gIC8qKiBUYW1hbm9zIGRlIGFkIHBhcmEgZXN0ZSB2aWV3cG9ydCAqL1xuICBzaXplczogKFtudW1iZXIsIG51bWJlcl0gfCAnZmx1aWQnKVtdO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBFU1RBRE9cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBFc3RhZG8gZGUgdW4gYWQgc2xvdC5cbiAqL1xuZXhwb3J0IHR5cGUgQWRTbG90U3RhdGUgPVxuICB8ICdpZGxlJyAvLyBObyBjYXJnYWRvXG4gIHwgJ2xvYWRpbmcnIC8vIFNjcmlwdC9hZCBjYXJnYW5kb1xuICB8ICdyZW5kZXJlZCcgLy8gQWQgdmlzaWJsZVxuICB8ICdlbXB0eScgLy8gU2luIGFkIGRpc3BvbmlibGVcbiAgfCAnaGlkZGVuJyAvLyBVc3VhcmlvIHByZW1pdW0gbyBzaW4gY29uc2VudFxuICB8ICdlcnJvcic7IC8vIEVycm9yIGRlIGNhcmdhXG5cbi8qKlxuICogRXZlbnRvIGVtaXRpZG8gcG9yIGVsIHNlcnZpY2lvIGRlIGFkcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZEV2ZW50IHtcbiAgdHlwZTogJ2xvYWRlZCcgfCAnZW1wdHknIHwgJ2Vycm9yJyB8ICd2aWV3YWJsZScgfCAnY2xpY2tlZCc7XG4gIHNsb3RJZDogc3RyaW5nO1xuICB0aW1lc3RhbXA6IERhdGU7XG4gIGlzRW1wdHk/OiBib29sZWFuO1xuICBlcnJvcj86IEVycm9yO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDT05TRU5UXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogRXN0YWRvIGRlIGNvbnNlbnQgcGFyYSBhZHMgKG1hcGVhZG8gZGVzZGUgQW5hbHl0aWNzU2VydmljZSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWRzQ29uc2VudFN0YXRlIHtcbiAgLyoqIFBlcm1pdGUgYWxtYWNlbmFtaWVudG8gZGUgYWRzICovXG4gIGFkU3RvcmFnZTogYm9vbGVhbjtcblxuICAvKiogUGVybWl0ZSBwZXJzb25hbGl6YWNpb24gZGUgYWRzICovXG4gIGFkUGVyc29uYWxpemF0aW9uOiBib29sZWFuO1xuXG4gIC8qKiBQZXJtaXRlIGRhdG9zIGRlIHVzdWFyaW8gcGFyYSBhZHMgKi9cbiAgYWRVc2VyRGF0YTogYm9vbGVhbjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gR1BUIChHb29nbGUgUHVibGlzaGVyIFRhZykgVHlwZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEdQVCBTbG90IHJlZmVyZW5jZSAqL1xuZXhwb3J0IGludGVyZmFjZSBHUFRTbG90IHtcbiAgZ2V0U2xvdEVsZW1lbnRJZCgpOiBzdHJpbmc7XG4gIGdldEFkVW5pdFBhdGgoKTogc3RyaW5nO1xuICBhZGRTZXJ2aWNlKHNlcnZpY2U6IHVua25vd24pOiBHUFRTbG90O1xuICBkZWZpbmVTaXplTWFwcGluZyhtYXBwaW5nOiB1bmtub3duKTogR1BUU2xvdDtcbiAgc2V0VGFyZ2V0aW5nKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pOiBHUFRTbG90O1xuICBzZXRDb2xsYXBzZUVtcHR5RGl2KGNvbGxhcHNlOiBib29sZWFuLCBjb2xsYXBzZUJlZm9yZUFkRmV0Y2g/OiBib29sZWFuKTogR1BUU2xvdDtcbn1cblxuLyoqIEdQVCBnbG9iYWwgbmFtZXNwYWNlICh3aW5kb3cuZ29vZ2xldGFnKSAqL1xuZXhwb3J0IGludGVyZmFjZSBHUFROYW1lc3BhY2Uge1xuICBjbWQ6IEFycmF5PCgpID0+IHZvaWQ+O1xuICBkZWZpbmVTbG90KGFkVW5pdFBhdGg6IHN0cmluZywgc2l6ZTogdW5rbm93biwgZGl2SWQ6IHN0cmluZyk6IEdQVFNsb3QgfCBudWxsO1xuICBwdWJhZHMoKTogR1BUUHViYWRzU2VydmljZTtcbiAgZW5hYmxlU2VydmljZXMoKTogdm9pZDtcbiAgZGlzcGxheShkaXZJZDogc3RyaW5nKTogdm9pZDtcbiAgZGVzdHJveVNsb3RzKHNsb3RzPzogR1BUU2xvdFtdKTogYm9vbGVhbjtcbiAgc2l6ZU1hcHBpbmcoKTogR1BUU2l6ZU1hcHBpbmdCdWlsZGVyO1xufVxuXG4vKiogR1BUIFB1YmFkcyBTZXJ2aWNlICovXG5leHBvcnQgaW50ZXJmYWNlIEdQVFB1YmFkc1NlcnZpY2Uge1xuICBlbmFibGVTaW5nbGVSZXF1ZXN0KCk6IHZvaWQ7XG4gIGVuYWJsZUxhenlMb2FkKGNvbmZpZz86IG9iamVjdCk6IHZvaWQ7XG4gIHNldFRhcmdldGluZyhrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZDtcbiAgc2V0UmVxdWVzdE5vblBlcnNvbmFsaXplZEFkcyh2YWx1ZTogMCB8IDEpOiB2b2lkO1xuICBhZGRFdmVudExpc3RlbmVyKGV2ZW50OiBzdHJpbmcsIGNhbGxiYWNrOiAoZXZlbnQ6IEdQVEV2ZW50KSA9PiB2b2lkKTogdm9pZDtcbiAgcmVmcmVzaChzbG90cz86IEdQVFNsb3RbXSk6IHZvaWQ7XG4gIGNvbGxhcHNlRW1wdHlEaXZzKGNvbGxhcHNlQmVmb3JlQWRGZXRjaD86IGJvb2xlYW4pOiB2b2lkO1xufVxuXG4vKiogR1BUIFNpemUgTWFwcGluZyBCdWlsZGVyICovXG5leHBvcnQgaW50ZXJmYWNlIEdQVFNpemVNYXBwaW5nQnVpbGRlciB7XG4gIGFkZFNpemUodmlld3BvcnQ6IFtudW1iZXIsIG51bWJlcl0sIHNpemVzOiB1bmtub3duKTogR1BUU2l6ZU1hcHBpbmdCdWlsZGVyO1xuICBidWlsZCgpOiB1bmtub3duO1xufVxuXG4vKiogR1BUIEV2ZW50ICovXG5leHBvcnQgaW50ZXJmYWNlIEdQVEV2ZW50IHtcbiAgc2xvdDogR1BUU2xvdDtcbiAgaXNFbXB0eT86IGJvb2xlYW47XG59XG5cbi8vIEV4dGVuZCBXaW5kb3cgaW50ZXJmYWNlIGZvciBnb29nbGV0YWdcbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgZ29vZ2xldGFnPzogR1BUTmFtZXNwYWNlO1xuICB9XG59XG4iXX0=