@sabstravtech/obtservices 0.0.22051001 → 0.1.6161600
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/basket-panel.d.ts +1 -0
- package/angular/fetchers.d.ts +5 -0
- package/angular/lib/vendor/fetchers/get-companies.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-company.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-office.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-user-default-mi-value.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-user-guests.fetcher.d.ts +7 -0
- package/angular/lib/vendor/services/enterprise-basket.service.d.ts +4 -3
- package/angular/lib/vendor/services/logon.service.d.ts +2 -1
- package/angular/lib/vendor/services/user.service.d.ts +9 -3
- package/angular/lib/vendor/types/graphql.angular.types.d.ts +614 -550
- package/angular/lib/vendor/updaters/create-guest-updater.d.ts +6 -0
- package/angular/sabstravtech-obtservices-angular.metadata.json +1 -1
- package/angular/updaters.d.ts +1 -0
- package/base/fetchers.d.ts +5 -0
- package/base/lib/vendor/classes/base-enterprise.d.ts +7 -1
- package/base/lib/vendor/classes/basket-info-mi-details.impl.d.ts +2 -0
- package/base/lib/vendor/classes/bookable-basket.d.ts +2 -0
- package/base/lib/vendor/classes/cabhire-enterprise-search.d.ts +9 -4
- package/base/lib/vendor/classes/carhire-enterprise-search.d.ts +12 -4
- package/base/lib/vendor/classes/eurostar-enterprise-search.d.ts +14 -7
- package/base/lib/vendor/classes/fast-track-enterprise-search.d.ts +5 -4
- package/base/lib/vendor/classes/flight-enterprise-search.d.ts +16 -5
- package/base/lib/vendor/classes/helpers.d.ts +6 -1
- package/base/lib/vendor/classes/hotel-enterprise-search.d.ts +10 -3
- package/base/lib/vendor/classes/irl-enterprise-search.d.ts +13 -8
- package/base/lib/vendor/classes/lounges-enterprise-search.d.ts +5 -4
- package/base/lib/vendor/classes/management-info-and-valid.d.ts +3 -3
- package/base/lib/vendor/classes/modal-types.enum.d.ts +1 -0
- package/base/lib/vendor/classes/parking-enterprise-search.d.ts +5 -4
- package/base/lib/vendor/classes/rail-enterprise-search.d.ts +10 -8
- package/base/lib/vendor/classes/supplementary-booking-info-impl.d.ts +5 -3
- package/base/lib/vendor/classes/user-favourite.enum.d.ts +1 -0
- package/base/lib/vendor/fetchers/eurostar-quote.fetcher.d.ts +3 -1
- package/base/lib/vendor/fetchers/flight-quote.fetcher.d.ts +1 -0
- package/base/lib/vendor/fetchers/get-companies.fetcher.d.ts +21 -0
- package/base/lib/vendor/fetchers/get-company.fetcher.d.ts +20 -0
- package/base/lib/vendor/fetchers/get-office.fetcher.d.ts +20 -0
- package/base/lib/vendor/fetchers/get-user-default-mi-value.fetcher.d.ts +21 -0
- package/base/lib/vendor/fetchers/get-user-guests.fetcher.d.ts +20 -0
- package/base/lib/vendor/fetchers/search-users-can-book-for-fetcher.d.ts +2 -2
- package/base/lib/vendor/interfaces/Icabhire-enterprise-search.d.ts +2 -0
- package/base/lib/vendor/interfaces/Icarhire-enterprise-search.d.ts +5 -2
- package/base/lib/vendor/interfaces/Ienterprise-basket.service.d.ts +8 -6
- package/base/lib/vendor/interfaces/Ieurostar-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Ifast-track-enterprise-search.d.ts +7 -5
- package/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +8 -1
- package/base/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +8 -2
- package/base/lib/vendor/interfaces/Iirl-enterprise-search.d.ts +8 -7
- package/base/lib/vendor/interfaces/Ilounges-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Imybookings.service.d.ts +3 -2
- package/base/lib/vendor/interfaces/Iparking-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Irail-enterprise-search.d.ts +5 -2
- package/base/lib/vendor/interfaces/Isearch.service.d.ts +5 -2
- package/base/lib/vendor/interfaces/Isupplementary-booking-info-impl.d.ts +3 -2
- package/base/lib/vendor/interfaces/Iuser.service.d.ts +11 -3
- package/base/lib/vendor/interfaces/car-hire-search-arg.interface.d.ts +2 -3
- package/base/lib/vendor/interfaces/rail-basket-item.interface.d.ts +2 -0
- package/base/lib/vendor/interfaces/summary-interface.d.ts +6 -0
- package/base/lib/vendor/interfaces/user.data.d.ts +1 -0
- package/base/lib/vendor/models/traveller.object.d.ts +12 -2
- package/base/lib/vendor/services/enterprise-basket.service.d.ts +22 -9
- package/base/lib/vendor/services/logon.service.d.ts +5 -1
- package/base/lib/vendor/services/my-bookings.service.d.ts +3 -2
- package/base/lib/vendor/services/search.service.d.ts +27 -23
- package/base/lib/vendor/services/url.service.d.ts +2 -0
- package/base/lib/vendor/services/user.service.d.ts +36 -5
- package/base/lib/vendor/services/webtoken.service.d.ts +6 -0
- package/base/lib/vendor/types/graphql.types.d.ts +581 -549
- package/base/lib/vendor/types/types.d.ts +48 -6
- package/base/lib/vendor/updaters/create-guest-updater.d.ts +19 -0
- package/base/sabstravtech-obtservices-base.d.ts +1 -1
- package/base/sabstravtech-obtservices-base.metadata.json +1 -1
- package/base/updaters.d.ts +1 -0
- package/bundles/sabstravtech-obtservices-angular.umd.js +541 -252
- 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 +4080 -1471
- 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 +16 -7
- package/esm2015/angular/fetchers.js +6 -1
- package/esm2015/angular/lib/vendor/fetchers/get-companies.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-company.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-office.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-user-default-mi-value.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-user-guests.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/services/enterprise-basket.service.js +24 -21
- package/esm2015/angular/lib/vendor/services/http-call.service.js +1 -1
- package/esm2015/angular/lib/vendor/services/logon.service.js +8 -5
- package/esm2015/angular/lib/vendor/services/search.service.js +1 -1
- package/esm2015/angular/lib/vendor/services/ticket-queue.service.js +4 -1
- package/esm2015/angular/lib/vendor/services/user.service.js +28 -10
- package/esm2015/angular/lib/vendor/services/webtoken.service.js +6 -2
- package/esm2015/angular/lib/vendor/types/graphql.angular.types.js +1023 -1220
- package/esm2015/angular/lib/vendor/updaters/create-guest-updater.js +22 -0
- package/esm2015/angular/updaters.js +2 -1
- package/esm2015/base/fetchers.js +6 -1
- package/esm2015/base/lib/vendor/classes/base-enterprise.js +12 -3
- package/esm2015/base/lib/vendor/classes/basket-info-mi-details.impl.js +14 -1
- package/esm2015/base/lib/vendor/classes/bookable-basket.js +27 -8
- package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +219 -18
- package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +235 -67
- package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +462 -49
- package/esm2015/base/lib/vendor/classes/fast-track-enterprise-search.js +37 -13
- package/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +281 -62
- package/esm2015/base/lib/vendor/classes/helpers.js +32 -3
- package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +228 -54
- package/esm2015/base/lib/vendor/classes/irl-enterprise-search.js +221 -46
- package/esm2015/base/lib/vendor/classes/lounges-enterprise-search.js +101 -14
- package/esm2015/base/lib/vendor/classes/management-info-and-valid.js +67 -40
- package/esm2015/base/lib/vendor/classes/modal-types.enum.js +2 -1
- package/esm2015/base/lib/vendor/classes/parking-enterprise-search.js +146 -11
- package/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +210 -25
- package/esm2015/base/lib/vendor/classes/supplementary-booking-info-impl.js +58 -4
- package/esm2015/base/lib/vendor/classes/user-favourite.enum.js +2 -1
- package/esm2015/base/lib/vendor/data/countries.json +484 -242
- package/esm2015/base/lib/vendor/fetchers/eurostar-quote.fetcher.js +3 -3
- package/esm2015/base/lib/vendor/fetchers/flight-quote.fetcher.js +3 -3
- package/esm2015/base/lib/vendor/fetchers/get-companies.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-company.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-office.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-user-default-mi-value.fetcher.js +10 -0
- package/esm2015/base/lib/vendor/fetchers/get-user-guests.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/search-users-can-book-for-fetcher.js +1 -1
- 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/Ifast-track-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ihotel-enterprise-search.js +2 -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/Isupplementary-booking-info-impl.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iuser.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/car-hire-search-arg.interface.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/rail-basket-item.interface.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/summary-interface.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/user.data.js +1 -1
- package/esm2015/base/lib/vendor/models/traveller.object.js +21 -3
- package/esm2015/base/lib/vendor/services/enterprise-basket.service.js +129 -43
- package/esm2015/base/lib/vendor/services/http-call.service.js +1 -1
- package/esm2015/base/lib/vendor/services/logon.service.js +40 -3
- package/esm2015/base/lib/vendor/services/my-bookings.service.js +3 -2
- package/esm2015/base/lib/vendor/services/requires-reason.service.js +14 -10
- package/esm2015/base/lib/vendor/services/search.service.js +100 -117
- package/esm2015/base/lib/vendor/services/url.service.js +3 -1
- package/esm2015/base/lib/vendor/services/user.service.js +90 -12
- package/esm2015/base/lib/vendor/services/webtoken.service.js +14 -1
- package/esm2015/base/lib/vendor/types/graphql.types.js +21 -2
- package/esm2015/base/lib/vendor/types/types.js +32 -14
- package/esm2015/base/lib/vendor/updaters/create-guest-updater.js +11 -0
- package/esm2015/base/sabstravtech-obtservices-base.js +1 -1
- package/esm2015/base/updaters.js +2 -1
- package/fesm2015/sabstravtech-obtservices-angular.js +1254 -1332
- package/fesm2015/sabstravtech-obtservices-angular.js.map +1 -1
- package/fesm2015/sabstravtech-obtservices-base.js +3324 -839
- package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
- package/package.json +1 -1
|
@@ -3,7 +3,7 @@ import moment from 'moment';
|
|
|
3
3
|
import { BaseEnterpriseSearch } from './base-enterprise';
|
|
4
4
|
import { of, combineLatest } from 'rxjs';
|
|
5
5
|
import { ServiceType, CarHireTransmission, CarHireClass, CarHireType, DistanceTypes } from '../types/graphql.types';
|
|
6
|
-
import { LocationTypes } from '../types/types';
|
|
6
|
+
import { LocationTypes, DifferentInvokdedUserReasons } from '../types/types';
|
|
7
7
|
import { take, map } from 'rxjs/operators';
|
|
8
8
|
export var SortTypesCar;
|
|
9
9
|
(function (SortTypesCar) {
|
|
@@ -15,12 +15,11 @@ export var SortTypesCar;
|
|
|
15
15
|
})(SortTypesCar || (SortTypesCar = {}));
|
|
16
16
|
export class CarhireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
17
17
|
// ! - End of getters and setters
|
|
18
|
-
constructor(carhirefetcher, carHireAvailabilityDetailFetcher, helpers, basketService, storageService, searchService) {
|
|
19
|
-
super(storageService, helpers);
|
|
18
|
+
constructor(carhirefetcher, carHireAvailabilityDetailFetcher, helpers, basketService, storageService, searchService, userService) {
|
|
19
|
+
super(storageService, helpers, searchService, userService);
|
|
20
20
|
this.carhirefetcher = carhirefetcher;
|
|
21
21
|
this.carHireAvailabilityDetailFetcher = carHireAvailabilityDetailFetcher;
|
|
22
22
|
this.basketService = basketService;
|
|
23
|
-
this.searchService = searchService;
|
|
24
23
|
// ! - Hardcoded Data
|
|
25
24
|
this._carTypeCodes = [
|
|
26
25
|
['B', '2-3 Door', CarHireType.TwoToThreeDoor],
|
|
@@ -227,6 +226,20 @@ export class CarhireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
227
226
|
tempParams: {}
|
|
228
227
|
};
|
|
229
228
|
this.updateTempParams(searchService.makeCarHireQuery(data.tempParams));
|
|
229
|
+
// if (this.userConfig?.carhire_defaults) {
|
|
230
|
+
// this.updateTempParams(searchService.makeCarHireQuery(this.userConfig.carhire_defaults));
|
|
231
|
+
// }
|
|
232
|
+
userService.fullUserDetails.userConfigs.subscribe(data => {
|
|
233
|
+
var _a;
|
|
234
|
+
// this.userConfig.next(data);
|
|
235
|
+
console.log(data);
|
|
236
|
+
if (data && (data === null || data === void 0 ? void 0 : data.carhire_defaults)) {
|
|
237
|
+
this.updateTempParams(searchService.makeCarHireQuery((_a = data === null || data === void 0 ? void 0 : data.carhire_defaults) === null || _a === void 0 ? void 0 : _a.config));
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
// userService.subscribe(data=>{
|
|
241
|
+
// this.updateTempParams(searchService.makeCarHireQuery(data.carhire_defaults));
|
|
242
|
+
// })
|
|
230
243
|
if (searchService.shouldAddTravellerSubscription()) {
|
|
231
244
|
searchService.travellerInformation.subscribe((travellers) => {
|
|
232
245
|
this.adults = 1;
|
|
@@ -709,20 +722,20 @@ export class CarhireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
709
722
|
this.dropoff_datetime = moment(recentSearch.searchArgs.dropoffDateTime);
|
|
710
723
|
this.pickup_datetime = moment(recentSearch.searchArgs.pickupDateTime);
|
|
711
724
|
if (recentSearch.searchArgs.city) {
|
|
712
|
-
this.getParamsForCarbyCity(recentSearch);
|
|
725
|
+
this.getParamsForCarbyCity(recentSearch.searchArgs.city);
|
|
713
726
|
}
|
|
714
727
|
else if (recentSearch.searchArgs.airport) {
|
|
715
|
-
this.getParamsForCarbyAirport(recentSearch);
|
|
728
|
+
this.getParamsForCarbyAirport(recentSearch.searchArgs.airport);
|
|
716
729
|
}
|
|
717
730
|
else if (recentSearch.searchArgs.depot) {
|
|
718
|
-
this.getParamsForCarbyPostCode(recentSearch);
|
|
731
|
+
this.getParamsForCarbyPostCode(recentSearch.searchArgs.depot);
|
|
719
732
|
}
|
|
720
733
|
}
|
|
721
|
-
getParamsForCarbyAirport(
|
|
734
|
+
getParamsForCarbyAirport(airport) {
|
|
722
735
|
this.locationType = LocationTypes.Airport;
|
|
723
736
|
combineLatest([
|
|
724
|
-
this.searchService.getAirportByCode(
|
|
725
|
-
this.searchService.getAirportByCode(
|
|
737
|
+
this.searchService.getAirportByCode(airport.pickupCode),
|
|
738
|
+
this.searchService.getAirportByCode(airport.dropoffCode)
|
|
726
739
|
]).subscribe(([departLocation, arriveLocation]) => {
|
|
727
740
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
728
741
|
if (departLocation && arriveLocation) {
|
|
@@ -748,73 +761,73 @@ export class CarhireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
748
761
|
}
|
|
749
762
|
});
|
|
750
763
|
}
|
|
751
|
-
getParamsForCarbyCity(
|
|
764
|
+
getParamsForCarbyCity(city) {
|
|
752
765
|
this.locationType = LocationTypes.City;
|
|
753
|
-
this.chosenDistance =
|
|
766
|
+
this.chosenDistance = city.chosenDistance;
|
|
754
767
|
this.cityPickup = {
|
|
755
|
-
countryCode:
|
|
756
|
-
id:
|
|
757
|
-
name:
|
|
768
|
+
countryCode: city.pickupCountryCode,
|
|
769
|
+
id: city.pickupCity,
|
|
770
|
+
name: city.pickupName,
|
|
758
771
|
type: LocationTypes.City,
|
|
759
|
-
latitude:
|
|
760
|
-
longitude:
|
|
772
|
+
latitude: city.pickupLatitude,
|
|
773
|
+
longitude: city.pickupLongitude
|
|
761
774
|
};
|
|
762
775
|
this.cityDropoff = {
|
|
763
|
-
countryCode:
|
|
764
|
-
id:
|
|
765
|
-
name:
|
|
776
|
+
countryCode: city.dropoffCountryCode,
|
|
777
|
+
id: city.dropoffCity,
|
|
778
|
+
name: city.dropOffName,
|
|
766
779
|
type: LocationTypes.City,
|
|
767
|
-
latitude:
|
|
768
|
-
longitude:
|
|
780
|
+
latitude: city.dropOffLatitude,
|
|
781
|
+
longitude: city.dropOffLongitude
|
|
769
782
|
};
|
|
770
783
|
this.cityDropoffDepot = {
|
|
771
|
-
addressLines: [
|
|
772
|
-
cityName:
|
|
773
|
-
extendedLocationCode:
|
|
774
|
-
locationCode:
|
|
775
|
-
vendor:
|
|
776
|
-
vendorCode:
|
|
784
|
+
addressLines: [city.dropOffAddressLines],
|
|
785
|
+
cityName: city.dropOffCityName,
|
|
786
|
+
extendedLocationCode: city.dropOffExtendedLocationCode,
|
|
787
|
+
locationCode: city.dropOffLocationCode,
|
|
788
|
+
vendor: city.dropOffVendor,
|
|
789
|
+
vendorCode: city.dropOffVendorCode
|
|
777
790
|
};
|
|
778
791
|
this.cityPickupDepot = {
|
|
779
|
-
addressLines: [
|
|
780
|
-
cityName:
|
|
781
|
-
extendedLocationCode:
|
|
782
|
-
locationCode:
|
|
783
|
-
vendor:
|
|
784
|
-
vendorCode:
|
|
792
|
+
addressLines: [city.pickupAddressLines],
|
|
793
|
+
cityName: city.pickupCityName,
|
|
794
|
+
extendedLocationCode: city.pickupExtendedLocationCode,
|
|
795
|
+
locationCode: city.pickupLocationCode,
|
|
796
|
+
vendor: city.pickupVendor,
|
|
797
|
+
vendorCode: city.pickupVendorCode
|
|
785
798
|
};
|
|
786
799
|
this.searchService.startSearches();
|
|
787
800
|
}
|
|
788
|
-
getParamsForCarbyPostCode(
|
|
801
|
+
getParamsForCarbyPostCode(depot) {
|
|
789
802
|
this.locationType = LocationTypes.Postcode;
|
|
790
|
-
this.chosenDistance =
|
|
803
|
+
this.chosenDistance = depot.chosenDistance;
|
|
791
804
|
this.postcodeDropoff = {
|
|
792
|
-
addressLines: [
|
|
793
|
-
vendorCode:
|
|
794
|
-
locationCode:
|
|
795
|
-
extendedLocationCode:
|
|
796
|
-
cityName:
|
|
797
|
-
vendor:
|
|
805
|
+
addressLines: [depot.dropoffAddressLines],
|
|
806
|
+
vendorCode: depot.vendorCode,
|
|
807
|
+
locationCode: depot.dropOffLocationCode,
|
|
808
|
+
extendedLocationCode: depot.dropOffExtendedLocationCode,
|
|
809
|
+
cityName: depot.dropoffCityName,
|
|
810
|
+
vendor: depot.dropoffVendor
|
|
798
811
|
};
|
|
799
812
|
this.postcodeDropoffRaw = {
|
|
800
|
-
name:
|
|
813
|
+
name: depot.dropoffPostCode,
|
|
801
814
|
type: LocationTypes.Postcode,
|
|
802
|
-
latitude:
|
|
803
|
-
longitude:
|
|
815
|
+
latitude: depot.dropoffLatitude,
|
|
816
|
+
longitude: depot.dropoffLongitude
|
|
804
817
|
};
|
|
805
818
|
this.postcodePickup = {
|
|
806
|
-
addressLines: [
|
|
807
|
-
vendorCode:
|
|
808
|
-
locationCode:
|
|
809
|
-
extendedLocationCode:
|
|
810
|
-
cityName:
|
|
811
|
-
vendor:
|
|
819
|
+
addressLines: [depot.pickupAddressLines],
|
|
820
|
+
vendorCode: depot.vendorCode,
|
|
821
|
+
locationCode: depot.pickupLocationCode,
|
|
822
|
+
extendedLocationCode: depot.pickupExtendedLocationCode,
|
|
823
|
+
cityName: depot.pickupCityName,
|
|
824
|
+
vendor: depot.pickupVendor
|
|
812
825
|
};
|
|
813
826
|
this.postcodePickupRaw = {
|
|
814
|
-
name:
|
|
827
|
+
name: depot.pickupPostCode,
|
|
815
828
|
type: LocationTypes.Postcode,
|
|
816
|
-
latitude:
|
|
817
|
-
longitude:
|
|
829
|
+
latitude: depot.pickupLatitude,
|
|
830
|
+
longitude: depot.pickupLongitude
|
|
818
831
|
};
|
|
819
832
|
this.searchService.startSearches();
|
|
820
833
|
}
|
|
@@ -982,6 +995,7 @@ export class CarhireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
982
995
|
fullResults = fullResults.sort((a, b) => this.getPrice(b) - this.getPrice(a));
|
|
983
996
|
break;
|
|
984
997
|
case 2: // preferred TODO
|
|
998
|
+
fullResults = this.sortByPreferred(fullResults);
|
|
985
999
|
break;
|
|
986
1000
|
case 3: // brand
|
|
987
1001
|
fullResults = this.sortByBrand(fullResults);
|
|
@@ -1072,6 +1086,28 @@ export class CarhireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1072
1086
|
this.results.next(sortedResults);
|
|
1073
1087
|
return sortedResults;
|
|
1074
1088
|
}
|
|
1089
|
+
/**
|
|
1090
|
+
* @description - sort the results
|
|
1091
|
+
* @param results - full results from sort results function
|
|
1092
|
+
*/
|
|
1093
|
+
sortByPreferred(results) {
|
|
1094
|
+
const fullResults = this.helpers.clone(results ? results : this.results.value);
|
|
1095
|
+
const sortedResults = fullResults.sort((a, b) => {
|
|
1096
|
+
const aPref = a.tmcPreferred || a.companyPreferred || a.officePreferred ? 1 : 0;
|
|
1097
|
+
const bPref = b.tmcPreferred || b.companyPreferred || b.officePreferred ? 1 : 0;
|
|
1098
|
+
if (aPref > bPref) {
|
|
1099
|
+
return -1;
|
|
1100
|
+
}
|
|
1101
|
+
else if (aPref < bPref) {
|
|
1102
|
+
return 1;
|
|
1103
|
+
}
|
|
1104
|
+
else {
|
|
1105
|
+
return 0;
|
|
1106
|
+
}
|
|
1107
|
+
});
|
|
1108
|
+
this.results.next(sortedResults);
|
|
1109
|
+
return sortedResults;
|
|
1110
|
+
}
|
|
1075
1111
|
/**
|
|
1076
1112
|
* @description - get the price of a individual car
|
|
1077
1113
|
*/
|
|
@@ -1100,10 +1136,53 @@ export class CarhireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1100
1136
|
return max;
|
|
1101
1137
|
}, Number.MIN_SAFE_INTEGER);
|
|
1102
1138
|
}
|
|
1139
|
+
updateSearchFromExpiredBasketItem(basketItem) {
|
|
1140
|
+
const searchCarHireQuery = basketItem.searchQuery;
|
|
1141
|
+
if (searchCarHireQuery) {
|
|
1142
|
+
this.chosenVendor = searchCarHireQuery.vendor;
|
|
1143
|
+
this.carClass = searchCarHireQuery.class;
|
|
1144
|
+
this.carType = searchCarHireQuery.type;
|
|
1145
|
+
this.transmission = searchCarHireQuery.transmission;
|
|
1146
|
+
this.airCon = searchCarHireQuery.aircon;
|
|
1147
|
+
this.estimatedMileage = searchCarHireQuery.estimatedDailyDistance;
|
|
1148
|
+
this.dropoff_datetime = moment(searchCarHireQuery.dropoffDateTime);
|
|
1149
|
+
this.pickup_datetime = moment(searchCarHireQuery.pickupDateTime);
|
|
1150
|
+
if (searchCarHireQuery.city) {
|
|
1151
|
+
this.getParamsForCarbyCity(searchCarHireQuery.city);
|
|
1152
|
+
}
|
|
1153
|
+
else if (searchCarHireQuery.airport) {
|
|
1154
|
+
this.getParamsForCarbyAirport(searchCarHireQuery.airport);
|
|
1155
|
+
}
|
|
1156
|
+
else if (searchCarHireQuery.depot) {
|
|
1157
|
+
this.updateSearchForCarbyPostCode(searchCarHireQuery, basketItem.detail);
|
|
1158
|
+
}
|
|
1159
|
+
}
|
|
1160
|
+
// add Travellers
|
|
1161
|
+
if (basketItem.users) {
|
|
1162
|
+
basketItem.users.forEach((user) => {
|
|
1163
|
+
this.searchService.addTraveller(user);
|
|
1164
|
+
});
|
|
1165
|
+
}
|
|
1166
|
+
}
|
|
1167
|
+
updateSearchForCarbyPostCode(depot, detail) {
|
|
1168
|
+
this.locationType = LocationTypes.Postcode;
|
|
1169
|
+
this.chosenDistance = depot.chosenDistance;
|
|
1170
|
+
this.postcodeDropoffRaw = {
|
|
1171
|
+
name: detail.dropOffLocation.postcode,
|
|
1172
|
+
type: LocationTypes.Postcode
|
|
1173
|
+
};
|
|
1174
|
+
this.postcodePickupRaw = {
|
|
1175
|
+
name: detail.pickUpLocation.postcode,
|
|
1176
|
+
type: LocationTypes.Postcode
|
|
1177
|
+
};
|
|
1178
|
+
}
|
|
1103
1179
|
updateFromPreviousSearches(previousItems) {
|
|
1104
|
-
var _a;
|
|
1180
|
+
var _a, _b, _c, _d;
|
|
1105
1181
|
console.log('PREPOPULATING CARHIRE FORM');
|
|
1106
1182
|
const flightItem = (_a = previousItems[ServiceType.Flight]) === null || _a === void 0 ? void 0 : _a.searchQuery;
|
|
1183
|
+
const railItem = (_b = previousItems[ServiceType.Rail]) === null || _b === void 0 ? void 0 : _b.searchQuery;
|
|
1184
|
+
const hotelItem = (_c = previousItems[ServiceType.Rail]) === null || _c === void 0 ? void 0 : _c.searchQuery;
|
|
1185
|
+
const irlItem = (_d = previousItems[ServiceType.InternationalRail]) === null || _d === void 0 ? void 0 : _d.searchQuery;
|
|
1107
1186
|
if (flightItem) {
|
|
1108
1187
|
try {
|
|
1109
1188
|
let startDate = this.searchService.searches[ServiceType.Flight].outBoundDate.toDate();
|
|
@@ -1132,10 +1211,80 @@ export class CarhireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1132
1211
|
this.dropoff_country = this.searchService.searches[ServiceType.Flight]
|
|
1133
1212
|
.arriveLocation.countryCode;
|
|
1134
1213
|
}
|
|
1135
|
-
catch (
|
|
1214
|
+
catch (_e) {
|
|
1136
1215
|
console.error('Error trying to prepopulate carhire from flight item');
|
|
1137
1216
|
}
|
|
1138
1217
|
}
|
|
1218
|
+
else if (railItem) {
|
|
1219
|
+
try {
|
|
1220
|
+
let startDate = this.searchService.searches[ServiceType.Rail].outBoundDateTime.toDate();
|
|
1221
|
+
let endDate = this.searchService.searches[ServiceType.Rail].inBoundDateTime.toDate();
|
|
1222
|
+
this.pickup_datetime =
|
|
1223
|
+
this.searchService.searches[ServiceType.Rail].outBoundDateTime;
|
|
1224
|
+
this.dropoff_datetime =
|
|
1225
|
+
this.searchService.searches[ServiceType.Rail].inBoundDateTime;
|
|
1226
|
+
this.pickup_date = {
|
|
1227
|
+
day: startDate.getUTCDate(),
|
|
1228
|
+
month: startDate.getUTCMonth() + 1,
|
|
1229
|
+
year: startDate.getUTCFullYear()
|
|
1230
|
+
};
|
|
1231
|
+
this.dropoff_date = {
|
|
1232
|
+
day: endDate.getUTCDate(),
|
|
1233
|
+
month: endDate.getUTCMonth() + 1,
|
|
1234
|
+
year: endDate.getUTCFullYear()
|
|
1235
|
+
};
|
|
1236
|
+
}
|
|
1237
|
+
catch (_f) {
|
|
1238
|
+
console.error('Error trying to prepopulate carhire from rail item');
|
|
1239
|
+
}
|
|
1240
|
+
}
|
|
1241
|
+
else if (irlItem) {
|
|
1242
|
+
try {
|
|
1243
|
+
let startDate = this.searchService.searches[ServiceType.InternationalRail].outBoundDateTime.toDate();
|
|
1244
|
+
let endDate = this.searchService.searches[ServiceType.InternationalRail].returnDepartureDateTime.toDate();
|
|
1245
|
+
this.pickup_datetime =
|
|
1246
|
+
this.searchService.searches[ServiceType.InternationalRail].outBoundDateTime;
|
|
1247
|
+
this.dropoff_datetime =
|
|
1248
|
+
this.searchService.searches[ServiceType.InternationalRail].returnDepartureDateTime;
|
|
1249
|
+
this.pickup_date = {
|
|
1250
|
+
day: startDate.getUTCDate(),
|
|
1251
|
+
month: startDate.getUTCMonth() + 1,
|
|
1252
|
+
year: startDate.getUTCFullYear()
|
|
1253
|
+
};
|
|
1254
|
+
this.dropoff_date = {
|
|
1255
|
+
day: endDate.getUTCDate(),
|
|
1256
|
+
month: endDate.getUTCMonth() + 1,
|
|
1257
|
+
year: endDate.getUTCFullYear()
|
|
1258
|
+
};
|
|
1259
|
+
}
|
|
1260
|
+
catch (_g) {
|
|
1261
|
+
console.error('Error trying to prepopulate carhire from international rail item');
|
|
1262
|
+
}
|
|
1263
|
+
}
|
|
1264
|
+
else if (hotelItem) {
|
|
1265
|
+
try {
|
|
1266
|
+
let startDate = this.searchService.searches[ServiceType.Hotel].checkin_date.toDate();
|
|
1267
|
+
let endDate = this.searchService.searches[ServiceType.Hotel].checkout_date.toDate();
|
|
1268
|
+
// this.locationType = LocationTypes.;
|
|
1269
|
+
this.pickup_datetime =
|
|
1270
|
+
this.searchService.searches[ServiceType.Hotel].checkin_date;
|
|
1271
|
+
this.dropoff_datetime =
|
|
1272
|
+
this.searchService.searches[ServiceType.Hotel].checkout_date;
|
|
1273
|
+
this.pickup_date = {
|
|
1274
|
+
day: startDate.getUTCDate(),
|
|
1275
|
+
month: startDate.getUTCMonth() + 1,
|
|
1276
|
+
year: startDate.getUTCFullYear()
|
|
1277
|
+
};
|
|
1278
|
+
this.dropoff_date = {
|
|
1279
|
+
day: endDate.getUTCDate(),
|
|
1280
|
+
month: endDate.getUTCMonth() + 1,
|
|
1281
|
+
year: endDate.getUTCFullYear()
|
|
1282
|
+
};
|
|
1283
|
+
}
|
|
1284
|
+
catch (_h) {
|
|
1285
|
+
console.error('Error trying to prepopulate carhire from hotel item');
|
|
1286
|
+
}
|
|
1287
|
+
}
|
|
1139
1288
|
}
|
|
1140
1289
|
// !date and time is handled differently for LU
|
|
1141
1290
|
_updatePickupDateTime() {
|
|
@@ -1205,10 +1354,10 @@ export class CarhireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1205
1354
|
* @description - add car hire to basket
|
|
1206
1355
|
*/
|
|
1207
1356
|
addCarHireToBasket(carHireVehicleAvailibility, carHireQuery) {
|
|
1208
|
-
var _a, _b;
|
|
1357
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
1209
1358
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1210
1359
|
if (carHireVehicleAvailibility.unavailable) {
|
|
1211
|
-
return Promise.resolve(
|
|
1360
|
+
return Promise.resolve(DifferentInvokdedUserReasons.cancel);
|
|
1212
1361
|
}
|
|
1213
1362
|
const intBasket = yield this.basketService.getDefaultBasket();
|
|
1214
1363
|
const basket = intBasket === null || intBasket === void 0 ? void 0 : intBasket.subject.value;
|
|
@@ -1216,7 +1365,7 @@ export class CarhireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1216
1365
|
const { co2PerItem, co2PerPassenger, displayRecord, identifiers, sourceId } = carHireVehicleAvailibility;
|
|
1217
1366
|
const price = parseFloat((_b = (_a = displayRecord === null || displayRecord === void 0 ? void 0 : displayRecord.charges[0]) === null || _a === void 0 ? void 0 : _a.amount) !== null && _b !== void 0 ? _b : '0');
|
|
1218
1367
|
const termsAndConditions = this.getTermsAndCond(carHireVehicleAvailibility, carHireQuery);
|
|
1219
|
-
|
|
1368
|
+
const whatHappened = yield this.basketService.addToBasket({
|
|
1220
1369
|
adults: this.adults,
|
|
1221
1370
|
basket: basket.id,
|
|
1222
1371
|
service: sourceId.toString(),
|
|
@@ -1243,6 +1392,12 @@ export class CarhireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1243
1392
|
type: displayRecord.vehicle.type,
|
|
1244
1393
|
manualTransmission: displayRecord.vehicle.transmission.includes(CarHireTransmission.Manual)
|
|
1245
1394
|
},
|
|
1395
|
+
fareInfo: {
|
|
1396
|
+
title: (_c = carHireVehicleAvailibility === null || carHireVehicleAvailibility === void 0 ? void 0 : carHireVehicleAvailibility.fareInfo) === null || _c === void 0 ? void 0 : _c.title,
|
|
1397
|
+
type: (_d = carHireVehicleAvailibility === null || carHireVehicleAvailibility === void 0 ? void 0 : carHireVehicleAvailibility.fareInfo) === null || _d === void 0 ? void 0 : _d.type,
|
|
1398
|
+
code: (_e = carHireVehicleAvailibility === null || carHireVehicleAvailibility === void 0 ? void 0 : carHireVehicleAvailibility.fareInfo) === null || _e === void 0 ? void 0 : _e.code,
|
|
1399
|
+
supplierCode: (_f = carHireVehicleAvailibility === null || carHireVehicleAvailibility === void 0 ? void 0 : carHireVehicleAvailibility.fareInfo) === null || _f === void 0 ? void 0 : _f.supplierCode
|
|
1400
|
+
},
|
|
1246
1401
|
vendorName: displayRecord.vendor.name,
|
|
1247
1402
|
identifiers: {
|
|
1248
1403
|
dropOffLocation: identifiers.dropOffLocation,
|
|
@@ -1254,14 +1409,20 @@ export class CarhireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1254
1409
|
termsAndCond: termsAndConditions
|
|
1255
1410
|
},
|
|
1256
1411
|
price,
|
|
1257
|
-
currency:
|
|
1412
|
+
currency: displayRecord.charges[0].currencyCode,
|
|
1258
1413
|
searchQuery: carHireQuery,
|
|
1259
1414
|
co2PerItem,
|
|
1260
1415
|
co2PerPassenger,
|
|
1261
|
-
outboundDate: new Date(displayRecord.pickup).toISOString()
|
|
1416
|
+
outboundDate: new Date(displayRecord.pickup).toISOString(),
|
|
1417
|
+
lowestPrice: ((_g = this.cheapestPrice) === null || _g === void 0 ? void 0 : _g.amount) != price ? (_h = this.cheapestPrice) === null || _h === void 0 ? void 0 : _h.amount : null,
|
|
1418
|
+
lowestPriceCurrency: ((_j = this.cheapestPrice) === null || _j === void 0 ? void 0 : _j.amount) != price ? (_k = this.cheapestPrice) === null || _k === void 0 ? void 0 : _k.currencyCode : null
|
|
1262
1419
|
}, intBasket, this.searchService, this.travellers, carHireVehicleAvailibility.requiresReason);
|
|
1420
|
+
if (whatHappened === DifferentInvokdedUserReasons.research) {
|
|
1421
|
+
this.performSearch();
|
|
1422
|
+
}
|
|
1423
|
+
return whatHappened;
|
|
1263
1424
|
}
|
|
1264
|
-
return Promise.resolve(
|
|
1425
|
+
return Promise.resolve(DifferentInvokdedUserReasons.cancel);
|
|
1265
1426
|
});
|
|
1266
1427
|
}
|
|
1267
1428
|
// TODO waiting for data
|
|
@@ -1349,16 +1510,23 @@ export class CarhireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1349
1510
|
this.chosenVendor = fav.vendor;
|
|
1350
1511
|
this.carType = fav.type;
|
|
1351
1512
|
this.return_to_pickup = fav.airport.pickupCode == fav.airport.dropoffCode;
|
|
1352
|
-
this.searchService
|
|
1353
|
-
|
|
1513
|
+
this.searchService
|
|
1514
|
+
.getAirportsList(fav.airport.pickupCode)
|
|
1515
|
+
.subscribe((results) => {
|
|
1516
|
+
this.pickup_location = results.find((a) => a.gateway == fav.airport.pickupCode);
|
|
1354
1517
|
});
|
|
1355
1518
|
if (!this.return_to_pickup)
|
|
1356
|
-
this.searchService
|
|
1357
|
-
|
|
1519
|
+
this.searchService
|
|
1520
|
+
.getAirportsList(fav.airport.dropoffCode)
|
|
1521
|
+
.subscribe((results) => {
|
|
1522
|
+
this.dropoff_location = results.find((a) => a.gateway == fav.airport.dropoffCode);
|
|
1358
1523
|
});
|
|
1359
1524
|
});
|
|
1360
1525
|
}
|
|
1526
|
+
checkForPreferred() {
|
|
1527
|
+
return !!this.results.value.find(result => result.officePreferred || result.tmcPreferred || result.companyPreferred);
|
|
1528
|
+
}
|
|
1361
1529
|
}
|
|
1362
1530
|
CarhireEnterpriseSearch.STORAGE_SESSION_PARAMS = 'carhire_params';
|
|
1363
1531
|
CarhireEnterpriseSearch.STORAGE_SESSION_RESULTS = 'carhire_results';
|
|
1364
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyaGlyZS1lbnRlcnByaXNlLXNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9jYXJoaXJlLWVudGVycHJpc2Utc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHekQsT0FBTyxFQUFjLEVBQUUsRUFBbUIsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBVXRFLE9BQU8sRUFRTCxXQUFXLEVBQ1gsbUJBQW1CLEVBQ25CLFlBQVksRUFDWixXQUFXLEVBQ1gsYUFBYSxFQUdkLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQU1MLGFBQWEsRUFNZCxNQUFNLGdCQUFnQixDQUFDO0FBY3hCLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFLM0MsTUFBTSxDQUFOLElBQVksWUFNWDtBQU5ELFdBQVksWUFBWTtJQUN0QiwrQkFBZSxDQUFBO0lBQ2YsK0JBQWUsQ0FBQTtJQUNmLDZCQUFhLENBQUE7SUFDYix1Q0FBdUIsQ0FBQTtJQUN2Qix1Q0FBdUIsQ0FBQTtBQUN6QixDQUFDLEVBTlcsWUFBWSxLQUFaLFlBQVksUUFNdkI7QUFFRCxNQUFNLE9BQU8sdUJBSVgsU0FBUSxvQkFJUDtJQWluQkQsaUNBQWlDO0lBRWpDLFlBQ1UsY0FBNkMsRUFDN0MsZ0NBQThFLEVBQ3RGLE9BQTJCLEVBQ25CLGFBQStDLEVBQ3ZELGNBQWtDLEVBQzFCLGFBQStDO1FBRXZELEtBQUssQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFQdkIsbUJBQWMsR0FBZCxjQUFjLENBQStCO1FBQzdDLHFDQUFnQyxHQUFoQyxnQ0FBZ0MsQ0FBOEM7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cHJpc2VTZWFyY2ggfSBmcm9tICcuL2Jhc2UtZW50ZXJwcmlzZSc7XHJcbmltcG9ydCB7IEJhc2VTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VIZWxwZXJSb3V0aW5lcyB9IGZyb20gJy4vaGVscGVycyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ2FySGlyZVNvcnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Nhci1oaXJlLXNvcnQuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQ2FySGlyZUZpbHRlcnMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Nhci1oaXJlLWZpbHRlcnMuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgU2VsZWN0RmlsdGVyIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zZWxlY3QtZmlsdGVyLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFZhbHVlRGlzcGxheSB9IGZyb20gJy4uL2ludGVyZmFjZXMvdmFsdWUtZGlzcGxheSc7XHJcbmltcG9ydCB7IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gIEludGVybmFsQmFza2V0SW50ZXJmYWNlXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQ2FySGlyZURldGFpbFJlcXVlc3RSZXNwb25zZSxcclxuICBDdXJyZW5jeUNvZGUsXHJcbiAgQmFza2V0SXRlbSxcclxuICBDYXJIaXJlSW5wdXRJZGVudGlmaWVycyxcclxuICBDYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eSxcclxuICBRdWVyeVNlYXJjaENhckhpcmVBcmdzLFxyXG4gIFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlcnZpY2VUeXBlLFxyXG4gIENhckhpcmVUcmFuc21pc3Npb24sXHJcbiAgQ2FySGlyZUNsYXNzLFxyXG4gIENhckhpcmVUeXBlLFxyXG4gIERpc3RhbmNlVHlwZXMsXHJcbiAgU2VhcmNoQ2FySGlyZVF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlc1xyXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIENhckhpcmVRdW90ZVJlc3VsdCxcclxuICBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSxcclxuICBOZ2JEYXRlU3RydWN0LFxyXG4gIE9CVEFpcnBvcnREZXRhaWxzLFxyXG4gIFZlbmRvcixcclxuICBMb2NhdGlvblR5cGVzLFxyXG4gIExvY2F0aW9uRGV0YWlscyxcclxuICBDYXJIaXJlRGVwb3QsXHJcbiAgUmVjZW50U2VhcmNoLFxyXG4gIFdpdGhpbkRpc3RhbmNlLFxyXG4gIFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHRcclxufSBmcm9tICcuLi90eXBlcy90eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUNhcmhpcmVRdW90ZUZldGNoZXIsXHJcbiAgQ2FySGlyZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY2FyaGlyZS1xdW90ZS1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBDYXJoaXJlRW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZSxcclxuICBDYXJIaXJlVGVtcFBhcmFtc1xyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWNhcmhpcmUtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBJQ2hlYXBlc3RQcmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hlYXBlc3QtcHJpY2UnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VDYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlcixcclxuICBDYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9jYXJoaXJlLWF2YWlsYWJpbGl0eS1kZXRhaWwuZmV0Y2hlcic7XHJcbmltcG9ydCB7IHRha2UsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSUNhckNsYXNzZXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Nhci1oaXJlLWNsYXNzZXMuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgVHJhdmVsbGVyIH0gZnJvbSAnLi4vbW9kZWxzL3RyYXZlbGxlci5vYmplY3QnO1xyXG5pbXBvcnQgeyBDYXJIaXJlU2VhcmNoQXJncyB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2FyLWhpcmUtc2VhcmNoLWFyZy5pbnRlcmZhY2UnO1xyXG5cclxuZXhwb3J0IGVudW0gU29ydFR5cGVzQ2FyIHtcclxuICBwcmljZSA9ICdwcmljZScsXHJcbiAgYnJhbmQgPSAnYnJhbmQnLFxyXG4gIHNpemUgPSAnc2l6ZScsXHJcbiAgcHJlZmVycmVkID0gJ3ByZWZlcnJlZCcsXHJcbiAgZXhwZW5zaXZlID0gJ2V4cGVuc2l2ZSdcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIENhcmhpcmVFbnRlcnByaXNlU2VhcmNoPFxyXG4gICAgQ0hfUSBleHRlbmRzIENhckhpcmVGZXRjaGVyVHlwZSxcclxuICAgIENIQURfUSBleHRlbmRzIENhckhpcmVBdmFpbGFiaWxpdHlEZXRhaWxGZXRjaGVyVHlwZVxyXG4gID5cclxuICBleHRlbmRzIEJhc2VFbnRlcnByaXNlU2VhcmNoPFxyXG4gICAgQ2FySGlyZVRlbXBQYXJhbXMsXHJcbiAgICBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSxcclxuICAgIENhckhpcmVRdW90ZVJlc3VsdEFycmF5XHJcbiAgPlxyXG4gIGltcGxlbWVudHMgQ2FyaGlyZUVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2Vcclxue1xyXG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUEFSQU1TID0gJ2NhcmhpcmVfcGFyYW1zJztcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFMgPSAnY2FyaGlyZV9yZXN1bHRzJztcclxuXHJcbiAgLy8gISAtIEhhcmRjb2RlZCBEYXRhXHJcbiAgcHJpdmF0ZSBfY2FyVHlwZUNvZGVzOiBbc3RyaW5nLCBzdHJpbmcsIENhckhpcmVUeXBlXVtdID0gW1xyXG4gICAgWydCJywgJzItMyBEb29yJywgQ2FySGlyZVR5cGUuVHdvVG9UaHJlZURvb3JdLFxyXG4gICAgWydDJywgJzIvNCBEb29yJywgQ2FySGlyZVR5cGUuVHdvT3JGb3VyRG9vcl0sXHJcbiAgICBbJ0QnLCAnNC01IERvb3InLCBDYXJIaXJlVHlwZS5Gb3VyVG9GaXZlRG9vcl0sXHJcbiAgICBbJ1cnLCAnV2Fnb24gLyBFc3RhdGUnLCBDYXJIaXJlVHlwZS5XYWdvbk9yRXN0YXRlXSxcclxuICAgIFsnVicsICdQYXNzZW5nZXIgVmFuJywgQ2FySGlyZVR5cGUuUGFzc2VuZ2VyVmFuXSxcclxuICAgIFsnTCcsICdMaW1vdXNpbmUnLCBDYXJIaXJlVHlwZS5MaW1vdXNpbmVdLFxyXG4gICAgWydTJywgJ1Nwb3J0JywgQ2FySGlyZVR5cGUuU3BvcnRdLFxyXG4gICAgWydUJywgJ0NvbnZlcnRpYmxlJywgQ2FySGlyZVR5cGUuQ29udmVydGlibGVdLFxyXG4gICAgWydGJywgJ1NVVicsIENhckhpcmVUeXBlLlN1dl0sXHJcbiAgICBbJ0onLCAnT3BlbiBBaXIgQWxsIFRlcnJhaW4nLCBDYXJIaXJlVHlwZS5PcGVuQWlyQWxsVGVycmFpbl0sXHJcbiAgICBbJ1gnLCAnU3BlY2lhbCcsIENhckhpcmVUeXBlLlNwZWNpYWxdLFxyXG4gICAgWydQJywgJ1BpY2t1cCBSZWd1bGFyIENhYicsIENhckhpcmVUeXBlLlBpY2tVcFJlZ3VsYXJDYWJdLFxyXG4gICAgWydRJywgJ1BpY2t1cCBFeHRlbmRlZCBDYWInLCBDYXJIaXJlVHlwZS5QaWNrVXBFeHRlbmRlZENhYl0sXHJcbiAgICBbJ1onLCAnU3BlY2lhbCBPZmZlciBDYXInLCBDYXJIaXJlVHlwZS5TcGVjaWFsT2ZmZXJDYXJdLFxyXG4gICAgWydFJywgJ0NvdXBlJywgQ2FySGlyZVR5cGUuQ291cGVdLFxyXG4gICAgWydNJywgJ01vbm9zcGFjZSAoRXVyb3BlKScsIENhckhpcmVUeXBlLk1vbm9zcGFjZUV1cm9wZWFuVXNlXSxcclxuICAgIFsnUicsICdSZWNyZWF0aW9uYWwgVmVoaWNsZScsIENhckhpcmVUeXBlLlN1dl0sXHJcbiAgICBbJ0gnLCAnTW90b3IgSG9tZScsIENhckhpcmVUeXBlLk1vdG9ySG9tZV0sXHJcbiAgICBbJ1knLCAnMi1XaGVlbCBWZWhpY2xlJywgQ2FySGlyZVR5cGUuVHdvV2hlZWxWZWhpY2xlXSxcclxuICAgIFsnTicsICdSb2Fkc3RlcicsIENhckhpcmVUeXBlLlJvYWRzdGVyXSxcclxuICAgIFsnRycsICdDcm9zc292ZXInLCBDYXJIaXJlVHlwZS5TdXZdLFxyXG4gICAgWydLJywgJ0NvbW1lcmNpYWwgVmFuIC8gVHJ1Y2snLCBDYXJIaXJlVHlwZS5QYXNzZW5nZXJWYW5dXHJcbiAgXTtcclxuXHJcbiAgcHJpdmF0ZSBfY2FyQWlyQ29uZGl0aW9uVHlwZXM6IFtzdHJpbmcsIHN0cmluZywgYm9vbGVhbl1bXSA9IFtcclxuICAgIFsnQW55JywgJ0FueScsIG51bGxdLFxyXG4gICAgWydZJywgJ1llcycsIHRydWVdLFxyXG4gICAgWydOJywgJ05vJywgZmFsc2VdXHJcbiAgXTtcclxuXHJcbiAgcHJpdmF0ZSBfd2l0aGluRGlzdGFuY2U6IFdpdGhpbkRpc3RhbmNlW10gPSBbXHJcbiAgICB7IG5hbWU6ICcxIG1pbGUnLCB2YWx1ZTogJzEnIH0sXHJcbiAgICB7IG5hbWU6ICcyIG1pbGVzJywgdmFsdWU6ICcyJyB9LFxyXG4gICAgeyBuYW1lOiAnNSBtaWxlcycsIHZhbHVlOiAnNScgfSxcclxuICAgIHsgbmFtZTogJzEwIG1pbGVzJywgdmFsdWU6ICcxMCcgfSxcclxuICAgIHsgbmFtZTogJzIwIG1pbGVzJywgdmFsdWU6ICcyMCcgfVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgX2NhclRyYW5zbWlzc2lvbkNvZGVzOiBbc3RyaW5nLCBzdHJpbmcsIENhckhpcmVUcmFuc21pc3Npb25dW10gPSBbXHJcbiAgICBbJ00nLCAnTWFudWFsJywgQ2FySGlyZVRyYW5zbWlzc2lvbi5NYW51YWxdLFxyXG4gICAgWydOJywgJ01hbnVhbCA0LVdoZWVsIERyaXZlJywgQ2FySGlyZVRyYW5zbWlzc2lvbi5NYW51YWxdLFxyXG4gICAgWydDJywgJ01hbnVhbCBBbGwtV2hlZWwgRHJpdmUnLCBDYXJIaXJlVHJhbnNtaXNzaW9uLk1hbnVhbF0sXHJcbiAgICBbJ0EnLCAnQXV0b21hdGljJywgQ2FySGlyZVRyYW5zbWlzc2lvbi5BdXRvXSxcclxuICAgIFsnQicsICdBdXRvbWF0aWMgNC1XaGVlbCBEcml2ZScsIENhckhpcmVUcmFuc21pc3Npb24uQXV0b10sXHJcbiAgICBbJ0QnLCAnQXV0b21hdGljIEFsbC0gV2hlZWwgRHJpdmUnLCBDYXJIaXJlVHJhbnNtaXNzaW9uLkF1dG9dXHJcbiAgXTtcclxuXHJcbiAgY2FyaGlyZUNvZGVzOiBhbnk7XHJcbiAgcHJpdmF0ZSBfdmVuZG9yczogVmVuZG9yW10gPSBbXHJcbiAgICB7IGNvZGU6ICctJywgbmFtZTogJ0FueScgfSxcclxuICAgIHsgY29kZTogJ0FDJywgbmFtZTogJ0FjZSBSZW50IEEgQ2FyJyB9LFxyXG4gICAgeyBjb2RlOiAnQUQnLCBuYW1lOiAnQWR2YW50YWdlIFJlbnQgQSBDYXInIH0sXHJcbiAgICB7IGNvZGU6ICdBTCcsIG5hbWU6ICdBbGFtbycgfSxcclxuICAgIHsgY29kZTogJ1pJJywgbmFtZTogJ0F2aXMnIH0sXHJcbiAgICB7IGNvZGU6ICdBVCcsIG5hbWU6ICdBdGVzYScgfSxcclxuICAgIHsgY29kZTogJ1pEJywgbmFtZTogJ0J1ZGdldCBSZW50IEEgQ2FyJyB9LFxyXG4gICAgeyBjb2RlOiAnQ0knLCBuYW1lOiAnQ2l0ZXIgUmVudCBBIENhcicgfSxcclxuICAgIHsgY29kZTogJ1pSJywgbmFtZTogJ0RvbGxhciBSZW50IEEgQ2FyJyB9LFxyXG4gICAgeyBjb2RlOiAnREYnLCBuYW1lOiAnRHJpdmluZyBGb3JjZScgfSxcclxuICAgIHsgY29kZTogJ0VZJywgbmFtZTogJ0Vjb25vbXkgUmVudCBBIENhcicgfSxcclxuICAgIHsgY29kZTogJ0VUJywgbmFtZTogJ0VudGVycHJpc2UnIH0sXHJcbiAgICB7IGNvZGU6ICdFUCcsIG5hbWU6ICdFdXJvcGNhcicgfSxcclxuICAgIHsgY29kZTogJ0lNJywgbmFtZTogJ0V1cm9wY2FyIFNvdXRoYWZyaWNhJyB9LFxyXG4gICAgeyBjb2RlOiAnRVonLCBuYW1lOiAnRXogUmVudCBBIENhcicgfSxcclxuICAgIHsgY29kZTogJ0ZGJywgbmFtZTogJ0ZpcmVmbHknIH0sXHJcbiAgICB7IGNvZGU6ICdGWCcsIG5hbWU6ICdGb3ggUmVudCBBIENhcicgfSxcclxuICAgIHsgY29kZTogJ0dOJywgbmFtZTogJ0d1ZXJpbiBDYXIgUmVudGFsJyB9LFxyXG4gICAgeyBjb2RlOiAnWkUnLCBuYW1lOiAnSGVydHonIH0sXHJcbiAgICB7IGNvZGU6ICdMTScsIG5hbWU6ICdMICYgTSBDYXIgUmVudGFsJyB9LFxyXG4gICAgeyBjb2RlOiAnTEwnLCBuYW1lOiAnTG9jYWxpemEnIH0sXHJcbiAgICB7IGNvZGU6ICdNVycsIG5hbWU6ICdNaWR3YXkgQ2FyIFJlbnRhbCcgfSxcclxuICAgIHsgY29kZTogJ1pMJywgbmFtZTogJ05hdGlvbmFsIENhciBSZW50YWwgU3lzdGVtJyB9LFxyXG4gICAgeyBjb2RlOiAnTkMnLCBuYW1lOiAnTmV4dGNhcicgfSxcclxuICAgIHsgY29kZTogJ05VJywgbmFtZTogJ051IENhciBSZW50YWxzJyB9LFxyXG4gICAgeyBjb2RlOiAnWkEnLCBuYW1lOiAnUGF5bGVzcyBDYXIgUmVudGFsJyB9LFxyXG4gICAgeyBjb2RlOiAnUFInLCBuYW1lOiAnUHJpY2VsZXNzJyB9LFxyXG4gICAgeyBjb2RlOiAnUlcnLCBuYW1lOiAnUmVudCBBIFdyZWNrJyB9LFxyXG4gICAgeyBjb2RlOiAnU1gnLCBuYW1lOiAnU2l4dCcgfSxcclxuICAgIHsgY29kZTogJ1RFJywgbmFtZTogJ1RlbXBlc3QnIH0sXHJcbiAgICB7IGNvZGU6ICdYRicsIG5hbWU6ICdUZXN0LVMgQ3Jvc3MgR2FsaWxlbycgfSxcclxuICAgIHsgY29kZTogJ1hHJywgbmFtZTogJ1Rlc3QtUyBDcm9zcyBUcm5nJyB9LFxyXG4gICAgeyBjb2RlOiAnWlQnLCBuYW1lOiAnVGhyaWZ0eSBDYXIgUmVudGFsJyB9LFxyXG4gICAgeyBjb2RlOiAnUE0nLCBuYW1lOiAnVHJhdmVscG9ydCBUZXN0IENvZGUnIH0sXHJcbiAgICB7IGNvZGU6ICdTVicsIG5hbWU6ICdVLVNhdmUgQXV0byBSZW50YWwnIH0sXHJcbiAgICB7IGNvZGU6ICdXRicsIG5hbWU6ICdXb29kZm9yZCcgfVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgX2Nhcl9jbGFzc2VzOiBJQ2FyQ2xhc3Nlc1tdID0gW1xyXG4gICAgeyBjb2RlOiAnTScsIG5hbWU6ICdNaW5pJywga2V5OiBDYXJIaXJlQ2xhc3MuTWluaSwgdmFsdWU6ICcxMCcgfSxcclxuICAgIHsgY29kZTogJ04nLCBuYW1lOiAnTWluaSBFbGl0ZScsIGtleTogQ2FySGlyZUNsYXNzLk1pbmlFbGl0ZSwgdmFsdWU6ICcyMCcgfSxcclxuICAgIHsgY29kZTogJ0UnLCBuYW1lOiAnRWNvbm9teScsIGtleTogQ2FySGlyZUNsYXNzLkVjb25vbXksIHZhbHVlOiAnMzAnIH0sXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdIJyxcclxuICAgICAgbmFtZTogJ0Vjb25vbXkgRWxpdGUnLFxyXG4gICAgICBrZXk6IENhckhpcmVDbGFzcy5FY29ub215RWxpdGUsXHJcbiAgICAgIHZhbHVlOiAnNDAnXHJcbiAgICB9LFxyXG4gICAgeyBjb2RlOiAnQycsIG5hbWU6ICdDb21wYWN0Jywga2V5OiBDYXJIaXJlQ2xhc3MuQ29tcGFjdCwgdmFsdWU6ICc1MCcgfSxcclxuICAgIHtcclxuICAgICAgY29kZTogJ0QnLFxyXG4gICAgICBuYW1lOiAnQ29tcGFjdCBFbGl0ZScsXHJcbiAgICAgIGtleTogQ2FySGlyZUNsYXNzLkNvbXBhY3RFbGl0ZSxcclxuICAgICAgdmFsdWU6ICc2MCdcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdJJyxcclxuICAgICAgbmFtZTogJ0ludGVybWVkaWF0ZScsXHJcbiAgICAgIGtleTogQ2FySGlyZUNsYXNzLkludGVybWVkaWF0ZSxcclxuICAgICAgdmFsdWU6ICc3MCdcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdKJyxcclxuICAgICAgbmFtZTogJ0ludGVybWVkaWF0ZSBFbGl0ZScsXHJcbiAgICAgIGtleTogQ2FySGlyZUNsYXNzLkludGVybWVkaWF0ZUVsaXRlLFxyXG4gICAgICB2YWx1ZTogJzgwJ1xyXG4gICAgfSxcclxuICAgIHsgY29kZTogJ1MnLCBuYW1lOiAnU3RhbmRhcmQnLCBrZXk6IENhckhpcmVDbGFzcy5TdGFuZGFyZCwgdmFsdWU6ICc5MCcgfSxcclxuICAgIHtcclxuICAgICAgY29kZTogJ1InLFxyXG4gICAgICBuYW1lOiAnU3RhbmRhcmQgRWxpdGUnLFxyXG4gICAgICBrZXk6IENhckhpcmVDbGFzcy5TdGFuZGFyZEVsaXRlLFxyXG4gICAgICB2YWx1ZTogJzEwMCdcclxuICAgIH0sXHJcbiAgICB7IGNvZGU6ICdGJywgbmFtZTogJ0Z1bGwgU2l6ZScsIGtleTogQ2FySGlyZUNsYXNzLkZ1bGxzaXplLCB2YWx1ZTogJzExMCcgfSxcclxuICAgIHtcclxuICAgICAgY29kZTogJ0cnLFxyXG4gICAgICBuYW1lOiAnRnVsbCBTaXplIEVsaXRlJyxcclxuICAgICAga2V5OiBDYXJIaXJlQ2xhc3MuRnVsbHNpemVFbGl0ZSxcclxuICAgICAgdmFsdWU6ICcxMjAnXHJcbiAgICB9LFxyXG4gICAgeyBjb2RlOiAnUCcsIG5hbWU6ICdQcmVtaXVtJywga2V5OiBDYXJIaXJlQ2xhc3MuUHJlbWl1bSwgdmFsdWU6ICcxMzAnIH0sXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdVJyxcclxuICAgICAgbmFtZTogJ1ByZW1pdW0gRWxpdGUnLFxyXG4gICAgICBrZXk6IENhckhpcmVDbGFzcy5QcmVtaXVtRWxpdGUsXHJcbiAgICAgIHZhbHVlOiAnMTQwJ1xyXG4gICAgfSxcclxuICAgIHsgY29kZTogJ0wnLCBuYW1lOiAnTHV4dXJ5Jywga2V5OiBDYXJIaXJlQ2xhc3MuTHV4dXJ5LCB2YWx1ZTogJzE1MCcgfSxcclxuICAgIHtcclxuICAgICAgY29kZTogJ1cnLFxyXG4gICAgICBuYW1lOiAnTHV4dXJ5IEVsaXRlJyxcclxuICAgICAga2V5OiBDYXJIaXJlQ2xhc3MuTHV4dXJ5RWxpdGUsXHJcbiAgICAgIHZhbHVlOiAnMTYwJ1xyXG4gICAgfSxcclxuICAgIHsgY29kZTogJ08nLCBuYW1lOiAnT3ZlcnNpemUnLCBrZXk6IENhckhpcmVDbGFzcy5PdmVyc2l6ZSwgdmFsdWU6ICcxNzAnIH0sXHJcbiAgICB7IGNvZGU6ICdYJywgbmFtZTogJ1NwZWNpYWwnLCBrZXk6IENhckhpcmVDbGFzcy5TcGVjaWFsLCB2YWx1ZTogJzE4MCcgfVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgX2xvY2F0aW9uX3R5cGVzID0gW1xyXG4gICAgTG9jYXRpb25UeXBlcy5DaXR5LFxyXG4gICAgTG9jYXRpb25UeXBlcy5BaXJwb3J0LFxyXG4gICAgTG9jYXRpb25UeXBlcy5Qb3N0Y29kZVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgY2FyQ2xhc3NNYXA6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7XHJcbiAgICBtaW5pOiAwLFxyXG4gICAgJ21pbmkgZWxpdGUnOiAxLFxyXG4gICAgZWNvbm9teTogMixcclxuICAgICdlY29ub215IGVsaXRlJzogMyxcclxuICAgIGNvbXBhY3Q6IDQsXHJcbiAgICAnY29tcGFjdCBzcGVjaWFsJzogNSxcclxuICAgICdjb21wYWN0IGVsaXRlJzogNixcclxuICAgIGludGVybWVkaWF0ZTogNyxcclxuICAgICdpbnRlcm1lZGlhdGUgZWxpdGUnOiA4LFxyXG4gICAgc3RhbmRhcmQ6IDksXHJcbiAgICAnc3RhbmRhcmQgZWxpdGUnOiAxMCxcclxuICAgICdmdWxsIHNpemUnOiAxMSxcclxuICAgICdmdWxsIHNpemUgZWxpdGUnOiAxMixcclxuICAgIHByZW1pdW06IDEzLFxyXG4gICAgJ3ByZW1pdW0gZWxpdGUnOiAxNCxcclxuICAgIGx1eHVyeTogMTUsXHJcbiAgICAnbHV4dXJ5IGVsaXRlJzogMTYsXHJcbiAgICBvdmVyc2l6ZTogMTcsXHJcbiAgICBzcGVjaWFsOiAxOFxyXG4gIH07XHJcbiAgLy8gISAtIEVuZCBvZiBoYXJkY29kZWQgZGF0YVxyXG5cclxuICBwdWJsaWMgdHlwZTogU2VydmljZVR5cGUgPSBTZXJ2aWNlVHlwZS5DYXI7XHJcblxyXG4gIHByaXZhdGUgX25nYlBpY2t1cERhdGU6IE5nYkRhdGVTdHJ1Y3Q7XHJcbiAgcHJpdmF0ZSBfcGlja3VwVGltZTogc3RyaW5nO1xyXG4gIHByaXZhdGUgX25nYkRyb3BvZmZEYXRlOiBOZ2JEYXRlU3RydWN0O1xyXG4gIHByaXZhdGUgX2Ryb3BvZmZUaW1lOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfc29ydGluZ19vcHRpb25zOiBDYXJIaXJlU29ydFtdID0gW1xyXG4gICAge1xyXG4gICAgICB2YWx1ZTogMCxcclxuICAgICAgZGlzcGxheTogJ0NoZWFwZXN0IEZpcnN0J1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdmFsdWU6IDEsXHJcbiAgICAgIGRpc3BsYXk6ICdNb3N0IEV4cGVuc2l2ZSBGaXJzdCdcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHZhbHVlOiAyLFxyXG4gICAgICBkaXNwbGF5OiAnUHJlZmVycmVkIEZpcnN0J1xyXG4gICAgfVxyXG4gIF07XHJcbiAgcHJpdmF0ZSBfbWluRGF0ZTogTmdiRGF0ZVN0cnVjdCA9IHtcclxuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpLFxyXG4gICAgbW9udGg6IG1vbWVudCgpLm1vbnRoKCkgKyAxLFxyXG4gICAgeWVhcjogbW9tZW50KCkueWVhcigpXHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfbWluSW5EYXRlOiBOZ2JEYXRlU3RydWN0ID0ge1xyXG4gICAgZGF5OiBtb21lbnQoKS5kYXRlKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKClcclxuICB9O1xyXG4gIHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdO1xyXG5cclxuICBnZXQgYWR1bHRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFkdWx0cztcclxuICB9XHJcblxyXG4gIHNldCBhZHVsdHModmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNoaWxkcmVuKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNoaWxkcmVuKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGVzdGltYXRlZE1pbGVhZ2UoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZXN0aW1hdGVkTWlsZWFnZTtcclxuICB9XHJcblxyXG4gIHNldCBlc3RpbWF0ZWRNaWxlYWdlKG1pbGFnZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZXN0aW1hdGVkTWlsZWFnZSA9IG1pbGFnZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBwaWNrdXBUaW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGlja3VwVGltZTtcclxuICB9XHJcblxyXG4gIHNldCBwaWNrdXBUaW1lKG5ld3RpbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fcGlja3VwVGltZSA9IG5ld3RpbWU7XHJcbiAgICB0aGlzLl91cGRhdGVOZ2JQaWNrdXBEYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRyb3BvZmZUaW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fZHJvcG9mZlRpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgZHJvcG9mZlRpbWUobmV3dGltZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9kcm9wb2ZmVGltZSA9IG5ld3RpbWU7XHJcbiAgICB0aGlzLl91cGRhdGVOZ2JEcm9wb2ZmRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIGdldCBwb3N0Y29kZVBpY2t1cFJhdygpOiBMb2NhdGlvbkRldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wb3N0Y29kZVBpY2t1cFJhdztcclxuICB9XHJcblxyXG4gIHNldCBwb3N0Y29kZVBpY2t1cFJhdyhuZXdQaWNrdXBDb3VudHJ5OiBMb2NhdGlvbkRldGFpbHMpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5wb3N0Y29kZVBpY2t1cFJhdyA9IG5ld1BpY2t1cENvdW50cnk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgcG9zdGNvZGVEcm9wb2ZmUmF3KCk6IExvY2F0aW9uRGV0YWlscyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnBvc3Rjb2RlRHJvcG9mZlJhdztcclxuICB9XHJcblxyXG4gIHNldCBwb3N0Y29kZURyb3BvZmZSYXcobmV3UGlja3VwQ291bnRyeTogTG9jYXRpb25EZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucG9zdGNvZGVEcm9wb2ZmUmF3ID0gbmV3UGlja3VwQ291bnRyeTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBjaXR5UGlja3VwRGVwb3QoKTogQ2FySGlyZURlcG90IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2l0eVBpY2t1cERlcG90O1xyXG4gIH1cclxuXHJcbiAgc2V0IGNpdHlQaWNrdXBEZXBvdChuZXdQaWNrdXBDb3VudHJ5OiBDYXJIaXJlRGVwb3QpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaXR5UGlja3VwRGVwb3QgPSBuZXdQaWNrdXBDb3VudHJ5O1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNpdHlEcm9wb2ZmRGVwb3QoKTogQ2FySGlyZURlcG90IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2l0eURyb3BvZmZEZXBvdDtcclxuICB9XHJcblxyXG4gIHNldCBjaXR5RHJvcG9mZkRlcG90KG5ld1Bvc3RDb2RlRHJvcG9mZjogQ2FySGlyZURlcG90KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2l0eURyb3BvZmZEZXBvdCA9IG5ld1Bvc3RDb2RlRHJvcG9mZjtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBwb3N0Y29kZVBpY2t1cCgpOiBDYXJIaXJlRGVwb3Qge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wb3N0Y29kZVBpY2t1cDtcclxuICB9XHJcblxyXG4gIHNldCBwb3N0Y29kZVBpY2t1cChuZXdQaWNrdXBDb3VudHJ5OiBDYXJIaXJlRGVwb3QpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5wb3N0Y29kZVBpY2t1cCA9IG5ld1BpY2t1cENvdW50cnk7XHJcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zLnBvc3Rjb2RlUGlja3VwKSB7XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5sb2NhdGlvblR5cGUgPSBMb2NhdGlvblR5cGVzLlBvc3Rjb2RlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHBvc3Rjb2RlRHJvcG9mZigpOiBDYXJIaXJlRGVwb3Qge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wb3N0Y29kZURyb3BvZmY7XHJcbiAgfVxyXG5cclxuICBzZXQgcG9zdGNvZGVEcm9wb2ZmKG5ld1Bvc3RDb2RlRHJvcG9mZjogQ2FySGlyZURlcG90KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucG9zdGNvZGVEcm9wb2ZmID0gbmV3UG9zdENvZGVEcm9wb2ZmO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNpdHlQaWNrdXAoKTogTG9jYXRpb25EZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2l0eVBpY2t1cDtcclxuICB9XHJcblxyXG4gIHNldCBjaXR5UGlja3VwKG5ld1BpY2t1cDogTG9jYXRpb25EZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2l0eVBpY2t1cCA9IG5ld1BpY2t1cDtcclxuICAgIGlmICh0aGlzLnRlbXBQYXJhbXMuY2l0eVBpY2t1cCkge1xyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMubG9jYXRpb25UeXBlID0gTG9jYXRpb25UeXBlcy5DaXR5O1xyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLnRlbXBQYXJhbXMubG9jYXRpb25UeXBlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY2l0eURyb3BvZmYoKTogTG9jYXRpb25EZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2l0eURyb3BvZmY7XHJcbiAgfVxyXG5cclxuICBzZXQgY2l0eURyb3BvZmYobmV3RHJvcG9mZjogTG9jYXRpb25EZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2l0eURyb3BvZmYgPSBuZXdEcm9wb2ZmO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG1pbkRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWluRGF0ZTtcclxuICB9XHJcblxyXG4gIGdldCBtaW5JbkRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWluSW5EYXRlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdGltZUFycmF5OiBWYWx1ZURpc3BsYXk8c3RyaW5nPltdO1xyXG4gIC8vIC0gR2V0dGVycyBBbmQgU2V0dGVycyBGb3IgVmFyaW91cyBWYXJpYWJsZXNcclxuICBnZXQgcGlja3VwX2NvdW50cnkoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucGlja3VwX2NvdW50cnk7XHJcbiAgfVxyXG5cclxuICBzZXQgcGlja3VwX2NvdW50cnkobmV3UGlja3VwQ291bnRyeTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucGlja3VwX2NvdW50cnkgPSBuZXdQaWNrdXBDb3VudHJ5O1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRyb3BvZmZfY291bnRyeSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5kcm9wb2ZmX2NvdW50cnk7XHJcbiAgfVxyXG5cclxuICBzZXQgZHJvcG9mZl9jb3VudHJ5KG5ld0Ryb3BvZmZDb3VudHJ5OiBzdHJpbmcpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5kcm9wb2ZmX2NvdW50cnkgPSBuZXdEcm9wb2ZmQ291bnRyeTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBwaWNrdXBfbG9jYXRpb24oKTogT0JUQWlycG9ydERldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5waWNrdXBfbG9jYXRpb247XHJcbiAgfVxyXG5cclxuICBzZXQgcGlja3VwX2xvY2F0aW9uKHBpY2t1cExvY2F0aW9uOiBPQlRBaXJwb3J0RGV0YWlscykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnBpY2t1cF9sb2NhdGlvbiA9IHBpY2t1cExvY2F0aW9uO1xyXG4gICAgaWYgKHRoaXMudGVtcFBhcmFtcy5waWNrdXBfbG9jYXRpb24pIHtcclxuICAgICAgdGhpcy50ZW1wUGFyYW1zLmxvY2F0aW9uVHlwZSA9IExvY2F0aW9uVHlwZXMuQWlycG9ydDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5yZXR1cm5fdG9fcGlja3VwKSB7XHJcbiAgICAgIHRoaXMuZHJvcG9mZl9sb2NhdGlvbiA9IHBpY2t1cExvY2F0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBkcm9wb2ZmX2xvY2F0aW9uKCk6IE9CVEFpcnBvcnREZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZHJvcG9mZl9sb2NhdGlvbjtcclxuICB9XHJcblxyXG4gIHNldCBkcm9wb2ZmX2xvY2F0aW9uKGRyb3BPZmZMb2NhdGlvbjogT0JUQWlycG9ydERldGFpbHMpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5kcm9wb2ZmX2xvY2F0aW9uID0gZHJvcE9mZkxvY2F0aW9uO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0IG5nYlBpY2t1cERhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcclxuICAgIHRoaXMuX25nYlBpY2t1cERhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZU5nYlBpY2t1cERhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgbmdiUGlja3VwRGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLl9uZ2JQaWNrdXBEYXRlO1xyXG4gIH1cclxuXHJcbiAgc2V0IG5nYkRyb3BvZmZEYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XHJcbiAgICB0aGlzLl9uZ2JEcm9wb2ZmRGF0ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlTmdiRHJvcG9mZkRhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgbmdiRHJvcG9mZkRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbmdiRHJvcG9mZkRhdGU7XHJcbiAgfVxyXG5cclxuICAvLyBEYXRldGltZXMgd2l0aGluIHRoZSBxdWVyeSBpdHNlbGZcclxuICBnZXQgcGlja3VwX2RhdGV0aW1lKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5waWNrdXBfZGF0ZXRpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgcGlja3VwX2RhdGV0aW1lKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucGlja3VwX2RhdGV0aW1lID0gdmFsdWU7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWUuaXNWYWxpZCgpKSB7XHJcbiAgICAgICAgdGhpcy5fbmdiUGlja3VwRGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5fcGlja3VwVGltZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdISDptbScpXHJcbiAgICAgICAgICA/IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdISDptbScpXHJcbiAgICAgICAgICA6ICcwNzozMCc7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fbWluSW5EYXRlID0ge1xyXG4gICAgICAgIGRheTogdmFsdWUuZGF0ZSgpLFxyXG4gICAgICAgIG1vbnRoOiB2YWx1ZS5tb250aCgpICsgMSxcclxuICAgICAgICB5ZWFyOiB2YWx1ZS55ZWFyKClcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGlmICh2YWx1ZS5pc1NhbWVPckFmdGVyKHRoaXMudGVtcFBhcmFtcy5kcm9wb2ZmX2RhdGV0aW1lKSkge1xyXG4gICAgICAgIHRoaXMuZHJvcG9mZl9kYXRldGltZSA9IHRoaXMuZHJvcG9mZl9kYXRldGltZVxyXG4gICAgICAgICAgLnNldCgnZGF0ZScsIHZhbHVlLmRhdGUoKSlcclxuICAgICAgICAgIC5zZXQoJ21vbnRoJywgdmFsdWUubW9udGgoKSlcclxuICAgICAgICAgIC5zZXQoJ3llYXInLCB2YWx1ZS55ZWFyKCkpO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge31cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgZHJvcG9mZl9kYXRldGltZSgpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZHJvcG9mZl9kYXRldGltZTtcclxuICB9XHJcblxyXG4gIHNldCBkcm9wb2ZmX2RhdGV0aW1lKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZHJvcG9mZl9kYXRldGltZSA9IHZhbHVlO1xyXG4gICAgaWYgKHZhbHVlICYmIHZhbHVlLmlzVmFsaWQoKSkge1xyXG4gICAgICB0aGlzLl9uZ2JEcm9wb2ZmRGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZSh2YWx1ZSk7XHJcbiAgICAgIHRoaXMuX2Ryb3BvZmZUaW1lID0gbW9tZW50KHZhbHVlKS5mb3JtYXQoJ0hIOm1tJylcclxuICAgICAgICA/IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdISDptbScpXHJcbiAgICAgICAgOiAnMDg6MzAnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gIWRhdGUgYW5kIHRpbWUgaXMgaGFuZGxlZCBkaWZmZXJlbnRseSBmb3IgTFVcclxuICBwcml2YXRlIF9waWNrdXBfZGF0ZTogTmdiRGF0ZVN0cnVjdCA9IG51bGw7XHJcblxyXG4gIGdldCBwaWNrdXBfZGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLl9waWNrdXBfZGF0ZTtcclxuICB9XHJcblxyXG4gIHNldCBwaWNrdXBfZGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fcGlja3VwX2RhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZVBpY2t1cERhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9waWNrdXBfdGltZTogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgcGlja3VwX3RpbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9waWNrdXBfdGltZTtcclxuICB9XHJcblxyXG4gIHNldCBwaWNrdXBfdGltZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9waWNrdXBfdGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlUGlja3VwRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Ryb3BvZmZfZGF0ZTogTmdiRGF0ZVN0cnVjdCA9IG51bGw7XHJcblxyXG4gIGdldCBkcm9wb2ZmX2RhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZHJvcG9mZl9kYXRlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGRyb3BvZmZfZGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fZHJvcG9mZl9kYXRlID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVEcm9wb2ZmRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Ryb3BvZmZfdGltZTogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgZHJvcG9mZl90aW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fZHJvcG9mZl90aW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IGRyb3BvZmZfdGltZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9kcm9wb2ZmX3RpbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZURyb3BvZmZEYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHJldHVybl90b19waWNrdXAoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnJldHVybl90b19waWNrdXA7XHJcbiAgfVxyXG5cclxuICBzZXQgcmV0dXJuX3RvX3BpY2t1cChuZXdWYWw6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5fdG9fcGlja3VwID0gbmV3VmFsO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNob3NlblZlbmRvcigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5WZW5kb3I7XHJcbiAgfVxyXG5cclxuICBzZXQgY2hvc2VuVmVuZG9yKG5ld1ZlbmRvcjogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuVmVuZG9yID0gbmV3VmVuZG9yO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNob3NlbkRpc3RhbmNlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlbkRpc3RhbmNlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNob3NlbkRpc3RhbmNlKG5ld0Nob3NlbkRpc3RhbmNlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5EaXN0YW5jZSA9IG5ld0Nob3NlbkRpc3RhbmNlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNhckNsYXNzKCk6IENhckhpcmVDbGFzcyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNhckNsYXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNhckNsYXNzKGNhckNsYXNzOiBDYXJIaXJlQ2xhc3MpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jYXJDbGFzcyA9IGNhckNsYXNzO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNhclR5cGUoKTogQ2FySGlyZVR5cGUge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jYXJUeXBlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNhclR5cGUodHlwZTogQ2FySGlyZVR5cGUpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jYXJUeXBlID0gdHlwZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCB0cmFuc21pc3Npb24oKTogQ2FySGlyZVRyYW5zbWlzc2lvbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnRyYW5zbWlzc2lvbjtcclxuICB9XHJcblxyXG4gIHNldCB0cmFuc21pc3Npb24odHJhbnM6IENhckhpcmVUcmFuc21pc3Npb24pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy50cmFuc21pc3Npb24gPSB0cmFucztcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBhaXJDb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFpckNvbjtcclxuICB9XHJcblxyXG4gIHNldCBhaXJDb24obmV3Q29uOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuYWlyQ29uID0gbmV3Q29uO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGxvY2F0aW9uVHlwZSgpOiBMb2NhdGlvblR5cGVzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMubG9jYXRpb25UeXBlO1xyXG4gIH1cclxuICBzZXQgbG9jYXRpb25UeXBlKHZhbHVlOiBMb2NhdGlvblR5cGVzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMubG9jYXRpb25UeXBlID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHRpbWVBcnJheSgpIHtcclxuICAgIHRoaXMuX3RpbWVBcnJheSA9XHJcbiAgICAgIHRoaXMuX3RpbWVBcnJheSB8fFxyXG4gICAgICBBcnJheSg5NilcclxuICAgICAgICAuZmlsbCgwKVxyXG4gICAgICAgIC5tYXAoKF8sIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZhbHVlOlxyXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyA0KVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcclxuICAgICAgICAgICAgICAnOicgK1xyXG4gICAgICAgICAgICAgICgoaW5kZXggJSA0KSAqIDE1KS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyksXHJcbiAgICAgICAgICAgIGRpc3BsYXk6XHJcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcihpbmRleCAvIDQpXHJcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgLnBhZFN0YXJ0KDIsICcwJykgK1xyXG4gICAgICAgICAgICAgICc6JyArXHJcbiAgICAgICAgICAgICAgKChpbmRleCAlIDQpICogMTUpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIHJldHVybiB0aGlzLl90aW1lQXJyYXk7XHJcbiAgfVxyXG5cclxuICAvLyAhIC0gVGhlIGJlbG93IHZhbHVlcyBoYXZlIGdldHRlcnMgb25seSAoSS5FIENhbm5vdCBtb2RpZnkpXHJcblxyXG4gIGdldCBjYXJBaXJDb25kaXRpb25UeXBlcygpOiBbc3RyaW5nLCBzdHJpbmcsIGJvb2xlYW5dW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhckFpckNvbmRpdGlvblR5cGVzO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHdpdGhpbkRpc3RhbmNlKCk6IFdpdGhpbkRpc3RhbmNlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3dpdGhpbkRpc3RhbmNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNhclRyYW5zbWlzc2lvbkNvZGVzKCk6IFtzdHJpbmcsIHN0cmluZywgQ2FySGlyZVRyYW5zbWlzc2lvbl1bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2FyVHJhbnNtaXNzaW9uQ29kZXM7XHJcbiAgfVxyXG5cclxuICBnZXQgY2FyVHlwZUNvZGVzKCk6IFtzdHJpbmcsIHN0cmluZywgQ2FySGlyZVR5cGVdW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhclR5cGVDb2RlcztcclxuICB9XHJcblxyXG4gIGdldCB2ZW5kb3JzKCk6IFZlbmRvcltdIHtcclxuICAgIHJldHVybiB0aGlzLl92ZW5kb3JzO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNvcnRpbmdPcHRpb25zKCk6IENhckhpcmVTb3J0W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NvcnRpbmdfb3B0aW9ucztcclxuICB9XHJcblxyXG4gIC8vICEgLSBFbmQgb2YgZ2V0dGVycyBhbmQgc2V0dGVyc1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY2FyaGlyZWZldGNoZXI6IEJhc2VDYXJoaXJlUXVvdGVGZXRjaGVyPENIX1E+LFxyXG4gICAgcHJpdmF0ZSBjYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlcjogQmFzZUNhckhpcmVBdmFpbGFiaWxpdHlEZXRhaWxGZXRjaGVyPENIQURfUT4sXHJcbiAgICBoZWxwZXJzOiBCYXNlSGVscGVyUm91dGluZXMsXHJcbiAgICBwcml2YXRlIGJhc2tldFNlcnZpY2U6IEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gICAgc3RvcmFnZVNlcnZpY2U6IEJhc2VTdG9yYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgc2VhcmNoU2VydmljZTogRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2VcclxuICApIHtcclxuICAgIHN1cGVyKHN0b3JhZ2VTZXJ2aWNlLCBoZWxwZXJzKTtcclxuICAgIGNvbnN0IGRhdGE6IHtcclxuICAgICAgdGVtcFBhcmFtczogQ2FySGlyZVRlbXBQYXJhbXM7XHJcbiAgICB9ID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIENhcmhpcmVFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVNcclxuICAgICkgfHwge1xyXG4gICAgICB0ZW1wUGFyYW1zOiB7fSBhcyBDYXJIaXJlVGVtcFBhcmFtc1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXMoc2VhcmNoU2VydmljZS5tYWtlQ2FySGlyZVF1ZXJ5KGRhdGEudGVtcFBhcmFtcykpO1xyXG5cclxuICAgIGlmIChzZWFyY2hTZXJ2aWNlLnNob3VsZEFkZFRyYXZlbGxlclN1YnNjcmlwdGlvbigpKSB7XHJcbiAgICAgIHNlYXJjaFNlcnZpY2UudHJhdmVsbGVySW5mb3JtYXRpb24uc3Vic2NyaWJlKFxyXG4gICAgICAgICh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5hZHVsdHMgPSAxO1xyXG4gICAgICAgICAgdGhpcy5jaGlsZHJlbiA9IDA7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlcnMgPSB0cmF2ZWxsZXJzPy5zbGljZSgwLCAxKSB8fCBbXTtcclxuICAgICAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVzdWx0cyA9XHJcbiAgICAgIHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtQXNMaXN0PENhckhpcmVRdW90ZVJlc3VsdEFycmF5PihcclxuICAgICAgICB0aGlzLnJlc3VsdHNTZXNzaW9uTmFtZVxyXG4gICAgICApIHx8IFtdO1xyXG5cclxuICAgIHRoaXMuZnVsbFJlc3VsdHMgPSBoZWxwZXJzLmNsb25lKHJlc3VsdHMgfHwgW10pO1xyXG4gICAgdGhpcy5fY2hlYXBlc3RSZXN1bHRQcmljZSA9IHRoaXMudXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0cyk7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChyZXN1bHRzKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCByZXN1bHRzU2Vzc2lvbk5hbWUgPVxyXG4gICAgQ2FyaGlyZUVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XHJcbiAgcHJvdGVjdGVkIG11bHRpUmVzdWx0c1Nlc3Npb25OYW1lID1cclxuICAgIENhcmhpcmVFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xyXG5cclxuICBwcm90ZWN0ZWQgcmVzZXRRdWVyeSgpOiB2b2lkIHtcclxuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyh0aGlzLnNlYXJjaFNlcnZpY2UubWFrZUNhckhpcmVRdWVyeSgpKTtcclxuICAgIHRoaXMuZXN0aW1hdGVkTWlsZWFnZSA9IG51bGw7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc1ZhbGlkKCkge1xyXG4gICAgaWYgKCF0aGlzLmRvQ2hlY2tzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIENhcmhpcmVFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgIHtcclxuICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXNcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBnbyBvdmVyIGFuZCBjaGVjayB0aGF0IGFsbCBvZiB0aGUgdmFyaW91cyB2YXJpYWJsZXMgYXJlIGNvcnJlY3RcclxuXHJcbiAgICAvLyBmaXJzdCBvZiBhbGwgY2hlY2sgdGhhdCB3ZSBoYXZlIGEgdmFsaWQgbG9jYXRpb25cclxuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzID0gW107XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLmxvY2F0aW9uVHlwZSkge1xyXG4gICAgICBjYXNlIExvY2F0aW9uVHlwZXMuQWlycG9ydDpcclxuICAgICAgICBpZiAoIXRoaXMucGlja3VwX2xvY2F0aW9uIHx8ICF0aGlzLnBpY2t1cF9sb2NhdGlvbi5kZXN0aW5hdGlvbikge1xyXG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIHN1cHBseSBhIHBpY2t1cCBsb2NhdGlvbicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmRyb3BvZmZfbG9jYXRpb24gfHwgIXRoaXMuZHJvcG9mZl9sb2NhdGlvbi5kZXN0aW5hdGlvbikge1xyXG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIHN1cHBseSBhIGRyb3BvZmYgbG9jYXRpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5DaXR5OlxyXG4gICAgICAgIGlmICghdGhpcy5jaXR5UGlja3VwKSB7XHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2Ugc3VwcGx5IGEgcGlja3VwIGNpdHknKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5jaXR5RHJvcG9mZikge1xyXG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIHN1cHBseSBhIGRyb3BvZmYgY2l0eScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLlBvc3Rjb2RlOlxyXG4gICAgICAgIGlmICghdGhpcy5wb3N0Y29kZVBpY2t1cCkge1xyXG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIHN1cHBseSBhIHBpY2t1cCBkZXBvdCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnBvc3Rjb2RlRHJvcG9mZikge1xyXG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIHN1cHBseSBhIGRyb3BvZmYgZGVwb3QnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZXN0aW1hdGVkTWlsZWFnZSAmJiB0aGlzLmVzdGltYXRlZE1pbGVhZ2UgPD0gMCkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICdFc3RpbWF0ZWQgTWlsYWdlIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIuJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICghdGhpcy5waWNrdXBfZGF0ZXRpbWUpIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2Ugc3VwcGx5IGEgcGlja3VwIHRpbWUgYW5kIGRhdGUnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCF0aGlzLmRyb3BvZmZfZGF0ZXRpbWUpIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2Ugc3VwcGx5IGEgZHJvcCBvZmYgdGltZSBhbmQgZGF0ZScpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5kcm9wb2ZmX2RhdGV0aW1lPy5pc1NhbWVPckJlZm9yZSh0aGlzLnBpY2t1cF9kYXRldGltZSwgJ21pbnV0ZScpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgICAnRHJvcG9mZiBkYXRlL3RpbWUgY2Fubm90IGJlIGJlZm9yZSBvciB0aGUgc2FtZSBhcyBwaWNrdXAgZGF0ZS90aW1lJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnBpY2t1cF9kYXRldGltZT8uaXNCZWZvcmUobW9tZW50KCkpKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAgICdQaWNrdXAgZGF0ZS90aW1lIG11c3QgYmUgYWZ0ZXIgcHJlc2VudCBkYXRlL3RpbWUnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuZHJvcG9mZl9kYXRldGltZT8uaXNCZWZvcmUobW9tZW50KCkpKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAgICdEcm9wb2ZmIGRhdGUvdGltZSBtdXN0IGJlIGFmdGVyIHByZXNlbnQgZGF0ZS90aW1lJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxyXG5cclxuICAgIHRoaXMuaXNWYWxpZC5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMCk7XHJcbiAgICB0aGlzLm1lc3NhZ2VzLm5leHQodGhpcy52YWxpZGF0aW9uTWVzc2FnZXMpO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRTZWFyY2goKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChbXSk7XHJcbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XHJcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZVJlY2VudFNlYXJjaChcclxuICAgICAgICB0aGlzLmdldFJlY2VudFNlYXJjaFF1ZXJ5KHRoaXMuZ2V0U2VhcmNoUXVlcnkoKSlcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0U2VhcmNoKFxyXG4gICAgICAgIHRoaXMuY2FyaGlyZWZldGNoZXIuZmV0Y2hMaXN0KFxyXG4gICAgICAgICAgdGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFF1ZXJ5U2VhcmNoQ2FySGlyZUFyZ3M+KHF1ZXJ5KVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UmVjZW50U2VhcmNoUXVlcnkoXHJcbiAgICBxdWVyeTogUXVlcnlTZWFyY2hDYXJIaXJlQXJnc1xyXG4gICk6IFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyB7XHJcbiAgICBjb25zdCByZWNlbnRTZWFyY2hRdWVyeTogQ2FySGlyZVNlYXJjaEFyZ3MgPSB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLkNhcixcclxuICAgICAgc2VhcmNoQXJnczogcmVjZW50U2VhcmNoUXVlcnksXHJcbiAgICAgIHRyYXZlbERhdGU6IHRoaXMucGlja3VwX2RhdGV0aW1lLmZvcm1hdCgpLFxyXG4gICAgICB0cmF2ZWxsZXJzOiB0aGlzLmhlbHBlcnMuZ2V0VHJhdmVsbGVyc0lkKHRoaXMudHJhdmVsbGVycylcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVNlcmNoUXVlcnkocXVlcnk6IFF1ZXJ5U2VhcmNoQ2FySGlyZUFyZ3MpOiBDYXJIaXJlU2VhcmNoQXJncyB7XHJcbiAgICBjb25zdCBzZWFyY2hRdWVyeTogQ2FySGlyZVNlYXJjaEFyZ3MgPSBxdWVyeTtcclxuICAgIHN3aXRjaCAodGhpcy5sb2NhdGlvblR5cGUpIHtcclxuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLkNpdHk6XHJcbiAgICAgICAgc2VhcmNoUXVlcnkuY2l0eSA9IHtcclxuICAgICAgICAgIHBpY2t1cE5hbWU6IHRoaXMuY2l0eVBpY2t1cC5uYW1lLFxyXG4gICAgICAgICAgcGlja3VwQ291bnRyeUNvZGU6IHRoaXMuY2l0eVBpY2t1cC5jb3VudHJ5Q29kZSxcclxuICAgICAgICAgIHBpY2t1cENpdHk6IHRoaXMuY2l0eVBpY2t1cC5pZC50b1N0cmluZygpLFxyXG4gICAgICAgICAgcGlja3VwTGF0aXR1ZGU6IHRoaXMuY2l0eVBpY2t1cC5sYXRpdHVkZSxcclxuICAgICAgICAgIHBpY2t1cExvbmdpdHVkZTogdGhpcy5jaXR5UGlja3VwLmxvbmdpdHVkZSxcclxuXHJcbiAgICAgICAgICBkcm9wT2ZmTmFtZTogdGhpcy5jaXR5RHJvcG9mZi5uYW1lLFxyXG4gICAgICAgICAgZHJvcG9mZkNvdW50cnlDb2RlOiB0aGlzLmNpdHlEcm9wb2ZmLmNvdW50cnlDb2RlLFxyXG4gICAgICAgICAgZHJvcG9mZkNpdHk6IHRoaXMuY2l0eURyb3BvZmYuaWQudG9TdHJpbmcoKSxcclxuICAgICAgICAgIGRyb3BPZmZMYXRpdHVkZTogdGhpcy5jaXR5RHJvcG9mZi5sYXRpdHVkZSxcclxuICAgICAgICAgIGRyb3BPZmZMb25naXR1ZGU6IHRoaXMuY2l0eURyb3BvZmYubG9uZ2l0dWRlLFxyXG5cclxuICAgICAgICAgIHBpY2t1cEFkZHJlc3NMaW5lczogdGhpcy5jaXR5UGlja3VwRGVwb3QuYWRkcmVzc0xpbmVzWzBdLFxyXG4gICAgICAgICAgcGlja3VwQ2l0eU5hbWU6IHRoaXMuY2l0eVBpY2t1cERlcG90LmNpdHlOYW1lLFxyXG4gICAgICAgICAgcGlja3VwRXh0ZW5kZWRMb2NhdGlvbkNvZGU6IHRoaXMuY2l0eVBpY2t1cERlcG90LmV4dGVuZGVkTG9jYXRpb25Db2RlLFxyXG4gICAgICAgICAgcGlja3VwTG9jYXRpb25Db2RlOiB0aGlzLmNpdHlQaWNrdXBEZXBvdC5sb2NhdGlvbkNvZGUsXHJcbiAgICAgICAgICBwaWNrdXBWZW5kb3I6IHRoaXMuY2l0eVBpY2t1cERlcG90LnZlbmRvcixcclxuICAgICAgICAgIHBpY2t1cFZlbmRvckNvZGU6IHRoaXMuY2l0eVBpY2t1cERlcG90LnZlbmRvckNvZGUsXHJcbiAgICAgICAgICBjaG9zZW5EaXN0YW5jZTogdGhpcy5jaG9zZW5EaXN0YW5jZSxcclxuXHJcbiAgICAgICAgICBkcm9wT2ZmQWRkcmVzc0xpbmVzOiB0aGlzLmNpdHlEcm9wb2ZmRGVwb3QuYWRkcmVzc0xpbmVzWzBdLFxyXG4gICAgICAgICAgZHJvcE9mZkNpdHlOYW1lOiB0aGlzLmNpdHlEcm9wb2ZmRGVwb3QuY2l0eU5hbWUsXHJcbiAgICAgICAgICBkcm9wT2ZmRXh0ZW5kZWRMb2NhdGlvbkNvZGU6XHJcbiAgICAgICAgICAgIHRoaXMuY2l0eURyb3BvZmZEZXBvdC5leHRlbmRlZExvY2F0aW9uQ29kZSxcclxuICAgICAgICAgIGRyb3BPZmZMb2NhdGlvbkNvZGU6IHRoaXMuY2l0eURyb3BvZmZEZXBvdC5sb2NhdGlvbkNvZGUsXHJcbiAgICAgICAgICBkcm9wT2ZmVmVuZG9yOiB0aGlzLmNpdHlEcm9wb2ZmRGVwb3QudmVuZG9yLFxyXG4gICAgICAgICAgZHJvcE9mZlZlbmRvckNvZGU6IHRoaXMuY2l0eURyb3BvZmZEZXBvdC52ZW5kb3JDb2RlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLlBvc3Rjb2RlOlxyXG4gICAgICAgIHNlYXJjaFF1ZXJ5LmRlcG90ID0ge1xyXG4gICAgICAgICAgdmVuZG9yQ29kZTogdGhpcy5wb3N0Y29kZVBpY2t1cC52ZW5kb3JDb2RlLFxyXG4gICAgICAgICAgcGlja3VwTG9jYXRpb25Db2RlOiB0aGlzLnBvc3Rjb2RlUGlja3VwLmxvY2F0aW9uQ29kZSxcclxuICAgICAgICAgIHBpY2t1cEV4dGVuZGVkTG9jYXRpb25Db2RlOiB0aGlzLnBvc3Rjb2RlUGlja3VwLmV4dGVuZGVkTG9jYXRpb25Db2RlLFxyXG4gICAgICAgICAgcGlja3VwQWRkcmVzc0xpbmVzOiB0aGlzLnBvc3Rjb2RlUGlja3VwLmFkZHJlc3NMaW5lc1swXSxcclxuICAgICAgICAgIHBpY2t1cENpdHlOYW1lOiB0aGlzLnBvc3Rjb2RlUGlja3VwLmNpdHlOYW1lLFxyXG4gICAgICAgICAgcGlja3VwVmVuZG9yOiB0aGlzLnBvc3Rjb2RlUGlja3VwLnZlbmRvcixcclxuXHJcbiAgICAgICAgICBkcm9wT2ZmTG9jYXRpb25Db2RlOiB0aGlzLnBvc3Rjb2RlRHJvcG9mZi5sb2NhdGlvbkNvZGUsXHJcbiAgICAgICAgICBkcm9wT2ZmRXh0ZW5kZWRMb2NhdGlvbkNvZGU6XHJcbiAgICAgICAgICAgIHRoaXMucG9zdGNvZGVEcm9wb2ZmLmV4dGVuZGVkTG9jYXRpb25Db2RlLFxyXG4gICAgICAgICAgZHJvcG9mZkFkZHJlc3NMaW5lczogdGhpcy5wb3N0Y29kZURyb3BvZmYuYWRkcmVzc0xpbmVzWzBdLFxyXG4gICAgICAgICAgZHJvcG9mZkNpdHlOYW1lOiB0aGlzLnBvc3Rjb2RlRHJvcG9mZi5jaXR5TmFtZSxcclxuICAgICAgICAgIGRyb3BvZmZWZW5kb3I6IHRoaXMucG9zdGNvZGVEcm9wb2ZmLnZlbmRvcixcclxuICAgICAgICAgIGNob3NlbkRpc3RhbmNlOiB0aGlzLmNob3NlbkRpc3RhbmNlLFxyXG5cclxuICAgICAgICAgIHBpY2t1cFBvc3RDb2RlOiB0aGlzLnBvc3Rjb2RlUGlja3VwUmF3Lm5hbWUsXHJcbiAgICAgICAgICBwaWNrdXBMYXRpdHVkZTogdGhpcy5wb3N0Y29kZVBpY2t1cFJhdy5sYXRpdHVkZSxcclxuICAgICAgICAgIHBpY2t1cExvbmdpdHVkZTogdGhpcy5wb3N0Y29kZVBpY2t1cFJhdy5sb25naXR1ZGUsXHJcblxyXG4gICAgICAgICAgZHJvcG9mZlBvc3RDb2RlOiB0aGlzLnBvc3Rjb2RlRHJvcG9mZlJhdy5uYW1lLFxyXG4gICAgICAgICAgZHJvcG9mZkxhdGl0dWRlOiB0aGlzLnBvc3Rjb2RlRHJvcG9mZlJhdy5sYXRpdHVkZSxcclxuICAgICAgICAgIGRyb3BvZmZMb25naXR1ZGU6IHRoaXMucG9zdGNvZGVEcm9wb2ZmUmF3LmxvbmdpdHVkZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHNlYXJjaFF1ZXJ5O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXJ0UmVjZW50U2VhcmNoKHJlY2VudFNlYXJjaDogUmVjZW50U2VhcmNoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNob3NlblZlbmRvciA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnZlbmRvcjtcclxuICAgIHRoaXMuY2FyQ2xhc3MgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jbGFzcztcclxuICAgIHRoaXMuY2FyVHlwZSA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnR5cGU7XHJcbiAgICB0aGlzLnRyYW5zbWlzc2lvbiA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnRyYW5zbWlzc2lvbjtcclxuICAgIHRoaXMuYWlyQ29uID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuYWlyY29uO1xyXG4gICAgdGhpcy5lc3RpbWF0ZWRNaWxlYWdlID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZXN0aW1hdGVkRGFpbHlEaXN0YW5jZTtcclxuICAgIHRoaXMuZHJvcG9mZl9kYXRldGltZSA9IG1vbWVudChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kcm9wb2ZmRGF0ZVRpbWUpO1xyXG4gICAgdGhpcy5waWNrdXBfZGF0ZXRpbWUgPSBtb21lbnQocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucGlja3VwRGF0ZVRpbWUpO1xyXG5cclxuICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5KSB7XHJcbiAgICAgIHRoaXMuZ2V0UGFyYW1zRm9yQ2FyYnlDaXR5KHJlY2VudFNlYXJjaCk7XHJcbiAgICB9IGVsc2UgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmFpcnBvcnQpIHtcclxuICAgICAgdGhpcy5nZXRQYXJhbXNGb3JDYXJieUFpcnBvcnQocmVjZW50U2VhcmNoKTtcclxuICAgIH0gZWxzZSBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QpIHtcclxuICAgICAgdGhpcy5nZXRQYXJhbXNGb3JDYXJieVBvc3RDb2RlKHJlY2VudFNlYXJjaCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFBhcmFtc0ZvckNhcmJ5QWlycG9ydChyZWNlbnRTZWFyY2g6IFJlY2VudFNlYXJjaCk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2NhdGlvblR5cGUgPSBMb2NhdGlvblR5cGVzLkFpcnBvcnQ7XHJcbiAgICBjb21iaW5lTGF0ZXN0KFtcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEFpcnBvcnRCeUNvZGUoXHJcbiAgICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuYWlycG9ydC5waWNrdXBDb2RlXHJcbiAgICAgICksXHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0QnlDb2RlKFxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmFpcnBvcnQuZHJvcG9mZkNvZGVcclxuICAgICAgKVxyXG4gICAgXSkuc3Vic2NyaWJlKChbZGVwYXJ0TG9jYXRpb24sIGFycml2ZUxvY2F0aW9uXSkgPT4ge1xyXG4gICAgICBpZiAoZGVwYXJ0TG9jYXRpb24gJiYgYXJyaXZlTG9jYXRpb24pIHtcclxuICAgICAgICB0aGlzLmRyb3BvZmZfbG9jYXRpb24gPSB7XHJcbiAgICAgICAgICBkZXN0aW5hdGlvbjogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLm5hbWUsXHJcbiAgICAgICAgICBnYXRld2F5OiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2guaWF0YSxcclxuICAgICAgICAgIHRlcm1pbmFsczogdGhpcy5zZWFyY2hTZXJ2aWNlLnByb2Nlc3NUZXJtaW5hbHMoXHJcbiAgICAgICAgICAgIGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC50ZXJtaW5hbHNcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBjb3VudHJ5OiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeSxcclxuICAgICAgICAgIHBvc3Rjb2RlOiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8ucG9zdGNvZGUsXHJcbiAgICAgICAgICBjb3VudHJ5Q29kZTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnBpY2t1cF9sb2NhdGlvbiA9IHtcclxuICAgICAgICAgIGRlc3RpbmF0aW9uOiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2gubmFtZSxcclxuICAgICAgICAgIGdhdGV3YXk6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC5pYXRhLFxyXG4gICAgICAgICAgdGVybWluYWxzOiB0aGlzLnNlYXJjaFNlcnZpY2UucHJvY2Vzc1Rlcm1pbmFscyhcclxuICAgICAgICAgICAgYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLnRlcm1pbmFsc1xyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGNvdW50cnk6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5LFxyXG4gICAgICAgICAgcG9zdGNvZGU6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5wb3N0Y29kZSxcclxuICAgICAgICAgIGNvdW50cnlDb2RlOiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeUNvZGVcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmRyb3BvZmZfY291bnRyeSA9IHRoaXMuZHJvcG9mZl9sb2NhdGlvbi5jb3VudHJ5Q29kZTtcclxuICAgICAgICB0aGlzLnBpY2t1cF9jb3VudHJ5ID0gdGhpcy5waWNrdXBfbG9jYXRpb24uY291bnRyeUNvZGU7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFBhcmFtc0ZvckNhcmJ5Q2l0eShyZWNlbnRTZWFyY2g6IFJlY2VudFNlYXJjaCk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2NhdGlvblR5cGUgPSBMb2NhdGlvblR5cGVzLkNpdHk7XHJcbiAgICB0aGlzLmNob3NlbkRpc3RhbmNlID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eS5jaG9zZW5EaXN0YW5jZTtcclxuXHJcbiAgICB0aGlzLmNpdHlQaWNrdXAgPSB7XHJcbiAgICAgIGNvdW50cnlDb2RlOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LnBpY2t1cENvdW50cnlDb2RlLFxyXG4gICAgICBpZDogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eS5waWNrdXBDaXR5LFxyXG4gICAgICBuYW1lOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LnBpY2t1cE5hbWUsXHJcbiAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXMuQ2l0eSxcclxuICAgICAgbGF0aXR1ZGU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkucGlja3VwTGF0aXR1ZGUsXHJcbiAgICAgIGxvbmdpdHVkZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eS5waWNrdXBMb25naXR1ZGVcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5jaXR5RHJvcG9mZiA9IHtcclxuICAgICAgY291bnRyeUNvZGU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkuZHJvcG9mZkNvdW50cnlDb2RlLFxyXG4gICAgICBpZDogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eS5kcm9wb2ZmQ2l0eSxcclxuICAgICAgbmFtZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eS5kcm9wT2ZmTmFtZSxcclxuICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5DaXR5LFxyXG4gICAgICBsYXRpdHVkZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eS5kcm9wT2ZmTGF0aXR1ZGUsXHJcbiAgICAgIGxvbmdpdHVkZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eS5kcm9wT2ZmTG9uZ2l0dWRlXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuY2l0eURyb3BvZmZEZXBvdCA9IHtcclxuICAgICAgYWRkcmVzc0xpbmVzOiBbcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eS5kcm9wT2ZmQWRkcmVzc0xpbmVzXSxcclxuICAgICAgY2l0eU5hbWU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkuZHJvcE9mZkNpdHlOYW1lLFxyXG4gICAgICBleHRlbmRlZExvY2F0aW9uQ29kZTpcclxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LmRyb3BPZmZFeHRlbmRlZExvY2F0aW9uQ29kZSxcclxuICAgICAgbG9jYXRpb25Db2RlOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LmRyb3BPZmZMb2NhdGlvbkNvZGUsXHJcbiAgICAgIHZlbmRvcjogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eS5kcm9wT2ZmVmVuZG9yLFxyXG4gICAgICB2ZW5kb3JDb2RlOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LmRyb3BPZmZWZW5kb3JDb2RlXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuY2l0eVBpY2t1cERlcG90ID0ge1xyXG4gICAgICBhZGRyZXNzTGluZXM6IFtyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LnBpY2t1cEFkZHJlc3NMaW5lc10sXHJcbiAgICAgIGNpdHlOYW1lOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LnBpY2t1cENpdHlOYW1lLFxyXG4gICAgICBleHRlbmRlZExvY2F0aW9uQ29kZTpcclxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LnBpY2t1cEV4dGVuZGVkTG9jYXRpb25Db2RlLFxyXG4gICAgICBsb2NhdGlvbkNvZGU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkucGlja3VwTG9jYXRpb25Db2RlLFxyXG4gICAgICB2ZW5kb3I6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkucGlja3VwVmVuZG9yLFxyXG4gICAgICB2ZW5kb3JDb2RlOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LnBpY2t1cFZlbmRvckNvZGVcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UGFyYW1zRm9yQ2FyYnlQb3N0Q29kZShyZWNlbnRTZWFyY2g6IFJlY2VudFNlYXJjaCk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2NhdGlvblR5cGUgPSBMb2NhdGlvblR5cGVzLlBvc3Rjb2RlO1xyXG4gICAgdGhpcy5jaG9zZW5EaXN0YW5jZSA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90LmNob3NlbkRpc3RhbmNlO1xyXG5cclxuICAgIHRoaXMucG9zdGNvZGVEcm9wb2ZmID0ge1xyXG4gICAgICBhZGRyZXNzTGluZXM6IFtyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXBvdC5kcm9wb2ZmQWRkcmVzc0xpbmVzXSxcclxuICAgICAgdmVuZG9yQ29kZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QudmVuZG9yQ29kZSxcclxuICAgICAgbG9jYXRpb25Db2RlOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXBvdC5kcm9wT2ZmTG9jYXRpb25Db2RlLFxyXG4gICAgICBleHRlbmRlZExvY2F0aW9uQ29kZTpcclxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXBvdC5kcm9wT2ZmRXh0ZW5kZWRMb2NhdGlvbkNvZGUsXHJcbiAgICAgIGNpdHlOYW1lOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXBvdC5kcm9wb2ZmQ2l0eU5hbWUsXHJcbiAgICAgIHZlbmRvcjogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QuZHJvcG9mZlZlbmRvclxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnBvc3Rjb2RlRHJvcG9mZlJhdyA9IHtcclxuICAgICAgbmFtZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QuZHJvcG9mZlBvc3RDb2RlLFxyXG4gICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLlBvc3Rjb2RlLFxyXG4gICAgICBsYXRpdHVkZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QuZHJvcG9mZkxhdGl0dWRlLFxyXG4gICAgICBsb25naXR1ZGU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90LmRyb3BvZmZMb25naXR1ZGVcclxuICAgIH07XHJcbiAgICB0aGlzLnBvc3Rjb2RlUGlja3VwID0ge1xyXG4gICAgICBhZGRyZXNzTGluZXM6IFtyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXBvdC5waWNrdXBBZGRyZXNzTGluZXNdLFxyXG4gICAgICB2ZW5kb3JDb2RlOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXBvdC52ZW5kb3JDb2RlLFxyXG4gICAgICBsb2NhdGlvbkNvZGU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90LnBpY2t1cExvY2F0aW9uQ29kZSxcclxuICAgICAgZXh0ZW5kZWRMb2NhdGlvbkNvZGU6XHJcbiAgICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QucGlja3VwRXh0ZW5kZWRMb2NhdGlvbkNvZGUsXHJcbiAgICAgIGNpdHlOYW1lOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXBvdC5waWNrdXBDaXR5TmFtZSxcclxuICAgICAgdmVuZG9yOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXBvdC5waWNrdXBWZW5kb3JcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5wb3N0Y29kZVBpY2t1cFJhdyA9IHtcclxuICAgICAgbmFtZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QucGlja3VwUG9zdENvZGUsXHJcbiAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXMuUG9zdGNvZGUsXHJcbiAgICAgIGxhdGl0dWRlOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXBvdC5waWNrdXBMYXRpdHVkZSxcclxuICAgICAgbG9uZ2l0dWRlOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXBvdC5waWNrdXBMb25naXR1ZGVcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcclxuICB9XHJcblxyXG4gIGdldFNlYXJjaFF1ZXJ5KCk6IFF1ZXJ5U2VhcmNoQ2FySGlyZUFyZ3Mge1xyXG4gICAgY29uc3QgcXVlcnk6IFF1ZXJ5U2VhcmNoQ2FySGlyZUFyZ3MgPSB7fSBhcyBRdWVyeVNlYXJjaENhckhpcmVBcmdzO1xyXG4gICAgc3dpdGNoICh0aGlzLmxvY2F0aW9uVHlwZSkge1xyXG4gICAgICBjYXNlIExvY2F0aW9uVHlwZXMuQWlycG9ydDpcclxuICAgICAgICBxdWVyeS5haXJwb3J0ID0ge1xyXG4gICAgICAgICAgcGlja3VwQ29kZTogJycsXHJcbiAgICAgICAgICBkcm9wb2ZmQ29kZTogJydcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBxdWVyeS5haXJwb3J0LnBpY2t1cENvZGUgPSB0aGlzLnBpY2t1cF9sb2NhdGlvbi5nYXRld2F5O1xyXG4gICAgICAgIHF1ZXJ5LmFpcnBvcnQuZHJvcG9mZkNvZGUgPSB0aGlzLnJldHVybl90b19waWNrdXBcclxuICAgICAgICAgID8gdGhpcy5waWNrdXBfbG9jYXRpb24uZ2F0ZXdheVxyXG4gICAgICAgICAgOiB0aGlzLmRyb3BvZmZfbG9jYXRpb24uZ2F0ZXdheTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLkNpdHk6XHJcbiAgICAgICAgcXVlcnkuZGVwb3QgPSB7XHJcbiAgICAgICAgICB2ZW5kb3JDb2RlOiB0aGlzLmNpdHlQaWNrdXBEZXBvdC52ZW5kb3JDb2RlLFxyXG4gICAgICAgICAgcGlja3VwTG9jYXRpb25Db2RlOiB0aGlzLmNpdHlQaWNrdXBEZXBvdC5sb2NhdGlvbkNvZGUsXHJcbiAgICAgICAgICBwaWNrdXBFeHRlbmRlZExvY2F0aW9uQ29kZTogdGhpcy5jaXR5UGlja3VwRGVwb3QuZXh0ZW5kZWRMb2NhdGlvbkNvZGUsXHJcbiAgICAgICAgICBkcm9wT2ZmTG9jYXRpb25Db2RlOiB0aGlzLmNpdHlEcm9wb2ZmRGVwb3QubG9jYXRpb25Db2RlLFxyXG4gICAgICAgICAgZHJvcE9mZkV4dGVuZGVkTG9jYXRpb25Db2RlOlxyXG4gICAgICAgICAgICB0aGlzLmNpdHlEcm9wb2ZmRGVwb3QuZXh0ZW5kZWRMb2NhdGlvbkNvZGVcclxuICAgICAgICB9O1xyXG4gICAgICAgIC8vIE9MRCBwYXlsb2FkIGZvciBjaXR5LCBhc2tlZCB0byBjaGFuZ2VcclxuICAgICAgICAvLyBxdWVyeS5jaXR5ID0ge1xyXG4gICAgICAgIC8vICAgcGlja3VwQ291bnRyeUNvZGU6IHRoaXMuY2l0eVBpY2t1cC5jb3VudHJ5Q29kZSxcclxuICAgICAgICAvLyAgIHBpY2t1cENpdHk6IHRoaXMuY2l0eVBpY2t1cC5pZC50b1N0cmluZygpLFxyXG4gICAgICAgIC8vICAgZHJvcG9mZkNvdW50cnlDb2RlOiB0aGlzLmNpdHlEcm9wb2ZmLmNvdW50cnlDb2RlLFxyXG4gICAgICAgIC8vICAgZHJvcG9mZkNpdHk6IHRoaXMuY2l0eURyb3BvZmYuaWQudG9TdHJpbmcoKVxyXG4gICAgICAgIC8vIH07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5Qb3N0Y29kZTpcclxuICAgICAgICBxdWVyeS5kZXBvdCA9IHtcclxuICAgICAgICAgIHZlbmRvckNvZGU6IHRoaXMucG9zdGNvZGVQaWNrdXAudmVuZG9yQ29kZSxcclxuICAgICAgICAgIHBpY2t1cExvY2F0aW9uQ29kZTogdGhpcy5wb3N0Y29kZVBpY2t1cC5sb2NhdGlvbkNvZGUsXHJcbiAgICAgICAgICBwaWNrdXBFeHRlbmRlZExvY2F0aW9uQ29kZTogdGhpcy5wb3N0Y29kZVBpY2t1cC5leHRlbmRlZExvY2F0aW9uQ29kZSxcclxuICAgICAgICAgIGRyb3BPZmZMb2NhdGlvbkNvZGU6IHRoaXMucG9zdGNvZGVEcm9wb2ZmLmxvY2F0aW9uQ29kZSxcclxuICAgICAgICAgIGRyb3BPZmZFeHRlbmRlZExvY2F0aW9uQ29kZTogdGhpcy5wb3N0Y29kZURyb3BvZmYuZXh0ZW5kZWRMb2NhdGlvbkNvZGVcclxuICAgICAgICB9O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcXVlcnkuZHJvcG9mZkRhdGVUaW1lID0gdGhpcy5oZWxwZXJzLmZvcm1hdEdyYXBoUUxEYXRlVGltZShcclxuICAgICAgdGhpcy5kcm9wb2ZmX2RhdGV0aW1lXHJcbiAgICApO1xyXG4gICAgcXVlcnkucGlja3VwRGF0ZVRpbWUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0R3JhcGhRTERhdGVUaW1lKFxyXG4gICAgICB0aGlzLnBpY2t1cF9kYXRldGltZVxyXG4gICAgKTtcclxuICAgIHF1ZXJ5LmFpcmNvbiA9IHRoaXMuYWlyQ29uO1xyXG5cclxuICAgIC8vIG5vdyBmb3IgdGhlIG9wdGlvbmFsIGZpZWxkcyAtIG51bGxpZnkgdGhlc2UgaWYgdGhleSBhcmUgJy0nIChBbnkpXHJcbiAgICBpZiAodGhpcy5sb2NhdGlvblR5cGUgPT09IExvY2F0aW9uVHlwZXMuQWlycG9ydCkge1xyXG4gICAgICBxdWVyeS52ZW5kb3IgPSB0aGlzLmNob3NlblZlbmRvciA9PT0gJy0nID8gbnVsbCA6IHRoaXMuY2hvc2VuVmVuZG9yO1xyXG4gICAgfVxyXG4gICAgcXVlcnkudHJhbnNtaXNzaW9uID0gdGhpcy50cmFuc21pc3Npb24gfHwgbnVsbDtcclxuICAgIHF1ZXJ5LmNsYXNzID0gdGhpcy5jYXJDbGFzcyB8fCBudWxsO1xyXG4gICAgcXVlcnkudHlwZSA9IHRoaXMuY2FyVHlwZSB8fCBudWxsO1xyXG4gICAgcXVlcnkuZXN0aW1hdGVkRGFpbHlEaXN0YW5jZSA9IHRoaXMuZXN0aW1hdGVkTWlsZWFnZSB8fCBudWxsO1xyXG4gICAgcXVlcnkuZXN0aW1hdGVkRGFpbHlEaXN0YW5jZVVuaXRzID0gdGhpcy5lc3RpbWF0ZWRNaWxlYWdlXHJcbiAgICAgID8gRGlzdGFuY2VUeXBlcy5NXHJcbiAgICAgIDogbnVsbDsgLy8gU2V0dGluZyBhcyBtaWxlcyBmb3Igbm93IC0gbWF5IHN3YXAgb3V0IGZvciBraWxvbWV0ZXJzIGxhdGVyXHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxRdWVyeVNlYXJjaENhckhpcmVBcmdzPihxdWVyeSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAdG9kbyAtIHR1cm4gdGhpcyBpbnRvIGEgQkUgY2FsbCB0byBkeW5hbWljYWxseSBnZXQgdGhlIGxpc3Qgb2YgY2FyIGNsYXNzZXNcclxuICAgKiBAcmV0dXJucyBhbGwgY2FyIGNsYXNzZXMgYXMgYW4gYXJyYXlcclxuICAgKi9cclxuICBnZXRDYXJDbGFzc2VzKCk6IE9ic2VydmFibGU8SUNhckNsYXNzZXNbXT4ge1xyXG4gICAgcmV0dXJuIG9mKHRoaXMuX2Nhcl9jbGFzc2VzKTtcclxuICB9XHJcblxyXG4gIGdldExvY2F0aW9uVHlwZXMoKSB7XHJcbiAgICByZXR1cm4gb2YodGhpcy5fbG9jYXRpb25fdHlwZXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gZmlsdGVyIGRvd24gdGhlIGNhciByZXN1bHRzIGJhc2VkIG9uIHVzZXIgY2hvc2VuIGZpbHRlcnNcclxuICAgKi9cclxuICBmaWx0ZXJSZXN1bHRzKGFwcGxpZWRGaWx0ZXJzOiBDYXJIaXJlRmlsdGVycywgc2VsZWN0ZWRTb3J0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGxldCBmdWxsUmVzdWx0czogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkgPSB0aGlzLmhlbHBlcnMuY2xvbmUoXHJcbiAgICAgIHRoaXMuZnVsbFJlc3VsdHNcclxuICAgICk7XHJcblxyXG4gICAgLy8gbm93IGFwcGx5IGZpbHRlcnNcclxuICAgIC8vIHByaWNlIGZpbHRlcnNcclxuICAgIGZ1bGxSZXN1bHRzID0gZnVsbFJlc3VsdHMuZmlsdGVyKChyZXN1bHQ6IENhckhpcmVRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICBjb25zdCBwcmljZSA9IHRoaXMuZ2V0UHJpY2UocmVzdWx0KTtcclxuXHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgcHJpY2UgPj0gYXBwbGllZEZpbHRlcnMubWluUHJpY2UgJiYgcHJpY2UgPD0gYXBwbGllZEZpbHRlcnMubWF4UHJpY2VcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIGFwcGx5IHRyYW5zbWlzc2lvbiBmaWx0ZXJzXHJcbiAgICBmdWxsUmVzdWx0cyA9IHRoaXMuZmlsdGVyQnlUcmFuc21pc3Npb25UeXBlKFxyXG4gICAgICBhcHBsaWVkRmlsdGVycy50cmFuc21pc3Npb25zLFxyXG4gICAgICBmdWxsUmVzdWx0c1xyXG4gICAgKTtcclxuXHJcbiAgICAvLyBhaXJjb25cclxuICAgIGZ1bGxSZXN1bHRzID0gdGhpcy5maWx0ZXJCeUFpcmNvblR5cGUoXHJcbiAgICAgIGFwcGxpZWRGaWx0ZXJzLmFpckNvbmRpdGlvbmluZyxcclxuICAgICAgZnVsbFJlc3VsdHNcclxuICAgICk7XHJcblxyXG4gICAgLy8gY2FyIHR5cGVzIChjbGFzcylcclxuICAgIGZ1bGxSZXN1bHRzID0gdGhpcy5maWx0ZXJCeUNhclR5cGUoYXBwbGllZEZpbHRlcnMudHlwZXMsIGZ1bGxSZXN1bHRzKTtcclxuXHJcbiAgICAvLyBjb21wYW55XHJcbiAgICBmdWxsUmVzdWx0cyA9IHRoaXMuZmlsdGVyQnlDb21wYW55KGFwcGxpZWRGaWx0ZXJzLmNvbXBhbmllcywgZnVsbFJlc3VsdHMpO1xyXG5cclxuICAgIC8vIGxhc3RseSBhcHBseSBhbnkgcmVxdWlyZWQgc29ydGluZ1xyXG4gICAgZnVsbFJlc3VsdHMgPSB0aGlzLnNvcnRSZXN1bHRzKHNlbGVjdGVkU29ydCwgZnVsbFJlc3VsdHMpO1xyXG5cclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KGZ1bGxSZXN1bHRzKTtcclxuICB9XHJcblxyXG4gIGZpbHRlckJ5Q29tcGFueShcclxuICAgIGNvbXBhbmllczogU2VsZWN0RmlsdGVyW10sXHJcbiAgICBjYXJzOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheVxyXG4gICk6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5IHtcclxuICAgIGNvbnN0IHNlbGVjdGVkID0gY29tcGFuaWVzLmZpbHRlcigoY29tcGFueSkgPT4gY29tcGFueS5zZWxlY3RlZCk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkLmxlbmd0aCkge1xyXG4gICAgICBjYXJzID0gY2Fycy5maWx0ZXIoKGNhcjogQ2FySGlyZVF1b3RlUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgaGF2ZVNlbGVjdGVkID0gc2VsZWN0ZWQuZmluZChcclxuICAgICAgICAgIChzZWxjOiBhbnkpID0+XHJcbiAgICAgICAgICAgIHNlbGMudmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PVxyXG4gICAgICAgICAgICBjYXIuaWRlbnRpZmllcnMudmVuZG9yLnRvTG93ZXJDYXNlKClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gaGF2ZVNlbGVjdGVkO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2FycztcclxuICB9XHJcblxyXG4gIGZpbHRlckJ5Q2FyVHlwZShcclxuICAgIHR5cGVzOiBTZWxlY3RGaWx0ZXJbXSxcclxuICAgIGNhcnM6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5XHJcbiAgKTogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkge1xyXG4gICAgLy8gdGhpcyBpcyBhIGZpbHRlciB0eXBlIHdoaWNoIGFsbG93cyBtb3JlIHRoYW4gb25lIHRvIGJlIHNldFxyXG4gICAgLy8gaWYgbm9uZSBhcmUgc2V0IGFsbG93IGFsbCB0aHJvdWdoXHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0eXBlcy5maWx0ZXIoKHR5cGUpID0+IHR5cGUuc2VsZWN0ZWQpO1xyXG5cclxuICAgIGlmIChzZWxlY3RlZC5sZW5ndGgpIHtcclxuICAgICAgY2FycyA9IGNhcnMuZmlsdGVyKChjYXI6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGhhdmVTZWxlY3RlZCA9IHNlbGVjdGVkLmZpbmQoXHJcbiAgICAgICAgICAoc2VsYykgPT5cclxuICAgICAgICAgICAgc2VsYy52YWx1ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09XHJcbiAgICAgICAgICAgIGNhci5kaXNwbGF5UmVjb3JkLnZlaGljbGUuY2xhc3MudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJldHVybiBoYXZlU2VsZWN0ZWQ7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjYXJzO1xyXG4gIH1cclxuXHJcbiAgZmlsdGVyQnlUcmFuc21pc3Npb25UeXBlKFxyXG4gICAgdHJhbm1pc3Npb25zOiBTZWxlY3RGaWx0ZXJbXSxcclxuICAgIGNhcnM6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5XHJcbiAgKTogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRUcmFuc21pc3Npb24gPSB0cmFubWlzc2lvbnMuZmluZCgodHJhbnMpID0+IHtcclxuICAgICAgcmV0dXJuIHRyYW5zLnNlbGVjdGVkO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkVHJhbnNtaXNzaW9uICYmIHNlbGVjdGVkVHJhbnNtaXNzaW9uLnZhbHVlICE9PSAnWScpIHtcclxuICAgICAgLy8gbm90ICdBbnknXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY2FycyA9IGNhcnMuZmlsdGVyKChjYXI6IENhckhpcmVRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgdHJhbnMgPSBjYXIuaWRlbnRpZmllcnMudmVoVHlwZVsyXTtcclxuXHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB0cmFucy50b0xvd2VyQ2FzZSgpID09PVxyXG4gICAgICAgICAgICBzZWxlY3RlZFRyYW5zbWlzc2lvbi52YWx1ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgKysrIEVycm9yIGZpbHRlcmluZyB0cmFuc21pc3Npb25zOiAke2Vycm9yfSArKytgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjYXJzO1xyXG4gIH1cclxuXHJcbiAgZmlsdGVyQnlBaXJjb25UeXBlKFxyXG4gICAgYWlyY29uczogU2VsZWN0RmlsdGVyW10sXHJcbiAgICBjYXJzOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheVxyXG4gICk6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5IHtcclxuICAgIGNvbnN0IHNlbGVjdGVkQWlyY29uID0gYWlyY29ucy5maW5kKChhYykgPT4ge1xyXG4gICAgICByZXR1cm4gYWMuc2VsZWN0ZWQ7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoc2VsZWN0ZWRBaXJjb24gJiYgc2VsZWN0ZWRBaXJjb24udmFsdWUgIT09ICdBJykge1xyXG4gICAgICAvLyBub3QgJ0FueSdcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjYXJzID0gY2Fycy5maWx0ZXIoKGNhcjogQ2FySGlyZVF1b3RlUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBhYyA9IGNhci5pZGVudGlmaWVycy52ZWhUeXBlWzNdO1xyXG5cclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIGFjLnRvTG93ZXJDYXNlKCkgPT09IHNlbGVjdGVkQWlyY29uLnZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGArKysgRXJyb3IgZmlsdGVyaW5nIGFpcmNvbnM6ICR7ZXJyb3J9ICsrK2ApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNhcnM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBzb3J0IHRoZSByZXN1bHRzXHJcbiAgICogQHBhcmFtIHNlbGVjdGVkU29ydCAtIHRoZSBzb3J0IHdlIGhhdmUgY2hvc2VuXHJcbiAgICogQHBhcmFtIHJlc3VsdHMgLSBvcHRpb25hbGx5IHBhc3MgaW4gdGhlIHJlc3VsdHMsIGlmIG5vdCBwcm92aWRlZCAtIHVzZXMgaW50ZXJuYWwgcmVzdWx0cyAobm90IGZ1bGwsIHdvdWxkIGNhdXNlIGlzc3VlcylcclxuICAgKi9cclxuICBzb3J0UmVzdWx0cyhcclxuICAgIHNlbGVjdGVkU29ydDogbnVtYmVyLFxyXG4gICAgcmVzdWx0cz86IENhckhpcmVRdW90ZVJlc3VsdEFycmF5XHJcbiAgKTogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkge1xyXG4gICAgbGV0IGZ1bGxSZXN1bHRzID0gdGhpcy5oZWxwZXJzLmNsb25lKFxyXG4gICAgICByZXN1bHRzID8gcmVzdWx0cyA6IHRoaXMucmVzdWx0cy52YWx1ZVxyXG4gICAgKTtcclxuICAgIHN3aXRjaCAoc2VsZWN0ZWRTb3J0KSB7XHJcbiAgICAgIGNhc2UgMDogLy8gY2hlYXBlc3RcclxuICAgICAgICBmdWxsUmVzdWx0cyA9IGZ1bGxSZXN1bHRzLnNvcnQoXHJcbiAgICAgICAgICAoYTogQ2FySGlyZVF1b3RlUmVzdWx0LCBiOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0UHJpY2UoYSkgLSB0aGlzLmdldFByaWNlKGIpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAxOiAvLyBleHBlbnNpdmVcclxuICAgICAgICBmdWxsUmVzdWx0cyA9IGZ1bGxSZXN1bHRzLnNvcnQoXHJcbiAgICAgICAgICAoYTogQ2FySGlyZVF1b3RlUmVzdWx0LCBiOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0UHJpY2UoYikgLSB0aGlzLmdldFByaWNlKGEpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOiAvLyBwcmVmZXJyZWQgVE9ET1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6IC8vIGJyYW5kXHJcbiAgICAgICAgZnVsbFJlc3VsdHMgPSB0aGlzLnNvcnRCeUJyYW5kKGZ1bGxSZXN1bHRzKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA0OiAvLyBzaXplXHJcbiAgICAgICAgZnVsbFJlc3VsdHMgPSB0aGlzLnNvcnRCeVNpemUoZnVsbFJlc3VsdHMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgLy8gZmFsbGJhY2sgdG8gd2hhdGV2ZXIgd2FzIGJlZm9yZVxyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQoZnVsbFJlc3VsdHMpO1xyXG4gICAgcmV0dXJuIGZ1bGxSZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gc29ydCB0aGUgcmVzdWx0cyBleHBlbnNpdmVcclxuICAgKiBAcGFyYW0gcmVzdWx0cyAtIGZ1bGwgcmVzdWx0cyBmcm9tIHNvcnQgcmVzdWx0cyBmdW5jdGlvblxyXG4gICAqL1xyXG5cclxuICBzb3J0RXhwZW5zaXZlKHJlc3VsdHM/OiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSk6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5IHtcclxuICAgIGNvbnN0IGZ1bGxSZXN1bHRzID0gdGhpcy5oZWxwZXJzLmNsb25lKFxyXG4gICAgICByZXN1bHRzID8gcmVzdWx0cyA6IHRoaXMucmVzdWx0cy52YWx1ZVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHNvcnRlZFJlc3VsdHMgPSBmdWxsUmVzdWx0cy5zb3J0KFxyXG4gICAgICAoYTogQ2FySGlyZVF1b3RlUmVzdWx0LCBiOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+XHJcbiAgICAgICAgdGhpcy5nZXRQcmljZShiKSAtIHRoaXMuZ2V0UHJpY2UoYSlcclxuICAgICk7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChzb3J0ZWRSZXN1bHRzKTtcclxuICAgIHJldHVybiBzb3J0ZWRSZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gc29ydCB0aGUgcmVzdWx0cyBjaGVhcGVzdFxyXG4gICAqIEBwYXJhbSByZXN1bHRzIC0gZnVsbCByZXN1bHRzIGZyb20gc29ydCByZXN1bHRzIGZ1bmN0aW9uXHJcbiAgICovXHJcblxyXG4gIHNvcnRDaGVhcGVzdChyZXN1bHRzPzogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkpOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSB7XHJcbiAgICBjb25zdCBmdWxsUmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZShcclxuICAgICAgcmVzdWx0cyA/IHJlc3VsdHMgOiB0aGlzLnJlc3VsdHMudmFsdWVcclxuICAgICk7XHJcbiAgICBjb25zdCBzb3J0ZWRSZXN1bHRzID0gZnVsbFJlc3VsdHMuc29ydChcclxuICAgICAgKGE6IENhckhpcmVRdW90ZVJlc3VsdCwgYjogQ2FySGlyZVF1b3RlUmVzdWx0KSA9PlxyXG4gICAgICAgIHRoaXMuZ2V0UHJpY2UoYSkgLSB0aGlzLmdldFByaWNlKGIpXHJcbiAgICApO1xyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQoc29ydGVkUmVzdWx0cyk7XHJcbiAgICByZXR1cm4gc29ydGVkUmVzdWx0cztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIHNvcnQgdGhlIHJlc3VsdHNcclxuICAgKiBAcGFyYW0gcmVzdWx0cyAtIGZ1bGwgcmVzdWx0cyBmcm9tIHNvcnQgcmVzdWx0cyBmdW5jdGlvblxyXG4gICAqL1xyXG4gIHNvcnRCeVNpemUocmVzdWx0cz86IENhckhpcmVRdW90ZVJlc3VsdEFycmF5KTogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkge1xyXG4gICAgY29uc3QgZnVsbFJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUoXHJcbiAgICAgIHJlc3VsdHMgPyByZXN1bHRzIDogdGhpcy5yZXN1bHRzLnZhbHVlXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc29ydGVkUmVzdWx0cyA9IGZ1bGxSZXN1bHRzLnNvcnQoXHJcbiAgICAgIChhOiBDYXJIaXJlUXVvdGVSZXN1bHQsIGI6IENhckhpcmVRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGxldCBhVmFsOiBudW1iZXI7XHJcbiAgICAgICAgbGV0IGJWYWw6IG51bWJlcjtcclxuICAgICAgICBhVmFsID0gdGhpcy5jYXJDbGFzc01hcFthLmRpc3BsYXlSZWNvcmQudmVoaWNsZS5jbGFzcy50b0xvd2VyQ2FzZSgpXTtcclxuICAgICAgICBiVmFsID0gdGhpcy5jYXJDbGFzc01hcFtiLmRpc3BsYXlSZWNvcmQudmVoaWNsZS5jbGFzcy50b0xvd2VyQ2FzZSgpXTtcclxuICAgICAgICBpZiAoYVZhbCA+PSAwICYmIGJWYWwgPj0gMCkge1xyXG4gICAgICAgICAgcmV0dXJuIGFWYWwgLSBiVmFsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gLTE7IC8vIGp1c3QgcGxhY2UgdGhlbSBhdCBlbmQgIC0gdW5yZWNvZ25pc2VkIHByb2R1Y3QgZGVzY3JpcHRpb25cclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHNvcnRlZFJlc3VsdHMpO1xyXG4gICAgcmV0dXJuIHNvcnRlZFJlc3VsdHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBzb3J0IHRoZSByZXN1bHRzXHJcbiAgICogQHBhcmFtIHJlc3VsdHMgLSBmdWxsIHJlc3VsdHMgZnJvbSBzb3J0IHJlc3VsdHMgZnVuY3Rpb25cclxuICAgKi9cclxuICBzb3J0QnlCcmFuZChyZXN1bHRzPzogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkpOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSB7XHJcbiAgICBjb25zdCBmdWxsUmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZShcclxuICAgICAgcmVzdWx0cyA/IHJlc3VsdHMgOiB0aGlzLnJlc3VsdHMudmFsdWVcclxuICAgICk7XHJcbiAgICBjb25zdCBzb3J0ZWRSZXN1bHRzID0gZnVsbFJlc3VsdHMuc29ydChcclxuICAgICAgKGE6IENhckhpcmVRdW90ZVJlc3VsdCwgYjogQ2FySGlyZVF1b3RlUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgbGV0IGJyYW5kQSA9IGEuaWRlbnRpZmllcnMudmVuZG9yO1xyXG4gICAgICAgIGxldCBicmFuZEIgPSBiLmlkZW50aWZpZXJzLnZlbmRvcjtcclxuXHJcbiAgICAgICAgLy8gc3dpdGNoaW5nIGFzIHRoZXNlIHN0cmluZ3MgZG9uJ3QgbWF0Y2ggdGhlIGJyYW5kIG5hbWVcclxuICAgICAgICBzd2l0Y2ggKGJyYW5kQSkge1xyXG4gICAgICAgICAgY2FzZSAnWkUnOlxyXG4gICAgICAgICAgICBicmFuZEEgPSAnSEUnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgJ1pJJzpcclxuICAgICAgICAgICAgYnJhbmRBID0gJ0FWJztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2ggKGJyYW5kQikge1xyXG4gICAgICAgICAgY2FzZSAnWkUnOlxyXG4gICAgICAgICAgICBicmFuZEIgPSAnSEUnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgJ1pJJzpcclxuICAgICAgICAgICAgYnJhbmRCID0gJ0FWJztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYnJhbmRBIDwgYnJhbmRCKSB7XHJcbiAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfSBlbHNlIGlmIChicmFuZEEgPiBicmFuZEIpIHtcclxuICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQoc29ydGVkUmVzdWx0cyk7XHJcbiAgICByZXR1cm4gc29ydGVkUmVzdWx0cztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCB0aGUgcHJpY2Ugb2YgYSBpbmRpdmlkdWFsIGNhclxyXG4gICAqL1xyXG4gIGdldFByaWNlKGNhcjogQ2FySGlyZVF1b3RlUmVzdWx0KTogbnVtYmVyIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBOdW1iZXIoY2FyLmRpc3BsYXlSZWNvcmQuY2hhcmdlc1swXS5hbW91bnQpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHt9XHJcblxyXG4gICAgcmV0dXJuIDA7XHJcbiAgfVxyXG5cclxuICBnZXRNaW5QcmljZShjYXJzOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gY2Fycy5yZWR1Y2UoKG1pbjogbnVtYmVyLCBjYXI6IENhckhpcmVRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICBjb25zdCBwcmljZSA9IHRoaXMuZ2V0UHJpY2UoY2FyKTtcclxuICAgICAgaWYgKHByaWNlIDwgbWluKSB7XHJcbiAgICAgICAgbWluID0gcHJpY2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG1pbjtcclxuICAgIH0sIE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTtcclxuICB9XHJcblxyXG4gIGdldE1heFByaWNlKGNhcnM6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5KTogbnVtYmVyIHtcclxuICAgIHJldHVybiBjYXJzLnJlZHVjZSgobWF4OiBudW1iZXIsIGNhcjogQ2FySGlyZVF1b3RlUmVzdWx0KSA9PiB7XHJcbiAgICAgIGNvbnN0IHByaWNlID0gdGhpcy5nZXRQcmljZShjYXIpO1xyXG4gICAgICBpZiAocHJpY2UgPiBtYXgpIHtcclxuICAgICAgICBtYXggPSBwcmljZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbWF4O1xyXG4gICAgfSwgTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRnJvbVByZXZpb3VzU2VhcmNoZXMoXHJcbiAgICBwcmV2aW91c0l0ZW1zOiBSZWNvcmQ8U2VydmljZVR5cGUsIEJhc2tldEl0ZW0+XHJcbiAgKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZygnUFJFUE9QVUxBVElORyBDQVJISVJFIEZPUk0nKTtcclxuICAgIGNvbnN0IGZsaWdodEl0ZW06IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzID1cclxuICAgICAgcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5GbGlnaHRdPy5zZWFyY2hRdWVyeTtcclxuICAgIGlmIChmbGlnaHRJdGVtKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgbGV0IHN0YXJ0RGF0ZSA9XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XS5vdXRCb3VuZERhdGUudG9EYXRlKCk7XHJcbiAgICAgICAgbGV0IGVuZERhdGUgPVxyXG4gICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF0uaW5ib3VuZERhdGUudG9EYXRlKCk7XHJcbiAgICAgICAgdGhpcy5sb2NhdGlvblR5cGUgPSBMb2NhdGlvblR5cGVzLkFpcnBvcnQ7XHJcbiAgICAgICAgdGhpcy5waWNrdXBfZGF0ZXRpbWUgPVxyXG4gICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF0ub3V0Qm91bmREYXRlO1xyXG4gICAgICAgIHRoaXMuZHJvcG9mZl9kYXRldGltZSA9XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XS5pbmJvdW5kRGF0ZTtcclxuICAgICAgICB0aGlzLnBpY2t1cF9kYXRlID0ge1xyXG4gICAgICAgICAgZGF5OiBzdGFydERhdGUuZ2V0VVRDRGF0ZSgpLFxyXG4gICAgICAgICAgbW9udGg6IHN0YXJ0RGF0ZS5nZXRVVENNb250aCgpICsgMSxcclxuICAgICAgICAgIHllYXI6IHN0YXJ0RGF0ZS5nZXRVVENGdWxsWWVhcigpXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmRyb3BvZmZfZGF0ZSA9IHtcclxuICAgICAgICAgIGRheTogZW5kRGF0ZS5nZXRVVENEYXRlKCksXHJcbiAgICAgICAgICBtb250aDogZW5kRGF0ZS5nZXRVVENNb250aCgpICsgMSxcclxuICAgICAgICAgIHllYXI6IGVuZERhdGUuZ2V0VVRDRnVsbFllYXIoKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5waWNrdXBfbG9jYXRpb24gPSB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XVxyXG4gICAgICAgICAgLmFycml2ZUxvY2F0aW9uIGFzIE9CVEFpcnBvcnREZXRhaWxzO1xyXG4gICAgICAgIHRoaXMuZHJvcG9mZl9sb2NhdGlvbiA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5GbGlnaHRdXHJcbiAgICAgICAgICAuYXJyaXZlTG9jYXRpb24gYXMgT0JUQWlycG9ydERldGFpbHM7XHJcbiAgICAgICAgdGhpcy5waWNrdXBfY291bnRyeSA9IChcclxuICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5GbGlnaHRdXHJcbiAgICAgICAgICAgIC5hcnJpdmVMb2NhdGlvbiBhcyBPQlRBaXJwb3J0RGV0YWlsc1xyXG4gICAgICAgICkuY291bnRyeUNvZGU7XHJcbiAgICAgICAgdGhpcy5kcm9wb2ZmX2NvdW50cnkgPSAoXHJcbiAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XVxyXG4gICAgICAgICAgICAuYXJyaXZlTG9jYXRpb24gYXMgT0JUQWlycG9ydERldGFpbHNcclxuICAgICAgICApLmNvdW50cnlDb2RlO1xyXG4gICAgICB9IGNhdGNoIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgY2FyaGlyZSBmcm9tIGZsaWdodCBpdGVtJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vICFkYXRlIGFuZCB0aW1lIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkgZm9yIExVXHJcbiAgcHJpdmF0ZSBfdXBkYXRlUGlja3VwRGF0ZVRpbWUoKSB7XHJcbiAgICBpZiAodGhpcy5fcGlja3VwX2RhdGUgJiYgdGhpcy5fcGlja3VwX3RpbWUpIHtcclxuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgICB0aGlzLl9waWNrdXBfZGF0ZSxcclxuICAgICAgICB0aGlzLl9waWNrdXBfdGltZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnBpY2t1cF9kYXRldGltZSA9IHRpbWUuaXNWYWxpZCgpID8gdGltZSA6IG51bGw7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZURyb3BvZmZEYXRlVGltZSgpIHtcclxuICAgIGlmICh0aGlzLl9kcm9wb2ZmX2RhdGUgJiYgdGhpcy5fZHJvcG9mZl90aW1lKSB7XHJcbiAgICAgIGNvbnN0IHRpbWUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQoXHJcbiAgICAgICAgdGhpcy5fZHJvcG9mZl9kYXRlLFxyXG4gICAgICAgIHRoaXMuX2Ryb3BvZmZfdGltZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmRyb3BvZmZfZGF0ZXRpbWUgPSB0aW1lLmlzVmFsaWQoKSA/IHRpbWUgOiBudWxsO1xyXG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVOZ2JQaWNrdXBEYXRlVGltZSgpIHtcclxuICAgIGlmICh0aGlzLl9uZ2JQaWNrdXBEYXRlICYmIHRoaXMuX3BpY2t1cFRpbWUpIHtcclxuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgICB0aGlzLl9uZ2JQaWNrdXBEYXRlLFxyXG4gICAgICAgIHRoaXMuX3BpY2t1cFRpbWVcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5waWNrdXBfZGF0ZXRpbWUgPSB0aW1lLmlzVmFsaWQoKSA/IHRpbWUgOiBudWxsO1xyXG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVOZ2JEcm9wb2ZmRGF0ZVRpbWUoKSB7XHJcbiAgICBpZiAodGhpcy5fbmdiRHJvcG9mZkRhdGUgJiYgdGhpcy5fZHJvcG9mZlRpbWUpIHtcclxuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgICB0aGlzLl9uZ2JEcm9wb2ZmRGF0ZSxcclxuICAgICAgICB0aGlzLl9kcm9wb2ZmVGltZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmRyb3BvZmZfZGF0ZXRpbWUgPSB0aW1lLmlzVmFsaWQoKSA/IHRpbWUgOiBudWxsO1xyXG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc092ZXJOaWdodCgpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IG91dHdhcmREYXkgPSB0aGlzLnBpY2t1cF9kYXRldGltZS5kYXRlKCk7XHJcbiAgICBjb25zdCByZXR1cm5EYXkgPSB0aGlzLmRyb3BvZmZfZGF0ZXRpbWUuZGF0ZSgpO1xyXG4gICAgaWYgKHJldHVybkRheSAtIG91dHdhcmREYXkgPj0gMSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHM6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5KTogSUNoZWFwZXN0UHJpY2Uge1xyXG4gICAgaWYgKCFyZXN1bHRzLmxlbmd0aCkgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCBtaW5QcmljZSA9IHRoaXMuZ2V0TWluUHJpY2UocmVzdWx0cyk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBhbW91bnQ6IG1pblByaWNlLFxyXG4gICAgICBjdXJyZW5jeUNvZGU6IHJlc3VsdHNbMF0uZGlzcGxheVJlY29yZC5jaGFyZ2VzWzBdLmN1cnJlbmN5Q29kZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCB0aGUgYXZhaWxhYmlsaXR5IGRldGFpbHMgZm9yIGEgcGFydGljdWxhciBjYXIgaGlyZSByZXN1bHQgdXNpbmcgbG9jYXRpb25EZXRhaWxzIHBhcmFtXHJcbiAgICogQHBhcmFtIGxvY2F0aW9uRGV0YWlscyAtIGUuZy4gdGFrZW4gZnJvbSByZXNwb25zZSBkYXRhIGluIHNlYXJjaENhckhpcmUgcXVlcnlcclxuICAgKiBAcGFyYW0gaXNMb2FkaW5nIGJlaGF2aW91clN1YmplY3QgZm9yIGhhbmRsaW5nIGxvYWRpbmcgc3Bpbm5lciBzdGF0ZSBvZiByZXF1ZXN0XHJcbiAgICovXHJcbiAgZ2V0Q2FySGlyZUF2YWlsYWJpbGl0eURldGFpbChcclxuICAgIGxvY2F0aW9uRGV0YWlsczogQ2FySGlyZUlucHV0SWRlbnRpZmllcnMsXHJcbiAgICBpc0xvYWRpbmc6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8Q2FySGlyZURldGFpbFJlcXVlc3RSZXNwb25zZT4ge1xyXG4gICAgaWYgKCFpc0xvYWRpbmcudmFsdWUpIHtcclxuICAgICAgaXNMb2FkaW5nLm5leHQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5jYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlclxyXG4gICAgICAuZmV0Y2hMaXN0KHsgbG9jYXRpb25EZXRhaWxzIH0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgbWFwKChyZXN1bHQ6IENhckhpcmVEZXRhaWxSZXF1ZXN0UmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChpc0xvYWRpbmcudmFsdWUpIHtcclxuICAgICAgICAgICAgaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gYWRkIGNhciBoaXJlIHRvIGJhc2tldFxyXG4gICAqL1xyXG4gIGFzeW5jIGFkZENhckhpcmVUb0Jhc2tldChcclxuICAgIGNhckhpcmVWZWhpY2xlQXZhaWxpYmlsaXR5OiBDYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eSxcclxuICAgIGNhckhpcmVRdWVyeTogU2VhcmNoQ2FySGlyZVF1ZXJ5VmFyaWFibGVzXHJcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAoY2FySGlyZVZlaGljbGVBdmFpbGliaWxpdHkudW5hdmFpbGFibGUpIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID1cclxuICAgICAgYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcclxuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcclxuICAgIGlmIChiYXNrZXQpIHtcclxuICAgICAgY29uc3Qge1xyXG4gICAgICAgIGNvMlBlckl0ZW0sXHJcbiAgICAgICAgY28yUGVyUGFzc2VuZ2VyLFxyXG4gICAgICAgIGRpc3BsYXlSZWNvcmQsXHJcbiAgICAgICAgaWRlbnRpZmllcnMsXHJcbiAgICAgICAgc291cmNlSWRcclxuICAgICAgfSA9IGNhckhpcmVWZWhpY2xlQXZhaWxpYmlsaXR5O1xyXG4gICAgICBjb25zdCBwcmljZSA9IHBhcnNlRmxvYXQoZGlzcGxheVJlY29yZD8uY2hhcmdlc1swXT8uYW1vdW50ID8/ICcwJyk7XHJcbiAgICAgIGNvbnN0IHRlcm1zQW5kQ29uZGl0aW9ucyA9IHRoaXMuZ2V0VGVybXNBbmRDb25kKFxyXG4gICAgICAgIGNhckhpcmVWZWhpY2xlQXZhaWxpYmlsaXR5LFxyXG4gICAgICAgIGNhckhpcmVRdWVyeVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gdGhpcy5iYXNrZXRTZXJ2aWNlLmFkZFRvQmFza2V0KFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGFkdWx0czogdGhpcy5hZHVsdHMsXHJcbiAgICAgICAgICBiYXNrZXQ6IGJhc2tldC5pZCxcclxuICAgICAgICAgIHNlcnZpY2U6IHNvdXJjZUlkLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICBkZXRhaWw6IHtcclxuICAgICAgICAgICAgcGlja1VwRGF0ZXRpbWU6IGRpc3BsYXlSZWNvcmQucGlja3VwLFxyXG4gICAgICAgICAgICBkcm9wT2ZmRGF0ZXRpbWU6IGRpc3BsYXlSZWNvcmQuZHJvcG9mZixcclxuICAgICAgICAgICAgcGlja1VwTG9jYXRpb246IHtcclxuICAgICAgICAgICAgICBpYXRhOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhdGlvblR5cGUgPT09IExvY2F0aW9uVHlwZXMuQWlycG9ydFxyXG4gICAgICAgICAgICAgICAgICA/IGlkZW50aWZpZXJzLmxvY2F0aW9uQ29kZVxyXG4gICAgICAgICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgICAgICAgIG5hbWU6IGRpc3BsYXlSZWNvcmQucGlja3VwTG9jYXRpb24ubmFtZSxcclxuICAgICAgICAgICAgICBhZGRyZXNzOiBgJHtkaXNwbGF5UmVjb3JkLnBpY2t1cExvY2F0aW9uLnRvcExpbmV9LCAke2Rpc3BsYXlSZWNvcmQucGlja3VwTG9jYXRpb24uY2l0eX1gLFxyXG4gICAgICAgICAgICAgIHBvc3Rjb2RlOiBkaXNwbGF5UmVjb3JkLnBpY2t1cExvY2F0aW9uLnBvc3RDb2RlXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGRyb3BPZmZMb2NhdGlvbjoge1xyXG4gICAgICAgICAgICAgIGlhdGE6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2F0aW9uVHlwZSA9PT0gTG9jYXRpb25UeXBlcy5BaXJwb3J0XHJcbiAgICAgICAgICAgICAgICAgID8gaWRlbnRpZmllcnMuZHJvcE9mZkxvY2F0aW9uXHJcbiAgICAgICAgICAgICAgICAgIDogJycsXHJcbiAgICAgICAgICAgICAgbmFtZTogZGlzcGxheVJlY29yZC5yZXR1cm5Mb2NhdGlvbi5uYW1lLFxyXG4gICAgICAgICAgICAgIGFkZHJlc3M6IGAke2Rpc3BsYXlSZWNvcmQucmV0dXJuTG9jYXRpb24udG9wTGluZX0sICR7ZGlzcGxheVJlY29yZC5yZXR1cm5Mb2NhdGlvbi5jaXR5fWAsXHJcbiAgICAgICAgICAgICAgcG9zdGNvZGU6IGRpc3BsYXlSZWNvcmQucmV0dXJuTG9jYXRpb24ucG9zdENvZGVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY2FyOiB7XHJcbiAgICAgICAgICAgICAgdHlwZTogZGlzcGxheVJlY29yZC52ZWhpY2xlLnR5cGUsXHJcbiAgICAgICAgICAgICAgbWFudWFsVHJhbnNtaXNzaW9uOiBkaXNwbGF5UmVjb3JkLnZlaGljbGUudHJhbnNtaXNzaW9uLmluY2x1ZGVzKFxyXG4gICAgICAgICAgICAgICAgQ2FySGlyZVRyYW5zbWlzc2lvbi5NYW51YWxcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHZlbmRvck5hbWU6IGRpc3BsYXlSZWNvcmQudmVuZG9yLm5hbWUsXHJcbiAgICAgICAgICAgIGlkZW50aWZpZXJzOiB7XHJcbiAgICAgICAgICAgICAgZHJvcE9mZkxvY2F0aW9uOiBpZGVudGlmaWVycy5kcm9wT2ZmTG9jYXRpb24sXHJcbiAgICAgICAgICAgICAgbG9jYXRpb25Db2RlOiBpZGVudGlmaWVycy5sb2NhdGlvbkNvZGUsXHJcbiAgICAgICAgICAgICAgbG9jYXRpb25OYW1lOiBpZGVudGlmaWVycy5sb2NhdGlvbk5hbWUsXHJcbiAgICAgICAgICAgICAgdmVoVHlwZTogaWRlbnRpZmllcnMudmVoVHlwZSxcclxuICAgICAgICAgICAgICB2ZW5kb3I6IGlkZW50aWZpZXJzLnZlbmRvclxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0ZXJtc0FuZENvbmQ6IHRlcm1zQW5kQ29uZGl0aW9uc1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHByaWNlLFxyXG4gICAgICAgICAgY3VycmVuY3k6ICdHQlAnIGFzIEN1cnJlbmN5Q29kZSxcclxuICAgICAgICAgIHNlYXJjaFF1ZXJ5OiBjYXJIaXJlUXVlcnksXHJcbiAgICAgICAgICBjbzJQZXJJdGVtLFxyXG4gICAgICAgICAgY28yUGVyUGFzc2VuZ2VyLFxyXG4gICAgICAgICAgb3V0Ym91bmREYXRlOiBuZXcgRGF0ZShkaXNwbGF5UmVjb3JkLnBpY2t1cCkudG9JU09TdHJpbmcoKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaW50QmFza2V0LFxyXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZSxcclxuICAgICAgICB0aGlzLnRyYXZlbGxlcnMsXHJcbiAgICAgICAgY2FySGlyZVZlaGljbGVBdmFpbGliaWxpdHkucmVxdWlyZXNSZWFzb25cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLy8gVE9ETyB3YWl0aW5nIGZvciBkYXRhXHJcbiAgZ2V0VGVybXNBbmRDb25kKFxyXG4gICAgY2FySGlyZVZlaGljbGU6IENhckhpcmVWZWhpY2xlQXZhaWxpYmlsaXR5LFxyXG4gICAgY2FySGlyZVF1ZXJ5OiBTZWFyY2hDYXJIaXJlUXVlcnlWYXJpYWJsZXNcclxuICApIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQWRkaXRpb25hbCBEcml2ZXInLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0FnZSBSZXF1aXJlbWVudHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0Nyb3NzIEJvcmRlciBQb2xpY3knLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0RhbWFnZSBXYWl2ZXInLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0RlYml0IENhcmQgUG9saWN5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdPbmUgV2F5IERyb3AgUG9saWN5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdFeHRlbmRlZCBQcm90ZWN0aW9uJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdFeGNlc3MgUHJvdGVjdGlvbicsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnSW5jbHVzaXZlIFBvbGljeScsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnTWlsZWFnZSBQb2xpY3knLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ01pc2NlbGxhbmVvdXMgUG9saWN5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdGb3JtcyBvZiBQYXltZW50JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdSb2Fkc2lkZSBQcm90ZWN0aW9uJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdSZW50ZXIgUmVxdWlyZW1lbnRzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUaGlyZCBQYXJ0eSBMaWFiaWxpdHknLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9XHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVNlYXJjaCgpOiBPYnNlcnZhYmxlPFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHQ+IHtcclxuICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcclxuICAgICAgY29uc3QgcXVlcnk6IFF1ZXJ5U2VhcmNoQ2FySGlyZUFyZ3MgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICAgIGNvbnN0IGZhdm91cml0ZVNlYXJjaFF1ZXJ5OiBDYXJIaXJlU2VhcmNoQXJncyA9XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZXJjaFF1ZXJ5KHF1ZXJ5KTtcclxuICAgICAgY29uc3Qgc2VhcmNoSW5mbyA9IHtcclxuICAgICAgICBuYW1lOiBgJHttb21lbnQoKX1gLFxyXG4gICAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5DYXIsXHJcbiAgICAgICAgc2VhcmNoQXJnczogZmF2b3VyaXRlU2VhcmNoUXVlcnlcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlRmF2b3VyaXRlU2VhcmNoKHNlYXJjaEluZm8pO1xyXG4gICAgfVxyXG4gIH1cclxuICBhc3luYyBhcHBseUZhdm91cml0ZShmYXY6IGFueSk6IFByb21pc2U8dm9pZD57XHJcbiAgICB0aGlzLmFpckNvbiA9IGZhdi5haXJjb25cclxuICAgIHRoaXMuY2FyQ2xhc3MgPSBmYXYuY2xhc3NcclxuICAgIHRoaXMudHJhbnNtaXNzaW9uID0gZmF2LnRyYW5zbWlzc2lvbiBcclxuICAgIHRoaXMuY2hvc2VuVmVuZG9yID0gZmF2LnZlbmRvclxyXG4gICAgdGhpcy5jYXJUeXBlID0gZmF2LnR5cGVcclxuICAgIHRoaXMucmV0dXJuX3RvX3BpY2t1cCA9IGZhdi5haXJwb3J0LnBpY2t1cENvZGUgPT0gZmF2LmFpcnBvcnQuZHJvcG9mZkNvZGVcclxuICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0c0xpc3QoZmF2LmFpcnBvcnQucGlja3VwQ29kZSkuc3Vic2NyaWJlKHJlc3VsdHMgPT4ge1xyXG4gICAgICB0aGlzLnBpY2t1cF9sb2NhdGlvbiA9IChyZXN1bHRzIGFzIE9CVEFpcnBvcnREZXRhaWxzW10pLmZpbmQoYSA9PiBhLmdhdGV3YXkgPT0gZmF2LmFpcnBvcnQucGlja3VwQ29kZSlcclxuICAgIH0pXHJcbiAgICBpZiAoIXRoaXMucmV0dXJuX3RvX3BpY2t1cClcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEFpcnBvcnRzTGlzdChmYXYuYWlycG9ydC5kcm9wb2ZmQ29kZSkuc3Vic2NyaWJlKHJlc3VsdHMgPT4ge1xyXG4gICAgICAgIHRoaXMuZHJvcG9mZl9sb2NhdGlvbiA9IChyZXN1bHRzIGFzIE9CVEFpcnBvcnREZXRhaWxzW10pLmZpbmQoYSA9PiBhLmdhdGV3YXkgPT0gZmF2LmFpcnBvcnQuZHJvcG9mZkNvZGUpXHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
1532
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyaGlyZS1lbnRlcnByaXNlLXNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9jYXJoaXJlLWVudGVycHJpc2Utc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHekQsT0FBTyxFQUFjLEVBQUUsRUFBbUIsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBVXRFLE9BQU8sRUFRTCxXQUFXLEVBQ1gsbUJBQW1CLEVBQ25CLFlBQVksRUFDWixXQUFXLEVBQ1gsYUFBYSxFQVNkLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQU1MLGFBQWEsRUFNYiw0QkFBNEIsRUFDN0IsTUFBTSxnQkFBZ0IsQ0FBQztBQWN4QixPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBVTNDLE1BQU0sQ0FBTixJQUFZLFlBTVg7QUFORCxXQUFZLFlBQVk7SUFDdEIsK0JBQWUsQ0FBQTtJQUNmLCtCQUFlLENBQUE7SUFDZiw2QkFBYSxDQUFBO0lBQ2IsdUNBQXVCLENBQUE7SUFDdkIsdUNBQXVCLENBQUE7QUFDekIsQ0FBQyxFQU5XLFlBQVksS0FBWixZQUFZLFFBTXZCO0FBRUQsTUFBTSxPQUFPLHVCQUlYLFNBQVEsb0JBSVA7SUFnbkJELGlDQUFpQztJQUVqQyxZQUNVLGNBQTZDLEVBQzdDLGdDQUE4RSxFQUN0RixPQUEyQixFQUNuQixhQUErQyxFQUN2RCxjQUFrQyxFQUNsQyxhQUErQyxFQUMvQyxXQUFpQztRQUVqQyxLQUFLLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFSbkQsbUJBQWMsR0FB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QWUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztpQkFDdkMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxlQUFlLEdBQUksT0FBK0IsQ0FBQyxJQUFJLENBQzFELENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUMzQyxDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7WUFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQjtnQkFDeEIsSUFBSSxDQUFDLGFBQWE7cUJBQ2YsZUFBZSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO3FCQUN4QyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtvQkFDckIsSUFBSSxDQUFDLGdCQUFnQixHQUFJLE9BQStCLENBQUMsSUFBSSxDQUMzRCxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FDNUMsQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FBQztRQUNULENBQUM7S0FBQTtJQUVELGlCQUFpQjtRQUNoQixPQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFBLEVBQUUsQ0FBQSxNQUFNLENBQUMsZUFBZSxJQUFJLE1BQU0sQ0FBQyxZQUFZLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUE7SUFDcEgsQ0FBQzs7QUExMURlLDhDQUFzQixHQUFHLGdCQUFnQixDQUFDO0FBQzFDLCtDQUF1QixHQUFHLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBCYXNlRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4vYmFzZS1lbnRlcnByaXNlJztcclxuaW1wb3J0IHsgQmFzZVN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZUhlbHBlclJvdXRpbmVzIH0gZnJvbSAnLi9oZWxwZXJzJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDYXJIaXJlU29ydCB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2FyLWhpcmUtc29ydC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBDYXJIaXJlRmlsdGVycyB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2FyLWhpcmUtZmlsdGVycy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBTZWxlY3RGaWx0ZXIgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NlbGVjdC1maWx0ZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgVmFsdWVEaXNwbGF5IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy92YWx1ZS1kaXNwbGF5JztcclxuaW1wb3J0IHsgRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lzZWFyY2guc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2VcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0llbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBDYXJIaXJlRGV0YWlsUmVxdWVzdFJlc3BvbnNlLFxyXG4gIEN1cnJlbmN5Q29kZSxcclxuICBCYXNrZXRJdGVtLFxyXG4gIENhckhpcmVJbnB1dElkZW50aWZpZXJzLFxyXG4gIENhckhpcmVWZWhpY2xlQXZhaWxpYmlsaXR5LFxyXG4gIFF1ZXJ5U2VhcmNoQ2FySGlyZUFyZ3MsXHJcbiAgU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMsXHJcbiAgU2VydmljZVR5cGUsXHJcbiAgQ2FySGlyZVRyYW5zbWlzc2lvbixcclxuICBDYXJIaXJlQ2xhc3MsXHJcbiAgQ2FySGlyZVR5cGUsXHJcbiAgRGlzdGFuY2VUeXBlcyxcclxuICBTZWFyY2hDYXJIaXJlUXVlcnlWYXJpYWJsZXMsXHJcbiAgU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzLFxyXG4gIENhckhpcmVBaXJwb3J0SW5wdXQsXHJcbiAgQ2FySGlyZUFkZHJlc3MsXHJcbiAgQ2FySGlyZUxvY2F0aW9uSW5wdXQsXHJcbiAgU2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlYXJjaEhvdGVsc1F1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzXHJcbn0gZnJvbSAnLi4vdHlwZXMvZ3JhcGhxbC50eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgQ2FySGlyZVF1b3RlUmVzdWx0LFxyXG4gIENhckhpcmVRdW90ZVJlc3VsdEFycmF5LFxyXG4gIE5nYkRhdGVTdHJ1Y3QsXHJcbiAgT0JUQWlycG9ydERldGFpbHMsXHJcbiAgVmVuZG9yLFxyXG4gIExvY2F0aW9uVHlwZXMsXHJcbiAgTG9jYXRpb25EZXRhaWxzLFxyXG4gIENhckhpcmVEZXBvdCxcclxuICBSZWNlbnRTZWFyY2gsXHJcbiAgV2l0aGluRGlzdGFuY2UsXHJcbiAgU2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdCxcclxuICBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zXHJcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VDYXJoaXJlUXVvdGVGZXRjaGVyLFxyXG4gIENhckhpcmVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2NhcmhpcmUtcXVvdGUtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQ2FyaGlyZUVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2UsXHJcbiAgQ2FySGlyZVRlbXBQYXJhbXNcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0ljYXJoaXJlLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgSUNoZWFwZXN0UHJpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NoZWFwZXN0LXByaWNlJztcclxuaW1wb3J0IHtcclxuICBCYXNlQ2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXIsXHJcbiAgQ2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY2FyaGlyZS1hdmFpbGFiaWxpdHktZGV0YWlsLmZldGNoZXInO1xyXG5pbXBvcnQgeyB0YWtlLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IElDYXJDbGFzc2VzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jYXItaGlyZS1jbGFzc2VzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFRyYXZlbGxlciB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcclxuaW1wb3J0IHtcclxuICBDYXJIaXJlU2VhcmNoQXJncyxcclxuICBJQ2FySGlyZUNpdHksXHJcbiAgSUNhckhpcmVEZXBvdFxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvY2FyLWhpcmUtc2VhcmNoLWFyZy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXVzZXIuc2VydmljZSc7XHJcblxyXG5leHBvcnQgZW51bSBTb3J0VHlwZXNDYXIge1xyXG4gIHByaWNlID0gJ3ByaWNlJyxcclxuICBicmFuZCA9ICdicmFuZCcsXHJcbiAgc2l6ZSA9ICdzaXplJyxcclxuICBwcmVmZXJyZWQgPSAncHJlZmVycmVkJyxcclxuICBleHBlbnNpdmUgPSAnZXhwZW5zaXZlJ1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ2FyaGlyZUVudGVycHJpc2VTZWFyY2g8XHJcbiAgQ0hfUSBleHRlbmRzIENhckhpcmVGZXRjaGVyVHlwZSxcclxuICBDSEFEX1EgZXh0ZW5kcyBDYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlclR5cGVcclxuICA+XHJcbiAgZXh0ZW5kcyBCYXNlRW50ZXJwcmlzZVNlYXJjaDxcclxuICBDYXJIaXJlVGVtcFBhcmFtcyxcclxuICBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSxcclxuICBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheVxyXG4gID5cclxuICBpbXBsZW1lbnRzIENhcmhpcmVFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlIHtcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyA9ICdjYXJoaXJlX3BhcmFtcyc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTID0gJ2NhcmhpcmVfcmVzdWx0cyc7XHJcblxyXG4gIC8vICEgLSBIYXJkY29kZWQgRGF0YVxyXG4gIHByaXZhdGUgX2NhclR5cGVDb2RlczogW3N0cmluZywgc3RyaW5nLCBDYXJIaXJlVHlwZV1bXSA9IFtcclxuICAgIFsnQicsICcyLTMgRG9vcicsIENhckhpcmVUeXBlLlR3b1RvVGhyZWVEb29yXSxcclxuICAgIFsnQycsICcyLzQgRG9vcicsIENhckhpcmVUeXBlLlR3b09yRm91ckRvb3JdLFxyXG4gICAgWydEJywgJzQtNSBEb29yJywgQ2FySGlyZVR5cGUuRm91clRvRml2ZURvb3JdLFxyXG4gICAgWydXJywgJ1dhZ29uIC8gRXN0YXRlJywgQ2FySGlyZVR5cGUuV2Fnb25PckVzdGF0ZV0sXHJcbiAgICBbJ1YnLCAnUGFzc2VuZ2VyIFZhbicsIENhckhpcmVUeXBlLlBhc3NlbmdlclZhbl0sXHJcbiAgICBbJ0wnLCAnTGltb3VzaW5lJywgQ2FySGlyZVR5cGUuTGltb3VzaW5lXSxcclxuICAgIFsnUycsICdTcG9ydCcsIENhckhpcmVUeXBlLlNwb3J0XSxcclxuICAgIFsnVCcsICdDb252ZXJ0aWJsZScsIENhckhpcmVUeXBlLkNvbnZlcnRpYmxlXSxcclxuICAgIFsnRicsICdTVVYnLCBDYXJIaXJlVHlwZS5TdXZdLFxyXG4gICAgWydKJywgJ09wZW4gQWlyIEFsbCBUZXJyYWluJywgQ2FySGlyZVR5cGUuT3BlbkFpckFsbFRlcnJhaW5dLFxyXG4gICAgWydYJywgJ1NwZWNpYWwnLCBDYXJIaXJlVHlwZS5TcGVjaWFsXSxcclxuICAgIFsnUCcsICdQaWNrdXAgUmVndWxhciBDYWInLCBDYXJIaXJlVHlwZS5QaWNrVXBSZWd1bGFyQ2FiXSxcclxuICAgIFsnUScsICdQaWNrdXAgRXh0ZW5kZWQgQ2FiJywgQ2FySGlyZVR5cGUuUGlja1VwRXh0ZW5kZWRDYWJdLFxyXG4gICAgWydaJywgJ1NwZWNpYWwgT2ZmZXIgQ2FyJywgQ2FySGlyZVR5cGUuU3BlY2lhbE9mZmVyQ2FyXSxcclxuICAgIFsnRScsICdDb3VwZScsIENhckhpcmVUeXBlLkNvdXBlXSxcclxuICAgIFsnTScsICdNb25vc3BhY2UgKEV1cm9wZSknLCBDYXJIaXJlVHlwZS5Nb25vc3BhY2VFdXJvcGVhblVzZV0sXHJcbiAgICBbJ1InLCAnUmVjcmVhdGlvbmFsIFZlaGljbGUnLCBDYXJIaXJlVHlwZS5TdXZdLFxyXG4gICAgWydIJywgJ01vdG9yIEhvbWUnLCBDYXJIaXJlVHlwZS5Nb3RvckhvbWVdLFxyXG4gICAgWydZJywgJzItV2hlZWwgVmVoaWNsZScsIENhckhpcmVUeXBlLlR3b1doZWVsVmVoaWNsZV0sXHJcbiAgICBbJ04nLCAnUm9hZHN0ZXInLCBDYXJIaXJlVHlwZS5Sb2Fkc3Rlcl0sXHJcbiAgICBbJ0cnLCAnQ3Jvc3NvdmVyJywgQ2FySGlyZVR5cGUuU3V2XSxcclxuICAgIFsnSycsICdDb21tZXJjaWFsIFZhbiAvIFRydWNrJywgQ2FySGlyZVR5cGUuUGFzc2VuZ2VyVmFuXVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgX2NhckFpckNvbmRpdGlvblR5cGVzOiBbc3RyaW5nLCBzdHJpbmcsIGJvb2xlYW5dW10gPSBbXHJcbiAgICBbJ0FueScsICdBbnknLCBudWxsXSxcclxuICAgIFsnWScsICdZZXMnLCB0cnVlXSxcclxuICAgIFsnTicsICdObycsIGZhbHNlXVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgX3dpdGhpbkRpc3RhbmNlOiBXaXRoaW5EaXN0YW5jZVtdID0gW1xyXG4gICAgeyBuYW1lOiAnMSBtaWxlJywgdmFsdWU6ICcxJyB9LFxyXG4gICAgeyBuYW1lOiAnMiBtaWxlcycsIHZhbHVlOiAnMicgfSxcclxuICAgIHsgbmFtZTogJzUgbWlsZXMnLCB2YWx1ZTogJzUnIH0sXHJcbiAgICB7IG5hbWU6ICcxMCBtaWxlcycsIHZhbHVlOiAnMTAnIH0sXHJcbiAgICB7IG5hbWU6ICcyMCBtaWxlcycsIHZhbHVlOiAnMjAnIH1cclxuICBdO1xyXG5cclxuICBwcml2YXRlIF9jYXJUcmFuc21pc3Npb25Db2RlczogW3N0cmluZywgc3RyaW5nLCBDYXJIaXJlVHJhbnNtaXNzaW9uXVtdID0gW1xyXG4gICAgWydNJywgJ01hbnVhbCcsIENhckhpcmVUcmFuc21pc3Npb24uTWFudWFsXSxcclxuICAgIFsnTicsICdNYW51YWwgNC1XaGVlbCBEcml2ZScsIENhckhpcmVUcmFuc21pc3Npb24uTWFudWFsXSxcclxuICAgIFsnQycsICdNYW51YWwgQWxsLVdoZWVsIERyaXZlJywgQ2FySGlyZVRyYW5zbWlzc2lvbi5NYW51YWxdLFxyXG4gICAgWydBJywgJ0F1dG9tYXRpYycsIENhckhpcmVUcmFuc21pc3Npb24uQXV0b10sXHJcbiAgICBbJ0InLCAnQXV0b21hdGljIDQtV2hlZWwgRHJpdmUnLCBDYXJIaXJlVHJhbnNtaXNzaW9uLkF1dG9dLFxyXG4gICAgWydEJywgJ0F1dG9tYXRpYyBBbGwtIFdoZWVsIERyaXZlJywgQ2FySGlyZVRyYW5zbWlzc2lvbi5BdXRvXVxyXG4gIF07XHJcblxyXG4gIGNhcmhpcmVDb2RlczogYW55O1xyXG4gIHByaXZhdGUgX3ZlbmRvcnM6IFZlbmRvcltdID0gW1xyXG4gICAgeyBjb2RlOiAnLScsIG5hbWU6ICdBbnknIH0sXHJcbiAgICB7IGNvZGU6ICdBQycsIG5hbWU6ICdBY2UgUmVudCBBIENhcicgfSxcclxuICAgIHsgY29kZTogJ0FEJywgbmFtZTogJ0FkdmFudGFnZSBSZW50IEEgQ2FyJyB9LFxyXG4gICAgeyBjb2RlOiAnQUwnLCBuYW1lOiAnQWxhbW8nIH0sXHJcbiAgICB7IGNvZGU6ICdaSScsIG5hbWU6ICdBdmlzJyB9LFxyXG4gICAgeyBjb2RlOiAnQVQnLCBuYW1lOiAnQXRlc2EnIH0sXHJcbiAgICB7IGNvZGU6ICdaRCcsIG5hbWU6ICdCdWRnZXQgUmVudCBBIENhcicgfSxcclxuICAgIHsgY29kZTogJ0NJJywgbmFtZTogJ0NpdGVyIFJlbnQgQSBDYXInIH0sXHJcbiAgICB7IGNvZGU6ICdaUicsIG5hbWU6ICdEb2xsYXIgUmVudCBBIENhcicgfSxcclxuICAgIHsgY29kZTogJ0RGJywgbmFtZTogJ0RyaXZpbmcgRm9yY2UnIH0sXHJcbiAgICB7IGNvZGU6ICdFWScsIG5hbWU6ICdFY29ub215IFJlbnQgQSBDYXInIH0sXHJcbiAgICB7IGNvZGU6ICdFVCcsIG5hbWU6ICdFbnRlcnByaXNlJyB9LFxyXG4gICAgeyBjb2RlOiAnRVAnLCBuYW1lOiAnRXVyb3BjYXInIH0sXHJcbiAgICB7IGNvZGU6ICdJTScsIG5hbWU6ICdFdXJvcGNhciBTb3V0aGFmcmljYScgfSxcclxuICAgIHsgY29kZTogJ0VaJywgbmFtZTogJ0V6IFJlbnQgQSBDYXInIH0sXHJcbiAgICB7IGNvZGU6ICdGRicsIG5hbWU6ICdGaXJlZmx5JyB9LFxyXG4gICAgeyBjb2RlOiAnRlgnLCBuYW1lOiAnRm94IFJlbnQgQSBDYXInIH0sXHJcbiAgICB7IGNvZGU6ICdHTicsIG5hbWU6ICdHdWVyaW4gQ2FyIFJlbnRhbCcgfSxcclxuICAgIHsgY29kZTogJ1pFJywgbmFtZTogJ0hlcnR6JyB9LFxyXG4gICAgeyBjb2RlOiAnTE0nLCBuYW1lOiAnTCAmIE0gQ2FyIFJlbnRhbCcgfSxcclxuICAgIHsgY29kZTogJ0xMJywgbmFtZTogJ0xvY2FsaXphJyB9LFxyXG4gICAgeyBjb2RlOiAnTVcnLCBuYW1lOiAnTWlkd2F5IENhciBSZW50YWwnIH0sXHJcbiAgICB7IGNvZGU6ICdaTCcsIG5hbWU6ICdOYXRpb25hbCBDYXIgUmVudGFsIFN5c3RlbScgfSxcclxuICAgIHsgY29kZTogJ05DJywgbmFtZTogJ05leHRjYXInIH0sXHJcbiAgICB7IGNvZGU6ICdOVScsIG5hbWU6ICdOdSBDYXIgUmVudGFscycgfSxcclxuICAgIHsgY29kZTogJ1pBJywgbmFtZTogJ1BheWxlc3MgQ2FyIFJlbnRhbCcgfSxcclxuICAgIHsgY29kZTogJ1BSJywgbmFtZTogJ1ByaWNlbGVzcycgfSxcclxuICAgIHsgY29kZTogJ1JXJywgbmFtZTogJ1JlbnQgQSBXcmVjaycgfSxcclxuICAgIHsgY29kZTogJ1NYJywgbmFtZTogJ1NpeHQnIH0sXHJcbiAgICB7IGNvZGU6ICdURScsIG5hbWU6ICdUZW1wZXN0JyB9LFxyXG4gICAgeyBjb2RlOiAnWEYnLCBuYW1lOiAnVGVzdC1TIENyb3NzIEdhbGlsZW8nIH0sXHJcbiAgICB7IGNvZGU6ICdYRycsIG5hbWU6ICdUZXN0LVMgQ3Jvc3MgVHJuZycgfSxcclxuICAgIHsgY29kZTogJ1pUJywgbmFtZTogJ1RocmlmdHkgQ2FyIFJlbnRhbCcgfSxcclxuICAgIHsgY29kZTogJ1BNJywgbmFtZTogJ1RyYXZlbHBvcnQgVGVzdCBDb2RlJyB9LFxyXG4gICAgeyBjb2RlOiAnU1YnLCBuYW1lOiAnVS1TYXZlIEF1dG8gUmVudGFsJyB9LFxyXG4gICAgeyBjb2RlOiAnV0YnLCBuYW1lOiAnV29vZGZvcmQnIH1cclxuICBdO1xyXG5cclxuICBwcml2YXRlIF9jYXJfY2xhc3NlczogSUNhckNsYXNzZXNbXSA9IFtcclxuICAgIHsgY29kZTogJ00nLCBuYW1lOiAnTWluaScsIGtleTogQ2FySGlyZUNsYXNzLk1pbmksIHZhbHVlOiAnMTAnIH0sXHJcbiAgICB7IGNvZGU6ICdOJywgbmFtZTogJ01pbmkgRWxpdGUnLCBrZXk6IENhckhpcmVDbGFzcy5NaW5pRWxpdGUsIHZhbHVlOiAnMjAnIH0sXHJcbiAgICB7IGNvZGU6ICdFJywgbmFtZTogJ0Vjb25vbXknLCBrZXk6IENhckhpcmVDbGFzcy5FY29ub215LCB2YWx1ZTogJzMwJyB9LFxyXG4gICAge1xyXG4gICAgICBjb2RlOiAnSCcsXHJcbiAgICAgIG5hbWU6ICdFY29ub215IEVsaXRlJyxcclxuICAgICAga2V5OiBDYXJIaXJlQ2xhc3MuRWNvbm9teUVsaXRlLFxyXG4gICAgICB2YWx1ZTogJzQwJ1xyXG4gICAgfSxcclxuICAgIHsgY29kZTogJ0MnLCBuYW1lOiAnQ29tcGFjdCcsIGtleTogQ2FySGlyZUNsYXNzLkNvbXBhY3QsIHZhbHVlOiAnNTAnIH0sXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdEJyxcclxuICAgICAgbmFtZTogJ0NvbXBhY3QgRWxpdGUnLFxyXG4gICAgICBrZXk6IENhckhpcmVDbGFzcy5Db21wYWN0RWxpdGUsXHJcbiAgICAgIHZhbHVlOiAnNjAnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBjb2RlOiAnSScsXHJcbiAgICAgIG5hbWU6ICdJbnRlcm1lZGlhdGUnLFxyXG4gICAgICBrZXk6IENhckhpcmVDbGFzcy5JbnRlcm1lZGlhdGUsXHJcbiAgICAgIHZhbHVlOiAnNzAnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBjb2RlOiAnSicsXHJcbiAgICAgIG5hbWU6ICdJbnRlcm1lZGlhdGUgRWxpdGUnLFxyXG4gICAgICBrZXk6IENhckhpcmVDbGFzcy5JbnRlcm1lZGlhdGVFbGl0ZSxcclxuICAgICAgdmFsdWU6ICc4MCdcclxuICAgIH0sXHJcbiAgICB7IGNvZGU6ICdTJywgbmFtZTogJ1N0YW5kYXJkJywga2V5OiBDYXJIaXJlQ2xhc3MuU3RhbmRhcmQsIHZhbHVlOiAnOTAnIH0sXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdSJyxcclxuICAgICAgbmFtZTogJ1N0YW5kYXJkIEVsaXRlJyxcclxuICAgICAga2V5OiBDYXJIaXJlQ2xhc3MuU3RhbmRhcmRFbGl0ZSxcclxuICAgICAgdmFsdWU6ICcxMDAnXHJcbiAgICB9LFxyXG4gICAgeyBjb2RlOiAnRicsIG5hbWU6ICdGdWxsIFNpemUnLCBrZXk6IENhckhpcmVDbGFzcy5GdWxsc2l6ZSwgdmFsdWU6ICcxMTAnIH0sXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdHJyxcclxuICAgICAgbmFtZTogJ0Z1bGwgU2l6ZSBFbGl0ZScsXHJcbiAgICAgIGtleTogQ2FySGlyZUNsYXNzLkZ1bGxzaXplRWxpdGUsXHJcbiAgICAgIHZhbHVlOiAnMTIwJ1xyXG4gICAgfSxcclxuICAgIHsgY29kZTogJ1AnLCBuYW1lOiAnUHJlbWl1bScsIGtleTogQ2FySGlyZUNsYXNzLlByZW1pdW0sIHZhbHVlOiAnMTMwJyB9LFxyXG4gICAge1xyXG4gICAgICBjb2RlOiAnVScsXHJcbiAgICAgIG5hbWU6ICdQcmVtaXVtIEVsaXRlJyxcclxuICAgICAga2V5OiBDYXJIaXJlQ2xhc3MuUHJlbWl1bUVsaXRlLFxyXG4gICAgICB2YWx1ZTogJzE0MCdcclxuICAgIH0sXHJcbiAgICB7IGNvZGU6ICdMJywgbmFtZTogJ0x1eHVyeScsIGtleTogQ2FySGlyZUNsYXNzLkx1eHVyeSwgdmFsdWU6ICcxNTAnIH0sXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdXJyxcclxuICAgICAgbmFtZTogJ0x1eHVyeSBFbGl0ZScsXHJcbiAgICAgIGtleTogQ2FySGlyZUNsYXNzLkx1eHVyeUVsaXRlLFxyXG4gICAgICB2YWx1ZTogJzE2MCdcclxuICAgIH0sXHJcbiAgICB7IGNvZGU6ICdPJywgbmFtZTogJ092ZXJzaXplJywga2V5OiBDYXJIaXJlQ2xhc3MuT3ZlcnNpemUsIHZhbHVlOiAnMTcwJyB9LFxyXG4gICAgeyBjb2RlOiAnWCcsIG5hbWU6ICdTcGVjaWFsJywga2V5OiBDYXJIaXJlQ2xhc3MuU3BlY2lhbCwgdmFsdWU6ICcxODAnIH1cclxuICBdO1xyXG5cclxuICBwcml2YXRlIF9sb2NhdGlvbl90eXBlcyA9IFtcclxuICAgIExvY2F0aW9uVHlwZXMuQ2l0eSxcclxuICAgIExvY2F0aW9uVHlwZXMuQWlycG9ydCxcclxuICAgIExvY2F0aW9uVHlwZXMuUG9zdGNvZGVcclxuICBdO1xyXG5cclxuICBwcml2YXRlIGNhckNsYXNzTWFwOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge1xyXG4gICAgbWluaTogMCxcclxuICAgICdtaW5pIGVsaXRlJzogMSxcclxuICAgIGVjb25vbXk6IDIsXHJcbiAgICAnZWNvbm9teSBlbGl0ZSc6IDMsXHJcbiAgICBjb21wYWN0OiA0LFxyXG4gICAgJ2NvbXBhY3Qgc3BlY2lhbCc6IDUsXHJcbiAgICAnY29tcGFjdCBlbGl0ZSc6IDYsXHJcbiAgICBpbnRlcm1lZGlhdGU6IDcsXHJcbiAgICAnaW50ZXJtZWRpYXRlIGVsaXRlJzogOCxcclxuICAgIHN0YW5kYXJkOiA5LFxyXG4gICAgJ3N0YW5kYXJkIGVsaXRlJzogMTAsXHJcbiAgICAnZnVsbCBzaXplJzogMTEsXHJcbiAgICAnZnVsbCBzaXplIGVsaXRlJzogMTIsXHJcbiAgICBwcmVtaXVtOiAxMyxcclxuICAgICdwcmVtaXVtIGVsaXRlJzogMTQsXHJcbiAgICBsdXh1cnk6IDE1LFxyXG4gICAgJ2x1eHVyeSBlbGl0ZSc6IDE2LFxyXG4gICAgb3ZlcnNpemU6IDE3LFxyXG4gICAgc3BlY2lhbDogMThcclxuICB9O1xyXG4gIC8vICEgLSBFbmQgb2YgaGFyZGNvZGVkIGRhdGFcclxuXHJcbiAgcHVibGljIHR5cGU6IFNlcnZpY2VUeXBlID0gU2VydmljZVR5cGUuQ2FyO1xyXG5cclxuICBwcml2YXRlIF9uZ2JQaWNrdXBEYXRlOiBOZ2JEYXRlU3RydWN0O1xyXG4gIHByaXZhdGUgX3BpY2t1cFRpbWU6IHN0cmluZztcclxuICBwcml2YXRlIF9uZ2JEcm9wb2ZmRGF0ZTogTmdiRGF0ZVN0cnVjdDtcclxuICBwcml2YXRlIF9kcm9wb2ZmVGltZTogc3RyaW5nO1xyXG4gIHByaXZhdGUgX3NvcnRpbmdfb3B0aW9uczogQ2FySGlyZVNvcnRbXSA9IFtcclxuICAgIHtcclxuICAgICAgdmFsdWU6IDAsXHJcbiAgICAgIGRpc3BsYXk6ICdDaGVhcGVzdCBGaXJzdCdcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHZhbHVlOiAxLFxyXG4gICAgICBkaXNwbGF5OiAnTW9zdCBFeHBlbnNpdmUgRmlyc3QnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB2YWx1ZTogMixcclxuICAgICAgZGlzcGxheTogJ1ByZWZlcnJlZCBGaXJzdCdcclxuICAgIH1cclxuICBdO1xyXG4gIHByaXZhdGUgX21pbkRhdGU6IE5nYkRhdGVTdHJ1Y3QgPSB7XHJcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKSxcclxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcclxuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKVxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgX21pbkluRGF0ZTogTmdiRGF0ZVN0cnVjdCA9IHtcclxuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpLFxyXG4gICAgbW9udGg6IG1vbWVudCgpLm1vbnRoKCkgKyAxLFxyXG4gICAgeWVhcjogbW9tZW50KCkueWVhcigpXHJcbiAgfTtcclxuICB0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXTtcclxuXHJcbiAgZ2V0IGFkdWx0cygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5hZHVsdHM7XHJcbiAgfVxyXG5cclxuICBzZXQgYWR1bHRzKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5hZHVsdHMgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBjaGlsZHJlbigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbjtcclxuICB9XHJcblxyXG4gIHNldCBjaGlsZHJlbih2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBlc3RpbWF0ZWRNaWxlYWdlKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmVzdGltYXRlZE1pbGVhZ2U7XHJcbiAgfVxyXG5cclxuICBzZXQgZXN0aW1hdGVkTWlsZWFnZShtaWxhZ2U6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmVzdGltYXRlZE1pbGVhZ2UgPSBtaWxhZ2U7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgcGlja3VwVGltZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BpY2t1cFRpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgcGlja3VwVGltZShuZXd0aW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3BpY2t1cFRpbWUgPSBuZXd0aW1lO1xyXG4gICAgdGhpcy5fdXBkYXRlTmdiUGlja3VwRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIGdldCBkcm9wb2ZmVGltZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Ryb3BvZmZUaW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IGRyb3BvZmZUaW1lKG5ld3RpbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fZHJvcG9mZlRpbWUgPSBuZXd0aW1lO1xyXG4gICAgdGhpcy5fdXBkYXRlTmdiRHJvcG9mZkRhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgcG9zdGNvZGVQaWNrdXBSYXcoKTogTG9jYXRpb25EZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucG9zdGNvZGVQaWNrdXBSYXc7XHJcbiAgfVxyXG5cclxuICBzZXQgcG9zdGNvZGVQaWNrdXBSYXcobmV3UGlja3VwQ291bnRyeTogTG9jYXRpb25EZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucG9zdGNvZGVQaWNrdXBSYXcgPSBuZXdQaWNrdXBDb3VudHJ5O1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHBvc3Rjb2RlRHJvcG9mZlJhdygpOiBMb2NhdGlvbkRldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wb3N0Y29kZURyb3BvZmZSYXc7XHJcbiAgfVxyXG5cclxuICBzZXQgcG9zdGNvZGVEcm9wb2ZmUmF3KG5ld1BpY2t1cENvdW50cnk6IExvY2F0aW9uRGV0YWlscykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnBvc3Rjb2RlRHJvcG9mZlJhdyA9IG5ld1BpY2t1cENvdW50cnk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY2l0eVBpY2t1cERlcG90KCk6IENhckhpcmVEZXBvdCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNpdHlQaWNrdXBEZXBvdDtcclxuICB9XHJcblxyXG4gIHNldCBjaXR5UGlja3VwRGVwb3QobmV3UGlja3VwQ291bnRyeTogQ2FySGlyZURlcG90KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2l0eVBpY2t1cERlcG90ID0gbmV3UGlja3VwQ291bnRyeTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBjaXR5RHJvcG9mZkRlcG90KCk6IENhckhpcmVEZXBvdCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNpdHlEcm9wb2ZmRGVwb3Q7XHJcbiAgfVxyXG5cclxuICBzZXQgY2l0eURyb3BvZmZEZXBvdChuZXdQb3N0Q29kZURyb3BvZmY6IENhckhpcmVEZXBvdCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNpdHlEcm9wb2ZmRGVwb3QgPSBuZXdQb3N0Q29kZURyb3BvZmY7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgcG9zdGNvZGVQaWNrdXAoKTogQ2FySGlyZURlcG90IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucG9zdGNvZGVQaWNrdXA7XHJcbiAgfVxyXG5cclxuICBzZXQgcG9zdGNvZGVQaWNrdXAobmV3UGlja3VwQ291bnRyeTogQ2FySGlyZURlcG90KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucG9zdGNvZGVQaWNrdXAgPSBuZXdQaWNrdXBDb3VudHJ5O1xyXG4gICAgaWYgKHRoaXMudGVtcFBhcmFtcy5wb3N0Y29kZVBpY2t1cCkge1xyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMubG9jYXRpb25UeXBlID0gTG9jYXRpb25UeXBlcy5Qb3N0Y29kZTtcclxuICAgIH1cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBwb3N0Y29kZURyb3BvZmYoKTogQ2FySGlyZURlcG90IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucG9zdGNvZGVEcm9wb2ZmO1xyXG4gIH1cclxuXHJcbiAgc2V0IHBvc3Rjb2RlRHJvcG9mZihuZXdQb3N0Q29kZURyb3BvZmY6IENhckhpcmVEZXBvdCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnBvc3Rjb2RlRHJvcG9mZiA9IG5ld1Bvc3RDb2RlRHJvcG9mZjtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBjaXR5UGlja3VwKCk6IExvY2F0aW9uRGV0YWlscyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNpdHlQaWNrdXA7XHJcbiAgfVxyXG5cclxuICBzZXQgY2l0eVBpY2t1cChuZXdQaWNrdXA6IExvY2F0aW9uRGV0YWlscykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNpdHlQaWNrdXAgPSBuZXdQaWNrdXA7XHJcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zLmNpdHlQaWNrdXApIHtcclxuICAgICAgdGhpcy50ZW1wUGFyYW1zLmxvY2F0aW9uVHlwZSA9IExvY2F0aW9uVHlwZXMuQ2l0eTtcclxuICAgICAgY29uc29sZS5sb2codGhpcy50ZW1wUGFyYW1zLmxvY2F0aW9uVHlwZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNpdHlEcm9wb2ZmKCk6IExvY2F0aW9uRGV0YWlscyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNpdHlEcm9wb2ZmO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNpdHlEcm9wb2ZmKG5ld0Ryb3BvZmY6IExvY2F0aW9uRGV0YWlscykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNpdHlEcm9wb2ZmID0gbmV3RHJvcG9mZjtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBtaW5EYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX21pbkRhdGU7XHJcbiAgfVxyXG5cclxuICBnZXQgbWluSW5EYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX21pbkluRGF0ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3RpbWVBcnJheTogVmFsdWVEaXNwbGF5PHN0cmluZz5bXTtcclxuICAvLyAtIEdldHRlcnMgQW5kIFNldHRlcnMgRm9yIFZhcmlvdXMgVmFyaWFibGVzXHJcbiAgZ2V0IHBpY2t1cF9jb3VudHJ5KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnBpY2t1cF9jb3VudHJ5O1xyXG4gIH1cclxuXHJcbiAgc2V0IHBpY2t1cF9jb3VudHJ5KG5ld1BpY2t1cENvdW50cnk6IHN0cmluZykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnBpY2t1cF9jb3VudHJ5ID0gbmV3UGlja3VwQ291bnRyeTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBkcm9wb2ZmX2NvdW50cnkoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZHJvcG9mZl9jb3VudHJ5O1xyXG4gIH1cclxuXHJcbiAgc2V0IGRyb3BvZmZfY291bnRyeShuZXdEcm9wb2ZmQ291bnRyeTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZHJvcG9mZl9jb3VudHJ5ID0gbmV3RHJvcG9mZkNvdW50cnk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgcGlja3VwX2xvY2F0aW9uKCk6IE9CVEFpcnBvcnREZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucGlja3VwX2xvY2F0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2V0IHBpY2t1cF9sb2NhdGlvbihwaWNrdXBMb2NhdGlvbjogT0JUQWlycG9ydERldGFpbHMpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5waWNrdXBfbG9jYXRpb24gPSBwaWNrdXBMb2NhdGlvbjtcclxuICAgIGlmICh0aGlzLnRlbXBQYXJhbXMucGlja3VwX2xvY2F0aW9uKSB7XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5sb2NhdGlvblR5cGUgPSBMb2NhdGlvblR5cGVzLkFpcnBvcnQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucmV0dXJuX3RvX3BpY2t1cCkge1xyXG4gICAgICB0aGlzLmRyb3BvZmZfbG9jYXRpb24gPSBwaWNrdXBMb2NhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgZHJvcG9mZl9sb2NhdGlvbigpOiBPQlRBaXJwb3J0RGV0YWlscyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmRyb3BvZmZfbG9jYXRpb247XHJcbiAgfVxyXG5cclxuICBzZXQgZHJvcG9mZl9sb2NhdGlvbihkcm9wT2ZmTG9jYXRpb246IE9CVEFpcnBvcnREZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZHJvcG9mZl9sb2NhdGlvbiA9IGRyb3BPZmZMb2NhdGlvbjtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHNldCBuZ2JQaWNrdXBEYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XHJcbiAgICB0aGlzLl9uZ2JQaWNrdXBEYXRlID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVOZ2JQaWNrdXBEYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG5nYlBpY2t1cERhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbmdiUGlja3VwRGF0ZTtcclxuICB9XHJcblxyXG4gIHNldCBuZ2JEcm9wb2ZmRGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fbmdiRHJvcG9mZkRhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZU5nYkRyb3BvZmZEYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG5nYkRyb3BvZmZEYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX25nYkRyb3BvZmZEYXRlO1xyXG4gIH1cclxuXHJcbiAgLy8gRGF0ZXRpbWVzIHdpdGhpbiB0aGUgcXVlcnkgaXRzZWxmXHJcbiAgZ2V0IHBpY2t1cF9kYXRldGltZSgpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucGlja3VwX2RhdGV0aW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IHBpY2t1cF9kYXRldGltZSh2YWx1ZTogbW9tZW50Lk1vbWVudCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnBpY2t1cF9kYXRldGltZSA9IHZhbHVlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmlzVmFsaWQoKSkge1xyXG4gICAgICAgIHRoaXMuX25nYlBpY2t1cERhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUodmFsdWUpO1xyXG4gICAgICAgIHRoaXMuX3BpY2t1cFRpbWUgPSBtb21lbnQodmFsdWUpLmZvcm1hdCgnSEg6bW0nKVxyXG4gICAgICAgICAgPyBtb21lbnQodmFsdWUpLmZvcm1hdCgnSEg6bW0nKVxyXG4gICAgICAgICAgOiAnMDc6MzAnO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX21pbkluRGF0ZSA9IHtcclxuICAgICAgICBkYXk6IHZhbHVlLmRhdGUoKSxcclxuICAgICAgICBtb250aDogdmFsdWUubW9udGgoKSArIDEsXHJcbiAgICAgICAgeWVhcjogdmFsdWUueWVhcigpXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpZiAodmFsdWUuaXNTYW1lT3JBZnRlcih0aGlzLnRlbXBQYXJhbXMuZHJvcG9mZl9kYXRldGltZSkpIHtcclxuICAgICAgICB0aGlzLmRyb3BvZmZfZGF0ZXRpbWUgPSB0aGlzLmRyb3BvZmZfZGF0ZXRpbWVcclxuICAgICAgICAgIC5zZXQoJ2RhdGUnLCB2YWx1ZS5kYXRlKCkpXHJcbiAgICAgICAgICAuc2V0KCdtb250aCcsIHZhbHVlLm1vbnRoKCkpXHJcbiAgICAgICAgICAuc2V0KCd5ZWFyJywgdmFsdWUueWVhcigpKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgfVxyXG5cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBkcm9wb2ZmX2RhdGV0aW1lKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5kcm9wb2ZmX2RhdGV0aW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IGRyb3BvZmZfZGF0ZXRpbWUodmFsdWU6IG1vbWVudC5Nb21lbnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5kcm9wb2ZmX2RhdGV0aW1lID0gdmFsdWU7XHJcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUuaXNWYWxpZCgpKSB7XHJcbiAgICAgIHRoaXMuX25nYkRyb3BvZmZEYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKHZhbHVlKTtcclxuICAgICAgdGhpcy5fZHJvcG9mZlRpbWUgPSBtb21lbnQodmFsdWUpLmZvcm1hdCgnSEg6bW0nKVxyXG4gICAgICAgID8gbW9tZW50KHZhbHVlKS5mb3JtYXQoJ0hIOm1tJylcclxuICAgICAgICA6ICcwODozMCc7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICAvLyAhZGF0ZSBhbmQgdGltZSBpcyBoYW5kbGVkIGRpZmZlcmVudGx5IGZvciBMVVxyXG4gIHByaXZhdGUgX3BpY2t1cF9kYXRlOiBOZ2JEYXRlU3RydWN0ID0gbnVsbDtcclxuXHJcbiAgZ2V0IHBpY2t1cF9kYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BpY2t1cF9kYXRlO1xyXG4gIH1cclxuXHJcbiAgc2V0IHBpY2t1cF9kYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XHJcbiAgICB0aGlzLl9waWNrdXBfZGF0ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlUGlja3VwRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3BpY2t1cF90aW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gIGdldCBwaWNrdXBfdGltZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BpY2t1cF90aW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IHBpY2t1cF90aW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3BpY2t1cF90aW1lID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVQaWNrdXBEYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZHJvcG9mZl9kYXRlOiBOZ2JEYXRlU3RydWN0ID0gbnVsbDtcclxuXHJcbiAgZ2V0IGRyb3BvZmZfZGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLl9kcm9wb2ZmX2RhdGU7XHJcbiAgfVxyXG5cclxuICBzZXQgZHJvcG9mZl9kYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XHJcbiAgICB0aGlzLl9kcm9wb2ZmX2RhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZURyb3BvZmZEYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZHJvcG9mZl90aW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gIGdldCBkcm9wb2ZmX3RpbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9kcm9wb2ZmX3RpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgZHJvcG9mZl90aW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2Ryb3BvZmZfdGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlRHJvcG9mZkRhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgcmV0dXJuX3RvX3BpY2t1cCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucmV0dXJuX3RvX3BpY2t1cDtcclxuICB9XHJcblxyXG4gIHNldCByZXR1cm5fdG9fcGlja3VwKG5ld1ZhbDogYm9vbGVhbikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnJldHVybl90b19waWNrdXAgPSBuZXdWYWw7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY2hvc2VuVmVuZG9yKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlblZlbmRvcjtcclxuICB9XHJcblxyXG4gIHNldCBjaG9zZW5WZW5kb3IobmV3VmVuZG9yOiBzdHJpbmcpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5WZW5kb3IgPSBuZXdWZW5kb3I7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY2hvc2VuRGlzdGFuY2UoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuRGlzdGFuY2U7XHJcbiAgfVxyXG5cclxuICBzZXQgY2hvc2VuRGlzdGFuY2UobmV3Q2hvc2VuRGlzdGFuY2U6IHN0cmluZykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNob3NlbkRpc3RhbmNlID0gbmV3Q2hvc2VuRGlzdGFuY2U7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY2FyQ2xhc3MoKTogQ2FySGlyZUNsYXNzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2FyQ2xhc3M7XHJcbiAgfVxyXG5cclxuICBzZXQgY2FyQ2xhc3MoY2FyQ2xhc3M6IENhckhpcmVDbGFzcykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNhckNsYXNzID0gY2FyQ2xhc3M7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY2FyVHlwZSgpOiBDYXJIaXJlVHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNhclR5cGU7XHJcbiAgfVxyXG5cclxuICBzZXQgY2FyVHlwZSh0eXBlOiBDYXJIaXJlVHlwZSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNhclR5cGUgPSB0eXBlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRyYW5zbWlzc2lvbigpOiBDYXJIaXJlVHJhbnNtaXNzaW9uIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudHJhbnNtaXNzaW9uO1xyXG4gIH1cclxuXHJcbiAgc2V0IHRyYW5zbWlzc2lvbih0cmFuczogQ2FySGlyZVRyYW5zbWlzc2lvbikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnRyYW5zbWlzc2lvbiA9IHRyYW5zO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGFpckNvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYWlyQ29uO1xyXG4gIH1cclxuXHJcbiAgc2V0IGFpckNvbihuZXdDb246IGJvb2xlYW4pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5haXJDb24gPSBuZXdDb247XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgbG9jYXRpb25UeXBlKCk6IExvY2F0aW9uVHlwZXMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5sb2NhdGlvblR5cGU7XHJcbiAgfVxyXG4gIHNldCBsb2NhdGlvblR5cGUodmFsdWU6IExvY2F0aW9uVHlwZXMpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5sb2NhdGlvblR5cGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdGltZUFycmF5KCkge1xyXG4gICAgdGhpcy5fdGltZUFycmF5ID1cclxuICAgICAgdGhpcy5fdGltZUFycmF5IHx8XHJcbiAgICAgIEFycmF5KDk2KVxyXG4gICAgICAgIC5maWxsKDApXHJcbiAgICAgICAgLm1hcCgoXywgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmFsdWU6XHJcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcihpbmRleCAvIDQpXHJcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgLnBhZFN0YXJ0KDIsICcwJykgK1xyXG4gICAgICAgICAgICAgICc6JyArXHJcbiAgICAgICAgICAgICAgKChpbmRleCAlIDQpICogMTUpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSxcclxuICAgICAgICAgICAgZGlzcGxheTpcclxuICAgICAgICAgICAgICBNYXRoLmZsb29yKGluZGV4IC8gNClcclxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAucGFkU3RhcnQoMiwgJzAnKSArXHJcbiAgICAgICAgICAgICAgJzonICtcclxuICAgICAgICAgICAgICAoKGluZGV4ICUgNCkgKiAxNSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgcmV0dXJuIHRoaXMuX3RpbWVBcnJheTtcclxuICB9XHJcblxyXG4gIC8vICEgLSBUaGUgYmVsb3cgdmFsdWVzIGhhdmUgZ2V0dGVycyBvbmx5IChJLkUgQ2Fubm90IG1vZGlmeSlcclxuXHJcbiAgZ2V0IGNhckFpckNvbmRpdGlvblR5cGVzKCk6IFtzdHJpbmcsIHN0cmluZywgYm9vbGVhbl1bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2FyQWlyQ29uZGl0aW9uVHlwZXM7XHJcbiAgfVxyXG5cclxuICBnZXQgd2l0aGluRGlzdGFuY2UoKTogV2l0aGluRGlzdGFuY2VbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fd2l0aGluRGlzdGFuY2U7XHJcbiAgfVxyXG5cclxuICBnZXQgY2FyVHJhbnNtaXNzaW9uQ29kZXMoKTogW3N0cmluZywgc3RyaW5nLCBDYXJIaXJlVHJhbnNtaXNzaW9uXVtdIHtcclxuICAgIHJldHVybiB0aGlzLl9jYXJUcmFuc21pc3Npb25Db2RlcztcclxuICB9XHJcblxyXG4gIGdldCBjYXJUeXBlQ29kZXMoKTogW3N0cmluZywgc3RyaW5nLCBDYXJIaXJlVHlwZV1bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2FyVHlwZUNvZGVzO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHZlbmRvcnMoKTogVmVuZG9yW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZlbmRvcnM7XHJcbiAgfVxyXG5cclxuICBnZXQgc29ydGluZ09wdGlvbnMoKTogQ2FySGlyZVNvcnRbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc29ydGluZ19vcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgLy8gISAtIEVuZCBvZiBnZXR0ZXJzIGFuZCBzZXR0ZXJzXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjYXJoaXJlZmV0Y2hlcjogQmFzZUNhcmhpcmVRdW90ZUZldGNoZXI8Q0hfUT4sXHJcbiAgICBwcml2YXRlIGNhckhpcmVBdmFpbGFiaWxpdHlEZXRhaWxGZXRjaGVyOiBCYXNlQ2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXI8Q0hBRF9RPixcclxuICAgIGhlbHBlcnM6IEJhc2VIZWxwZXJSb3V0aW5lcyxcclxuICAgIHByaXZhdGUgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBzdG9yYWdlU2VydmljZTogQmFzZVN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgc2VhcmNoU2VydmljZTogRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICB1c2VyU2VydmljZTogVXNlclNlcnZpY2VJbnRlcmZhY2VcclxuICApIHtcclxuICAgIHN1cGVyKHN0b3JhZ2VTZXJ2aWNlLCBoZWxwZXJzLCBzZWFyY2hTZXJ2aWNlLCB1c2VyU2VydmljZSk7XHJcbiAgICBjb25zdCBkYXRhOiB7XHJcbiAgICAgIHRlbXBQYXJhbXM6IENhckhpcmVUZW1wUGFyYW1zO1xyXG4gICAgfSA9IHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtKFxyXG4gICAgICBDYXJoaXJlRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TXHJcbiAgICApIHx8IHtcclxuICAgICAgICB0ZW1wUGFyYW1zOiB7fSBhcyBDYXJIaXJlVGVtcFBhcmFtc1xyXG4gICAgICB9O1xyXG5cclxuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyhzZWFyY2hTZXJ2aWNlLm1ha2VDYXJIaXJlUXVlcnkoZGF0YS50ZW1wUGFyYW1zKSk7XHJcbiAgICAvLyBpZiAodGhpcy51c2VyQ29uZmlnPy5jYXJoaXJlX2RlZmF1bHRzKSB7XHJcbiAgICAvLyAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyhzZWFyY2hTZXJ2aWNlLm1ha2VDYXJIaXJlUXVlcnkodGhpcy51c2VyQ29uZmlnLmNhcmhpcmVfZGVmYXVsdHMpKTtcclxuICAgIC8vIH1cclxuXHJcbiAgICB1c2VyU2VydmljZS5mdWxsVXNlckRldGFpbHMudXNlckNvbmZpZ3Muc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAvLyB0aGlzLnVzZXJDb25maWcubmV4dChkYXRhKTtcclxuICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgIGlmIChkYXRhICYmIGRhdGE/LmNhcmhpcmVfZGVmYXVsdHMpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXMoc2VhcmNoU2VydmljZS5tYWtlQ2FySGlyZVF1ZXJ5KGRhdGE/LmNhcmhpcmVfZGVmYXVsdHM/LmNvbmZpZykpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSlcclxuICAgICAgLy8gdXNlclNlcnZpY2Uuc3Vic2NyaWJlKGRhdGE9PntcclxuICAgICAgLy8gdGhpcy51cGRhdGVUZW1wUGFyYW1zKHNlYXJjaFNlcnZpY2UubWFrZUNhckhpcmVRdWVyeShkYXRhLmNhcmhpcmVfZGVmYXVsdHMpKTtcclxuXHJcbiAgICAgIC8vIH0pXHJcbiAgICBpZiAoc2VhcmNoU2VydmljZS5zaG91bGRBZGRUcmF2ZWxsZXJTdWJzY3JpcHRpb24oKSkge1xyXG4gICAgICBzZWFyY2hTZXJ2aWNlLnRyYXZlbGxlckluZm9ybWF0aW9uLnN1YnNjcmliZShcclxuICAgICAgICAodHJhdmVsbGVyczogVHJhdmVsbGVyW10pID0+IHtcclxuICAgICAgICAgIHRoaXMuYWR1bHRzID0gMTtcclxuICAgICAgICAgIHRoaXMuY2hpbGRyZW4gPSAwO1xyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsZXJzID0gdHJhdmVsbGVycz8uc2xpY2UoMCwgMSkgfHwgW107XHJcbiAgICAgICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlc3VsdHMgPVxyXG4gICAgICBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbUFzTGlzdDxDYXJIaXJlUXVvdGVSZXN1bHRBcnJheT4oXHJcbiAgICAgICAgdGhpcy5yZXN1bHRzU2Vzc2lvbk5hbWVcclxuICAgICAgKSB8fCBbXTtcclxuXHJcbiAgICB0aGlzLmZ1bGxSZXN1bHRzID0gaGVscGVycy5jbG9uZShyZXN1bHRzIHx8IFtdKTtcclxuICAgIHRoaXMuX2NoZWFwZXN0UmVzdWx0UHJpY2UgPSB0aGlzLnVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHMpO1xyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQocmVzdWx0cyk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcmVzdWx0c1Nlc3Npb25OYW1lID1cclxuICAgIENhcmhpcmVFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xyXG4gIHByb3RlY3RlZCBtdWx0aVJlc3VsdHNTZXNzaW9uTmFtZSA9XHJcbiAgICBDYXJoaXJlRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuXHJcbiAgcHJvdGVjdGVkIHJlc2V0UXVlcnkoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXModGhpcy5zZWFyY2hTZXJ2aWNlLm1ha2VDYXJIaXJlUXVlcnkoKSk7XHJcbiAgICB0aGlzLmVzdGltYXRlZE1pbGVhZ2UgPSBudWxsO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNWYWxpZCgpIHtcclxuICAgIGlmICghdGhpcy5kb0NoZWNrcykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBDYXJoaXJlRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TLFxyXG4gICAgICB7XHJcbiAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgLy8gZ28gb3ZlciBhbmQgY2hlY2sgdGhhdCBhbGwgb2YgdGhlIHZhcmlvdXMgdmFyaWFibGVzIGFyZSBjb3JyZWN0XHJcblxyXG4gICAgLy8gZmlyc3Qgb2YgYWxsIGNoZWNrIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIGxvY2F0aW9uXHJcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyA9IFtdO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5sb2NhdGlvblR5cGUpIHtcclxuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLkFpcnBvcnQ6XHJcbiAgICAgICAgaWYgKCF0aGlzLnBpY2t1cF9sb2NhdGlvbiB8fCAhdGhpcy5waWNrdXBfbG9jYXRpb24uZGVzdGluYXRpb24pIHtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBzdXBwbHkgYSBwaWNrdXAgbG9jYXRpb24nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5kcm9wb2ZmX2xvY2F0aW9uIHx8ICF0aGlzLmRyb3BvZmZfbG9jYXRpb24uZGVzdGluYXRpb24pIHtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBzdXBwbHkgYSBkcm9wb2ZmIGxvY2F0aW9uJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIExvY2F0aW9uVHlwZXMuQ2l0eTpcclxuICAgICAgICBpZiAoIXRoaXMuY2l0eVBpY2t1cCkge1xyXG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIHN1cHBseSBhIHBpY2t1cCBjaXR5Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuY2l0eURyb3BvZmYpIHtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBzdXBwbHkgYSBkcm9wb2ZmIGNpdHknKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5Qb3N0Y29kZTpcclxuICAgICAgICBpZiAoIXRoaXMucG9zdGNvZGVQaWNrdXApIHtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBzdXBwbHkgYSBwaWNrdXAgZGVwb3QnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5wb3N0Y29kZURyb3BvZmYpIHtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBzdXBwbHkgYSBkcm9wb2ZmIGRlcG90Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmVzdGltYXRlZE1pbGVhZ2UgJiYgdGhpcy5lc3RpbWF0ZWRNaWxlYWdlIDw9IDApIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAnRXN0aW1hdGVkIE1pbGFnZSBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyLidcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoIXRoaXMucGlja3VwX2RhdGV0aW1lKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIHN1cHBseSBhIHBpY2t1cCB0aW1lIGFuZCBkYXRlJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghdGhpcy5kcm9wb2ZmX2RhdGV0aW1lKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIHN1cHBseSBhIGRyb3Agb2ZmIHRpbWUgYW5kIGRhdGUnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuZHJvcG9mZl9kYXRldGltZT8uaXNTYW1lT3JCZWZvcmUodGhpcy5waWNrdXBfZGF0ZXRpbWUsICdtaW51dGUnKVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICAgJ0Ryb3BvZmYgZGF0ZS90aW1lIGNhbm5vdCBiZSBiZWZvcmUgb3IgdGhlIHNhbWUgYXMgcGlja3VwIGRhdGUvdGltZSdcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5waWNrdXBfZGF0ZXRpbWU/LmlzQmVmb3JlKG1vbWVudCgpKSkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgICAnUGlja3VwIGRhdGUvdGltZSBtdXN0IGJlIGFmdGVyIHByZXNlbnQgZGF0ZS90aW1lJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmRyb3BvZmZfZGF0ZXRpbWU/LmlzQmVmb3JlKG1vbWVudCgpKSkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgICAnRHJvcG9mZiBkYXRlL3RpbWUgbXVzdCBiZSBhZnRlciBwcmVzZW50IGRhdGUvdGltZSdcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikgeyB9XHJcblxyXG4gICAgdGhpcy5pc1ZhbGlkLm5leHQodGhpcy52YWxpZGF0aW9uTWVzc2FnZXMubGVuZ3RoID09PSAwKTtcclxuICAgIHRoaXMubWVzc2FnZXMubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgfVxyXG5cclxuICBzdGFydFNlYXJjaCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcclxuICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcclxuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlUmVjZW50U2VhcmNoKFxyXG4gICAgICAgIHRoaXMuZ2V0UmVjZW50U2VhcmNoUXVlcnkodGhpcy5nZXRTZWFyY2hRdWVyeSgpKVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gdGhpcy5fc3RhcnRTZWFyY2goXHJcbiAgICAgICAgdGhpcy5jYXJoaXJlZmV0Y2hlci5mZXRjaExpc3QoXHJcbiAgICAgICAgICB0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8UXVlcnlTZWFyY2hDYXJIaXJlQXJncz4ocXVlcnkpXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRSZWNlbnRTZWFyY2hRdWVyeShcclxuICAgIHF1ZXJ5OiBRdWVyeVNlYXJjaENhckhpcmVBcmdzXHJcbiAgKTogU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzIHtcclxuICAgIGNvbnN0IHJlY2VudFNlYXJjaFF1ZXJ5OiBDYXJIaXJlU2VhcmNoQXJncyA9IHRoaXMudXBkYXRlU2VyY2hRdWVyeShxdWVyeSk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzZXJ2aWNlVHlwZTogU2VydmljZVR5cGUuQ2FyLFxyXG4gICAgICBzZWFyY2hBcmdzOiByZWNlbnRTZWFyY2hRdWVyeSxcclxuICAgICAgdHJhdmVsRGF0ZTogdGhpcy5waWNrdXBfZGF0ZXRpbWUuZm9ybWF0KCksXHJcbiAgICAgIHRyYXZlbGxlcnM6IHRoaXMuaGVscGVycy5nZXRUcmF2ZWxsZXJzSWQodGhpcy50cmF2ZWxsZXJzKVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlU2VyY2hRdWVyeShxdWVyeTogUXVlcnlTZWFyY2hDYXJIaXJlQXJncyk6IENhckhpcmVTZWFyY2hBcmdzIHtcclxuICAgIGNvbnN0IHNlYXJjaFF1ZXJ5OiBDYXJIaXJlU2VhcmNoQXJncyA9IHF1ZXJ5O1xyXG4gICAgc3dpdGNoICh0aGlzLmxvY2F0aW9uVHlwZSkge1xyXG4gICAgICBjYXNlIExvY2F0aW9uVHlwZXMuQ2l0eTpcclxuICAgICAgICBzZWFyY2hRdWVyeS5jaXR5ID0ge1xyXG4gICAgICAgICAgcGlja3VwTmFtZTogdGhpcy5jaXR5UGlja3VwLm5hbWUsXHJcbiAgICAgICAgICBwaWNrdXBDb3VudHJ5Q29kZTogdGhpcy5jaXR5UGlja3VwLmNvdW50cnlDb2RlLFxyXG4gICAgICAgICAgcGlja3VwQ2l0eTogdGhpcy5jaXR5UGlja3VwLmlkLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICBwaWNrdXBMYXRpdHVkZTogdGhpcy5jaXR5UGlja3VwLmxhdGl0dWRlLFxyXG4gICAgICAgICAgcGlja3VwTG9uZ2l0dWRlOiB0aGlzLmNpdHlQaWNrdXAubG9uZ2l0dWRlLFxyXG5cclxuICAgICAgICAgIGRyb3BPZmZOYW1lOiB0aGlzLmNpdHlEcm9wb2ZmLm5hbWUsXHJcbiAgICAgICAgICBkcm9wb2ZmQ291bnRyeUNvZGU6IHRoaXMuY2l0eURyb3BvZmYuY291bnRyeUNvZGUsXHJcbiAgICAgICAgICBkcm9wb2ZmQ2l0eTogdGhpcy5jaXR5RHJvcG9mZi5pZC50b1N0cmluZygpLFxyXG4gICAgICAgICAgZHJvcE9mZkxhdGl0dWRlOiB0aGlzLmNpdHlEcm9wb2ZmLmxhdGl0dWRlLFxyXG4gICAgICAgICAgZHJvcE9mZkxvbmdpdHVkZTogdGhpcy5jaXR5RHJvcG9mZi5sb25naXR1ZGUsXHJcblxyXG4gICAgICAgICAgcGlja3VwQWRkcmVzc0xpbmVzOiB0aGlzLmNpdHlQaWNrdXBEZXBvdC5hZGRyZXNzTGluZXNbMF0sXHJcbiAgICAgICAgICBwaWNrdXBDaXR5TmFtZTogdGhpcy5jaXR5UGlja3VwRGVwb3QuY2l0eU5hbWUsXHJcbiAgICAgICAgICBwaWNrdXBFeHRlbmRlZExvY2F0aW9uQ29kZTogdGhpcy5jaXR5UGlja3VwRGVwb3QuZXh0ZW5kZWRMb2NhdGlvbkNvZGUsXHJcbiAgICAgICAgICBwaWNrdXBMb2NhdGlvbkNvZGU6IHRoaXMuY2l0eVBpY2t1cERlcG90LmxvY2F0aW9uQ29kZSxcclxuICAgICAgICAgIHBpY2t1cFZlbmRvcjogdGhpcy5jaXR5UGlja3VwRGVwb3QudmVuZG9yLFxyXG4gICAgICAgICAgcGlja3VwVmVuZG9yQ29kZTogdGhpcy5jaXR5UGlja3VwRGVwb3QudmVuZG9yQ29kZSxcclxuICAgICAgICAgIGNob3NlbkRpc3RhbmNlOiB0aGlzLmNob3NlbkRpc3RhbmNlLFxyXG5cclxuICAgICAgICAgIGRyb3BPZmZBZGRyZXNzTGluZXM6IHRoaXMuY2l0eURyb3BvZmZEZXBvdC5hZGRyZXNzTGluZXNbMF0sXHJcbiAgICAgICAgICBkcm9wT2ZmQ2l0eU5hbWU6IHRoaXMuY2l0eURyb3BvZmZEZXBvdC5jaXR5TmFtZSxcclxuICAgICAgICAgIGRyb3BPZmZFeHRlbmRlZExvY2F0aW9uQ29kZTpcclxuICAgICAgICAgICAgdGhpcy5jaXR5RHJvcG9mZkRlcG90LmV4dGVuZGVkTG9jYXRpb25Db2RlLFxyXG4gICAgICAgICAgZHJvcE9mZkxvY2F0aW9uQ29kZTogdGhpcy5jaXR5RHJvcG9mZkRlcG90LmxvY2F0aW9uQ29kZSxcclxuICAgICAgICAgIGRyb3BPZmZWZW5kb3I6IHRoaXMuY2l0eURyb3BvZmZEZXBvdC52ZW5kb3IsXHJcbiAgICAgICAgICBkcm9wT2ZmVmVuZG9yQ29kZTogdGhpcy5jaXR5RHJvcG9mZkRlcG90LnZlbmRvckNvZGVcclxuICAgICAgICB9O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIExvY2F0aW9uVHlwZXMuUG9zdGNvZGU6XHJcbiAgICAgICAgc2VhcmNoUXVlcnkuZGVwb3QgPSB7XHJcbiAgICAgICAgICB2ZW5kb3JDb2RlOiB0aGlzLnBvc3Rjb2RlUGlja3VwLnZlbmRvckNvZGUsXHJcbiAgICAgICAgICBwaWNrdXBMb2NhdGlvbkNvZGU6IHRoaXMucG9zdGNvZGVQaWNrdXAubG9jYXRpb25Db2RlLFxyXG4gICAgICAgICAgcGlja3VwRXh0ZW5kZWRMb2NhdGlvbkNvZGU6IHRoaXMucG9zdGNvZGVQaWNrdXAuZXh0ZW5kZWRMb2NhdGlvbkNvZGUsXHJcbiAgICAgICAgICBwaWNrdXBBZGRyZXNzTGluZXM6IHRoaXMucG9zdGNvZGVQaWNrdXAuYWRkcmVzc0xpbmVzWzBdLFxyXG4gICAgICAgICAgcGlja3VwQ2l0eU5hbWU6IHRoaXMucG9zdGNvZGVQaWNrdXAuY2l0eU5hbWUsXHJcbiAgICAgICAgICBwaWNrdXBWZW5kb3I6IHRoaXMucG9zdGNvZGVQaWNrdXAudmVuZG9yLFxyXG5cclxuICAgICAgICAgIGRyb3BPZmZMb2NhdGlvbkNvZGU6IHRoaXMucG9zdGNvZGVEcm9wb2ZmLmxvY2F0aW9uQ29kZSxcclxuICAgICAgICAgIGRyb3BPZmZFeHRlbmRlZExvY2F0aW9uQ29kZTpcclxuICAgICAgICAgICAgdGhpcy5wb3N0Y29kZURyb3BvZmYuZXh0ZW5kZWRMb2NhdGlvbkNvZGUsXHJcbiAgICAgICAgICBkcm9wb2ZmQWRkcmVzc0xpbmVzOiB0aGlzLnBvc3Rjb2RlRHJvcG9mZi5hZGRyZXNzTGluZXNbMF0sXHJcbiAgICAgICAgICBkcm9wb2ZmQ2l0eU5hbWU6IHRoaXMucG9zdGNvZGVEcm9wb2ZmLmNpdHlOYW1lLFxyXG4gICAgICAgICAgZHJvcG9mZlZlbmRvcjogdGhpcy5wb3N0Y29kZURyb3BvZmYudmVuZG9yLFxyXG4gICAgICAgICAgY2hvc2VuRGlzdGFuY2U6IHRoaXMuY2hvc2VuRGlzdGFuY2UsXHJcblxyXG4gICAgICAgICAgcGlja3VwUG9zdENvZGU6IHRoaXMucG9zdGNvZGVQaWNrdXBSYXcubmFtZSxcclxuICAgICAgICAgIHBpY2t1cExhdGl0dWRlOiB0aGlzLnBvc3Rjb2RlUGlja3VwUmF3LmxhdGl0dWRlLFxyXG4gICAgICAgICAgcGlja3VwTG9uZ2l0dWRlOiB0aGlzLnBvc3Rjb2RlUGlja3VwUmF3LmxvbmdpdHVkZSxcclxuXHJcbiAgICAgICAgICBkcm9wb2ZmUG9zdENvZGU6IHRoaXMucG9zdGNvZGVEcm9wb2ZmUmF3Lm5hbWUsXHJcbiAgICAgICAgICBkcm9wb2ZmTGF0aXR1ZGU6IHRoaXMucG9zdGNvZGVEcm9wb2ZmUmF3LmxhdGl0dWRlLFxyXG4gICAgICAgICAgZHJvcG9mZkxvbmdpdHVkZTogdGhpcy5wb3N0Y29kZURyb3BvZmZSYXcubG9uZ2l0dWRlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc2VhcmNoUXVlcnk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhcnRSZWNlbnRTZWFyY2gocmVjZW50U2VhcmNoOiBSZWNlbnRTZWFyY2gpOiB2b2lkIHtcclxuICAgIHRoaXMuY2hvc2VuVmVuZG9yID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MudmVuZG9yO1xyXG4gICAgdGhpcy5jYXJDbGFzcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNsYXNzO1xyXG4gICAgdGhpcy5jYXJUeXBlID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MudHlwZTtcclxuICAgIHRoaXMudHJhbnNtaXNzaW9uID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MudHJhbnNtaXNzaW9uO1xyXG4gICAgdGhpcy5haXJDb24gPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5haXJjb247XHJcbiAgICB0aGlzLmVzdGltYXRlZE1pbGVhZ2UgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5lc3RpbWF0ZWREYWlseURpc3RhbmNlO1xyXG4gICAgdGhpcy5kcm9wb2ZmX2RhdGV0aW1lID0gbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRyb3BvZmZEYXRlVGltZSk7XHJcbiAgICB0aGlzLnBpY2t1cF9kYXRldGltZSA9IG1vbWVudChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5waWNrdXBEYXRlVGltZSk7XHJcblxyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkpIHtcclxuICAgICAgdGhpcy5nZXRQYXJhbXNGb3JDYXJieUNpdHkocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eSk7XHJcbiAgICB9IGVsc2UgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmFpcnBvcnQpIHtcclxuICAgICAgdGhpcy5nZXRQYXJhbXNGb3JDYXJieUFpcnBvcnQocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuYWlycG9ydCk7XHJcbiAgICB9IGVsc2UgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90KSB7XHJcbiAgICAgIHRoaXMuZ2V0UGFyYW1zRm9yQ2FyYnlQb3N0Q29kZShyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXBvdCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFBhcmFtc0ZvckNhcmJ5QWlycG9ydChhaXJwb3J0OiBDYXJIaXJlQWlycG9ydElucHV0KTogdm9pZCB7XHJcbiAgICB0aGlzLmxvY2F0aW9uVHlwZSA9IExvY2F0aW9uVHlwZXMuQWlycG9ydDtcclxuICAgIGNvbWJpbmVMYXRlc3QoW1xyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0QWlycG9ydEJ5Q29kZShhaXJwb3J0LnBpY2t1cENvZGUpLFxyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0QWlycG9ydEJ5Q29kZShhaXJwb3J0LmRyb3BvZmZDb2RlKVxyXG4gICAgXSkuc3Vic2NyaWJlKChbZGVwYXJ0TG9jYXRpb24sIGFycml2ZUxvY2F0aW9uXSkgPT4ge1xyXG4gICAgICBpZiAoZGVwYXJ0TG9jYXRpb24gJiYgYXJyaXZlTG9jYXRpb24pIHtcclxuICAgICAgICB0aGlzLmRyb3BvZmZfbG9jYXRpb24gPSB7XHJcbiAgICAgICAgICBkZXN0aW5hdGlvbjogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLm5hbWUsXHJcbiAgICAgICAgICBnYXRld2F5OiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2guaWF0YSxcclxuICAgICAgICAgIHRlcm1pbmFsczogdGhpcy5zZWFyY2hTZXJ2aWNlLnByb2Nlc3NUZXJtaW5hbHMoXHJcbiAgICAgICAgICAgIGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC50ZXJtaW5hbHNcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBjb3VudHJ5OiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeSxcclxuICAgICAgICAgIHBvc3Rjb2RlOiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8ucG9zdGNvZGUsXHJcbiAgICAgICAgICBjb3VudHJ5Q29kZTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnBpY2t1cF9sb2NhdGlvbiA9IHtcclxuICAgICAgICAgIGRlc3RpbmF0aW9uOiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2gubmFtZSxcclxuICAgICAgICAgIGdhdGV3YXk6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC5pYXRhLFxyXG4gICAgICAgICAgdGVybWluYWxzOiB0aGlzLnNlYXJjaFNlcnZpY2UucHJvY2Vzc1Rlcm1pbmFscyhcclxuICAgICAgICAgICAgYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLnRlcm1pbmFsc1xyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGNvdW50cnk6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5LFxyXG4gICAgICAgICAgcG9zdGNvZGU6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5wb3N0Y29kZSxcclxuICAgICAgICAgIGNvdW50cnlDb2RlOiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeUNvZGVcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmRyb3BvZmZfY291bnRyeSA9IHRoaXMuZHJvcG9mZl9sb2NhdGlvbi5jb3VudHJ5Q29kZTtcclxuICAgICAgICB0aGlzLnBpY2t1cF9jb3VudHJ5ID0gdGhpcy5waWNrdXBfbG9jYXRpb24uY291bnRyeUNvZGU7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFBhcmFtc0ZvckNhcmJ5Q2l0eShjaXR5OiBJQ2FySGlyZUNpdHkpOiB2b2lkIHtcclxuICAgIHRoaXMubG9jYXRpb25UeXBlID0gTG9jYXRpb25UeXBlcy5DaXR5O1xyXG4gICAgdGhpcy5jaG9zZW5EaXN0YW5jZSA9IGNpdHkuY2hvc2VuRGlzdGFuY2U7XHJcblxyXG4gICAgdGhpcy5jaXR5UGlja3VwID0ge1xyXG4gICAgICBjb3VudHJ5Q29kZTogY2l0eS5waWNrdXBDb3VudHJ5Q29kZSxcclxuICAgICAgaWQ6IGNpdHkucGlja3VwQ2l0eSxcclxuICAgICAgbmFtZTogY2l0eS5waWNrdXBOYW1lLFxyXG4gICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLkNpdHksXHJcbiAgICAgIGxhdGl0dWRlOiBjaXR5LnBpY2t1cExhdGl0dWRlLFxyXG4gICAgICBsb25naXR1ZGU6IGNpdHkucGlja3VwTG9uZ2l0dWRlXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuY2l0eURyb3BvZmYgPSB7XHJcbiAgICAgIGNvdW50cnlDb2RlOiBjaXR5LmRyb3BvZmZDb3VudHJ5Q29kZSxcclxuICAgICAgaWQ6IGNpdHkuZHJvcG9mZkNpdHksXHJcbiAgICAgIG5hbWU6IGNpdHkuZHJvcE9mZk5hbWUsXHJcbiAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXMuQ2l0eSxcclxuICAgICAgbGF0aXR1ZGU6IGNpdHkuZHJvcE9mZkxhdGl0dWRlLFxyXG4gICAgICBsb25naXR1ZGU6IGNpdHkuZHJvcE9mZkxvbmdpdHVkZVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmNpdHlEcm9wb2ZmRGVwb3QgPSB7XHJcbiAgICAgIGFkZHJlc3NMaW5lczogW2NpdHkuZHJvcE9mZkFkZHJlc3NMaW5lc10sXHJcbiAgICAgIGNpdHlOYW1lOiBjaXR5LmRyb3BPZmZDaXR5TmFtZSxcclxuICAgICAgZXh0ZW5kZWRMb2NhdGlvbkNvZGU6IGNpdHkuZHJvcE9mZkV4dGVuZGVkTG9jYXRpb25Db2RlLFxyXG4gICAgICBsb2NhdGlvbkNvZGU6IGNpdHkuZHJvcE9mZkxvY2F0aW9uQ29kZSxcclxuICAgICAgdmVuZG9yOiBjaXR5LmRyb3BPZmZWZW5kb3IsXHJcbiAgICAgIHZlbmRvckNvZGU6IGNpdHkuZHJvcE9mZlZlbmRvckNvZGVcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5jaXR5UGlja3VwRGVwb3QgPSB7XHJcbiAgICAgIGFkZHJlc3NMaW5lczogW2NpdHkucGlja3VwQWRkcmVzc0xpbmVzXSxcclxuICAgICAgY2l0eU5hbWU6IGNpdHkucGlja3VwQ2l0eU5hbWUsXHJcbiAgICAgIGV4dGVuZGVkTG9jYXRpb25Db2RlOiBjaXR5LnBpY2t1cEV4dGVuZGVkTG9jYXRpb25Db2RlLFxyXG4gICAgICBsb2NhdGlvbkNvZGU6IGNpdHkucGlja3VwTG9jYXRpb25Db2RlLFxyXG4gICAgICB2ZW5kb3I6IGNpdHkucGlja3VwVmVuZG9yLFxyXG4gICAgICB2ZW5kb3JDb2RlOiBjaXR5LnBpY2t1cFZlbmRvckNvZGVcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UGFyYW1zRm9yQ2FyYnlQb3N0Q29kZShkZXBvdDogSUNhckhpcmVEZXBvdCk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2NhdGlvblR5cGUgPSBMb2NhdGlvblR5cGVzLlBvc3Rjb2RlO1xyXG4gICAgdGhpcy5jaG9zZW5EaXN0YW5jZSA9IGRlcG90LmNob3NlbkRpc3RhbmNlO1xyXG5cclxuICAgIHRoaXMucG9zdGNvZGVEcm9wb2ZmID0ge1xyXG4gICAgICBhZGRyZXNzTGluZXM6IFtkZXBvdC5kcm9wb2ZmQWRkcmVzc0xpbmVzXSxcclxuICAgICAgdmVuZG9yQ29kZTogZGVwb3QudmVuZG9yQ29kZSxcclxuICAgICAgbG9jYXRpb25Db2RlOiBkZXBvdC5kcm9wT2ZmTG9jYXRpb25Db2RlLFxyXG4gICAgICBleHRlbmRlZExvY2F0aW9uQ29kZTogZGVwb3QuZHJvcE9mZkV4dGVuZGVkTG9jYXRpb25Db2RlLFxyXG4gICAgICBjaXR5TmFtZTogZGVwb3QuZHJvcG9mZkNpdHlOYW1lLFxyXG4gICAgICB2ZW5kb3I6IGRlcG90LmRyb3BvZmZWZW5kb3JcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5wb3N0Y29kZURyb3BvZmZSYXcgPSB7XHJcbiAgICAgIG5hbWU6IGRlcG90LmRyb3BvZmZQb3N0Q29kZSxcclxuICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5Qb3N0Y29kZSxcclxuICAgICAgbGF0aXR1ZGU6IGRlcG90LmRyb3BvZmZMYXRpdHVkZSxcclxuICAgICAgbG9uZ2l0dWRlOiBkZXBvdC5kcm9wb2ZmTG9uZ2l0dWRlXHJcbiAgICB9O1xyXG4gICAgdGhpcy5wb3N0Y29kZVBpY2t1cCA9IHtcclxuICAgICAgYWRkcmVzc0xpbmVzOiBbZGVwb3QucGlja3VwQWRkcmVzc0xpbmVzXSxcclxuICAgICAgdmVuZG9yQ29kZTogZGVwb3QudmVuZG9yQ29kZSxcclxuICAgICAgbG9jYXRpb25Db2RlOiBkZXBvdC5waWNrdXBMb2NhdGlvbkNvZGUsXHJcbiAgICAgIGV4dGVuZGVkTG9jYXRpb25Db2RlOiBkZXBvdC5waWNrdXBFeHRlbmRlZExvY2F0aW9uQ29kZSxcclxuICAgICAgY2l0eU5hbWU6IGRlcG90LnBpY2t1cENpdHlOYW1lLFxyXG4gICAgICB2ZW5kb3I6IGRlcG90LnBpY2t1cFZlbmRvclxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnBvc3Rjb2RlUGlja3VwUmF3ID0ge1xyXG4gICAgICBuYW1lOiBkZXBvdC5waWNrdXBQb3N0Q29kZSxcclxuICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5Qb3N0Y29kZSxcclxuICAgICAgbGF0aXR1ZGU6IGRlcG90LnBpY2t1cExhdGl0dWRlLFxyXG4gICAgICBsb25naXR1ZGU6IGRlcG90LnBpY2t1cExvbmdpdHVkZVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VhcmNoUXVlcnkoKTogUXVlcnlTZWFyY2hDYXJIaXJlQXJncyB7XHJcbiAgICBjb25zdCBxdWVyeTogUXVlcnlTZWFyY2hDYXJIaXJlQXJncyA9IHt9IGFzIFF1ZXJ5U2VhcmNoQ2FySGlyZUFyZ3M7XHJcbiAgICBzd2l0Y2ggKHRoaXMubG9jYXRpb25UeXBlKSB7XHJcbiAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5BaXJwb3J0OlxyXG4gICAgICAgIHF1ZXJ5LmFpcnBvcnQgPSB7XHJcbiAgICAgICAgICBwaWNrdXBDb2RlOiAnJyxcclxuICAgICAgICAgIGRyb3BvZmZDb2RlOiAnJ1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHF1ZXJ5LmFpcnBvcnQucGlja3VwQ29kZSA9IHRoaXMucGlja3VwX2xvY2F0aW9uLmdhdGV3YXk7XHJcbiAgICAgICAgcXVlcnkuYWlycG9ydC5kcm9wb2ZmQ29kZSA9IHRoaXMucmV0dXJuX3RvX3BpY2t1cFxyXG4gICAgICAgICAgPyB0aGlzLnBpY2t1cF9sb2NhdGlvbi5nYXRld2F5XHJcbiAgICAgICAgICA6IHRoaXMuZHJvcG9mZl9sb2NhdGlvbi5nYXRld2F5O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIExvY2F0aW9uVHlwZXMuQ2l0eTpcclxuICAgICAgICBxdWVyeS5kZXBvdCA9IHtcclxuICAgICAgICAgIHZlbmRvckNvZGU6IHRoaXMuY2l0eVBpY2t1cERlcG90LnZlbmRvckNvZGUsXHJcbiAgICAgICAgICBwaWNrdXBMb2NhdGlvbkNvZGU6IHRoaXMuY2l0eVBpY2t1cERlcG90LmxvY2F0aW9uQ29kZSxcclxuICAgICAgICAgIHBpY2t1cEV4dGVuZGVkTG9jYXRpb25Db2RlOiB0aGlzLmNpdHlQaWNrdXBEZXBvdC5leHRlbmRlZExvY2F0aW9uQ29kZSxcclxuICAgICAgICAgIGRyb3BPZmZMb2NhdGlvbkNvZGU6IHRoaXMuY2l0eURyb3BvZmZEZXBvdC5sb2NhdGlvbkNvZGUsXHJcbiAgICAgICAgICBkcm9wT2ZmRXh0ZW5kZWRMb2NhdGlvbkNvZGU6XHJcbiAgICAgICAgICAgIHRoaXMuY2l0eURyb3BvZmZEZXBvdC5leHRlbmRlZExvY2F0aW9uQ29kZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgLy8gT0xEIHBheWxvYWQgZm9yIGNpdHksIGFza2VkIHRvIGNoYW5nZVxyXG4gICAgICAgIC8vIHF1ZXJ5LmNpdHkgPSB7XHJcbiAgICAgICAgLy8gICBwaWNrdXBDb3VudHJ5Q29kZTogdGhpcy5jaXR5UGlja3VwLmNvdW50cnlDb2RlLFxyXG4gICAgICAgIC8vICAgcGlja3VwQ2l0eTogdGhpcy5jaXR5UGlja3VwLmlkLnRvU3RyaW5nKCksXHJcbiAgICAgICAgLy8gICBkcm9wb2ZmQ291bnRyeUNvZGU6IHRoaXMuY2l0eURyb3BvZmYuY291bnRyeUNvZGUsXHJcbiAgICAgICAgLy8gICBkcm9wb2ZmQ2l0eTogdGhpcy5jaXR5RHJvcG9mZi5pZC50b1N0cmluZygpXHJcbiAgICAgICAgLy8gfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLlBvc3Rjb2RlOlxyXG4gICAgICAgIHF1ZXJ5LmRlcG90ID0ge1xyXG4gICAgICAgICAgdmVuZG9yQ29kZTogdGhpcy5wb3N0Y29kZVBpY2t1cC52ZW5kb3JDb2RlLFxyXG4gICAgICAgICAgcGlja3VwTG9jYXRpb25Db2RlOiB0aGlzLnBvc3Rjb2RlUGlja3VwLmxvY2F0aW9uQ29kZSxcclxuICAgICAgICAgIHBpY2t1cEV4dGVuZGVkTG9jYXRpb25Db2RlOiB0aGlzLnBvc3Rjb2RlUGlja3VwLmV4dGVuZGVkTG9jYXRpb25Db2RlLFxyXG4gICAgICAgICAgZHJvcE9mZkxvY2F0aW9uQ29kZTogdGhpcy5wb3N0Y29kZURyb3BvZmYubG9jYXRpb25Db2RlLFxyXG4gICAgICAgICAgZHJvcE9mZkV4dGVuZGVkTG9jYXRpb25Db2RlOiB0aGlzLnBvc3Rjb2RlRHJvcG9mZi5leHRlbmRlZExvY2F0aW9uQ29kZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICBxdWVyeS5kcm9wb2ZmRGF0ZVRpbWUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0R3JhcGhRTERhdGVUaW1lKFxyXG4gICAgICB0aGlzLmRyb3BvZmZfZGF0ZXRpbWVcclxuICAgICk7XHJcbiAgICBxdWVyeS5waWNrdXBEYXRlVGltZSA9IHRoaXMuaGVscGVycy5mb3JtYXRHcmFwaFFMRGF0ZVRpbWUoXHJcbiAgICAgIHRoaXMucGlja3VwX2RhdGV0aW1lXHJcbiAgICApO1xyXG4gICAgcXVlcnkuYWlyY29uID0gdGhpcy5haXJDb247XHJcblxyXG4gICAgLy8gbm93IGZvciB0aGUgb3B0aW9uYWwgZmllbGRzIC0gbnVsbGlmeSB0aGVzZSBpZiB0aGV5IGFyZSAnLScgKEFueSlcclxuICAgIGlmICh0aGlzLmxvY2F0aW9uVHlwZSA9PT0gTG9jYXRpb25UeXBlcy5BaXJwb3J0KSB7XHJcbiAgICAgIHF1ZXJ5LnZlbmRvciA9IHRoaXMuY2hvc2VuVmVuZG9yID09PSAnLScgPyBudWxsIDogdGhpcy5jaG9zZW5WZW5kb3I7XHJcbiAgICB9XHJcbiAgICBxdWVyeS50cmFuc21pc3Npb24gPSB0aGlzLnRyYW5zbWlzc2lvbiB8fCBudWxsO1xyXG4gICAgcXVlcnkuY2xhc3MgPSB0aGlzLmNhckNsYXNzIHx8IG51bGw7XHJcbiAgICBxdWVyeS50eXBlID0gdGhpcy5jYXJUeXBlIHx8IG51bGw7XHJcbiAgICBxdWVyeS5lc3RpbWF0ZWREYWlseURpc3RhbmNlID0gdGhpcy5lc3RpbWF0ZWRNaWxlYWdlIHx8IG51bGw7XHJcbiAgICBxdWVyeS5lc3RpbWF0ZWREYWlseURpc3RhbmNlVW5pdHMgPSB0aGlzLmVzdGltYXRlZE1pbGVhZ2VcclxuICAgICAgPyBEaXN0YW5jZVR5cGVzLk1cclxuICAgICAgOiBudWxsOyAvLyBTZXR0aW5nIGFzIG1pbGVzIGZvciBub3cgLSBtYXkgc3dhcCBvdXQgZm9yIGtpbG9tZXRlcnMgbGF0ZXJcclxuXHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFF1ZXJ5U2VhcmNoQ2FySGlyZUFyZ3M+KHF1ZXJ5KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEB0b2RvIC0gdHVybiB0aGlzIGludG8gYSBCRSBjYWxsIHRvIGR5bmFtaWNhbGx5IGdldCB0aGUgbGlzdCBvZiBjYXIgY2xhc3Nlc1xyXG4gICAqIEByZXR1cm5zIGFsbCBjYXIgY2xhc3NlcyBhcyBhbiBhcnJheVxyXG4gICAqL1xyXG4gIGdldENhckNsYXNzZXMoKTogT2JzZXJ2YWJsZTxJQ2FyQ2xhc3Nlc1tdPiB7XHJcbiAgICByZXR1cm4gb2YodGhpcy5fY2FyX2NsYXNzZXMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TG9jYXRpb25UeXBlcygpIHtcclxuICAgIHJldHVybiBvZih0aGlzLl9sb2NhdGlvbl90eXBlcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBmaWx0ZXIgZG93biB0aGUgY2FyIHJlc3VsdHMgYmFzZWQgb24gdXNlciBjaG9zZW4gZmlsdGVyc1xyXG4gICAqL1xyXG4gIGZpbHRlclJlc3VsdHMoYXBwbGllZEZpbHRlcnM6IENhckhpcmVGaWx0ZXJzLCBzZWxlY3RlZFNvcnQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgbGV0IGZ1bGxSZXN1bHRzOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSA9IHRoaXMuaGVscGVycy5jbG9uZShcclxuICAgICAgdGhpcy5mdWxsUmVzdWx0c1xyXG4gICAgKTtcclxuXHJcbiAgICAvLyBub3cgYXBwbHkgZmlsdGVyc1xyXG4gICAgLy8gcHJpY2UgZmlsdGVyc1xyXG4gICAgZnVsbFJlc3VsdHMgPSBmdWxsUmVzdWx0cy5maWx0ZXIoKHJlc3VsdDogQ2FySGlyZVF1b3RlUmVzdWx0KSA9PiB7XHJcbiAgICAgIGNvbnN0IHByaWNlID0gdGhpcy5nZXRQcmljZShyZXN1bHQpO1xyXG5cclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBwcmljZSA+PSBhcHBsaWVkRmlsdGVycy5taW5QcmljZSAmJiBwcmljZSA8PSBhcHBsaWVkRmlsdGVycy5tYXhQcmljZVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gYXBwbHkgdHJhbnNtaXNzaW9uIGZpbHRlcnNcclxuICAgIGZ1bGxSZXN1bHRzID0gdGhpcy5maWx0ZXJCeVRyYW5zbWlzc2lvblR5cGUoXHJcbiAgICAgIGFwcGxpZWRGaWx0ZXJzLnRyYW5zbWlzc2lvbnMsXHJcbiAgICAgIGZ1bGxSZXN1bHRzXHJcbiAgICApO1xyXG5cclxuICAgIC8vIGFpcmNvblxyXG4gICAgZnVsbFJlc3VsdHMgPSB0aGlzLmZpbHRlckJ5QWlyY29uVHlwZShcclxuICAgICAgYXBwbGllZEZpbHRlcnMuYWlyQ29uZGl0aW9uaW5nLFxyXG4gICAgICBmdWxsUmVzdWx0c1xyXG4gICAgKTtcclxuXHJcbiAgICAvLyBjYXIgdHlwZXMgKGNsYXNzKVxyXG4gICAgZnVsbFJlc3VsdHMgPSB0aGlzLmZpbHRlckJ5Q2FyVHlwZShhcHBsaWVkRmlsdGVycy50eXBlcywgZnVsbFJlc3VsdHMpO1xyXG5cclxuICAgIC8vIGNvbXBhbnlcclxuICAgIGZ1bGxSZXN1bHRzID0gdGhpcy5maWx0ZXJCeUNvbXBhbnkoYXBwbGllZEZpbHRlcnMuY29tcGFuaWVzLCBmdWxsUmVzdWx0cyk7XHJcblxyXG4gICAgLy8gbGFzdGx5IGFwcGx5IGFueSByZXF1aXJlZCBzb3J0aW5nXHJcbiAgICBmdWxsUmVzdWx0cyA9IHRoaXMuc29ydFJlc3VsdHMoc2VsZWN0ZWRTb3J0LCBmdWxsUmVzdWx0cyk7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChmdWxsUmVzdWx0cyk7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJCeUNvbXBhbnkoXHJcbiAgICBjb21wYW5pZXM6IFNlbGVjdEZpbHRlcltdLFxyXG4gICAgY2FyczogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXlcclxuICApOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZCA9IGNvbXBhbmllcy5maWx0ZXIoKGNvbXBhbnkpID0+IGNvbXBhbnkuc2VsZWN0ZWQpO1xyXG5cclxuICAgIGlmIChzZWxlY3RlZC5sZW5ndGgpIHtcclxuICAgICAgY2FycyA9IGNhcnMuZmlsdGVyKChjYXI6IENhckhpcmVRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGhhdmVTZWxlY3RlZCA9IHNlbGVjdGVkLmZpbmQoXHJcbiAgICAgICAgICAoc2VsYzogYW55KSA9PlxyXG4gICAgICAgICAgICBzZWxjLnZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT1cclxuICAgICAgICAgICAgY2FyLmlkZW50aWZpZXJzLnZlbmRvci50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGhhdmVTZWxlY3RlZDtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNhcnM7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJCeUNhclR5cGUoXHJcbiAgICB0eXBlczogU2VsZWN0RmlsdGVyW10sXHJcbiAgICBjYXJzOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheVxyXG4gICk6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5IHtcclxuICAgIC8vIHRoaXMgaXMgYSBmaWx0ZXIgdHlwZSB3aGljaCBhbGxvd3MgbW9yZSB0aGFuIG9uZSB0byBiZSBzZXRcclxuICAgIC8vIGlmIG5vbmUgYXJlIHNldCBhbGxvdyBhbGwgdGhyb3VnaFxyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkID0gdHlwZXMuZmlsdGVyKCh0eXBlKSA9PiB0eXBlLnNlbGVjdGVkKTtcclxuXHJcbiAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoKSB7XHJcbiAgICAgIGNhcnMgPSBjYXJzLmZpbHRlcigoY2FyOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBoYXZlU2VsZWN0ZWQgPSBzZWxlY3RlZC5maW5kKFxyXG4gICAgICAgICAgKHNlbGMpID0+XHJcbiAgICAgICAgICAgIHNlbGMudmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PVxyXG4gICAgICAgICAgICBjYXIuZGlzcGxheVJlY29yZC52ZWhpY2xlLmNsYXNzLnRvTG93ZXJDYXNlKClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gaGF2ZVNlbGVjdGVkO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2FycztcclxuICB9XHJcblxyXG4gIGZpbHRlckJ5VHJhbnNtaXNzaW9uVHlwZShcclxuICAgIHRyYW5taXNzaW9uczogU2VsZWN0RmlsdGVyW10sXHJcbiAgICBjYXJzOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheVxyXG4gICk6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5IHtcclxuICAgIGNvbnN0IHNlbGVjdGVkVHJhbnNtaXNzaW9uID0gdHJhbm1pc3Npb25zLmZpbmQoKHRyYW5zKSA9PiB7XHJcbiAgICAgIHJldHVybiB0cmFucy5zZWxlY3RlZDtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChzZWxlY3RlZFRyYW5zbWlzc2lvbiAmJiBzZWxlY3RlZFRyYW5zbWlzc2lvbi52YWx1ZSAhPT0gJ1knKSB7XHJcbiAgICAgIC8vIG5vdCAnQW55J1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNhcnMgPSBjYXJzLmZpbHRlcigoY2FyOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHRyYW5zID0gY2FyLmlkZW50aWZpZXJzLnZlaFR5cGVbMl07XHJcblxyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgdHJhbnMudG9Mb3dlckNhc2UoKSA9PT1cclxuICAgICAgICAgICAgc2VsZWN0ZWRUcmFuc21pc3Npb24udmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYCsrKyBFcnJvciBmaWx0ZXJpbmcgdHJhbnNtaXNzaW9uczogJHtlcnJvcn0gKysrYCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2FycztcclxuICB9XHJcblxyXG4gIGZpbHRlckJ5QWlyY29uVHlwZShcclxuICAgIGFpcmNvbnM6IFNlbGVjdEZpbHRlcltdLFxyXG4gICAgY2FyczogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXlcclxuICApOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZEFpcmNvbiA9IGFpcmNvbnMuZmluZCgoYWMpID0+IHtcclxuICAgICAgcmV0dXJuIGFjLnNlbGVjdGVkO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkQWlyY29uICYmIHNlbGVjdGVkQWlyY29uLnZhbHVlICE9PSAnQScpIHtcclxuICAgICAgLy8gbm90ICdBbnknXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY2FycyA9IGNhcnMuZmlsdGVyKChjYXI6IENhckhpcmVRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgYWMgPSBjYXIuaWRlbnRpZmllcnMudmVoVHlwZVszXTtcclxuXHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBhYy50b0xvd2VyQ2FzZSgpID09PSBzZWxlY3RlZEFpcmNvbi52YWx1ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgKysrIEVycm9yIGZpbHRlcmluZyBhaXJjb25zOiAke2Vycm9yfSArKytgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjYXJzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gc29ydCB0aGUgcmVzdWx0c1xyXG4gICAqIEBwYXJhbSBzZWxlY3RlZFNvcnQgLSB0aGUgc29ydCB3ZSBoYXZlIGNob3NlblxyXG4gICAqIEBwYXJhbSByZXN1bHRzIC0gb3B0aW9uYWxseSBwYXNzIGluIHRoZSByZXN1bHRzLCBpZiBub3QgcHJvdmlkZWQgLSB1c2VzIGludGVybmFsIHJlc3VsdHMgKG5vdCBmdWxsLCB3b3VsZCBjYXVzZSBpc3N1ZXMpXHJcbiAgICovXHJcbiAgc29ydFJlc3VsdHMoXHJcbiAgICBzZWxlY3RlZFNvcnQ6IG51bWJlcixcclxuICAgIHJlc3VsdHM/OiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheVxyXG4gICk6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5IHtcclxuICAgIGxldCBmdWxsUmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZShcclxuICAgICAgcmVzdWx0cyA/IHJlc3VsdHMgOiB0aGlzLnJlc3VsdHMudmFsdWVcclxuICAgICk7XHJcbiAgICBzd2l0Y2ggKHNlbGVjdGVkU29ydCkge1xyXG4gICAgICBjYXNlIDA6IC8vIGNoZWFwZXN0XHJcbiAgICAgICAgZnVsbFJlc3VsdHMgPSBmdWxsUmVzdWx0cy5zb3J0KFxyXG4gICAgICAgICAgKGE6IENhckhpcmVRdW90ZVJlc3VsdCwgYjogQ2FySGlyZVF1b3RlUmVzdWx0KSA9PlxyXG4gICAgICAgICAgICB0aGlzLmdldFByaWNlKGEpIC0gdGhpcy5nZXRQcmljZShiKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTogLy8gZXhwZW5zaXZlXHJcbiAgICAgICAgZnVsbFJlc3VsdHMgPSBmdWxsUmVzdWx0cy5zb3J0KFxyXG4gICAgICAgICAgKGE6IENhckhpcmVRdW90ZVJlc3VsdCwgYjogQ2FySGlyZVF1b3RlUmVzdWx0KSA9PlxyXG4gICAgICAgICAgICB0aGlzLmdldFByaWNlKGIpIC0gdGhpcy5nZXRQcmljZShhKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMjogLy8gcHJlZmVycmVkIFRPRE9cclxuICAgICAgICBmdWxsUmVzdWx0cyA9IHRoaXMuc29ydEJ5UHJlZmVycmVkKGZ1bGxSZXN1bHRzKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6IC8vIGJyYW5kXHJcbiAgICAgICAgZnVsbFJlc3VsdHMgPSB0aGlzLnNvcnRCeUJyYW5kKGZ1bGxSZXN1bHRzKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA0OiAvLyBzaXplXHJcbiAgICAgICAgZnVsbFJlc3VsdHMgPSB0aGlzLnNvcnRCeVNpemUoZnVsbFJlc3VsdHMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgLy8gZmFsbGJhY2sgdG8gd2hhdGV2ZXIgd2FzIGJlZm9yZVxyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQoZnVsbFJlc3VsdHMpO1xyXG4gICAgcmV0dXJuIGZ1bGxSZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gc29ydCB0aGUgcmVzdWx0cyBleHBlbnNpdmVcclxuICAgKiBAcGFyYW0gcmVzdWx0cyAtIGZ1bGwgcmVzdWx0cyBmcm9tIHNvcnQgcmVzdWx0cyBmdW5jdGlvblxyXG4gICAqL1xyXG5cclxuICBzb3J0RXhwZW5zaXZlKHJlc3VsdHM/OiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSk6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5IHtcclxuICAgIGNvbnN0IGZ1bGxSZXN1bHRzID0gdGhpcy5oZWxwZXJzLmNsb25lKFxyXG4gICAgICByZXN1bHRzID8gcmVzdWx0cyA6IHRoaXMucmVzdWx0cy52YWx1ZVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHNvcnRlZFJlc3VsdHMgPSBmdWxsUmVzdWx0cy5zb3J0KFxyXG4gICAgICAoYTogQ2FySGlyZVF1b3RlUmVzdWx0LCBiOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+XHJcbiAgICAgICAgdGhpcy5nZXRQcmljZShiKSAtIHRoaXMuZ2V0UHJpY2UoYSlcclxuICAgICk7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChzb3J0ZWRSZXN1bHRzKTtcclxuICAgIHJldHVybiBzb3J0ZWRSZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gc29ydCB0aGUgcmVzdWx0cyBjaGVhcGVzdFxyXG4gICAqIEBwYXJhbSByZXN1bHRzIC0gZnVsbCByZXN1bHRzIGZyb20gc29ydCByZXN1bHRzIGZ1bmN0aW9uXHJcbiAgICovXHJcblxyXG4gIHNvcnRDaGVhcGVzdChyZXN1bHRzPzogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkpOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSB7XHJcbiAgICBjb25zdCBmdWxsUmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZShcclxuICAgICAgcmVzdWx0cyA/IHJlc3VsdHMgOiB0aGlzLnJlc3VsdHMudmFsdWVcclxuICAgICk7XHJcbiAgICBjb25zdCBzb3J0ZWRSZXN1bHRzID0gZnVsbFJlc3VsdHMuc29ydChcclxuICAgICAgKGE6IENhckhpcmVRdW90ZVJlc3VsdCwgYjogQ2FySGlyZVF1b3RlUmVzdWx0KSA9PlxyXG4gICAgICAgIHRoaXMuZ2V0UHJpY2UoYSkgLSB0aGlzLmdldFByaWNlKGIpXHJcbiAgICApO1xyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQoc29ydGVkUmVzdWx0cyk7XHJcbiAgICByZXR1cm4gc29ydGVkUmVzdWx0cztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIHNvcnQgdGhlIHJlc3VsdHNcclxuICAgKiBAcGFyYW0gcmVzdWx0cyAtIGZ1bGwgcmVzdWx0cyBmcm9tIHNvcnQgcmVzdWx0cyBmdW5jdGlvblxyXG4gICAqL1xyXG4gIHNvcnRCeVNpemUocmVzdWx0cz86IENhckhpcmVRdW90ZVJlc3VsdEFycmF5KTogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkge1xyXG4gICAgY29uc3QgZnVsbFJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUoXHJcbiAgICAgIHJlc3VsdHMgPyByZXN1bHRzIDogdGhpcy5yZXN1bHRzLnZhbHVlXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc29ydGVkUmVzdWx0cyA9IGZ1bGxSZXN1bHRzLnNvcnQoXHJcbiAgICAgIChhOiBDYXJIaXJlUXVvdGVSZXN1bHQsIGI6IENhckhpcmVRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGxldCBhVmFsOiBudW1iZXI7XHJcbiAgICAgICAgbGV0IGJWYWw6IG51bWJlcjtcclxuICAgICAgICBhVmFsID0gdGhpcy5jYXJDbGFzc01hcFthLmRpc3BsYXlSZWNvcmQudmVoaWNsZS5jbGFzcy50b0xvd2VyQ2FzZSgpXTtcclxuICAgICAgICBiVmFsID0gdGhpcy5jYXJDbGFzc01hcFtiLmRpc3BsYXlSZWNvcmQudmVoaWNsZS5jbGFzcy50b0xvd2VyQ2FzZSgpXTtcclxuICAgICAgICBpZiAoYVZhbCA+PSAwICYmIGJWYWwgPj0gMCkge1xyXG4gICAgICAgICAgcmV0dXJuIGFWYWwgLSBiVmFsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gLTE7IC8vIGp1c3QgcGxhY2UgdGhlbSBhdCBlbmQgIC0gdW5yZWNvZ25pc2VkIHByb2R1Y3QgZGVzY3JpcHRpb25cclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHNvcnRlZFJlc3VsdHMpO1xyXG4gICAgcmV0dXJuIHNvcnRlZFJlc3VsdHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBzb3J0IHRoZSByZXN1bHRzXHJcbiAgICogQHBhcmFtIHJlc3VsdHMgLSBmdWxsIHJlc3VsdHMgZnJvbSBzb3J0IHJlc3VsdHMgZnVuY3Rpb25cclxuICAgKi9cclxuICBzb3J0QnlCcmFuZChyZXN1bHRzPzogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkpOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSB7XHJcbiAgICBjb25zdCBmdWxsUmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZShcclxuICAgICAgcmVzdWx0cyA/IHJlc3VsdHMgOiB0aGlzLnJlc3VsdHMudmFsdWVcclxuICAgICk7XHJcbiAgICBjb25zdCBzb3J0ZWRSZXN1bHRzID0gZnVsbFJlc3VsdHMuc29ydChcclxuICAgICAgKGE6IENhckhpcmVRdW90ZVJlc3VsdCwgYjogQ2FySGlyZVF1b3RlUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgbGV0IGJyYW5kQSA9IGEuaWRlbnRpZmllcnMudmVuZG9yO1xyXG4gICAgICAgIGxldCBicmFuZEIgPSBiLmlkZW50aWZpZXJzLnZlbmRvcjtcclxuXHJcbiAgICAgICAgLy8gc3dpdGNoaW5nIGFzIHRoZXNlIHN0cmluZ3MgZG9uJ3QgbWF0Y2ggdGhlIGJyYW5kIG5hbWVcclxuICAgICAgICBzd2l0Y2ggKGJyYW5kQSkge1xyXG4gICAgICAgICAgY2FzZSAnWkUnOlxyXG4gICAgICAgICAgICBicmFuZEEgPSAnSEUnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgJ1pJJzpcclxuICAgICAgICAgICAgYnJhbmRBID0gJ0FWJztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2ggKGJyYW5kQikge1xyXG4gICAgICAgICAgY2FzZSAnWkUnOlxyXG4gICAgICAgICAgICBicmFuZEIgPSAnSEUnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgJ1pJJzpcclxuICAgICAgICAgICAgYnJhbmRCID0gJ0FWJztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYnJhbmRBIDwgYnJhbmRCKSB7XHJcbiAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfSBlbHNlIGlmIChicmFuZEEgPiBicmFuZEIpIHtcclxuICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQoc29ydGVkUmVzdWx0cyk7XHJcbiAgICByZXR1cm4gc29ydGVkUmVzdWx0cztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBAZGVzY3JpcHRpb24gLSBzb3J0IHRoZSByZXN1bHRzXHJcbiAqIEBwYXJhbSByZXN1bHRzIC0gZnVsbCByZXN1bHRzIGZyb20gc29ydCByZXN1bHRzIGZ1bmN0aW9uXHJcbiAqL1xyXG4gIHNvcnRCeVByZWZlcnJlZChyZXN1bHRzPzogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkpOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSB7XHJcbiAgICBjb25zdCBmdWxsUmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZShcclxuICAgICAgcmVzdWx0cyA/IHJlc3VsdHMgOiB0aGlzLnJlc3VsdHMudmFsdWVcclxuICAgICk7XHJcbiAgICBjb25zdCBzb3J0ZWRSZXN1bHRzID0gZnVsbFJlc3VsdHMuc29ydCgoYTogQ2FySGlyZVF1b3RlUmVzdWx0LCBiOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+IHtcclxuICAgICAgY29uc3QgYVByZWYgPSBhLnRtY1ByZWZlcnJlZCB8fCBhLmNvbXBhbnlQcmVmZXJyZWQgfHwgYS5vZmZpY2VQcmVmZXJyZWQgPyAxIDogMDtcclxuICAgICAgY29uc3QgYlByZWYgPSBiLnRtY1ByZWZlcnJlZCB8fCBiLmNvbXBhbnlQcmVmZXJyZWQgfHwgYi5vZmZpY2VQcmVmZXJyZWQgPyAxIDogMDtcclxuICAgICAgaWYgKGFQcmVmID4gYlByZWYpIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH0gZWxzZSBpZiAoYVByZWYgPCBiUHJlZikge1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAwXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChzb3J0ZWRSZXN1bHRzKTtcclxuICAgIHJldHVybiBzb3J0ZWRSZXN1bHRzO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgdGhlIHByaWNlIG9mIGEgaW5kaXZpZHVhbCBjYXJcclxuICAgKi9cclxuICBnZXRQcmljZShjYXI6IENhckhpcmVRdW90ZVJlc3VsdCk6IG51bWJlciB7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gTnVtYmVyKGNhci5kaXNwbGF5UmVjb3JkLmNoYXJnZXNbMF0uYW1vdW50KTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7IH1cclxuXHJcbiAgICByZXR1cm4gMDtcclxuICB9XHJcblxyXG4gIGdldE1pblByaWNlKGNhcnM6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5KTogbnVtYmVyIHtcclxuICAgIHJldHVybiBjYXJzLnJlZHVjZSgobWluOiBudW1iZXIsIGNhcjogQ2FySGlyZVF1b3RlUmVzdWx0KSA9PiB7XHJcbiAgICAgIGNvbnN0IHByaWNlID0gdGhpcy5nZXRQcmljZShjYXIpO1xyXG4gICAgICBpZiAocHJpY2UgPCBtaW4pIHtcclxuICAgICAgICBtaW4gPSBwcmljZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbWluO1xyXG4gICAgfSwgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWF4UHJpY2UoY2FyczogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGNhcnMucmVkdWNlKChtYXg6IG51bWJlciwgY2FyOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+IHtcclxuICAgICAgY29uc3QgcHJpY2UgPSB0aGlzLmdldFByaWNlKGNhcik7XHJcbiAgICAgIGlmIChwcmljZSA+IG1heCkge1xyXG4gICAgICAgIG1heCA9IHByaWNlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBtYXg7XHJcbiAgICB9LCBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUik7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVTZWFyY2hGcm9tRXhwaXJlZEJhc2tldEl0ZW0oYmFza2V0SXRlbTogQmFza2V0SXRlbSk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2VhcmNoQ2FySGlyZVF1ZXJ5OiBTZWFyY2hDYXJIaXJlUXVlcnlWYXJpYWJsZXMgPVxyXG4gICAgICBiYXNrZXRJdGVtLnNlYXJjaFF1ZXJ5O1xyXG4gICAgaWYgKHNlYXJjaENhckhpcmVRdWVyeSkge1xyXG4gICAgICB0aGlzLmNob3NlblZlbmRvciA9IHNlYXJjaENhckhpcmVRdWVyeS52ZW5kb3I7XHJcbiAgICAgIHRoaXMuY2FyQ2xhc3MgPSBzZWFyY2hDYXJIaXJlUXVlcnkuY2xhc3M7XHJcbiAgICAgIHRoaXMuY2FyVHlwZSA9IHNlYXJjaENhckhpcmVRdWVyeS50eXBlO1xyXG4gICAgICB0aGlzLnRyYW5zbWlzc2lvbiA9IHNlYXJjaENhckhpcmVRdWVyeS50cmFuc21pc3Npb247XHJcbiAgICAgIHRoaXMuYWlyQ29uID0gc2VhcmNoQ2FySGlyZVF1ZXJ5LmFpcmNvbjtcclxuICAgICAgdGhpcy5lc3RpbWF0ZWRNaWxlYWdlID0gc2VhcmNoQ2FySGlyZVF1ZXJ5LmVzdGltYXRlZERhaWx5RGlzdGFuY2U7XHJcbiAgICAgIHRoaXMuZHJvcG9mZl9kYXRldGltZSA9IG1vbWVudChzZWFyY2hDYXJIaXJlUXVlcnkuZHJvcG9mZkRhdGVUaW1lKTtcclxuICAgICAgdGhpcy5waWNrdXBfZGF0ZXRpbWUgPSBtb21lbnQoc2VhcmNoQ2FySGlyZVF1ZXJ5LnBpY2t1cERhdGVUaW1lKTtcclxuXHJcbiAgICAgIGlmIChzZWFyY2hDYXJIaXJlUXVlcnkuY2l0eSkge1xyXG4gICAgICAgIHRoaXMuZ2V0UGFyYW1zRm9yQ2FyYnlDaXR5KHNlYXJjaENhckhpcmVRdWVyeS5jaXR5KTtcclxuICAgICAgfSBlbHNlIGlmIChzZWFyY2hDYXJIaXJlUXVlcnkuYWlycG9ydCkge1xyXG4gICAgICAgIHRoaXMuZ2V0UGFyYW1zRm9yQ2FyYnlBaXJwb3J0KHNlYXJjaENhckhpcmVRdWVyeS5haXJwb3J0KTtcclxuICAgICAgfSBlbHNlIGlmIChzZWFyY2hDYXJIaXJlUXVlcnkuZGVwb3QpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNlYXJjaEZvckNhcmJ5UG9zdENvZGUoXHJcbiAgICAgICAgICBzZWFyY2hDYXJIaXJlUXVlcnksXHJcbiAgICAgICAgICBiYXNrZXRJdGVtLmRldGFpbFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBhZGQgVHJhdmVsbGVyc1xyXG4gICAgaWYgKGJhc2tldEl0ZW0udXNlcnMpIHtcclxuICAgICAgYmFza2V0SXRlbS51c2Vycy5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuYWRkVHJhdmVsbGVyKHVzZXIpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlU2VhcmNoRm9yQ2FyYnlQb3N0Q29kZShkZXBvdDogYW55LCBkZXRhaWw6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2NhdGlvblR5cGUgPSBMb2NhdGlvblR5cGVzLlBvc3Rjb2RlO1xyXG4gICAgdGhpcy5jaG9zZW5EaXN0YW5jZSA9IGRlcG90LmNob3NlbkRpc3RhbmNlO1xyXG5cclxuICAgIHRoaXMucG9zdGNvZGVEcm9wb2ZmUmF3ID0ge1xyXG4gICAgICBuYW1lOiBkZXRhaWwuZHJvcE9mZkxvY2F0aW9uLnBvc3Rjb2RlLFxyXG4gICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLlBvc3Rjb2RlXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMucG9zdGNvZGVQaWNrdXBSYXcgPSB7XHJcbiAgICAgIG5hbWU6IGRldGFpbC5waWNrVXBMb2NhdGlvbi5wb3N0Y29kZSxcclxuICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5Qb3N0Y29kZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUZyb21QcmV2aW91c1NlYXJjaGVzKFxyXG4gICAgcHJldmlvdXNJdGVtczogUmVjb3JkPFNlcnZpY2VUeXBlLCBCYXNrZXRJdGVtPlxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coJ1BSRVBPUFVMQVRJTkcgQ0FSSElSRSBGT1JNJyk7XHJcbiAgICBjb25zdCBmbGlnaHRJdGVtOiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyA9XHJcbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuRmxpZ2h0XT8uc2VhcmNoUXVlcnk7XHJcbiAgICBjb25zdCByYWlsSXRlbTogU2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzID1cclxuICAgICAgcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5SYWlsXT8uc2VhcmNoUXVlcnk7XHJcbiAgICBjb25zdCBob3RlbEl0ZW06IFNlYXJjaEhvdGVsc1F1ZXJ5VmFyaWFibGVzID1cclxuICAgICAgcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5SYWlsXT8uc2VhcmNoUXVlcnk7XHJcbiAgICBjb25zdCBpcmxJdGVtOiBTZWFyY2hJcmxRdWVyeVZhcmlhYmxlcyA9IFxyXG4gICAgICBwcmV2aW91c0l0ZW1zW1NlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsXT8uc2VhcmNoUXVlcnlcclxuICAgIGlmIChmbGlnaHRJdGVtKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgbGV0IHN0YXJ0RGF0ZSA9XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XS5vdXRCb3VuZERhdGUudG9EYXRlKCk7XHJcbiAgICAgICAgbGV0IGVuZERhdGUgPVxyXG4gICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF0uaW5ib3VuZERhdGUudG9EYXRlKCk7XHJcbiAgICAgICAgdGhpcy5sb2NhdGlvblR5cGUgPSBMb2NhdGlvblR5cGVzLkFpcnBvcnQ7XHJcbiAgICAgICAgdGhpcy5waWNrdXBfZGF0ZXRpbWUgPVxyXG4gICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF0ub3V0Qm91bmREYXRlO1xyXG4gICAgICAgIHRoaXMuZHJvcG9mZl9kYXRldGltZSA9XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XS5pbmJvdW5kRGF0ZTtcclxuICAgICAgICB0aGlzLnBpY2t1cF9kYXRlID0ge1xyXG4gICAgICAgICAgZGF5OiBzdGFydERhdGUuZ2V0VVRDRGF0ZSgpLFxyXG4gICAgICAgICAgbW9udGg6IHN0YXJ0RGF0ZS5nZXRVVENNb250aCgpICsgMSxcclxuICAgICAgICAgIHllYXI6IHN0YXJ0RGF0ZS5nZXRVVENGdWxsWWVhcigpXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmRyb3BvZmZfZGF0ZSA9IHtcclxuICAgICAgICAgIGRheTogZW5kRGF0ZS5nZXRVVENEYXRlKCksXHJcbiAgICAgICAgICBtb250aDogZW5kRGF0ZS5nZXRVVENNb250aCgpICsgMSxcclxuICAgICAgICAgIHllYXI6IGVuZERhdGUuZ2V0VVRDRnVsbFllYXIoKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5waWNrdXBfbG9jYXRpb24gPSB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XVxyXG4gICAgICAgICAgLmFycml2ZUxvY2F0aW9uIGFzIE9CVEFpcnBvcnREZXRhaWxzO1xyXG4gICAgICAgIHRoaXMuZHJvcG9mZl9sb2NhdGlvbiA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5GbGlnaHRdXHJcbiAgICAgICAgICAuYXJyaXZlTG9jYXRpb24gYXMgT0JUQWlycG9ydERldGFpbHM7XHJcbiAgICAgICAgdGhpcy5waWNrdXBfY291bnRyeSA9IChcclxuICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5GbGlnaHRdXHJcbiAgICAgICAgICAgIC5hcnJpdmVMb2NhdGlvbiBhcyBPQlRBaXJwb3J0RGV0YWlsc1xyXG4gICAgICAgICkuY291bnRyeUNvZGU7XHJcbiAgICAgICAgdGhpcy5kcm9wb2ZmX2NvdW50cnkgPSAoXHJcbiAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XVxyXG4gICAgICAgICAgICAuYXJyaXZlTG9jYXRpb24gYXMgT0JUQWlycG9ydERldGFpbHNcclxuICAgICAgICApLmNvdW50cnlDb2RlO1xyXG4gICAgICB9IGNhdGNoIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgY2FyaGlyZSBmcm9tIGZsaWdodCBpdGVtJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHJhaWxJdGVtKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgbGV0IHN0YXJ0RGF0ZSA9XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF0ub3V0Qm91bmREYXRlVGltZS50b0RhdGUoKTtcclxuICAgICAgICBsZXQgZW5kRGF0ZSA9XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF0uaW5Cb3VuZERhdGVUaW1lLnRvRGF0ZSgpO1xyXG4gICAgICAgIHRoaXMucGlja3VwX2RhdGV0aW1lID1cclxuICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5SYWlsXS5vdXRCb3VuZERhdGVUaW1lO1xyXG4gICAgICAgIHRoaXMuZHJvcG9mZl9kYXRldGltZSA9XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF0uaW5Cb3VuZERhdGVUaW1lO1xyXG4gICAgICAgIHRoaXMucGlja3VwX2RhdGUgPSB7XHJcbiAgICAgICAgICBkYXk6IHN0YXJ0RGF0ZS5nZXRVVENEYXRlKCksXHJcbiAgICAgICAgICBtb250aDogc3RhcnREYXRlLmdldFVUQ01vbnRoKCkgKyAxLFxyXG4gICAgICAgICAgeWVhcjogc3RhcnREYXRlLmdldFVUQ0Z1bGxZZWFyKClcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZHJvcG9mZl9kYXRlID0ge1xyXG4gICAgICAgICAgZGF5OiBlbmREYXRlLmdldFVUQ0RhdGUoKSxcclxuICAgICAgICAgIG1vbnRoOiBlbmREYXRlLmdldFVUQ01vbnRoKCkgKyAxLFxyXG4gICAgICAgICAgeWVhcjogZW5kRGF0ZS5nZXRVVENGdWxsWWVhcigpXHJcbiAgICAgICAgfTtcclxuICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGNhcmhpcmUgZnJvbSByYWlsIGl0ZW0nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXJsSXRlbSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGxldCBzdGFydERhdGUgPVxyXG4gICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsXS5vdXRCb3VuZERhdGVUaW1lLnRvRGF0ZSgpO1xyXG4gICAgICAgIGxldCBlbmREYXRlID1cclxuICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5JbnRlcm5hdGlvbmFsUmFpbF0ucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUudG9EYXRlKCk7XHJcbiAgICAgICAgdGhpcy5waWNrdXBfZGF0ZXRpbWUgPVxyXG4gICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsXS5vdXRCb3VuZERhdGVUaW1lO1xyXG4gICAgICAgIHRoaXMuZHJvcG9mZl9kYXRldGltZSA9XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWxdLnJldHVybkRlcGFydHVyZURhdGVUaW1lO1xyXG4gICAgICAgIHRoaXMucGlja3VwX2RhdGUgPSB7XHJcbiAgICAgICAgICBkYXk6IHN0YXJ0RGF0ZS5nZXRVVENEYXRlKCksXHJcbiAgICAgICAgICBtb250aDogc3RhcnREYXRlLmdldFVUQ01vbnRoKCkgKyAxLFxyXG4gICAgICAgICAgeWVhcjogc3RhcnREYXRlLmdldFVUQ0Z1bGxZZWFyKClcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZHJvcG9mZl9kYXRlID0ge1xyXG4gICAgICAgICAgZGF5OiBlbmREYXRlLmdldFVUQ0RhdGUoKSxcclxuICAgICAgICAgIG1vbnRoOiBlbmREYXRlLmdldFVUQ01vbnRoKCkgKyAxLFxyXG4gICAgICAgICAgeWVhcjogZW5kRGF0ZS5nZXRVVENGdWxsWWVhcigpXHJcbiAgICAgICAgfTtcclxuICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGNhcmhpcmUgZnJvbSBpbnRlcm5hdGlvbmFsIHJhaWwgaXRlbScpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChob3RlbEl0ZW0pIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBsZXQgc3RhcnREYXRlID1cclxuICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5Ib3RlbF0uY2hlY2tpbl9kYXRlLnRvRGF0ZSgpO1xyXG4gICAgICAgIGxldCBlbmREYXRlID1cclxuICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5Ib3RlbF0uY2hlY2tvdXRfZGF0ZS50b0RhdGUoKTtcclxuICAgICAgICAvLyB0aGlzLmxvY2F0aW9uVHlwZSA9IExvY2F0aW9uVHlwZXMuO1xyXG4gICAgICAgIHRoaXMucGlja3VwX2RhdGV0aW1lID1cclxuICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5Ib3RlbF0uY2hlY2tpbl9kYXRlO1xyXG4gICAgICAgIHRoaXMuZHJvcG9mZl9kYXRldGltZSA9XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuSG90ZWxdLmNoZWNrb3V0X2RhdGU7XHJcbiAgICAgICAgdGhpcy5waWNrdXBfZGF0ZSA9IHtcclxuICAgICAgICAgIGRheTogc3RhcnREYXRlLmdldFVUQ0RhdGUoKSxcclxuICAgICAgICAgIG1vbnRoOiBzdGFydERhdGUuZ2V0VVRDTW9udGgoKSArIDEsXHJcbiAgICAgICAgICB5ZWFyOiBzdGFydERhdGUuZ2V0VVRDRnVsbFllYXIoKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5kcm9wb2ZmX2RhdGUgPSB7XHJcbiAgICAgICAgICBkYXk6IGVuZERhdGUuZ2V0VVRDRGF0ZSgpLFxyXG4gICAgICAgICAgbW9udGg6IGVuZERhdGUuZ2V0VVRDTW9udGgoKSArIDEsXHJcbiAgICAgICAgICB5ZWFyOiBlbmREYXRlLmdldFVUQ0Z1bGxZZWFyKClcclxuICAgICAgICB9O1xyXG4gICAgICB9IGNhdGNoIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgY2FyaGlyZSBmcm9tIGhvdGVsIGl0ZW0nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gIWRhdGUgYW5kIHRpbWUgaXMgaGFuZGxlZCBkaWZmZXJlbnRseSBmb3IgTFVcclxuICBwcml2YXRlIF91cGRhdGVQaWNrdXBEYXRlVGltZSgpIHtcclxuICAgIGlmICh0aGlzLl9waWNrdXBfZGF0ZSAmJiB0aGlzLl9waWNrdXBfdGltZSkge1xyXG4gICAgICBjb25zdCB0aW1lID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KFxyXG4gICAgICAgIHRoaXMuX3BpY2t1cF9kYXRlLFxyXG4gICAgICAgIHRoaXMuX3BpY2t1cF90aW1lXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMucGlja3VwX2RhdGV0aW1lID0gdGltZS5pc1ZhbGlkKCkgPyB0aW1lIDogbnVsbDtcclxuICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlRHJvcG9mZkRhdGVUaW1lKCkge1xyXG4gICAgaWYgKHRoaXMuX2Ryb3BvZmZfZGF0ZSAmJiB0aGlzLl9kcm9wb2ZmX3RpbWUpIHtcclxuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgICB0aGlzLl9kcm9wb2ZmX2RhdGUsXHJcbiAgICAgICAgdGhpcy5fZHJvcG9mZl90aW1lXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZHJvcG9mZl9kYXRldGltZSA9IHRpbWUuaXNWYWxpZCgpID8gdGltZSA6IG51bGw7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZU5nYlBpY2t1cERhdGVUaW1lKCkge1xyXG4gICAgaWYgKHRoaXMuX25nYlBpY2t1cERhdGUgJiYgdGhpcy5fcGlja3VwVGltZSkge1xyXG4gICAgICBjb25zdCB0aW1lID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KFxyXG4gICAgICAgIHRoaXMuX25nYlBpY2t1cERhdGUsXHJcbiAgICAgICAgdGhpcy5fcGlja3VwVGltZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnBpY2t1cF9kYXRldGltZSA9IHRpbWUuaXNWYWxpZCgpID8gdGltZSA6IG51bGw7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZU5nYkRyb3BvZmZEYXRlVGltZSgpIHtcclxuICAgIGlmICh0aGlzLl9uZ2JEcm9wb2ZmRGF0ZSAmJiB0aGlzLl9kcm9wb2ZmVGltZSkge1xyXG4gICAgICBjb25zdCB0aW1lID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KFxyXG4gICAgICAgIHRoaXMuX25nYkRyb3BvZmZEYXRlLFxyXG4gICAgICAgIHRoaXMuX2Ryb3BvZmZUaW1lXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZHJvcG9mZl9kYXRldGltZSA9IHRpbWUuaXNWYWxpZCgpID8gdGltZSA6IG51bGw7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzT3Zlck5pZ2h0KCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qgb3V0d2FyZERheSA9IHRoaXMucGlja3VwX2RhdGV0aW1lLmRhdGUoKTtcclxuICAgIGNvbnN0IHJldHVybkRheSA9IHRoaXMuZHJvcG9mZl9kYXRldGltZS5kYXRlKCk7XHJcbiAgICBpZiAocmV0dXJuRGF5IC0gb3V0d2FyZERheSA+PSAxKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0czogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkpOiBJQ2hlYXBlc3RQcmljZSB7XHJcbiAgICBpZiAoIXJlc3VsdHMubGVuZ3RoKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IG1pblByaWNlID0gdGhpcy5nZXRNaW5QcmljZShyZXN1bHRzKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGFtb3VudDogbWluUHJpY2UsXHJcbiAgICAgIGN1cnJlbmN5Q29kZTogcmVzdWx0c1swXS5kaXNwbGF5UmVjb3JkLmNoYXJnZXNbMF0uY3VycmVuY3lDb2RlXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IHRoZSBhdmFpbGFiaWxpdHkgZGV0YWlscyBmb3IgYSBwYXJ0aWN1bGFyIGNhciBoaXJlIHJlc3VsdCB1c2luZyBsb2NhdGlvbkRldGFpbHMgcGFyYW1cclxuICAgKiBAcGFyYW0gbG9jYXRpb25EZXRhaWxzIC0gZS5nLiB0YWtlbiBmcm9tIHJlc3BvbnNlIGRhdGEgaW4gc2VhcmNoQ2FySGlyZSBxdWVyeVxyXG4gICAqIEBwYXJhbSBpc0xvYWRpbmcgYmVoYXZpb3VyU3ViamVjdCBmb3IgaGFuZGxpbmcgbG9hZGluZyBzcGlubmVyIHN0YXRlIG9mIHJlcXVlc3RcclxuICAgKi9cclxuICBnZXRDYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsKFxyXG4gICAgbG9jYXRpb25EZXRhaWxzOiBDYXJIaXJlSW5wdXRJZGVudGlmaWVycyxcclxuICAgIGlzTG9hZGluZzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxDYXJIaXJlRGV0YWlsUmVxdWVzdFJlc3BvbnNlPiB7XHJcbiAgICBpZiAoIWlzTG9hZGluZy52YWx1ZSkge1xyXG4gICAgICBpc0xvYWRpbmcubmV4dCh0cnVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmNhckhpcmVBdmFpbGFiaWxpdHlEZXRhaWxGZXRjaGVyXHJcbiAgICAgIC5mZXRjaExpc3QoeyBsb2NhdGlvbkRldGFpbHMgfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICBtYXAoKHJlc3VsdDogQ2FySGlyZURldGFpbFJlcXVlc3RSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGlzTG9hZGluZy52YWx1ZSkge1xyXG4gICAgICAgICAgICBpc0xvYWRpbmcubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBhZGQgY2FyIGhpcmUgdG8gYmFza2V0XHJcbiAgICovXHJcbiAgYXN5bmMgYWRkQ2FySGlyZVRvQmFza2V0KFxyXG4gICAgY2FySGlyZVZlaGljbGVBdmFpbGliaWxpdHk6IENhckhpcmVWZWhpY2xlQXZhaWxpYmlsaXR5LFxyXG4gICAgY2FySGlyZVF1ZXJ5OiBTZWFyY2hDYXJIaXJlUXVlcnlWYXJpYWJsZXNcclxuICApOiBQcm9taXNlPERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnM+IHtcclxuICAgIGlmIChjYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eS51bmF2YWlsYWJsZSkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPVxyXG4gICAgICBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xyXG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xyXG4gICAgaWYgKGJhc2tldCkge1xyXG4gICAgICBjb25zdCB7XHJcbiAgICAgICAgY28yUGVySXRlbSxcclxuICAgICAgICBjbzJQZXJQYXNzZW5nZXIsXHJcbiAgICAgICAgZGlzcGxheVJlY29yZCxcclxuICAgICAgICBpZGVudGlmaWVycyxcclxuICAgICAgICBzb3VyY2VJZFxyXG4gICAgICB9ID0gY2FySGlyZVZlaGljbGVBdmFpbGliaWxpdHk7XHJcbiAgICAgIGNvbnN0IHByaWNlID0gcGFyc2VGbG9hdChkaXNwbGF5UmVjb3JkPy5jaGFyZ2VzWzBdPy5hbW91bnQgPz8gJzAnKTtcclxuICAgICAgY29uc3QgdGVybXNBbmRDb25kaXRpb25zID0gdGhpcy5nZXRUZXJtc0FuZENvbmQoXHJcbiAgICAgICAgY2FySGlyZVZlaGljbGVBdmFpbGliaWxpdHksXHJcbiAgICAgICAgY2FySGlyZVF1ZXJ5XHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IHdoYXRIYXBwZW5lZCA9IGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcclxuICAgICAgICB7XHJcbiAgICAgICAgICBhZHVsdHM6IHRoaXMuYWR1bHRzLFxyXG4gICAgICAgICAgYmFza2V0OiBiYXNrZXQuaWQsXHJcbiAgICAgICAgICBzZXJ2aWNlOiBzb3VyY2VJZC50b1N0cmluZygpLFxyXG4gICAgICAgICAgZGV0YWlsOiB7XHJcbiAgICAgICAgICAgIHBpY2tVcERhdGV0aW1lOiBkaXNwbGF5UmVjb3JkLnBpY2t1cCxcclxuICAgICAgICAgICAgZHJvcE9mZkRhdGV0aW1lOiBkaXNwbGF5UmVjb3JkLmRyb3BvZmYsXHJcbiAgICAgICAgICAgIHBpY2tVcExvY2F0aW9uOiB7XHJcbiAgICAgICAgICAgICAgaWF0YTpcclxuICAgICAgICAgICAgICAgIHRoaXMubG9jYXRpb25UeXBlID09PSBMb2NhdGlvblR5cGVzLkFpcnBvcnRcclxuICAgICAgICAgICAgICAgICAgPyBpZGVudGlmaWVycy5sb2NhdGlvbkNvZGVcclxuICAgICAgICAgICAgICAgICAgOiAnJyxcclxuICAgICAgICAgICAgICBuYW1lOiBkaXNwbGF5UmVjb3JkLnBpY2t1cExvY2F0aW9uLm5hbWUsXHJcbiAgICAgICAgICAgICAgYWRkcmVzczogYCR7ZGlzcGxheVJlY29yZC5waWNrdXBMb2NhdGlvbi50b3BMaW5lfSwgJHtkaXNwbGF5UmVjb3JkLnBpY2t1cExvY2F0aW9uLmNpdHl9YCxcclxuICAgICAgICAgICAgICBwb3N0Y29kZTogZGlzcGxheVJlY29yZC5waWNrdXBMb2NhdGlvbi5wb3N0Q29kZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBkcm9wT2ZmTG9jYXRpb246IHtcclxuICAgICAgICAgICAgICBpYXRhOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhdGlvblR5cGUgPT09IExvY2F0aW9uVHlwZXMuQWlycG9ydFxyXG4gICAgICAgICAgICAgICAgICA/IGlkZW50aWZpZXJzLmRyb3BPZmZMb2NhdGlvblxyXG4gICAgICAgICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgICAgICAgIG5hbWU6IGRpc3BsYXlSZWNvcmQucmV0dXJuTG9jYXRpb24ubmFtZSxcclxuICAgICAgICAgICAgICBhZGRyZXNzOiBgJHtkaXNwbGF5UmVjb3JkLnJldHVybkxvY2F0aW9uLnRvcExpbmV9LCAke2Rpc3BsYXlSZWNvcmQucmV0dXJuTG9jYXRpb24uY2l0eX1gLFxyXG4gICAgICAgICAgICAgIHBvc3Rjb2RlOiBkaXNwbGF5UmVjb3JkLnJldHVybkxvY2F0aW9uLnBvc3RDb2RlXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNhcjoge1xyXG4gICAgICAgICAgICAgIHR5cGU6IGRpc3BsYXlSZWNvcmQudmVoaWNsZS50eXBlLFxyXG4gICAgICAgICAgICAgIG1hbnVhbFRyYW5zbWlzc2lvbjogZGlzcGxheVJlY29yZC52ZWhpY2xlLnRyYW5zbWlzc2lvbi5pbmNsdWRlcyhcclxuICAgICAgICAgICAgICAgIENhckhpcmVUcmFuc21pc3Npb24uTWFudWFsXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmYXJlSW5mbzoge1xyXG4gICAgICAgICAgICAgIHRpdGxlOiBjYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eT8uZmFyZUluZm8/LnRpdGxlLFxyXG4gICAgICAgICAgICAgIHR5cGU6IGNhckhpcmVWZWhpY2xlQXZhaWxpYmlsaXR5Py5mYXJlSW5mbz8udHlwZSxcclxuICAgICAgICAgICAgICBjb2RlOmNhckhpcmVWZWhpY2xlQXZhaWxpYmlsaXR5Py5mYXJlSW5mbz8uY29kZSxcclxuICAgICAgICAgICAgICBzdXBwbGllckNvZGU6IGNhckhpcmVWZWhpY2xlQXZhaWxpYmlsaXR5Py5mYXJlSW5mbz8uc3VwcGxpZXJDb2RlXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHZlbmRvck5hbWU6IGRpc3BsYXlSZWNvcmQudmVuZG9yLm5hbWUsXHJcbiAgICAgICAgICAgIGlkZW50aWZpZXJzOiB7XHJcbiAgICAgICAgICAgICAgZHJvcE9mZkxvY2F0aW9uOiBpZGVudGlmaWVycy5kcm9wT2ZmTG9jYXRpb24sXHJcbiAgICAgICAgICAgICAgbG9jYXRpb25Db2RlOiBpZGVudGlmaWVycy5sb2NhdGlvbkNvZGUsXHJcbiAgICAgICAgICAgICAgbG9jYXRpb25OYW1lOiBpZGVudGlmaWVycy5sb2NhdGlvbk5hbWUsXHJcbiAgICAgICAgICAgICAgdmVoVHlwZTogaWRlbnRpZmllcnMudmVoVHlwZSxcclxuICAgICAgICAgICAgICB2ZW5kb3I6IGlkZW50aWZpZXJzLnZlbmRvclxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0ZXJtc0FuZENvbmQ6IHRlcm1zQW5kQ29uZGl0aW9uc1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHByaWNlLFxyXG4gICAgICAgICAgY3VycmVuY3k6IGRpc3BsYXlSZWNvcmQuY2hhcmdlc1swXS5jdXJyZW5jeUNvZGUgYXMgQ3VycmVuY3lDb2RlLFxyXG4gICAgICAgICAgc2VhcmNoUXVlcnk6IGNhckhpcmVRdWVyeSxcclxuICAgICAgICAgIGNvMlBlckl0ZW0sXHJcbiAgICAgICAgICBjbzJQZXJQYXNzZW5nZXIsXHJcbiAgICAgICAgICBvdXRib3VuZERhdGU6IG5ldyBEYXRlKGRpc3BsYXlSZWNvcmQucGlja3VwKS50b0lTT1N0cmluZygpLFxyXG4gICAgICAgICAgbG93ZXN0UHJpY2U6IHRoaXMuY2hlYXBlc3RQcmljZT8uYW1vdW50ICE9IHByaWNlID8gdGhpcy5jaGVhcGVzdFByaWNlPy5hbW91bnQgOiBudWxsLFxyXG4gICAgICAgICAgbG93ZXN0UHJpY2VDdXJyZW5jeTogdGhpcy5jaGVhcGVzdFByaWNlPy5hbW91bnQgIT0gcHJpY2UgPyA8Q3VycmVuY3lDb2RlPnRoaXMuY2hlYXBlc3RQcmljZT8uY3VycmVuY3lDb2RlIDogbnVsbFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaW50QmFza2V0LFxyXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZSxcclxuICAgICAgICB0aGlzLnRyYXZlbGxlcnMsXHJcbiAgICAgICAgY2FySGlyZVZlaGljbGVBdmFpbGliaWxpdHkucmVxdWlyZXNSZWFzb25cclxuICAgICAgKTtcclxuICAgICAgaWYgKHdoYXRIYXBwZW5lZCA9PT0gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5yZXNlYXJjaCkge1xyXG4gICAgICAgIHRoaXMucGVyZm9ybVNlYXJjaCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB3aGF0SGFwcGVuZWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsKTtcclxuICB9XHJcblxyXG4gIC8vIFRPRE8gd2FpdGluZyBmb3IgZGF0YVxyXG4gIGdldFRlcm1zQW5kQ29uZChcclxuICAgIGNhckhpcmVWZWhpY2xlOiBDYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eSxcclxuICAgIGNhckhpcmVRdWVyeTogU2VhcmNoQ2FySGlyZVF1ZXJ5VmFyaWFibGVzXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0FkZGl0aW9uYWwgRHJpdmVyJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdBZ2UgUmVxdWlyZW1lbnRzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdDcm9zcyBCb3JkZXIgUG9saWN5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdEYW1hZ2UgV2FpdmVyJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdEZWJpdCBDYXJkIFBvbGljeScsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnT25lIFdheSBEcm9wIFBvbGljeScsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRXh0ZW5kZWQgUHJvdGVjdGlvbicsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRXhjZXNzIFByb3RlY3Rpb24nLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0luY2x1c2l2ZSBQb2xpY3knLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ01pbGVhZ2UgUG9saWN5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdNaXNjZWxsYW5lb3VzIFBvbGljeScsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRm9ybXMgb2YgUGF5bWVudCcsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnUm9hZHNpZGUgUHJvdGVjdGlvbicsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnUmVudGVyIFJlcXVpcmVtZW50cycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVGhpcmQgUGFydHkgTGlhYmlsaXR5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfVxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIHNhdmVTZWFyY2goKTogT2JzZXJ2YWJsZTxTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0PiB7XHJcbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XHJcbiAgICAgIGNvbnN0IHF1ZXJ5OiBRdWVyeVNlYXJjaENhckhpcmVBcmdzID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xyXG4gICAgICBjb25zdCBmYXZvdXJpdGVTZWFyY2hRdWVyeTogQ2FySGlyZVNlYXJjaEFyZ3MgPVxyXG4gICAgICAgIHRoaXMudXBkYXRlU2VyY2hRdWVyeShxdWVyeSk7XHJcbiAgICAgIGNvbnN0IHNlYXJjaEluZm8gPSB7XHJcbiAgICAgICAgbmFtZTogYCR7bW9tZW50KCl9YCxcclxuICAgICAgICBzZXJ2aWNlVHlwZTogU2VydmljZVR5cGUuQ2FyLFxyXG4gICAgICAgIHNlYXJjaEFyZ3M6IGZhdm91cml0ZVNlYXJjaFF1ZXJ5XHJcbiAgICAgIH07XHJcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZUZhdm91cml0ZVNlYXJjaChzZWFyY2hJbmZvKTtcclxuICAgIH1cclxuICB9XHJcbiAgYXN5bmMgYXBwbHlGYXZvdXJpdGUoZmF2OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuYWlyQ29uID0gZmF2LmFpcmNvbjtcclxuICAgIHRoaXMuY2FyQ2xhc3MgPSBmYXYuY2xhc3M7XHJcbiAgICB0aGlzLnRyYW5zbWlzc2lvbiA9IGZhdi50cmFuc21pc3Npb247XHJcbiAgICB0aGlzLmNob3NlblZlbmRvciA9IGZhdi52ZW5kb3I7XHJcbiAgICB0aGlzLmNhclR5cGUgPSBmYXYudHlwZTtcclxuICAgIHRoaXMucmV0dXJuX3RvX3BpY2t1cCA9IGZhdi5haXJwb3J0LnBpY2t1cENvZGUgPT0gZmF2LmFpcnBvcnQuZHJvcG9mZkNvZGU7XHJcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgLmdldEFpcnBvcnRzTGlzdChmYXYuYWlycG9ydC5waWNrdXBDb2RlKVxyXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHRzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5waWNrdXBfbG9jYXRpb24gPSAocmVzdWx0cyBhcyBPQlRBaXJwb3J0RGV0YWlsc1tdKS5maW5kKFxyXG4gICAgICAgICAgKGEpID0+IGEuZ2F0ZXdheSA9PSBmYXYuYWlycG9ydC5waWNrdXBDb2RlXHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgICBpZiAoIXRoaXMucmV0dXJuX3RvX3BpY2t1cClcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlXHJcbiAgICAgICAgLmdldEFpcnBvcnRzTGlzdChmYXYuYWlycG9ydC5kcm9wb2ZmQ29kZSlcclxuICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHRzKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmRyb3BvZmZfbG9jYXRpb24gPSAocmVzdWx0cyBhcyBPQlRBaXJwb3J0RGV0YWlsc1tdKS5maW5kKFxyXG4gICAgICAgICAgICAoYSkgPT4gYS5nYXRld2F5ID09IGZhdi5haXJwb3J0LmRyb3BvZmZDb2RlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tGb3JQcmVmZXJyZWQoKTogYm9vbGVhbiB7XHJcbiAgIHJldHVybiAgISF0aGlzLnJlc3VsdHMudmFsdWUuZmluZChyZXN1bHQ9PnJlc3VsdC5vZmZpY2VQcmVmZXJyZWQgfHwgcmVzdWx0LnRtY1ByZWZlcnJlZCB8fCByZXN1bHQuY29tcGFueVByZWZlcnJlZClcclxuICB9XHJcbn1cclxuIl19
|