@fundamental-ngx/core 0.45.1-rc.3 → 0.45.1-rc.4
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/date-picker/date-picker.component.d.ts +15 -2
- package/datetime-picker/datetime-picker.component.d.ts +6 -0
- package/esm2022/carousel/carousel.service.mjs +5 -1
- package/esm2022/date-picker/date-picker.component.mjs +51 -22
- package/esm2022/datetime-picker/datetime-picker.component.mjs +29 -17
- package/esm2022/switch/switch.component.mjs +3 -3
- package/fesm2022/fundamental-ngx-core-carousel.mjs +4 -0
- package/fesm2022/fundamental-ngx-core-carousel.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-date-picker.mjs +50 -21
- package/fesm2022/fundamental-ngx-core-date-picker.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-datetime-picker.mjs +28 -16
- package/fesm2022/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-switch.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-switch.mjs.map +1 -1
- package/fundamental-ngx-core-v0.45.1-rc.4.tgz +0 -0
- package/package.json +3 -3
- package/schematics/add-dependencies/index.js +4 -4
- package/fundamental-ngx-core-v0.45.1-rc.3.tgz +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, OnDestroy, OnInit } from '@angular/core';
|
|
1
|
+
import { AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, OnDestroy, OnInit, SimpleChanges } from '@angular/core';
|
|
2
2
|
import { ControlValueAccessor, Validator } from '@angular/forms';
|
|
3
3
|
import { Placement, SpecialDayRule } from '@fundamental-ngx/core/shared';
|
|
4
4
|
import { CalendarComponent, CalendarType, CalendarYearGrid, DateRange, DaysOfWeek, FdCalendarView, NavigationButtonDisableFunction } from '@fundamental-ngx/core/calendar';
|
|
@@ -119,7 +119,10 @@ export declare class DatePickerComponent<D> implements OnInit, OnDestroy, AfterV
|
|
|
119
119
|
*/
|
|
120
120
|
showWeekNumbers: boolean;
|
|
121
121
|
/** Whether the date picker is open. Can be used through two-way binding. */
|
|
122
|
-
isOpen: boolean;
|
|
122
|
+
set isOpen(value: boolean);
|
|
123
|
+
get isOpen(): boolean;
|
|
124
|
+
/** @hidden */
|
|
125
|
+
private _isOpen;
|
|
123
126
|
/** Should date picker be inlined. */
|
|
124
127
|
inline: boolean;
|
|
125
128
|
/** aria-labelledby for element describing date-picker. */
|
|
@@ -145,6 +148,8 @@ export declare class DatePickerComponent<D> implements OnInit, OnDestroy, AfterV
|
|
|
145
148
|
readonly selectedRangeDateChange: EventEmitter<DateRange<D>>;
|
|
146
149
|
/** Event thrown every time calendar active view is changed */
|
|
147
150
|
readonly activeViewChange: EventEmitter<FdCalendarView>;
|
|
151
|
+
/** @hideen */
|
|
152
|
+
private readonly _calendars;
|
|
148
153
|
/** @hidden */
|
|
149
154
|
_calendarComponent: CalendarComponent<D>;
|
|
150
155
|
/** @hidden */
|
|
@@ -156,8 +161,12 @@ export declare class DatePickerComponent<D> implements OnInit, OnDestroy, AfterV
|
|
|
156
161
|
/** @hidden Whether the date input is invalid */
|
|
157
162
|
_isInvalidDateInput: boolean;
|
|
158
163
|
/** @hidden */
|
|
164
|
+
_showPopoverContents: boolean;
|
|
165
|
+
/** @hidden */
|
|
159
166
|
readonly _formValueStateMessageId: string;
|
|
160
167
|
/** @hidden */
|
|
168
|
+
private _calendarPendingDate;
|
|
169
|
+
/** @hidden */
|
|
161
170
|
private readonly _onDestroy$;
|
|
162
171
|
/** @hidden */
|
|
163
172
|
private _subscriptions;
|
|
@@ -194,6 +203,8 @@ export declare class DatePickerComponent<D> implements OnInit, OnDestroy, AfterV
|
|
|
194
203
|
/** @hidden */
|
|
195
204
|
ngOnInit(): void;
|
|
196
205
|
/** @hidden */
|
|
206
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
207
|
+
/** @hidden */
|
|
197
208
|
ngAfterViewInit(): void;
|
|
198
209
|
/** @hidden */
|
|
199
210
|
ngOnDestroy(): void;
|
|
@@ -288,6 +299,8 @@ export declare class DatePickerComponent<D> implements OnInit, OnDestroy, AfterV
|
|
|
288
299
|
private _formatDateRange;
|
|
289
300
|
/** @hidden */
|
|
290
301
|
private _InitialiseVariablesInMessageService;
|
|
302
|
+
/** @hidden */
|
|
303
|
+
private _setOpenState;
|
|
291
304
|
static ɵfac: i0.ɵɵFactoryDeclaration<DatePickerComponent<any>, [null, { optional: true; }, { optional: true; }, null]>;
|
|
292
305
|
static ɵcmp: i0.ɵɵComponentDeclaration<DatePickerComponent<any>, "fd-date-picker", never, { "type": { "alias": "type"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "inputId": { "alias": "inputId"; "required": false; }; "required": { "alias": "required"; "required": false; }; "message": { "alias": "message"; "required": false; }; "messageTriggers": { "alias": "messageTriggers"; "required": false; }; "selectedDate": { "alias": "selectedDate"; "required": false; }; "selectedRangeDate": { "alias": "selectedRangeDate"; "required": false; }; "startingDayOfWeek": { "alias": "startingDayOfWeek"; "required": false; }; "rangeHoverEffect": { "alias": "rangeHoverEffect"; "required": false; }; "useValidation": { "alias": "useValidation"; "required": false; }; "allowNull": { "alias": "allowNull"; "required": false; }; "activeView": { "alias": "activeView"; "required": false; }; "placement": { "alias": "placement"; "required": false; }; "appendTo": { "alias": "appendTo"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "closeOnDateChoose": { "alias": "closeOnDateChoose"; "required": false; }; "showTodayButton": { "alias": "showTodayButton"; "required": false; }; "todayButtonLabel": { "alias": "todayButtonLabel"; "required": false; }; "previousButtonDisableFunction": { "alias": "previousButtonDisableFunction"; "required": false; }; "nextButtonDisableFunction": { "alias": "nextButtonDisableFunction"; "required": false; }; "state": { "alias": "state"; "required": false; }; "buttonFocusable": { "alias": "buttonFocusable"; "required": false; }; "specialDaysRules": { "alias": "specialDaysRules"; "required": false; }; "yearGrid": { "alias": "yearGrid"; "required": false; }; "aggregatedYearGrid": { "alias": "aggregatedYearGrid"; "required": false; }; "markWeekends": { "alias": "markWeekends"; "required": false; }; "showWeekNumbers": { "alias": "showWeekNumbers"; "required": false; }; "isOpen": { "alias": "isOpen"; "required": false; }; "inline": { "alias": "inline"; "required": false; }; "ariaLabelledBy": { "alias": "ariaLabelledBy"; "required": false; }; "processInputOnBlur": { "alias": "processInputOnBlur"; "required": false; }; "preventScrollOnFocus": { "alias": "preventScrollOnFocus"; "required": false; }; "disableFunction": { "alias": "disableFunction"; "required": false; }; "disableRangeStartFunction": { "alias": "disableRangeStartFunction"; "required": false; }; "disableRangeEndFunction": { "alias": "disableRangeEndFunction"; "required": false; }; }, { "isOpenChange": "isOpenChange"; "selectedDateChange": "selectedDateChange"; "selectedRangeDateChange": "selectedRangeDateChange"; "activeViewChange": "activeViewChange"; }, never, ["*"], false, never, false>;
|
|
293
306
|
}
|
|
@@ -156,6 +156,8 @@ export declare class DatetimePickerComponent<D> implements OnInit, OnDestroy, On
|
|
|
156
156
|
/** Indicates when datetime input is in invalid state. */
|
|
157
157
|
get isInvalidDateInput(): boolean;
|
|
158
158
|
/** @hidden Reference to the inner calendar component. */
|
|
159
|
+
private set _calendarCmp(value);
|
|
160
|
+
/** @hidden */
|
|
159
161
|
_calendarComponent: CalendarComponent<D>;
|
|
160
162
|
/** @hidden */
|
|
161
163
|
_inputGroupElement: ElementRef;
|
|
@@ -186,8 +188,12 @@ export declare class DatetimePickerComponent<D> implements OnInit, OnDestroy, On
|
|
|
186
188
|
/** @hidden whether to display date or time in mobile mode */
|
|
187
189
|
_displayType: 'date' | 'time';
|
|
188
190
|
/** @hidden */
|
|
191
|
+
_showPopoverContents: boolean;
|
|
192
|
+
/** @hidden */
|
|
189
193
|
private _state;
|
|
190
194
|
/** @hidden */
|
|
195
|
+
private _calendarPendingDate;
|
|
196
|
+
/** @hidden */
|
|
191
197
|
private readonly _onDestroy$;
|
|
192
198
|
/** @hidden */
|
|
193
199
|
private _subscriptions;
|
|
@@ -112,6 +112,10 @@ export class CarouselService {
|
|
|
112
112
|
}
|
|
113
113
|
/** @hidden */
|
|
114
114
|
_centerActive(index) {
|
|
115
|
+
const size = this._getSize(this.items.first);
|
|
116
|
+
if (isNaN(size)) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
115
119
|
const middleIndex = Math.ceil(this.items.length / 2);
|
|
116
120
|
const offset = Math.ceil(this.elementsAtOnce / 2);
|
|
117
121
|
const missingItems = index + offset - middleIndex;
|
|
@@ -330,4 +334,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
|
|
|
330
334
|
type: Inject,
|
|
331
335
|
args: [DOCUMENT]
|
|
332
336
|
}] }]; } });
|
|
333
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2Nhcm91c2VsL2Nhcm91c2VsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFlBQVksRUFBRSxNQUFNLEVBQXdCLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFHM0MsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsT0FBTyxDQUFDO0FBMEJuRCxlQUFlO0FBSWYsTUFBTSxPQUFPLGVBQWU7SUFtQnhCLHFDQUFxQztJQUNyQyxJQUFJLG1CQUFtQixDQUFDLG1CQUEyQjtRQUMvQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsbUJBQW1CLENBQUM7SUFDcEQsQ0FBQztJQUNELElBQUksbUJBQW1CO1FBQ25CLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ3JDLENBQUM7SUFFRCxjQUFjO0lBQ2QsSUFBWSxjQUFjO1FBQ3RCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsY0FBYyxJQUFJLENBQUMsQ0FBQztRQUU3QyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUE0QkQsY0FBYztJQUNkLFlBQStDLFNBQTBCO1FBQTFCLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBNUR6RSxzR0FBc0c7UUFDN0YscUJBQWdCLEdBQTBCLElBQUksWUFBWSxFQUFXLENBQUM7UUFFL0UsbURBQW1EO1FBQzFDLGtCQUFhLEdBQStCLElBQUksWUFBWSxF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Q0FBQyxvQkFBb0IsQ0FBQztJQUM5QyxDQUFDO0lBRUQsY0FBYztJQUNOLGtCQUFrQixDQUFDLEtBQThCO1FBQ3JELElBQUksV0FBK0IsQ0FBQztRQUVwQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDM0IsV0FBVyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM3RDthQUFNO1lBQ0gsV0FBVyxHQUFHLEtBQUssQ0FBQztTQUN2QjtRQUVELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7SUFDeEUsQ0FBQztJQUVELGNBQWM7SUFDTixhQUFhLENBQUMsS0FBOEI7UUFDaEQsT0FBTyxNQUFNLENBQUMsVUFBVSxJQUFJLEtBQUssWUFBWSxVQUFVLENBQUM7SUFDNUQsQ0FBQzs4R0E5WlEsZUFBZSxrQkE2REosUUFBUTtrSEE3RG5CLGVBQWUsY0FGWixNQUFNOzsyRkFFVCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBOERnQixNQUFNOzJCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEluamVjdCwgT25EZXN0cm95LCBRdWVyeUxpc3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGZyb21FdmVudCwgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9UUkFOU0lUSU9OX0RVUkFUSU9OID0gJzE1MG1zJztcblxuZXhwb3J0IGludGVyZmFjZSBDYXJvdXNlbEl0ZW1JbnRlcmZhY2Uge1xuICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICAgIGdldEhlaWdodCgpOiBudW1iZXI7XG4gICAgZ2V0V2lkdGgoKTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhcm91c2VsQ29uZmlnIHtcbiAgICAvKiogRGVmaW5lcyBpZiBjYXJvdXNlbCBpdGVtcyBhcmUgcGxhY2VkIHZlcnRpY2FsbHkgKi9cbiAgICB2ZXJ0aWNhbD86IGJvb2xlYW47XG4gICAgLyoqIEFtb3VudCBvZiB2aXNpYmxlIGVsZW1lbnRzIGluIGNhcm91c2VsICovXG4gICAgZWxlbWVudHNBdE9uY2U/OiBudW1iZXI7XG4gICAgLyoqIERlZmluZXMgaWYgc3VwcG9ydCBmb3IgZ2VzdHVyZXMsIGxpa2UgdG91Y2ggc3dpcGUgb3IgbW91c2UgZHJhZyBzaG91bGQgYmUgZW5hYmxlZCAqL1xuICAgIGdlc3R1cmVTdXBwb3J0PzogYm9vbGVhbjtcbiAgICAvKiogRGVmaW5lcyBpZiBjYXJvdXNlbCBzaG91bGQgbW92ZSBlbGVtZW50cyB0byBzaWRlcy4gSXQgYWxsb3dzIHRvIHNsaWRlIGluZmluaXRlbHkgaW4gb25lIGRpcmVjdGlvbiAqL1xuICAgIGluZmluaXRlPzogYm9vbGVhbjtcbiAgICAvKiogVHJhbnNpdGlvbiB0aW1lIG9mIENTUyB0cmFuc2xhdGUsIGAxNTBtc2AgYnkgZGVmYXVsdCAqL1xuICAgIHRyYW5zaXRpb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFuRW5kT3V0cHV0IHtcbiAgICBpdGVtOiBDYXJvdXNlbEl0ZW1JbnRlcmZhY2U7XG4gICAgYWZ0ZXI6IGJvb2xlYW47XG59XG5cbi8qKiBAZHluYW1pYyAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDYXJvdXNlbFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIC8qKiBFdmVudCB0aHJvd24gd2hlbiBlbGVtZW50IGlzIGRyYWdnZWQuIEVtaXRzIFwidHJ1ZVwiIHdoZW4gZHJhZyBzdGFydHMgYW5kIFwiZmFsc2VcIiB3aGVuIGRyYWcgZW5kcy4gKi9cbiAgICByZWFkb25seSBkcmFnU3RhdGVDaGFuZ2UkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duLCB3aGVuIGFjdGl2ZSBlbGVtZW50IGlzIGNoYW5nZWQgKi9cbiAgICByZWFkb25seSBhY3RpdmVDaGFuZ2UkOiBFdmVudEVtaXR0ZXI8UGFuRW5kT3V0cHV0PiA9IG5ldyBFdmVudEVtaXR0ZXI8UGFuRW5kT3V0cHV0PigpO1xuXG4gICAgLyoqIENvbmZpZ3VyYXRpb24gZm9yIGNhcm91c2VsICovXG4gICAgY29uZmlnOiBDYXJvdXNlbENvbmZpZztcblxuICAgIC8qKiBJbml0aWFsIGFjdGl2ZSBpdGVtIG9mIGNhcm91c2VsLCBwb3NpdGlvbiBmaXJzdCArIG9mZnNldCAqL1xuICAgIGFjdGl2ZTogTnVsbGFibGU8Q2Fyb3VzZWxJdGVtSW50ZXJmYWNlPjtcblxuICAgIC8qKiBTZXQgdG8gdHJ1ZSBmb3IgcnRsIG1vZGUgKi9cbiAgICBpc1J0bCA9IGZhbHNlO1xuXG4gICAgLyoqIGNhcm91c2VsIGl0ZW1zIHF1ZXJ5IGxpc3QgKi9cbiAgICBpdGVtczogUXVlcnlMaXN0PENhcm91c2VsSXRlbUludGVyZmFjZT47XG5cbiAgICAvKiogQ3VycmVudCB0cmFuc2l0aW9uIHZhbHVlIGluIHB4ICovXG4gICAgc2V0IGN1cnJlbnRUcmFuc2l0aW9uUHgoY3VycmVudFRyYW5zaXRpb25QeDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUcmFuc2l0aW9uUHggPSBjdXJyZW50VHJhbnNpdGlvblB4O1xuICAgIH1cbiAgICBnZXQgY3VycmVudFRyYW5zaXRpb25QeCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFRyYW5zaXRpb25QeDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgZ2V0IGVsZW1lbnRzQXRPbmNlKCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IG51bSA9IHRoaXMuY29uZmlnPy5lbGVtZW50c0F0T25jZSA/PyAxO1xuXG4gICAgICAgIHJldHVybiBNYXRoLm1heCgxLCBudW0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGFzdERpc3RhbmNlID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY3VycmVudFRyYW5zaXRpb25QeCA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2VsZW1lbnQ6IEhUTUxFbGVtZW50O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0aWFsRHJhZ1Bvc2l0aW9uID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGFzdERyYWdQb3NpdGlvbiA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvTW91c2VNb3ZlID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kcmFnU3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEFuIFJ4SlMgU3ViamVjdCB0aGF0IHdpbGwga2lsbCB0aGUgZGF0YSBzdHJlYW0gdXBvbiBjb21wb25lbnTigJlzIGRlc3RydWN0aW9uIChmb3IgdW5zdWJzY3JpYmluZylcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vbkRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSByZWFkb25seSBfZG9jdW1lbnQ6IERvY3VtZW50IHwgbnVsbCkge31cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVDaGFuZ2UkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuZHJhZ1N0YXRlQ2hhbmdlJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBzZXQgaW5pdGlhbCB2YWx1ZXMgZm9yIHRoZSBzZXJ2aWNlICovXG4gICAgaW5pdGlhbGlzZShcbiAgICAgICAgY29uZmlnOiBDYXJvdXNlbENvbmZpZyxcbiAgICAgICAgaXRlbXM6IFF1ZXJ5TGlzdDxDYXJvdXNlbEl0ZW1JbnRlcmZhY2U+LFxuICAgICAgICBsaXN0RWxlbWVudFJlZmVyZW5jZTogRWxlbWVudFJlZlxuICAgICk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgdGhpcy5zZXRFbGVtZW50KGxpc3RFbGVtZW50UmVmZXJlbmNlKTtcbiAgICAgICAgdGhpcy5zZXRJdGVtcyhpdGVtcyk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmdlc3R1cmVTdXBwb3J0KSB7XG4gICAgICAgICAgICB0aGlzLl9zZXR1cEdlc3R1cmVzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogdXBkYXRlIGNvbmZpZyB2YWx1ZSBmb3IgdGhlIHNlcnZpY2UgKi9cbiAgICB1cGRhdGVDb25maWcoY29uZmlnOiBDYXJvdXNlbENvbmZpZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB9XG5cbiAgICAvKiogc2V0IGVsZW1lbnQgcmVmICovXG4gICAgc2V0RWxlbWVudChlbGVtZW50UmVmOiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqIHNldCBpdGVtcyBhbmQgYXNzaWduIGFjdGl2ZSBpdGVtLCBpZiBub3QgYWxyZWFkeSB0aGVyZSAqL1xuICAgIHNldEl0ZW1zKGl0ZW1zOiBRdWVyeUxpc3Q8Q2Fyb3VzZWxJdGVtSW50ZXJmYWNlPik6IHZvaWQge1xuICAgICAgICB0aGlzLml0ZW1zID0gaXRlbXM7XG5cbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSB0aGlzLml0ZW1zLmZpcnN0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIENoYW5nZSBhY3RpdmUgZWxlbWVudCAqL1xuICAgIGdvVG9JdGVtKGl0ZW06IENhcm91c2VsSXRlbUludGVyZmFjZSwgc21vb3RoPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBsZXQgaW5kZXggPSB0aGlzLl9nZXRJbmRleE9mSXRlbShpdGVtKTtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmluZmluaXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9jZW50ZXJBY3RpdmUoaW5kZXgpO1xuXG4gICAgICAgICAgICBpbmRleCA9IHRoaXMuX2dldEluZGV4T2ZJdGVtKGl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdHJhbnNpdGlvblRvSW5kZXgoaW5kZXgsIHNtb290aCk7XG4gICAgfVxuXG4gICAgLyoqIHBpY2sgbmV4dCBlbGVtZW50IGFuZCBzZXQgaXQgYWN0aXZlICovXG4gICAgcGlja05leHQoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gdGhpcy5pdGVtcy5maXJzdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFjdGl2ZUl0ZW1JbmRleCA9IHRoaXMuX2dldEluZGV4T2ZJdGVtKHRoaXMuYWN0aXZlKTtcbiAgICAgICAgY29uc3QgaXRlbVRvQWN0aXZhdGUgPSB0aGlzLml0ZW1zLmdldChhY3RpdmVJdGVtSW5kZXggKyAxKSA/PyB0aGlzLml0ZW1zLmZpcnN0O1xuXG4gICAgICAgIHRoaXMuZ29Ub0l0ZW0oaXRlbVRvQWN0aXZhdGUsIHRydWUpO1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IGl0ZW1Ub0FjdGl2YXRlO1xuICAgIH1cblxuICAgIC8qKiBwaWNrIHByZXZpb3VzIGVsZW1lbnQgYW5kIHNldCBpdCBhY3RpdmUgKi9cbiAgICBwaWNrUHJldmlvdXMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gdGhpcy5pdGVtcy5nZXQoMik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhY3RpdmVJdGVtSW5kZXggPSB0aGlzLl9nZXRJbmRleE9mSXRlbSh0aGlzLmFjdGl2ZSk7XG4gICAgICAgIGxldCBpdGVtVG9BY3RpdmF0ZSA9IHRoaXMuaXRlbXMuZ2V0KGFjdGl2ZUl0ZW1JbmRleCAtIDEpO1xuXG4gICAgICAgIC8vIGNhc2Ugd2hlcmUgc2xpZGVzIGNhbiBtb3ZlIGluZmluaXRlbHkgaW4gb25lIGRpcmVjdGlvblxuICAgICAgICAvLyBoYW5kbGUgY2FzZSB3aGVyZSBvbi1sb2FkIGFjdGl2ZUl0ZW1JbmRleCA9IDAgYW5kIGFjdGl2ZUl0ZW1JbmRleCAtIDEgcmV0dXJucyB1bmRlZmluZWQgaXRlbSBmcm9tIGl0ZW0gYXJyYXkuXG4gICAgICAgIGlmICghaXRlbVRvQWN0aXZhdGUpIHtcbiAgICAgICAgICAgIGl0ZW1Ub0FjdGl2YXRlID0gdGhpcy5pdGVtcy5sYXN0O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5nb1RvSXRlbShpdGVtVG9BY3RpdmF0ZSwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuYWN0aXZlID0gaXRlbVRvQWN0aXZhdGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jZW50ZXJBY3RpdmUoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBtaWRkbGVJbmRleCA9IE1hdGguY2VpbCh0aGlzLml0ZW1zLmxlbmd0aCAvIDIpO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBNYXRoLmNlaWwodGhpcy5lbGVtZW50c0F0T25jZSAvIDIpO1xuICAgICAgICBjb25zdCBtaXNzaW5nSXRlbXMgPSBpbmRleCArIG9mZnNldCAtIG1pZGRsZUluZGV4O1xuICAgICAgICBjb25zdCBhcnJheSA9IHRoaXMuaXRlbXMudG9BcnJheSgpO1xuXG4gICAgICAgIGlmIChtaXNzaW5nSXRlbXMgPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1pc3NpbmdJdGVtczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGFycmF5LnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgaXRlbSAmJiBhcnJheS5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLmFicyhtaXNzaW5nSXRlbXMpOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gYXJyYXkucG9wKCk7XG4gICAgICAgICAgICAgICAgaXRlbSAmJiBhcnJheS51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLyoqIENoYW5naW5nIG9yZGVyIG9mIGVsZW1lbnRzIGluIFF1ZXJ5TGlzdCBhbmQgTmF0aXZlIEhUTUwgKi9cbiAgICAgICAgdGhpcy5pdGVtcy5yZXNldChhcnJheSk7XG4gICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4gaXRlbS5lbGVtZW50LnBhcmVudE5vZGU/LmFwcGVuZENoaWxkKGl0ZW0uZWxlbWVudCkpO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGb3IgcHJvcGVyIGFuaW1hdGlvbiBpdCdzIG5lZWRlZCB0byB0cmFuc2Zvcm0gZWxlbWVudHMsXG4gICAgICAgICAqIGJ5IGNoYW5naW5nIHRyYW5zaXRpb24gYnkgYW1vdW50IG9mIGVsZW1lbnRzIHBsYWNlZCBhdCB0b3AvYm90dG9tXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbiA9ICcwcyc7XG4gICAgICAgIHRoaXMuX3RyYW5zaXRpb25DYXJvdXNlbCh0aGlzLl9jdXJyZW50VHJhbnNpdGlvblB4ICsgdGhpcy5fZ2V0U2l6ZSh0aGlzLml0ZW1zLmZpcnN0KSAqIG1pc3NpbmdJdGVtcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90cmFuc2l0aW9uVG9JbmRleChpbmRleDogbnVtYmVyLCBzbW9vdGg/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGxldCB0cmFuc2l0aW9uUHg6IG51bWJlciA9IHRoaXMuX2dldFNpemUodGhpcy5pdGVtcy5maXJzdCkgKiBpbmRleDtcblxuICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbiA9IHNtb290aCA/IHRoaXMuX2dldFRyYW5zaXRpb24oKSA6ICcwcyc7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzUnRsIHx8ICh0aGlzLmNvbmZpZy52ZXJ0aWNhbCAmJiB0aGlzLmlzUnRsKSkge1xuICAgICAgICAgICAgdHJhbnNpdGlvblB4ID0gLXRyYW5zaXRpb25QeDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3RyYW5zaXRpb25DYXJvdXNlbCh0cmFuc2l0aW9uUHgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEdldCBjbG9zZXMgZWxlbWVudCwgYmFzZWQgb24gY3VycmVudCB0cmFuc2l0aW9uICovXG4gICAgcHJpdmF0ZSBfZ2V0Q2xvc2VzdCgpOiBDYXJvdXNlbEl0ZW1JbnRlcmZhY2Uge1xuICAgICAgICAvKiogSWYgdHJhbnNpdGlvbiBpcyBwb3NpdGl2ZSwgaXQgc2hvdWxkIGdvIHRvIGZpcnN0IGVsZW1lbnQgKi9cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuY29uZmlnLmluZmluaXRlICYmXG4gICAgICAgICAgICAoKCF0aGlzLmNvbmZpZy52ZXJ0aWNhbCAmJlxuICAgICAgICAgICAgICAgICgoIXRoaXMuaXNSdGwgJiYgdGhpcy5fY3VycmVudFRyYW5zaXRpb25QeCA+IDApIHx8ICh0aGlzLmlzUnRsICYmIHRoaXMuX2N1cnJlbnRUcmFuc2l0aW9uUHggPCAwKSkpIHx8XG4gICAgICAgICAgICAgICAgKHRoaXMuY29uZmlnLnZlcnRpY2FsICYmIHRoaXMuX2N1cnJlbnRUcmFuc2l0aW9uUHggPiAwKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtcy5maXJzdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLl9nZXRTaXplKHRoaXMuaXRlbXMuZmlyc3QpO1xuXG4gICAgICAgIC8qKiBXaGVuIHNjcm9sbCBpcyBhZnRlciBoYWxmIG9mIGVsZW1lbnQsIHRoZW4gZXh0IG9uZSBzaG91bGQgYmUgYWN0aXZlICovXG4gICAgICAgIGNvbnN0IGhhbGZBcHByb2FjaGVkOiBib29sZWFuID0gTWF0aC5hYnModGhpcy5fY3VycmVudFRyYW5zaXRpb25QeCAlIHNpemUpID4gc2l6ZSAvIDI7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbmRleCBiYXNlZCBvbiB0cmFuc2l0aW9uIHB4IGRpdmlkZWQgYnkgc2l6ZSBvZiBlbGVtZW50cyxcbiAgICAgICAgICogZXZlcnkgZWxlbWVudCBzaG91bGQgaGF2ZSBzYW1lIHdpZHRoLCBvdGhlcndpc2UgaXQgc2hvdWxkIGJlIGxvb3BlZCB0aHJvdWdoIGFsbCBlbGVtZW50cyxcbiAgICAgICAgICogd2hpY2ggaXMgbm90IGdvb2QgZm9yIHBlcmZvcm1hbmNlXG4gICAgICAgICAqL1xuICAgICAgICBsZXQgaW5kZXggPSBNYXRoLmNlaWwoTWF0aC5hYnModGhpcy5fY3VycmVudFRyYW5zaXRpb25QeCAvIHNpemUpKTtcblxuICAgICAgICAvLyBXaGVuIGVsZW1lbnRzQXRPbmNlID4gMSwgc3dpcGluZyBzaG91bGQgc3RvcCBhdCBsYXN0IGluZGV4IC0gZWxlbWVudHNBdE9uY2VcbiAgICAgICAgY29uc3QgZWxlbWVudHNBdE9uY2UgPSB0aGlzLmVsZW1lbnRzQXRPbmNlO1xuICAgICAgICBpZiAoIXRoaXMuY29uZmlnLmluZmluaXRlICYmIGVsZW1lbnRzQXRPbmNlID4gMSkge1xuICAgICAgICAgICAgLy8gV2hlbiB0aGVyZSdyZSBsZXNzIGl0ZW1zIGluIHRoZSBjYXJvdXNlbCB0aGFuIHRoZSBhcmVhIG1pZ2h0IGRpc3BsYXksIGl0IHNob3VsZCBzdG9wIHRvIGZpcnN0XG4gICAgICAgICAgICBpZiAodGhpcy5pdGVtcy5sZW5ndGggPCBlbGVtZW50c0F0T25jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLml0ZW1zLmZpcnN0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaW5kZXggKyBlbGVtZW50c0F0T25jZSA+PSB0aGlzLml0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLml0ZW1zLmdldCh0aGlzLml0ZW1zLmxlbmd0aCAtIGVsZW1lbnRzQXRPbmNlKSA/PyB0aGlzLml0ZW1zLmZpcnN0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaW5kZXggPSBpbmRleCArIChoYWxmQXBwcm9hY2hlZCA/IDAgOiAtMSk7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1zLmdldChpbmRleCk7XG5cbiAgICAgICAgLyoqIENoZWNraW5nIGlmIHRyYW5zaXRpb24gd2VudCBvdXQgb2Ygc2NvcGUgb2YgYXJyYXkgKi9cbiAgICAgICAgcmV0dXJuIGl0ZW0gfHwgdGhpcy5pdGVtcy5sYXN0O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0SW5kZXhPZkl0ZW0oaXRlbT86IENhcm91c2VsSXRlbUludGVyZmFjZSk6IG51bWJlciB7XG4gICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zLnRvQXJyYXkoKS5maW5kSW5kZXgoKF9pdGVtKSA9PiBfaXRlbSA9PT0gaXRlbSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gR2V0dGluZyBzaXplIG9mIGNhcm91c2VsLCB3aWR0aCBmb3IgaG9yaXpvbnRhbCwgaGVpZ2h0IGZvciB2ZXJ0aWNhbCAqL1xuICAgIHByaXZhdGUgX2dldFNpemUoaXRlbTogQ2Fyb3VzZWxJdGVtSW50ZXJmYWNlKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLnZlcnRpY2FsKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbS5nZXRIZWlnaHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpdGVtLmdldFdpZHRoKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9oYW5kbGVQYW4oZGVsdGE6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBkaXN0YW5jZSA9IGRlbHRhIC0gdGhpcy5fbGFzdERpc3RhbmNlO1xuXG4gICAgICAgIHRoaXMuX2xhc3REaXN0YW5jZSA9IGRlbHRhO1xuXG4gICAgICAgIHRoaXMuX3RyYW5zaXRpb25DYXJvdXNlbCh0aGlzLl9jdXJyZW50VHJhbnNpdGlvblB4ICsgZGlzdGFuY2UpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlUGFuRW5kKGRlbHRhOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faGFuZGxlUGFuKGRlbHRhKTtcblxuICAgICAgICBjb25zdCBjbG9zZXN0SXRlbTogQ2Fyb3VzZWxJdGVtSW50ZXJmYWNlID0gdGhpcy5fZ2V0Q2xvc2VzdCgpO1xuXG4gICAgICAgIHRoaXMuZ29Ub0l0ZW0oY2xvc2VzdEl0ZW0sIHRydWUpO1xuXG4gICAgICAgIGlmICghdGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gY2xvc2VzdEl0ZW07XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUNoYW5nZSQuZW1pdCh7XG4gICAgICAgICAgICAgICAgaXRlbTogY2xvc2VzdEl0ZW0sXG4gICAgICAgICAgICAgICAgYWZ0ZXI6IGRlbHRhIDwgMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5hY3RpdmUgIT09IGNsb3Nlc3RJdGVtKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IGNsb3Nlc3RJdGVtO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVDaGFuZ2UkLmVtaXQoe1xuICAgICAgICAgICAgICAgIGl0ZW06IGNsb3Nlc3RJdGVtLFxuICAgICAgICAgICAgICAgIGFmdGVyOiBkZWx0YSA8IDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kcmFnU3RhdGVDaGFuZ2UkLmVtaXQoZmFsc2UpO1xuICAgICAgICB0aGlzLl9sYXN0RGlzdGFuY2UgPSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQW5pbWF0ZXMgdGhlIGNhcm91c2VsIHRvIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgc2xpZGUuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfdHJhbnNpdGlvbkNhcm91c2VsKHRyYW5zaXRpb25QeDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUcmFuc2l0aW9uUHggPSB0cmFuc2l0aW9uUHg7XG4gICAgICAgIGNvbnN0IGF4aXMgPSB0aGlzLmNvbmZpZy52ZXJ0aWNhbCA/ICdZJyA6ICdYJztcblxuICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUke2F4aXN9KCR7dGhpcy5fY3VycmVudFRyYW5zaXRpb25QeH1weClgO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFBhbSBTdGFydCBoYW5kbGVyLCByZW1vdmVzIHRyYW5zaXRpb24gZHVyYXRpb24sICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlUGFuU3RhcnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gJzBzJztcbiAgICAgICAgdGhpcy5kcmFnU3RhdGVDaGFuZ2UkLmVtaXQodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXR1cEdlc3R1cmVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZXR1cERyYWdTdGFydCgpO1xuICAgICAgICB0aGlzLl9zZXR1cERyYWcoKTtcbiAgICAgICAgdGhpcy5fc2V0dXBEcmFnRW5kKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpYmVUb0V2ZW50cyhcbiAgICAgICAgZXZlbnRzOiBzdHJpbmdbXSxcbiAgICAgICAgZWxlbWVudDogSFRNTEVsZW1lbnQgfCBEb2N1bWVudCxcbiAgICAgICAgY2FsbGJhY2s6IChldmVudDogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQpID0+IHZvaWRcbiAgICApOiB2b2lkIHtcbiAgICAgICAgbWVyZ2UoZXZlbnRzLm1hcCgoZSkgPT4gZnJvbUV2ZW50PE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50PihlbGVtZW50LCBlLCB7IHBhc3NpdmU6IHRydWUgfSkpKS5mb3JFYWNoKFxuICAgICAgICAgICAgKGV2dDogT2JzZXJ2YWJsZTxNb3VzZUV2ZW50IHwgVG91Y2hFdmVudD4pID0+IHtcbiAgICAgICAgICAgICAgICBldnQucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0dXBEcmFnU3RhcnQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IFsnbW91c2Vkb3duJywgJ3RvdWNoc3RhcnQnXTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpYmVUb0V2ZW50cyhldmVudHMsIHRoaXMuX2VsZW1lbnQsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbGlzdGVuVG9Nb3VzZU1vdmUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fbGFzdERyYWdQb3NpdGlvbiA9IHRoaXMuX2luaXRpYWxEcmFnUG9zaXRpb24gPSB0aGlzLl9nZXREcmFnQ29vcmRpbmF0ZShldmVudCk7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVQYW5TdGFydCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldHVwRHJhZygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZXZlbnRzID0gWydtb3VzZW1vdmUnLCAndG91Y2htb3ZlJ107XG5cbiAgICAgICAgaWYgKCF0aGlzLl9kb2N1bWVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGBDb3VsZCBub3Qgc2V0dXAgZHJhZyBldmVudCBzdWJzY3JpcHRpb24uIEV4cGVjdGVkIHRvIGdldCBkb2N1bWVudCByZWYsIGdvdCAke3RoaXMuX2RvY3VtZW50fSBpbnN0ZWFkYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3N1YnNjcmliZVRvRXZlbnRzKGV2ZW50cywgdGhpcy5fZG9jdW1lbnQsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29vcmRpbmF0ZSA9IHRoaXMuX2dldERyYWdDb29yZGluYXRlKGV2ZW50KTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLl9saXN0ZW5Ub01vdXNlTW92ZSB8fCBjb29yZGluYXRlID09PSB0aGlzLl9sYXN0RHJhZ1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9kcmFnU3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVQYW4odGhpcy5fZ2V0RHJhZ2dlZERlbHRhKGNvb3JkaW5hdGUpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXR1cERyYWdFbmQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IFsnbW91c2V1cCcsICd0b3VjaGVuZCddO1xuXG4gICAgICAgIGlmICghdGhpcy5fZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgQ291bGQgbm90IHNldHVwIGRyYWcgZXZlbnQgc3Vic2NyaXB0aW9uLiBFeHBlY3RlZCB0byBnZXQgZG9jdW1lbnQgcmVmLCBnb3QgJHt0aGlzLl9kb2N1bWVudH0gaW5zdGVhZGBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zdWJzY3JpYmVUb0V2ZW50cyhldmVudHMsIHRoaXMuX2RvY3VtZW50LCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fbGlzdGVuVG9Nb3VzZU1vdmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9kcmFnU3RhcnRlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZVBhbkVuZCh0aGlzLl9nZXREcmFnZ2VkRGVsdGEodGhpcy5fZ2V0RHJhZ0Nvb3JkaW5hdGUoZXZlbnQpKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ1N0YXRlQ2hhbmdlJC5lbWl0KGZhbHNlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fbGlzdGVuVG9Nb3VzZU1vdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2RyYWdTdGFydGVkID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0VHJhbnNpdGlvbigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWc/LnRyYW5zaXRpb24gPz8gREVGQVVMVF9UUkFOU0lUSU9OX0RVUkFUSU9OO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0RHJhZ2dlZERlbHRhKG9mZnNldDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgdGhpcy5fbGFzdERyYWdQb3NpdGlvbiA9IG9mZnNldDtcblxuICAgICAgICByZXR1cm4gb2Zmc2V0IC0gdGhpcy5faW5pdGlhbERyYWdQb3NpdGlvbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldERyYWdDb29yZGluYXRlKGV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCk6IG51bWJlciB7XG4gICAgICAgIGxldCBjb29yZGluYXRlczogVG91Y2ggfCBNb3VzZUV2ZW50O1xuXG4gICAgICAgIGlmICh0aGlzLl9pc1RvdWNoRXZlbnQoZXZlbnQpKSB7XG4gICAgICAgICAgICBjb29yZGluYXRlcyA9IGV2ZW50LnRvdWNoZXNbMF0gfHwgZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb29yZGluYXRlcyA9IGV2ZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLnZlcnRpY2FsID8gY29vcmRpbmF0ZXMucGFnZVkgOiBjb29yZGluYXRlcy5wYWdlWDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lzVG91Y2hFdmVudChldmVudDogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQpOiBldmVudCBpcyBUb3VjaEV2ZW50IHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5Ub3VjaEV2ZW50ICYmIGV2ZW50IGluc3RhbmNlb2YgVG91Y2hFdmVudDtcbiAgICB9XG59XG4iXX0=
|
|
337
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2Nhcm91c2VsL2Nhcm91c2VsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFlBQVksRUFBRSxNQUFNLEVBQXdCLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFHM0MsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsT0FBTyxDQUFDO0FBMEJuRCxlQUFlO0FBSWYsTUFBTSxPQUFPLGVBQWU7SUFtQnhCLHFDQUFxQztJQUNyQyxJQUFJLG1CQUFtQixDQUFDLG1CQUEyQjtRQUMvQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsbUJBQW1CLENBQUM7SUFDcEQsQ0FBQztJQUNELElBQUksbUJBQW1CO1FBQ25CLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ3JDLENBQUM7SUFFRCxjQUFjO0lBQ2QsSUFBWSxjQUFjO1FBQ3RCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsY0FBYyxJQUFJLENBQUMsQ0FBQztRQUU3QyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUE0QkQsY0FBYztJQUNkLFlBQStDLFNBQTBCO1FBQTFCLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBNUR6RSxzR0FBc0c7UUFDN0YscUJBQWdCLEdBQTBCLElBQUksWUFBWSxFQUFXLENBQUM7UUFFL0UsbURBQW1EO1FBQzFDLGtCQUFhLEdBQStCLElBQUksWUFBWSxF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VSxJQUFJLDJCQUEyQixDQUFDO0lBQ2xFLENBQUM7SUFFRCxjQUFjO0lBQ04sZ0JBQWdCLENBQUMsTUFBYztRQUNuQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxDQUFDO1FBRWhDLE9BQU8sTUFBTSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztJQUM5QyxDQUFDO0lBRUQsY0FBYztJQUNOLGtCQUFrQixDQUFDLEtBQThCO1FBQ3JELElBQUksV0FBK0IsQ0FBQztRQUVwQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDM0IsV0FBVyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM3RDthQUFNO1lBQ0gsV0FBVyxHQUFHLEtBQUssQ0FBQztTQUN2QjtRQUVELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7SUFDeEUsQ0FBQztJQUVELGNBQWM7SUFDTixhQUFhLENBQUMsS0FBOEI7UUFDaEQsT0FBTyxNQUFNLENBQUMsVUFBVSxJQUFJLEtBQUssWUFBWSxVQUFVLENBQUM7SUFDNUQsQ0FBQzs4R0FsYVEsZUFBZSxrQkE2REosUUFBUTtrSEE3RG5CLGVBQWUsY0FGWixNQUFNOzsyRkFFVCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBOERnQixNQUFNOzJCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEluamVjdCwgT25EZXN0cm95LCBRdWVyeUxpc3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGZyb21FdmVudCwgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9UUkFOU0lUSU9OX0RVUkFUSU9OID0gJzE1MG1zJztcblxuZXhwb3J0IGludGVyZmFjZSBDYXJvdXNlbEl0ZW1JbnRlcmZhY2Uge1xuICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICAgIGdldEhlaWdodCgpOiBudW1iZXI7XG4gICAgZ2V0V2lkdGgoKTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhcm91c2VsQ29uZmlnIHtcbiAgICAvKiogRGVmaW5lcyBpZiBjYXJvdXNlbCBpdGVtcyBhcmUgcGxhY2VkIHZlcnRpY2FsbHkgKi9cbiAgICB2ZXJ0aWNhbD86IGJvb2xlYW47XG4gICAgLyoqIEFtb3VudCBvZiB2aXNpYmxlIGVsZW1lbnRzIGluIGNhcm91c2VsICovXG4gICAgZWxlbWVudHNBdE9uY2U/OiBudW1iZXI7XG4gICAgLyoqIERlZmluZXMgaWYgc3VwcG9ydCBmb3IgZ2VzdHVyZXMsIGxpa2UgdG91Y2ggc3dpcGUgb3IgbW91c2UgZHJhZyBzaG91bGQgYmUgZW5hYmxlZCAqL1xuICAgIGdlc3R1cmVTdXBwb3J0PzogYm9vbGVhbjtcbiAgICAvKiogRGVmaW5lcyBpZiBjYXJvdXNlbCBzaG91bGQgbW92ZSBlbGVtZW50cyB0byBzaWRlcy4gSXQgYWxsb3dzIHRvIHNsaWRlIGluZmluaXRlbHkgaW4gb25lIGRpcmVjdGlvbiAqL1xuICAgIGluZmluaXRlPzogYm9vbGVhbjtcbiAgICAvKiogVHJhbnNpdGlvbiB0aW1lIG9mIENTUyB0cmFuc2xhdGUsIGAxNTBtc2AgYnkgZGVmYXVsdCAqL1xuICAgIHRyYW5zaXRpb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFuRW5kT3V0cHV0IHtcbiAgICBpdGVtOiBDYXJvdXNlbEl0ZW1JbnRlcmZhY2U7XG4gICAgYWZ0ZXI6IGJvb2xlYW47XG59XG5cbi8qKiBAZHluYW1pYyAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDYXJvdXNlbFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIC8qKiBFdmVudCB0aHJvd24gd2hlbiBlbGVtZW50IGlzIGRyYWdnZWQuIEVtaXRzIFwidHJ1ZVwiIHdoZW4gZHJhZyBzdGFydHMgYW5kIFwiZmFsc2VcIiB3aGVuIGRyYWcgZW5kcy4gKi9cbiAgICByZWFkb25seSBkcmFnU3RhdGVDaGFuZ2UkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duLCB3aGVuIGFjdGl2ZSBlbGVtZW50IGlzIGNoYW5nZWQgKi9cbiAgICByZWFkb25seSBhY3RpdmVDaGFuZ2UkOiBFdmVudEVtaXR0ZXI8UGFuRW5kT3V0cHV0PiA9IG5ldyBFdmVudEVtaXR0ZXI8UGFuRW5kT3V0cHV0PigpO1xuXG4gICAgLyoqIENvbmZpZ3VyYXRpb24gZm9yIGNhcm91c2VsICovXG4gICAgY29uZmlnOiBDYXJvdXNlbENvbmZpZztcblxuICAgIC8qKiBJbml0aWFsIGFjdGl2ZSBpdGVtIG9mIGNhcm91c2VsLCBwb3NpdGlvbiBmaXJzdCArIG9mZnNldCAqL1xuICAgIGFjdGl2ZTogTnVsbGFibGU8Q2Fyb3VzZWxJdGVtSW50ZXJmYWNlPjtcblxuICAgIC8qKiBTZXQgdG8gdHJ1ZSBmb3IgcnRsIG1vZGUgKi9cbiAgICBpc1J0bCA9IGZhbHNlO1xuXG4gICAgLyoqIGNhcm91c2VsIGl0ZW1zIHF1ZXJ5IGxpc3QgKi9cbiAgICBpdGVtczogUXVlcnlMaXN0PENhcm91c2VsSXRlbUludGVyZmFjZT47XG5cbiAgICAvKiogQ3VycmVudCB0cmFuc2l0aW9uIHZhbHVlIGluIHB4ICovXG4gICAgc2V0IGN1cnJlbnRUcmFuc2l0aW9uUHgoY3VycmVudFRyYW5zaXRpb25QeDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUcmFuc2l0aW9uUHggPSBjdXJyZW50VHJhbnNpdGlvblB4O1xuICAgIH1cbiAgICBnZXQgY3VycmVudFRyYW5zaXRpb25QeCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFRyYW5zaXRpb25QeDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgZ2V0IGVsZW1lbnRzQXRPbmNlKCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IG51bSA9IHRoaXMuY29uZmlnPy5lbGVtZW50c0F0T25jZSA/PyAxO1xuXG4gICAgICAgIHJldHVybiBNYXRoLm1heCgxLCBudW0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGFzdERpc3RhbmNlID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY3VycmVudFRyYW5zaXRpb25QeCA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2VsZW1lbnQ6IEhUTUxFbGVtZW50O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0aWFsRHJhZ1Bvc2l0aW9uID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGFzdERyYWdQb3NpdGlvbiA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvTW91c2VNb3ZlID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kcmFnU3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEFuIFJ4SlMgU3ViamVjdCB0aGF0IHdpbGwga2lsbCB0aGUgZGF0YSBzdHJlYW0gdXBvbiBjb21wb25lbnTigJlzIGRlc3RydWN0aW9uIChmb3IgdW5zdWJzY3JpYmluZylcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vbkRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSByZWFkb25seSBfZG9jdW1lbnQ6IERvY3VtZW50IHwgbnVsbCkge31cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVDaGFuZ2UkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuZHJhZ1N0YXRlQ2hhbmdlJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBzZXQgaW5pdGlhbCB2YWx1ZXMgZm9yIHRoZSBzZXJ2aWNlICovXG4gICAgaW5pdGlhbGlzZShcbiAgICAgICAgY29uZmlnOiBDYXJvdXNlbENvbmZpZyxcbiAgICAgICAgaXRlbXM6IFF1ZXJ5TGlzdDxDYXJvdXNlbEl0ZW1JbnRlcmZhY2U+LFxuICAgICAgICBsaXN0RWxlbWVudFJlZmVyZW5jZTogRWxlbWVudFJlZlxuICAgICk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgdGhpcy5zZXRFbGVtZW50KGxpc3RFbGVtZW50UmVmZXJlbmNlKTtcbiAgICAgICAgdGhpcy5zZXRJdGVtcyhpdGVtcyk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmdlc3R1cmVTdXBwb3J0KSB7XG4gICAgICAgICAgICB0aGlzLl9zZXR1cEdlc3R1cmVzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogdXBkYXRlIGNvbmZpZyB2YWx1ZSBmb3IgdGhlIHNlcnZpY2UgKi9cbiAgICB1cGRhdGVDb25maWcoY29uZmlnOiBDYXJvdXNlbENvbmZpZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB9XG5cbiAgICAvKiogc2V0IGVsZW1lbnQgcmVmICovXG4gICAgc2V0RWxlbWVudChlbGVtZW50UmVmOiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqIHNldCBpdGVtcyBhbmQgYXNzaWduIGFjdGl2ZSBpdGVtLCBpZiBub3QgYWxyZWFkeSB0aGVyZSAqL1xuICAgIHNldEl0ZW1zKGl0ZW1zOiBRdWVyeUxpc3Q8Q2Fyb3VzZWxJdGVtSW50ZXJmYWNlPik6IHZvaWQge1xuICAgICAgICB0aGlzLml0ZW1zID0gaXRlbXM7XG5cbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSB0aGlzLml0ZW1zLmZpcnN0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIENoYW5nZSBhY3RpdmUgZWxlbWVudCAqL1xuICAgIGdvVG9JdGVtKGl0ZW06IENhcm91c2VsSXRlbUludGVyZmFjZSwgc21vb3RoPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBsZXQgaW5kZXggPSB0aGlzLl9nZXRJbmRleE9mSXRlbShpdGVtKTtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmluZmluaXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9jZW50ZXJBY3RpdmUoaW5kZXgpO1xuXG4gICAgICAgICAgICBpbmRleCA9IHRoaXMuX2dldEluZGV4T2ZJdGVtKGl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdHJhbnNpdGlvblRvSW5kZXgoaW5kZXgsIHNtb290aCk7XG4gICAgfVxuXG4gICAgLyoqIHBpY2sgbmV4dCBlbGVtZW50IGFuZCBzZXQgaXQgYWN0aXZlICovXG4gICAgcGlja05leHQoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gdGhpcy5pdGVtcy5maXJzdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFjdGl2ZUl0ZW1JbmRleCA9IHRoaXMuX2dldEluZGV4T2ZJdGVtKHRoaXMuYWN0aXZlKTtcbiAgICAgICAgY29uc3QgaXRlbVRvQWN0aXZhdGUgPSB0aGlzLml0ZW1zLmdldChhY3RpdmVJdGVtSW5kZXggKyAxKSA/PyB0aGlzLml0ZW1zLmZpcnN0O1xuXG4gICAgICAgIHRoaXMuZ29Ub0l0ZW0oaXRlbVRvQWN0aXZhdGUsIHRydWUpO1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IGl0ZW1Ub0FjdGl2YXRlO1xuICAgIH1cblxuICAgIC8qKiBwaWNrIHByZXZpb3VzIGVsZW1lbnQgYW5kIHNldCBpdCBhY3RpdmUgKi9cbiAgICBwaWNrUHJldmlvdXMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gdGhpcy5pdGVtcy5nZXQoMik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhY3RpdmVJdGVtSW5kZXggPSB0aGlzLl9nZXRJbmRleE9mSXRlbSh0aGlzLmFjdGl2ZSk7XG4gICAgICAgIGxldCBpdGVtVG9BY3RpdmF0ZSA9IHRoaXMuaXRlbXMuZ2V0KGFjdGl2ZUl0ZW1JbmRleCAtIDEpO1xuXG4gICAgICAgIC8vIGNhc2Ugd2hlcmUgc2xpZGVzIGNhbiBtb3ZlIGluZmluaXRlbHkgaW4gb25lIGRpcmVjdGlvblxuICAgICAgICAvLyBoYW5kbGUgY2FzZSB3aGVyZSBvbi1sb2FkIGFjdGl2ZUl0ZW1JbmRleCA9IDAgYW5kIGFjdGl2ZUl0ZW1JbmRleCAtIDEgcmV0dXJucyB1bmRlZmluZWQgaXRlbSBmcm9tIGl0ZW0gYXJyYXkuXG4gICAgICAgIGlmICghaXRlbVRvQWN0aXZhdGUpIHtcbiAgICAgICAgICAgIGl0ZW1Ub0FjdGl2YXRlID0gdGhpcy5pdGVtcy5sYXN0O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5nb1RvSXRlbShpdGVtVG9BY3RpdmF0ZSwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuYWN0aXZlID0gaXRlbVRvQWN0aXZhdGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jZW50ZXJBY3RpdmUoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5fZ2V0U2l6ZSh0aGlzLml0ZW1zLmZpcnN0KTtcbiAgICAgICAgaWYgKGlzTmFOKHNpemUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWlkZGxlSW5kZXggPSBNYXRoLmNlaWwodGhpcy5pdGVtcy5sZW5ndGggLyAyKTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gTWF0aC5jZWlsKHRoaXMuZWxlbWVudHNBdE9uY2UgLyAyKTtcbiAgICAgICAgY29uc3QgbWlzc2luZ0l0ZW1zID0gaW5kZXggKyBvZmZzZXQgLSBtaWRkbGVJbmRleDtcbiAgICAgICAgY29uc3QgYXJyYXkgPSB0aGlzLml0ZW1zLnRvQXJyYXkoKTtcblxuICAgICAgICBpZiAobWlzc2luZ0l0ZW1zID4gMCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaXNzaW5nSXRlbXM7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBhcnJheS5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIGl0ZW0gJiYgYXJyYXkucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTWF0aC5hYnMobWlzc2luZ0l0ZW1zKTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGFycmF5LnBvcCgpO1xuICAgICAgICAgICAgICAgIGl0ZW0gJiYgYXJyYXkudW5zaGlmdChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8qKiBDaGFuZ2luZyBvcmRlciBvZiBlbGVtZW50cyBpbiBRdWVyeUxpc3QgYW5kIE5hdGl2ZSBIVE1MICovXG4gICAgICAgIHRoaXMuaXRlbXMucmVzZXQoYXJyYXkpO1xuICAgICAgICB0aGlzLml0ZW1zLmZvckVhY2goKGl0ZW0pID0+IGl0ZW0uZWxlbWVudC5wYXJlbnROb2RlPy5hcHBlbmRDaGlsZChpdGVtLmVsZW1lbnQpKTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogRm9yIHByb3BlciBhbmltYXRpb24gaXQncyBuZWVkZWQgdG8gdHJhbnNmb3JtIGVsZW1lbnRzLFxuICAgICAgICAgKiBieSBjaGFuZ2luZyB0cmFuc2l0aW9uIGJ5IGFtb3VudCBvZiBlbGVtZW50cyBwbGFjZWQgYXQgdG9wL2JvdHRvbVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb24gPSAnMHMnO1xuICAgICAgICB0aGlzLl90cmFuc2l0aW9uQ2Fyb3VzZWwodGhpcy5fY3VycmVudFRyYW5zaXRpb25QeCArIHRoaXMuX2dldFNpemUodGhpcy5pdGVtcy5maXJzdCkgKiBtaXNzaW5nSXRlbXMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdHJhbnNpdGlvblRvSW5kZXgoaW5kZXg6IG51bWJlciwgc21vb3RoPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBsZXQgdHJhbnNpdGlvblB4OiBudW1iZXIgPSB0aGlzLl9nZXRTaXplKHRoaXMuaXRlbXMuZmlyc3QpICogaW5kZXg7XG5cbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb24gPSBzbW9vdGggPyB0aGlzLl9nZXRUcmFuc2l0aW9uKCkgOiAnMHMnO1xuXG4gICAgICAgIGlmICghdGhpcy5pc1J0bCB8fCAodGhpcy5jb25maWcudmVydGljYWwgJiYgdGhpcy5pc1J0bCkpIHtcbiAgICAgICAgICAgIHRyYW5zaXRpb25QeCA9IC10cmFuc2l0aW9uUHg7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl90cmFuc2l0aW9uQ2Fyb3VzZWwodHJhbnNpdGlvblB4KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBHZXQgY2xvc2VzIGVsZW1lbnQsIGJhc2VkIG9uIGN1cnJlbnQgdHJhbnNpdGlvbiAqL1xuICAgIHByaXZhdGUgX2dldENsb3Nlc3QoKTogQ2Fyb3VzZWxJdGVtSW50ZXJmYWNlIHtcbiAgICAgICAgLyoqIElmIHRyYW5zaXRpb24gaXMgcG9zaXRpdmUsIGl0IHNob3VsZCBnbyB0byBmaXJzdCBlbGVtZW50ICovXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLmNvbmZpZy5pbmZpbml0ZSAmJlxuICAgICAgICAgICAgKCghdGhpcy5jb25maWcudmVydGljYWwgJiZcbiAgICAgICAgICAgICAgICAoKCF0aGlzLmlzUnRsICYmIHRoaXMuX2N1cnJlbnRUcmFuc2l0aW9uUHggPiAwKSB8fCAodGhpcy5pc1J0bCAmJiB0aGlzLl9jdXJyZW50VHJhbnNpdGlvblB4IDwgMCkpKSB8fFxuICAgICAgICAgICAgICAgICh0aGlzLmNvbmZpZy52ZXJ0aWNhbCAmJiB0aGlzLl9jdXJyZW50VHJhbnNpdGlvblB4ID4gMCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXMuZmlyc3Q7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5fZ2V0U2l6ZSh0aGlzLml0ZW1zLmZpcnN0KTtcblxuICAgICAgICAvKiogV2hlbiBzY3JvbGwgaXMgYWZ0ZXIgaGFsZiBvZiBlbGVtZW50LCB0aGVuIGV4dCBvbmUgc2hvdWxkIGJlIGFjdGl2ZSAqL1xuICAgICAgICBjb25zdCBoYWxmQXBwcm9hY2hlZDogYm9vbGVhbiA9IE1hdGguYWJzKHRoaXMuX2N1cnJlbnRUcmFuc2l0aW9uUHggJSBzaXplKSA+IHNpemUgLyAyO1xuICAgICAgICAvKipcbiAgICAgICAgICogSW5kZXggYmFzZWQgb24gdHJhbnNpdGlvbiBweCBkaXZpZGVkIGJ5IHNpemUgb2YgZWxlbWVudHMsXG4gICAgICAgICAqIGV2ZXJ5IGVsZW1lbnQgc2hvdWxkIGhhdmUgc2FtZSB3aWR0aCwgb3RoZXJ3aXNlIGl0IHNob3VsZCBiZSBsb29wZWQgdGhyb3VnaCBhbGwgZWxlbWVudHMsXG4gICAgICAgICAqIHdoaWNoIGlzIG5vdCBnb29kIGZvciBwZXJmb3JtYW5jZVxuICAgICAgICAgKi9cbiAgICAgICAgbGV0IGluZGV4ID0gTWF0aC5jZWlsKE1hdGguYWJzKHRoaXMuX2N1cnJlbnRUcmFuc2l0aW9uUHggLyBzaXplKSk7XG5cbiAgICAgICAgLy8gV2hlbiBlbGVtZW50c0F0T25jZSA+IDEsIHN3aXBpbmcgc2hvdWxkIHN0b3AgYXQgbGFzdCBpbmRleCAtIGVsZW1lbnRzQXRPbmNlXG4gICAgICAgIGNvbnN0IGVsZW1lbnRzQXRPbmNlID0gdGhpcy5lbGVtZW50c0F0T25jZTtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5pbmZpbml0ZSAmJiBlbGVtZW50c0F0T25jZSA+IDEpIHtcbiAgICAgICAgICAgIC8vIFdoZW4gdGhlcmUncmUgbGVzcyBpdGVtcyBpbiB0aGUgY2Fyb3VzZWwgdGhhbiB0aGUgYXJlYSBtaWdodCBkaXNwbGF5LCBpdCBzaG91bGQgc3RvcCB0byBmaXJzdFxuICAgICAgICAgICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoIDwgZWxlbWVudHNBdE9uY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtcy5maXJzdDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGluZGV4ICsgZWxlbWVudHNBdE9uY2UgPj0gdGhpcy5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtcy5nZXQodGhpcy5pdGVtcy5sZW5ndGggLSBlbGVtZW50c0F0T25jZSkgPz8gdGhpcy5pdGVtcy5maXJzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGluZGV4ID0gaW5kZXggKyAoaGFsZkFwcHJvYWNoZWQgPyAwIDogLTEpO1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtcy5nZXQoaW5kZXgpO1xuXG4gICAgICAgIC8qKiBDaGVja2luZyBpZiB0cmFuc2l0aW9uIHdlbnQgb3V0IG9mIHNjb3BlIG9mIGFycmF5ICovXG4gICAgICAgIHJldHVybiBpdGVtIHx8IHRoaXMuaXRlbXMubGFzdDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldEluZGV4T2ZJdGVtKGl0ZW0/OiBDYXJvdXNlbEl0ZW1JbnRlcmZhY2UpOiBudW1iZXIge1xuICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5pdGVtcy50b0FycmF5KCkuZmluZEluZGV4KChfaXRlbSkgPT4gX2l0ZW0gPT09IGl0ZW0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEdldHRpbmcgc2l6ZSBvZiBjYXJvdXNlbCwgd2lkdGggZm9yIGhvcml6b250YWwsIGhlaWdodCBmb3IgdmVydGljYWwgKi9cbiAgICBwcml2YXRlIF9nZXRTaXplKGl0ZW06IENhcm91c2VsSXRlbUludGVyZmFjZSk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZ2V0SGVpZ2h0KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXRlbS5nZXRXaWR0aCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlUGFuKGRlbHRhOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBkZWx0YSAtIHRoaXMuX2xhc3REaXN0YW5jZTtcblxuICAgICAgICB0aGlzLl9sYXN0RGlzdGFuY2UgPSBkZWx0YTtcblxuICAgICAgICB0aGlzLl90cmFuc2l0aW9uQ2Fyb3VzZWwodGhpcy5fY3VycmVudFRyYW5zaXRpb25QeCArIGRpc3RhbmNlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2hhbmRsZVBhbkVuZChkZWx0YTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2hhbmRsZVBhbihkZWx0YSk7XG5cbiAgICAgICAgY29uc3QgY2xvc2VzdEl0ZW06IENhcm91c2VsSXRlbUludGVyZmFjZSA9IHRoaXMuX2dldENsb3Nlc3QoKTtcblxuICAgICAgICB0aGlzLmdvVG9JdGVtKGNsb3Nlc3RJdGVtLCB0cnVlKTtcblxuICAgICAgICBpZiAoIXRoaXMuYWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IGNsb3Nlc3RJdGVtO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVDaGFuZ2UkLmVtaXQoe1xuICAgICAgICAgICAgICAgIGl0ZW06IGNsb3Nlc3RJdGVtLFxuICAgICAgICAgICAgICAgIGFmdGVyOiBkZWx0YSA8IDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aXZlICE9PSBjbG9zZXN0SXRlbSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSBjbG9zZXN0SXRlbTtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlQ2hhbmdlJC5lbWl0KHtcbiAgICAgICAgICAgICAgICBpdGVtOiBjbG9zZXN0SXRlbSxcbiAgICAgICAgICAgICAgICBhZnRlcjogZGVsdGEgPCAwXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZHJhZ1N0YXRlQ2hhbmdlJC5lbWl0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5fbGFzdERpc3RhbmNlID0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEFuaW1hdGVzIHRoZSBjYXJvdXNlbCB0byB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHNsaWRlLlxuICAgICAqL1xuICAgIHByaXZhdGUgX3RyYW5zaXRpb25DYXJvdXNlbCh0cmFuc2l0aW9uUHg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jdXJyZW50VHJhbnNpdGlvblB4ID0gdHJhbnNpdGlvblB4O1xuICAgICAgICBjb25zdCBheGlzID0gdGhpcy5jb25maWcudmVydGljYWwgPyAnWScgOiAnWCc7XG5cbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlJHtheGlzfSgke3RoaXMuX2N1cnJlbnRUcmFuc2l0aW9uUHh9cHgpYDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBQYW0gU3RhcnQgaGFuZGxlciwgcmVtb3ZlcyB0cmFuc2l0aW9uIGR1cmF0aW9uLCAqL1xuICAgIHByaXZhdGUgX2hhbmRsZVBhblN0YXJ0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbiA9ICcwcyc7XG4gICAgICAgIHRoaXMuZHJhZ1N0YXRlQ2hhbmdlJC5lbWl0KHRydWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0dXBHZXN0dXJlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2V0dXBEcmFnU3RhcnQoKTtcbiAgICAgICAgdGhpcy5fc2V0dXBEcmFnKCk7XG4gICAgICAgIHRoaXMuX3NldHVwRHJhZ0VuZCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaWJlVG9FdmVudHMoXG4gICAgICAgIGV2ZW50czogc3RyaW5nW10sXG4gICAgICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgRG9jdW1lbnQsXG4gICAgICAgIGNhbGxiYWNrOiAoZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KSA9PiB2b2lkXG4gICAgKTogdm9pZCB7XG4gICAgICAgIG1lcmdlKGV2ZW50cy5tYXAoKGUpID0+IGZyb21FdmVudDxNb3VzZUV2ZW50IHwgVG91Y2hFdmVudD4oZWxlbWVudCwgZSwgeyBwYXNzaXZlOiB0cnVlIH0pKSkuZm9yRWFjaChcbiAgICAgICAgICAgIChldnQ6IE9ic2VydmFibGU8TW91c2VFdmVudCB8IFRvdWNoRXZlbnQ+KSA9PiB7XG4gICAgICAgICAgICAgICAgZXZ0LnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldHVwRHJhZ1N0YXJ0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBldmVudHMgPSBbJ21vdXNlZG93bicsICd0b3VjaHN0YXJ0J107XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaWJlVG9FdmVudHMoZXZlbnRzLCB0aGlzLl9lbGVtZW50LCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xpc3RlblRvTW91c2VNb3ZlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2xhc3REcmFnUG9zaXRpb24gPSB0aGlzLl9pbml0aWFsRHJhZ1Bvc2l0aW9uID0gdGhpcy5fZ2V0RHJhZ0Nvb3JkaW5hdGUoZXZlbnQpO1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlUGFuU3RhcnQoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXR1cERyYWcoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IFsnbW91c2Vtb3ZlJywgJ3RvdWNobW92ZSddO1xuXG4gICAgICAgIGlmICghdGhpcy5fZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgQ291bGQgbm90IHNldHVwIGRyYWcgZXZlbnQgc3Vic2NyaXB0aW9uLiBFeHBlY3RlZCB0byBnZXQgZG9jdW1lbnQgcmVmLCBnb3QgJHt0aGlzLl9kb2N1bWVudH0gaW5zdGVhZGBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zdWJzY3JpYmVUb0V2ZW50cyhldmVudHMsIHRoaXMuX2RvY3VtZW50LCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvb3JkaW5hdGUgPSB0aGlzLl9nZXREcmFnQ29vcmRpbmF0ZShldmVudCk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fbGlzdGVuVG9Nb3VzZU1vdmUgfHwgY29vcmRpbmF0ZSA9PT0gdGhpcy5fbGFzdERyYWdQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fZHJhZ1N0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlUGFuKHRoaXMuX2dldERyYWdnZWREZWx0YShjb29yZGluYXRlKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0dXBEcmFnRW5kKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBldmVudHMgPSBbJ21vdXNldXAnLCAndG91Y2hlbmQnXTtcblxuICAgICAgICBpZiAoIXRoaXMuX2RvY3VtZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYENvdWxkIG5vdCBzZXR1cCBkcmFnIGV2ZW50IHN1YnNjcmlwdGlvbi4gRXhwZWN0ZWQgdG8gZ2V0IGRvY3VtZW50IHJlZiwgZ290ICR7dGhpcy5fZG9jdW1lbnR9IGluc3RlYWRgXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaWJlVG9FdmVudHMoZXZlbnRzLCB0aGlzLl9kb2N1bWVudCwgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2xpc3RlblRvTW91c2VNb3ZlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5fZHJhZ1N0YXJ0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVQYW5FbmQodGhpcy5fZ2V0RHJhZ2dlZERlbHRhKHRoaXMuX2dldERyYWdDb29yZGluYXRlKGV2ZW50KSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdTdGF0ZUNoYW5nZSQuZW1pdChmYWxzZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2xpc3RlblRvTW91c2VNb3ZlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9kcmFnU3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldFRyYW5zaXRpb24oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnPy50cmFuc2l0aW9uID8/IERFRkFVTFRfVFJBTlNJVElPTl9EVVJBVElPTjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldERyYWdnZWREZWx0YShvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHRoaXMuX2xhc3REcmFnUG9zaXRpb24gPSBvZmZzZXQ7XG5cbiAgICAgICAgcmV0dXJuIG9mZnNldCAtIHRoaXMuX2luaXRpYWxEcmFnUG9zaXRpb247XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXREcmFnQ29vcmRpbmF0ZShldmVudDogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQpOiBudW1iZXIge1xuICAgICAgICBsZXQgY29vcmRpbmF0ZXM6IFRvdWNoIHwgTW91c2VFdmVudDtcblxuICAgICAgICBpZiAodGhpcy5faXNUb3VjaEV2ZW50KGV2ZW50KSkge1xuICAgICAgICAgICAgY29vcmRpbmF0ZXMgPSBldmVudC50b3VjaGVzWzBdIHx8IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29vcmRpbmF0ZXMgPSBldmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy52ZXJ0aWNhbCA/IGNvb3JkaW5hdGVzLnBhZ2VZIDogY29vcmRpbmF0ZXMucGFnZVg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pc1RvdWNoRXZlbnQoZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KTogZXZlbnQgaXMgVG91Y2hFdmVudCB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuVG91Y2hFdmVudCAmJiBldmVudCBpbnN0YW5jZW9mIFRvdWNoRXZlbnQ7XG4gICAgfVxufVxuIl19
|