ngx-tethys 18.2.10 → 18.2.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +36 -0
- package/date-picker/abstract-picker.component.d.ts +6 -1
- package/date-picker/base-picker.component.d.ts +1 -1
- package/date-picker/lib/calendar/calendar-footer.component.d.ts +2 -1
- package/date-picker/lib/calendar/calendar-table.component.d.ts +4 -3
- package/date-picker/lib/popups/date-popup.component.d.ts +2 -1
- package/date-picker/lib/popups/inner-popup.component.d.ts +2 -1
- package/date-picker/picker.component.d.ts +2 -1
- package/date-picker/picker.util.d.ts +5 -5
- package/esm2022/cascader/cascader.component.mjs +2 -2
- package/esm2022/date-picker/abstract-picker.component.mjs +16 -28
- package/esm2022/date-picker/base-picker.component.mjs +17 -13
- package/esm2022/date-picker/date-picker.component.mjs +3 -3
- package/esm2022/date-picker/lib/calendar/calendar-footer.component.mjs +7 -5
- package/esm2022/date-picker/lib/calendar/calendar-table.component.mjs +6 -4
- package/esm2022/date-picker/lib/date/date-table.component.mjs +2 -2
- package/esm2022/date-picker/lib/popups/date-popup.component.mjs +29 -45
- package/esm2022/date-picker/lib/popups/inner-popup.component.mjs +7 -5
- package/esm2022/date-picker/month-picker.component.mjs +3 -3
- package/esm2022/date-picker/picker.component.mjs +9 -4
- package/esm2022/date-picker/picker.util.mjs +21 -15
- package/esm2022/date-picker/quarter-picker.component.mjs +3 -3
- package/esm2022/date-picker/range-picker.component.mjs +3 -3
- package/esm2022/date-picker/week-picker.component.mjs +3 -3
- package/esm2022/date-picker/year-picker.component.mjs +3 -3
- package/esm2022/i18n/i18n.service.mjs +3 -6
- package/esm2022/i18n/locale.mjs +17 -2
- package/esm2022/message/message-container.component.mjs +3 -3
- package/esm2022/notify/notify-container.component.mjs +3 -3
- package/esm2022/select/custom-select/custom-select.component.mjs +2 -2
- package/esm2022/time-picker/inner/inner-time-picker.component.mjs +13 -11
- package/esm2022/time-picker/inner/inner-time-picker.store.mjs +16 -16
- package/esm2022/time-picker/time-picker.utils.mjs +14 -14
- package/esm2022/util/date/tiny-date.mjs +23 -11
- package/esm2022/util/helpers/helpers.mjs +13 -1
- package/esm2022/version.mjs +2 -2
- package/fesm2022/ngx-tethys-cascader.mjs +1 -1
- package/fesm2022/ngx-tethys-cascader.mjs.map +1 -1
- package/fesm2022/ngx-tethys-date-picker.mjs +114 -121
- package/fesm2022/ngx-tethys-date-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-i18n.mjs +17 -5
- package/fesm2022/ngx-tethys-i18n.mjs.map +1 -1
- package/fesm2022/ngx-tethys-message.mjs +2 -2
- package/fesm2022/ngx-tethys-message.mjs.map +1 -1
- package/fesm2022/ngx-tethys-notify.mjs +2 -2
- package/fesm2022/ngx-tethys-notify.mjs.map +1 -1
- package/fesm2022/ngx-tethys-select.mjs +1 -1
- package/fesm2022/ngx-tethys-select.mjs.map +1 -1
- package/fesm2022/ngx-tethys-time-picker.mjs +40 -38
- package/fesm2022/ngx-tethys-time-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-util.mjs +422 -398
- package/fesm2022/ngx-tethys-util.mjs.map +1 -1
- package/fesm2022/ngx-tethys.mjs +1 -1
- package/fesm2022/ngx-tethys.mjs.map +1 -1
- package/i18n/locale.d.ts +7 -1
- package/package.json +2 -1
- package/schematics/version.d.ts +1 -1
- package/schematics/version.js +1 -1
- package/table/styles/table.scss +9 -1
- package/time-picker/inner/inner-time-picker.component.d.ts +3 -1
- package/time-picker/inner/inner-time-picker.store.d.ts +5 -5
- package/time-picker/time-picker.utils.d.ts +5 -5
- package/util/helpers/helpers.d.ts +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,42 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
## [18.2.13](https://github.com/atinc/ngx-tethys/compare/18.2.11...18.2.13) (2025-04-27)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* change package-lock ([0083efa](https://github.com/atinc/ngx-tethys/commit/0083efa523a95e55589e7f747676a73b27d15ec1))
|
|
11
|
+
* change package-lock ([aaf353c](https://github.com/atinc/ngx-tethys/commit/aaf353c8902caa9874cec9d3891c8d8e134db832))
|
|
12
|
+
* **date-picker:** update TinyDate initialization and methods to handle timezone correctly ([#3345](https://github.com/atinc/ngx-tethys/issues/3345)) ([#3346](https://github.com/atinc/ngx-tethys/issues/3346)) ([21734ba](https://github.com/atinc/ngx-tethys/commit/21734ba63dff3bd5e31e2ff3f7c242f9f14ea62b))
|
|
13
|
+
* **notify:** resolve auto close for multiple notifications v18.x ([#3357](https://github.com/atinc/ngx-tethys/issues/3357)) ([36b651e](https://github.com/atinc/ngx-tethys/commit/36b651eb3c33be6230a54c758786f1bfc1a5327f))
|
|
14
|
+
* **table:** handle fixed header border style ([#3349](https://github.com/atinc/ngx-tethys/issues/3349)) ([085db0f](https://github.com/atinc/ngx-tethys/commit/085db0f8160853d70960686105d47bc30128a54f))
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
## [18.2.12](https://github.com/atinc/ngx-tethys/compare/18.2.11...18.2.12) (2025-04-18)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### Bug Fixes
|
|
22
|
+
|
|
23
|
+
* **date-picker:** update TinyDate initialization and methods to handle timezone correctly ([#3345](https://github.com/atinc/ngx-tethys/issues/3345)) ([#3346](https://github.com/atinc/ngx-tethys/issues/3346)) ([21734ba](https://github.com/atinc/ngx-tethys/commit/21734ba63dff3bd5e31e2ff3f7c242f9f14ea62b))
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
## [18.2.11](https://github.com/atinc/ngx-tethys/compare/18.2.10...18.2.11) (2025-04-16)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
### Bug Fixes
|
|
31
|
+
|
|
32
|
+
* **util:** handle i18n and tinyDate set default locale ([#3331](https://github.com/atinc/ngx-tethys/issues/3331)) ([b00b3eb](https://github.com/atinc/ngx-tethys/commit/b00b3eba0d488f02d0badad5158ac3f6cad7e948))
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
### Features
|
|
36
|
+
|
|
37
|
+
* **date-picker:** add timezone support to date picker components and utilities #TINFR-1734 ([#3335](https://github.com/atinc/ngx-tethys/issues/3335)) ([d1765bd](https://github.com/atinc/ngx-tethys/commit/d1765bdc4adba0744817f7958d1199827793ee14)), closes [#TINFR-1734](https://github.com/atinc/ngx-tethys/issues/TINFR-1734)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
5
41
|
## [18.2.10](https://github.com/atinc/ngx-tethys/compare/18.2.9...18.2.10) (2025-04-08)
|
|
6
42
|
|
|
7
43
|
### Features
|
|
@@ -124,6 +124,10 @@ export declare abstract class AbstractPickerComponent extends TabIndexDisabledCo
|
|
|
124
124
|
*/
|
|
125
125
|
set thyDisabled(value: boolean);
|
|
126
126
|
get thyDisabled(): boolean;
|
|
127
|
+
/**
|
|
128
|
+
* 时区,不传使用默认时区
|
|
129
|
+
*/
|
|
130
|
+
thyTimeZone: string;
|
|
127
131
|
disabled: boolean;
|
|
128
132
|
shortcutPosition: ThyShortcutPosition;
|
|
129
133
|
shortcutPresets: CompatiblePresets;
|
|
@@ -135,6 +139,7 @@ export declare abstract class AbstractPickerComponent extends TabIndexDisabledCo
|
|
|
135
139
|
protected isCustomPlaceHolder: boolean;
|
|
136
140
|
private onlyEmitDate;
|
|
137
141
|
protected originWithTime: boolean;
|
|
142
|
+
protected innerValue: CompatibleDate;
|
|
138
143
|
get realOpenState(): boolean;
|
|
139
144
|
get isShowDatePopup(): boolean;
|
|
140
145
|
initValue(): void;
|
|
@@ -160,7 +165,7 @@ export declare abstract class AbstractPickerComponent extends TabIndexDisabledCo
|
|
|
160
165
|
setValue(value: CompatibleDate): void;
|
|
161
166
|
private setValueByPrecision;
|
|
162
167
|
static ɵfac: i0.ɵɵFactoryDeclaration<AbstractPickerComponent, never>;
|
|
163
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<AbstractPickerComponent, never, never, { "thyMode": { "alias": "thyMode"; "required": false; }; "thyAllowClear": { "alias": "thyAllowClear"; "required": false; }; "thyAutoFocus": { "alias": "thyAutoFocus"; "required": false; }; "thyOpen": { "alias": "thyOpen"; "required": false; }; "thyDisabledDate": { "alias": "thyDisabledDate"; "required": false; }; "thyMinDate": { "alias": "thyMinDate"; "required": false; }; "thyMaxDate": { "alias": "thyMaxDate"; "required": false; }; "thyPlaceHolder": { "alias": "thyPlaceHolder"; "required": false; }; "thyReadonly": { "alias": "thyReadonly"; "required": false; }; "thyOriginClassName": { "alias": "thyOriginClassName"; "required": false; }; "thyPanelClassName": { "alias": "thyPanelClassName"; "required": false; }; "thySize": { "alias": "thySize"; "required": false; }; "thyTimestampPrecision": { "alias": "thyTimestampPrecision"; "required": false; }; "thyFormat": { "alias": "thyFormat"; "required": false; }; "thySeparator": { "alias": "thySeparator"; "required": false; }; "thyAutoStartAndEnd": { "alias": "thyAutoStartAndEnd"; "required": false; }; "thyDefaultPickerValue": { "alias": "thyDefaultPickerValue"; "required": false; }; "thySuffixIcon": { "alias": "thySuffixIcon"; "required": false; }; "thyShowShortcut": { "alias": "thyShowShortcut"; "required": false; }; "thyShortcutPosition": { "alias": "thyShortcutPosition"; "required": false; }; "thyShortcutPresets": { "alias": "thyShortcutPresets"; "required": false; }; "thyDisabled": { "alias": "thyDisabled"; "required": false; }; }, { "thyDateChange": "thyDateChange"; "thyOpenChange": "thyOpenChange"; }, never, never, false, never>;
|
|
168
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<AbstractPickerComponent, never, never, { "thyMode": { "alias": "thyMode"; "required": false; }; "thyAllowClear": { "alias": "thyAllowClear"; "required": false; }; "thyAutoFocus": { "alias": "thyAutoFocus"; "required": false; }; "thyOpen": { "alias": "thyOpen"; "required": false; }; "thyDisabledDate": { "alias": "thyDisabledDate"; "required": false; }; "thyMinDate": { "alias": "thyMinDate"; "required": false; }; "thyMaxDate": { "alias": "thyMaxDate"; "required": false; }; "thyPlaceHolder": { "alias": "thyPlaceHolder"; "required": false; }; "thyReadonly": { "alias": "thyReadonly"; "required": false; }; "thyOriginClassName": { "alias": "thyOriginClassName"; "required": false; }; "thyPanelClassName": { "alias": "thyPanelClassName"; "required": false; }; "thySize": { "alias": "thySize"; "required": false; }; "thyTimestampPrecision": { "alias": "thyTimestampPrecision"; "required": false; }; "thyFormat": { "alias": "thyFormat"; "required": false; }; "thySeparator": { "alias": "thySeparator"; "required": false; }; "thyAutoStartAndEnd": { "alias": "thyAutoStartAndEnd"; "required": false; }; "thyDefaultPickerValue": { "alias": "thyDefaultPickerValue"; "required": false; }; "thySuffixIcon": { "alias": "thySuffixIcon"; "required": false; }; "thyShowShortcut": { "alias": "thyShowShortcut"; "required": false; }; "thyShortcutPosition": { "alias": "thyShortcutPosition"; "required": false; }; "thyShortcutPresets": { "alias": "thyShortcutPresets"; "required": false; }; "thyDisabled": { "alias": "thyDisabled"; "required": false; }; "thyTimeZone": { "alias": "thyTimeZone"; "required": false; }; }, { "thyDateChange": "thyDateChange"; "thyOpenChange": "thyOpenChange"; }, never, never, false, never>;
|
|
164
169
|
static ngAcceptInputType_thyAllowClear: boolean | string | number;
|
|
165
170
|
static ngAcceptInputType_thyAutoFocus: boolean | string | number;
|
|
166
171
|
static ngAcceptInputType_thyOpen: boolean | string | number;
|
|
@@ -3,8 +3,8 @@ import { FunctionProp, TinyDate } from 'ngx-tethys/util';
|
|
|
3
3
|
import { ElementRef, EventEmitter, NgZone, OnChanges, OnInit, TemplateRef } from '@angular/core';
|
|
4
4
|
import { AbstractPickerComponent } from './abstract-picker.component';
|
|
5
5
|
import { CompatibleValue, RangeAdvancedValue } from './inner-types';
|
|
6
|
-
import { CompatibleDate, ThyPanelMode } from './standard-types';
|
|
7
6
|
import { ThyPicker } from './picker.component';
|
|
7
|
+
import { CompatibleDate, ThyPanelMode } from './standard-types';
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
9
|
/**
|
|
10
10
|
* @private
|
|
@@ -9,6 +9,7 @@ export declare class CalendarFooter implements OnInit, OnChanges {
|
|
|
9
9
|
showTime: boolean;
|
|
10
10
|
mustShowTime: boolean;
|
|
11
11
|
value: TinyDate;
|
|
12
|
+
timeZone: string;
|
|
12
13
|
disableTimeConfirm: boolean;
|
|
13
14
|
readonly selectTime: EventEmitter<TinyDate>;
|
|
14
15
|
readonly clickOk: EventEmitter<void>;
|
|
@@ -25,6 +26,6 @@ export declare class CalendarFooter implements OnInit, OnChanges {
|
|
|
25
26
|
changeTimeShowMode(type: string): void;
|
|
26
27
|
private _initTimeShowMode;
|
|
27
28
|
static ɵfac: i0.ɵɵFactoryDeclaration<CalendarFooter, never>;
|
|
28
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<CalendarFooter, "calendar-footer", ["calendarFooter"], { "showTime": { "alias": "showTime"; "required": false; }; "mustShowTime": { "alias": "mustShowTime"; "required": false; }; "value": { "alias": "value"; "required": false; }; "disableTimeConfirm": { "alias": "disableTimeConfirm"; "required": false; }; }, { "selectTime": "selectTime"; "clickOk": "clickOk"; "clickRemove": "clickRemove"; "showTimePickerChange": "showTimePickerChange"; }, never, never, true, never>;
|
|
29
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CalendarFooter, "calendar-footer", ["calendarFooter"], { "showTime": { "alias": "showTime"; "required": false; }; "mustShowTime": { "alias": "mustShowTime"; "required": false; }; "value": { "alias": "value"; "required": false; }; "timeZone": { "alias": "timeZone"; "required": false; }; "disableTimeConfirm": { "alias": "disableTimeConfirm"; "required": false; }; }, { "selectTime": "selectTime"; "clickOk": "clickOk"; "clickRemove": "clickRemove"; "showTimePickerChange": "showTimePickerChange"; }, never, never, true, never>;
|
|
29
30
|
static ngAcceptInputType_disableTimeConfirm: boolean | string | number;
|
|
30
31
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { EventEmitter, OnChanges, OnInit, Signal, SimpleChanges, TemplateRef } from '@angular/core';
|
|
2
|
+
import { ThyDatePickerLocale } from 'ngx-tethys/i18n';
|
|
2
3
|
import { SafeAny } from 'ngx-tethys/types';
|
|
3
4
|
import { FunctionProp, isTemplateRef, TinyDate } from 'ngx-tethys/util';
|
|
4
|
-
import {
|
|
5
|
-
import { ThyDatePickerLocale } from 'ngx-tethys/i18n';
|
|
5
|
+
import { DateBodyRow, DateCell } from '../date/types';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
/**
|
|
8
8
|
* @private
|
|
@@ -20,6 +20,7 @@ export declare abstract class CalendarTable implements OnInit, OnChanges {
|
|
|
20
20
|
showWeek: boolean;
|
|
21
21
|
selectedValue: TinyDate[];
|
|
22
22
|
hoverValue: TinyDate[];
|
|
23
|
+
timeZone: string;
|
|
23
24
|
disabledDate?: (d: Date) => boolean;
|
|
24
25
|
cellRender?: FunctionProp<TemplateRef<Date> | string>;
|
|
25
26
|
fullCellRender?: FunctionProp<TemplateRef<Date> | string>;
|
|
@@ -37,5 +38,5 @@ export declare abstract class CalendarTable implements OnInit, OnChanges {
|
|
|
37
38
|
private isDateRealChange;
|
|
38
39
|
private isSameDate;
|
|
39
40
|
static ɵfac: i0.ɵɵFactoryDeclaration<CalendarTable, never>;
|
|
40
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<CalendarTable, never, never, { "prefixCls": { "alias": "prefixCls"; "required": false; }; "value": { "alias": "value"; "required": false; }; "activeDate": { "alias": "activeDate"; "required": false; }; "showWeek": { "alias": "showWeek"; "required": false; }; "selectedValue": { "alias": "selectedValue"; "required": false; }; "hoverValue": { "alias": "hoverValue"; "required": false; }; "disabledDate": { "alias": "disabledDate"; "required": false; }; "cellRender": { "alias": "cellRender"; "required": false; }; "fullCellRender": { "alias": "fullCellRender"; "required": false; }; }, { "valueChange": "valueChange"; "cellHover": "cellHover"; }, never, never, false, never>;
|
|
41
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<CalendarTable, never, never, { "prefixCls": { "alias": "prefixCls"; "required": false; }; "value": { "alias": "value"; "required": false; }; "activeDate": { "alias": "activeDate"; "required": false; }; "showWeek": { "alias": "showWeek"; "required": false; }; "selectedValue": { "alias": "selectedValue"; "required": false; }; "hoverValue": { "alias": "hoverValue"; "required": false; }; "timeZone": { "alias": "timeZone"; "required": false; }; "disabledDate": { "alias": "disabledDate"; "required": false; }; "cellRender": { "alias": "cellRender"; "required": false; }; "fullCellRender": { "alias": "fullCellRender"; "required": false; }; }, { "valueChange": "valueChange"; "cellHover": "cellHover"; }, never, never, false, never>;
|
|
41
42
|
}
|
|
@@ -37,6 +37,7 @@ export declare class DatePopup implements OnChanges, OnInit {
|
|
|
37
37
|
flexible: boolean;
|
|
38
38
|
flexibleDateGranularity: ThyDateGranularity;
|
|
39
39
|
timestampPrecision: 'seconds' | 'milliseconds';
|
|
40
|
+
timeZone: string;
|
|
40
41
|
readonly panelModeChange: EventEmitter<ThyPanelMode | ThyPanelMode[]>;
|
|
41
42
|
readonly calendarChange: EventEmitter<CompatibleValue>;
|
|
42
43
|
readonly valueChange: EventEmitter<CompatibleValue | RangeAdvancedValue>;
|
|
@@ -94,5 +95,5 @@ export declare class DatePopup implements OnChanges, OnInit {
|
|
|
94
95
|
shortcutSetValue(shortcutPresets: ThyShortcutPreset): void;
|
|
95
96
|
private createInZoneTime;
|
|
96
97
|
static ɵfac: i0.ɵɵFactoryDeclaration<DatePopup, never>;
|
|
97
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<DatePopup, "date-popup", ["datePopup"], { "isRange": { "alias": "isRange"; "required": false; }; "showWeek": { "alias": "showWeek"; "required": false; }; "format": { "alias": "format"; "required": false; }; "disabledDate": { "alias": "disabledDate"; "required": false; }; "minDate": { "alias": "minDate"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; "showToday": { "alias": "showToday"; "required": false; }; "showTime": { "alias": "showTime"; "required": false; }; "mustShowTime": { "alias": "mustShowTime"; "required": false; }; "dateRender": { "alias": "dateRender"; "required": false; }; "className": { "alias": "className"; "required": false; }; "panelMode": { "alias": "panelMode"; "required": false; }; "value": { "alias": "value"; "required": false; }; "defaultPickerValue": { "alias": "defaultPickerValue"; "required": false; }; "showShortcut": { "alias": "showShortcut"; "required": false; }; "shortcutPresets": { "alias": "shortcutPresets"; "required": false; }; "shortcutPosition": { "alias": "shortcutPosition"; "required": false; }; "flexible": { "alias": "flexible"; "required": false; }; "flexibleDateGranularity": { "alias": "flexibleDateGranularity"; "required": false; }; "timestampPrecision": { "alias": "timestampPrecision"; "required": false; }; }, { "panelModeChange": "panelModeChange"; "calendarChange": "calendarChange"; "valueChange": "valueChange"; "resultOk": "resultOk"; "showTimePickerChange": "showTimePickerChange"; "dateValueChange": "dateValueChange"; }, never, never, true, never>;
|
|
98
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DatePopup, "date-popup", ["datePopup"], { "isRange": { "alias": "isRange"; "required": false; }; "showWeek": { "alias": "showWeek"; "required": false; }; "format": { "alias": "format"; "required": false; }; "disabledDate": { "alias": "disabledDate"; "required": false; }; "minDate": { "alias": "minDate"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; "showToday": { "alias": "showToday"; "required": false; }; "showTime": { "alias": "showTime"; "required": false; }; "mustShowTime": { "alias": "mustShowTime"; "required": false; }; "dateRender": { "alias": "dateRender"; "required": false; }; "className": { "alias": "className"; "required": false; }; "panelMode": { "alias": "panelMode"; "required": false; }; "value": { "alias": "value"; "required": false; }; "defaultPickerValue": { "alias": "defaultPickerValue"; "required": false; }; "showShortcut": { "alias": "showShortcut"; "required": false; }; "shortcutPresets": { "alias": "shortcutPresets"; "required": false; }; "shortcutPosition": { "alias": "shortcutPosition"; "required": false; }; "flexible": { "alias": "flexible"; "required": false; }; "flexibleDateGranularity": { "alias": "flexibleDateGranularity"; "required": false; }; "timestampPrecision": { "alias": "timestampPrecision"; "required": false; }; "timeZone": { "alias": "timeZone"; "required": false; }; }, { "panelModeChange": "panelModeChange"; "calendarChange": "calendarChange"; "valueChange": "valueChange"; "resultOk": "resultOk"; "showTimePickerChange": "showTimePickerChange"; "dateValueChange": "dateValueChange"; }, never, never, true, never>;
|
|
98
99
|
}
|
|
@@ -23,6 +23,7 @@ export declare class InnerPopup implements OnChanges {
|
|
|
23
23
|
selectedValue: TinyDate[];
|
|
24
24
|
hoverValue: TinyDate[];
|
|
25
25
|
panelMode: ThyPanelMode;
|
|
26
|
+
timeZone: string;
|
|
26
27
|
set showDateRangeInput(value: boolean);
|
|
27
28
|
get showDateRangeInput(): boolean;
|
|
28
29
|
partType: RangePartType;
|
|
@@ -43,6 +44,6 @@ export declare class InnerPopup implements OnChanges {
|
|
|
43
44
|
enablePrevNext(direction: 'prev' | 'next', mode: ThyPanelMode): boolean;
|
|
44
45
|
enableSuperPrevNext(direction: 'prev' | 'next', panelMode: ThyPanelMode): boolean;
|
|
45
46
|
static ɵfac: i0.ɵɵFactoryDeclaration<InnerPopup, never>;
|
|
46
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<InnerPopup, "inner-popup", ["innerPopup"], { "showWeek": { "alias": "showWeek"; "required": false; }; "isRange": { "alias": "isRange"; "required": false; }; "activeDate": { "alias": "activeDate"; "required": false; }; "rangeActiveDate": { "alias": "rangeActiveDate"; "required": false; }; "enablePrev": { "alias": "enablePrev"; "required": false; }; "enableNext": { "alias": "enableNext"; "required": false; }; "disabledDate": { "alias": "disabledDate"; "required": false; }; "dateRender": { "alias": "dateRender"; "required": false; }; "selectedValue": { "alias": "selectedValue"; "required": false; }; "hoverValue": { "alias": "hoverValue"; "required": false; }; "panelMode": { "alias": "panelMode"; "required": false; }; "showDateRangeInput": { "alias": "showDateRangeInput"; "required": false; }; "partType": { "alias": "partType"; "required": false; }; "endPanelMode": { "alias": "endPanelMode"; "required": false; }; "value": { "alias": "value"; "required": false; }; }, { "panelModeChange": "panelModeChange"; "headerChange": "headerChange"; "selectDate": "selectDate"; "dayHover": "dayHover"; }, never, never, true, never>;
|
|
47
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<InnerPopup, "inner-popup", ["innerPopup"], { "showWeek": { "alias": "showWeek"; "required": false; }; "isRange": { "alias": "isRange"; "required": false; }; "activeDate": { "alias": "activeDate"; "required": false; }; "rangeActiveDate": { "alias": "rangeActiveDate"; "required": false; }; "enablePrev": { "alias": "enablePrev"; "required": false; }; "enableNext": { "alias": "enableNext"; "required": false; }; "disabledDate": { "alias": "disabledDate"; "required": false; }; "dateRender": { "alias": "dateRender"; "required": false; }; "selectedValue": { "alias": "selectedValue"; "required": false; }; "hoverValue": { "alias": "hoverValue"; "required": false; }; "panelMode": { "alias": "panelMode"; "required": false; }; "timeZone": { "alias": "timeZone"; "required": false; }; "showDateRangeInput": { "alias": "showDateRangeInput"; "required": false; }; "partType": { "alias": "partType"; "required": false; }; "endPanelMode": { "alias": "endPanelMode"; "required": false; }; "value": { "alias": "value"; "required": false; }; }, { "panelModeChange": "panelModeChange"; "headerChange": "headerChange"; "selectDate": "selectDate"; "dayHover": "dayHover"; }, never, never, true, never>;
|
|
47
48
|
static ngAcceptInputType_showDateRangeInput: boolean | string | number;
|
|
48
49
|
}
|
|
@@ -27,6 +27,7 @@ export declare class ThyPicker implements OnChanges, AfterViewInit {
|
|
|
27
27
|
mode: string;
|
|
28
28
|
hasBackdrop: boolean;
|
|
29
29
|
separator: string;
|
|
30
|
+
timeZone: string;
|
|
30
31
|
blur: EventEmitter<Event>;
|
|
31
32
|
readonly valueChange: EventEmitter<TinyDate | TinyDate[]>;
|
|
32
33
|
readonly openChange: EventEmitter<boolean>;
|
|
@@ -74,6 +75,6 @@ export declare class ThyPicker implements OnChanges, AfterViewInit {
|
|
|
74
75
|
getPlaceholder(): string;
|
|
75
76
|
private updateReadableDate;
|
|
76
77
|
static ɵfac: i0.ɵɵFactoryDeclaration<ThyPicker, never>;
|
|
77
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ThyPicker, "thy-picker", ["thyPicker"], { "isRange": { "alias": "isRange"; "required": false; }; "open": { "alias": "open"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "allowClear": { "alias": "allowClear"; "required": false; }; "autoFocus": { "alias": "autoFocus"; "required": false; }; "className": { "alias": "className"; "required": false; }; "size": { "alias": "size"; "required": false; }; "suffixIcon": { "alias": "suffixIcon"; "required": false; }; "placement": { "alias": "placement"; "required": false; }; "flexible": { "alias": "flexible"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "hasBackdrop": { "alias": "hasBackdrop"; "required": false; }; "separator": { "alias": "separator"; "required": false; }; "format": { "alias": "format"; "required": false; }; "flexibleDateGranularity": { "alias": "flexibleDateGranularity"; "required": false; }; "value": { "alias": "value"; "required": false; }; }, { "blur": "blur"; "valueChange": "valueChange"; "openChange": "openChange"; "inputChange": "inputChange"; }, never, ["*"], true, never>;
|
|
78
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ThyPicker, "thy-picker", ["thyPicker"], { "isRange": { "alias": "isRange"; "required": false; }; "open": { "alias": "open"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "allowClear": { "alias": "allowClear"; "required": false; }; "autoFocus": { "alias": "autoFocus"; "required": false; }; "className": { "alias": "className"; "required": false; }; "size": { "alias": "size"; "required": false; }; "suffixIcon": { "alias": "suffixIcon"; "required": false; }; "placement": { "alias": "placement"; "required": false; }; "flexible": { "alias": "flexible"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "hasBackdrop": { "alias": "hasBackdrop"; "required": false; }; "separator": { "alias": "separator"; "required": false; }; "timeZone": { "alias": "timeZone"; "required": false; }; "format": { "alias": "format"; "required": false; }; "flexibleDateGranularity": { "alias": "flexibleDateGranularity"; "required": false; }; "value": { "alias": "value"; "required": false; }; }, { "blur": "blur"; "valueChange": "valueChange"; "openChange": "openChange"; "inputChange": "inputChange"; }, never, ["*"], true, never>;
|
|
78
79
|
static ngAcceptInputType_hasBackdrop: boolean | string | number;
|
|
79
80
|
}
|
|
@@ -12,7 +12,7 @@ export declare function transformDateValue(value: CompatibleDate | CompatibleVal
|
|
|
12
12
|
export declare function getFlexibleAdvancedReadableValue(tinyDates: TinyDate[], flexibleDateGranularity: ThyDateGranularity, separator: string, locale: Signal<ThyI18nLocale>): string;
|
|
13
13
|
export declare function convertDate(date: Date | number | TinyDate): Date;
|
|
14
14
|
export declare function hasValue(value: CompatibleValue): boolean;
|
|
15
|
-
export declare function makeValue(value: CompatibleDate | null, isRange?: boolean): CompatibleValue;
|
|
15
|
+
export declare function makeValue(value: CompatibleDate | null, isRange?: boolean, timeZone?: string): CompatibleValue;
|
|
16
16
|
export declare function dateAddAmount(value: TinyDate, amount: number, mode: ThyPanelMode): TinyDate;
|
|
17
17
|
export declare function isAfterMoreThanOneMonth(rightDate: TinyDate, leftDate: TinyDate): boolean;
|
|
18
18
|
export declare function isAfterMoreThanLessOneYear(rightDate: TinyDate, leftDate: TinyDate): boolean;
|
|
@@ -24,7 +24,7 @@ export declare function instanceOfCompatibleValue(object: CompatibleValue): obje
|
|
|
24
24
|
export declare function instanceOfRangeAdvancedValue(object: RangeAdvancedValue): object is RangeAdvancedValue;
|
|
25
25
|
export declare function isSupportDateType(object: DateEntry | ThyDateRangeEntry, key: string): boolean;
|
|
26
26
|
export declare function getShortcutValue(value: ThyShortcutValue): number | Date;
|
|
27
|
-
export declare function isValidStringDate(dateStr: string): boolean;
|
|
28
|
-
export declare function parseStringDate(dateStr: string): TinyDate;
|
|
29
|
-
export declare function hasTimeInStringDate(dateStr: string): boolean;
|
|
30
|
-
export declare function setValueByTimestampPrecision(date: CompatibleDate | number | Date | DateEntry | ThyDateRangeEntry | SafeAny, isRange: boolean, timestampPrecision: 'seconds' | 'milliseconds'): number | number[];
|
|
27
|
+
export declare function isValidStringDate(dateStr: string, timeZone?: string): boolean;
|
|
28
|
+
export declare function parseStringDate(dateStr: string, timeZone?: string): TinyDate;
|
|
29
|
+
export declare function hasTimeInStringDate(dateStr: string, timeZone?: string): boolean;
|
|
30
|
+
export declare function setValueByTimestampPrecision(date: CompatibleDate | number | Date | DateEntry | ThyDateRangeEntry | SafeAny, isRange: boolean, timestampPrecision: 'seconds' | 'milliseconds', timeZone?: string): number | number[];
|
|
@@ -601,7 +601,7 @@ export class ThyCascader extends TabIndexDisabledControlValueAccessorMixin {
|
|
|
601
601
|
this.ngZone.runOutsideAngular(() => {
|
|
602
602
|
this.resizeSubscription = new Observable(observer => {
|
|
603
603
|
const resize = new ResizeObserver((entries) => {
|
|
604
|
-
observer.next();
|
|
604
|
+
observer.next(entries);
|
|
605
605
|
});
|
|
606
606
|
resize.observe(this.trigger.nativeElement);
|
|
607
607
|
}).subscribe(() => {
|
|
@@ -765,4 +765,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
765
765
|
type: HostListener,
|
|
766
766
|
args: ['mouseleave', ['$event']]
|
|
767
767
|
}] } });
|
|
768
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzY2FkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2Nhc2NhZGVyL2Nhc2NhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9jYXNjYWRlci9jYXNjYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQTBELE1BQU0sc0JBQXNCLENBQUM7QUFDckksT0FBTyxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RixPQUFPLEVBRUgsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixlQUFlLEVBSWYsTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEVBRVQsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUVULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEQsT0FBTyxFQUNILDJCQUEyQixFQUMzQixtQkFBbUIsRUFDbkIsZUFBZSxFQUNmLHlDQUF5QyxFQUN6QyxrQkFBa0IsRUFDbEIsb0JBQW9CLEVBQ3ZCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQXVDLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFMUYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFB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QUFDLFlBQVksRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFVL0IsZ0JBQWdCO3NCQUR0QixZQUFZO3VCQUFDLFlBQVksRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka0Nvbm5lY3RlZE92ZXJsYXksIENka092ZXJsYXlPcmlnaW4sIENvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbkNoYW5nZSwgQ29ubmVjdGlvblBvc2l0aW9uUGFpciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyLCBOZ0NsYXNzLCBOZ1N0eWxlLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIG51bWJlckF0dHJpYnV0ZSxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgUExBVEZPUk1fSUQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBpbmplY3QsXG4gICAgU2lnbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgdXNlSG9zdFJlbmRlcmVyIH0gZnJvbSAnQHRldGh5cy9jZGsvZG9tJztcbmltcG9ydCB7XG4gICAgRVhQQU5ERURfRFJPUERPV05fUE9TSVRJT05TLFxuICAgIERlYm91bmNlVGltZVdyYXBwZXIsXG4gICAgU2Nyb2xsVG9TZXJ2aWNlLFxuICAgIFRhYkluZGV4RGlzYWJsZWRDb250cm9sVmFsdWVBY2Nlc3Nvck1peGluLFxuICAgIFRoeUNsaWNrRGlzcGF0Y2hlcixcbiAgICBpbmplY3RQYW5lbEVtcHR5SWNvblxufSBmcm9tICduZ3gtdGV0aHlzL2NvcmUnO1xuaW1wb3J0IHsgVGh5RW1wdHkgfSBmcm9tICduZ3gtdGV0aHlzL2VtcHR5JztcbmltcG9ydCB7IFRoeUljb24gfSBmcm9tICduZ3gtdGV0aHlzL2ljb24nO1xuaW1wb3J0IHsgU2VsZWN0Q29udHJvbFNpemUsIFNlbGVjdE9wdGlvbkJhc2UsIFRoeVNlbGVjdENvbnRyb2wgfSBmcm9tICduZ3gtdGV0aHlzL3NoYXJlZCc7XG5pbXBvcnQgeyBTYWZlQW55IH0gZnJvbSAnbmd4LXRldGh5cy90eXBlcyc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHksIGVsZW1lbnRNYXRjaENsb3Nlc3QsIGlzRW1wdHkgfSBmcm9tICduZ3gtdGV0aHlzL3V0aWwnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgc2NhbGVZTW90aW9uIH0gZnJvbSAnbmd4LXRldGh5cy9jb3JlJztcbmltcG9ydCB7IFRoeURpdmlkZXIgfSBmcm9tICduZ3gtdGV0aHlzL2RpdmlkZXInO1xuaW1wb3J0IHsgVGh5Q2FzY2FkZXJPcHRpb25Db21wb25lbnQgfSBmcm9tICcuL2Nhc2NhZGVyLWxpLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaHlDYXNjYWRlclNlYXJjaE9wdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vY2FzY2FkZXItc2VhcmNoLW9wdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGh5Q2FzY2FkZXJTZXJ2aWNlIH0gZnJvbSAnLi9jYXNjYWRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFRoeUNhc2NhZGVyRXhwYW5kVHJpZ2dlciwgVGh5Q2FzY2FkZXJPcHRpb24sIFRoeUNhc2NhZGVyU2VhcmNoT3B0aW9uLCBUaHlDYXNjYWRlclRyaWdnZXJUeXBlIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBpbmplY3RMb2NhbGUsIFRoeUNhc2NhZGVyTG9jYWxlIH0gZnJvbSAnbmd4LXRldGh5cy9pMThuJztcblxuLyoqXG4gKiDnuqfogZTpgInmi6noj5zljZVcbiAqIEBuYW1lIHRoeS1jYXNjYWRlclxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RoeS1jYXNjYWRlcixbdGh5LWNhc2NhZGVyXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Nhc2NhZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUaHlDYXNjYWRlciksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBUaHlDYXNjYWRlclNlcnZpY2VcbiAgICBdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1thdHRyLnRhYmluZGV4XSc6IGB0YWJJbmRleGAsXG4gICAgICAgICcoZm9jdXMpJzogJ29uRm9jdXMoJGV2ZW50KScsXG4gICAgICAgICcoYmx1ciknOiAnb25CbHVyKCRldmVudCknXG4gICAgfSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ2RrT3ZlcmxheU9yaWdpbixcbiAgICAgICAgVGh5U2VsZWN0Q29udHJvbCxcbiAgICAgICAgTmdDbGFzcyxcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgQ2RrQ29ubmVjdGVkT3ZlcmxheSxcbiAgICAgICAgTmdTdHlsZSxcbiAgICAgICAgVGh5Q2FzY2FkZXJPcHRpb25Db21wb25lbnQsXG4gICAgICAgIFRoeUNhc2NhZGVyU2VhcmNoT3B0aW9uQ29tcG9uZW50LFxuICAgICAgICBUaHlFbXB0eSxcbiAgICAgICAgVGh5SWNvbixcbiAgICAgICAgVGh5RGl2aWRlclxuICAgIF0sXG4gICAgYW5pbWF0aW9uczogW3NjYWxlWU1vdGlvbl1cbn0pXG5leHBvcnQgY2xhc3MgVGh5Q2FzY2FkZXJcbiAgICBleHRlbmRzIFRhYkluZGV4RGlzYWJsZWRDb250cm9sVmFsdWVBY2Nlc3Nvck1peGluXG4gICAgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQWZ0ZXJDb250ZW50SW5pdFxue1xuICAgIHByaXZhdGUgcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCk7XG4gICAgcHJpdmF0ZSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAgIGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gICAgcHJpdmF0ZSB0aHlDbGlja0Rpc3BhdGNoZXIgPSBpbmplY3QoVGh5Q2xpY2tEaXNwYXRjaGVyKTtcbiAgICBwcml2YXRlIG5nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xuICAgIHRoeUNhc2NhZGVyU2VydmljZSA9IGluamVjdChUaHlDYXNjYWRlclNlcnZpY2UpO1xuICAgIHByaXZhdGUgbG9jYWxlOiBTaWduYWw8VGh5Q2FzY2FkZXJMb2NhbGU+ID0gaW5qZWN0TG9jYWxlKCdjYXNjYWRlcicpO1xuICAgIGVtcHR5SWNvbjogU2lnbmFsPHN0cmluZz4gPSBpbmplY3RQYW5lbEVtcHR5SWNvbigpO1xuXG4gICAgLyoqXG4gICAgICog6YCJ6aG555qE5a6e6ZmF5YC855qE5bGe5oCn5ZCNXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5VmFsdWVQcm9wZXJ0eSA9ICd2YWx1ZSc7XG5cbiAgICAvKipcbiAgICAgKiDpgInpobnnmoTmmL7npLrlgLznmoTlsZ7mgKflkI1cbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlMYWJlbFByb3BlcnR5ID0gJ2xhYmVsJztcblxuICAgIC8qKlxuICAgICAqIOaPj+i/sOi+k+WFpeWtl+autemihOacn+WAvOeahOeugOefreeahOaPkOekuuS/oeaBr1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeVBsYWNlaG9sZGVyID0gdGhpcy5sb2NhbGUoKS5wbGFjZWhvbGRlcjtcblxuICAgIC8qKlxuICAgICAqIOaOp+WItuWkp+Wwj++8iDXnp43vvIlcbiAgICAgKiBAdHlwZSAneHMnIO+9nCAnc20nIHwgJ21kJyB8ICdsZycgfCAnJ1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeVNpemU6IFNlbGVjdENvbnRyb2xTaXplID0gJyc7XG5cbiAgICAvKipcbiAgICAgKiDmlbDmja7poblcbiAgICAgKiBAdHlwZSBUaHlDYXNjYWRlck9wdGlvbltdXG4gICAgICogQGRlZmF1bHQgW11cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlPcHRpb25zKG9wdGlvbnM6IFRoeUNhc2NhZGVyT3B0aW9uW10gfCBudWxsKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSBvcHRpb25zICYmIG9wdGlvbnMubGVuZ3RoID8gW29wdGlvbnNdIDogW107XG4gICAgICAgIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLmluaXRDb2x1bW5zKGNvbHVtbnMpO1xuICAgICAgICBpZiAodGhpcy50aHlDYXNjYWRlclNlcnZpY2UuZGVmYXVsdFZhbHVlICYmIGNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5pbml0T3B0aW9ucygwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiHquWumuS5iemAiemhuVxuICAgICAqIEB0eXBlIFRoeUNhc2NhZGVyT3B0aW9uW11cbiAgICAgKiBAZGVmYXVsdCBbXVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHNldCB0aHlDdXN0b21PcHRpb25zKG9wdGlvbnM6IFRoeUNhc2NhZGVyT3B0aW9uW10gfCBudWxsKSB7XG4gICAgICAgIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLmN1c3RvbU9wdGlvbnMgPSAob3B0aW9ucyB8fCBbXSkubWFwKGl0ZW0gPT4gKHsgLi4uaXRlbSB9KSk7XG4gICAgfVxuXG4gICAgZ2V0IHRoeUN1c3RvbU9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5jdXN0b21PcHRpb25zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOeCueWHu+eItue6p+iPnOWNlemAiemhueaXtu+8jOWPr+mAmui/h+ivpeWHveaVsOWIpOaWreaYr+WQpuWFgeiuuOWAvOeahOWPmOWMllxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeUNoYW5nZU9uOiAob3B0aW9uOiBUaHlDYXNjYWRlck9wdGlvbiwgbGV2ZWw6IG51bWJlcikgPT4gYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIOeCueWHu+mhueaXtu+8jOihqOWNleaYr+WQpuWKqOaAgeWxleekuuaVsOaNrumhuVxuICAgICAqIEB0eXBlIGJvb2xlYW5cbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KSB0aHlDaGFuZ2VPblNlbGVjdCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog5pi+56S66L6T5YWl5qGGXG4gICAgICogQHR5cGUgYm9vbGVhblxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pIHRoeVNob3dJbnB1dCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiDnlKjmiLfoh6rlrprkuYnpgInpobnmqKHmnb9cbiAgICAgKiBAdHlwZSBUZW1wbGF0ZVJlZlxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeU9wdGlvblJlbmRlcjogVGVtcGxhdGVSZWY8U2FmZUFueT47XG5cbiAgICAvKipcbiAgICAgKiDnlKjmiLfoh6rlrprkuYnmqKHmnb9cbiAgICAgKiBAdHlwZSBUZW1wbGF0ZVJlZlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUxhYmVsUmVuZGVyKHZhbHVlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgICAgIHRoaXMubGFiZWxSZW5kZXJUcGwgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5pc0xhYmVsUmVuZGVyVGVtcGxhdGUgPSB2YWx1ZSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmO1xuICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5zZXRDYXNjYWRlck9wdGlvbnMoeyBpc0xhYmVsUmVuZGVyVGVtcGxhdGU6IHRoaXMuaXNMYWJlbFJlbmRlclRlbXBsYXRlIH0pO1xuICAgIH1cblxuICAgIGdldCB0aHlMYWJlbFJlbmRlcigpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGFiZWxSZW5kZXJUcGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog55So5LqO5Yqo5oCB5Yqg6L296YCJ6aG5XG4gICAgICovXG4gICAgQElucHV0KCkgc2V0IHRoeUxvYWREYXRhKHZhbHVlOiAobm9kZTogVGh5Q2FzY2FkZXJPcHRpb24sIGluZGV4PzogbnVtYmVyKSA9PiBQcm9taXNlTGlrZTxhbnk+KSB7XG4gICAgICAgIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLnNldENhc2NhZGVyT3B0aW9ucyh7IGxvYWREYXRhOiB2YWx1ZSB9KTtcbiAgICB9XG5cbiAgICBnZXQgdGh5TG9hZERhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRoeUNhc2NhZGVyU2VydmljZT8uY2FzY2FkZXJPcHRpb25zPy5sb2FkRGF0YTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmjqfliLbop6blj5HnirbmgIEsIOaUr+aMgSBgY2xpY2tgIHwgYGhvdmVyYFxuICAgICAqIEB0eXBlIFRoeUNhc2NhZGVyVHJpZ2dlclR5cGUgfCBUaHlDYXNjYWRlclRyaWdnZXJUeXBlW11cbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlUcmlnZ2VyQWN0aW9uOiBUaHlDYXNjYWRlclRyaWdnZXJUeXBlIHwgVGh5Q2FzY2FkZXJUcmlnZ2VyVHlwZVtdID0gWydjbGljayddO1xuXG4gICAgLyoqXG4gICAgICog6byg5qCH57uP6L+H5LiL5pa55YiX6KGo6aG55pe277yM5piv5ZCm6Ieq5Yqo5bGV5byA5YiX6KGo77yM5pSv5oyBIGBjbGlja2AgfCBgaG92ZXJgXG4gICAgICogQHR5cGUgVGh5Q2FzY2FkZXJFeHBhbmRUcmlnZ2VyIHwgVGh5Q2FzY2FkZXJFeHBhbmRUcmlnZ2VyW11cbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlFeHBhbmRUcmlnZ2VyQWN0aW9uOiBUaHlDYXNjYWRlckV4cGFuZFRyaWdnZXIgfCBUaHlDYXNjYWRlckV4cGFuZFRyaWdnZXJbXSA9IFsnY2xpY2snXTtcblxuICAgIC8qKlxuICAgICAqIOiHquWumuS5iea1ruWxguagt+W8j1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeU1lbnVTdHlsZTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAgIC8qKlxuICAgICAqIOiHquWumuS5ieaQnOe0ouagt+W8j1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeVNlYXJjaExpc3RTdHlsZTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAgIC8qKlxuICAgICAqIOiHquWumuS5iea1ruWxguexu+WQjVxuICAgICAqIEB0eXBlIHN0cmluZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeU1lbnVDbGFzc05hbWUodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLm1lbnVDbGFzc05hbWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zZXRNZW51Q2xhc3MoKTtcbiAgICB9XG5cbiAgICBnZXQgdGh5TWVudUNsYXNzTmFtZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5tZW51Q2xhc3NOYW1lO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiHquWumuS5iea1ruWxguWIl+exu+WQjVxuICAgICAqIEB0eXBlIHN0cmluZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUNvbHVtbkNsYXNzTmFtZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuY29sdW1uQ2xhc3NOYW1lID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2V0TWVudUNsYXNzKCk7XG4gICAgfVxuXG4gICAgZ2V0IHRoeUNvbHVtbkNsYXNzTmFtZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5DbGFzc05hbWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5Y+q6K+7XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KVxuICAgIG92ZXJyaWRlIHNldCB0aHlEaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gdmFsdWU7XG4gICAgfVxuICAgIG92ZXJyaWRlIGdldCB0aHlEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOepuueKtuaAgeS4i+eahOWxleekuuaWh+Wtl1xuICAgICAqIEBkZWZhdWx0IOaaguaXoOWPr+mAiemhuVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUVtcHR5U3RhdGVUZXh0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5lbXB0eVN0YXRlVGV4dCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuWkmumAiVxuICAgICAqIEB0eXBlIGJvb2xlYW5cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pXG4gICAgc2V0IHRoeU11bHRpcGxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuaXNNdWx0aXBsZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5zZXRDYXNjYWRlck9wdGlvbnMoeyBpc011bHRpcGxlOiB2YWx1ZSB9KTtcbiAgICB9XG5cbiAgICBnZXQgdGh5TXVsdGlwbGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTXVsdGlwbGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5aSa6YCJ5pe25pyA5aSn5pi+56S655qE5qCH562+5pWw6YeP77yMMCDooajnpLrkuI3pmZDliLZcbiAgICAgKiBAdHlwZSBudW1iZXJcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSB0aHlNYXhUYWdDb3VudCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKbku4XlhYHorrjpgInmi6nlj7blrZDpoblcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSlcbiAgICB0aHlJc09ubHlTZWxlY3RMZWFmID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIOWIneWni+WMluaXtu+8jOaYr+WQpuWxleW8gOmdouadv1xuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSkgdGh5QXV0b0V4cGFuZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuaUr+aMgeaQnOe0olxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSkgdGh5U2hvd1NlYXJjaDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog5aSa6YCJ6YCJ5Lit6aG555qE5bGV56S65pa55byP77yM6buY6K6k5Li656m677yM5riy5p+T5paH5a2X5qih5p2/77yM5Lyg5YWldGFn77yM5riy5p+T5bGV56S65qih5p2/LFxuICAgICAqIEBkZWZhdWx0ICcn772cdGFnXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5UHJlc2V0OiBzdHJpbmcgPSAnJztcblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuacieW5leW4g1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pIHRoeUhhc0JhY2tkcm9wID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIOWAvOWPkeeUn+WPmOWMluaXtuinpuWPke+8jOi/lOWbnumAieaLqemhueeahOWAvFxuICAgICAqIEB0eXBlIEV2ZW50RW1pdHRlcjxhbnlbXT5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcblxuICAgIC8qKlxuICAgICAqIOWAvOWPkeeUn+WPmOWMluaXtuinpuWPke+8jOi/lOWbnumAieaLqemhueWIl+ihqFxuICAgICAqIEB0eXBlIEV2ZW50RW1pdHRlcjxUaHlDYXNjYWRlck9wdGlvbltdPlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlTZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRoeUNhc2NhZGVyT3B0aW9uW10+KCk7XG5cbiAgICAvKipcbiAgICAgKiDpgInmi6npgInpobnml7bop6blj5FcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5U2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgICAgIG9wdGlvbjogVGh5Q2FzY2FkZXJPcHRpb247XG4gICAgICAgIGluZGV4OiBudW1iZXI7XG4gICAgfT4oKTtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlIOaaguaXoOWunueOsFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlEZXNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgICAgICBvcHRpb246IFRoeUNhc2NhZGVyT3B0aW9uO1xuICAgICAgICBpbmRleDogbnVtYmVyO1xuICAgIH0+KCk7XG5cbiAgICAvKipcbiAgICAgKiDmuIXnqbrpgInpobnml7bop6blj5FcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5Q2xlYXIgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDkuIvmi4npgInpobnlsZXlvIDlkozmipjlj6DnirbmgIHkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5RXhwYW5kU3RhdHVzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICBAVmlld0NoaWxkcmVuKCdjYXNjYWRlck9wdGlvbnMnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgY2FzY2FkZXJPcHRpb25zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cbiAgICBAVmlld0NoaWxkcmVuKCdjYXNjYWRlck9wdGlvbkNvbnRhaW5lcnMnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgY2FzY2FkZXJPcHRpb25Db250YWluZXJzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cbiAgICBAVmlld0NoaWxkKENka0Nvbm5lY3RlZE92ZXJsYXksIHsgc3RhdGljOiB0cnVlIH0pIGNka0Nvbm5lY3RlZE92ZXJsYXk6IENka0Nvbm5lY3RlZE92ZXJsYXk7XG5cbiAgICBAVmlld0NoaWxkKCd0cmlnZ2VyJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgdHJpZ2dlcjogRWxlbWVudFJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZCgnaW5wdXQnKSBpbnB1dDogRWxlbWVudFJlZjtcblxuICAgIEBWaWV3Q2hpbGQoJ21lbnUnKSBtZW51OiBFbGVtZW50UmVmO1xuXG4gICAgcHVibGljIGRyb3BEb3duUG9zaXRpb24gPSAnYm90dG9tJztcblxuICAgIHB1YmxpYyBtZW51VmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgcHVibGljIGlzTGFiZWxSZW5kZXJUZW1wbGF0ZSA9IGZhbHNlO1xuXG4gICAgcHVibGljIHRyaWdnZXJSZWN0OiBET01SZWN0O1xuXG4gICAgcHVibGljIGVtcHR5U3RhdGVUZXh0ID0gdGhpcy5sb2NhbGUoKS5lbXB0eTtcblxuICAgIHByaXZhdGUgcHJlZml4Q2xzID0gJ3RoeS1jYXNjYWRlcic7XG5cbiAgICBwcml2YXRlIG1lbnVDbGFzc05hbWU6IHN0cmluZztcblxuICAgIHByaXZhdGUgY29sdW1uQ2xhc3NOYW1lOiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIF9tZW51Q29sdW1uQ2xzOiBhbnk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIHByaXZhdGUgX21lbnVDbHM6IHsgW25hbWU6IHN0cmluZ106IGFueSB9O1xuXG4gICAgcHJpdmF0ZSBfbGFiZWxDbHM6IHsgW25hbWU6IHN0cmluZ106IGFueSB9O1xuXG4gICAgcHJpdmF0ZSBsYWJlbFJlbmRlclRwbDogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIHByaXZhdGUgaG9zdFJlbmRlcmVyID0gdXNlSG9zdFJlbmRlcmVyKCk7XG5cbiAgICBwdWJsaWMgcG9zaXRpb25zOiBDb25uZWN0aW9uUG9zaXRpb25QYWlyW107XG5cbiAgICBnZXQgc2VsZWN0ZWQoKTogU2VsZWN0T3B0aW9uQmFzZSB8IFNlbGVjdE9wdGlvbkJhc2VbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRoeU11bHRpcGxlID8gdGhpcy50aHlDYXNjYWRlclNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQgOiB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXTtcbiAgICB9XG4gICAgcHJpdmF0ZSBpc011bHRpcGxlID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgbWVudU1pbldpZHRoID0gMTIyO1xuXG4gICAgcHJpdmF0ZSBzZWFyY2hUZXh0JCA9IG5ldyBCZWhhdmlvclN1YmplY3QoJycpO1xuXG4gICAgcHVibGljIGdldCBzZWFyY2hSZXN1bHRMaXN0KCk6IFRoeUNhc2NhZGVyU2VhcmNoT3B0aW9uW10ge1xuICAgICAgICByZXR1cm4gdGhpcy50aHlDYXNjYWRlclNlcnZpY2Uuc2VhcmNoUmVzdWx0TGlzdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNTaG93U2VhcmNoUGFuZWw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOino+WGs+aQnOe0oiblpJrpgInnmoTmg4XlhrXkuIvvvIzngrnlh7vmkJzntKLpobnkvJrlr7zoh7QgcGFuZWwg6Zeq54OBXG4gICAgICog55Sx5LqO54K55Ye75ZCO77yMdGh5U2VsZWN0ZWRPcHRpb25z5Y+Y5YyW77yM5a+86Ie0IHRoeVNlbGVjdENvbnRyb2xcbiAgICAgKiDlj4jkvJrop6blj5Egc2VhcmNoRmlsdGVyIOWHveaVsO+8jOWNsyByZXNldFNlYXJjaCDkvJrmiafooYxcbiAgICAgKiDkvJrlr7zoh7TmgaLlpI3nuqfogZTnirbmgIHlho3lj5jkuLrmkJzntKLnirbmgIFcbiAgICAgKi9cbiAgICBwcml2YXRlIGlzU2VsZWN0aW5nU2VhcmNoU3RhdGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHB1YmxpYyBnZXQgaXNMb2FkaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50aHlDYXNjYWRlclNlcnZpY2U/LmlzTG9hZGluZztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNvbHVtbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5jb2x1bW5zO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWZ0ZXJDaGFuZ2VGbjogKCkgPT4gdm9pZDtcblxuICAgIHByaXZhdGUgcmVzaXplU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRDbGFzc01hcCgpO1xuICAgICAgICB0aGlzLnNldE1lbnVDbGFzcygpO1xuICAgICAgICB0aGlzLnNldE1lbnVDb2x1bW5DbGFzcygpO1xuICAgICAgICB0aGlzLnNldExhYmVsQ2xhc3MoKTtcbiAgICAgICAgdGhpcy5pbml0UG9zaXRpb24oKTtcbiAgICAgICAgdGhpcy5pbml0U2VhcmNoKCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBsYWJlbFByb3BlcnR5OiB0aGlzLnRoeUxhYmVsUHJvcGVydHksXG4gICAgICAgICAgICB2YWx1ZVByb3BlcnR5OiB0aGlzLnRoeVZhbHVlUHJvcGVydHksXG4gICAgICAgICAgICBpc011bHRpcGxlOiB0aGlzLmlzTXVsdGlwbGUsXG4gICAgICAgICAgICBpc09ubHlTZWxlY3RMZWFmOiB0aGlzLnRoeUlzT25seVNlbGVjdExlYWYsXG4gICAgICAgICAgICBpc0xhYmVsUmVuZGVyVGVtcGxhdGU6IHRoaXMuaXNMYWJlbFJlbmRlclRlbXBsYXRlLFxuICAgICAgICAgICAgbG9hZERhdGE6IHRoaXMudGh5TG9hZERhdGFcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50aHlDYXNjYWRlclNlcnZpY2Uuc2V0Q2FzY2FkZXJPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgICAgIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLmNhc2NhZGVyVmFsdWVDaGFuZ2UoKS5zdWJzY3JpYmUob3B0aW9ucyA9PiB7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuaXNWYWx1ZUVxdWFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZUZuKG9wdGlvbnMudmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmlzU2VsZWN0aW9uTW9kZWxFbXB0eSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRoeUNsZWFyLmVtaXQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy50aHlTZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5zZWxlY3RlZE9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIHRoaXMudGh5Q2hhbmdlLmVtaXQob3B0aW9ucy52YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYWZ0ZXJDaGFuZ2VGbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFmdGVyQ2hhbmdlRm4oKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZnRlckNoYW5nZUZuID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICAgICAgICB0aGlzLnRoeUNsaWNrRGlzcGF0Y2hlclxuICAgICAgICAgICAgICAgIC5jbGlja2VkKDApXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMubWVudT8ubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVudVZpc2libGVcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VNZW51KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICBpZiAodGhpcy50aHlBdXRvRXhwYW5kKSB7XG4gICAgICAgICAgICB0aW1lcigwKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0TWVudVZpc2libGUodHJ1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ3RoeUlzT25seVNlbGVjdExlYWYnXSkge1xuICAgICAgICAgICAgdGhpcy50aHlDYXNjYWRlclNlcnZpY2Uuc2V0Q2FzY2FkZXJPcHRpb25zKHsgaXNPbmx5U2VsZWN0TGVhZjogY2hhbmdlc1sndGh5SXNPbmx5U2VsZWN0TGVhZiddLmN1cnJlbnRWYWx1ZSB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdFBvc2l0aW9uKCkge1xuICAgICAgICBjb25zdCBjYXNjYWRlclBvc2l0aW9uOiBDb25uZWN0aW9uUG9zaXRpb25QYWlyW10gPSBFWFBBTkRFRF9EUk9QRE9XTl9QT1NJVElPTlMubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uaXRlbSB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5wb3NpdGlvbnMgPSBjYXNjYWRlclBvc2l0aW9uO1xuICAgIH1cblxuICAgIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS53cml0ZUNhc2NhZGVyVmFsdWUodmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5pc011bHRpcGxlKSB7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHBvc2l0aW9uQ2hhbmdlKHBvc2l0aW9uOiBDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25DaGFuZ2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBwb3NpdGlvbi5jb25uZWN0aW9uUGFpci5vcmlnaW5ZID09PSAnYm90dG9tJyA/ICdib3R0b20nIDogJ3RvcCc7XG4gICAgICAgIGlmICh0aGlzLmRyb3BEb3duUG9zaXRpb24gIT09IG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmRyb3BEb3duUG9zaXRpb24gPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBpc0FjdGl2YXRlZE9wdGlvbihvcHRpb246IFRoeUNhc2NhZGVyT3B0aW9uLCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5pc0FjdGl2YXRlZE9wdGlvbihvcHRpb24sIGluZGV4KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNIYWxmU2VsZWN0ZWRPcHRpb24ob3B0aW9uOiBUaHlDYXNjYWRlck9wdGlvbiwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50aHlDYXNjYWRlclNlcnZpY2UuaXNIYWxmU2VsZWN0ZWRPcHRpb24ob3B0aW9uLCBpbmRleCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzU2VsZWN0ZWRPcHRpb24ob3B0aW9uOiBUaHlDYXNjYWRlck9wdGlvbiwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50aHlDYXNjYWRlclNlcnZpY2UuaXNTZWxlY3RlZE9wdGlvbihvcHRpb24sIGluZGV4KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXR0YWNoZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5jZGtDb25uZWN0ZWRPdmVybGF5LnBvc2l0aW9uQ2hhbmdlLnBpcGUodGFrZSgxKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxBY3RpdmVFbGVtZW50SW50b1ZpZXcoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzY3JvbGxBY3RpdmVFbGVtZW50SW50b1ZpZXcoKSB7XG4gICAgICAgIGlmICghaXNFbXB0eSh0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5zZWxlY3RlZE9wdGlvbnMpKSB7XG4gICAgICAgICAgICBjb25zdCBhY3RpdmVPcHRpb25zID0gdGhpcy5jYXNjYWRlck9wdGlvbnNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygndGh5LWNhc2NhZGVyLW1lbnUtaXRlbS1hY3RpdmUnKSlcbiAgICAgICAgICAgICAgICAvLyBmb3IgbXVsdGlwbGUgbW9kZVxuICAgICAgICAgICAgICAgIC5zbGljZSgtdGhpcy5jYXNjYWRlck9wdGlvbkNvbnRhaW5lcnMubGVuZ3RoKTtcblxuICAgICAgICAgICAgdGhpcy5jYXNjYWRlck9wdGlvbkNvbnRhaW5lcnMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPD0gYWN0aXZlT3B0aW9ucy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIFNjcm9sbFRvU2VydmljZS5zY3JvbGxUb0VsZW1lbnQoYWN0aXZlT3B0aW9uc1tpbmRleF0ubmF0aXZlRWxlbWVudCwgaXRlbS5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldE1lbnVWaXNpYmxlKG1lbnVWaXNpYmxlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm1lbnVWaXNpYmxlICE9PSBtZW51VmlzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy5tZW51VmlzaWJsZSA9IG1lbnVWaXNpYmxlO1xuXG4gICAgICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5pbml0QWN0aXZhdGVkT3B0aW9ucyh0aGlzLm1lbnVWaXNpYmxlKTtcbiAgICAgICAgICAgIHRoaXMuc2V0Q2xhc3NNYXAoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0TWVudUNsYXNzKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5tZW51VmlzaWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlclJlY3QgPSB0aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmliZVRyaWdnZXJSZXNpemUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZVRyaWdnZXJSZXNpemUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudGh5RXhwYW5kU3RhdHVzQ2hhbmdlLmVtaXQobWVudVZpc2libGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtZW51Q2xzKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZW51Q2xzO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0TWVudUNsYXNzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9tZW51Q2xzID0ge1xuICAgICAgICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1tZW51c2BdOiB0cnVlLFxuICAgICAgICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1tZW51cy1oaWRkZW5gXTogIXRoaXMubWVudVZpc2libGUsXG4gICAgICAgICAgICBbYCR7dGhpcy50aHlNZW51Q2xhc3NOYW1lfWBdOiB0aGlzLnRoeU1lbnVDbGFzc05hbWUsXG4gICAgICAgICAgICBbYHctMTAwYF06IHRoaXMuY29sdW1ucy5sZW5ndGggPT09IDBcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1lbnVDb2x1bW5DbHMoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lbnVDb2x1bW5DbHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRNZW51Q29sdW1uQ2xhc3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX21lbnVDb2x1bW5DbHMgPSB7XG4gICAgICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LW1lbnVgXTogdHJ1ZSxcbiAgICAgICAgICAgIFtgJHt0aGlzLnRoeUNvbHVtbkNsYXNzTmFtZX1gXTogdGhpcy50aHlDb2x1bW5DbGFzc05hbWVcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxhYmVsQ2xzKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sYWJlbENscztcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldExhYmVsQ2xhc3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2xhYmVsQ2xzID0ge1xuICAgICAgICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1waWNrZXItbGFiZWxgXTogdHJ1ZSxcbiAgICAgICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tc2hvdy1zZWFyY2hgXTogZmFsc2UsXG4gICAgICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWZvY3VzZWRgXTogZmFsc2UsXG4gICAgICAgICAgICAndGV4dC10cnVuY2F0ZSc6IHRydWVcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldENsYXNzTWFwKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjbGFzc01hcCA9IHtcbiAgICAgICAgICAgIFtgJHt0aGlzLnByZWZpeENsc31gXTogdHJ1ZSxcbiAgICAgICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tcGlja2VyYF06IHRydWUsXG4gICAgICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LSR7dGhpcy50aHlTaXplfWBdOiB0cnVlLFxuICAgICAgICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1waWNrZXItZGlzYWJsZWRgXTogdGhpcy5kaXNhYmxlZCxcbiAgICAgICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tcGlja2VyLW9wZW5gXTogdGhpcy5tZW51VmlzaWJsZVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmhvc3RSZW5kZXJlci51cGRhdGVDbGFzc0J5TWFwKGNsYXNzTWFwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQ2xpY2tUcmlnZ2VyQWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGh5VHJpZ2dlckFjdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRoeVRyaWdnZXJBY3Rpb24gPT09ICdjbGljayc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudGh5VHJpZ2dlckFjdGlvbi5pbmRleE9mKCdjbGljaycpICE9PSAtMTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzSG92ZXJUcmlnZ2VyQWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGh5VHJpZ2dlckFjdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRoeVRyaWdnZXJBY3Rpb24gPT09ICdob3Zlcic7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudGh5VHJpZ2dlckFjdGlvbi5pbmRleE9mKCdob3ZlcicpICE9PSAtMTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzSG92ZXJFeHBhbmRUcmlnZ2VyQWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGh5RXhwYW5kVHJpZ2dlckFjdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRoeUV4cGFuZFRyaWdnZXJBY3Rpb24gPT09ICdob3Zlcic7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudGh5RXhwYW5kVHJpZ2dlckFjdGlvbi5pbmRleE9mKCdob3ZlcicpICE9PSAtMTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIHRvZ2dsZUNsaWNrKCRldmVudDogRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0NsaWNrVHJpZ2dlckFjdGlvbigpKSB7XG4gICAgICAgICAgICB0aGlzLnNldE1lbnVWaXNpYmxlKCF0aGlzLm1lbnVWaXNpYmxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNlZW50ZXInLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyB0b2dnbGVNb3VzZUVudGVyKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8ICF0aGlzLmlzSG92ZXJUcmlnZ2VyQWN0aW9uKCkgfHwgdGhpcy5tZW51VmlzaWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRNZW51VmlzaWJsZSh0cnVlKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZWxlYXZlJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgdG9nZ2xlTW91c2VMZWF2ZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCAhdGhpcy5pc0hvdmVyVHJpZ2dlckFjdGlvbigpIHx8ICF0aGlzLm1lbnVWaXNpYmxlKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaG9zdEVsID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IG1vdXNlVGFyZ2V0ID0gZXZlbnQucmVsYXRlZFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgaG9zdEVsLmNvbnRhaW5zKG1vdXNlVGFyZ2V0KSB8fFxuICAgICAgICAgICAgbW91c2VUYXJnZXQ/LmNsYXNzTGlzdC5jb250YWlucygnY2RrLW92ZXJsYXktcGFuZScpIHx8XG4gICAgICAgICAgICBtb3VzZVRhcmdldD8uY2xhc3NMaXN0LmNvbnRhaW5zKCdjZGstb3ZlcmxheS1iYWNrZHJvcCcpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRNZW51VmlzaWJsZShmYWxzZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsaWNrQ3VzdG9tT3B0aW9uKG9wdGlvbjogVGh5Q2FzY2FkZXJPcHRpb24sIGluZGV4OiBudW1iZXIsIGV2ZW50OiBFdmVudCB8IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50ID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLmNsaWNrT3B0aW9uKG9wdGlvbiwgaW5kZXgsIGV2ZW50LCB0aGlzLnNlbGVjdE9wdGlvbik7XG4gICAgfVxuXG4gICAgcHVibGljIGNsaWNrT3B0aW9uKG9wdGlvbjogVGh5Q2FzY2FkZXJPcHRpb24sIGluZGV4OiBudW1iZXIsIGV2ZW50OiBFdmVudCB8IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy50aHlDYXNjYWRlclNlcnZpY2UucmVtb3ZlQ3VzdG9tT3B0aW9uKCk7XG4gICAgICAgIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLmNsaWNrT3B0aW9uKG9wdGlvbiwgaW5kZXgsIGV2ZW50LCB0aGlzLnNlbGVjdE9wdGlvbik7XG5cbiAgICAgICAgaWYgKHRoaXMuY2RrQ29ubmVjdGVkT3ZlcmxheSAmJiB0aGlzLmNka0Nvbm5lY3RlZE92ZXJsYXkub3ZlcmxheVJlZikge1xuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRvIGNhbGN1bGF0ZSBhbmQgdXBkYXRlIHRoZSBwb3NpdGlvbiBhZnRlciB0aGUgc3VibWVudSBpcyBvcGVuZWRcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBwb3NpdGlvbiB0byBwcmV2ZW50IHRoZSBzdWJtZW51IGZyb20gYXBwZWFyaW5nIG9mZi1zY3JlZW5cbiAgICAgICAgICAgIHRoaXMuY2RrQ29ubmVjdGVkT3ZlcmxheS5vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBtb3VzZW92ZXJPcHRpb24ob3B0aW9uOiBUaHlDYXNjYWRlck9wdGlvbiwgaW5kZXg6IG51bWJlciwgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb24gJiYgb3B0aW9uLmRpc2FibGVkICYmICF0aGlzLmlzTXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5pc0hvdmVyRXhwYW5kVHJpZ2dlckFjdGlvbigpICYmICEob3B0aW9uICYmIG9wdGlvbi5kaXNhYmxlZCAmJiB0aGlzLmlzTXVsdGlwbGUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRBY3RpdmVPcHRpb24ob3B0aW9uLCBpbmRleCwgZmFsc2UpO1xuICAgIH1cblxuICAgIG9uQmx1cihldmVudD86IEZvY3VzRXZlbnQpIHtcbiAgICAgICAgLy8gVGFiIOiBmueEpuWQjuiHquWKqOiBmueEpuWIsCBpbnB1dCDovpPlhaXmoYbvvIzmraTliIbmlK/kuIvnm7TmjqXov5Tlm57vvIzml6DpnIDop6blj5Egb25Ub3VjaGVkRm5cbiAgICAgICAgaWYgKGVsZW1lbnRNYXRjaENsb3Nlc3QoZXZlbnQ/LnJlbGF0ZWRUYXJnZXQgYXMgSFRNTEVsZW1lbnQsIFsnLnRoeS1jYXNjYWRlci1tZW51cycsICd0aHktY2FzY2FkZXInXSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uVG91Y2hlZEZuKCk7XG4gICAgfVxuXG4gICAgb25Gb2N1cyhldmVudD86IEZvY3VzRXZlbnQpIHtcbiAgICAgICAgaWYgKCFlbGVtZW50TWF0Y2hDbG9zZXN0KGV2ZW50Py5yZWxhdGVkVGFyZ2V0IGFzIEhUTUxFbGVtZW50LCBbJy50aHktY2FzY2FkZXItbWVudXMnLCAndGh5LWNhc2NhZGVyJ10pKSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dEVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xuICAgICAgICAgICAgaW5wdXRFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2xvc2VNZW51KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5tZW51VmlzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRNZW51VmlzaWJsZShmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hlZEZuKCk7XG4gICAgICAgICAgICB0aGlzLmlzU2hvd1NlYXJjaFBhbmVsID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5zZWFyY2hSZXN1bHRMaXN0ID0gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0QWN0aXZlT3B0aW9uKG9wdGlvbjogVGh5Q2FzY2FkZXJPcHRpb24sIGluZGV4OiBudW1iZXIsIHNlbGVjdDogYm9vbGVhbiwgbG9hZENoaWxkcmVuOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5zZXRBY3RpdmVPcHRpb24ob3B0aW9uLCBpbmRleCwgc2VsZWN0LCBsb2FkQ2hpbGRyZW4sIHRoaXMuc2VsZWN0T3B0aW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNlbGVjdE9wdGlvbiA9IChvcHRpb246IFRoeUNhc2NhZGVyT3B0aW9uLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmICgob3B0aW9uLmlzTGVhZiB8fCAhdGhpcy50aHlJc09ubHlTZWxlY3RMZWFmKSAmJiAhdGhpcy50aHlNdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy5hZnRlckNoYW5nZUZuID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0TWVudVZpc2libGUoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkRm4oKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50aHlTZWxlY3QuZW1pdCh7IG9wdGlvbiwgaW5kZXggfSk7XG4gICAgICAgIGNvbnN0IGlzT3B0aW9uQ2FuU2VsZWN0ID0gdGhpcy50aHlDaGFuZ2VPblNlbGVjdCAmJiAhdGhpcy5pc011bHRpcGxlO1xuICAgICAgICBpZiAob3B0aW9uLmlzTGVhZiB8fCAhdGhpcy50aHlJc09ubHlTZWxlY3RMZWFmIHx8IGlzT3B0aW9uQ2FuU2VsZWN0IHx8IHRoaXMuc2hvdWxkUGVyZm9ybVNlbGVjdGlvbihvcHRpb24sIGluZGV4KSkge1xuICAgICAgICAgICAgdGhpcy50aHlDYXNjYWRlclNlcnZpY2Uuc2VsZWN0T3B0aW9uKG9wdGlvbiwgaW5kZXgpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHB1YmxpYyByZW1vdmVTZWxlY3RlZEl0ZW0oZXZlbnQ6IHsgaXRlbTogU2VsZWN0T3B0aW9uQmFzZTsgJGV2ZW50T3JpZ2luOiBFdmVudCB9KSB7XG4gICAgICAgIGV2ZW50LiRldmVudE9yaWdpbi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy50aHlDYXNjYWRlclNlcnZpY2UucmVtb3ZlU2VsZWN0ZWRJdGVtKGV2ZW50Py5pdGVtKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3VsZFBlcmZvcm1TZWxlY3Rpb24ob3B0aW9uOiBUaHlDYXNjYWRlck9wdGlvbiwgbGV2ZWw6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMudGh5Q2hhbmdlT24gPT09ICdmdW5jdGlvbicgPyB0aGlzLnRoeUNoYW5nZU9uKG9wdGlvbiwgbGV2ZWwpID09PSB0cnVlIDogZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyU2VsZWN0aW9uKCRldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCRldmVudCkge1xuICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZnRlckNoYW5nZUZuID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRNZW51VmlzaWJsZShmYWxzZSk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBpdGVtOiBUaHlDYXNjYWRlck9wdGlvbikge1xuICAgICAgICByZXR1cm4gaXRlbT8udmFsdWUgfHwgaXRlbT8uX2lkIHx8IGluZGV4O1xuICAgIH1cblxuICAgIHB1YmxpYyBzZWFyY2hGaWx0ZXIoc2VhcmNoVGV4dDogc3RyaW5nKSB7XG4gICAgICAgIGlmICghc2VhcmNoVGV4dCAmJiAhdGhpcy5pc1NlbGVjdGluZ1NlYXJjaFN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0U2VhcmNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0JC5uZXh0KHNlYXJjaFRleHQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdFNlYXJjaCgpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0JFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIERlYm91bmNlVGltZVdyYXBwZXIuZGVib3VuY2VUaW1lKDIwMCksXG4gICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIodGV4dCA9PiB0ZXh0ICE9PSAnJylcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoc2VhcmNoVGV4dCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldFNlYXJjaCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gbG9jYWwgc2VhcmNoXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hJbkxvY2FsKHNlYXJjaFRleHQpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNTaG93U2VhcmNoUGFuZWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZWFyY2hJbkxvY2FsKHNlYXJjaFRleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5zZWFyY2hJbkxvY2FsKHNlYXJjaFRleHQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRTZWFyY2goKSB7XG4gICAgICAgIHRoaXMuaXNTaG93U2VhcmNoUGFuZWwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50aHlDYXNjYWRlclNlcnZpY2UucmVzZXRTZWFyY2goKTtcbiAgICAgICAgdGhpcy5zY3JvbGxBY3RpdmVFbGVtZW50SW50b1ZpZXcoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZWN0U2VhcmNoUmVzdWx0KHNlbGVjdE9wdGlvbkRhdGE6IFRoeUNhc2NhZGVyU2VhcmNoT3B0aW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgdGh5Um93VmFsdWU6IHNlbGVjdGVkT3B0aW9ucyB9ID0gc2VsZWN0T3B0aW9uRGF0YTtcbiAgICAgICAgaWYgKHNlbGVjdE9wdGlvbkRhdGEuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc011bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZU1lbnUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzZWxlY3RlZE9wdGlvbnMuZm9yRWFjaCgoaXRlbTogVGh5Q2FzY2FkZXJPcHRpb24sIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlT3B0aW9uKGl0ZW0sIGluZGV4LCBpbmRleCA9PT0gc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCAtIDEpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuaXNNdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy5pc1NlbGVjdGluZ1NlYXJjaFN0YXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIHNlbGVjdE9wdGlvbkRhdGEuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luU2VhcmNoUmVzdWx0TGlzdCA9IHRoaXMuc2VhcmNoUmVzdWx0TGlzdDtcbiAgICAgICAgICAgIC8vIOS/neaMgeaQnOe0oumAiemhuVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1Nob3dTZWFyY2hQYW5lbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy50aHlDYXNjYWRlclNlcnZpY2Uuc2VhcmNoUmVzdWx0TGlzdCA9IG9yaWdpblNlYXJjaFJlc3VsdExpc3Q7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1NlbGVjdGluZ1NlYXJjaFN0YXRlID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTZWFyY2goKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3Vic2NyaWJlVHJpZ2dlclJlc2l6ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZVRyaWdnZXJSZXNpemUoKTtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZXNpemVTdWJzY3JpcHRpb24gPSBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzaXplID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzOiBSZXNpemVPYnNlcnZlckVudHJ5W10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJlc2l6ZS5vYnNlcnZlKHRoaXMudHJpZ2dlci5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgIH0pLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyUmVjdCA9IHRoaXMudHJpZ2dlci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jZGtDb25uZWN0ZWRPdmVybGF5ICYmIHRoaXMuY2RrQ29ubmVjdGVkT3ZlcmxheS5vdmVybGF5UmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNka0Nvbm5lY3RlZE92ZXJsYXkub3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdW5zdWJzY3JpYmVUcmlnZ2VyUmVzaXplKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5yZXNpemVTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMucmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZVN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZVRyaWdnZXJSZXNpemUoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNka092ZXJsYXlPcmlnaW4gI29yaWdpbj1cImNka092ZXJsYXlPcmlnaW5cIiAjdHJpZ2dlcj5cbiAgQGlmICh0aHlTaG93SW5wdXQpIHtcbiAgICA8ZGl2XG4gICAgICB0aHlTZWxlY3RDb250cm9sXG4gICAgICBbdGh5U2hvd1NlYXJjaF09XCJ0aHlTaG93U2VhcmNoXCJcbiAgICAgIFt0aHlTaXplXT1cInRoeVNpemVcIlxuICAgICAgW3RoeUFsbG93Q2xlYXJdPVwidHJ1ZVwiXG4gICAgICBbdGh5U2VsZWN0ZWRPcHRpb25zXT1cInNlbGVjdGVkXCJcbiAgICAgIFt0aHlNYXhUYWdDb3VudF09XCJ0aHlNYXhUYWdDb3VudFwiXG4gICAgICAodGh5T25SZW1vdmUpPVwicmVtb3ZlU2VsZWN0ZWRJdGVtKCRldmVudClcIlxuICAgICAgKHRoeU9uQ2xlYXIpPVwiY2xlYXJTZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgICAodGh5T25CbHVyKT1cIm9uQmx1cigkZXZlbnQpXCJcbiAgICAgICh0aHlPblNlYXJjaCk9XCJzZWFyY2hGaWx0ZXIoJGV2ZW50KVwiXG4gICAgICBbdGh5RGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgW3RoeUlzTXVsdGlwbGVdPVwidGh5TXVsdGlwbGVcIlxuICAgICAgW3RoeVBhbmVsT3BlbmVkXT1cIm1lbnVWaXNpYmxlXCJcbiAgICAgIFt0aHlQbGFjZWhvbGRlcl09XCJ0aHlQbGFjZWhvbGRlclwiXG4gICAgICBbY3VzdG9tRGlzcGxheVRlbXBsYXRlXT1cImN1c3RvbURpc3BsYXlUZW1wbGF0ZVwiXG4gICAgICBbdGh5UHJlc2V0XT1cInRoeVByZXNldFwiPlxuICAgICAgPG5nLXRlbXBsYXRlICNjdXN0b21EaXNwbGF5VGVtcGxhdGUgbGV0LXZhbHVlPlxuICAgICAgICBAaWYgKCFpc0xhYmVsUmVuZGVyVGVtcGxhdGUpIHtcbiAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJsYWJlbENsc1wiPnt7IHZhbHVlLmxhYmVsVGV4dCB9fTwvc3Bhbj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwibGFiZWxDbHNcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ0aHlMYWJlbFJlbmRlclwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ2YWx1ZS5sYWJlbFJlbmRlckNvbnRleHRcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZVxuICBjZGtDb25uZWN0ZWRPdmVybGF5XG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5SGFzQmFja2Ryb3BdPVwidGh5SGFzQmFja2Ryb3BcIlxuICBjZGtDb25uZWN0ZWRPdmVybGF5QmFja2Ryb3BDbGFzcz1cInRoeS1jYXNjYWRlci1iYWNrZHJvcFwiXG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luXT1cIm9yaWdpblwiXG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zXT1cInBvc2l0aW9uc1wiXG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5TWluV2lkdGhdPVwibWVudU1pbldpZHRoXCJcbiAgY2RrQ29ubmVjdGVkT3ZlcmxheVRyYW5zZm9ybU9yaWdpbk9uPVwiLnRoeS1jYXNjYWRlci1tZW51c1wiXG4gIChiYWNrZHJvcENsaWNrKT1cImNsb3NlTWVudSgpXCJcbiAgKGRldGFjaCk9XCJjbG9zZU1lbnUoKVwiXG4gIChhdHRhY2gpPVwiYXR0YWNoZWQoKVwiXG4gIChwb3NpdGlvbkNoYW5nZSk9XCJwb3NpdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcGVuXT1cIm1lbnVWaXNpYmxlXCI+XG4gIDxkaXZcbiAgICBbYXR0ci50YWJpbmRleF09XCItMVwiXG4gICAgI21lbnVcbiAgICBbbmdDbGFzc109XCJtZW51Q2xzXCJcbiAgICBbbmdTdHlsZV09XCJ0aHlNZW51U3R5bGVcIlxuICAgIChtb3VzZWxlYXZlKT1cInRvZ2dsZU1vdXNlTGVhdmUoJGV2ZW50KVwiXG4gICAgW0BzY2FsZVlNb3Rpb25dPVwiJ2VudGVyJ1wiPlxuICAgIEBpZiAoIWlzU2hvd1NlYXJjaFBhbmVsKSB7XG4gICAgICBAaWYgKGNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgICBAZm9yIChvcHRpb25zIG9mIGNvbHVtbnM7IHRyYWNrICRpbmRleDsgbGV0IGkgPSAkaW5kZXg7IGxldCBpc0ZpcnN0ID0gJGZpcnN0KSB7XG4gICAgICAgICAgPHVsICNjYXNjYWRlck9wdGlvbkNvbnRhaW5lcnMgW25nQ2xhc3NdPVwibWVudUNvbHVtbkNsc1wiPlxuICAgICAgICAgICAgQGlmICh0aHlDdXN0b21PcHRpb25zICYmIHRoeUN1c3RvbU9wdGlvbnMubGVuZ3RoID4gMCAmJiBpc0ZpcnN0KSB7XG4gICAgICAgICAgICAgIEBmb3IgKGN1c3RvbU9wdCBvZiB0aHlDdXN0b21PcHRpb25zOyB0cmFjayB0cmFja0J5Rm4oJGluZGV4LCBjdXN0b21PcHQpKSB7XG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAjY2FzY2FkZXJPcHRpb25zXG4gICAgICAgICAgICAgICAgICB0aHktY2FzY2FkZXItb3B0aW9uXG4gICAgICAgICAgICAgICAgICBbb3B0aW9uXT1cImN1c3RvbU9wdFwiXG4gICAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwidGh5TXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgICAgW2lzT25seVNlbGVjdExlYWZdPVwidGh5SXNPbmx5U2VsZWN0TGVhZlwiXG4gICAgICAgICAgICAgICAgICBbbGFiZWxQcm9wZXJ0eV09XCJ0aHlMYWJlbFByb3BlcnR5XCJcbiAgICAgICAgICAgICAgICAgIFthY3RpdmVdPVwiaXNBY3RpdmF0ZWRPcHRpb24oY3VzdG9tT3B0LCAwKVwiXG4gICAgICAgICAgICAgICAgICBbaGFsZlNlbGVjdGVkXT1cImlzSGFsZlNlbGVjdGVkT3B0aW9uKGN1c3RvbU9wdCwgMClcIlxuICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cImlzU2VsZWN0ZWRPcHRpb24oY3VzdG9tT3B0LCAwKVwiXG4gICAgICAgICAgICAgICAgICAodG9nZ2xlU2VsZWN0Q2hhbmdlKT1cImNsaWNrQ3VzdG9tT3B0aW9uKGN1c3RvbU9wdCwgMCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tDdXN0b21PcHRpb24oY3VzdG9tT3B0LCAwLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIChtb3VzZW92ZXIpPVwibW91c2VvdmVyT3B0aW9uKGN1c3RvbU9wdCwgMCwgJGV2ZW50KVwiPjwvbGk+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPHRoeS1kaXZpZGVyIGNsYXNzPVwibXktMSBteC00XCI+PC90aHktZGl2aWRlcj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBmb3IgKG9wdGlvbiBvZiBvcHRpb25zOyB0cmFjayB0cmFja0J5Rm4oJGluZGV4LCBvcHRpb24pKSB7XG4gICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICNjYXNjYWRlck9wdGlvbnNcbiAgICAgICAgICAgICAgICB0aHktY2FzY2FkZXItb3B0aW9uXG4gICAgICAgICAgICAgICAgW29wdGlvbl09XCJvcHRpb25cIlxuICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJ0aHlNdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgW2lzT25seVNlbGVjdExlYWZdPVwidGh5SXNPbmx5U2VsZWN0TGVhZlwiXG4gICAgICAgICAgICAgICAgW2xhYmVsUHJvcGVydHldPVwidGh5TGFiZWxQcm9wZXJ0eVwiXG4gICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJpc0FjdGl2YXRlZE9wdGlvbihvcHRpb24sIGkpXCJcbiAgICAgICAgICAgICAgICBbaGFsZlNlbGVjdGVkXT1cImlzSGFsZlNlbGVjdGVkT3B0aW9uKG9wdGlvbiwgaSlcIlxuICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJpc1NlbGVjdGVkT3B0aW9uKG9wdGlvbiwgaSlcIlxuICAgICAgICAgICAgICAgIFtvcHRpb25SZW5kZXJdPVwidGh5T3B0aW9uUmVuZGVyXCJcbiAgICAgICAgICAgICAgICAodG9nZ2xlU2VsZWN0Q2hhbmdlKT1cImNsaWNrT3B0aW9uKG9wdGlvbiwgaSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsaWNrT3B0aW9uKG9wdGlvbiwgaSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlb3Zlcik9XCJtb3VzZW92ZXJPcHRpb24ob3B0aW9uLCBpLCAkZXZlbnQpXCI+PC9saT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3VsPlxuICAgICAgICB9XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInRoeS1jYXNjYWRlci1lbXB0eS1jb250YWluZXJcIiBbbmdTdHlsZV09XCJ7ICd3aWR0aC5weCc6IHRyaWdnZXJSZWN0Py53aWR0aCB9XCI+XG4gICAgICAgICAgPHRoeS1lbXB0eSBjbGFzcz1cInRoeS1zZWxlY3QtZW1wdHktY29udGVudFwiIHRoeVNpemU9XCJzbVwiIFt0aHlNZXNzYWdlXT1cImVtcHR5U3RhdGVUZXh0XCIgW3RoeUljb25OYW1lXT1cImVtcHR5SWNvbigpXCI+PC90aHktZW1wdHk+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIH1cbiAgICBAaWYgKGlzU2hvd1NlYXJjaFBhbmVsKSB7XG4gICAgICBAaWYgKHNlYXJjaFJlc3VsdExpc3QubGVuZ3RoKSB7XG4gICAgICAgIDx1bCBjbGFzcz1cInRoeS1jYXNjYWRlci1zZWFyY2gtbGlzdCBweS0zXCIgW25nU3R5bGVdPVwidGh5U2VhcmNoTGlzdFN0eWxlXCI+XG4gICAgICAgICAgQGZvciAoaXRlbSBvZiBzZWFyY2hSZXN1bHRMaXN0OyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICB0aHktY2FzY2FkZXItc2VhcmNoLW9wdGlvblxuICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwidGh5TXVsdGlwbGVcIlxuICAgICAgICAgICAgICBbaXNPbmx5U2VsZWN0TGVhZl09XCJ0aHlJc09ubHlTZWxlY3RMZWFmXCJcbiAgICAgICAgICAgICAgW29wdGlvbl09XCJpdGVtXCJcbiAgICAgICAgICAgICAgW2FjdGl2ZV09XCJpdGVtLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgW29wdGlvblJlbmRlcl09XCJ0aHlPcHRpb25SZW5kZXJcIlxuICAgICAgICAgICAgICAodG9nZ2xlU2VsZWN0Q2hhbmdlKT1cInNlbGVjdFNlYXJjaFJlc3VsdCgkZXZlbnQpXCI+PC9saT5cbiAgICAgICAgICB9XG4gICAgICAgIDwvdWw+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInRoeS1jYXNjYWRlci1lbXB0eS1jb250YWluZXJcIiBbbmdTdHlsZV09XCJ7ICd3aWR0aC5weCc6IHRyaWdnZXJSZWN0Py53aWR0aCB9XCI+XG4gICAgICAgICAgPHRoeS1lbXB0eSBjbGFzcz1cInRoeS1zZWxlY3QtZW1wdHktY29udGVudFwiIHRoeVNpemU9XCJzbVwiIFt0aHlNZXNzYWdlXT1cImVtcHR5U3RhdGVUZXh0XCIgW3RoeUljb25OYW1lXT1cImVtcHR5SWNvbigpXCI+PC90aHktZW1wdHk+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIH1cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
768
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzY2FkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2Nhc2NhZGVyL2Nhc2NhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9jYXNjYWRlci9jYXNjYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQTBELE1BQU0sc0JBQXNCLENBQUM7QUFDckksT0FBTyxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RixPQUFPLEVBRUgsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixlQUFlLEVBSWYsTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEVBRVQsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUVULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEQsT0FBTyxFQUNILDJCQUEyQixFQUMzQixtQkFBbUIsRUFDbkIsZUFBZSxFQUNmLHlDQUF5QyxFQUN6QyxrQkFBa0IsRUFDbEIsb0JBQW9CLEVBQ3ZCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQXVDLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFMUYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFB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dEIsWUFBWTt1QkFBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBVS9CLGdCQUFnQjtzQkFEdEIsWUFBWTt1QkFBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtDb25uZWN0ZWRPdmVybGF5LCBDZGtPdmVybGF5T3JpZ2luLCBDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25DaGFuZ2UsIENvbm5lY3Rpb25Qb3NpdGlvblBhaXIgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciwgTmdDbGFzcywgTmdTdHlsZSwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBudW1iZXJBdHRyaWJ1dGUsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFBMQVRGT1JNX0lELFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgaW5qZWN0LFxuICAgIFNpZ25hbFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IHVzZUhvc3RSZW5kZXJlciB9IGZyb20gJ0B0ZXRoeXMvY2RrL2RvbSc7XG5pbXBvcnQge1xuICAgIEVYUEFOREVEX0RST1BET1dOX1BPU0lUSU9OUyxcbiAgICBEZWJvdW5jZVRpbWVXcmFwcGVyLFxuICAgIFNjcm9sbFRvU2VydmljZSxcbiAgICBUYWJJbmRleERpc2FibGVkQ29udHJvbFZhbHVlQWNjZXNzb3JNaXhpbixcbiAgICBUaHlDbGlja0Rpc3BhdGNoZXIsXG4gICAgaW5qZWN0UGFuZWxFbXB0eUljb25cbn0gZnJvbSAnbmd4LXRldGh5cy9jb3JlJztcbmltcG9ydCB7IFRoeUVtcHR5IH0gZnJvbSAnbmd4LXRldGh5cy9lbXB0eSc7XG5pbXBvcnQgeyBUaHlJY29uIH0gZnJvbSAnbmd4LXRldGh5cy9pY29uJztcbmltcG9ydCB7IFNlbGVjdENvbnRyb2xTaXplLCBTZWxlY3RPcHRpb25CYXNlLCBUaHlTZWxlY3RDb250cm9sIH0gZnJvbSAnbmd4LXRldGh5cy9zaGFyZWQnO1xuaW1wb3J0IHsgU2FmZUFueSB9IGZyb20gJ25neC10ZXRoeXMvdHlwZXMnO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5LCBlbGVtZW50TWF0Y2hDbG9zZXN0LCBpc0VtcHR5IH0gZnJvbSAnbmd4LXRldGh5cy91dGlsJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IHNjYWxlWU1vdGlvbiB9IGZyb20gJ25neC10ZXRoeXMvY29yZSc7XG5pbXBvcnQgeyBUaHlEaXZpZGVyIH0gZnJvbSAnbmd4LXRldGh5cy9kaXZpZGVyJztcbmltcG9ydCB7IFRoeUNhc2NhZGVyT3B0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9jYXNjYWRlci1saS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGh5Q2FzY2FkZXJTZWFyY2hPcHRpb25Db21wb25lbnQgfSBmcm9tICcuL2Nhc2NhZGVyLXNlYXJjaC1vcHRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IFRoeUNhc2NhZGVyU2VydmljZSB9IGZyb20gJy4vY2FzY2FkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBUaHlDYXNjYWRlckV4cGFuZFRyaWdnZXIsIFRoeUNhc2NhZGVyT3B0aW9uLCBUaHlDYXNjYWRlclNlYXJjaE9wdGlvbiwgVGh5Q2FzY2FkZXJUcmlnZ2VyVHlwZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgaW5qZWN0TG9jYWxlLCBUaHlDYXNjYWRlckxvY2FsZSB9IGZyb20gJ25neC10ZXRoeXMvaTE4bic7XG5cbi8qKlxuICog57qn6IGU6YCJ5oup6I+c5Y2VXG4gKiBAbmFtZSB0aHktY2FzY2FkZXJcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0aHktY2FzY2FkZXIsW3RoeS1jYXNjYWRlcl0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYXNjYWRlci5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVGh5Q2FzY2FkZXIpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgVGh5Q2FzY2FkZXJTZXJ2aWNlXG4gICAgXSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbYXR0ci50YWJpbmRleF0nOiBgdGFiSW5kZXhgLFxuICAgICAgICAnKGZvY3VzKSc6ICdvbkZvY3VzKCRldmVudCknLFxuICAgICAgICAnKGJsdXIpJzogJ29uQmx1cigkZXZlbnQpJ1xuICAgIH0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENka092ZXJsYXlPcmlnaW4sXG4gICAgICAgIFRoeVNlbGVjdENvbnRyb2wsXG4gICAgICAgIE5nQ2xhc3MsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIENka0Nvbm5lY3RlZE92ZXJsYXksXG4gICAgICAgIE5nU3R5bGUsXG4gICAgICAgIFRoeUNhc2NhZGVyT3B0aW9uQ29tcG9uZW50LFxuICAgICAgICBUaHlDYXNjYWRlclNlYXJjaE9wdGlvbkNvbXBvbmVudCxcbiAgICAgICAgVGh5RW1wdHksXG4gICAgICAgIFRoeUljb24sXG4gICAgICAgIFRoeURpdmlkZXJcbiAgICBdLFxuICAgIGFuaW1hdGlvbnM6IFtzY2FsZVlNb3Rpb25dXG59KVxuZXhwb3J0IGNsYXNzIFRoeUNhc2NhZGVyXG4gICAgZXh0ZW5kcyBUYWJJbmRleERpc2FibGVkQ29udHJvbFZhbHVlQWNjZXNzb3JNaXhpblxuICAgIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEFmdGVyQ29udGVudEluaXRcbntcbiAgICBwcml2YXRlIHBsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xuICAgIHByaXZhdGUgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgICBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICAgIHByaXZhdGUgdGh5Q2xpY2tEaXNwYXRjaGVyID0gaW5qZWN0KFRoeUNsaWNrRGlzcGF0Y2hlcik7XG4gICAgcHJpdmF0ZSBuZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgICB0aHlDYXNjYWRlclNlcnZpY2UgPSBpbmplY3QoVGh5Q2FzY2FkZXJTZXJ2aWNlKTtcbiAgICBwcml2YXRlIGxvY2FsZTogU2lnbmFsPFRoeUNhc2NhZGVyTG9jYWxlPiA9IGluamVjdExvY2FsZSgnY2FzY2FkZXInKTtcbiAgICBlbXB0eUljb246IFNpZ25hbDxzdHJpbmc+ID0gaW5qZWN0UGFuZWxFbXB0eUljb24oKTtcblxuICAgIC8qKlxuICAgICAqIOmAiemhueeahOWunumZheWAvOeahOWxnuaAp+WQjVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeVZhbHVlUHJvcGVydHkgPSAndmFsdWUnO1xuXG4gICAgLyoqXG4gICAgICog6YCJ6aG555qE5pi+56S65YC855qE5bGe5oCn5ZCNXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5TGFiZWxQcm9wZXJ0eSA9ICdsYWJlbCc7XG5cbiAgICAvKipcbiAgICAgKiDmj4/ov7DovpPlhaXlrZfmrrXpooTmnJ/lgLznmoTnroDnn63nmoTmj5DnpLrkv6Hmga9cbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlQbGFjZWhvbGRlciA9IHRoaXMubG9jYWxlKCkucGxhY2Vob2xkZXI7XG5cbiAgICAvKipcbiAgICAgKiDmjqfliLblpKflsI/vvIg156eN77yJXG4gICAgICogQHR5cGUgJ3hzJyDvvZwgJ3NtJyB8ICdtZCcgfCAnbGcnIHwgJydcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlTaXplOiBTZWxlY3RDb250cm9sU2l6ZSA9ICcnO1xuXG4gICAgLyoqXG4gICAgICog5pWw5o2u6aG5XG4gICAgICogQHR5cGUgVGh5Q2FzY2FkZXJPcHRpb25bXVxuICAgICAqIEBkZWZhdWx0IFtdXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5T3B0aW9ucyhvcHRpb25zOiBUaHlDYXNjYWRlck9wdGlvbltdIHwgbnVsbCkge1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gb3B0aW9ucyAmJiBvcHRpb25zLmxlbmd0aCA/IFtvcHRpb25zXSA6IFtdO1xuICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5pbml0Q29sdW1ucyhjb2x1bW5zKTtcbiAgICAgICAgaWYgKHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLmRlZmF1bHRWYWx1ZSAmJiBjb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy50aHlDYXNjYWRlclNlcnZpY2UuaW5pdE9wdGlvbnMoMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDoh6rlrprkuYnpgInpoblcbiAgICAgKiBAdHlwZSBUaHlDYXNjYWRlck9wdGlvbltdXG4gICAgICogQGRlZmF1bHQgW11cbiAgICAgKi9cbiAgICBASW5wdXQoKSBzZXQgdGh5Q3VzdG9tT3B0aW9ucyhvcHRpb25zOiBUaHlDYXNjYWRlck9wdGlvbltdIHwgbnVsbCkge1xuICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5jdXN0b21PcHRpb25zID0gKG9wdGlvbnMgfHwgW10pLm1hcChpdGVtID0+ICh7IC4uLml0ZW0gfSkpO1xuICAgIH1cblxuICAgIGdldCB0aHlDdXN0b21PcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50aHlDYXNjYWRlclNlcnZpY2UuY3VzdG9tT3B0aW9ucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDngrnlh7vniLbnuqfoj5zljZXpgInpobnml7bvvIzlj6/pgJrov4for6Xlh73mlbDliKTmlq3mmK/lkKblhYHorrjlgLznmoTlj5jljJZcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlDaGFuZ2VPbjogKG9wdGlvbjogVGh5Q2FzY2FkZXJPcHRpb24sIGxldmVsOiBudW1iZXIpID0+IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiDngrnlh7vpobnml7bvvIzooajljZXmmK/lkKbliqjmgIHlsZXnpLrmlbDmja7poblcbiAgICAgKiBAdHlwZSBib29sZWFuXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSkgdGh5Q2hhbmdlT25TZWxlY3QgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOaYvuekuui+k+WFpeahhlxuICAgICAqIEB0eXBlIGJvb2xlYW5cbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KSB0aHlTaG93SW5wdXQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICog55So5oi36Ieq5a6a5LmJ6YCJ6aG55qih5p2/XG4gICAgICogQHR5cGUgVGVtcGxhdGVSZWZcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlPcHRpb25SZW5kZXI6IFRlbXBsYXRlUmVmPFNhZmVBbnk+O1xuXG4gICAgLyoqXG4gICAgICog55So5oi36Ieq5a6a5LmJ5qih5p2/XG4gICAgICogQHR5cGUgVGVtcGxhdGVSZWZcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlMYWJlbFJlbmRlcih2YWx1ZTogVGVtcGxhdGVSZWY8YW55Pikge1xuICAgICAgICB0aGlzLmxhYmVsUmVuZGVyVHBsID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaXNMYWJlbFJlbmRlclRlbXBsYXRlID0gdmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcbiAgICAgICAgdGhpcy50aHlDYXNjYWRlclNlcnZpY2Uuc2V0Q2FzY2FkZXJPcHRpb25zKHsgaXNMYWJlbFJlbmRlclRlbXBsYXRlOiB0aGlzLmlzTGFiZWxSZW5kZXJUZW1wbGF0ZSB9KTtcbiAgICB9XG5cbiAgICBnZXQgdGh5TGFiZWxSZW5kZXIoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmxhYmVsUmVuZGVyVHBsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOeUqOS6juWKqOaAgeWKoOi9vemAiemhuVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHNldCB0aHlMb2FkRGF0YSh2YWx1ZTogKG5vZGU6IFRoeUNhc2NhZGVyT3B0aW9uLCBpbmRleD86IG51bWJlcikgPT4gUHJvbWlzZUxpa2U8YW55Pikge1xuICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5zZXRDYXNjYWRlck9wdGlvbnMoeyBsb2FkRGF0YTogdmFsdWUgfSk7XG4gICAgfVxuXG4gICAgZ2V0IHRoeUxvYWREYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50aHlDYXNjYWRlclNlcnZpY2U/LmNhc2NhZGVyT3B0aW9ucz8ubG9hZERhdGE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5o6n5Yi26Kem5Y+R54q25oCBLCDmlK/mjIEgYGNsaWNrYCB8IGBob3ZlcmBcbiAgICAgKiBAdHlwZSBUaHlDYXNjYWRlclRyaWdnZXJUeXBlIHwgVGh5Q2FzY2FkZXJUcmlnZ2VyVHlwZVtdXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5VHJpZ2dlckFjdGlvbjogVGh5Q2FzY2FkZXJUcmlnZ2VyVHlwZSB8IFRoeUNhc2NhZGVyVHJpZ2dlclR5cGVbXSA9IFsnY2xpY2snXTtcblxuICAgIC8qKlxuICAgICAqIOm8oOagh+e7j+i/h+S4i+aWueWIl+ihqOmhueaXtu+8jOaYr+WQpuiHquWKqOWxleW8gOWIl+ihqO+8jOaUr+aMgSBgY2xpY2tgIHwgYGhvdmVyYFxuICAgICAqIEB0eXBlIFRoeUNhc2NhZGVyRXhwYW5kVHJpZ2dlciB8IFRoeUNhc2NhZGVyRXhwYW5kVHJpZ2dlcltdXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5RXhwYW5kVHJpZ2dlckFjdGlvbjogVGh5Q2FzY2FkZXJFeHBhbmRUcmlnZ2VyIHwgVGh5Q2FzY2FkZXJFeHBhbmRUcmlnZ2VyW10gPSBbJ2NsaWNrJ107XG5cbiAgICAvKipcbiAgICAgKiDoh6rlrprkuYnmta7lsYLmoLflvI9cbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlNZW51U3R5bGU6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgICAvKipcbiAgICAgKiDoh6rlrprkuYnmkJzntKLmoLflvI9cbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlTZWFyY2hMaXN0U3R5bGU6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgICAvKipcbiAgICAgKiDoh6rlrprkuYnmta7lsYLnsbvlkI1cbiAgICAgKiBAdHlwZSBzdHJpbmdcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlNZW51Q2xhc3NOYW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5tZW51Q2xhc3NOYW1lID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2V0TWVudUNsYXNzKCk7XG4gICAgfVxuXG4gICAgZ2V0IHRoeU1lbnVDbGFzc05hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWVudUNsYXNzTmFtZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDoh6rlrprkuYnmta7lsYLliJfnsbvlkI1cbiAgICAgKiBAdHlwZSBzdHJpbmdcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlDb2x1bW5DbGFzc05hbWUodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLmNvbHVtbkNsYXNzTmFtZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNldE1lbnVDbGFzcygpO1xuICAgIH1cblxuICAgIGdldCB0aHlDb2x1bW5DbGFzc05hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uQ2xhc3NOYW1lO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuWPquivu1xuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSlcbiAgICBvdmVycmlkZSBzZXQgdGh5RGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IHZhbHVlO1xuICAgIH1cbiAgICBvdmVycmlkZSBnZXQgdGh5RGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkO1xuICAgIH1cblxuICAgIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDnqbrnirbmgIHkuIvnmoTlsZXnpLrmloflrZdcbiAgICAgKiBAZGVmYXVsdCDmmoLml6Dlj6/pgInpoblcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlFbXB0eVN0YXRlVGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZW1wdHlTdGF0ZVRleHQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKblpJrpgIlcbiAgICAgKiBAdHlwZSBib29sZWFuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KVxuICAgIHNldCB0aHlNdWx0aXBsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmlzTXVsdGlwbGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy50aHlDYXNjYWRlclNlcnZpY2Uuc2V0Q2FzY2FkZXJPcHRpb25zKHsgaXNNdWx0aXBsZTogdmFsdWUgfSk7XG4gICAgfVxuXG4gICAgZ2V0IHRoeU11bHRpcGxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc011bHRpcGxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruWkmumAieaXtuacgOWkp+aYvuekuueahOagh+etvuaVsOmHj++8jDAg6KGo56S65LiN6ZmQ5Yi2XG4gICAgICogQHR5cGUgbnVtYmVyXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgdGh5TWF4VGFnQ291bnQgPSAwO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5LuF5YWB6K646YCJ5oup5Y+25a2Q6aG5XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pXG4gICAgdGh5SXNPbmx5U2VsZWN0TGVhZiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiDliJ3lp4vljJbml7bvvIzmmK/lkKblsZXlvIDpnaLmnb9cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pIHRoeUF1dG9FeHBhbmQ6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKbmlK/mjIHmkJzntKJcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pIHRoeVNob3dTZWFyY2g6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOWkmumAiemAieS4remhueeahOWxleekuuaWueW8j++8jOm7mOiupOS4uuepuu+8jOa4suafk+aWh+Wtl+aooeadv++8jOS8oOWFpXRhZ++8jOa4suafk+WxleekuuaooeadvyxcbiAgICAgKiBAZGVmYXVsdCAnJ++9nHRhZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeVByZXNldDogc3RyaW5nID0gJyc7XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKbmnInluZXluINcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KSB0aHlIYXNCYWNrZHJvcCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiDlgLzlj5HnlJ/lj5jljJbml7bop6blj5HvvIzov5Tlm57pgInmi6npobnnmoTlgLxcbiAgICAgKiBAdHlwZSBFdmVudEVtaXR0ZXI8YW55W10+XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG5cbiAgICAvKipcbiAgICAgKiDlgLzlj5HnlJ/lj5jljJbml7bop6blj5HvvIzov5Tlm57pgInmi6npobnliJfooahcbiAgICAgKiBAdHlwZSBFdmVudEVtaXR0ZXI8VGh5Q2FzY2FkZXJPcHRpb25bXT5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5U2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlDYXNjYWRlck9wdGlvbltdPigpO1xuXG4gICAgLyoqXG4gICAgICog6YCJ5oup6YCJ6aG55pe26Kem5Y+RXG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeVNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgICAgICBvcHRpb246IFRoeUNhc2NhZGVyT3B0aW9uO1xuICAgICAgICBpbmRleDogbnVtYmVyO1xuICAgIH0+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZSDmmoLml6Dlrp7njrBcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5RGVzZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICAgICAgb3B0aW9uOiBUaHlDYXNjYWRlck9wdGlvbjtcbiAgICAgICAgaW5kZXg6IG51bWJlcjtcbiAgICB9PigpO1xuXG4gICAgLyoqXG4gICAgICog5riF56m66YCJ6aG55pe26Kem5Y+RXG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeUNsZWFyID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICog5LiL5ouJ6YCJ6aG55bGV5byA5ZKM5oqY5Y+g54q25oCB5LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeUV4cGFuZFN0YXR1c0NoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgQFZpZXdDaGlsZHJlbignY2FzY2FkZXJPcHRpb25zJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGNhc2NhZGVyT3B0aW9uczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXG4gICAgQFZpZXdDaGlsZHJlbignY2FzY2FkZXJPcHRpb25Db250YWluZXJzJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGNhc2NhZGVyT3B0aW9uQ29udGFpbmVyczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXG4gICAgQFZpZXdDaGlsZChDZGtDb25uZWN0ZWRPdmVybGF5LCB7IHN0YXRpYzogdHJ1ZSB9KSBjZGtDb25uZWN0ZWRPdmVybGF5OiBDZGtDb25uZWN0ZWRPdmVybGF5O1xuXG4gICAgQFZpZXdDaGlsZCgndHJpZ2dlcicsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIHRyaWdnZXI6IEVsZW1lbnRSZWY8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoJ2lucHV0JykgaW5wdXQ6IEVsZW1lbnRSZWY7XG5cbiAgICBAVmlld0NoaWxkKCdtZW51JykgbWVudTogRWxlbWVudFJlZjtcblxuICAgIHB1YmxpYyBkcm9wRG93blBvc2l0aW9uID0gJ2JvdHRvbSc7XG5cbiAgICBwdWJsaWMgbWVudVZpc2libGUgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBpc0xhYmVsUmVuZGVyVGVtcGxhdGUgPSBmYWxzZTtcblxuICAgIHB1YmxpYyB0cmlnZ2VyUmVjdDogRE9NUmVjdDtcblxuICAgIHB1YmxpYyBlbXB0eVN0YXRlVGV4dCA9IHRoaXMubG9jYWxlKCkuZW1wdHk7XG5cbiAgICBwcml2YXRlIHByZWZpeENscyA9ICd0aHktY2FzY2FkZXInO1xuXG4gICAgcHJpdmF0ZSBtZW51Q2xhc3NOYW1lOiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIGNvbHVtbkNsYXNzTmFtZTogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSBfbWVudUNvbHVtbkNsczogYW55O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBwcml2YXRlIF9tZW51Q2xzOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfTtcblxuICAgIHByaXZhdGUgX2xhYmVsQ2xzOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfTtcblxuICAgIHByaXZhdGUgbGFiZWxSZW5kZXJUcGw6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBwcml2YXRlIGhvc3RSZW5kZXJlciA9IHVzZUhvc3RSZW5kZXJlcigpO1xuXG4gICAgcHVibGljIHBvc2l0aW9uczogQ29ubmVjdGlvblBvc2l0aW9uUGFpcltdO1xuXG4gICAgZ2V0IHNlbGVjdGVkKCk6IFNlbGVjdE9wdGlvbkJhc2UgfCBTZWxlY3RPcHRpb25CYXNlW10ge1xuICAgICAgICByZXR1cm4gdGhpcy50aHlNdWx0aXBsZSA/IHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkIDogdGhpcy50aHlDYXNjYWRlclNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRbMF07XG4gICAgfVxuICAgIHByaXZhdGUgaXNNdWx0aXBsZSA9IGZhbHNlO1xuXG4gICAgcHVibGljIG1lbnVNaW5XaWR0aCA9IDEyMjtcblxuICAgIHByaXZhdGUgc2VhcmNoVGV4dCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KCcnKTtcblxuICAgIHB1YmxpYyBnZXQgc2VhcmNoUmVzdWx0TGlzdCgpOiBUaHlDYXNjYWRlclNlYXJjaE9wdGlvbltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLnNlYXJjaFJlc3VsdExpc3Q7XG4gICAgfVxuXG4gICAgcHVibGljIGlzU2hvd1NlYXJjaFBhbmVsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDop6PlhrPmkJzntKIm5aSa6YCJ55qE5oOF5Ya15LiL77yM54K55Ye75pCc57Si6aG55Lya5a+86Ie0IHBhbmVsIOmXqueDgVxuICAgICAqIOeUseS6jueCueWHu+WQju+8jHRoeVNlbGVjdGVkT3B0aW9uc+WPmOWMlu+8jOWvvOiHtCB0aHlTZWxlY3RDb250cm9sXG4gICAgICog5Y+I5Lya6Kem5Y+RIHNlYXJjaEZpbHRlciDlh73mlbDvvIzljbMgcmVzZXRTZWFyY2gg5Lya5omn6KGMXG4gICAgICog5Lya5a+86Ie05oGi5aSN57qn6IGU54q25oCB5YaN5Y+Y5Li65pCc57Si54q25oCBXG4gICAgICovXG4gICAgcHJpdmF0ZSBpc1NlbGVjdGluZ1NlYXJjaFN0YXRlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgZ2V0IGlzTG9hZGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlPy5pc0xvYWRpbmc7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50aHlDYXNjYWRlclNlcnZpY2UuY29sdW1ucztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFmdGVyQ2hhbmdlRm46ICgpID0+IHZvaWQ7XG5cbiAgICBwcml2YXRlIHJlc2l6ZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0Q2xhc3NNYXAoKTtcbiAgICAgICAgdGhpcy5zZXRNZW51Q2xhc3MoKTtcbiAgICAgICAgdGhpcy5zZXRNZW51Q29sdW1uQ2xhc3MoKTtcbiAgICAgICAgdGhpcy5zZXRMYWJlbENsYXNzKCk7XG4gICAgICAgIHRoaXMuaW5pdFBvc2l0aW9uKCk7XG4gICAgICAgIHRoaXMuaW5pdFNlYXJjaCgpO1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgbGFiZWxQcm9wZXJ0eTogdGhpcy50aHlMYWJlbFByb3BlcnR5LFxuICAgICAgICAgICAgdmFsdWVQcm9wZXJ0eTogdGhpcy50aHlWYWx1ZVByb3BlcnR5LFxuICAgICAgICAgICAgaXNNdWx0aXBsZTogdGhpcy5pc011bHRpcGxlLFxuICAgICAgICAgICAgaXNPbmx5U2VsZWN0TGVhZjogdGhpcy50aHlJc09ubHlTZWxlY3RMZWFmLFxuICAgICAgICAgICAgaXNMYWJlbFJlbmRlclRlbXBsYXRlOiB0aGlzLmlzTGFiZWxSZW5kZXJUZW1wbGF0ZSxcbiAgICAgICAgICAgIGxvYWREYXRhOiB0aGlzLnRoeUxvYWREYXRhXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLnNldENhc2NhZGVyT3B0aW9ucyhvcHRpb25zKTtcblxuICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5jYXNjYWRlclZhbHVlQ2hhbmdlKCkuc3Vic2NyaWJlKG9wdGlvbnMgPT4ge1xuICAgICAgICAgICAgaWYgKCFvcHRpb25zLmlzVmFsdWVFcXVhbCkge1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2VGbihvcHRpb25zLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5pc1NlbGVjdGlvbk1vZGVsRW1wdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aHlDbGVhci5lbWl0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMudGh5U2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy50aHlDYXNjYWRlclNlcnZpY2Uuc2VsZWN0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRoeUNoYW5nZS5lbWl0KG9wdGlvbnMudmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFmdGVyQ2hhbmdlRm4pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZnRlckNoYW5nZUZuKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWZ0ZXJDaGFuZ2VGbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgICAgICAgdGhpcy50aHlDbGlja0Rpc3BhdGNoZXJcbiAgICAgICAgICAgICAgICAuY2xpY2tlZCgwKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLm1lbnU/Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lbnVWaXNpYmxlXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlTWVudSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMudGh5QXV0b0V4cGFuZCkge1xuICAgICAgICAgICAgdGltZXIoMCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE1lbnVWaXNpYmxlKHRydWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzWyd0aHlJc09ubHlTZWxlY3RMZWFmJ10pIHtcbiAgICAgICAgICAgIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLnNldENhc2NhZGVyT3B0aW9ucyh7IGlzT25seVNlbGVjdExlYWY6IGNoYW5nZXNbJ3RoeUlzT25seVNlbGVjdExlYWYnXS5jdXJyZW50VmFsdWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRQb3NpdGlvbigpIHtcbiAgICAgICAgY29uc3QgY2FzY2FkZXJQb3NpdGlvbjogQ29ubmVjdGlvblBvc2l0aW9uUGFpcltdID0gRVhQQU5ERURfRFJPUERPV05fUE9TSVRJT05TLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7IC4uLml0ZW0gfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucG9zaXRpb25zID0gY2FzY2FkZXJQb3NpdGlvbjtcbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50aHlDYXNjYWRlclNlcnZpY2Uud3JpdGVDYXNjYWRlclZhbHVlKHZhbHVlKTtcbiAgICAgICAgaWYgKHRoaXMuaXNNdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBwb3NpdGlvbkNoYW5nZShwb3NpdGlvbjogQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uQ2hhbmdlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gcG9zaXRpb24uY29ubmVjdGlvblBhaXIub3JpZ2luWSA9PT0gJ2JvdHRvbScgPyAnYm90dG9tJyA6ICd0b3AnO1xuICAgICAgICBpZiAodGhpcy5kcm9wRG93blBvc2l0aW9uICE9PSBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5kcm9wRG93blBvc2l0aW9uID0gbmV3VmFsdWU7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaXNBY3RpdmF0ZWRPcHRpb24ob3B0aW9uOiBUaHlDYXNjYWRlck9wdGlvbiwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50aHlDYXNjYWRlclNlcnZpY2UuaXNBY3RpdmF0ZWRPcHRpb24ob3B0aW9uLCBpbmRleCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzSGFsZlNlbGVjdGVkT3B0aW9uKG9wdGlvbjogVGh5Q2FzY2FkZXJPcHRpb24sIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLmlzSGFsZlNlbGVjdGVkT3B0aW9uKG9wdGlvbiwgaW5kZXgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc1NlbGVjdGVkT3B0aW9uKG9wdGlvbjogVGh5Q2FzY2FkZXJPcHRpb24sIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLmlzU2VsZWN0ZWRPcHRpb24ob3B0aW9uLCBpbmRleCk7XG4gICAgfVxuXG4gICAgcHVibGljIGF0dGFjaGVkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuY2RrQ29ubmVjdGVkT3ZlcmxheS5wb3NpdGlvbkNoYW5nZS5waXBlKHRha2UoMSksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsQWN0aXZlRWxlbWVudEludG9WaWV3KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2Nyb2xsQWN0aXZlRWxlbWVudEludG9WaWV3KCkge1xuICAgICAgICBpZiAoIWlzRW1wdHkodGhpcy50aHlDYXNjYWRlclNlcnZpY2Uuc2VsZWN0ZWRPcHRpb25zKSkge1xuICAgICAgICAgICAgY29uc3QgYWN0aXZlT3B0aW9ucyA9IHRoaXMuY2FzY2FkZXJPcHRpb25zXG4gICAgICAgICAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ3RoeS1jYXNjYWRlci1tZW51LWl0ZW0tYWN0aXZlJykpXG4gICAgICAgICAgICAgICAgLy8gZm9yIG11bHRpcGxlIG1vZGVcbiAgICAgICAgICAgICAgICAuc2xpY2UoLXRoaXMuY2FzY2FkZXJPcHRpb25Db250YWluZXJzLmxlbmd0aCk7XG5cbiAgICAgICAgICAgIHRoaXMuY2FzY2FkZXJPcHRpb25Db250YWluZXJzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4IDw9IGFjdGl2ZU9wdGlvbnMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBTY3JvbGxUb1NlcnZpY2Uuc2Nyb2xsVG9FbGVtZW50KGFjdGl2ZU9wdGlvbnNbaW5kZXhdLm5hdGl2ZUVsZW1lbnQsIGl0ZW0ubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRNZW51VmlzaWJsZShtZW51VmlzaWJsZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5tZW51VmlzaWJsZSAhPT0gbWVudVZpc2libGUpIHtcbiAgICAgICAgICAgIHRoaXMubWVudVZpc2libGUgPSBtZW51VmlzaWJsZTtcblxuICAgICAgICAgICAgdGhpcy50aHlDYXNjYWRlclNlcnZpY2UuaW5pdEFjdGl2YXRlZE9wdGlvbnModGhpcy5tZW51VmlzaWJsZSk7XG4gICAgICAgICAgICB0aGlzLnNldENsYXNzTWFwKCk7XG4gICAgICAgICAgICB0aGlzLnNldE1lbnVDbGFzcygpO1xuICAgICAgICAgICAgaWYgKHRoaXMubWVudVZpc2libGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJSZWN0ID0gdGhpcy50cmlnZ2VyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVUcmlnZ2VyUmVzaXplKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmVUcmlnZ2VyUmVzaXplKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRoeUV4cGFuZFN0YXR1c0NoYW5nZS5lbWl0KG1lbnVWaXNpYmxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWVudUNscygpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWVudUNscztcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldE1lbnVDbGFzcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbWVudUNscyA9IHtcbiAgICAgICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tbWVudXNgXTogdHJ1ZSxcbiAgICAgICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tbWVudXMtaGlkZGVuYF06ICF0aGlzLm1lbnVWaXNpYmxlLFxuICAgICAgICAgICAgW2Ake3RoaXMudGh5TWVudUNsYXNzTmFtZX1gXTogdGhpcy50aHlNZW51Q2xhc3NOYW1lLFxuICAgICAgICAgICAgW2B3LTEwMGBdOiB0aGlzLmNvbHVtbnMubGVuZ3RoID09PSAwXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtZW51Q29sdW1uQ2xzKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZW51Q29sdW1uQ2xzO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0TWVudUNvbHVtbkNsYXNzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9tZW51Q29sdW1uQ2xzID0ge1xuICAgICAgICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1tZW51YF06IHRydWUsXG4gICAgICAgICAgICBbYCR7dGhpcy50aHlDb2x1bW5DbGFzc05hbWV9YF06IHRoaXMudGh5Q29sdW1uQ2xhc3NOYW1lXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsYWJlbENscygpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGFiZWxDbHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRMYWJlbENsYXNzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9sYWJlbENscyA9IHtcbiAgICAgICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tcGlja2VyLWxhYmVsYF06IHRydWUsXG4gICAgICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LXNob3ctc2VhcmNoYF06IGZhbHNlLFxuICAgICAgICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1mb2N1c2VkYF06IGZhbHNlLFxuICAgICAgICAgICAgJ3RleHQtdHJ1bmNhdGUnOiB0cnVlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRDbGFzc01hcCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2xhc3NNYXAgPSB7XG4gICAgICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9YF06IHRydWUsXG4gICAgICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LXBpY2tlcmBdOiB0cnVlLFxuICAgICAgICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS0ke3RoaXMudGh5U2l6ZX1gXTogdHJ1ZSxcbiAgICAgICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tcGlja2VyLWRpc2FibGVkYF06IHRoaXMuZGlzYWJsZWQsXG4gICAgICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LXBpY2tlci1vcGVuYF06IHRoaXMubWVudVZpc2libGVcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5ob3N0UmVuZGVyZXIudXBkYXRlQ2xhc3NCeU1hcChjbGFzc01hcCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0NsaWNrVHJpZ2dlckFjdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRoeVRyaWdnZXJBY3Rpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aHlUcmlnZ2VyQWN0aW9uID09PSAnY2xpY2snO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnRoeVRyaWdnZXJBY3Rpb24uaW5kZXhPZignY2xpY2snKSAhPT0gLTE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0hvdmVyVHJpZ2dlckFjdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRoeVRyaWdnZXJBY3Rpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aHlUcmlnZ2VyQWN0aW9uID09PSAnaG92ZXInO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnRoeVRyaWdnZXJBY3Rpb24uaW5kZXhPZignaG92ZXInKSAhPT0gLTE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0hvdmVyRXhwYW5kVHJpZ2dlckFjdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRoeUV4cGFuZFRyaWdnZXJBY3Rpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aHlFeHBhbmRUcmlnZ2VyQWN0aW9uID09PSAnaG92ZXInO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnRoeUV4cGFuZFRyaWdnZXJBY3Rpb24uaW5kZXhPZignaG92ZXInKSAhPT0gLTE7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyB0b2dnbGVDbGljaygkZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNDbGlja1RyaWdnZXJBY3Rpb24oKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRNZW51VmlzaWJsZSghdGhpcy5tZW51VmlzaWJsZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZWVudGVyJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgdG9nZ2xlTW91c2VFbnRlcihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCAhdGhpcy5pc0hvdmVyVHJpZ2dlckFjdGlvbigpIHx8IHRoaXMubWVudVZpc2libGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0TWVudVZpc2libGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2VsZWF2ZScsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIHRvZ2dsZU1vdXNlTGVhdmUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMuaXNIb3ZlclRyaWdnZXJBY3Rpb24oKSB8fCAhdGhpcy5tZW51VmlzaWJsZSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhvc3RFbCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBtb3VzZVRhcmdldCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGhvc3RFbC5jb250YWlucyhtb3VzZVRhcmdldCkgfHxcbiAgICAgICAgICAgIG1vdXNlVGFyZ2V0Py5jbGFzc0xpc3QuY29udGFpbnMoJ2Nkay1vdmVybGF5LXBhbmUnKSB8fFxuICAgICAgICAgICAgbW91c2VUYXJnZXQ/LmNsYXNzTGlzdC5jb250YWlucygnY2RrLW92ZXJsYXktYmFja2Ryb3AnKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0TWVudVZpc2libGUoZmFsc2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGlja0N1c3RvbU9wdGlvbihvcHRpb246IFRoeUNhc2NhZGVyT3B0aW9uLCBpbmRleDogbnVtYmVyLCBldmVudDogRXZlbnQgfCBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGhpcy50aHlDYXNjYWRlclNlcnZpY2UuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5jbGlja09wdGlvbihvcHRpb24sIGluZGV4LCBldmVudCwgdGhpcy5zZWxlY3RPcHRpb24pO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGlja09wdGlvbihvcHRpb246IFRoeUNhc2NhZGVyT3B0aW9uLCBpbmRleDogbnVtYmVyLCBldmVudDogRXZlbnQgfCBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLnJlbW92ZUN1c3RvbU9wdGlvbigpO1xuICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5jbGlja09wdGlvbihvcHRpb24sIGluZGV4LCBldmVudCwgdGhpcy5zZWxlY3RPcHRpb24pO1xuXG4gICAgICAgIGlmICh0aGlzLmNka0Nvbm5lY3RlZE92ZXJsYXkgJiYgdGhpcy5jZGtDb25uZWN0ZWRPdmVybGF5Lm92ZXJsYXlSZWYpIHtcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0byBjYWxjdWxhdGUgYW5kIHVwZGF0ZSB0aGUgcG9zaXRpb24gYWZ0ZXIgdGhlIHN1Ym1lbnUgaXMgb3BlbmVkXG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgcG9zaXRpb24gdG8gcHJldmVudCB0aGUgc3VibWVudSBmcm9tIGFwcGVhcmluZyBvZmYtc2NyZWVuXG4gICAgICAgICAgICB0aGlzLmNka0Nvbm5lY3RlZE92ZXJsYXkub3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbW91c2VvdmVyT3B0aW9uKG9wdGlvbjogVGh5Q2FzY2FkZXJPcHRpb24sIGluZGV4OiBudW1iZXIsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9uICYmIG9wdGlvbi5kaXNhYmxlZCAmJiAhdGhpcy5pc011bHRpcGxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuaXNIb3ZlckV4cGFuZFRyaWdnZXJBY3Rpb24oKSAmJiAhKG9wdGlvbiAmJiBvcHRpb24uZGlzYWJsZWQgJiYgdGhpcy5pc011bHRpcGxlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0QWN0aXZlT3B0aW9uKG9wdGlvbiwgaW5kZXgsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBvbkJsdXIoZXZlbnQ/OiBGb2N1c0V2ZW50KSB7XG4gICAgICAgIC8vIFRhYiDogZrnhKblkI7oh6rliqjogZrnhKbliLAgaW5wdXQg6L6T5YWl5qGG77yM5q2k5YiG5pSv5LiL55u05o6l6L+U5Zue77yM5peg6ZyA6Kem5Y+RIG9uVG91Y2hlZEZuXG4gICAgICAgIGlmIChlbGVtZW50TWF0Y2hDbG9zZXN0KGV2ZW50Py5yZWxhdGVkVGFyZ2V0IGFzIEhUTUxFbGVtZW50LCBbJy50aHktY2FzY2FkZXItbWVudXMnLCAndGh5LWNhc2NhZGVyJ10pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vblRvdWNoZWRGbigpO1xuICAgIH1cblxuICAgIG9uRm9jdXMoZXZlbnQ/OiBGb2N1c0V2ZW50KSB7XG4gICAgICAgIGlmICghZWxlbWVudE1hdGNoQ2xvc2VzdChldmVudD8ucmVsYXRlZFRhcmdldCBhcyBIVE1MRWxlbWVudCwgWycudGh5LWNhc2NhZGVyLW1lbnVzJywgJ3RoeS1jYXNjYWRlciddKSkge1xuICAgICAgICAgICAgY29uc3QgaW5wdXRFbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcbiAgICAgICAgICAgIGlucHV0RWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNsb3NlTWVudSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubWVudVZpc2libGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TWVudVZpc2libGUoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5vblRvdWNoZWRGbigpO1xuICAgICAgICAgICAgdGhpcy5pc1Nob3dTZWFyY2hQYW5lbCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50aHlDYXNjYWRlclNlcnZpY2Uuc2VhcmNoUmVzdWx0TGlzdCA9IFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldEFjdGl2ZU9wdGlvbihvcHRpb246IFRoeUNhc2NhZGVyT3B0aW9uLCBpbmRleDogbnVtYmVyLCBzZWxlY3Q6IGJvb2xlYW4sIGxvYWRDaGlsZHJlbjogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50aHlDYXNjYWRlclNlcnZpY2Uuc2V0QWN0aXZlT3B0aW9uKG9wdGlvbiwgaW5kZXgsIHNlbGVjdCwgbG9hZENoaWxkcmVuLCB0aGlzLnNlbGVjdE9wdGlvbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZWxlY3RPcHRpb24gPSAob3B0aW9uOiBUaHlDYXNjYWRlck9wdGlvbiwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAoKG9wdGlvbi5pc0xlYWYgfHwgIXRoaXMudGh5SXNPbmx5U2VsZWN0TGVhZikgJiYgIXRoaXMudGh5TXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMuYWZ0ZXJDaGFuZ2VGbiA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE1lbnVWaXNpYmxlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uVG91Y2hlZEZuKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGh5U2VsZWN0LmVtaXQoeyBvcHRpb24sIGluZGV4IH0pO1xuICAgICAgICBjb25zdCBpc09wdGlvbkNhblNlbGVjdCA9IHRoaXMudGh5Q2hhbmdlT25TZWxlY3QgJiYgIXRoaXMuaXNNdWx0aXBsZTtcbiAgICAgICAgaWYgKG9wdGlvbi5pc0xlYWYgfHwgIXRoaXMudGh5SXNPbmx5U2VsZWN0TGVhZiB8fCBpc09wdGlvbkNhblNlbGVjdCB8fCB0aGlzLnNob3VsZFBlcmZvcm1TZWxlY3Rpb24ob3B0aW9uLCBpbmRleCkpIHtcbiAgICAgICAgICAgIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLnNlbGVjdE9wdGlvbihvcHRpb24sIGluZGV4KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBwdWJsaWMgcmVtb3ZlU2VsZWN0ZWRJdGVtKGV2ZW50OiB7IGl0ZW06IFNlbGVjdE9wdGlvbkJhc2U7ICRldmVudE9yaWdpbjogRXZlbnQgfSkge1xuICAgICAgICBldmVudC4kZXZlbnRPcmlnaW4uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLnJlbW92ZVNlbGVjdGVkSXRlbShldmVudD8uaXRlbSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG91bGRQZXJmb3JtU2VsZWN0aW9uKG9wdGlvbjogVGh5Q2FzY2FkZXJPcHRpb24sIGxldmVsOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB0aGlzLnRoeUNoYW5nZU9uID09PSAnZnVuY3Rpb24nID8gdGhpcy50aHlDaGFuZ2VPbihvcHRpb24sIGxldmVsKSA9PT0gdHJ1ZSA6IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhclNlbGVjdGlvbigkZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICgkZXZlbnQpIHtcbiAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWZ0ZXJDaGFuZ2VGbiA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0TWVudVZpc2libGUoZmFsc2UpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5jbGVhclNlbGVjdGlvbigpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgaXRlbTogVGh5Q2FzY2FkZXJPcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0/LnZhbHVlIHx8IGl0ZW0/Ll9pZCB8fCBpbmRleDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VhcmNoRmlsdGVyKHNlYXJjaFRleHQ6IHN0cmluZykge1xuICAgICAgICBpZiAoIXNlYXJjaFRleHQgJiYgIXRoaXMuaXNTZWxlY3RpbmdTZWFyY2hTdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldFNlYXJjaCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCQubmV4dChzZWFyY2hUZXh0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRTZWFyY2goKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBEZWJvdW5jZVRpbWVXcmFwcGVyLmRlYm91bmNlVGltZSgyMDApLFxuICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKHRleHQgPT4gdGV4dCAhPT0gJycpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHNlYXJjaFRleHQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRTZWFyY2goKTtcblxuICAgICAgICAgICAgICAgIC8vIGxvY2FsIHNlYXJjaFxuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5Mb2NhbChzZWFyY2hUZXh0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2hvd1NlYXJjaFBhbmVsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2VhcmNoSW5Mb2NhbChzZWFyY2hUZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50aHlDYXNjYWRlclNlcnZpY2Uuc2VhcmNoSW5Mb2NhbChzZWFyY2hUZXh0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0U2VhcmNoKCkge1xuICAgICAgICB0aGlzLmlzU2hvd1NlYXJjaFBhbmVsID0gZmFsc2U7XG4gICAgICAgIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLnJlc2V0U2VhcmNoKCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsQWN0aXZlRWxlbWVudEludG9WaWV3KCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlbGVjdFNlYXJjaFJlc3VsdChzZWxlY3RPcHRpb25EYXRhOiBUaHlDYXNjYWRlclNlYXJjaE9wdGlvbik6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHRoeVJvd1ZhbHVlOiBzZWxlY3RlZE9wdGlvbnMgfSA9IHNlbGVjdE9wdGlvbkRhdGE7XG4gICAgICAgIGlmIChzZWxlY3RPcHRpb25EYXRhLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNNdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VNZW51KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zLmZvckVhY2goKGl0ZW06IFRoeUNhc2NhZGVyT3B0aW9uLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldEFjdGl2ZU9wdGlvbihpdGVtLCBpbmRleCwgaW5kZXggPT09IHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggLSAxKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLmlzTXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTZWxlY3RpbmdTZWFyY2hTdGF0ZSA9IHRydWU7XG4gICAgICAgICAgICBzZWxlY3RPcHRpb25EYXRhLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpblNlYXJjaFJlc3VsdExpc3QgPSB0aGlzLnNlYXJjaFJlc3VsdExpc3Q7XG4gICAgICAgICAgICAvLyDkv53mjIHmkJzntKLpgInpoblcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNTaG93U2VhcmNoUGFuZWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLnNlYXJjaFJlc3VsdExpc3QgPSBvcmlnaW5TZWFyY2hSZXN1bHRMaXN0O1xuICAgICAgICAgICAgICAgIHRoaXMuaXNTZWxlY3RpbmdTZWFyY2hTdGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0U2VhcmNoKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN1YnNjcmliZVRyaWdnZXJSZXNpemUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVUcmlnZ2VyUmVzaXplKCk7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVzaXplU3Vic2NyaXB0aW9uID0gbmV3IE9ic2VydmFibGUob2JzZXJ2ZXIgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc2l6ZSA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllczogUmVzaXplT2JzZXJ2ZXJFbnRyeVtdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoZW50cmllcyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmVzaXplLm9ic2VydmUodGhpcy50cmlnZ2VyLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgfSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJSZWN0ID0gdGhpcy50cmlnZ2VyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNka0Nvbm5lY3RlZE92ZXJsYXkgJiYgdGhpcy5jZGtDb25uZWN0ZWRPdmVybGF5Lm92ZXJsYXlSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2RrQ29ubmVjdGVkT3ZlcmxheS5vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1bnN1YnNjcmliZVRyaWdnZXJSZXNpemUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnJlc2l6ZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMucmVzaXplU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlVHJpZ2dlclJlc2l6ZSgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2RrT3ZlcmxheU9yaWdpbiAjb3JpZ2luPVwiY2RrT3ZlcmxheU9yaWdpblwiICN0cmlnZ2VyPlxuICBAaWYgKHRoeVNob3dJbnB1dCkge1xuICAgIDxkaXZcbiAgICAgIHRoeVNlbGVjdENvbnRyb2xcbiAgICAgIFt0aHlTaG93U2VhcmNoXT1cInRoeVNob3dTZWFyY2hcIlxuICAgICAgW3RoeVNpemVdPVwidGh5U2l6ZVwiXG4gICAgICBbdGh5QWxsb3dDbGVhcl09XCJ0cnVlXCJcbiAgICAgIFt0aHlTZWxlY3RlZE9wdGlvbnNdPVwic2VsZWN0ZWRcIlxuICAgICAgW3RoeU1heFRhZ0NvdW50XT1cInRoeU1heFRhZ0NvdW50XCJcbiAgICAgICh0aHlPblJlbW92ZSk9XCJyZW1vdmVTZWxlY3RlZEl0ZW0oJGV2ZW50KVwiXG4gICAgICAodGh5T25DbGVhcik9XCJjbGVhclNlbGVjdGlvbigkZXZlbnQpXCJcbiAgICAgICh0aHlPbkJsdXIpPVwib25CbHVyKCRldmVudClcIlxuICAgICAgKHRoeU9uU2VhcmNoKT1cInNlYXJjaEZpbHRlcigkZXZlbnQpXCJcbiAgICAgIFt0aHlEaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbdGh5SXNNdWx0aXBsZV09XCJ0aHlNdWx0aXBsZVwiXG4gICAgICBbdGh5UGFuZWxPcGVuZWRdPVwibWVudVZpc2libGVcIlxuICAgICAgW3RoeVBsYWNlaG9sZGVyXT1cInRoeVBsYWNlaG9sZGVyXCJcbiAgICAgIFtjdXN0b21EaXNwbGF5VGVtcGxhdGVdPVwiY3VzdG9tRGlzcGxheVRlbXBsYXRlXCJcbiAgICAgIFt0aHlQcmVzZXRdPVwidGh5UHJlc2V0XCI+XG4gICAgICA8bmctdGVtcGxhdGUgI2N1c3RvbURpc3BsYXlUZW1wbGF0ZSBsZXQtdmFsdWU+XG4gICAgICAgIEBpZiAoIWlzTGFiZWxSZW5kZXJUZW1wbGF0ZSkge1xuICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cImxhYmVsQ2xzXCI+e3sgdmFsdWUubGFiZWxUZXh0IH19PC9zcGFuPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJsYWJlbENsc1wiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRoeUxhYmVsUmVuZGVyXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInZhbHVlLmxhYmVsUmVuZGVyQ29udGV4dFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICB9XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlXG4gIGNka0Nvbm5lY3RlZE92ZXJsYXlcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlIYXNCYWNrZHJvcF09XCJ0aHlIYXNCYWNrZHJvcFwiXG4gIGNka0Nvbm5lY3RlZE92ZXJsYXlCYWNrZHJvcENsYXNzPVwidGh5LWNhc2NhZGVyLWJhY2tkcm9wXCJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW5dPVwib3JpZ2luXCJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnNdPVwicG9zaXRpb25zXCJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlNaW5XaWR0aF09XCJtZW51TWluV2lkdGhcIlxuICBjZGtDb25uZWN0ZWRPdmVybGF5VHJhbnNmb3JtT3JpZ2luT249XCIudGh5LWNhc2NhZGVyLW1lbnVzXCJcbiAgKGJhY2tkcm9wQ2xpY2spPVwiY2xvc2VNZW51KClcIlxuICAoZGV0YWNoKT1cImNsb3NlTWVudSgpXCJcbiAgKGF0dGFjaCk9XCJhdHRhY2hlZCgpXCJcbiAgKHBvc2l0aW9uQ2hhbmdlKT1cInBvc2l0aW9uQ2hhbmdlKCRldmVudClcIlxuICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW5dPVwibWVudVZpc2libGVcIj5cbiAgPGRpdlxuICAgIFthdHRyLnRhYmluZGV4XT1cIi0xXCJcbiAgICAjbWVudVxuICAgIFtuZ0NsYXNzXT1cIm1lbnVDbHNcIlxuICAgIFtuZ1N0eWxlXT1cInRoeU1lbnVTdHlsZVwiXG4gICAgKG1vdXNlbGVhdmUpPVwidG9nZ2xlTW91c2VMZWF2ZSgkZXZlbnQpXCJcbiAgICBbQHNjYWxlWU1vdGlvbl09XCInZW50ZXInXCI+XG4gICAgQGlmICghaXNTaG93U2VhcmNoUGFuZWwpIHtcbiAgICAgIEBpZiAoY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIEBmb3IgKG9wdGlvbnMgb2YgY29sdW1uczsgdHJhY2sgJGluZGV4OyBsZXQgaSA9ICRpbmRleDsgbGV0IGlzRmlyc3QgPSAkZmlyc3QpIHtcbiAgICAgICAgICA8dWwgI2Nhc2NhZGVyT3B0aW9uQ29udGFpbmVycyBbbmdDbGFzc109XCJtZW51Q29sdW1uQ2xzXCI+XG4gICAgICAgICAgICBAaWYgKHRoeUN1c3RvbU9wdGlvbnMgJiYgdGh5Q3VzdG9tT3B0aW9ucy5sZW5ndGggPiAwICYmIGlzRmlyc3QpIHtcbiAgICAgICAgICAgICAgQGZvciAoY3VzdG9tT3B0IG9mIHRoeUN1c3RvbU9wdGlvbnM7IHRyYWNrIHRyYWNrQnlGbigkaW5kZXgsIGN1c3RvbU9wdCkpIHtcbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICNjYXNjYWRlck9wdGlvbnNcbiAgICAgICAgICAgICAgICAgIHRoeS1jYXNjYWRlci1vcHRpb25cbiAgICAgICAgICAgICAgICAgIFtvcHRpb25dPVwiY3VzdG9tT3B0XCJcbiAgICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJ0aHlNdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgICBbaXNPbmx5U2VsZWN0TGVhZl09XCJ0aHlJc09ubHlTZWxlY3RMZWFmXCJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbFByb3BlcnR5XT1cInRoeUxhYmVsUHJvcGVydHlcIlxuICAgICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJpc0FjdGl2YXRlZE9wdGlvbihjdXN0b21PcHQsIDApXCJcbiAgICAgICAgICAgICAgICAgIFtoYWxmU2VsZWN0ZWRdPVwiaXNIYWxmU2VsZWN0ZWRPcHRpb24oY3VzdG9tT3B0LCAwKVwiXG4gICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwiaXNTZWxlY3RlZE9wdGlvbihjdXN0b21PcHQsIDApXCJcbiAgICAgICAgICAgICAgICAgICh0b2dnbGVTZWxlY3RDaGFuZ2UpPVwiY2xpY2tDdXN0b21PcHRpb24oY3VzdG9tT3B0LCAwLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGlja0N1c3RvbU9wdGlvbihjdXN0b21PcHQsIDAsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKG1vdXNlb3Zlcik9XCJtb3VzZW92ZXJPcHRpb24oY3VzdG9tT3B0LCAwLCAkZXZlbnQpXCI+PC9saT5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8dGh5LWRpdmlkZXIgY2xhc3M9XCJteS0xIG14LTRcIj48L3RoeS1kaXZpZGVyPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGZvciAob3B0aW9uIG9mIG9wdGlvbnM7IHRyYWNrIHRyYWNrQnlGbigkaW5kZXgsIG9wdGlvbikpIHtcbiAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgI2Nhc2NhZGVyT3B0aW9uc1xuICAgICAgICAgICAgICAgIHRoeS1jYXNjYWRlci1vcHRpb25cbiAgICAgICAgICAgICAgICBbb3B0aW9uXT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgICAgW211bHRpcGxlXT1cInRoeU11bHRpcGxlXCJcbiAgICAgICAgICAgICAgICBbaXNPbmx5U2VsZWN0TGVhZl09XCJ0aHlJc09ubHlTZWxlY3RMZWFmXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxQcm9wZXJ0eV09XCJ0aHlMYWJlbFByb3BlcnR5XCJcbiAgICAgICAgICAgICAgICBbYWN0aXZlXT1cImlzQWN0aXZhdGVkT3B0aW9uKG9wdGlvbiwgaSlcIlxuICAgICAgICAgICAgICAgIFtoYWxmU2VsZWN0ZWRdPVwiaXNIYWxmU2VsZWN0ZWRPcHRpb24ob3B0aW9uLCBpKVwiXG4gICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cImlzU2VsZWN0ZWRPcHRpb24ob3B0aW9uLCBpKVwiXG4gICAgICAgICAgICAgICAgW29wdGlvblJlbmRlcl09XCJ0aHlPcHRpb25SZW5kZXJcIlxuICAgICAgICAgICAgICAgICh0b2dnbGVTZWxlY3RDaGFuZ2UpPVwiY2xpY2tPcHRpb24ob3B0aW9uLCBpLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tPcHRpb24ob3B0aW9uLCBpLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAobW91c2VvdmVyKT1cIm1vdXNlb3Zlck9wdGlvbihvcHRpb24sIGksICRldmVudClcIj48L2xpPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIH1cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8ZGl2IGNsYXNzPVwidGh5LWNhc2NhZGVyLWVtcHR5LWNvbnRhaW5lclwiIFtuZ1N0eWxlXT1cInsgJ3dpZHRoLnB4JzogdHJpZ2dlclJlY3Q/LndpZHRoIH1cIj5cbiAgICAgICAgICA8dGh5LWVtcHR5IGNsYXNzPVwidGh5LXNlbGVjdC1lbXB0eS1jb250ZW50XCIgdGh5U2l6ZT1cInNtXCIgW3RoeU1lc3NhZ2VdPVwiZW1wdHlTdGF0ZVRleHRcIiBbdGh5SWNvbk5hbWVdPVwiZW1wdHlJY29uKClcIj48L3RoeS1lbXB0eT5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgfVxuICAgIEBpZiAoaXNTaG93U2VhcmNoUGFuZWwpIHtcbiAgICAgIEBpZiAoc2VhcmNoUmVzdWx0TGlzdC5sZW5ndGgpIHtcbiAgICAgICAgPHVsIGNsYXNzPVwidGh5LWNhc2NhZGVyLXNlYXJjaC1saXN0IHB5LTNcIiBbbmdTdHlsZV09XCJ0aHlTZWFyY2hMaXN0U3R5bGVcIj5cbiAgICAgICAgICBAZm9yIChpdGVtIG9mIHNlYXJjaFJlc3VsdExpc3Q7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgIHRoeS1jYXNjYWRlci1zZWFyY2gtb3B0aW9uXG4gICAgICAgICAgICAgIFttdWx0aXBsZV09XCJ0aHlNdWx0aXBsZVwiXG4gICAgICAgICAgICAgIFtpc09ubHlTZWxlY3RMZWFmXT1cInRoeUlzT25seVNlbGVjdExlYWZcIlxuICAgICAgICAgICAgICBbb3B0aW9uXT1cIml0ZW1cIlxuICAgICAgICAgICAgICBbYWN0aXZlXT1cIml0ZW0uc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICBbb3B0aW9uUmVuZGVyXT1cInRoeU9wdGlvblJlbmRlclwiXG4gICAgICAgICAgICAgICh0b2dnbGVTZWxlY3RDaGFuZ2UpPVwic2VsZWN0U2VhcmNoUmVzdWx0KCRldmVudClcIj48L2xpPlxuICAgICAgICAgIH1cbiAgICAgICAgPC91bD5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8ZGl2IGNsYXNzPVwidGh5LWNhc2NhZGVyLWVtcHR5LWNvbnRhaW5lclwiIFtuZ1N0eWxlXT1cInsgJ3dpZHRoLnB4JzogdHJpZ2dlclJlY3Q/LndpZHRoIH1cIj5cbiAgICAgICAgICA8dGh5LWVtcHR5IGNsYXNzPVwidGh5LXNlbGVjdC1lbXB0eS1jb250ZW50XCIgdGh5U2l6ZT1cInNtXCIgW3RoeU1lc3NhZ2VdPVwiZW1wdHlTdGF0ZVRleHRcIiBbdGh5SWNvbk5hbWVdPVwiZW1wdHlJY29uKClcIj48L3RoeS1lbXB0eT5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgfVxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|