@sabstravtech/obtservices 0.0.19020100 → 0.0.22041208
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/angular/components/with-component.d.ts +2 -1
- package/angular/fetchers.d.ts +17 -12
- package/angular/lib/vendor/classes/helpers.d.ts +8 -0
- package/angular/lib/vendor/fetchers/apply-JIT-hotel-rules.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/apply-jit-flight-rules.d.ts +7 -0
- package/angular/lib/vendor/fetchers/basket-fetcher.d.ts +2 -1
- package/angular/lib/vendor/fetchers/conferma-office.fetcher.d.ts +2 -1
- package/angular/lib/vendor/fetchers/flight-fare-rules.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/flight-quote.fetcher.d.ts +2 -1
- package/angular/lib/vendor/fetchers/get-conferma-room-images.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-covid-microsite-token.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-flight-seat-map-fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-rail-live-departures.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-user-favourite-searches.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/irl-discount-card-fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/search-airlines-fetcher.d.ts +2 -1
- package/angular/lib/vendor/fetchers/search-airports-fetcher.d.ts +2 -1
- package/angular/lib/vendor/fetchers/search-conferma-cities.fetcher.d.ts +2 -1
- package/angular/lib/vendor/fetchers/user-fetcher.d.ts +2 -1
- package/angular/lib/vendor/services/my-bookings.service.d.ts +4 -3
- package/angular/lib/vendor/services/search.service.d.ts +15 -3
- package/angular/lib/vendor/services/user.service.d.ts +4 -3
- package/angular/lib/vendor/types/graphql.angular.types.d.ts +1062 -1062
- package/angular/lib/vendor/updaters/cancel-booking-updater.d.ts +6 -0
- package/angular/lib/vendor/updaters/confirm-messages-updater.d.ts +6 -0
- package/angular/lib/vendor/updaters/remove-favourite-search.updater.d.ts +6 -0
- package/angular/lib/vendor/updaters/save-favourite-search.updater.d.ts +6 -0
- package/angular/sabstravtech-obtservices-angular.d.ts +14 -9
- package/angular/sabstravtech-obtservices-angular.metadata.json +1 -1
- package/angular/updaters.d.ts +3 -0
- package/base/classes.d.ts +1 -0
- package/base/fetchers.d.ts +27 -3
- package/base/interfaces.d.ts +3 -3
- package/base/lib/vendor/classes/base-enterprise.d.ts +5 -2
- package/base/lib/vendor/classes/bookable-basket.d.ts +1 -1
- package/base/lib/vendor/classes/cabhire-enterprise-search.d.ts +8 -7
- package/base/lib/vendor/classes/carhire-enterprise-search.d.ts +11 -2
- package/base/lib/vendor/classes/enviroment.d.ts +2 -0
- package/base/lib/vendor/classes/eurostar-enterprise-search.d.ts +26 -69
- package/base/lib/vendor/classes/flight-enterprise-search.d.ts +39 -22
- package/base/lib/vendor/classes/helpers.d.ts +49 -6
- package/base/lib/vendor/classes/hotel-enterprise-search.d.ts +19 -8
- package/base/lib/vendor/classes/irl-direction.enum.d.ts +4 -0
- package/base/lib/vendor/classes/irl-enterprise-search.d.ts +285 -30
- package/base/lib/vendor/classes/lounges-enterprise-search.d.ts +7 -3
- package/base/lib/vendor/classes/management-info-and-valid.d.ts +1 -0
- package/base/lib/vendor/classes/modal-types.enum.d.ts +4 -0
- package/base/lib/vendor/classes/parking-enterprise-search.d.ts +7 -3
- package/base/lib/vendor/classes/rail-direction.enum.d.ts +2 -2
- package/base/lib/vendor/classes/rail-enterprise-search.d.ts +83 -54
- package/base/lib/vendor/classes/rail-index-to-ticket.d.ts +9 -0
- package/base/lib/vendor/classes/supplementary-booking-info-impl.d.ts +1 -0
- package/base/lib/vendor/classes/user-favourite.enum.d.ts +3 -0
- package/base/lib/vendor/fetchers/apply-JIT-hotel-rules.fetcher.d.ts +23 -0
- package/base/lib/vendor/fetchers/apply-jit-flight-rules.d.ts +21 -0
- package/base/lib/vendor/fetchers/basket-fetcher.d.ts +2 -1
- package/base/lib/vendor/fetchers/conferma-office.fetcher.d.ts +2 -1
- package/base/lib/vendor/fetchers/flight-fare-rules.fetcher.d.ts +21 -0
- package/base/lib/vendor/fetchers/flight-quote.fetcher.d.ts +6 -2
- package/base/lib/vendor/fetchers/get-conferma-room-images.fetcher.d.ts +21 -0
- package/base/lib/vendor/fetchers/get-covid-microsite-token.fetcher.d.ts +21 -0
- package/base/lib/vendor/fetchers/get-flight-seat-map-fetcher.d.ts +21 -0
- package/base/lib/vendor/fetchers/get-rail-live-departures.fetcher.d.ts +21 -0
- package/base/lib/vendor/fetchers/get-user-favourite-searches.fetcher.d.ts +21 -0
- package/base/lib/vendor/fetchers/irl-discount-card-fetcher.d.ts +21 -0
- package/base/lib/vendor/fetchers/list-fetchable-enterprise.d.ts +1 -1
- package/base/lib/vendor/fetchers/object-fetchable-enterprise.d.ts +3 -1
- package/base/lib/vendor/fetchers/search-airlines.fetcher.d.ts +2 -1
- package/base/lib/vendor/fetchers/search-airports-fetcher.d.ts +2 -1
- package/base/lib/vendor/fetchers/search-conferma-cities.fetcher.d.ts +2 -1
- package/base/lib/vendor/fetchers/user-fetcher.d.ts +2 -1
- package/base/lib/vendor/interfaces/Icabhire-enterprise-search.d.ts +3 -2
- package/base/lib/vendor/interfaces/Icarhire-enterprise-search.d.ts +4 -1
- package/base/lib/vendor/interfaces/Ienterprise-basket.service.d.ts +4 -3
- package/base/lib/vendor/interfaces/Ieurostar-enterprise-search.d.ts +8 -4
- package/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +15 -4
- package/base/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +8 -22
- package/base/lib/vendor/interfaces/Iirl-enterprise-search.d.ts +15 -10
- package/base/lib/vendor/interfaces/Ilounges-enterprise-search.d.ts +4 -2
- package/base/lib/vendor/interfaces/Imybookings.service.d.ts +2 -1
- package/base/lib/vendor/interfaces/Iparking-enterprise-search.d.ts +3 -2
- package/base/lib/vendor/interfaces/Irail-enterprise-search.d.ts +31 -31
- package/base/lib/vendor/interfaces/Isearch.service.d.ts +12 -3
- package/base/lib/vendor/interfaces/Iuser.service.d.ts +3 -1
- package/base/lib/vendor/interfaces/cab-hire-search-arg.interface.d.ts +10 -0
- package/base/lib/vendor/interfaces/car-hire-search-arg.interface.d.ts +42 -0
- package/base/lib/vendor/interfaces/enable-fresh-chat-interface.d.ts +7 -0
- package/base/lib/vendor/interfaces/eurostar-search-arg.interface.d.ts +6 -0
- package/base/lib/vendor/interfaces/flight-filters.interface.d.ts +1 -0
- package/base/lib/vendor/interfaces/flight-search-args.interface.d.ts +8 -0
- package/base/lib/vendor/interfaces/hotel-recent-search-args.interface.d.ts +4 -0
- package/base/lib/vendor/interfaces/irl-search-arg.interface.d.ts +5 -0
- package/base/lib/vendor/interfaces/rail-basket-item.interface.d.ts +11 -5
- package/base/lib/vendor/interfaces/rail-recent-search-args.interface.d.ts +16 -11
- package/base/lib/vendor/interfaces/rail-selected-ticket.interface.d.ts +4 -9
- package/base/lib/vendor/interfaces/summary-interface.d.ts +23 -0
- package/base/lib/vendor/interfaces/terms-and-conditions.interface.d.ts +4 -0
- package/base/lib/vendor/interfaces/user.data.d.ts +1 -0
- package/base/lib/vendor/services/enterprise-basket.service.d.ts +5 -3
- package/base/lib/vendor/services/hotel-avallibility.service.d.ts +5 -3
- package/base/lib/vendor/services/my-bookings.service.d.ts +6 -3
- package/base/lib/vendor/services/search.service.d.ts +46 -10
- package/base/lib/vendor/services/user.service.d.ts +9 -4
- package/base/lib/vendor/types/graphql.types.d.ts +982 -1051
- package/base/lib/vendor/types/types.d.ts +187 -14
- package/base/lib/vendor/updaters/cancel-booking-updater.d.ts +20 -0
- package/base/lib/vendor/updaters/confirm-messages-updater.d.ts +19 -0
- package/base/lib/vendor/updaters/remove-favourite-search-updater.d.ts +19 -0
- package/base/lib/vendor/updaters/save-favourite-search-updater.d.ts +20 -0
- package/base/sabstravtech-obtservices-base.metadata.json +1 -1
- package/base/updaters.d.ts +4 -0
- package/bundles/sabstravtech-obtservices-angular.umd.js +763 -158
- package/bundles/sabstravtech-obtservices-angular.umd.js.map +1 -1
- package/bundles/sabstravtech-obtservices-angular.umd.min.js +1 -1
- package/bundles/sabstravtech-obtservices-angular.umd.min.js.map +1 -1
- package/bundles/sabstravtech-obtservices-base.umd.js +8805 -7342
- package/bundles/sabstravtech-obtservices-base.umd.js.map +1 -1
- package/bundles/sabstravtech-obtservices-base.umd.min.js +2 -2
- package/bundles/sabstravtech-obtservices-base.umd.min.js.map +1 -1
- package/esm2015/angular/components/basket-panel.js +9 -5
- package/esm2015/angular/components/with-component.js +7 -4
- package/esm2015/angular/fetchers.js +18 -13
- package/esm2015/angular/lib/vendor/classes/helpers.js +21 -4
- package/esm2015/angular/lib/vendor/fetchers/apply-JIT-hotel-rules.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/apply-jit-flight-rules.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/basket-fetcher.js +8 -5
- package/esm2015/angular/lib/vendor/fetchers/conferma-office.fetcher.js +8 -5
- package/esm2015/angular/lib/vendor/fetchers/flight-fare-rules.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/flight-quote.fetcher.js +8 -5
- package/esm2015/angular/lib/vendor/fetchers/get-conferma-room-images.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-covid-microsite-token.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-flight-seat-map-fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-rail-live-departures.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-user-favourite-searches.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/irl-discount-card-fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/search-airlines-fetcher.js +8 -5
- package/esm2015/angular/lib/vendor/fetchers/search-airports-fetcher.js +8 -5
- package/esm2015/angular/lib/vendor/fetchers/search-conferma-cities.fetcher.js +8 -5
- package/esm2015/angular/lib/vendor/fetchers/user-fetcher.js +8 -5
- package/esm2015/angular/lib/vendor/services/my-bookings.service.js +8 -5
- package/esm2015/angular/lib/vendor/services/search.service.js +69 -33
- package/esm2015/angular/lib/vendor/services/user.service.js +9 -6
- package/esm2015/angular/lib/vendor/types/graphql.angular.types.js +1467 -2520
- package/esm2015/angular/lib/vendor/updaters/cancel-booking-updater.js +22 -0
- package/esm2015/angular/lib/vendor/updaters/confirm-messages-updater.js +22 -0
- package/esm2015/angular/lib/vendor/updaters/remove-favourite-search.updater.js +22 -0
- package/esm2015/angular/lib/vendor/updaters/save-favourite-search.updater.js +22 -0
- package/esm2015/angular/obtservices.module.js +17 -1
- package/esm2015/angular/sabstravtech-obtservices-angular.js +15 -10
- package/esm2015/angular/updaters.js +4 -1
- package/esm2015/base/classes.js +2 -1
- package/esm2015/base/fetchers.js +28 -4
- package/esm2015/base/interfaces.js +4 -4
- package/esm2015/base/lib/vendor/classes/base-enterprise.js +14 -14
- package/esm2015/base/lib/vendor/classes/bookable-basket.js +11 -6
- package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +76 -103
- package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +121 -18
- package/esm2015/base/lib/vendor/classes/enviroment.js +3 -1
- package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +540 -677
- package/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +676 -298
- package/esm2015/base/lib/vendor/classes/helpers.js +260 -70
- package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +289 -123
- package/esm2015/base/lib/vendor/classes/irl-direction.enum.js +6 -0
- package/esm2015/base/lib/vendor/classes/irl-enterprise-search.js +412 -694
- package/esm2015/base/lib/vendor/classes/lounges-enterprise-search.js +98 -5
- package/esm2015/base/lib/vendor/classes/management-info-and-valid.js +49 -30
- package/esm2015/base/lib/vendor/classes/modal-types.enum.js +5 -1
- package/esm2015/base/lib/vendor/classes/parking-enterprise-search.js +61 -5
- package/esm2015/base/lib/vendor/classes/rail-direction.enum.js +3 -3
- package/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +1024 -682
- package/esm2015/base/lib/vendor/classes/rail-index-to-ticket.js +48 -0
- package/esm2015/base/lib/vendor/classes/supplementary-booking-info-impl.js +16 -4
- package/esm2015/base/lib/vendor/classes/user-favourite.enum.js +4 -1
- package/esm2015/base/lib/vendor/fetchers/apply-JIT-hotel-rules.fetcher.js +22 -0
- package/esm2015/base/lib/vendor/fetchers/apply-jit-flight-rules.js +10 -0
- package/esm2015/base/lib/vendor/fetchers/basket-fetcher.js +3 -3
- package/esm2015/base/lib/vendor/fetchers/conferma-office.fetcher.js +3 -3
- package/esm2015/base/lib/vendor/fetchers/flight-fare-rules.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/flight-quote.fetcher.js +12 -4
- package/esm2015/base/lib/vendor/fetchers/get-conferma-room-images.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-covid-microsite-token.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-flight-seat-map-fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-rail-live-departures.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-user-favourite-searches.fetcher.js +10 -0
- package/esm2015/base/lib/vendor/fetchers/irl-discount-card-fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/list-fetchable-enterprise.js +5 -3
- package/esm2015/base/lib/vendor/fetchers/object-fetchable-enterprise.js +4 -3
- package/esm2015/base/lib/vendor/fetchers/search-airlines.fetcher.js +3 -3
- package/esm2015/base/lib/vendor/fetchers/search-airports-fetcher.js +3 -3
- package/esm2015/base/lib/vendor/fetchers/search-conferma-cities.fetcher.js +3 -3
- package/esm2015/base/lib/vendor/fetchers/user-fetcher.js +3 -3
- package/esm2015/base/lib/vendor/interfaces/Icabhire-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Icarhire-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ienterprise-basket.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ieurostar-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +7 -1
- package/esm2015/base/lib/vendor/interfaces/Ihotel-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iirl-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ilounges-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Imybookings.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iparking-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Irail-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Isearch.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iuser.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/cab-hire-search-arg.interface.js +2 -0
- package/esm2015/base/lib/vendor/interfaces/car-hire-search-arg.interface.js +3 -0
- package/esm2015/base/lib/vendor/interfaces/enable-fresh-chat-interface.js +3 -0
- package/esm2015/base/lib/vendor/interfaces/eurostar-search-arg.interface.js +2 -0
- package/esm2015/base/lib/vendor/interfaces/flight-filters.interface.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/flight-search-args.interface.js +2 -0
- package/esm2015/base/lib/vendor/interfaces/hotel-recent-search-args.interface.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/irl-search-arg.interface.js +2 -0
- package/esm2015/base/lib/vendor/interfaces/rail-basket-item.interface.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/rail-recent-search-args.interface.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/rail-selected-ticket.interface.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/summary-interface.js +2 -0
- package/esm2015/base/lib/vendor/interfaces/terms-and-conditions.interface.js +2 -0
- package/esm2015/base/lib/vendor/interfaces/user.data.js +1 -1
- package/esm2015/base/lib/vendor/services/enterprise-basket.service.js +107 -57
- package/esm2015/base/lib/vendor/services/hotel-avallibility.service.js +43 -5
- package/esm2015/base/lib/vendor/services/my-bookings.service.js +6 -2
- package/esm2015/base/lib/vendor/services/search.service.js +110 -46
- package/esm2015/base/lib/vendor/services/user.service.js +13 -2
- package/esm2015/base/lib/vendor/types/graphql.types.js +35 -28
- package/esm2015/base/lib/vendor/types/types.js +35 -2
- package/esm2015/base/lib/vendor/updaters/cancel-booking-updater.js +11 -0
- package/esm2015/base/lib/vendor/updaters/confirm-messages-updater.js +11 -0
- package/esm2015/base/lib/vendor/updaters/remove-favourite-search-updater.js +11 -0
- package/esm2015/base/lib/vendor/updaters/save-favourite-search-updater.js +11 -0
- package/esm2015/base/updaters.js +5 -1
- package/fesm2015/sabstravtech-obtservices-angular.js +1554 -2350
- package/fesm2015/sabstravtech-obtservices-angular.js.map +1 -1
- package/fesm2015/sabstravtech-obtservices-base.js +8088 -6752
- package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
- package/package.json +1 -1
- package/base/lib/vendor/interfaces/rail-journey-leg.interface.d.ts +0 -6
- package/base/lib/vendor/interfaces/rail-ticket-group.interface.d.ts +0 -26
- package/base/lib/vendor/interfaces/rail-ticket-groups.interface.d.ts +0 -4
- package/esm2015/base/lib/vendor/interfaces/rail-journey-leg.interface.js +0 -2
- package/esm2015/base/lib/vendor/interfaces/rail-ticket-group.interface.js +0 -2
- package/esm2015/base/lib/vendor/interfaces/rail-ticket-groups.interface.js +0 -2
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
2
|
import moment from 'moment';
|
|
3
3
|
import { BaseEnterpriseSearch } from './base-enterprise';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { BaseHelperRoutines } from './helpers';
|
|
5
|
+
import { BehaviorSubject, Subject } from 'rxjs';
|
|
6
6
|
import { CabHireVehicleType, ServiceType } from '../types/graphql.types';
|
|
7
7
|
import { AirportSearchMode, TaxiFormMode } from '../interfaces/Icabhire-enterprise-search';
|
|
8
|
-
import { map, take } from 'rxjs/operators';
|
|
9
8
|
export class CabHireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
10
9
|
constructor(cabfetcher, helpers, storageService, searchService, basketService) {
|
|
11
|
-
super(storageService);
|
|
10
|
+
super(storageService, helpers);
|
|
12
11
|
this.cabfetcher = cabfetcher;
|
|
13
|
-
this.helpers = helpers;
|
|
14
12
|
this.searchService = searchService;
|
|
15
13
|
this.basketService = basketService;
|
|
16
14
|
this.type = ServiceType.Cab;
|
|
@@ -53,9 +51,7 @@ export class CabHireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
53
51
|
},
|
|
54
52
|
{ enabled: false, key: 'wait_and_return', value: 'Wait And Return' }
|
|
55
53
|
];
|
|
56
|
-
this.searchTypes = [
|
|
57
|
-
'One-way', 'Return'
|
|
58
|
-
];
|
|
54
|
+
this.searchTypes = ['One-way', 'Return'];
|
|
59
55
|
this.airportSearchTypes = ['Airport drop off', 'Airport Pick Up'];
|
|
60
56
|
this.criteria = ['Pick Up Time'];
|
|
61
57
|
this.mode = TaxiFormMode.ADDRESS;
|
|
@@ -259,7 +255,7 @@ export class CabHireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
259
255
|
this.minReturnSelectDate = {
|
|
260
256
|
day: moment(value).date(),
|
|
261
257
|
month: moment(value).month() + 1,
|
|
262
|
-
year: moment(value).year()
|
|
258
|
+
year: moment(value).year()
|
|
263
259
|
};
|
|
264
260
|
if (value.isAfter(this.returnDateTime)) {
|
|
265
261
|
this.returnDateTime.set('date', value.date());
|
|
@@ -385,8 +381,7 @@ export class CabHireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
385
381
|
try {
|
|
386
382
|
this.storageService.removeSessionItem(CabHireEnterpriseSearch.SECONDARY_STORAGE_SESSION_PARAMS);
|
|
387
383
|
}
|
|
388
|
-
catch (error) {
|
|
389
|
-
}
|
|
384
|
+
catch (error) { }
|
|
390
385
|
this._searchType = this.searchTypes[0]; // reset to one-way
|
|
391
386
|
this._isValid();
|
|
392
387
|
}
|
|
@@ -416,7 +411,8 @@ export class CabHireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
416
411
|
if (this.tempParams.adults + this.tempParams.children < 1) {
|
|
417
412
|
this.validationMessages.push('There must be at least 1 traveller');
|
|
418
413
|
}
|
|
419
|
-
if (this.searchType === this.searchTypes[1] &&
|
|
414
|
+
if (this.searchType === this.searchTypes[1] &&
|
|
415
|
+
this.returnDateTime.isSameOrBefore(this.departs)) {
|
|
420
416
|
this.validationMessages.push('Return Date/Time must be after outbound date/time');
|
|
421
417
|
}
|
|
422
418
|
this.isValid.next(this.validationMessages.length === 0);
|
|
@@ -431,7 +427,8 @@ export class CabHireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
431
427
|
this.results.next([]);
|
|
432
428
|
this.multiResults.next([]);
|
|
433
429
|
if (this.isValid.value) {
|
|
434
|
-
if (this.searchType === this.searchTypes[1]) {
|
|
430
|
+
if (this.searchType === this.searchTypes[1]) {
|
|
431
|
+
// return - kick off two searches
|
|
435
432
|
const query = this.getSearchQuery();
|
|
436
433
|
const returnQuery = this.getReturnSearchQuery();
|
|
437
434
|
console.log('+++ Search Query: ', query, ' +++');
|
|
@@ -446,7 +443,7 @@ export class CabHireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
446
443
|
}
|
|
447
444
|
else {
|
|
448
445
|
const query = this.getSearchQuery();
|
|
449
|
-
this.searchService.saveRecentSearch(this.getRecentSearchQuery(
|
|
446
|
+
this.searchService.saveRecentSearch(this.getRecentSearchQuery(this.getSearchQuery()));
|
|
450
447
|
return this._startSearch(this.cabfetcher.fetchList(this.helpers.removeNulls(query)));
|
|
451
448
|
}
|
|
452
449
|
}
|
|
@@ -455,58 +452,36 @@ export class CabHireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
455
452
|
}
|
|
456
453
|
}
|
|
457
454
|
getRecentSearchQuery(query) {
|
|
455
|
+
const recentSearchQuery = this.updateSerchQuery(query);
|
|
458
456
|
return {
|
|
459
457
|
serviceType: ServiceType.Cab,
|
|
460
|
-
searchArgs:
|
|
458
|
+
searchArgs: recentSearchQuery,
|
|
461
459
|
travelDate: this.departs.format(),
|
|
462
460
|
travellers: this.helpers.getTravellersId(this.travellers)
|
|
463
461
|
};
|
|
464
462
|
}
|
|
463
|
+
updateSerchQuery(query) {
|
|
464
|
+
const searchQuery = query;
|
|
465
|
+
searchQuery.fromAddress = this.tempParams.fromAddress;
|
|
466
|
+
searchQuery.toAddress = this.tempParams.toAddress;
|
|
467
|
+
searchQuery.fromStation = this.tempParams.fromStation;
|
|
468
|
+
searchQuery.toStation = this.tempParams.toStation;
|
|
469
|
+
searchQuery.viasFrom = this.viasFrom;
|
|
470
|
+
searchQuery.viasTo = this.viasTo;
|
|
471
|
+
return searchQuery;
|
|
472
|
+
}
|
|
465
473
|
startRecentSearch(recentSearch) {
|
|
466
474
|
this.departs = moment(recentSearch.searchArgs.departs);
|
|
467
475
|
this.vehicleType = recentSearch.searchArgs.vehicleType;
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
this.fromAddress = this.convertAddressLocation(recentSearch.searchArgs.fromLocation.address, recentSearch.searchArgs.fromLocation.postcode);
|
|
478
|
-
}
|
|
479
|
-
if (toStationOrAirport.length) {
|
|
480
|
-
this.toStation = this.getStationOrAirportAdress(toStationOrAirport[0]);
|
|
481
|
-
this.toAddress = this.convertStationOrAirportLocation(recentSearch.searchArgs.toLocation.address, recentSearch.searchArgs.toLocation.postcode);
|
|
482
|
-
}
|
|
483
|
-
else {
|
|
484
|
-
this.toAddress = this.convertAddressLocation(recentSearch.searchArgs.toLocation.address, recentSearch.searchArgs.toLocation.postcode);
|
|
485
|
-
}
|
|
486
|
-
if (recentSearch.searchArgs.vias[0]) {
|
|
487
|
-
this.getStationOrAirport(recentSearch.searchArgs.vias[0].address).subscribe((viaFromStationOrAirport) => {
|
|
488
|
-
if (viaFromStationOrAirport.length) {
|
|
489
|
-
this.viasFrom = this.convertStationOrAirportLocation(recentSearch.searchArgs.vias[0].address, recentSearch.searchArgs.vias[0].postcode);
|
|
490
|
-
}
|
|
491
|
-
else {
|
|
492
|
-
this.viasFrom = this.convertAddressLocation(recentSearch.searchArgs.vias[0].address, recentSearch.searchArgs.vias[0].postcode);
|
|
493
|
-
}
|
|
494
|
-
this.searchService.startSearches();
|
|
495
|
-
});
|
|
496
|
-
}
|
|
497
|
-
if (recentSearch.searchArgs.vias[1]) {
|
|
498
|
-
this.getStationOrAirport(recentSearch.searchArgs.vias[1].address).subscribe((viaToStationOrAirport) => {
|
|
499
|
-
if (viaToStationOrAirport.length) {
|
|
500
|
-
this.viasTo = this.convertStationOrAirportLocation(recentSearch.searchArgs.vias[1].address, recentSearch.searchArgs.vias[1].postcode);
|
|
501
|
-
}
|
|
502
|
-
else {
|
|
503
|
-
this.viasTo = this.convertAddressLocation(recentSearch.searchArgs.vias[1].address, recentSearch.searchArgs.vias[1].postcode);
|
|
504
|
-
}
|
|
505
|
-
this.searchService.startSearches();
|
|
506
|
-
});
|
|
507
|
-
}
|
|
508
|
-
this.searchService.startSearches();
|
|
509
|
-
});
|
|
476
|
+
this.fromAddress = recentSearch.searchArgs.fromAddress;
|
|
477
|
+
this.toAddress = recentSearch.searchArgs.toAddress;
|
|
478
|
+
this.fromStation = recentSearch.searchArgs.fromStation;
|
|
479
|
+
this.toStation = recentSearch.searchArgs.toStation;
|
|
480
|
+
this._fromLocation = this.createCabHireLocation(this.fromAddress);
|
|
481
|
+
this._toLocation = this.createCabHireLocation(this.toAddress);
|
|
482
|
+
this.viasFrom = recentSearch.searchArgs.viasFrom;
|
|
483
|
+
this.viasTo = recentSearch.searchArgs.viasTo;
|
|
484
|
+
this.searchService.startSearches();
|
|
510
485
|
}
|
|
511
486
|
getSearchQuery() {
|
|
512
487
|
const query = {
|
|
@@ -517,7 +492,7 @@ export class CabHireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
517
492
|
toLocation: this.createCabHireLocation(this.tempParams.toAddress),
|
|
518
493
|
infants: 0,
|
|
519
494
|
vehicleType: this.vehicleType,
|
|
520
|
-
vias: this._vias
|
|
495
|
+
vias: this._vias
|
|
521
496
|
};
|
|
522
497
|
return this.helpers.removeNulls(query);
|
|
523
498
|
}
|
|
@@ -530,7 +505,7 @@ export class CabHireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
530
505
|
toLocation: this.createCabHireLocation(this.tempParams.fromAddress),
|
|
531
506
|
infants: 0,
|
|
532
507
|
vehicleType: this.vehicleType,
|
|
533
|
-
vias: this._vias
|
|
508
|
+
vias: this._vias
|
|
534
509
|
};
|
|
535
510
|
return this.helpers.removeNulls(query);
|
|
536
511
|
}
|
|
@@ -674,45 +649,6 @@ export class CabHireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
674
649
|
const transTypeIndex = this.tempParams.vehicleType;
|
|
675
650
|
return ((_a = this.transTypes.find((x) => x.key === transTypeIndex)) === null || _a === void 0 ? void 0 : _a.value) || '';
|
|
676
651
|
}
|
|
677
|
-
getStationOrAirport(text) {
|
|
678
|
-
return this.searchService.getStationsAndAirportsList(text, null, this.isLoading).pipe(take(1), map((res) => {
|
|
679
|
-
return res;
|
|
680
|
-
}));
|
|
681
|
-
}
|
|
682
|
-
;
|
|
683
|
-
getStationOrAirportAdress(stationOrAirport) {
|
|
684
|
-
if (stationOrAirport.type === LocationTypes.Airport) {
|
|
685
|
-
return {
|
|
686
|
-
name: stationOrAirport.name
|
|
687
|
-
};
|
|
688
|
-
}
|
|
689
|
-
else if (stationOrAirport.type === LocationTypes.TrainStation) {
|
|
690
|
-
return {
|
|
691
|
-
name: stationOrAirport.name
|
|
692
|
-
};
|
|
693
|
-
}
|
|
694
|
-
}
|
|
695
|
-
convertStationOrAirportLocation(address, postcode) {
|
|
696
|
-
return {
|
|
697
|
-
House: address,
|
|
698
|
-
PostCode: postcode,
|
|
699
|
-
};
|
|
700
|
-
}
|
|
701
|
-
convertAddressLocation(address, postcode) {
|
|
702
|
-
let locationArray = address.split(',');
|
|
703
|
-
let street = '';
|
|
704
|
-
let town = locationArray[locationArray.length - 2];
|
|
705
|
-
for (let index = 1; index < locationArray.length - 2; index++) {
|
|
706
|
-
street += locationArray[index] + ' ';
|
|
707
|
-
}
|
|
708
|
-
return {
|
|
709
|
-
Country: address.slice(-2),
|
|
710
|
-
House: locationArray[0],
|
|
711
|
-
PostCode: postcode,
|
|
712
|
-
Street: street,
|
|
713
|
-
Town: town
|
|
714
|
-
};
|
|
715
|
-
}
|
|
716
652
|
addCabHireToBasket(cabHireQuote, cabHireQuery) {
|
|
717
653
|
return __awaiter(this, void 0, void 0, function* () {
|
|
718
654
|
if (cabHireQuote.unavailable) {
|
|
@@ -720,6 +656,7 @@ export class CabHireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
720
656
|
}
|
|
721
657
|
const intBasket = yield this.basketService.getDefaultBasket();
|
|
722
658
|
const basket = intBasket === null || intBasket === void 0 ? void 0 : intBasket.subject.value;
|
|
659
|
+
const termsAndConditions = this.getTermsAndCond(cabHireQuote);
|
|
723
660
|
if (basket) {
|
|
724
661
|
return this.basketService.addToBasket({
|
|
725
662
|
adults: cabHireQuery.adults,
|
|
@@ -727,18 +664,25 @@ export class CabHireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
727
664
|
service: cabHireQuote.sourceId.toString(),
|
|
728
665
|
detail: {
|
|
729
666
|
id: cabHireQuote.id,
|
|
730
|
-
departs:
|
|
667
|
+
departs: cabHireQuote.departs,
|
|
731
668
|
supplierName: cabHireQuote.supplierName,
|
|
732
669
|
estimatedCO2: cabHireQuote.estimatedCO2,
|
|
733
670
|
fromLocation: {
|
|
734
671
|
address: cabHireQuery.fromLocation.address,
|
|
735
|
-
postcode: cabHireQuery.fromLocation.postcode
|
|
672
|
+
postcode: cabHireQuery.fromLocation.postcode,
|
|
673
|
+
latitude: cabHireQuote.fromLocation.latitude,
|
|
674
|
+
longitude: cabHireQuote.fromLocation.longitude
|
|
736
675
|
},
|
|
737
676
|
toLocation: {
|
|
738
677
|
address: cabHireQuery.toLocation.address,
|
|
739
|
-
postcode: cabHireQuery.toLocation.postcode
|
|
678
|
+
postcode: cabHireQuery.toLocation.postcode,
|
|
679
|
+
latitude: cabHireQuote.toLocation.latitude,
|
|
680
|
+
longitude: cabHireQuote.toLocation.longitude
|
|
740
681
|
},
|
|
741
|
-
vehicleType: cabHireQuery.vehicleType
|
|
682
|
+
vehicleType: cabHireQuery.vehicleType,
|
|
683
|
+
tripDistanceMetres: cabHireQuote.tripDistanceMetres,
|
|
684
|
+
tripDurationSeconds: cabHireQuote.tripDurationSeconds,
|
|
685
|
+
termsAndCond: termsAndConditions
|
|
742
686
|
},
|
|
743
687
|
price: cabHireQuote.price,
|
|
744
688
|
currency: cabHireQuote.currency,
|
|
@@ -768,9 +712,38 @@ export class CabHireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
768
712
|
return cheapestPrice;
|
|
769
713
|
}, { amount: Number.MAX_SAFE_INTEGER, currencyCode: currency });
|
|
770
714
|
}
|
|
715
|
+
getTermsAndCond(cabHireQuote) {
|
|
716
|
+
const departs = moment(cabHireQuote.departs).format(BaseHelperRoutines.ISO_DATA_FORMAT_TIME);
|
|
717
|
+
return [
|
|
718
|
+
{
|
|
719
|
+
name: 'Lowest Price',
|
|
720
|
+
value: cabHireQuote.price.toString() + ' ' + cabHireQuote.currency
|
|
721
|
+
},
|
|
722
|
+
{
|
|
723
|
+
name: 'Pickup Time',
|
|
724
|
+
value: departs
|
|
725
|
+
},
|
|
726
|
+
{
|
|
727
|
+
name: 'Terms and Conditions',
|
|
728
|
+
value: '<a target="_blank" href="https://www.cmacgroup.com/">www.cmacgroup.com</a>'
|
|
729
|
+
}
|
|
730
|
+
];
|
|
731
|
+
}
|
|
732
|
+
saveSearch() {
|
|
733
|
+
if (this.isValid.value) {
|
|
734
|
+
const query = this.getSearchQuery();
|
|
735
|
+
const favouriteSearchQuery = this.updateSerchQuery(query);
|
|
736
|
+
const searchInfo = {
|
|
737
|
+
name: `${moment()}`,
|
|
738
|
+
serviceType: ServiceType.Cab,
|
|
739
|
+
searchArgs: favouriteSearchQuery
|
|
740
|
+
};
|
|
741
|
+
return this.searchService.saveFavouriteSearch(searchInfo);
|
|
742
|
+
}
|
|
743
|
+
}
|
|
771
744
|
}
|
|
772
745
|
CabHireEnterpriseSearch.STORAGE_SESSION_PARAMS = 'search_cab';
|
|
773
746
|
CabHireEnterpriseSearch.SECONDARY_STORAGE_SESSION_PARAMS = 'secondary_search_cab';
|
|
774
747
|
CabHireEnterpriseSearch.STORAGE_SESSION_RESULTS = 'results_cab';
|
|
775
748
|
CabHireEnterpriseSearch.MULTI_STORAGE_SESSION_RESULTS = 'multi_results_cab';
|
|
776
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FiaGlyZS1lbnRlcnByaXNlLXNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9jYWJoaXJlLWVudGVycHJpc2Utc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTNFLE9BQU8sRUFPTCxhQUFhLEVBQ2QsTUFBTSxnQkFBZ0IsQ0FBQztBQU14QixPQUFPLEVBSUwsa0JBQWtCLEVBTWxCLFdBQVcsRUFDWixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFDTCxpQkFBaUIsRUFLakIsWUFBWSxFQUViLE1BQU0sMENBQTBDLENBQUM7QUFNbEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxNQUFNLE9BQU8sdUJBQ1gsU0FBUSxvQkFJUDtJQWtZRCxZQUNVLFVBQXlDLEVBQ3pDLE9BQTJCLEVBQ25DLGNBQWtDLEVBQzFCLGFBQStDLEVBQy9DLGFBQStDO1FBRXZELEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztRQU5kLGVBQVUsR0FBVixVQUFVLENBQStCO1FBQ3pDLFlBQU8sR0FBUCxPQUFPLENBQW9CO1FBRTNCLGtCQUFhLEdBQWIsYUFBYSxDQUFrQztRQUMvQyxrQkFBYSxHQUFiLGFBQWEsQ0FBa0M7UUE5WGxELFNBQUksR0FBZ0IsV0FBVyxDQUFDLEdBQUcsQ0FBQztRQUczQyxrQkFBYSxHQUF5QixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRTNDLGVBQVUsR0FBZ0I7WUFDakMsRUFBRSxHQUFHLEVBQUUs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QUFLLENBQUM7WUFDL0QsT0FBTyxhQUFhLENBQUM7UUFDdkIsQ0FBQyxFQUNELEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLENBQzVELENBQUM7SUFDSixDQUFDOztBQTU3QmUsOENBQXNCLEdBQUcsWUFBWSxDQUFDO0FBQ3RDLHdEQUFnQyxHQUFHLHNCQUFzQixDQUFDO0FBQzFELCtDQUF1QixHQUFHLGFBQWEsQ0FBQztBQUN4QyxxREFBNkIsR0FBRyxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgQmFzZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuL2Jhc2UtZW50ZXJwcmlzZSc7XHJcbmltcG9ydCB7IEJhc2VTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VIZWxwZXJSb3V0aW5lcyB9IGZyb20gJy4vaGVscGVycyc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBUcmF2ZWxsZXIgfSBmcm9tICcuLi9tb2RlbHMvdHJhdmVsbGVyLm9iamVjdCc7XHJcbmltcG9ydCB7XHJcbiAgQWRkcmVzc0Zvcm0sXHJcbiAgQ2FiaGlyZVF1b3RlUmVzdWx0QXJyYXksXHJcbiAgTmdiRGF0ZVN0cnVjdCxcclxuICBSYWlsQWlycG9ydCxcclxuICBSZWNlbnRTZWFyY2gsXHJcbiAgTG9jYXRpb25EZXRhaWxzLFxyXG4gIExvY2F0aW9uVHlwZXNcclxufSBmcm9tICcuLi90eXBlcy90eXBlcyc7XHJcbmltcG9ydCB7IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VDYWJoaXJlUXVvdGVGZXRjaGVyLFxyXG4gIENhYmhpcmVRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY2FiaGlyZS1xdW90ZS1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNrZXRJdGVtLFxyXG4gIENhYkhpcmVMb2NhdGlvbixcclxuICBDYWJIaXJlUXVvdGUsXHJcbiAgQ2FiSGlyZVZlaGljbGVUeXBlLFxyXG4gIExvY2F0aW9uRGV0YWlsLFxyXG4gIFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3MsXHJcbiAgU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzLFxyXG4gIFNlYXJjaENhYkhpcmVRdWVyeVZhcmlhYmxlcyxcclxuICBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyxcclxuICBTZXJ2aWNlVHlwZVxyXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEFpcnBvcnRTZWFyY2hNb2RlLFxyXG4gIENhYkhpcmVFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlLFxyXG4gIENhYkhpcmVUZW1wUGFyYW1zLFxyXG4gIFRheGlBaXJwb3J0LFxyXG4gIFRheGlBdHRyaWJ1dGUsXHJcbiAgVGF4aUZvcm1Nb2RlLFxyXG4gIFRyYW5zVHlwZVxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWNhYmhpcmUtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQge1xyXG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gIEludGVybmFsQmFza2V0SW50ZXJmYWNlXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IElDaGVhcGVzdFByaWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jaGVhcGVzdC1wcmljZSc7XHJcbmltcG9ydCB7IG1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDYWJIaXJlRW50ZXJwcmlzZVNlYXJjaDxDSF9RIGV4dGVuZHMgQ2FiaGlyZVF1b3RlRmV0Y2hlclR5cGU+XHJcbiAgZXh0ZW5kcyBCYXNlRW50ZXJwcmlzZVNlYXJjaDxcclxuICAgIENhYkhpcmVUZW1wUGFyYW1zLFxyXG4gICAgQ2FiaGlyZVF1b3RlUmVzdWx0QXJyYXksXHJcbiAgICBDYWJoaXJlUXVvdGVSZXN1bHRBcnJheVxyXG4gID5cclxuICBpbXBsZW1lbnRzIENhYkhpcmVFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlXHJcbntcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyA9ICdzZWFyY2hfY2FiJztcclxuICBzdGF0aWMgcmVhZG9ubHkgU0VDT05EQVJZX1NUT1JBR0VfU0VTU0lPTl9QQVJBTVMgPSAnc2Vjb25kYXJ5X3NlYXJjaF9jYWInO1xyXG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUkVTVUxUUyA9ICdyZXN1bHRzX2NhYic7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1VTFRJX1NUT1JBR0VfU0VTU0lPTl9SRVNVTFRTID0gJ211bHRpX3Jlc3VsdHNfY2FiJztcclxuICBwcml2YXRlIG91dGJvdW5kVmlzaWJpbGl0eTogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xyXG4gIHByaXZhdGUgaW5ib3VuZFZpc2liaWxpdHk6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcclxuICBwdWJsaWMgdHlwZTogU2VydmljZVR5cGUgPSBTZXJ2aWNlVHlwZS5DYWI7XHJcbiAgcHJpdmF0ZSB0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXTtcclxuXHJcbiAgYWlycG9ydENoYW5nZTogU3ViamVjdDxUYXhpQWlycG9ydD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICByZWFkb25seSB0cmFuc1R5cGVzOiBUcmFuc1R5cGVbXSA9IFtcclxuICAgIHsga2V5OiBDYWJIaXJlVmVoaWNsZVR5cGUuQW55LCB2YWx1ZTogJ0FueSAoMS04IFBhc3NlbmdlcnMpJywgaWQ6IDggfSxcclxuICAgIHtcclxuICAgICAga2V5OiBDYWJIaXJlVmVoaWNsZVR5cGUuU3RhbmRhcmRDYXIsXHJcbiAgICAgIHZhbHVlOiAnU2Fsb29uIENhciAoMS00IFBhc3NlbmdlcnMpJyxcclxuICAgICAgaWQ6IDRcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGtleTogQ2FiSGlyZVZlaGljbGVUeXBlLkJsYWNrQ2FiLFxyXG4gICAgICB2YWx1ZTogJ0hhY2tuZXkgQ2FycmlhZ2UgKDEtNCBQYXNzZW5nZXJzKScsXHJcbiAgICAgIGlkOiA0XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBrZXk6IENhYkhpcmVWZWhpY2xlVHlwZS5EZGFDYXIsXHJcbiAgICAgIHZhbHVlOiAnRGRhIC0gd2hlZWxjaGFpciBhY2Nlc3NpYmxlICgxLTQgUGFzc2VuZ2VycyknLFxyXG4gICAgICBpZDogNFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAga2V5OiBDYWJIaXJlVmVoaWNsZVR5cGUuTWVkaXVtTXB2LFxyXG4gICAgICB2YWx1ZTogJ1Blb3BsZSBDYXJyaWVyICgxLTcgUGFzc2VuZ2VycyknLFxyXG4gICAgICBpZDogN1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAga2V5OiBDYWJIaXJlVmVoaWNsZVR5cGUuRXhlY3V0aXZlQ2FyLFxyXG4gICAgICB2YWx1ZTogJ0V4ZWN1dGl2ZSAoMS00IFBhc3NlbmdlcnMpJyxcclxuICAgICAgaWQ6IDRcclxuICAgIH1cclxuICBdO1xyXG4gIHJlYWRvbmx5IGF0dHJpYnV0ZXM6IFRheGlBdHRyaWJ1dGVbXSA9IFtcclxuICAgIHsgZW5hYmxlZDogZmFsc2UsIGtleTogJ3doZWVsY2hhaXInLCB2YWx1ZTogJ1doZWVsY2hhaXIgKE9uIFJlcXVlc3QpJyB9LFxyXG4gICAgeyBlbmFibGVkOiBmYWxzZSwga2V5OiAnY2FsbF9vbl9hcnJpdmFsJywgdmFsdWU6ICdDYWxsIE9uIEFycml2YWwnIH0sXHJcbiAgICB7XHJcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxyXG4gICAgICBrZXk6ICdtZWV0X2FuZF9ncmVldCcsXHJcbiAgICAgIHZhbHVlOiAnTWVldCBBbmQgR3JlZXQgKENoYXJnZSBBcHBsaWVzKSdcclxuICAgIH0sXHJcbiAgICB7IGVuYWJsZWQ6IGZhbHNlLCBrZXk6ICd3YWl0X2FuZF9yZXR1cm4nLCB2YWx1ZTogJ1dhaXQgQW5kIFJldHVybicgfVxyXG4gIF07XHJcbiAgcmVhZG9ubHkgc2VhcmNoVHlwZXMgPSBbXHJcbiAgICAnT25lLXdheScsICdSZXR1cm4nXHJcbiAgXTtcclxuXHJcbiAgcmVhZG9ubHkgYWlycG9ydFNlYXJjaFR5cGVzID0gWydBaXJwb3J0IGRyb3Agb2ZmJywgJ0FpcnBvcnQgUGljayBVcCddO1xyXG4gIHJlYWRvbmx5IGNyaXRlcmlhID0gWydQaWNrIFVwIFRpbWUnXTtcclxuXHJcbiAgbW9kZTogVGF4aUZvcm1Nb2RlID0gVGF4aUZvcm1Nb2RlLkFERFJFU1M7XHJcbiAgbWluU2VsZWN0RGF0ZTogbW9tZW50Lk1vbWVudCA9IG1vbWVudCgpO1xyXG4gIG1pblJldHVyblNlbGVjdERhdGU6IE5nYkRhdGVTdHJ1Y3QgPSB7XHJcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKSxcclxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcclxuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKVxyXG4gIH07XHJcblxyXG4gIC8vIGdldHRlcnMgYW5kIHNldHRlcnNcclxuICBwcml2YXRlIF9kYXRlOiBOZ2JEYXRlU3RydWN0ID0gbnVsbDtcclxuICBzZWxlY3RlZFBsYWNlczogYW55ID0gW107XHJcbiAgcHJpdmF0ZSBfZnJvbUxvY2F0aW9uOiBDYWJIaXJlTG9jYXRpb247XHJcbiAgcHJpdmF0ZSBfdG9Mb2NhdGlvbjogQ2FiSGlyZUxvY2F0aW9uO1xyXG4gIHByaXZhdGUgX3ZpYXM6IENhYkhpcmVMb2NhdGlvbltdID0gW251bGwsIG51bGwsIG51bGwsIG51bGxdO1xyXG5cclxuICBnZXQgZnJvbUxvY2F0aW9uKCk6IENhYkhpcmVMb2NhdGlvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZnJvbUxvY2F0aW9uO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRvTG9jYXRpb24oKTogQ2FiSGlyZUxvY2F0aW9uIHtcclxuICAgIHJldHVybiB0aGlzLl90b0xvY2F0aW9uO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0ZTtcclxuICB9XHJcblxyXG4gIHNldCBkYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XHJcbiAgICB0aGlzLl9kYXRlID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVEYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBzZWFyY2hUeXBlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfc2VhcmNoVHlwZSA9IHRoaXMuc2VhcmNoVHlwZXNbMF07XHJcbiAgZ2V0IHNlYXJjaFR5cGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VhcmNoVHlwZTtcclxuICB9XHJcblxyXG4gIHNldCBzZWFyY2hUeXBlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3NlYXJjaFR5cGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKVxyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBhaXJwb2lydCBzZWFyY2hUeXBlXHJcbiAgICovXHJcblxyXG4gIF9haXJwb3J0U2VhcmNoVHlwZTogQWlycG9ydFNlYXJjaE1vZGUgPSBBaXJwb3J0U2VhcmNoTW9kZS5EUk9QT0ZGO1xyXG4gIGdldCBhaXJwb3J0U2VhcmNoVHlwZSgpOiBBaXJwb3J0U2VhcmNoTW9kZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWlycG9ydFNlYXJjaFR5cGU7XHJcbiAgfVxyXG4gIHNldCBhaXJwb3J0U2VhcmNoVHlwZShtb2RlOiBBaXJwb3J0U2VhcmNoTW9kZSkge1xyXG4gICAgdGhpcy5fYWlycG9ydFNlYXJjaFR5cGUgPSBtb2RlO1xyXG4gICAgaWYgKHRoaXMuZnJvbUFkZHJlc3MgfHwgdGhpcy50b0FkZHJlc3MpIHtcclxuICAgICAgdGhpcy5zd2l0Y2hGcm9tQW5kVG9Mb2NhdGlvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKlxyXG4gICAqIGFpcnBvaXJ0IGFuZCB0cmFpbiBzdGF0aW9uIHNlYXJjaFR5cGVcclxuICAgKi9cclxuXHJcbiAgZ2V0IGZyb21Mb2NhdGlvblR5cGUoKTogVGF4aUZvcm1Nb2RlIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZnJvbUxvY2F0aW9uVHlwZTtcclxuICB9XHJcbiAgc2V0IGZyb21Mb2NhdGlvblR5cGUobW9kZTogVGF4aUZvcm1Nb2RlKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZnJvbUxvY2F0aW9uVHlwZSA9IG1vZGU7XHJcbiAgfVxyXG4gIGdldCB0b0xvY2F0aW9uVHlwZSgpOiBUYXhpRm9ybU1vZGUge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy50b0xvY2F0aW9uVHlwZTtcclxuICB9XHJcbiAgc2V0IHRvTG9jYXRpb25UeXBlKG1vZGU6IFRheGlGb3JtTW9kZSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnRvTG9jYXRpb25UeXBlID0gbW9kZTtcclxuICB9XHJcbiAgLypcclxuICAgKiBzZWFyY2hDcml0ZXJpYVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3NlYXJjaENyaXRlcmlhID0gdGhpcy5jcml0ZXJpYVswXTtcclxuICBnZXQgc2VhcmNoQ3JpdGVyaWEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VhcmNoQ3JpdGVyaWE7XHJcbiAgfVxyXG5cclxuICBzZXQgc2VhcmNoQ3JpdGVyaWEodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fc2VhcmNoQ3JpdGVyaWEgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogb3V0Ym91bmREYXRlVGltZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX291dGJvdW5kRGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQgPSB0aGlzLmhlbHBlcnMucm91bmQoXHJcbiAgICBtb21lbnQoKSxcclxuICAgIG1vbWVudC5kdXJhdGlvbigxNSwgJ21pbnV0ZXMnKVxyXG4gICk7XHJcbiAgZ2V0IG91dGJvdW5kRGF0ZVRpbWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0Ym91bmREYXRlVGltZTtcclxuICB9XHJcblxyXG4gIHNldCBvdXRib3VuZERhdGVUaW1lKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLl9vdXRib3VuZERhdGVUaW1lID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIHJldHVybkRhdGVUaW1lXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfcmV0dXJuRGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQgPSB0aGlzLmhlbHBlcnMucm91bmQoXHJcbiAgICBtb21lbnQoKSxcclxuICAgIG1vbWVudC5kdXJhdGlvbigxNSwgJ21pbnV0ZXMnKVxyXG4gICk7XHJcbiAgZ2V0IHJldHVybkRhdGVUaW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JldHVybkRhdGVUaW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IHJldHVybkRhdGVUaW1lKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLl9yZXR1cm5EYXRlVGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBmbGlnaHROdW1iZXJcclxuICAgKi9cclxuICBwcml2YXRlIF9mbGlnaHROdW1iZXI6IHN0cmluZyA9ICcnO1xyXG4gIGdldCBmbGlnaHROdW1iZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmxpZ2h0TnVtYmVyO1xyXG4gIH1cclxuICBzZXQgZmxpZ2h0TnVtYmVyKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2ZsaWdodE51bWJlciA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBhaXJwb3J0XHJcbiAgICovXHJcblxyXG4gIGdldCBhaXJwb3J0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5haXJwb3J0O1xyXG4gIH1cclxuICBzZXQgYWlycG9ydCh2YWx1ZTogVGF4aUFpcnBvcnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5haXJwb3J0ID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIHRlcm1pbmFsXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfdGVybWluYWw6IHN0cmluZyA9IG51bGw7XHJcbiAgZ2V0IHRlcm1pbmFsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Rlcm1pbmFsO1xyXG4gIH1cclxuICBzZXQgdGVybWluYWwodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fdGVybWluYWwgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3RpbWU6IHN0cmluZyA9IG51bGw7XHJcbiAgZ2V0IHRpbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl90aW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IHRpbWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fdGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIGdldCBkZXBhcnRzKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5kZXBhcnRzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGRlcGFydHModmFsdWU6IG1vbWVudC5Nb21lbnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5kZXBhcnRzID0gdmFsdWUuaXNWYWxpZCA/IHZhbHVlIDogbnVsbDtcclxuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgdGhpcy5fZGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZSh2YWx1ZSk7XHJcbiAgICAgIHRoaXMuX3RpbWUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0VGltZUNvbG9uKHZhbHVlKTtcclxuICAgIH1cclxuICAgIHRoaXMubWluUmV0dXJuU2VsZWN0RGF0ZSA9IHtcclxuICAgICAgZGF5OiBtb21lbnQodmFsdWUpLmRhdGUoKSxcclxuICAgICAgbW9udGg6IG1vbWVudCh2YWx1ZSkubW9udGgoKSArIDEsXHJcbiAgICAgIHllYXI6IG1vbWVudCh2YWx1ZSkueWVhcigpLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodmFsdWUuaXNBZnRlcih0aGlzLnJldHVybkRhdGVUaW1lKSkge1xyXG4gICAgICB0aGlzLnJldHVybkRhdGVUaW1lLnNldCgnZGF0ZScsIHZhbHVlLmRhdGUoKSlcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICAvLyBnZXQgZnJvbUxvY2F0aW9uKCk6IENhYkhpcmVMb2NhdGlvbiB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5fZnJvbUxvY2F0aW9uO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gc2V0IGZyb21Mb2NhdGlvbih2YWx1ZTogQ2FiSGlyZUxvY2F0aW9uKSB7XHJcbiAgLy8gICB0aGlzLl9mcm9tTG9jYXRpb24gPSB2YWx1ZTtcclxuICAvLyAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAvLyB9XHJcblxyXG4gIC8vIGdldCB0b0xvY2F0aW9uKCk6IENhYkhpcmVMb2NhdGlvbiB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5fdG9Mb2NhdGlvbjtcclxuICAvLyB9XHJcblxyXG4gIC8vIHNldCB0b0xvY2F0aW9uKHZhbHVlOiBDYWJIaXJlTG9jYXRpb24pIHtcclxuICAvLyAgIHRoaXMuX3RvTG9jYXRpb24gPSB2YWx1ZTtcclxuICAvLyAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAvLyB9XHJcblxyXG4gIGdldCBhZHVsdHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGFkdWx0cyh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY2hpbGRyZW4oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW47XHJcbiAgfVxyXG5cclxuICBzZXQgY2hpbGRyZW4odmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaW5mYW50cygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pbmZhbnRzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGluZmFudHModmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmluZmFudHMgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBjb3VudHJ5Q29kZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jb3VudHJ5Q29kZTtcclxuICB9XHJcblxyXG4gIHNldCBjb3VudHJ5Q29kZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY291bnRyeUNvZGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCB2aWFzKCk6IENhYkhpcmVMb2NhdGlvbltdIHtcclxuICAgIHJldHVybiB0aGlzLl92aWFzO1xyXG4gIH1cclxuXHJcbiAgc2V0IHZpYXModmFsdWU6IENhYkhpcmVMb2NhdGlvbltdKSB7XHJcbiAgICB0aGlzLl92aWFzID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdmlhc0Zyb20oKTogQWRkcmVzc0Zvcm0ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy52aWFzRnJvbTtcclxuICB9XHJcblxyXG4gIHNldCB2aWFzRnJvbSh2YWx1ZTogQWRkcmVzc0Zvcm0pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy52aWFzRnJvbSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdmlhc1swXSA9IHZhbHVlID8gdGhpcy5jcmVhdGVDYWJIaXJlTG9jYXRpb24odmFsdWUpIDogbnVsbDtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCB2aWFzVG8oKTogQWRkcmVzc0Zvcm0ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy52aWFzVG87XHJcbiAgfVxyXG5cclxuICBzZXQgdmlhc1RvKHZhbHVlOiBBZGRyZXNzRm9ybSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnZpYXNUbyA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdmlhc1sxXSA9IHZhbHVlID8gdGhpcy5jcmVhdGVDYWJIaXJlTG9jYXRpb24odmFsdWUpIDogbnVsbDtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCB2ZWhpY2xlVHlwZSgpOiBDYWJIaXJlVmVoaWNsZVR5cGUge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy52ZWhpY2xlVHlwZTtcclxuICB9XHJcblxyXG4gIHNldCB2ZWhpY2xlVHlwZSh2YWx1ZTogQ2FiSGlyZVZlaGljbGVUeXBlKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMudmVoaWNsZVR5cGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBmcm9tQWRkcmVzcygpOiBBZGRyZXNzRm9ybSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmZyb21BZGRyZXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGZyb21BZGRyZXNzKHZhbHVlOiBBZGRyZXNzRm9ybSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmZyb21BZGRyZXNzID0gdmFsdWU7XHJcbiAgICB0aGlzLl9mcm9tTG9jYXRpb24gPSB2YWx1ZSA/IHRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHZhbHVlKSA6IG51bGw7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgZnJvbVN0YXRpb24oKTogUmFpbEFpcnBvcnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5mcm9tU3RhdGlvbjtcclxuICB9XHJcblxyXG4gIHNldCBmcm9tU3RhdGlvbih2YWx1ZTogUmFpbEFpcnBvcnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5mcm9tU3RhdGlvbiA9IHZhbHVlO1xyXG5cclxuICAgIHRoaXMuX2Zyb21Mb2NhdGlvbiA9IHZhbHVlXHJcbiAgICAgID8ge1xyXG4gICAgICAgICAgYWRkcmVzczogdmFsdWUuZGVzdGluYXRpb24sXHJcbiAgICAgICAgICBwb3N0Y29kZTogdmFsdWUucG9zdGNvZGVcclxuICAgICAgICB9XHJcbiAgICAgIDogbnVsbDtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCB0b0FkZHJlc3MoKTogQWRkcmVzc0Zvcm0ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy50b0FkZHJlc3M7XHJcbiAgfVxyXG5cclxuICBzZXQgdG9BZGRyZXNzKHZhbHVlOiBBZGRyZXNzRm9ybSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnRvQWRkcmVzcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdG9Mb2NhdGlvbiA9IHZhbHVlID8gdGhpcy5jcmVhdGVDYWJIaXJlTG9jYXRpb24odmFsdWUpIDogbnVsbDtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCB0b1N0YXRpb24oKTogUmFpbEFpcnBvcnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy50b1N0YXRpb247XHJcbiAgfVxyXG5cclxuICBzZXQgdG9TdGF0aW9uKHZhbHVlOiBSYWlsQWlycG9ydCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnRvU3RhdGlvbiA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdG9Mb2NhdGlvbiA9IHZhbHVlXHJcbiAgICAgID8ge1xyXG4gICAgICAgICAgYWRkcmVzczogdmFsdWUuZGVzdGluYXRpb24sXHJcbiAgICAgICAgICBwb3N0Y29kZTogdmFsdWUucG9zdGNvZGVcclxuICAgICAgICB9XHJcbiAgICAgIDogbnVsbDtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjYWJmZXRjaGVyOiBCYXNlQ2FiaGlyZVF1b3RlRmV0Y2hlcjxDSF9RPixcclxuICAgIHByaXZhdGUgaGVscGVyczogQmFzZUhlbHBlclJvdXRpbmVzLFxyXG4gICAgc3RvcmFnZVNlcnZpY2U6IEJhc2VTdG9yYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgc2VhcmNoU2VydmljZTogRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBwcml2YXRlIGJhc2tldFNlcnZpY2U6IEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihzdG9yYWdlU2VydmljZSk7XHJcbiAgICBjb25zdCBkYXRhOiB7XHJcbiAgICAgIHRlbXBQYXJhbXM6IENhYkhpcmVUZW1wUGFyYW1zO1xyXG4gICAgfSA9IHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtKFxyXG4gICAgICBDYWJIaXJlRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TXHJcbiAgICApIHx8IHtcclxuICAgICAgdGVtcFBhcmFtczoge30gYXMgQ2FiSGlyZVRlbXBQYXJhbXNcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHNlYXJjaFNlcnZpY2UubWFrZUNhYkhpcmVRdWVyeShkYXRhLnRlbXBQYXJhbXMpKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXR1cm5EYXRhOiBhbnkgPSBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbShDYWJIaXJlRW50ZXJwcmlzZVNlYXJjaC5TRUNPTkRBUllfU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyk7XHJcbiAgICAgIGlmIChyZXR1cm5EYXRhKSB7XHJcbiAgICAgICAgdGhpcy5yZXR1cm5EYXRlVGltZSA9IG1vbWVudChyZXR1cm5EYXRhLnRlbXBQYXJhbXMuZGVwYXJ0cyk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hUeXBlID0gdGhpcy5zZWFyY2hUeXBlc1sxXTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJysrKyBFcnJvciByZWNvdmVyaW5nIHJldHVybiBkYXRhOiAnLCBlcnJvciwgJyArKysnKTtcclxuICAgIH1cclxuICAgIGlmIChkYXRhLnRlbXBQYXJhbXMuZnJvbUFkZHJlc3MpIHtcclxuICAgICAgdGhpcy5mcm9tQWRkcmVzcyA9IGRhdGEudGVtcFBhcmFtcy5mcm9tQWRkcmVzcztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZGF0YS50ZW1wUGFyYW1zLnRvQWRkcmVzcykge1xyXG4gICAgICB0aGlzLnRvQWRkcmVzcyA9IGRhdGEudGVtcFBhcmFtcy50b0FkZHJlc3M7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNlYXJjaFNlcnZpY2Uuc2hvdWxkQWRkVHJhdmVsbGVyU3Vic2NyaXB0aW9uKCkpIHtcclxuICAgICAgc2VhcmNoU2VydmljZS50cmF2ZWxsZXJJbmZvcm1hdGlvbi5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlcnMgPSB0cmF2ZWxsZXJzO1xyXG4gICAgICAgICAgY29uc3Qgc3BsaXRUcmF2ZWxsZXJzID0gdGhpcy5oZWxwZXJzLnNlbGVjdGVkVHJhdmVsbGVycyhcclxuICAgICAgICAgICAgdHJhdmVsbGVycyxcclxuICAgICAgICAgICAgU2VydmljZVR5cGUuQ2FiXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IHNwbGl0VHJhdmVsbGVycy5hZHVsdHMubGVuZ3RoO1xyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuID0gc3BsaXRUcmF2ZWxsZXJzLmNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVzdWx0cyA9XHJcbiAgICAgIHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtQXNMaXN0PENhYmhpcmVRdW90ZVJlc3VsdEFycmF5PihcclxuICAgICAgICB0aGlzLnJlc3VsdHNTZXNzaW9uTmFtZVxyXG4gICAgICApIHx8IFtdO1xyXG4gICAgdGhpcy5mdWxsUmVzdWx0cyA9IHJlc3VsdHM7XHJcbiAgICB0aGlzLl9jaGVhcGVzdFJlc3VsdFByaWNlID0gdGhpcy51cGRhdGVMb3dlc3RQcmljZShyZXN1bHRzKTtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMgfHwgW10pO1xyXG5cclxuICAgIGNvbnN0IHNlY29uZGFyeVJlc3VsdHMgPVxyXG4gICAgc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW1Bc0xpc3QoXHJcbiAgICAgIHRoaXMubXVsdGlSZXN1bHRzU2Vzc2lvbk5hbWVcclxuICAgICkgfHwgW107XHJcblxyXG4gICAgdGhpcy5mdWxsTXVsdGlSZXN1bHRzID0gc2Vjb25kYXJ5UmVzdWx0cztcclxuICAgIHRoaXMubXVsdGlSZXN1bHRzLm5leHQoc2Vjb25kYXJ5UmVzdWx0cyk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICB0aGlzLm91dGJvdW5kVmlzaWJpbGl0eSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgdGhpcy5pbmJvdW5kVmlzaWJpbGl0eSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHJlc3VsdHNTZXNzaW9uTmFtZSA9XHJcbiAgICBDYWJIaXJlRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuICBcclxuICAgIHByb3RlY3RlZCBtdWx0aVJlc3VsdHNTZXNzaW9uTmFtZSA9XHJcbiAgICBDYWJIaXJlRW50ZXJwcmlzZVNlYXJjaC5NVUxUSV9TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuXHJcbiAgcHJvdGVjdGVkIHJlc2V0UXVlcnkoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXModGhpcy5zZWFyY2hTZXJ2aWNlLm1ha2VDYWJIaXJlUXVlcnkoKSk7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnJlbW92ZVNlc3Npb25JdGVtKENhYkhpcmVFbnRlcnByaXNlU2VhcmNoLlNFQ09OREFSWV9TVE9SQUdFX1NFU1NJT05fUEFSQU1TKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcblxyXG4gICAgfVxyXG4gICAgdGhpcy5fc2VhcmNoVHlwZSA9IHRoaXMuc2VhcmNoVHlwZXNbMF07IC8vIHJlc2V0IHRvIG9uZS13YXlcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldFBhcmFtcygpOiB2b2lkIHtcclxuICAgIHRoaXMucmVzZXQoKTtcclxuICAgIHRoaXMucmVzZXRRdWVyeSgpO1xyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQoW10pO1xyXG4gICAgdGhpcy5tdWx0aVJlc3VsdHMubmV4dChbXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc1ZhbGlkKCkge1xyXG4gICAgaWYgKCF0aGlzLmRvQ2hlY2tzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIENhYkhpcmVFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgIHtcclxuICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXNcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyA9IFtdO1xyXG4gICAgaWYgKCF0aGlzLnRlbXBQYXJhbXMuZnJvbUFkZHJlc3MpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnRnJvbSAtIEVudGVyIGEgbG9jYXRpb24gb3IgcG9zdGNvZGUuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLnRlbXBQYXJhbXMudG9BZGRyZXNzKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1RvIC0gRW50ZXIgYSBsb2NhdGlvbiBvciBwb3N0Y29kZS4nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zLmRlcGFydHMudW5peCgpIDwgbW9tZW50KCkudW5peCgpKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1RheGkgam91cm5leSBjYW5ub3QgYmUgaW4gdGhlIHBhc3QuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudGVtcFBhcmFtcy5hZHVsdHMgKyB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPCAxKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1RoZXJlIG11c3QgYmUgYXQgbGVhc3QgMSB0cmF2ZWxsZXInKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zZWFyY2hUeXBlID09PSB0aGlzLnNlYXJjaFR5cGVzWzFdICYmIHRoaXMucmV0dXJuRGF0ZVRpbWUuaXNTYW1lT3JCZWZvcmUodGhpcy5kZXBhcnRzKSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdSZXR1cm4gRGF0ZS9UaW1lIG11c3QgYmUgYWZ0ZXIgb3V0Ym91bmQgZGF0ZS90aW1lJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc1ZhbGlkLm5leHQodGhpcy52YWxpZGF0aW9uTWVzc2FnZXMubGVuZ3RoID09PSAwKTtcclxuICAgIHRoaXMubWVzc2FnZXMubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVEYXRlVGltZSgpIHtcclxuICAgIGlmICh0aGlzLl9kYXRlICYmIHRoaXMuX3RpbWUpIHtcclxuICAgICAgdGhpcy5kZXBhcnRzID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KHRoaXMuX2RhdGUsIHRoaXMuX3RpbWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhcnRTZWFyY2goKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChbXSk7XHJcbiAgICB0aGlzLm11bHRpUmVzdWx0cy5uZXh0KFtdKTtcclxuICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcclxuXHJcbiAgICAgIGlmICh0aGlzLnNlYXJjaFR5cGUgPT09IHRoaXMuc2VhcmNoVHlwZXNbMV0pIHsgIC8vIHJldHVybiAtIGtpY2sgb2ZmIHR3byBzZWFyY2hlc1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xyXG4gICAgICAgIGNvbnN0IHJldHVyblF1ZXJ5ID0gdGhpcy5nZXRSZXR1cm5TZWFyY2hRdWVyeSgpO1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZygnKysrIFNlYXJjaCBRdWVyeTogJywgcXVlcnksICcgKysrJyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJysrKyBTZWFyY2ggUmV0dXJuIFF1ZXJ5OiAnLCByZXR1cm5RdWVyeSwgJyArKysnKTtcclxuXHJcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgICAgIENhYkhpcmVFbnRlcnByaXNlU2VhcmNoLlNFQ09OREFSWV9TVE9SQUdFX1NFU1NJT05fUEFSQU1TLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB0ZW1wUGFyYW1zOiByZXR1cm5RdWVyeVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9zdGFydE11bHRpU2VhcmNoKFtcclxuICAgICAgICAgIHRoaXMuY2FiZmV0Y2hlci5mZXRjaExpc3QoXHJcbiAgICAgICAgICAgIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxRdWVyeVNlYXJjaENhYkhpcmVBcmdzPihxdWVyeSlcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICB0aGlzLmNhYmZldGNoZXIuZmV0Y2hMaXN0KFxyXG4gICAgICAgICAgICB0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8UXVlcnlTZWFyY2hDYWJIaXJlQXJncz4ocmV0dXJuUXVlcnkpXHJcbiAgICAgICAgICApXVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVSZWNlbnRTZWFyY2godGhpcy5nZXRSZWNlbnRTZWFyY2hRdWVyeShxdWVyeSkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRTZWFyY2goXHJcbiAgICAgICAgICB0aGlzLmNhYmZldGNoZXIuZmV0Y2hMaXN0KFxyXG4gICAgICAgICAgICB0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8UXVlcnlTZWFyY2hDYWJIaXJlQXJncz4ocXVlcnkpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UmVjZW50U2VhcmNoUXVlcnkocXVlcnk6IFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3MpOiBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLkNhYixcclxuICAgICAgc2VhcmNoQXJnczogcXVlcnksXHJcbiAgICAgIHRyYXZlbERhdGU6IHRoaXMuZGVwYXJ0cy5mb3JtYXQoKSxcclxuICAgICAgdHJhdmVsbGVyczogdGhpcy5oZWxwZXJzLmdldFRyYXZlbGxlcnNJZCh0aGlzLnRyYXZlbGxlcnMpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgc3RhcnRSZWNlbnRTZWFyY2gocmVjZW50U2VhcmNoOiBSZWNlbnRTZWFyY2gpOiB2b2lke1xyXG4gICAgdGhpcy5kZXBhcnRzID0gbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcGFydHMpO1xyXG4gICAgdGhpcy52ZWhpY2xlVHlwZSA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnZlaGljbGVUeXBlO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoW1xyXG4gICAgICB0aGlzLmdldFN0YXRpb25PckFpcnBvcnQocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZnJvbUxvY2F0aW9uLmFkZHJlc3MpLFxyXG4gICAgICB0aGlzLmdldFN0YXRpb25PckFpcnBvcnQocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MudG9Mb2NhdGlvbi5hZGRyZXNzKVxyXG4gICAgXSkuc3Vic2NyaWJlKChbZnJvbVN0YXRpb25PckFpcnBvcnQsIHRvU3RhdGlvbk9yQWlycG9ydF0pID0+IHtcclxuICAgICAgaWYgKGZyb21TdGF0aW9uT3JBaXJwb3J0Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuZnJvbVN0YXRpb24gPSB0aGlzLmdldFN0YXRpb25PckFpcnBvcnRBZHJlc3MoZnJvbVN0YXRpb25PckFpcnBvcnRbMF0pO1xyXG4gICAgICAgIHRoaXMuZnJvbUFkZHJlc3MgPSB0aGlzLmNvbnZlcnRTdGF0aW9uT3JBaXJwb3J0TG9jYXRpb24ocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZnJvbUxvY2F0aW9uLmFkZHJlc3MsIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmZyb21Mb2NhdGlvbi5wb3N0Y29kZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5mcm9tQWRkcmVzcyA9IHRoaXMuY29udmVydEFkZHJlc3NMb2NhdGlvbihyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5mcm9tTG9jYXRpb24uYWRkcmVzcywgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZnJvbUxvY2F0aW9uLnBvc3Rjb2RlKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodG9TdGF0aW9uT3JBaXJwb3J0Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMudG9TdGF0aW9uID0gdGhpcy5nZXRTdGF0aW9uT3JBaXJwb3J0QWRyZXNzKHRvU3RhdGlvbk9yQWlycG9ydFswXSk7XHJcbiAgICAgICAgdGhpcy50b0FkZHJlc3MgPSB0aGlzLmNvbnZlcnRTdGF0aW9uT3JBaXJwb3J0TG9jYXRpb24ocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MudG9Mb2NhdGlvbi5hZGRyZXNzLCByZWNlbnRTZWFyY2guc2VhcmNoQXJncy50b0xvY2F0aW9uLnBvc3Rjb2RlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnRvQWRkcmVzcyA9IHRoaXMuY29udmVydEFkZHJlc3NMb2NhdGlvbihyZWNlbnRTZWFyY2guc2VhcmNoQXJncy50b0xvY2F0aW9uLmFkZHJlc3MsIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnRvTG9jYXRpb24ucG9zdGNvZGUpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnZpYXNbMF0pIHtcclxuICAgICAgICB0aGlzLmdldFN0YXRpb25PckFpcnBvcnQocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mudmlhc1swXS5hZGRyZXNzKS5zdWJzY3JpYmUoKHZpYUZyb21TdGF0aW9uT3JBaXJwb3J0KSA9PiB7XHJcbiAgICAgICAgaWYgKHZpYUZyb21TdGF0aW9uT3JBaXJwb3J0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy52aWFzRnJvbSA9IHRoaXMuY29udmVydFN0YXRpb25PckFpcnBvcnRMb2NhdGlvbihyZWNlbnRTZWFyY2guc2VhcmNoQXJncy52aWFzWzBdLmFkZHJlc3MsIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnZpYXNbMF0ucG9zdGNvZGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnZpYXNGcm9tID0gdGhpcy5jb252ZXJ0QWRkcmVzc0xvY2F0aW9uKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnZpYXNbMF0uYWRkcmVzcywgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mudmlhc1swXS5wb3N0Y29kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mudmlhc1sxXSkge1xyXG4gICAgICB0aGlzLmdldFN0YXRpb25PckFpcnBvcnQocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mudmlhc1sxXS5hZGRyZXNzKS5zdWJzY3JpYmUoKHZpYVRvU3RhdGlvbk9yQWlycG9ydCkgPT4ge1xyXG4gICAgICAgIGlmICh2aWFUb1N0YXRpb25PckFpcnBvcnQubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnZpYXNUbyA9IHRoaXMuY29udmVydFN0YXRpb25PckFpcnBvcnRMb2NhdGlvbihyZWNlbnRTZWFyY2guc2VhcmNoQXJncy52aWFzWzFdLmFkZHJlc3MsIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnZpYXNbMV0ucG9zdGNvZGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnZpYXNUbyA9IHRoaXMuY29udmVydEFkZHJlc3NMb2NhdGlvbihyZWNlbnRTZWFyY2guc2VhcmNoQXJncy52aWFzWzFdLmFkZHJlc3MsIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnZpYXNbMV0ucG9zdGNvZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICBcclxuICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBnZXRTZWFyY2hRdWVyeSgpOiBRdWVyeVNlYXJjaENhYkhpcmVBcmdzIHtcclxuICAgIGNvbnN0IHF1ZXJ5OiBRdWVyeVNlYXJjaENhYkhpcmVBcmdzID0ge1xyXG4gICAgICBhZHVsdHM6IHRoaXMudGVtcFBhcmFtcy5hZHVsdHMsXHJcbiAgICAgIGNoaWxkcmVuOiB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4sXHJcbiAgICAgIGRlcGFydHM6IHRoaXMudGVtcFBhcmFtcy5kZXBhcnRzLFxyXG4gICAgICBmcm9tTG9jYXRpb246IHRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHRoaXMudGVtcFBhcmFtcy5mcm9tQWRkcmVzcyksXHJcbiAgICAgIHRvTG9jYXRpb246IHRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHRoaXMudGVtcFBhcmFtcy50b0FkZHJlc3MpLFxyXG4gICAgICBpbmZhbnRzOiAwLFxyXG4gICAgICB2ZWhpY2xlVHlwZTogdGhpcy52ZWhpY2xlVHlwZSxcclxuICAgICAgdmlhczogdGhpcy5fdmlhcyxcclxuICAgIH07XHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3M+KHF1ZXJ5KTtcclxuICB9XHJcblxyXG4gIGdldFJldHVyblNlYXJjaFF1ZXJ5KCk6IFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3Mge1xyXG4gICAgY29uc3QgcXVlcnk6IFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3MgPSB7XHJcbiAgICAgIGFkdWx0czogdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyxcclxuICAgICAgY2hpbGRyZW46IHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbixcclxuICAgICAgZGVwYXJ0czogdGhpcy5fcmV0dXJuRGF0ZVRpbWUsXHJcbiAgICAgIGZyb21Mb2NhdGlvbjogdGhpcy5jcmVhdGVDYWJIaXJlTG9jYXRpb24odGhpcy50ZW1wUGFyYW1zLnRvQWRkcmVzcyksICAvLyBzd2FwIHRoZSBsb2NhdGlvbnMgYXJvdW5kXHJcbiAgICAgIHRvTG9jYXRpb246IHRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHRoaXMudGVtcFBhcmFtcy5mcm9tQWRkcmVzcyksXHJcbiAgICAgIGluZmFudHM6IDAsXHJcbiAgICAgIHZlaGljbGVUeXBlOiB0aGlzLnZlaGljbGVUeXBlLFxyXG4gICAgICB2aWFzOiB0aGlzLl92aWFzLFxyXG4gICAgfTtcclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8UXVlcnlTZWFyY2hDYWJIaXJlQXJncz4ocXVlcnkpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlT3V0Ym91bmRBZGRyZXNzKGxvY2F0aW9uOiBhbnksIHBsYWNlRGVzY3JpcHRpb24/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5mcm9tQWRkcmVzcyA9IHRoaXMuZ2V0QWRkcmVzc0Zvcm1hdChcclxuICAgICAgbG9jYXRpb24sXHJcbiAgICAgIHBsYWNlRGVzY3JpcHRpb25cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVJbmJvdW5kQWRkcmVzcyhsb2NhdGlvbjogYW55LCBwbGFjZURlc2NyaXB0aW9uPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMudG9BZGRyZXNzID0gdGhpcy5nZXRBZGRyZXNzRm9ybWF0KFxyXG4gICAgICBsb2NhdGlvbixcclxuICAgICAgcGxhY2VEZXNjcmlwdGlvblxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKGxvY2F0aW9uOiBBZGRyZXNzRm9ybSk6IENhYkhpcmVMb2NhdGlvbiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBhZGRyZXNzOiBbXHJcbiAgICAgICAgbG9jYXRpb24/LlRlcm1pbmFsLFxyXG4gICAgICAgIGxvY2F0aW9uPy5Ib3VzZSxcclxuICAgICAgICBsb2NhdGlvbj8uU3RyZWV0LFxyXG4gICAgICAgIGxvY2F0aW9uPy5Ub3duLFxyXG4gICAgICAgIGxvY2F0aW9uPy5Db3VudHJ5XHJcbiAgICAgIF1cclxuICAgICAgICAuZmlsdGVyKChpdGVtOiBzdHJpbmcpOiBib29sZWFuID0+ICEhaXRlbSlcclxuICAgICAgICAuam9pbignLCcpLFxyXG4gICAgICBwb3N0Y29kZTogbG9jYXRpb24/LlBvc3RDb2RlXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgbWF0Y2hBZGRyZXNzZXMoKSB7XHJcbiAgICB0aGlzLl90b0xvY2F0aW9uID0gdGhpcy5jcmVhdGVDYWJIaXJlTG9jYXRpb24odGhpcy50ZW1wUGFyYW1zLnRvQWRkcmVzcyk7XHJcbiAgICB0aGlzLl9mcm9tTG9jYXRpb24gPSB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbihcclxuICAgICAgdGhpcy50ZW1wUGFyYW1zLmZyb21BZGRyZXNzXHJcbiAgICApO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgc29ydEJ5KGFzYz86IGJvb2xlYW4sIHJldHVybkluZGV4PzogbnVtYmVyKSB7XHJcblxyXG4gICAgaWYgKHJldHVybkluZGV4ID49IDApIHtcclxuICAgICAgY29uc29sZS5sb2coJ2hlcmUnKTtcclxuICAgICAgbGV0IHJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5mdWxsTXVsdGlSZXN1bHRzW3JldHVybkluZGV4XSk7XHJcbiAgICAgIGlmIChhc2MpIHtcclxuICAgICAgICByZXN1bHRzID0gcmVzdWx0cy5zb3J0KFxyXG4gICAgICAgICAgKGE6IGFueSwgYjogYW55KSA9PiBiLnByaWNlIC0gYS5wcmljZVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc29ydChcclxuICAgICAgICAgIChhOiBhbnksIGI6IGFueSkgPT4gYS5wcmljZSAtIGIucHJpY2VcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZnVsbE11bHRpUmVzdWx0c1tyZXR1cm5JbmRleF0gPSByZXN1bHRzO1xyXG4gICAgICB0aGlzLm11bHRpUmVzdWx0cy5uZXh0KHRoaXMuZnVsbE11bHRpUmVzdWx0cyk7XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5mdWxsUmVzdWx0cyk7XHJcbiAgICBpZiAoYXNjKSB7XHJcbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLnNvcnQoXHJcbiAgICAgICAgKGE6IENhYkhpcmVRdW90ZSwgYjogQ2FiSGlyZVF1b3RlKSA9PiBiLnByaWNlIC0gYS5wcmljZVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc29ydChcclxuICAgICAgICAoYTogQ2FiSGlyZVF1b3RlLCBiOiBDYWJIaXJlUXVvdGUpID0+IGEucHJpY2UgLSBiLnByaWNlXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChyZXN1bHRzKTtcclxuICAgIH1cclxuXHJcbiAgICBcclxuICB9XHJcblxyXG4gIC8vICEgc3R1ZmYgdG8gZ28gaW4gYSBwb3N0Y29kZSBzZXJ2aWVcclxuXHJcbiAgZ2V0QWRkcmVzc0Zvcm1hdChsb2NhdGlvbjogYW55LCBwbGFjZURlc2NyaXB0aW9uPzogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBIb3VzZTogdGhpcy5nZXRBZGRyZXNzRnJvbVBsYWNlRGV0YWlscyhsb2NhdGlvbiwgW1xyXG4gICAgICAgICdmbG9vcicsXHJcbiAgICAgICAgJ3N0cmVldF9udW1iZXInLFxyXG4gICAgICAgICdwcmVtaXNlJ1xyXG4gICAgICBdKSxcclxuICAgICAgU3RyZWV0OiB0aGlzLmdldEFkZHJlc3NGcm9tUGxhY2VEZXRhaWxzKGxvY2F0aW9uLCBbXHJcbiAgICAgICAgJ3JvdXRlJyxcclxuICAgICAgICAnc3RyZWV0X25hbWUnLFxyXG4gICAgICAgICdlc3RhYmxpc2htZW50J1xyXG4gICAgICBdKSxcclxuICAgICAgVG93bjogdGhpcy5nZXRBZGRyZXNzRnJvbVBsYWNlRGV0YWlscyhsb2NhdGlvbiwgW1xyXG4gICAgICAgICdwb3N0YWxfdG93bicsXHJcbiAgICAgICAgJ2FkbWluaXN0cmF0aXZlX2FyZWFfbGV2ZWxfMicsXHJcbiAgICAgICAgJ2xvY2FsaXR5J1xyXG4gICAgICBdKSxcclxuICAgICAgUG9zdENvZGU6IHRoaXMuZ2V0QWRkcmVzc0Zyb21QbGFjZURldGFpbHMobG9jYXRpb24sIFsncG9zdGFsX2NvZGUnXSksXHJcbiAgICAgIENvdW50cnk6IHRoaXMuZ2V0QWRkcmVzc0Zyb21QbGFjZURldGFpbHMobG9jYXRpb24sIFsnY291bnRyeSddKSxcclxuICAgICAgcGxhY2VEZXNjcmlwdGlvblxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGdldEFkZHJlc3NGcm9tUGxhY2VEZXRhaWxzKHBsYWNlRGV0YWlsczogYW55LCB0eXBlczogc3RyaW5nW10pOiBzdHJpbmcge1xyXG4gICAgbGV0IGFkZHJlc3NQcm9wID0gbnVsbDtcclxuICAgIGlmIChwbGFjZURldGFpbHMgJiYgQXJyYXkuaXNBcnJheShwbGFjZURldGFpbHMpKSB7XHJcbiAgICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xyXG4gICAgICAgIGNvbnN0IHByb3AgPSBwbGFjZURldGFpbHMuZmlsdGVyKChwZCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocGQudHlwZXMpICYmIHBkLnR5cGVzLmluY2x1ZGVzKHR5cGUpO1xyXG4gICAgICAgIH0pWzBdO1xyXG5cclxuICAgICAgICBpZiAocHJvcCkge1xyXG4gICAgICAgICAgYWRkcmVzc1Byb3AgPSBwcm9wLmxvbmdfbmFtZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFkZHJlc3NQcm9wO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWRkcmVzc0Zyb21BaXJwb3J0RGV0YWlscyhcclxuICAgIGFpcnBvcnREZXRhaWxzOiBMb2NhdGlvbkRldGFpbCxcclxuICAgIGFpcnBvcnROYW1lOiBzdHJpbmdcclxuICApIHtcclxuICAgIGNvbnNvbGUubG9nKGFpcnBvcnREZXRhaWxzKTtcclxuICAgIGxldCBhZGRyZXNzOiBBZGRyZXNzRm9ybSA9IG51bGw7XHJcbiAgICBpZiAoYWlycG9ydERldGFpbHMpIHtcclxuICAgICAgYWRkcmVzcyA9IHtcclxuICAgICAgICBDb3VudHJ5OiBhaXJwb3J0RGV0YWlscy5jb3VudHJ5LFxyXG4gICAgICAgIFN0cmVldDogYWlycG9ydERldGFpbHMucm9hZCxcclxuICAgICAgICBQb3N0Q29kZTogYWlycG9ydERldGFpbHMucG9zdGNvZGUsXHJcbiAgICAgICAgVG93bjogYWlycG9ydERldGFpbHMuY2l0eSxcclxuICAgICAgICBwbGFjZURlc2NyaXB0aW9uOiBhaXJwb3J0TmFtZSxcclxuICAgICAgICBIb3VzZTogYWlycG9ydE5hbWVcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiBhZGRyZXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0TG9jYXRpb25Gcm9tQWlycG9ydChhaXJwb3J0RGV0YWlsczogTG9jYXRpb25EZXRhaWwsIGFpcnBvcnROYW1lOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGFkZHJlc3MgPSB0aGlzLmdldEFkZHJlc3NGcm9tQWlycG9ydERldGFpbHMoXHJcbiAgICAgIGFpcnBvcnREZXRhaWxzLFxyXG4gICAgICBhaXJwb3J0TmFtZVxyXG4gICAgKTtcclxuICAgIGlmICh0aGlzLm1vZGUgPT09IFRheGlGb3JtTW9kZS5TVEFUSU9OKSB7XHJcbiAgICAgIGlmICh0aGlzLmFpcnBvcnRTZWFyY2hUeXBlID09PSBBaXJwb3J0U2VhcmNoTW9kZS5QSUNLVVApIHtcclxuICAgICAgICB0aGlzLmZyb21BZGRyZXNzID0gYWRkcmVzcztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnRvQWRkcmVzcyA9IGFkZHJlc3M7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZFRvU2VsZWN0ZWRQbGFjZXMoYWRkcmVzczogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkUGxhY2VzLnB1c2goYWRkcmVzcyk7XHJcbiAgfVxyXG5cclxuICBzZXRPdXRib3VuZEZvcm1WaXNpYmlsaXR5KHNob3dGb3JtOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLm91dGJvdW5kVmlzaWJpbGl0eS5uZXh0KHNob3dGb3JtKTtcclxuICB9XHJcblxyXG4gIHNldEluYm91bmRGb3JtVmlzaWJpbGl0eShzaG93Rm9ybTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5pbmJvdW5kVmlzaWJpbGl0eS5uZXh0KHNob3dGb3JtKTtcclxuICB9XHJcblxyXG4gIGdldE91dGJvdW5kRm9ybVZpc2liaWxpdHkoKTogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+IHtcclxuICAgIHJldHVybiB0aGlzLm91dGJvdW5kVmlzaWJpbGl0eTtcclxuICB9XHJcblxyXG4gIGdldEluYm91bmRGb3JtVmlzaWJpbGl0eSgpOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaW5ib3VuZFZpc2liaWxpdHk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVGcm9tUHJldmlvdXNTZWFyY2hlcyhcclxuICAgIHByZXZpb3VzSXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT5cclxuICApOiB2b2lkIHtcclxuICAgIGNvbnN0IGZsaWdodEl0ZW06IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzID1cclxuICAgICAgcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5GbGlnaHRdPy5zZWFyY2hRdWVyeTtcclxuICAgIGlmIChmbGlnaHRJdGVtKSB7XHJcbiAgICAgIC8vIFRPRE8gZmxpZ2h0cyBoYXZlbid0IGJlZW4gZG9uZSB5ZXQuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRUcmFuc1R5cGUoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHRyYW5zVHlwZUluZGV4ID0gdGhpcy50ZW1wUGFyYW1zLnZlaGljbGVUeXBlO1xyXG4gICAgcmV0dXJuIHRoaXMudHJhbnNUeXBlcy5maW5kKCh4KSA9PiB4LmtleSA9PT0gdHJhbnNUeXBlSW5kZXgpPy52YWx1ZSB8fCAnJztcclxuICB9XHJcblxyXG4gIGdldFBhc3NlbmdlcnMgPSAoKTogc3RyaW5nID0+IHtcclxuICAgIGNvbnN0IGFkdWx0cyA9IHRoaXMuYWR1bHRzO1xyXG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xyXG4gICAgbGV0IHBhc3NlbmdlcnMgPSBgJHthZHVsdHN9IEFkdWx0YDtcclxuXHJcbiAgICBpZiAoTnVtYmVyKGFkdWx0cykgIT09IDEpIHtcclxuICAgICAgcGFzc2VuZ2VycyArPSAncyc7XHJcbiAgICB9XHJcbiAgICBpZiAoTnVtYmVyKGNoaWxkcmVuKSA9PT0gMSkge1xyXG4gICAgICBwYXNzZW5nZXJzICs9IGAsICR7Y2hpbGRyZW59IENoaWxkYDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoTnVtYmVyKGNoaWxkcmVuKSA+IDEpIHtcclxuICAgICAgcGFzc2VuZ2VycyArPSBgLCAke2NoaWxkcmVufSBDaGlsZHJlbmA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGFzc2VuZ2VycztcclxuICAgIHJldHVybiAnJztcclxuICB9O1xyXG5cclxuICBwcml2YXRlIGdldFN0YXRpb25PckFpcnBvcnQodGV4dDogc3RyaW5nKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkRldGFpbHNbXT57XHJcbiAgICByZXR1cm4gdGhpcy5zZWFyY2hTZXJ2aWNlLmdldFN0YXRpb25zQW5kQWlycG9ydHNMaXN0KHRleHQsIG51bGwsIHRoaXMuaXNMb2FkaW5nKS5waXBlKFxyXG4gICAgICB0YWtlKDEpLFxyXG4gICAgICBtYXAoKHJlczogTG9jYXRpb25EZXRhaWxzW10pID0+IHtcclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIGdldFN0YXRpb25PckFpcnBvcnRBZHJlc3Moc3RhdGlvbk9yQWlycG9ydDogTG9jYXRpb25EZXRhaWxzKTogYW55IHtcclxuICAgIGlmIChzdGF0aW9uT3JBaXJwb3J0LnR5cGUgPT09IExvY2F0aW9uVHlwZXMuQWlycG9ydCkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIG5hbWU6IHN0YXRpb25PckFpcnBvcnQubmFtZVxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIGlmIChzdGF0aW9uT3JBaXJwb3J0LnR5cGUgPT09IExvY2F0aW9uVHlwZXMuVHJhaW5TdGF0aW9uKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgbmFtZTogc3RhdGlvbk9yQWlycG9ydC5uYW1lXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29udmVydFN0YXRpb25PckFpcnBvcnRMb2NhdGlvbihhZGRyZXNzOiBzdHJpbmcsIHBvc3Rjb2RlOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIEhvdXNlOiBhZGRyZXNzLFxyXG4gICAgICBQb3N0Q29kZTogcG9zdGNvZGUsXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnZlcnRBZGRyZXNzTG9jYXRpb24oYWRkcmVzczogc3RyaW5nLCBwb3N0Y29kZTogc3RyaW5nKSB7XHJcbiAgICBsZXQgbG9jYXRpb25BcnJheSA9IGFkZHJlc3Muc3BsaXQoJywnKTtcclxuICAgIGxldCBzdHJlZXQgPSAnJztcclxuICAgIGxldCB0b3duID0gbG9jYXRpb25BcnJheVtsb2NhdGlvbkFycmF5Lmxlbmd0aC0yXTtcclxuICAgIFxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IGxvY2F0aW9uQXJyYXkubGVuZ3RoLTI7IGluZGV4KyspIHtcclxuICAgICAgc3RyZWV0ICs9IGxvY2F0aW9uQXJyYXlbaW5kZXhdICsgJyAnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgQ291bnRyeTogYWRkcmVzcy5zbGljZSgtMiksXHJcbiAgICAgIEhvdXNlOiBsb2NhdGlvbkFycmF5WzBdLFxyXG4gICAgICBQb3N0Q29kZTogcG9zdGNvZGUsXHJcbiAgICAgIFN0cmVldDogc3RyZWV0LFxyXG4gICAgICBUb3duOiB0b3duXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGRDYWJIaXJlVG9CYXNrZXQoXHJcbiAgICBjYWJIaXJlUXVvdGU6IENhYkhpcmVRdW90ZSxcclxuICAgIGNhYkhpcmVRdWVyeTogU2VhcmNoQ2FiSGlyZVF1ZXJ5VmFyaWFibGVzXHJcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAoY2FiSGlyZVF1b3RlLnVuYXZhaWxhYmxlKSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9XHJcbiAgICAgIGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XHJcbiAgICBjb25zdCBiYXNrZXQgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWU7XHJcbiAgICBpZiAoYmFza2V0KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgYWR1bHRzOiBjYWJIaXJlUXVlcnkuYWR1bHRzLFxyXG4gICAgICAgICAgYmFza2V0OiBiYXNrZXQuaWQsXHJcbiAgICAgICAgICBzZXJ2aWNlOiBjYWJIaXJlUXVvdGUuc291cmNlSWQudG9TdHJpbmcoKSxcclxuICAgICAgICAgIGRldGFpbDoge1xyXG4gICAgICAgICAgICBpZDogY2FiSGlyZVF1b3RlLmlkLFxyXG4gICAgICAgICAgICBkZXBhcnRzOiBjYWJIaXJlUXVlcnkuZGVwYXJ0cy5mb3JtYXQoKSxcclxuICAgICAgICAgICAgc3VwcGxpZXJOYW1lOiBjYWJIaXJlUXVvdGUuc3VwcGxpZXJOYW1lLFxyXG4gICAgICAgICAgICBlc3RpbWF0ZWRDTzI6IGNhYkhpcmVRdW90ZS5lc3RpbWF0ZWRDTzIsXHJcbiAgICAgICAgICAgIGZyb21Mb2NhdGlvbjoge1xyXG4gICAgICAgICAgICAgIGFkZHJlc3M6IGNhYkhpcmVRdWVyeS5mcm9tTG9jYXRpb24uYWRkcmVzcyxcclxuICAgICAgICAgICAgICBwb3N0Y29kZTogY2FiSGlyZVF1ZXJ5LmZyb21Mb2NhdGlvbi5wb3N0Y29kZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0b0xvY2F0aW9uOiB7XHJcbiAgICAgICAgICAgICAgYWRkcmVzczogY2FiSGlyZVF1ZXJ5LnRvTG9jYXRpb24uYWRkcmVzcyxcclxuICAgICAgICAgICAgICBwb3N0Y29kZTogY2FiSGlyZVF1ZXJ5LnRvTG9jYXRpb24ucG9zdGNvZGVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdmVoaWNsZVR5cGU6IGNhYkhpcmVRdWVyeS52ZWhpY2xlVHlwZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHByaWNlOiBjYWJIaXJlUXVvdGUucHJpY2UsXHJcbiAgICAgICAgICBjdXJyZW5jeTogY2FiSGlyZVF1b3RlLmN1cnJlbmN5LFxyXG4gICAgICAgICAgc2VhcmNoUXVlcnk6IGNhYkhpcmVRdWVyeSxcclxuICAgICAgICAgIGNvMlBlckl0ZW06IGNhYkhpcmVRdW90ZS5jbzJQZXJJdGVtLFxyXG4gICAgICAgICAgY28yUGVyUGFzc2VuZ2VyOiBjYWJIaXJlUXVvdGUuY28yUGVyUGFzc2VuZ2VyLFxyXG4gICAgICAgICAgb3V0Ym91bmREYXRlOiBjYWJIaXJlUXVlcnkuZGVwYXJ0cy5mb3JtYXQoKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaW50QmFza2V0LFxyXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZSxcclxuICAgICAgICB0aGlzLnRyYXZlbGxlcnNcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpOyAvLyBUT0RPIHNob3VsZCB0aGlzIHRocm93IGFuIGVycm9yP1xyXG4gIH1cclxuXHJcbiAgc3dpdGNoRnJvbUFuZFRvTG9jYXRpb24oKSB7XHJcbiAgICBjb25zdCBuZXdGcm9tQWRkcmVzcyA9IHsgLi4udGhpcy50b0FkZHJlc3MgfTtcclxuICAgIGNvbnN0IG5ld1RvQWRkcmVzcyA9IHsgLi4udGhpcy5mcm9tQWRkcmVzcyB9O1xyXG4gICAgdGhpcy5mcm9tQWRkcmVzcyA9IG5ld0Zyb21BZGRyZXNzO1xyXG4gICAgdGhpcy50b0FkZHJlc3MgPSBuZXdUb0FkZHJlc3M7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVMb3dlc3RQcmljZShyZXN1bHRzOiBDYWJIaXJlUXVvdGVbXSk6IElDaGVhcGVzdFByaWNlIHtcclxuICAgIGlmICghcmVzdWx0cy5sZW5ndGgpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgY3VycmVuY3kgPSByZXN1bHRzWzBdLmN1cnJlbmN5O1xyXG4gICAgcmV0dXJuIHJlc3VsdHMucmVkdWNlKFxyXG4gICAgICAoY2hlYXBlc3RQcmljZTogSUNoZWFwZXN0UHJpY2UsIHJlc3VsdDogQ2FiSGlyZVF1b3RlKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcHJpY2UgPSByZXN1bHQucHJpY2U7XHJcbiAgICAgICAgaWYgKGNoZWFwZXN0UHJpY2UuYW1vdW50ID4gcHJpY2UpIGNoZWFwZXN0UHJpY2UuYW1vdW50ID0gcHJpY2U7XHJcbiAgICAgICAgcmV0dXJuIGNoZWFwZXN0UHJpY2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgYW1vdW50OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgY3VycmVuY3lDb2RlOiBjdXJyZW5jeSB9XHJcbiAgICApO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
749
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FiaGlyZS1lbnRlcnByaXNlLXNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9jYWJoaXJlLWVudGVycHJpc2Utc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQTZCLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQWlCM0UsT0FBTyxFQUlMLGtCQUFrQixFQU1sQixXQUFXLEVBQ1osTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQ0wsaUJBQWlCLEVBS2pCLFlBQVksRUFFYixNQUFNLDBDQUEwQyxDQUFDO0FBU2xELE1BQU0sT0FBTyx1QkFDWCxTQUFRLG9CQUlQO0lBZ1lELFlBQ1UsVUFBeUMsRUFDakQsT0FBMkIsRUFDM0IsY0FBa0MsRUFDMUIsYUFBK0MsRUFDL0MsYUFBK0M7UUFFdkQsS0FBSyxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQU52QixlQUFVLEdBQVYsVUFBVSxDQUErQjtRQUd6QyxrQkFBYSxHQUFiLGFBQWEsQ0FBa0M7UUFDL0Msa0JBQWEsR0FBYixhQUFhLENBQWtDO1FBNVhsRCxTQUFJLEdBQWdCLFdBQVcsQ0FBQyxHQUFHLENBQUM7UUFHM0Msa0JBQWEsR0FBeUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUUzQyxlQUFVLEdBQWdCO1lBQ2pDLEVBQUUsR0FBRyxFQUFFLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtZQUNyRTtnQkFDRSxH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QUNmO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLHNCQUFzQjtnQkFDNUIsS0FBSyxFQUFFLDRFQUE0RTthQUNwRjtTQUNGLENBQUE7SUFDSCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDdEIsTUFBTSxLQUFLLEdBQTJCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUM1RCxNQUFNLG9CQUFvQixHQUF1QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUUsTUFBTSxVQUFVLEdBQUc7Z0JBQ2pCLElBQUksRUFBRSxHQUFHLE1BQU0sRUFBRSxFQUFFO2dCQUNuQixXQUFXLEVBQUUsV0FBVyxDQUFDLEdBQUc7Z0JBQzVCLFVBQVUsRUFBRSxvQkFBb0I7YUFDakMsQ0FBQTtZQUNELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUMzRDtJQUNILENBQUM7O0FBcjZCZSw4Q0FBc0IsR0FBRyxZQUFZLENBQUM7QUFDdEMsd0RBQWdDLEdBQUcsc0JBQXNCLENBQUM7QUFDMUQsK0NBQXVCLEdBQUcsYUFBYSxDQUFDO0FBQ3hDLHFEQUE2QixHQUFHLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBCYXNlRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4vYmFzZS1lbnRlcnByaXNlJztcclxuaW1wb3J0IHsgQmFzZVN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZUhlbHBlclJvdXRpbmVzIH0gZnJvbSAnLi9oZWxwZXJzJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFRyYXZlbGxlciB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcclxuaW1wb3J0IHtcclxuICBBZGRyZXNzRm9ybSxcclxuICBDYWJoaXJlUXVvdGVSZXN1bHRBcnJheSxcclxuICBOZ2JEYXRlU3RydWN0LFxyXG4gIFJhaWxBaXJwb3J0LFxyXG4gIFJlY2VudFNlYXJjaCxcclxuICBMb2NhdGlvbkRldGFpbHMsXHJcbiAgTG9jYXRpb25UeXBlcyxcclxuICBTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0XHJcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xyXG5pbXBvcnQgeyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXNlYXJjaC5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBCYXNlQ2FiaGlyZVF1b3RlRmV0Y2hlcixcclxuICBDYWJoaXJlUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2NhYmhpcmUtcXVvdGUtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFza2V0SXRlbSxcclxuICBDYWJIaXJlTG9jYXRpb24sXHJcbiAgQ2FiSGlyZVF1b3RlLFxyXG4gIENhYkhpcmVWZWhpY2xlVHlwZSxcclxuICBMb2NhdGlvbkRldGFpbCxcclxuICBRdWVyeVNlYXJjaENhYkhpcmVBcmdzLFxyXG4gIFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyxcclxuICBTZWFyY2hDYWJIaXJlUXVlcnlWYXJpYWJsZXMsXHJcbiAgU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMsXHJcbiAgU2VydmljZVR5cGVcclxufSBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcclxuaW1wb3J0IHtcclxuICBBaXJwb3J0U2VhcmNoTW9kZSxcclxuICBDYWJIaXJlRW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZSxcclxuICBDYWJIaXJlVGVtcFBhcmFtcyxcclxuICBUYXhpQWlycG9ydCxcclxuICBUYXhpQXR0cmlidXRlLFxyXG4gIFRheGlGb3JtTW9kZSxcclxuICBUcmFuc1R5cGVcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0ljYWJoaXJlLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHtcclxuICBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcclxuICBJbnRlcm5hbEJhc2tldEludGVyZmFjZVxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWVudGVycHJpc2UtYmFza2V0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJQ2hlYXBlc3RQcmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hlYXBlc3QtcHJpY2UnO1xyXG5pbXBvcnQgeyBtYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IElDYWJIaXJlU2VhcmNoQXJncyB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2FiLWhpcmUtc2VhcmNoLWFyZy5pbnRlcmZhY2UnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENhYkhpcmVFbnRlcnByaXNlU2VhcmNoPENIX1EgZXh0ZW5kcyBDYWJoaXJlUXVvdGVGZXRjaGVyVHlwZT5cclxuICBleHRlbmRzIEJhc2VFbnRlcnByaXNlU2VhcmNoPFxyXG4gICAgQ2FiSGlyZVRlbXBQYXJhbXMsXHJcbiAgICBDYWJoaXJlUXVvdGVSZXN1bHRBcnJheSxcclxuICAgIENhYmhpcmVRdW90ZVJlc3VsdEFycmF5XHJcbiAgPlxyXG4gIGltcGxlbWVudHMgQ2FiSGlyZUVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2Vcclxue1xyXG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUEFSQU1TID0gJ3NlYXJjaF9jYWInO1xyXG4gIHN0YXRpYyByZWFkb25seSBTRUNPTkRBUllfU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyA9ICdzZWNvbmRhcnlfc2VhcmNoX2NhYic7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTID0gJ3Jlc3VsdHNfY2FiJztcclxuICBzdGF0aWMgcmVhZG9ubHkgTVVMVElfU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFMgPSAnbXVsdGlfcmVzdWx0c19jYWInO1xyXG4gIHByaXZhdGUgb3V0Ym91bmRWaXNpYmlsaXR5OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj47XHJcbiAgcHJpdmF0ZSBpbmJvdW5kVmlzaWJpbGl0eTogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xyXG4gIHB1YmxpYyB0eXBlOiBTZXJ2aWNlVHlwZSA9IFNlcnZpY2VUeXBlLkNhYjtcclxuICBwcml2YXRlIHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdO1xyXG5cclxuICBhaXJwb3J0Q2hhbmdlOiBTdWJqZWN0PFRheGlBaXJwb3J0PiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHJlYWRvbmx5IHRyYW5zVHlwZXM6IFRyYW5zVHlwZVtdID0gW1xyXG4gICAgeyBrZXk6IENhYkhpcmVWZWhpY2xlVHlwZS5BbnksIHZhbHVlOiAnQW55ICgxLTggUGFzc2VuZ2VycyknLCBpZDogOCB9LFxyXG4gICAge1xyXG4gICAgICBrZXk6IENhYkhpcmVWZWhpY2xlVHlwZS5TdGFuZGFyZENhcixcclxuICAgICAgdmFsdWU6ICdTYWxvb24gQ2FyICgxLTQgUGFzc2VuZ2VycyknLFxyXG4gICAgICBpZDogNFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAga2V5OiBDYWJIaXJlVmVoaWNsZVR5cGUuQmxhY2tDYWIsXHJcbiAgICAgIHZhbHVlOiAnSGFja25leSBDYXJyaWFnZSAoMS00IFBhc3NlbmdlcnMpJyxcclxuICAgICAgaWQ6IDRcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGtleTogQ2FiSGlyZVZlaGljbGVUeXBlLkRkYUNhcixcclxuICAgICAgdmFsdWU6ICdEZGEgLSB3aGVlbGNoYWlyIGFjY2Vzc2libGUgKDEtNCBQYXNzZW5nZXJzKScsXHJcbiAgICAgIGlkOiA0XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBrZXk6IENhYkhpcmVWZWhpY2xlVHlwZS5NZWRpdW1NcHYsXHJcbiAgICAgIHZhbHVlOiAnUGVvcGxlIENhcnJpZXIgKDEtNyBQYXNzZW5nZXJzKScsXHJcbiAgICAgIGlkOiA3XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBrZXk6IENhYkhpcmVWZWhpY2xlVHlwZS5FeGVjdXRpdmVDYXIsXHJcbiAgICAgIHZhbHVlOiAnRXhlY3V0aXZlICgxLTQgUGFzc2VuZ2VycyknLFxyXG4gICAgICBpZDogNFxyXG4gICAgfVxyXG4gIF07XHJcbiAgcmVhZG9ubHkgYXR0cmlidXRlczogVGF4aUF0dHJpYnV0ZVtdID0gW1xyXG4gICAgeyBlbmFibGVkOiBmYWxzZSwga2V5OiAnd2hlZWxjaGFpcicsIHZhbHVlOiAnV2hlZWxjaGFpciAoT24gUmVxdWVzdCknIH0sXHJcbiAgICB7IGVuYWJsZWQ6IGZhbHNlLCBrZXk6ICdjYWxsX29uX2Fycml2YWwnLCB2YWx1ZTogJ0NhbGwgT24gQXJyaXZhbCcgfSxcclxuICAgIHtcclxuICAgICAgZW5hYmxlZDogZmFsc2UsXHJcbiAgICAgIGtleTogJ21lZXRfYW5kX2dyZWV0JyxcclxuICAgICAgdmFsdWU6ICdNZWV0IEFuZCBHcmVldCAoQ2hhcmdlIEFwcGxpZXMpJ1xyXG4gICAgfSxcclxuICAgIHsgZW5hYmxlZDogZmFsc2UsIGtleTogJ3dhaXRfYW5kX3JldHVybicsIHZhbHVlOiAnV2FpdCBBbmQgUmV0dXJuJyB9XHJcbiAgXTtcclxuICByZWFkb25seSBzZWFyY2hUeXBlcyA9IFsnT25lLXdheScsICdSZXR1cm4nXTtcclxuXHJcbiAgcmVhZG9ubHkgYWlycG9ydFNlYXJjaFR5cGVzID0gWydBaXJwb3J0IGRyb3Agb2ZmJywgJ0FpcnBvcnQgUGljayBVcCddO1xyXG4gIHJlYWRvbmx5IGNyaXRlcmlhID0gWydQaWNrIFVwIFRpbWUnXTtcclxuXHJcbiAgbW9kZTogVGF4aUZvcm1Nb2RlID0gVGF4aUZvcm1Nb2RlLkFERFJFU1M7XHJcbiAgbWluU2VsZWN0RGF0ZTogbW9tZW50Lk1vbWVudCA9IG1vbWVudCgpO1xyXG4gIG1pblJldHVyblNlbGVjdERhdGU6IE5nYkRhdGVTdHJ1Y3QgPSB7XHJcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKSxcclxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcclxuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKVxyXG4gIH07XHJcblxyXG4gIC8vIGdldHRlcnMgYW5kIHNldHRlcnNcclxuICBwcml2YXRlIF9kYXRlOiBOZ2JEYXRlU3RydWN0ID0gbnVsbDtcclxuICBzZWxlY3RlZFBsYWNlczogYW55ID0gW107XHJcbiAgcHJpdmF0ZSBfZnJvbUxvY2F0aW9uOiBDYWJIaXJlTG9jYXRpb247XHJcbiAgcHJpdmF0ZSBfdG9Mb2NhdGlvbjogQ2FiSGlyZUxvY2F0aW9uO1xyXG4gIHByaXZhdGUgX3ZpYXM6IENhYkhpcmVMb2NhdGlvbltdID0gW251bGwsIG51bGwsIG51bGwsIG51bGxdO1xyXG5cclxuICBnZXQgZnJvbUxvY2F0aW9uKCk6IENhYkhpcmVMb2NhdGlvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZnJvbUxvY2F0aW9uO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRvTG9jYXRpb24oKTogQ2FiSGlyZUxvY2F0aW9uIHtcclxuICAgIHJldHVybiB0aGlzLl90b0xvY2F0aW9uO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0ZTtcclxuICB9XHJcblxyXG4gIHNldCBkYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XHJcbiAgICB0aGlzLl9kYXRlID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVEYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBzZWFyY2hUeXBlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfc2VhcmNoVHlwZSA9IHRoaXMuc2VhcmNoVHlwZXNbMF07XHJcbiAgZ2V0IHNlYXJjaFR5cGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VhcmNoVHlwZTtcclxuICB9XHJcblxyXG4gIHNldCBzZWFyY2hUeXBlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3NlYXJjaFR5cGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogYWlycG9pcnQgc2VhcmNoVHlwZVxyXG4gICAqL1xyXG5cclxuICBfYWlycG9ydFNlYXJjaFR5cGU6IEFpcnBvcnRTZWFyY2hNb2RlID0gQWlycG9ydFNlYXJjaE1vZGUuRFJPUE9GRjtcclxuICBnZXQgYWlycG9ydFNlYXJjaFR5cGUoKTogQWlycG9ydFNlYXJjaE1vZGUge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FpcnBvcnRTZWFyY2hUeXBlO1xyXG4gIH1cclxuICBzZXQgYWlycG9ydFNlYXJjaFR5cGUobW9kZTogQWlycG9ydFNlYXJjaE1vZGUpIHtcclxuICAgIHRoaXMuX2FpcnBvcnRTZWFyY2hUeXBlID0gbW9kZTtcclxuICAgIGlmICh0aGlzLmZyb21BZGRyZXNzIHx8IHRoaXMudG9BZGRyZXNzKSB7XHJcbiAgICAgIHRoaXMuc3dpdGNoRnJvbUFuZFRvTG9jYXRpb24oKTtcclxuICAgIH1cclxuICB9XHJcbiAgLypcclxuICAgKiBhaXJwb2lydCBhbmQgdHJhaW4gc3RhdGlvbiBzZWFyY2hUeXBlXHJcbiAgICovXHJcblxyXG4gIGdldCBmcm9tTG9jYXRpb25UeXBlKCk6IFRheGlGb3JtTW9kZSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmZyb21Mb2NhdGlvblR5cGU7XHJcbiAgfVxyXG4gIHNldCBmcm9tTG9jYXRpb25UeXBlKG1vZGU6IFRheGlGb3JtTW9kZSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmZyb21Mb2NhdGlvblR5cGUgPSBtb2RlO1xyXG4gIH1cclxuICBnZXQgdG9Mb2NhdGlvblR5cGUoKTogVGF4aUZvcm1Nb2RlIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudG9Mb2NhdGlvblR5cGU7XHJcbiAgfVxyXG4gIHNldCB0b0xvY2F0aW9uVHlwZShtb2RlOiBUYXhpRm9ybU1vZGUpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy50b0xvY2F0aW9uVHlwZSA9IG1vZGU7XHJcbiAgfVxyXG4gIC8qXHJcbiAgICogc2VhcmNoQ3JpdGVyaWFcclxuICAgKi9cclxuICBwcml2YXRlIF9zZWFyY2hDcml0ZXJpYSA9IHRoaXMuY3JpdGVyaWFbMF07XHJcbiAgZ2V0IHNlYXJjaENyaXRlcmlhKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaENyaXRlcmlhO1xyXG4gIH1cclxuXHJcbiAgc2V0IHNlYXJjaENyaXRlcmlhKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3NlYXJjaENyaXRlcmlhID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIG91dGJvdW5kRGF0ZVRpbWVcclxuICAgKi9cclxuICBwcml2YXRlIF9vdXRib3VuZERhdGVUaW1lOiBtb21lbnQuTW9tZW50ID0gdGhpcy5oZWxwZXJzLnJvdW5kKFxyXG4gICAgbW9tZW50KCksXHJcbiAgICBtb21lbnQuZHVyYXRpb24oMTUsICdtaW51dGVzJylcclxuICApO1xyXG4gIGdldCBvdXRib3VuZERhdGVUaW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dGJvdW5kRGF0ZVRpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Ym91bmREYXRlVGltZSh2YWx1ZTogbW9tZW50Lk1vbWVudCkge1xyXG4gICAgdGhpcy5fb3V0Ym91bmREYXRlVGltZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiByZXR1cm5EYXRlVGltZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3JldHVybkRhdGVUaW1lOiBtb21lbnQuTW9tZW50ID0gdGhpcy5oZWxwZXJzLnJvdW5kKFxyXG4gICAgbW9tZW50KCksXHJcbiAgICBtb21lbnQuZHVyYXRpb24oMTUsICdtaW51dGVzJylcclxuICApO1xyXG4gIGdldCByZXR1cm5EYXRlVGltZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9yZXR1cm5EYXRlVGltZTtcclxuICB9XHJcblxyXG4gIHNldCByZXR1cm5EYXRlVGltZSh2YWx1ZTogbW9tZW50Lk1vbWVudCkge1xyXG4gICAgdGhpcy5fcmV0dXJuRGF0ZVRpbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogZmxpZ2h0TnVtYmVyXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZmxpZ2h0TnVtYmVyOiBzdHJpbmcgPSAnJztcclxuICBnZXQgZmxpZ2h0TnVtYmVyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZsaWdodE51bWJlcjtcclxuICB9XHJcbiAgc2V0IGZsaWdodE51bWJlcih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9mbGlnaHROdW1iZXIgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogYWlycG9ydFxyXG4gICAqL1xyXG5cclxuICBnZXQgYWlycG9ydCgpIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYWlycG9ydDtcclxuICB9XHJcbiAgc2V0IGFpcnBvcnQodmFsdWU6IFRheGlBaXJwb3J0KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuYWlycG9ydCA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiB0ZXJtaW5hbFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3Rlcm1pbmFsOiBzdHJpbmcgPSBudWxsO1xyXG4gIGdldCB0ZXJtaW5hbCgpIHtcclxuICAgIHJldHVybiB0aGlzLl90ZXJtaW5hbDtcclxuICB9XHJcbiAgc2V0IHRlcm1pbmFsKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3Rlcm1pbmFsID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF90aW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gIGdldCB0aW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGltZTtcclxuICB9XHJcblxyXG4gIHNldCB0aW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3RpbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZURhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgZGVwYXJ0cygpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZGVwYXJ0cztcclxuICB9XHJcblxyXG4gIHNldCBkZXBhcnRzKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZGVwYXJ0cyA9IHZhbHVlLmlzVmFsaWQgPyB2YWx1ZSA6IG51bGw7XHJcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUuaXNWYWxpZCgpKSB7XHJcbiAgICAgIHRoaXMuX2RhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUodmFsdWUpO1xyXG4gICAgICB0aGlzLl90aW1lID0gdGhpcy5oZWxwZXJzLmZvcm1hdFRpbWVDb2xvbih2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm1pblJldHVyblNlbGVjdERhdGUgPSB7XHJcbiAgICAgIGRheTogbW9tZW50KHZhbHVlKS5kYXRlKCksXHJcbiAgICAgIG1vbnRoOiBtb21lbnQodmFsdWUpLm1vbnRoKCkgKyAxLFxyXG4gICAgICB5ZWFyOiBtb21lbnQodmFsdWUpLnllYXIoKVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodmFsdWUuaXNBZnRlcih0aGlzLnJldHVybkRhdGVUaW1lKSkge1xyXG4gICAgICB0aGlzLnJldHVybkRhdGVUaW1lLnNldCgnZGF0ZScsIHZhbHVlLmRhdGUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gZ2V0IGZyb21Mb2NhdGlvbigpOiBDYWJIaXJlTG9jYXRpb24ge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuX2Zyb21Mb2NhdGlvbjtcclxuICAvLyB9XHJcblxyXG4gIC8vIHNldCBmcm9tTG9jYXRpb24odmFsdWU6IENhYkhpcmVMb2NhdGlvbikge1xyXG4gIC8vICAgdGhpcy5fZnJvbUxvY2F0aW9uID0gdmFsdWU7XHJcbiAgLy8gICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBnZXQgdG9Mb2NhdGlvbigpOiBDYWJIaXJlTG9jYXRpb24ge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuX3RvTG9jYXRpb247XHJcbiAgLy8gfVxyXG5cclxuICAvLyBzZXQgdG9Mb2NhdGlvbih2YWx1ZTogQ2FiSGlyZUxvY2F0aW9uKSB7XHJcbiAgLy8gICB0aGlzLl90b0xvY2F0aW9uID0gdmFsdWU7XHJcbiAgLy8gICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgLy8gfVxyXG5cclxuICBnZXQgYWR1bHRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFkdWx0cztcclxuICB9XHJcblxyXG4gIHNldCBhZHVsdHModmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNoaWxkcmVuKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNoaWxkcmVuKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGluZmFudHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaW5mYW50cztcclxuICB9XHJcblxyXG4gIHNldCBpbmZhbnRzKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5pbmZhbnRzID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY291bnRyeUNvZGUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY291bnRyeUNvZGU7XHJcbiAgfVxyXG5cclxuICBzZXQgY291bnRyeUNvZGUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNvdW50cnlDb2RlID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdmlhcygpOiBDYWJIaXJlTG9jYXRpb25bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmlhcztcclxuICB9XHJcblxyXG4gIHNldCB2aWFzKHZhbHVlOiBDYWJIaXJlTG9jYXRpb25bXSkge1xyXG4gICAgdGhpcy5fdmlhcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHZpYXNGcm9tKCk6IEFkZHJlc3NGb3JtIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudmlhc0Zyb207XHJcbiAgfVxyXG5cclxuICBzZXQgdmlhc0Zyb20odmFsdWU6IEFkZHJlc3NGb3JtKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMudmlhc0Zyb20gPSB2YWx1ZTtcclxuICAgIHRoaXMuX3ZpYXNbMF0gPSB2YWx1ZSA/IHRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHZhbHVlKSA6IG51bGw7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdmlhc1RvKCk6IEFkZHJlc3NGb3JtIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudmlhc1RvO1xyXG4gIH1cclxuXHJcbiAgc2V0IHZpYXNUbyh2YWx1ZTogQWRkcmVzc0Zvcm0pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy52aWFzVG8gPSB2YWx1ZTtcclxuICAgIHRoaXMuX3ZpYXNbMV0gPSB2YWx1ZSA/IHRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHZhbHVlKSA6IG51bGw7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdmVoaWNsZVR5cGUoKTogQ2FiSGlyZVZlaGljbGVUeXBlIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudmVoaWNsZVR5cGU7XHJcbiAgfVxyXG5cclxuICBzZXQgdmVoaWNsZVR5cGUodmFsdWU6IENhYkhpcmVWZWhpY2xlVHlwZSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnZlaGljbGVUeXBlID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgZnJvbUFkZHJlc3MoKTogQWRkcmVzc0Zvcm0ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5mcm9tQWRkcmVzcztcclxuICB9XHJcblxyXG4gIHNldCBmcm9tQWRkcmVzcyh2YWx1ZTogQWRkcmVzc0Zvcm0pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5mcm9tQWRkcmVzcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5fZnJvbUxvY2F0aW9uID0gdmFsdWUgPyB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih2YWx1ZSkgOiBudWxsO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZyb21TdGF0aW9uKCk6IFJhaWxBaXJwb3J0IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZnJvbVN0YXRpb247XHJcbiAgfVxyXG5cclxuICBzZXQgZnJvbVN0YXRpb24odmFsdWU6IFJhaWxBaXJwb3J0KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZnJvbVN0YXRpb24gPSB2YWx1ZTtcclxuXHJcbiAgICB0aGlzLl9mcm9tTG9jYXRpb24gPSB2YWx1ZVxyXG4gICAgICA/IHtcclxuICAgICAgICAgIGFkZHJlc3M6IHZhbHVlLmRlc3RpbmF0aW9uLFxyXG4gICAgICAgICAgcG9zdGNvZGU6IHZhbHVlLnBvc3Rjb2RlXHJcbiAgICAgICAgfVxyXG4gICAgICA6IG51bGw7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdG9BZGRyZXNzKCk6IEFkZHJlc3NGb3JtIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudG9BZGRyZXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IHRvQWRkcmVzcyh2YWx1ZTogQWRkcmVzc0Zvcm0pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy50b0FkZHJlc3MgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3RvTG9jYXRpb24gPSB2YWx1ZSA/IHRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHZhbHVlKSA6IG51bGw7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdG9TdGF0aW9uKCk6IFJhaWxBaXJwb3J0IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudG9TdGF0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2V0IHRvU3RhdGlvbih2YWx1ZTogUmFpbEFpcnBvcnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy50b1N0YXRpb24gPSB2YWx1ZTtcclxuICAgIHRoaXMuX3RvTG9jYXRpb24gPSB2YWx1ZVxyXG4gICAgICA/IHtcclxuICAgICAgICAgIGFkZHJlc3M6IHZhbHVlLmRlc3RpbmF0aW9uLFxyXG4gICAgICAgICAgcG9zdGNvZGU6IHZhbHVlLnBvc3Rjb2RlXHJcbiAgICAgICAgfVxyXG4gICAgICA6IG51bGw7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY2FiZmV0Y2hlcjogQmFzZUNhYmhpcmVRdW90ZUZldGNoZXI8Q0hfUT4sXHJcbiAgICBoZWxwZXJzOiBCYXNlSGVscGVyUm91dGluZXMsXHJcbiAgICBzdG9yYWdlU2VydmljZTogQmFzZVN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzZWFyY2hTZXJ2aWNlOiBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSxcclxuICAgIHByaXZhdGUgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2VcclxuICApIHtcclxuICAgIHN1cGVyKHN0b3JhZ2VTZXJ2aWNlLCBoZWxwZXJzKTtcclxuICAgIGNvbnN0IGRhdGE6IHtcclxuICAgICAgdGVtcFBhcmFtczogQ2FiSGlyZVRlbXBQYXJhbXM7XHJcbiAgICB9ID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIENhYkhpcmVFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVNcclxuICAgICkgfHwge1xyXG4gICAgICB0ZW1wUGFyYW1zOiB7fSBhcyBDYWJIaXJlVGVtcFBhcmFtc1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXMoc2VhcmNoU2VydmljZS5tYWtlQ2FiSGlyZVF1ZXJ5KGRhdGEudGVtcFBhcmFtcykpO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJldHVybkRhdGE6IGFueSA9IHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtKFxyXG4gICAgICAgIENhYkhpcmVFbnRlcnByaXNlU2VhcmNoLlNFQ09OREFSWV9TVE9SQUdFX1NFU1NJT05fUEFSQU1TXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChyZXR1cm5EYXRhKSB7XHJcbiAgICAgICAgdGhpcy5yZXR1cm5EYXRlVGltZSA9IG1vbWVudChyZXR1cm5EYXRhLnRlbXBQYXJhbXMuZGVwYXJ0cyk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hUeXBlID0gdGhpcy5zZWFyY2hUeXBlc1sxXTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignKysrIEVycm9yIHJlY292ZXJpbmcgcmV0dXJuIGRhdGE6ICcsIGVycm9yLCAnICsrKycpO1xyXG4gICAgfVxyXG4gICAgaWYgKGRhdGEudGVtcFBhcmFtcy5mcm9tQWRkcmVzcykge1xyXG4gICAgICB0aGlzLmZyb21BZGRyZXNzID0gZGF0YS50ZW1wUGFyYW1zLmZyb21BZGRyZXNzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkYXRhLnRlbXBQYXJhbXMudG9BZGRyZXNzKSB7XHJcbiAgICAgIHRoaXMudG9BZGRyZXNzID0gZGF0YS50ZW1wUGFyYW1zLnRvQWRkcmVzcztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VhcmNoU2VydmljZS5zaG91bGRBZGRUcmF2ZWxsZXJTdWJzY3JpcHRpb24oKSkge1xyXG4gICAgICBzZWFyY2hTZXJ2aWNlLnRyYXZlbGxlckluZm9ybWF0aW9uLnN1YnNjcmliZShcclxuICAgICAgICAodHJhdmVsbGVyczogVHJhdmVsbGVyW10pID0+IHtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVycyA9IHRyYXZlbGxlcnM7XHJcbiAgICAgICAgICBjb25zdCBzcGxpdFRyYXZlbGxlcnMgPSB0aGlzLmhlbHBlcnMuc2VsZWN0ZWRUcmF2ZWxsZXJzKFxyXG4gICAgICAgICAgICB0cmF2ZWxsZXJzLFxyXG4gICAgICAgICAgICBTZXJ2aWNlVHlwZS5DYWJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gc3BsaXRUcmF2ZWxsZXJzLmFkdWx0cy5sZW5ndGg7XHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPSBzcGxpdFRyYXZlbGxlcnMuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZXN1bHRzID1cclxuICAgICAgc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW1Bc0xpc3Q8Q2FiaGlyZVF1b3RlUmVzdWx0QXJyYXk+KFxyXG4gICAgICAgIHRoaXMucmVzdWx0c1Nlc3Npb25OYW1lXHJcbiAgICAgICkgfHwgW107XHJcbiAgICB0aGlzLmZ1bGxSZXN1bHRzID0gcmVzdWx0cztcclxuICAgIHRoaXMuX2NoZWFwZXN0UmVzdWx0UHJpY2UgPSB0aGlzLnVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHMpO1xyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQocmVzdWx0cyB8fCBbXSk7XHJcblxyXG4gICAgY29uc3Qgc2Vjb25kYXJ5UmVzdWx0cyA9XHJcbiAgICAgIHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtQXNMaXN0KHRoaXMubXVsdGlSZXN1bHRzU2Vzc2lvbk5hbWUpIHx8IFtdO1xyXG5cclxuICAgIHRoaXMuZnVsbE11bHRpUmVzdWx0cyA9IHNlY29uZGFyeVJlc3VsdHM7XHJcbiAgICB0aGlzLm11bHRpUmVzdWx0cy5uZXh0KHNlY29uZGFyeVJlc3VsdHMpO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgdGhpcy5vdXRib3VuZFZpc2liaWxpdHkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHRoaXMuaW5ib3VuZFZpc2liaWxpdHkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCByZXN1bHRzU2Vzc2lvbk5hbWUgPVxyXG4gICAgQ2FiSGlyZUVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XHJcblxyXG4gIHByb3RlY3RlZCBtdWx0aVJlc3VsdHNTZXNzaW9uTmFtZSA9XHJcbiAgICBDYWJIaXJlRW50ZXJwcmlzZVNlYXJjaC5NVUxUSV9TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuXHJcbiAgcHJvdGVjdGVkIHJlc2V0UXVlcnkoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXModGhpcy5zZWFyY2hTZXJ2aWNlLm1ha2VDYWJIaXJlUXVlcnkoKSk7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnJlbW92ZVNlc3Npb25JdGVtKFxyXG4gICAgICAgIENhYkhpcmVFbnRlcnByaXNlU2VhcmNoLlNFQ09OREFSWV9TVE9SQUdFX1NFU1NJT05fUEFSQU1TXHJcbiAgICAgICk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge31cclxuICAgIHRoaXMuX3NlYXJjaFR5cGUgPSB0aGlzLnNlYXJjaFR5cGVzWzBdOyAvLyByZXNldCB0byBvbmUtd2F5XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzZXRQYXJhbXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlc2V0KCk7XHJcbiAgICB0aGlzLnJlc2V0UXVlcnkoKTtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcclxuICAgIHRoaXMubXVsdGlSZXN1bHRzLm5leHQoW10pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNWYWxpZCgpIHtcclxuICAgIGlmICghdGhpcy5kb0NoZWNrcykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBDYWJIaXJlRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TLFxyXG4gICAgICB7XHJcbiAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMgPSBbXTtcclxuICAgIGlmICghdGhpcy50ZW1wUGFyYW1zLmZyb21BZGRyZXNzKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ0Zyb20gLSBFbnRlciBhIGxvY2F0aW9uIG9yIHBvc3Rjb2RlLicpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy50ZW1wUGFyYW1zLnRvQWRkcmVzcykge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdUbyAtIEVudGVyIGEgbG9jYXRpb24gb3IgcG9zdGNvZGUuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudGVtcFBhcmFtcy5kZXBhcnRzLnVuaXgoKSA8IG1vbWVudCgpLnVuaXgoKSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdUYXhpIGpvdXJuZXkgY2Fubm90IGJlIGluIHRoZSBwYXN0LicpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnRlbXBQYXJhbXMuYWR1bHRzICsgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuIDwgMSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IDEgdHJhdmVsbGVyJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlYXJjaFR5cGUgPT09IHRoaXMuc2VhcmNoVHlwZXNbMV0gJiZcclxuICAgICAgdGhpcy5yZXR1cm5EYXRlVGltZS5pc1NhbWVPckJlZm9yZSh0aGlzLmRlcGFydHMpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAnUmV0dXJuIERhdGUvVGltZSBtdXN0IGJlIGFmdGVyIG91dGJvdW5kIGRhdGUvdGltZSdcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzVmFsaWQubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5sZW5ndGggPT09IDApO1xyXG4gICAgdGhpcy5tZXNzYWdlcy5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZURhdGVUaW1lKCkge1xyXG4gICAgaWYgKHRoaXMuX2RhdGUgJiYgdGhpcy5fdGltZSkge1xyXG4gICAgICB0aGlzLmRlcGFydHMgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQodGhpcy5fZGF0ZSwgdGhpcy5fdGltZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGFydFNlYXJjaCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcclxuICAgIHRoaXMubXVsdGlSZXN1bHRzLm5leHQoW10pO1xyXG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xyXG4gICAgICBpZiAodGhpcy5zZWFyY2hUeXBlID09PSB0aGlzLnNlYXJjaFR5cGVzWzFdKSB7XHJcbiAgICAgICAgLy8gcmV0dXJuIC0ga2ljayBvZmYgdHdvIHNlYXJjaGVzXHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICAgICAgY29uc3QgcmV0dXJuUXVlcnkgPSB0aGlzLmdldFJldHVyblNlYXJjaFF1ZXJ5KCk7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKCcrKysgU2VhcmNoIFF1ZXJ5OiAnLCBxdWVyeSwgJyArKysnKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnKysrIFNlYXJjaCBSZXR1cm4gUXVlcnk6ICcsIHJldHVyblF1ZXJ5LCAnICsrKycpO1xyXG5cclxuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICAgICAgQ2FiSGlyZUVudGVycHJpc2VTZWFyY2guU0VDT05EQVJZX1NUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHRlbXBQYXJhbXM6IHJldHVyblF1ZXJ5XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0TXVsdGlTZWFyY2goW1xyXG4gICAgICAgICAgdGhpcy5jYWJmZXRjaGVyLmZldGNoTGlzdChcclxuICAgICAgICAgICAgdGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3M+KHF1ZXJ5KVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIHRoaXMuY2FiZmV0Y2hlci5mZXRjaExpc3QoXHJcbiAgICAgICAgICAgIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxRdWVyeVNlYXJjaENhYkhpcmVBcmdzPihyZXR1cm5RdWVyeSlcclxuICAgICAgICAgIClcclxuICAgICAgICBdKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZVJlY2VudFNlYXJjaCh0aGlzLmdldFJlY2VudFNlYXJjaFF1ZXJ5KHRoaXMuZ2V0U2VhcmNoUXVlcnkoKSkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRTZWFyY2goXHJcbiAgICAgICAgICB0aGlzLmNhYmZldGNoZXIuZmV0Y2hMaXN0KFxyXG4gICAgICAgICAgICB0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8UXVlcnlTZWFyY2hDYWJIaXJlQXJncz4ocXVlcnkpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRSZWNlbnRTZWFyY2hRdWVyeShcclxuICAgIHF1ZXJ5OiBRdWVyeVNlYXJjaENhYkhpcmVBcmdzXHJcbiAgKTogU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzIHtcclxuICAgIGNvbnN0IHJlY2VudFNlYXJjaFF1ZXJ5OiBJQ2FiSGlyZVNlYXJjaEFyZ3MgPSB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5DYWIsXHJcbiAgICAgIHNlYXJjaEFyZ3M6IHJlY2VudFNlYXJjaFF1ZXJ5LFxyXG4gICAgICB0cmF2ZWxEYXRlOiB0aGlzLmRlcGFydHMuZm9ybWF0KCksXHJcbiAgICAgIHRyYXZlbGxlcnM6IHRoaXMuaGVscGVycy5nZXRUcmF2ZWxsZXJzSWQodGhpcy50cmF2ZWxsZXJzKVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlU2VyY2hRdWVyeShxdWVyeTogUXVlcnlTZWFyY2hDYWJIaXJlQXJncyk6IElDYWJIaXJlU2VhcmNoQXJnc3tcclxuICAgIGNvbnN0IHNlYXJjaFF1ZXJ5OiBJQ2FiSGlyZVNlYXJjaEFyZ3MgPSBxdWVyeTtcclxuICAgIHNlYXJjaFF1ZXJ5LmZyb21BZGRyZXNzID0gdGhpcy50ZW1wUGFyYW1zLmZyb21BZGRyZXNzO1xyXG4gICAgc2VhcmNoUXVlcnkudG9BZGRyZXNzID0gdGhpcy50ZW1wUGFyYW1zLnRvQWRkcmVzcztcclxuXHJcbiAgICBzZWFyY2hRdWVyeS5mcm9tU3RhdGlvbiA9IHRoaXMudGVtcFBhcmFtcy5mcm9tU3RhdGlvbjtcclxuICAgIHNlYXJjaFF1ZXJ5LnRvU3RhdGlvbiA9IHRoaXMudGVtcFBhcmFtcy50b1N0YXRpb247XHJcblxyXG4gICAgc2VhcmNoUXVlcnkudmlhc0Zyb20gPSB0aGlzLnZpYXNGcm9tO1xyXG4gICAgc2VhcmNoUXVlcnkudmlhc1RvID0gdGhpcy52aWFzVG87XHJcblxyXG4gICAgcmV0dXJuIHNlYXJjaFF1ZXJ5O1xyXG4gIH1cclxuXHJcbiAgc3RhcnRSZWNlbnRTZWFyY2gocmVjZW50U2VhcmNoOiBSZWNlbnRTZWFyY2gpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVwYXJ0cyA9IG1vbWVudChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXBhcnRzKTtcclxuICAgIHRoaXMudmVoaWNsZVR5cGUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy52ZWhpY2xlVHlwZTtcclxuXHJcbiAgICB0aGlzLmZyb21BZGRyZXNzID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZnJvbUFkZHJlc3M7XHJcbiAgICB0aGlzLnRvQWRkcmVzcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnRvQWRkcmVzcztcclxuXHJcbiAgICB0aGlzLmZyb21TdGF0aW9uID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZnJvbVN0YXRpb247XHJcbiAgICB0aGlzLnRvU3RhdGlvbiA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnRvU3RhdGlvbjtcclxuXHJcbiAgICB0aGlzLl9mcm9tTG9jYXRpb24gPSB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih0aGlzLmZyb21BZGRyZXNzKTtcclxuICAgIHRoaXMuX3RvTG9jYXRpb24gPSB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih0aGlzLnRvQWRkcmVzcyk7XHJcblxyXG4gICAgdGhpcy52aWFzRnJvbSA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnZpYXNGcm9tO1xyXG4gICAgdGhpcy52aWFzVG8gPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy52aWFzVG87XHJcblxyXG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcclxuICB9XHJcblxyXG4gIGdldFNlYXJjaFF1ZXJ5KCk6IFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3Mge1xyXG4gICAgY29uc3QgcXVlcnk6IFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3MgPSB7XHJcbiAgICAgIGFkdWx0czogdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyxcclxuICAgICAgY2hpbGRyZW46IHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbixcclxuICAgICAgZGVwYXJ0czogdGhpcy50ZW1wUGFyYW1zLmRlcGFydHMsXHJcbiAgICAgIGZyb21Mb2NhdGlvbjogdGhpcy5jcmVhdGVDYWJIaXJlTG9jYXRpb24odGhpcy50ZW1wUGFyYW1zLmZyb21BZGRyZXNzKSxcclxuICAgICAgdG9Mb2NhdGlvbjogdGhpcy5jcmVhdGVDYWJIaXJlTG9jYXRpb24odGhpcy50ZW1wUGFyYW1zLnRvQWRkcmVzcyksXHJcbiAgICAgIGluZmFudHM6IDAsXHJcbiAgICAgIHZlaGljbGVUeXBlOiB0aGlzLnZlaGljbGVUeXBlLFxyXG4gICAgICB2aWFzOiB0aGlzLl92aWFzXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxRdWVyeVNlYXJjaENhYkhpcmVBcmdzPihxdWVyeSk7XHJcbiAgfVxyXG5cclxuICBnZXRSZXR1cm5TZWFyY2hRdWVyeSgpOiBRdWVyeVNlYXJjaENhYkhpcmVBcmdzIHtcclxuICAgIGNvbnN0IHF1ZXJ5OiBRdWVyeVNlYXJjaENhYkhpcmVBcmdzID0ge1xyXG4gICAgICBhZHVsdHM6IHRoaXMudGVtcFBhcmFtcy5hZHVsdHMsXHJcbiAgICAgIGNoaWxkcmVuOiB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4sXHJcbiAgICAgIGRlcGFydHM6IHRoaXMuX3JldHVybkRhdGVUaW1lLFxyXG4gICAgICBmcm9tTG9jYXRpb246IHRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHRoaXMudGVtcFBhcmFtcy50b0FkZHJlc3MpLCAvLyBzd2FwIHRoZSBsb2NhdGlvbnMgYXJvdW5kXHJcbiAgICAgIHRvTG9jYXRpb246IHRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHRoaXMudGVtcFBhcmFtcy5mcm9tQWRkcmVzcyksXHJcbiAgICAgIGluZmFudHM6IDAsXHJcbiAgICAgIHZlaGljbGVUeXBlOiB0aGlzLnZlaGljbGVUeXBlLFxyXG4gICAgICB2aWFzOiB0aGlzLl92aWFzXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxRdWVyeVNlYXJjaENhYkhpcmVBcmdzPihxdWVyeSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVPdXRib3VuZEFkZHJlc3MobG9jYXRpb246IGFueSwgcGxhY2VEZXNjcmlwdGlvbj86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmZyb21BZGRyZXNzID0gdGhpcy5nZXRBZGRyZXNzRm9ybWF0KFxyXG4gICAgICBsb2NhdGlvbixcclxuICAgICAgcGxhY2VEZXNjcmlwdGlvblxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUluYm91bmRBZGRyZXNzKGxvY2F0aW9uOiBhbnksIHBsYWNlRGVzY3JpcHRpb24/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy50b0FkZHJlc3MgPSB0aGlzLmdldEFkZHJlc3NGb3JtYXQoXHJcbiAgICAgIGxvY2F0aW9uLFxyXG4gICAgICBwbGFjZURlc2NyaXB0aW9uXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVDYWJIaXJlTG9jYXRpb24obG9jYXRpb246IEFkZHJlc3NGb3JtKTogQ2FiSGlyZUxvY2F0aW9uIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGFkZHJlc3M6IFtcclxuICAgICAgICBsb2NhdGlvbj8uVGVybWluYWwsXHJcbiAgICAgICAgbG9jYXRpb24/LkhvdXNlLFxyXG4gICAgICAgIGxvY2F0aW9uPy5TdHJlZXQsXHJcbiAgICAgICAgbG9jYXRpb24/LlRvd24sXHJcbiAgICAgICAgbG9jYXRpb24/LkNvdW50cnlcclxuICAgICAgXVxyXG4gICAgICAgIC5maWx0ZXIoKGl0ZW06IHN0cmluZyk6IGJvb2xlYW4gPT4gISFpdGVtKVxyXG4gICAgICAgIC5qb2luKCcsJyksXHJcbiAgICAgIHBvc3Rjb2RlOiBsb2NhdGlvbj8uUG9zdENvZGVcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBtYXRjaEFkZHJlc3NlcygpIHtcclxuICAgIHRoaXMuX3RvTG9jYXRpb24gPSB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih0aGlzLnRlbXBQYXJhbXMudG9BZGRyZXNzKTtcclxuICAgIHRoaXMuX2Zyb21Mb2NhdGlvbiA9IHRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKFxyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMuZnJvbUFkZHJlc3NcclxuICAgICk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBzb3J0QnkoYXNjPzogYm9vbGVhbiwgcmV0dXJuSW5kZXg/OiBudW1iZXIpIHtcclxuICAgIGlmIChyZXR1cm5JbmRleCA+PSAwKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdoZXJlJyk7XHJcbiAgICAgIGxldCByZXN1bHRzID0gdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMuZnVsbE11bHRpUmVzdWx0c1tyZXR1cm5JbmRleF0pO1xyXG4gICAgICBpZiAoYXNjKSB7XHJcbiAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IGIucHJpY2UgLSBhLnByaWNlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXN1bHRzID0gcmVzdWx0cy5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4gYS5wcmljZSAtIGIucHJpY2UpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZnVsbE11bHRpUmVzdWx0c1tyZXR1cm5JbmRleF0gPSByZXN1bHRzO1xyXG4gICAgICB0aGlzLm11bHRpUmVzdWx0cy5uZXh0KHRoaXMuZnVsbE11bHRpUmVzdWx0cyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgcmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLmZ1bGxSZXN1bHRzKTtcclxuICAgICAgaWYgKGFzYykge1xyXG4gICAgICAgIHJlc3VsdHMgPSByZXN1bHRzLnNvcnQoXHJcbiAgICAgICAgICAoYTogQ2FiSGlyZVF1b3RlLCBiOiBDYWJIaXJlUXVvdGUpID0+IGIucHJpY2UgLSBhLnByaWNlXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXN1bHRzID0gcmVzdWx0cy5zb3J0KFxyXG4gICAgICAgICAgKGE6IENhYkhpcmVRdW90ZSwgYjogQ2FiSGlyZVF1b3RlKSA9PiBhLnByaWNlIC0gYi5wcmljZVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZXN1bHRzLm5leHQocmVzdWx0cyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAhIHN0dWZmIHRvIGdvIGluIGEgcG9zdGNvZGUgc2VydmllXHJcblxyXG4gIGdldEFkZHJlc3NGb3JtYXQobG9jYXRpb246IGFueSwgcGxhY2VEZXNjcmlwdGlvbj86IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgSG91c2U6IHRoaXMuZ2V0QWRkcmVzc0Zyb21QbGFjZURldGFpbHMobG9jYXRpb24sIFtcclxuICAgICAgICAnZmxvb3InLFxyXG4gICAgICAgICdzdHJlZXRfbnVtYmVyJyxcclxuICAgICAgICAncHJlbWlzZSdcclxuICAgICAgXSksXHJcbiAgICAgIFN0cmVldDogdGhpcy5nZXRBZGRyZXNzRnJvbVBsYWNlRGV0YWlscyhsb2NhdGlvbiwgW1xyXG4gICAgICAgICdyb3V0ZScsXHJcbiAgICAgICAgJ3N0cmVldF9uYW1lJyxcclxuICAgICAgICAnZXN0YWJsaXNobWVudCdcclxuICAgICAgXSksXHJcbiAgICAgIFRvd246IHRoaXMuZ2V0QWRkcmVzc0Zyb21QbGFjZURldGFpbHMobG9jYXRpb24sIFtcclxuICAgICAgICAncG9zdGFsX3Rvd24nLFxyXG4gICAgICAgICdhZG1pbmlzdHJhdGl2ZV9hcmVhX2xldmVsXzInLFxyXG4gICAgICAgICdsb2NhbGl0eSdcclxuICAgICAgXSksXHJcbiAgICAgIFBvc3RDb2RlOiB0aGlzLmdldEFkZHJlc3NGcm9tUGxhY2VEZXRhaWxzKGxvY2F0aW9uLCBbJ3Bvc3RhbF9jb2RlJ10pLFxyXG4gICAgICBDb3VudHJ5OiB0aGlzLmdldEFkZHJlc3NGcm9tUGxhY2VEZXRhaWxzKGxvY2F0aW9uLCBbJ2NvdW50cnknXSksXHJcbiAgICAgIHBsYWNlRGVzY3JpcHRpb25cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXRBZGRyZXNzRnJvbVBsYWNlRGV0YWlscyhwbGFjZURldGFpbHM6IGFueSwgdHlwZXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcclxuICAgIGxldCBhZGRyZXNzUHJvcCA9IG51bGw7XHJcbiAgICBpZiAocGxhY2VEZXRhaWxzICYmIEFycmF5LmlzQXJyYXkocGxhY2VEZXRhaWxzKSkge1xyXG4gICAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcclxuICAgICAgICBjb25zdCBwcm9wID0gcGxhY2VEZXRhaWxzLmZpbHRlcigocGQpID0+IHtcclxuICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHBkLnR5cGVzKSAmJiBwZC50eXBlcy5pbmNsdWRlcyh0eXBlKTtcclxuICAgICAgICB9KVswXTtcclxuXHJcbiAgICAgICAgaWYgKHByb3ApIHtcclxuICAgICAgICAgIGFkZHJlc3NQcm9wID0gcHJvcC5sb25nX25hbWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhZGRyZXNzUHJvcDtcclxuICB9XHJcblxyXG4gIGdldEFkZHJlc3NGcm9tQWlycG9ydERldGFpbHMoXHJcbiAgICBhaXJwb3J0RGV0YWlsczogTG9jYXRpb25EZXRhaWwsXHJcbiAgICBhaXJwb3J0TmFtZTogc3RyaW5nXHJcbiAgKSB7XHJcbiAgICBjb25zb2xlLmxvZyhhaXJwb3J0RGV0YWlscyk7XHJcbiAgICBsZXQgYWRkcmVzczogQWRkcmVzc0Zvcm0gPSBudWxsO1xyXG4gICAgaWYgKGFpcnBvcnREZXRhaWxzKSB7XHJcbiAgICAgIGFkZHJlc3MgPSB7XHJcbiAgICAgICAgQ291bnRyeTogYWlycG9ydERldGFpbHMuY291bnRyeSxcclxuICAgICAgICBTdHJlZXQ6IGFpcnBvcnREZXRhaWxzLnJvYWQsXHJcbiAgICAgICAgUG9zdENvZGU6IGFpcnBvcnREZXRhaWxzLnBvc3Rjb2RlLFxyXG4gICAgICAgIFRvd246IGFpcnBvcnREZXRhaWxzLmNpdHksXHJcbiAgICAgICAgcGxhY2VEZXNjcmlwdGlvbjogYWlycG9ydE5hbWUsXHJcbiAgICAgICAgSG91c2U6IGFpcnBvcnROYW1lXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWRkcmVzcztcclxuICB9XHJcblxyXG4gIHNldExvY2F0aW9uRnJvbUFpcnBvcnQoYWlycG9ydERldGFpbHM6IExvY2F0aW9uRGV0YWlsLCBhaXJwb3J0TmFtZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBhZGRyZXNzID0gdGhpcy5nZXRBZGRyZXNzRnJvbUFpcnBvcnREZXRhaWxzKFxyXG4gICAgICBhaXJwb3J0RGV0YWlscyxcclxuICAgICAgYWlycG9ydE5hbWVcclxuICAgICk7XHJcbiAgICBpZiAodGhpcy5tb2RlID09PSBUYXhpRm9ybU1vZGUuU1RBVElPTikge1xyXG4gICAgICBpZiAodGhpcy5haXJwb3J0U2VhcmNoVHlwZSA9PT0gQWlycG9ydFNlYXJjaE1vZGUuUElDS1VQKSB7XHJcbiAgICAgICAgdGhpcy5mcm9tQWRkcmVzcyA9IGFkZHJlc3M7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy50b0FkZHJlc3MgPSBhZGRyZXNzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRUb1NlbGVjdGVkUGxhY2VzKGFkZHJlc3M6IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZFBsYWNlcy5wdXNoKGFkZHJlc3MpO1xyXG4gIH1cclxuXHJcbiAgc2V0T3V0Ym91bmRGb3JtVmlzaWJpbGl0eShzaG93Rm9ybTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5vdXRib3VuZFZpc2liaWxpdHkubmV4dChzaG93Rm9ybSk7XHJcbiAgfVxyXG5cclxuICBzZXRJbmJvdW5kRm9ybVZpc2liaWxpdHkoc2hvd0Zvcm06IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuaW5ib3VuZFZpc2liaWxpdHkubmV4dChzaG93Rm9ybSk7XHJcbiAgfVxyXG5cclxuICBnZXRPdXRib3VuZEZvcm1WaXNpYmlsaXR5KCk6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gdGhpcy5vdXRib3VuZFZpc2liaWxpdHk7XHJcbiAgfVxyXG5cclxuICBnZXRJbmJvdW5kRm9ybVZpc2liaWxpdHkoKTogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+IHtcclxuICAgIHJldHVybiB0aGlzLmluYm91bmRWaXNpYmlsaXR5O1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRnJvbVByZXZpb3VzU2VhcmNoZXMoXHJcbiAgICBwcmV2aW91c0l0ZW1zOiBSZWNvcmQ8U2VydmljZVR5cGUsIEJhc2tldEl0ZW0+XHJcbiAgKTogdm9pZCB7XHJcbiAgICBjb25zdCBmbGlnaHRJdGVtOiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyA9XHJcbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuRmxpZ2h0XT8uc2VhcmNoUXVlcnk7XHJcbiAgICBpZiAoZmxpZ2h0SXRlbSkge1xyXG4gICAgICAvLyBUT0RPIGZsaWdodHMgaGF2ZW4ndCBiZWVuIGRvbmUgeWV0LlxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VHJhbnNUeXBlKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCB0cmFuc1R5cGVJbmRleCA9IHRoaXMudGVtcFBhcmFtcy52ZWhpY2xlVHlwZTtcclxuICAgIHJldHVybiB0aGlzLnRyYW5zVHlwZXMuZmluZCgoeCkgPT4geC5rZXkgPT09IHRyYW5zVHlwZUluZGV4KT8udmFsdWUgfHwgJyc7XHJcbiAgfVxyXG5cclxuICBnZXRQYXNzZW5nZXJzID0gKCk6IHN0cmluZyA9PiB7XHJcbiAgICBjb25zdCBhZHVsdHMgPSB0aGlzLmFkdWx0cztcclxuICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcclxuICAgIGxldCBwYXNzZW5nZXJzID0gYCR7YWR1bHRzfSBBZHVsdGA7XHJcblxyXG4gICAgaWYgKE51bWJlcihhZHVsdHMpICE9PSAxKSB7XHJcbiAgICAgIHBhc3NlbmdlcnMgKz0gJ3MnO1xyXG4gICAgfVxyXG4gICAgaWYgKE51bWJlcihjaGlsZHJlbikgPT09IDEpIHtcclxuICAgICAgcGFzc2VuZ2VycyArPSBgLCAke2NoaWxkcmVufSBDaGlsZGA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKE51bWJlcihjaGlsZHJlbikgPiAxKSB7XHJcbiAgICAgIHBhc3NlbmdlcnMgKz0gYCwgJHtjaGlsZHJlbn0gQ2hpbGRyZW5gO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBhc3NlbmdlcnM7XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfTtcclxuXHJcbiAgYXN5bmMgYWRkQ2FiSGlyZVRvQmFza2V0KFxyXG4gICAgY2FiSGlyZVF1b3RlOiBDYWJIaXJlUXVvdGUsXHJcbiAgICBjYWJIaXJlUXVlcnk6IFNlYXJjaENhYkhpcmVRdWVyeVZhcmlhYmxlc1xyXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKGNhYkhpcmVRdW90ZS51bmF2YWlsYWJsZSkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPVxyXG4gICAgICBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xyXG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xyXG4gICAgY29uc3QgdGVybXNBbmRDb25kaXRpb25zID0gdGhpcy5nZXRUZXJtc0FuZENvbmQoY2FiSGlyZVF1b3RlKTtcclxuICAgIGlmIChiYXNrZXQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcclxuICAgICAgICB7XHJcbiAgICAgICAgICBhZHVsdHM6IGNhYkhpcmVRdWVyeS5hZHVsdHMsXHJcbiAgICAgICAgICBiYXNrZXQ6IGJhc2tldC5pZCxcclxuICAgICAgICAgIHNlcnZpY2U6IGNhYkhpcmVRdW90ZS5zb3VyY2VJZC50b1N0cmluZygpLFxyXG4gICAgICAgICAgZGV0YWlsOiB7XHJcbiAgICAgICAgICAgIGlkOiBjYWJIaXJlUXVvdGUuaWQsXHJcbiAgICAgICAgICAgIGRlcGFydHM6IGNhYkhpcmVRdW90ZS5kZXBhcnRzLFxyXG4gICAgICAgICAgICBzdXBwbGllck5hbWU6IGNhYkhpcmVRdW90ZS5zdXBwbGllck5hbWUsXHJcbiAgICAgICAgICAgIGVzdGltYXRlZENPMjogY2FiSGlyZVF1b3RlLmVzdGltYXRlZENPMixcclxuICAgICAgICAgICAgZnJvbUxvY2F0aW9uOiB7XHJcbiAgICAgICAgICAgICAgYWRkcmVzczogY2FiSGlyZVF1ZXJ5LmZyb21Mb2NhdGlvbi5hZGRyZXNzLFxyXG4gICAgICAgICAgICAgIHBvc3Rjb2RlOiBjYWJIaXJlUXVlcnkuZnJvbUxvY2F0aW9uLnBvc3Rjb2RlLFxyXG4gICAgICAgICAgICAgIGxhdGl0dWRlOiBjYWJIaXJlUXVvdGUuZnJvbUxvY2F0aW9uLmxhdGl0dWRlLFxyXG4gICAgICAgICAgICAgIGxvbmdpdHVkZTogY2FiSGlyZVF1b3RlLmZyb21Mb2NhdGlvbi5sb25naXR1ZGVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdG9Mb2NhdGlvbjoge1xyXG4gICAgICAgICAgICAgIGFkZHJlc3M6IGNhYkhpcmVRdWVyeS50b0xvY2F0aW9uLmFkZHJlc3MsXHJcbiAgICAgICAgICAgICAgcG9zdGNvZGU6IGNhYkhpcmVRdWVyeS50b0xvY2F0aW9uLnBvc3Rjb2RlLFxyXG4gICAgICAgICAgICAgIGxhdGl0dWRlOiBjYWJIaXJlUXVvdGUudG9Mb2NhdGlvbi5sYXRpdHVkZSxcclxuICAgICAgICAgICAgICBsb25naXR1ZGU6IGNhYkhpcmVRdW90ZS50b0xvY2F0aW9uLmxvbmdpdHVkZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB2ZWhpY2xlVHlwZTogY2FiSGlyZVF1ZXJ5LnZlaGljbGVUeXBlLFxyXG4gICAgICAgICAgICB0cmlwRGlzdGFuY2VNZXRyZXM6IGNhYkhpcmVRdW90ZS50cmlwRGlzdGFuY2VNZXRyZXMsXHJcbiAgICAgICAgICAgIHRyaXBEdXJhdGlvblNlY29uZHM6IGNhYkhpcmVRdW90ZS50cmlwRHVyYXRpb25TZWNvbmRzLFxyXG4gICAgICAgICAgICB0ZXJtc0FuZENvbmQ6IHRlcm1zQW5kQ29uZGl0aW9uc1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHByaWNlOiBjYWJIaXJlUXVvdGUucHJpY2UsXHJcbiAgICAgICAgICBjdXJyZW5jeTogY2FiSGlyZVF1b3RlLmN1cnJlbmN5LFxyXG4gICAgICAgICAgc2VhcmNoUXVlcnk6IGNhYkhpcmVRdWVyeSxcclxuICAgICAgICAgIGNvMlBlckl0ZW06IGNhYkhpcmVRdW90ZS5jbzJQZXJJdGVtLFxyXG4gICAgICAgICAgY28yUGVyUGFzc2VuZ2VyOiBjYWJIaXJlUXVvdGUuY28yUGVyUGFzc2VuZ2VyLFxyXG4gICAgICAgICAgb3V0Ym91bmREYXRlOiBjYWJIaXJlUXVlcnkuZGVwYXJ0cy5mb3JtYXQoKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaW50QmFza2V0LFxyXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZSxcclxuICAgICAgICB0aGlzLnRyYXZlbGxlcnNcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpOyAvLyBUT0RPIHNob3VsZCB0aGlzIHRocm93IGFuIGVycm9yP1xyXG4gIH1cclxuXHJcbiAgc3dpdGNoRnJvbUFuZFRvTG9jYXRpb24oKSB7XHJcbiAgICBjb25zdCBuZXdGcm9tQWRkcmVzcyA9IHsgLi4udGhpcy50b0FkZHJlc3MgfTtcclxuICAgIGNvbnN0IG5ld1RvQWRkcmVzcyA9IHsgLi4udGhpcy5mcm9tQWRkcmVzcyB9O1xyXG4gICAgdGhpcy5mcm9tQWRkcmVzcyA9IG5ld0Zyb21BZGRyZXNzO1xyXG4gICAgdGhpcy50b0FkZHJlc3MgPSBuZXdUb0FkZHJlc3M7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVMb3dlc3RQcmljZShyZXN1bHRzOiBDYWJIaXJlUXVvdGVbXSk6IElDaGVhcGVzdFByaWNlIHtcclxuICAgIGlmICghcmVzdWx0cy5sZW5ndGgpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgY3VycmVuY3kgPSByZXN1bHRzWzBdLmN1cnJlbmN5O1xyXG4gICAgcmV0dXJuIHJlc3VsdHMucmVkdWNlKFxyXG4gICAgICAoY2hlYXBlc3RQcmljZTogSUNoZWFwZXN0UHJpY2UsIHJlc3VsdDogQ2FiSGlyZVF1b3RlKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcHJpY2UgPSByZXN1bHQucHJpY2U7XHJcbiAgICAgICAgaWYgKGNoZWFwZXN0UHJpY2UuYW1vdW50ID4gcHJpY2UpIGNoZWFwZXN0UHJpY2UuYW1vdW50ID0gcHJpY2U7XHJcbiAgICAgICAgcmV0dXJuIGNoZWFwZXN0UHJpY2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgYW1vdW50OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgY3VycmVuY3lDb2RlOiBjdXJyZW5jeSB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGVybXNBbmRDb25kKGNhYkhpcmVRdW90ZTogQ2FiSGlyZVF1b3RlKSB7XHJcbiAgICBjb25zdCBkZXBhcnRzID0gbW9tZW50KGNhYkhpcmVRdW90ZS5kZXBhcnRzKS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLklTT19EQVRBX0ZPUk1BVF9USU1FKTtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnTG93ZXN0IFByaWNlJyxcclxuICAgICAgICB2YWx1ZTogY2FiSGlyZVF1b3RlLnByaWNlLnRvU3RyaW5nKCkgKyAnICcgKyBjYWJIaXJlUXVvdGUuY3VycmVuY3lcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdQaWNrdXAgVGltZScsXHJcbiAgICAgICAgdmFsdWU6IGRlcGFydHNcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUZXJtcyBhbmQgQ29uZGl0aW9ucycsXHJcbiAgICAgICAgdmFsdWU6ICc8YSB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiaHR0cHM6Ly93d3cuY21hY2dyb3VwLmNvbS9cIj53d3cuY21hY2dyb3VwLmNvbTwvYT4nXHJcbiAgICAgIH1cclxuICAgIF1cclxuICB9XHJcblxyXG4gIHNhdmVTZWFyY2goKTogT2JzZXJ2YWJsZTxTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0PntcclxuICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcclxuICAgICAgY29uc3QgcXVlcnk6IFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3MgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICAgIGNvbnN0IGZhdm91cml0ZVNlYXJjaFF1ZXJ5OiBJQ2FiSGlyZVNlYXJjaEFyZ3MgPSB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpO1xyXG4gICAgICBjb25zdCBzZWFyY2hJbmZvID0ge1xyXG4gICAgICAgIG5hbWU6IGAke21vbWVudCgpfWAsXHJcbiAgICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLkNhYixcclxuICAgICAgICBzZWFyY2hBcmdzOiBmYXZvdXJpdGVTZWFyY2hRdWVyeVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZUZhdm91cml0ZVNlYXJjaChzZWFyY2hJbmZvKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|