@sabstravtech/obtservices 0.0.22042501 → 0.0.22051001
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/fetchers.d.ts +8 -0
- package/angular/lib/vendor/fetchers/fast-track-quote.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-all-airlines.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-cancellation-info.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-car-hire-providers.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-hotel-chains.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-irl-supplier-station.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-rail-providers.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/send-offline-notification.fetcher.d.ts +7 -0
- package/angular/lib/vendor/services/enterprise-basket.service.d.ts +4 -3
- package/angular/lib/vendor/services/search.service.d.ts +10 -3
- package/angular/lib/vendor/services/ticket-queue.service.d.ts +6 -0
- package/angular/lib/vendor/services/user.service.d.ts +5 -3
- package/angular/lib/vendor/types/graphql.angular.types.d.ts +438 -16
- package/angular/lib/vendor/updaters/edit-user.updater.d.ts +6 -0
- package/angular/lib/vendor/updaters/set-user-language-updater.d.ts +6 -0
- package/angular/sabstravtech-obtservices-angular.d.ts +16 -13
- package/angular/sabstravtech-obtservices-angular.metadata.json +1 -1
- package/angular/services.d.ts +1 -0
- package/base/fetchers.d.ts +10 -0
- package/base/interfaces.d.ts +2 -0
- package/base/lib/vendor/classes/cabhire-enterprise-search.d.ts +2 -1
- package/base/lib/vendor/classes/carhire-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/classes/eurostar-enterprise-search.d.ts +8 -2
- package/base/lib/vendor/classes/fast-track-enterprise-search.d.ts +57 -0
- package/base/lib/vendor/classes/flight-enterprise-search.d.ts +2 -1
- package/base/lib/vendor/classes/hotel-enterprise-search.d.ts +3 -1
- package/base/lib/vendor/classes/irl-enterprise-search.d.ts +27 -7
- package/base/lib/vendor/classes/lounges-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/classes/management-info-and-valid.d.ts +6 -1
- package/base/lib/vendor/classes/modal-types.enum.d.ts +2 -0
- package/base/lib/vendor/classes/parking-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/classes/rail-enterprise-search.d.ts +3 -2
- package/base/lib/vendor/fetchers/fast-track-quote.fetcher.d.ts +23 -0
- package/base/lib/vendor/fetchers/get-all-airlines.fetcher.d.ts +20 -0
- package/base/lib/vendor/fetchers/get-cancellation-info.fetcher.d.ts +20 -0
- package/base/lib/vendor/fetchers/get-car-hire-providers.fetcher.d.ts +20 -0
- package/base/lib/vendor/fetchers/get-hotel-chains.fetcher.d.ts +20 -0
- package/base/lib/vendor/fetchers/get-irl-supplier-station.fetcher.d.ts +21 -0
- package/base/lib/vendor/fetchers/get-rail-providers.fetcher.d.ts +20 -0
- package/base/lib/vendor/fetchers/send-offline-notification.fetcher.d.ts +21 -0
- package/base/lib/vendor/fetchers/user-fetcher.d.ts +2 -3
- package/base/lib/vendor/interfaces/Icabhire-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Icarhire-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Ienterprise-basket.service.d.ts +6 -3
- package/base/lib/vendor/interfaces/Ieurostar-enterprise-search.d.ts +2 -0
- package/base/lib/vendor/interfaces/Ifast-track-enterprise-search.d.ts +26 -0
- package/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +2 -0
- package/base/lib/vendor/interfaces/Iirl-enterprise-search.d.ts +11 -3
- package/base/lib/vendor/interfaces/Ilounges-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Iparking-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Irail-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Isearch.service.d.ts +7 -1
- package/base/lib/vendor/interfaces/Iuser.service.d.ts +2 -1
- package/base/lib/vendor/interfaces/eurostar-search-arg.interface.d.ts +2 -0
- package/base/lib/vendor/interfaces/fast-track-filters.interface.d.ts +4 -0
- package/base/lib/vendor/interfaces/rail-basket-item.interface.d.ts +2 -0
- package/base/lib/vendor/interfaces/summary-interface.d.ts +2 -0
- package/base/lib/vendor/interfaces/user.data.d.ts +1 -0
- package/base/lib/vendor/models/traveller.object.d.ts +1 -0
- package/base/lib/vendor/services/enterprise-basket.service.d.ts +13 -6
- package/base/lib/vendor/services/requires-reason.service.d.ts +20 -0
- package/base/lib/vendor/services/search.service.d.ts +30 -5
- package/base/lib/vendor/services/user.service.d.ts +12 -5
- package/base/lib/vendor/services/webtoken.service.d.ts +1 -0
- package/base/lib/vendor/types/graphql.types.d.ts +398 -16
- package/base/lib/vendor/types/types.d.ts +53 -16
- package/base/lib/vendor/updaters/edit-user-updater.d.ts +19 -0
- package/base/lib/vendor/updaters/set-user-language-updater.d.ts +19 -0
- package/base/sabstravtech-obtservices-base.d.ts +5 -5
- package/base/sabstravtech-obtservices-base.metadata.json +1 -1
- package/base/services.d.ts +1 -0
- package/base/updaters.d.ts +2 -0
- package/bundles/sabstravtech-obtservices-angular.umd.js +499 -91
- 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 +3204 -176
- 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/fetchers.js +9 -1
- package/esm2015/angular/lib/vendor/fetchers/fast-track-quote.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-all-airlines.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-cancellation-info.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-car-hire-providers.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-hotel-chains.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-irl-supplier-station.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-rail-providers.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/send-offline-notification.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/services/enterprise-basket.service.js +8 -5
- package/esm2015/angular/lib/vendor/services/http-call.service.js +6 -2
- package/esm2015/angular/lib/vendor/services/search.service.js +58 -37
- package/esm2015/angular/lib/vendor/services/ticket-queue.service.js +23 -0
- package/esm2015/angular/lib/vendor/services/user.service.js +12 -6
- package/esm2015/angular/lib/vendor/types/graphql.angular.types.js +583 -5
- package/esm2015/angular/lib/vendor/updaters/edit-user.updater.js +22 -0
- package/esm2015/angular/lib/vendor/updaters/set-user-language-updater.js +22 -0
- package/esm2015/angular/obtservices.module.js +3 -1
- package/esm2015/angular/sabstravtech-obtservices-angular.js +17 -14
- package/esm2015/angular/services.js +2 -1
- package/esm2015/base/fetchers.js +11 -1
- package/esm2015/base/interfaces.js +3 -1
- package/esm2015/base/lib/vendor/classes/basket-info-mi-details.impl.js +4 -1
- package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +37 -5
- package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +46 -16
- package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +77 -10
- package/esm2015/base/lib/vendor/classes/fast-track-enterprise-search.js +296 -0
- package/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +44 -5
- package/esm2015/base/lib/vendor/classes/helpers.js +6 -2
- package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +58 -19
- package/esm2015/base/lib/vendor/classes/irl-enterprise-search.js +214 -25
- package/esm2015/base/lib/vendor/classes/lounges-enterprise-search.js +22 -6
- package/esm2015/base/lib/vendor/classes/management-info-and-valid.js +1 -1
- package/esm2015/base/lib/vendor/classes/modal-types.enum.js +3 -1
- package/esm2015/base/lib/vendor/classes/parking-enterprise-search.js +27 -7
- package/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +62 -13
- package/esm2015/base/lib/vendor/classes/supplementary-booking-info-impl.js +2 -2
- package/esm2015/base/lib/vendor/fetchers/fast-track-quote.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-all-airlines.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-cancellation-info.fetcher.js +10 -0
- package/esm2015/base/lib/vendor/fetchers/get-car-hire-providers.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-hotel-chains.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-irl-supplier-station.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-rail-providers.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/send-offline-notification.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/user-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 +2 -0
- package/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ihotel-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iirl-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ilounges-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iparking-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Irail-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Isearch.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iuser.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/eurostar-search-arg.interface.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/fast-track-filters.interface.js +2 -0
- 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 +3 -2
- package/esm2015/base/lib/vendor/services/enterprise-basket.service.js +63 -17
- package/esm2015/base/lib/vendor/services/hotel-avallibility.service.js +16 -12
- package/esm2015/base/lib/vendor/services/requires-reason.service.js +49 -0
- package/esm2015/base/lib/vendor/services/search.service.js +166 -20
- package/esm2015/base/lib/vendor/services/user.service.js +44 -6
- package/esm2015/base/lib/vendor/services/webtoken.service.js +9 -5
- package/esm2015/base/lib/vendor/types/graphql.types.js +9 -1
- package/esm2015/base/lib/vendor/types/types.js +1704 -1
- package/esm2015/base/lib/vendor/updaters/edit-user-updater.js +11 -0
- package/esm2015/base/lib/vendor/updaters/set-user-language-updater.js +11 -0
- package/esm2015/base/sabstravtech-obtservices-base.js +6 -5
- package/esm2015/base/services.js +2 -1
- package/esm2015/base/updaters.js +3 -1
- package/fesm2015/sabstravtech-obtservices-angular.js +790 -19
- package/fesm2015/sabstravtech-obtservices-angular.js.map +1 -1
- package/fesm2015/sabstravtech-obtservices-base.js +3041 -169
- package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
- package/package.json +1 -1
|
@@ -1277,7 +1277,7 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1277
1277
|
};
|
|
1278
1278
|
const selectedRuleSummary = this._ruleActionSummary.dualSingleWhenSelected[(_b = this.selectedGroupFlight) === null || _b === void 0 ? void 0 : _b.journeyHash] || {};
|
|
1279
1279
|
const setSelected = (flight) => {
|
|
1280
|
-
var _a, _b, _c, _d, _e, _f;
|
|
1280
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
1281
1281
|
flight.selected = flight.uid === ((_a = this.selectedGroupFlight) === null || _a === void 0 ? void 0 : _a.uid);
|
|
1282
1282
|
flight.unavailable =
|
|
1283
1283
|
((_b = this._ruleActionSummary.journeyWhenSelected[flight.journeyHash]) === null || _b === void 0 ? void 0 : _b.unavailable) || ((_c = this._ruleActionSummary.whenSelectedAlone[flight.journeyHash]) === null || _c === void 0 ? void 0 : _c.unavailable) || ((_d = selectedRuleSummary[flight.journeyHash]) === null || _d === void 0 ? void 0 : _d.unavailable) ||
|
|
@@ -1285,6 +1285,12 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1285
1285
|
flight.unavailableMessage =
|
|
1286
1286
|
((_e = this._ruleActionSummary.journeyWhenSelected[flight.journeyHash]) === null || _e === void 0 ? void 0 : _e.unavailableMessage) || ((_f = this._ruleActionSummary.whenSelectedAlone[flight.journeyHash]) === null || _f === void 0 ? void 0 : _f.unavailableMessage) ||
|
|
1287
1287
|
'';
|
|
1288
|
+
flight.requiresReason =
|
|
1289
|
+
((_g = this._ruleActionSummary.journeyWhenSelected[flight.journeyHash]) === null || _g === void 0 ? void 0 : _g.requiresReason) || ((_h = this._ruleActionSummary.whenSelectedAlone[flight.journeyHash]) === null || _h === void 0 ? void 0 : _h.requiresReason) || ((_j = selectedRuleSummary[flight.journeyHash]) === null || _j === void 0 ? void 0 : _j.requiresReason) ||
|
|
1290
|
+
false;
|
|
1291
|
+
flight.requiresReasonMessage =
|
|
1292
|
+
((_k = this._ruleActionSummary.journeyWhenSelected[flight.journeyHash]) === null || _k === void 0 ? void 0 : _k.requiresReasonMessage) || ((_l = this._ruleActionSummary.whenSelectedAlone[flight.journeyHash]) === null || _l === void 0 ? void 0 : _l.requiresReasonMessage) ||
|
|
1293
|
+
'';
|
|
1288
1294
|
return flight;
|
|
1289
1295
|
};
|
|
1290
1296
|
if (this.isGroupedFlights(this.fullResults)) {
|
|
@@ -1380,7 +1386,7 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1380
1386
|
if (basket &&
|
|
1381
1387
|
this.originalUserSearch.chosenSearchType === FlightSearchType.oneWay &&
|
|
1382
1388
|
direction === FlightDirectionEnum.Outbound) {
|
|
1383
|
-
// TODO becouse pop-up is not ready I commented the code.
|
|
1389
|
+
// TODO becouse pop-up is not ready I commented the code.
|
|
1384
1390
|
// this.modalService.open( ModalTypes.FlightExtrasDialogComponent, { centered: true }, { flight: selectedFlight }).then(result => {
|
|
1385
1391
|
// if (result) {
|
|
1386
1392
|
this.bookSingleFlight(intBasket, selectedFlight);
|
|
@@ -1494,7 +1500,7 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1494
1500
|
if (inboundDate) {
|
|
1495
1501
|
booking.inboundDate = inboundDate;
|
|
1496
1502
|
}
|
|
1497
|
-
this.basketService.addToBasket(booking, intBasket, this.searchService, this.travellers);
|
|
1503
|
+
this.basketService.addToBasket(booking, intBasket, this.searchService, this.travellers, selectedFlight.requiresReason);
|
|
1498
1504
|
}
|
|
1499
1505
|
makeSchemaFlights(selectedFlight, flightGroup, groupIndex, segmentIndex) {
|
|
1500
1506
|
return Object.assign(Object.assign({}, selectedFlight), { journeyInfo: {
|
|
@@ -1548,7 +1554,7 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1548
1554
|
booking.inboundDate = inboundDate.format();
|
|
1549
1555
|
schemaDetails.journeyType = 'roundtrip';
|
|
1550
1556
|
}
|
|
1551
|
-
return this.basketService.addToBasket(booking, intBasket, this.searchService, this.travellers);
|
|
1557
|
+
return this.basketService.addToBasket(booking, intBasket, this.searchService, this.travellers, flightQuote.requiresReason);
|
|
1552
1558
|
}
|
|
1553
1559
|
return Promise.resolve(false); // TODO should this throw an error?
|
|
1554
1560
|
});
|
|
@@ -1729,6 +1735,39 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1729
1735
|
return this.searchService.saveFavouriteSearch(searchInfo);
|
|
1730
1736
|
}
|
|
1731
1737
|
}
|
|
1738
|
+
applyFavourite(fav) {
|
|
1739
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
1740
|
+
this.chosenSearchType = fav.multiDestination ? FlightSearchType.multiCity : fav.returnTrip ? FlightSearchType.return : FlightSearchType.oneWay;
|
|
1741
|
+
if (this.chosenSearchType == FlightSearchType.multiCity) {
|
|
1742
|
+
const multi = yield Promise.all(fav.multiDestination.map((a) => __awaiter(this, void 0, void 0, function* () {
|
|
1743
|
+
let destination = { date: undefined, dest: undefined, orig: undefined };
|
|
1744
|
+
destination.orig = yield this.searchService.getAirportsList(a.orig).toPromise().then(origResults => {
|
|
1745
|
+
return origResults.find(b => b.gateway == a.orig);
|
|
1746
|
+
});
|
|
1747
|
+
destination.dest = yield this.searchService.getAirportsList(a.dest).toPromise().then(destResults => {
|
|
1748
|
+
return destResults.find(b => b.gateway == a.dest);
|
|
1749
|
+
});
|
|
1750
|
+
return destination;
|
|
1751
|
+
})));
|
|
1752
|
+
this.multiDestination = multi;
|
|
1753
|
+
}
|
|
1754
|
+
else {
|
|
1755
|
+
this.searchService.getAirportsList(fav.originAirport).subscribe(results => {
|
|
1756
|
+
this.departLocation = results.find(a => a.gateway == fav.originAirport);
|
|
1757
|
+
});
|
|
1758
|
+
this.searchService.getAirportsList(fav.destinationAirport).subscribe(results => {
|
|
1759
|
+
this.arriveLocation = results.find(a => a.gateway == fav.destinationAirport);
|
|
1760
|
+
});
|
|
1761
|
+
}
|
|
1762
|
+
this.cabinClass = fav.outboundCabinClass[0];
|
|
1763
|
+
this.returnCabinClass = this.chosenSearchType != FlightSearchType.return ? null : fav.returnCabinClass[0];
|
|
1764
|
+
this.includeNearbyAirports = fav.includeNearbyAirports;
|
|
1765
|
+
this.adults = fav.passengers.filter((a) => a.type == "ADULT").length;
|
|
1766
|
+
this.children = fav.passengers.filter((a) => a.type == "CHILD").length;
|
|
1767
|
+
// this.preferredCarriers = fav.preferredCarriers.map((a: any) => {
|
|
1768
|
+
// })
|
|
1769
|
+
});
|
|
1770
|
+
}
|
|
1732
1771
|
updateSerchQuery(query) {
|
|
1733
1772
|
const searchQuery = query;
|
|
1734
1773
|
switch (this.chosenSearchType) {
|
|
@@ -1746,4 +1785,4 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1746
1785
|
}
|
|
1747
1786
|
FlightEnterpriseSearch.STORAGE_SESSION_PARAMS = 'search_flight';
|
|
1748
1787
|
FlightEnterpriseSearch.STORAGE_SESSION_RESULTS = 'results_flight';
|
|
1749
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxpZ2h0LWVudGVycHJpc2Utc2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2J0c2VydmljZXMvYmFzZS9zcmMvbGliL3ZlbmRvci9jbGFzc2VzL2ZsaWdodC1lbnRlcnByaXNlLXNlYXJjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBSXpELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBSWxFLE9BQU8sRUFRTCxRQUFRLEVBQ1IsZ0JBQWdCLEVBSWhCLG1CQUFtQixFQVFuQixXQUFXLEVBQ1osTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBRUwsbUJBQW1CLEVBWW5CLG1CQUFtQixFQU1wQixNQUFNLGdCQUFnQixDQUFDO0FBVXhCLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsa0JBQWtCLEVBR25CLE1BQU0seUNBQXlDLENBQUM7QUFFakQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFPN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBS3ZELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHaEQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBYW5CLE1BQU0sQ0FBTixJQUFZLFVBSVg7QUFKRCxXQUFZLFVBQVU7SUFDcEIsaUNBQW1CLENBQUE7SUFDbkIsa0NBQW9CLENBQUE7SUFDcEIsa0NBQW9CLENBQUE7QUFDdEIsQ0FBQyxFQUpXLFVBQVUsS0FBVixVQUFVLFFBSXJCO0FBRUQsTUFBTSxDQUFOLElBQVksZUFVWDtBQVZELFdBQVksZUFB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LENBQUM7UUFDN0MsUUFBTyxJQUFJLENBQUMsZ0JBQWdCLEVBQUM7WUFDM0IsS0FBSyxnQkFBZ0IsQ0FBQyxTQUFTO2dCQUM3QixXQUFXLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO2dCQUM3RCxNQUFNO1lBQ04sS0FBSyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUU7WUFDOUIsS0FBSyxnQkFBZ0IsQ0FBQyxNQUFNO2dCQUMxQixXQUFXLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztnQkFDdkQsV0FBVyxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7Z0JBQ3ZELE1BQU07U0FDVDtRQUVELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7O0FBemlGZSw2Q0FBc0IsR0FBRyxlQUFlLENBQUM7QUFDekMsOENBQXVCLEdBQUcsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IEJhc2VFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi9iYXNlLWVudGVycHJpc2UnO1xyXG5pbXBvcnQgeyBCYXNlU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlSGVscGVyUm91dGluZXMgfSBmcm9tICcuL2hlbHBlcnMnO1xyXG5pbXBvcnQgeyBUcmF2ZWxsZXIgfSBmcm9tICcuLi9tb2RlbHMvdHJhdmVsbGVyLm9iamVjdCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBWYWx1ZURpc3BsYXkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3ZhbHVlLWRpc3BsYXknO1xyXG5pbXBvcnQgeyBGbGlnaHRGaWx0ZXJzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mbGlnaHQtZmlsdGVycy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBTZWxlY3RGaWx0ZXIgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NlbGVjdC1maWx0ZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBBZGRJdGVtVG9CYXNrZXRNdXRhdGlvblZhcmlhYmxlcyxcclxuICBCYWdnYWdlQWxsb3dhbmNlLFxyXG4gIEJhc2tldEl0ZW0sXHJcbiAgQ3VycmVuY3lDb2RlLFxyXG4gIERlc3RpbmF0aW9uRW50cnksXHJcbiAgRmFyZUNvbmRpdGlvbkVudHJ5LFxyXG4gIEZhcmVDb25kaXRpb25zLFxyXG4gIEZhcmVUeXBlLFxyXG4gIEZsaWdodENhYmluQ2xhc3MsXHJcbiAgRmxpZ2h0SXRpbmVyYXJ5LFxyXG4gIEZsaWdodEpvdXJuZXksXHJcbiAgRmxpZ2h0UGFzc2VuZ2VyT2JqZWN0LFxyXG4gIEZsaWdodFBhc3NlbmdlclR5cGUsXHJcbiAgR3JvdXBlZEZpZWxkc0ZyYWdtZW50LFxyXG4gIEdyb3VwRmxpZ2h0cyxcclxuICBJbnB1dEZsaWdodEpvdXJuZXksXHJcbiAgSXRpbmVyYXJ5U3VtbWFyeSxcclxuICBNYXRjaGluZ0ZsaWdodHMsXHJcbiAgU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzLFxyXG4gIFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlcnZpY2VUeXBlXHJcbn0gZnJvbSAnLi4vdHlwZXMvZ3JhcGhxbC50eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgRmxpZ2h0QWxsUXVvdGVSZXN1bHQsXHJcbiAgRmxpZ2h0RGlyZWN0aW9uRW51bSxcclxuICBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgRmxpZ2h0R3JvdXBzLFxyXG4gIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxyXG4gIEZsaWdodE11bHRpLFxyXG4gIEZsaWdodFF1b3RlUmVzdWx0QXJyYXksXHJcbiAgR3JvdXBlZEZsaWdodHMsXHJcbiAgTWluTWF4LFxyXG4gIE5nYkRhdGVTdHJ1Y3QsXHJcbiAgT0JUQWlybGluZXNEZXRhaWxzLFxyXG4gIE9CVEFpcnBvcnREZXRhaWxzLFxyXG4gIE9CVEZsaWdodENhYmluQ2xhc3MsXHJcbiAgUmVjZW50U2VhcmNoLFxyXG4gIFJlY29yZFJ1bGVBY3Rpb24sXHJcbiAgUnVsZUFjdGlvblN1bW1hcnlJbnRlcmZhY2UsXHJcbiAgUnVsZUxvb2t1cCxcclxuICBTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0XHJcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VGbGlnaHRRdW90ZUZldGNoZXIsXHJcbiAgRmxpZ2h0UXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2ZsaWdodC1xdW90ZS5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBGdWxsVXNlckRldGFpbHMsXHJcbiAgVXNlclNlcnZpY2VJbnRlcmZhY2VcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0l1c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXNlYXJjaC5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBERUZBVUxUX0ZMSUdIVF9GSUxURVJTLFxyXG4gIEZsaWdodERpc3BsYXlUeXBlcyxcclxuICBGbGlnaHRFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlLFxyXG4gIEZsaWdodFRlbXBQYXJhbXNcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0lmbGlnaHQtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBJQ2hlYXBlc3RQcmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hlYXBlc3QtcHJpY2UnO1xyXG5pbXBvcnQgeyBGbGlnaHRTZWFyY2hUeXBlIH0gZnJvbSAnLi9mbGlnaHQtc2VhcmNoLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IElNdWx0aURlc3RpbmF0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mbGlnaHQtbXVsdGktZGVzdGluYXRpb24uaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcclxuICBJbnRlcm5hbEJhc2tldEludGVyZmFjZVxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWVudGVycHJpc2UtYmFza2V0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyByZXN1bHQgfSBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBVc2VyRmF2b3J1cml0ZSB9IGZyb20gJy4vdXNlci1mYXZvdXJpdGUuZW51bSc7XHJcbmltcG9ydCB7XHJcbiAgQXBwbHlKaXRGbGlnaHRSdWxlc1R5cGUsXHJcbiAgQmFzZUFwcGx5Sml0RmxpZ2h0UnVsZXNGZXRjaGVyXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvYXBwbHktaml0LWZsaWdodC1ydWxlcyc7XHJcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEJhc2VNb2RhbE9wZW5lclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RhbC1vcGVuZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IE1vZGFsVHlwZXMgfSBmcm9tICcuL21vZGFsLXR5cGVzLmVudW0nO1xyXG5pbXBvcnQgeyBJRmxpZ2h0U2VhcmNoQXJncyB9IGZyb20gJy4uL2ludGVyZmFjZXMvZmxpZ2h0LXNlYXJjaC1hcmdzLmludGVyZmFjZSc7XHJcblxyXG5jb25zdCBPVVRCT1VORCA9IDA7XHJcbmV4cG9ydCBpbnRlcmZhY2UgQWxsb3dlZENsYXNzIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmxpZ2h0T3BlcmF0b3Ige1xyXG4gIGNvZGU6IHN0cmluZztcclxuICBuYW1lOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEFsbG93ZWRDbGFzc2VzID0gQWxsb3dlZENsYXNzW107XHJcblxyXG5leHBvcnQgZW51bSBUaW1lV2luZG93IHtcclxuICBBbnl0aW1lID0gJ0FueXRpbWUnLFxyXG4gIERlcGFydCA9ICdEZXBhcnQgQnknLFxyXG4gIEFycml2ZSA9ICdBcnJpdmUgQnknXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIEZsaWdodFNvcnRUeXBlcyB7XHJcbiAgQ2hlYXBlc3QgPSAnQ2hlYXBlc3QnLFxyXG4gIE1vc3RFeHBlbnNpdmUgPSAnTW9zdCBFeHBlbnNpdmUnLFxyXG4gIEZhc3Rlc3QgPSAnRmFzdGVzdCcsXHJcbiAgUHJlZmVycmVkID0gJ1ByZWZlcnJlZCcsXHJcbiAgTG93ZXN0RW1pc3Npb25zID0gJ0xvd2VzdCBFbWlzc2lvbnMnLFxyXG4gIERlcGFydHVyZVRpbWUgPSAnRGVwYXJ0dXJlIFRpbWUnLFxyXG4gIEFycml2YWxUaW1lID0gJ0Fycml2YWwgVGltZScsXHJcbiAgUXVpY2tlc3QgPSAnUXVpY2tlc3QnLFxyXG4gIE1vc3REaXJlY3QgPSAnTW9zdCBEaXJlY3QnXHJcbn1cclxuXHJcbmludGVyZmFjZSBGbGlnaHRTZXNzaW9uVHlwZSB7XHJcbiAgcmVzdWx0czogRmxpZ2h0UXVvdGVSZXN1bHRBcnJheTtcclxuICBncm91cGVkOiBHcm91cGVkRmxpZ2h0cztcclxuICBxdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXM7XHJcbn1cclxuXHJcbmludGVyZmFjZSBIaWRlRmxpZ2h0Q2FiaW5DbGFzc0ludGVyZmFjZSB7XHJcbiAgYW55OiBib29sZWFuO1xyXG4gIGJ1c2luZXNzOiBib29sZWFuO1xyXG4gIGVjb25vbXk6IGJvb2xlYW47XHJcbiAgcHJlbWl1bUVjb25vbXk6IGJvb2xlYW47XHJcbiAgZmlyc3Q6IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBGbGlnaHRFbnRlcnByaXNlU2VhcmNoPFxyXG4gICAgRlFfUSBleHRlbmRzIEZsaWdodFF1b3RlRmV0Y2hlclR5cGUsXHJcbiAgICBBSkZfUSBleHRlbmRzIEFwcGx5Sml0RmxpZ2h0UnVsZXNUeXBlXHJcbiAgPlxyXG4gIGV4dGVuZHMgQmFzZUVudGVycHJpc2VTZWFyY2g8XHJcbiAgICBGbGlnaHRUZW1wUGFyYW1zLFxyXG4gICAgRmxpZ2h0QWxsUXVvdGVSZXN1bHQsXHJcbiAgICBGbGlnaHRRdW90ZVJlc3VsdEFycmF5XHJcbiAgPlxyXG4gIGltcGxlbWVudHMgRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZVxyXG57XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9QQVJBTVMgPSAnc2VhcmNoX2ZsaWdodCc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTID0gJ3Jlc3VsdHNfZmxpZ2h0JztcclxuXHJcbiAgcHVibGljIHR5cGU6IFNlcnZpY2VUeXBlID0gU2VydmljZVR5cGUuRmxpZ2h0O1xyXG5cclxuICBhdmFsaWFibGVDbGFzc2VzOiBCZWhhdmlvclN1YmplY3Q8QWxsb3dlZENsYXNzZXM+ID1cclxuICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8QWxsb3dlZENsYXNzZXM+KFtdKTtcclxuICB0aW1lQ3JpdGVyaWFPcHRpb25zOiBCZWhhdmlvclN1YmplY3Q8VGltZVdpbmRvd1tdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XHJcbiAgICBUaW1lV2luZG93W11cclxuICA+KFtdKTtcclxuICBmbGlnaHRPcGVyYXRvcnM6IEJlaGF2aW9yU3ViamVjdDxGbGlnaHRPcGVyYXRvcltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XHJcbiAgICBGbGlnaHRPcGVyYXRvcltdXHJcbiAgPihbXSk7XHJcblxyXG4gIHByaXZhdGUgX25lZ290aWF0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9uZWFyYnlfYWlycG9ydHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfdGltZUFycmF5OiBWYWx1ZURpc3BsYXk8c3RyaW5nPltdO1xyXG4gIHByaXZhdGUgX3NvcnRBcnJheTogVmFsdWVEaXNwbGF5PEZsaWdodFNvcnRUeXBlcz5bXSA9IFtcclxuICAgIHsgZGlzcGxheTogJ0NoZWFwZXN0IEZpcnN0JywgdmFsdWU6IEZsaWdodFNvcnRUeXBlcy5DaGVhcGVzdCB9LFxyXG4gICAge1xyXG4gICAgICBkaXNwbGF5OiAnTW9zdCBFeHBlbnNpdmUgRmlyc3QnLFxyXG4gICAgICB2YWx1ZTogRmxpZ2h0U29ydFR5cGVzLk1vc3RFeHBlbnNpdmVcclxuICAgIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdGYXN0ZXN0IEZpcnN0JywgdmFsdWU6IEZsaWdodFNvcnRUeXBlcy5GYXN0ZXN0IH0sXHJcbiAgICB7IGRpc3BsYXk6ICdQcmVmZXJyZWQgRmFyZXMgRmlyc3QnLCB2YWx1ZTogRmxpZ2h0U29ydFR5cGVzLlByZWZlcnJlZCB9LFxyXG4gICAge1xyXG4gICAgICBkaXNwbGF5OiAnTG93ZXN0IENvMiBFbWlzc2lvbnMgRmlyc3QnLFxyXG4gICAgICB2YWx1ZTogRmxpZ2h0U29ydFR5cGVzLkxvd2VzdEVtaXNzaW9uc1xyXG4gICAgfVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgX3NvcnRJdGluYXJ5Um91dGluZXM6IFJlY29yZDxcclxuICAgIEZsaWdodFNvcnRUeXBlcyxcclxuICAgIChhOiBGbGlnaHRJdGluZXJhcnksIGI6IEZsaWdodEl0aW5lcmFyeSkgPT4gbnVtYmVyXHJcbiAgPiA9IHtcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuQ2hlYXBlc3RdOiAoYTogRmxpZ2h0SXRpbmVyYXJ5LCBiOiBGbGlnaHRJdGluZXJhcnkpID0+IHtcclxuICAgICAgcmV0dXJuIGEudG90YWwucHJpY2UgLSBiLnRvdGFsLnByaWNlO1xyXG4gICAgfSxcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuTW9zdEV4cGVuc2l2ZV06IChcclxuICAgICAgYTogRmxpZ2h0SXRpbmVyYXJ5LFxyXG4gICAgICBiOiBGbGlnaHRJdGluZXJhcnlcclxuICAgICkgPT4ge1xyXG4gICAgICByZXR1cm4gYi50b3RhbC5wcmljZSAtIGEudG90YWwucHJpY2U7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5GYXN0ZXN0XTogKGE6IEZsaWdodEl0aW5lcmFyeSwgYjogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgYS5vdXRib3VuZFRvdGFsRHVyYXRpb24gK1xyXG4gICAgICAgIChhLmluYm91bmRUb3RhbER1cmF0aW9uID8gYS5pbmJvdW5kVG90YWxEdXJhdGlvbiA6IDApIC1cclxuICAgICAgICAoYi5vdXRib3VuZFRvdGFsRHVyYXRpb24gK1xyXG4gICAgICAgICAgKGIuaW5ib3VuZFRvdGFsRHVyYXRpb24gPyBiLmluYm91bmRUb3RhbER1cmF0aW9uIDogMCkpXHJcbiAgICAgICk7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5QcmVmZXJyZWRdOiAoXHJcbiAgICAgIGE6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxyXG4gICAgICBiOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9uc1xyXG4gICAgKSA9PiB7XHJcbiAgICAgIHJldHVybiBhLnByZWZlcnJlZCAtIGIucHJlZmVycmVkO1xyXG4gICAgfSxcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuTG93ZXN0RW1pc3Npb25zXTogKFxyXG4gICAgICBhOiBGbGlnaHRJdGluZXJhcnksXHJcbiAgICAgIGI6IEZsaWdodEl0aW5lcmFyeVxyXG4gICAgKSA9PiB7XHJcbiAgICAgIHJldHVybiBhLmNvMlBlckl0ZW0gLSBiLmNvMlBlckl0ZW07XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5EZXBhcnR1cmVUaW1lXTogKFxyXG4gICAgICBhOiBGbGlnaHRJdGluZXJhcnksXHJcbiAgICAgIGI6IEZsaWdodEl0aW5lcmFyeVxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGNvbnN0IGFUaW1lID0gbW9tZW50KGEub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKTtcclxuICAgICAgY29uc3QgYlRpbWUgPSBtb21lbnQoYi5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpO1xyXG4gICAgICBpZiAoYVRpbWUuaXNCZWZvcmUoYlRpbWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhVGltZS5pc1NhbWUoYlRpbWUpID8gMCA6IDE7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5BcnJpdmFsVGltZV06IChhOiBGbGlnaHRJdGluZXJhcnksIGI6IEZsaWdodEl0aW5lcmFyeSkgPT4ge1xyXG4gICAgICBjb25zdCBhVGltZSA9IG1vbWVudChhLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZUFycml2aW5nKTtcclxuICAgICAgY29uc3QgYlRpbWUgPSBtb21lbnQoYi5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVBcnJpdmluZyk7XHJcbiAgICAgIGlmIChhVGltZS5pc0JlZm9yZShiVGltZSkpIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGFUaW1lLmlzU2FtZShiVGltZSkgPyAwIDogMTtcclxuICAgIH0sXHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLlF1aWNrZXN0XTogKGE6IEZsaWdodEl0aW5lcmFyeSwgYjogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgYS5vdXRib3VuZFRvdGFsRHVyYXRpb24gK1xyXG4gICAgICAgIChhLmluYm91bmRUb3RhbER1cmF0aW9uID8gYS5pbmJvdW5kVG90YWxEdXJhdGlvbiA6IDApIC1cclxuICAgICAgICAoYi5vdXRib3VuZFRvdGFsRHVyYXRpb24gK1xyXG4gICAgICAgICAgKGIuaW5ib3VuZFRvdGFsRHVyYXRpb24gPyBiLmluYm91bmRUb3RhbER1cmF0aW9uIDogMCkpXHJcbiAgICAgICk7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5Nb3N0RGlyZWN0XTogKGE6IEZsaWdodEl0aW5lcmFyeSwgYjogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgYS5vdXRib3VuZEZsaWdodHMubGVuZ3RoICtcclxuICAgICAgICAoYS5vdXRib3VuZEZsaWdodHMgPyBhLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggOiAwKSAtXHJcbiAgICAgICAgKGIub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCArXHJcbiAgICAgICAgICAoYi5vdXRib3VuZEZsaWdodHMgPyBiLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggOiAwKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBwcml2YXRlIF9zb3J0R3JvdXBlZFJvdXRpbmVzOiBSZWNvcmQ8XHJcbiAgICBGbGlnaHRTb3J0VHlwZXMsXHJcbiAgICAoYTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0LCBiOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQpID0+IG51bWJlclxyXG4gID4gPSB7XHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLkNoZWFwZXN0XTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYS5taW5QcmljZSAtIGIubWluUHJpY2U7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5Nb3N0RXhwZW5zaXZlXTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYi5taW5QcmljZSAtIGEubWF4UHJpY2U7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5GYXN0ZXN0XTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYS5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmRcclxuICAgICAgICA/IGEub3V0Ym91bmRUb3RhbER1cmF0aW9uIC0gYi5vdXRib3VuZFRvdGFsRHVyYXRpb25cclxuICAgICAgICA6IGEuaW5ib3VuZFRvdGFsRHVyYXRpb24gLSBiLmluYm91bmRUb3RhbER1cmF0aW9uO1xyXG4gICAgfSxcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuUHJlZmVycmVkXTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gKGEucHJlZmVycmVkID8gMSA6IDApIC0gKGIucHJlZmVycmVkID8gMSA6IDApO1xyXG4gICAgfSxcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuTG93ZXN0RW1pc3Npb25zXTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYS5jbzJQZXJJdGVtIC0gYi5jbzJQZXJJdGVtO1xyXG4gICAgfSxcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuRGVwYXJ0dXJlVGltZV06IChcclxuICAgICAgYTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0LFxyXG4gICAgICBiOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHRcclxuICAgICkgPT4ge1xyXG4gICAgICBpZiAoYS5kaXJlY3Rpb24gIT09IGIuZGlyZWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGEuZGlyZWN0aW9uIC0gYi5kaXJlY3Rpb247XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgYVRpbWUgPSBtb21lbnQoYS5kZXBhcnREYXRlVGltZSk7XHJcbiAgICAgIGNvbnN0IGJUaW1lID0gbW9tZW50KGIuZGVwYXJ0RGF0ZVRpbWUpO1xyXG4gICAgICBpZiAoYVRpbWUuaXNCZWZvcmUoYlRpbWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhVGltZS5pc1NhbWUoYlRpbWUpID8gMCA6IDE7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5BcnJpdmFsVGltZV06IChcclxuICAgICAgYTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0LFxyXG4gICAgICBiOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHRcclxuICAgICkgPT4ge1xyXG4gICAgICBpZiAoYS5kaXJlY3Rpb24gIT09IGIuZGlyZWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGEuZGlyZWN0aW9uIC0gYi5kaXJlY3Rpb247XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgYVRpbWUgPSBtb21lbnQoYS5hcnJpdmFsRGF0ZVRpbWUpO1xyXG4gICAgICBjb25zdCBiVGltZSA9IG1vbWVudChiLmFycml2YWxEYXRlVGltZSk7XHJcbiAgICAgIGlmIChhVGltZS5pc0JlZm9yZShiVGltZSkpIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGFUaW1lLmlzU2FtZShiVGltZSkgPyAwIDogMTtcclxuICAgIH0sXHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLlF1aWNrZXN0XTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYS5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmRcclxuICAgICAgICA/IGEub3V0Ym91bmRUb3RhbER1cmF0aW9uIC0gYi5vdXRib3VuZFRvdGFsRHVyYXRpb25cclxuICAgICAgICA6IChhLmluYm91bmRUb3RhbER1cmF0aW9uID8gYS5pbmJvdW5kVG90YWxEdXJhdGlvbiA6IDApIC1cclxuICAgICAgICAgICAgKGIuaW5ib3VuZFRvdGFsRHVyYXRpb24gPyBiLmluYm91bmRUb3RhbER1cmF0aW9uIDogMCk7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5Nb3N0RGlyZWN0XTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYS5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmRcclxuICAgICAgICA/IGEub3V0bGVncy5sZW5ndGggLSBiLm91dGxlZ3MubGVuZ3RoXHJcbiAgICAgICAgOiAoYS5pbmxlZ3MgfHwgW10pLmxlbmd0aCAtIChiLmlubGVncyB8fCBbXSkubGVuZ3RoO1xyXG4gICAgfVxyXG4gIH07XHJcbiAgcHJpdmF0ZSBfZmFyZVR5cGVBcnJheTogVmFsdWVEaXNwbGF5PEZhcmVUeXBlPltdID0gW1xyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuRmxleGlibGUsIGRpc3BsYXk6ICdGbGV4aWJsZScgfSxcclxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLkxlaXN1cmUsIGRpc3BsYXk6ICdMZWlzdXJlJyB9LFxyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuTG93ZXN0LCBkaXNwbGF5OiAnTG93ZXN0JyB9LFxyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuTmVnb3RpYXRlZCwgZGlzcGxheTogJ05lZ290aWF0ZWQnIH0sXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5Ob25OZWdvdGlhdGVkLCBkaXNwbGF5OiAnTm9uLU5lZ290aWF0ZWQnIH0sXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5SZXF1ZXN0RmFyZVJ1bGVzLCBkaXNwbGF5OiAnUmVxdWVzdCBGYXJlIFJ1bGVzJyB9LFxyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuU2VsZWN0QW5kUHJvLCBkaXNwbGF5OiAnU2VsZWN0ICYgUHJvJyB9XHJcbiAgXTtcclxuXHJcbiAgcHVibGljIG1pbmltdW1PdXRCb3VuZERhdGUgPSB7XHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXHJcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBtaW5pbXVtSW5Cb3VuZERhdGUgPSB7XHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXHJcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxyXG4gIH07XHJcbiAgcHJpdmF0ZSBfb3V0RGF0ZTogTmdiRGF0ZVN0cnVjdDtcclxuICBwcml2YXRlIF9vdXRUaW1lOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfaW5EYXRlOiBOZ2JEYXRlU3RydWN0O1xyXG4gIHByaXZhdGUgX2luVGltZTogc3RyaW5nO1xyXG4gIHByaXZhdGUgX2Rlc3RpbmF0aW9uQWlycG9ydDogYW55O1xyXG4gIHByaXZhdGUgX29yaWdpbkFpcnBvcnQ6IGFueTtcclxuICBwcml2YXRlIF9wYXNzZW5nZXJzOiBhbnk7XHJcbiAgLy8gcHJpdmF0ZSBncm91cGVkT2JqZWN0OiBGbGlnaHRJdGluZXJhcnlXaXRoU2VsZWN0ZWRbXTtcclxuICBwcm90ZWN0ZWQgcmVzdWx0UXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzO1xyXG4gIHByb3RlY3RlZCBfZ3JvdXBlZDogR3JvdXBlZEZsaWdodHMgPSBudWxsO1xyXG4gIHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdID0gbnVsbDtcclxuICBwcm90ZWN0ZWQgcmVzdWx0c1Nlc3Npb25OYW1lID0gRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuICBwcm90ZWN0ZWQgbXVsdGlSZXN1bHRzU2Vzc2lvbk5hbWUgPVxyXG4gICAgRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuICBzZWxlY3RlZEdyb3VwRmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucztcclxuICBwcml2YXRlIF9zaG93SG90ZWxGb3JtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfaG90ZWxTZWFyY2hSZXF1ZXN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBmaWx0ZXJzOiBCZWhhdmlvclN1YmplY3Q8RmxpZ2h0RmlsdGVycz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFxyXG4gICAgREVGQVVMVF9GTElHSFRfRklMVEVSU1xyXG4gICk7XHJcbiAgZHVyYWxTaW5nbGVGaWx0ZXI6IEJlaGF2aW9yU3ViamVjdDxGbGlnaHRGaWx0ZXJzPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoXHJcbiAgICBERUZBVUxUX0ZMSUdIVF9GSUxURVJTXHJcbiAgKTtcclxuXHJcbiAgY2hvb3NlbkRpc3BsYXlUeXBlOiBCZWhhdmlvclN1YmplY3Q8RmxpZ2h0RGlzcGxheVR5cGVzPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoXHJcbiAgICBGbGlnaHREaXNwbGF5VHlwZXMucmV0dXJuc1xyXG4gICk7XHJcbiAgY3VycmVudFNvcnQ6IEZsaWdodFNvcnRUeXBlcztcclxuICBjdXJyZW50RmlsdGVyczogRmxpZ2h0RmlsdGVycztcclxuICBzZWxlY3RlZEdyb3VwSWQ6IG51bWJlcjtcclxuICBwcml2YXRlIF9ydWxlQWN0aW9uU3VtbWFyeTogUnVsZUFjdGlvblN1bW1hcnlJbnRlcmZhY2U7XHJcbiAgbXVsdGk6IEZsaWdodE11bHRpW107XHJcbiAgcHVibGljIGdldCB0aW1lQXJyYXkoKSB7XHJcbiAgICB0aGlzLl90aW1lQXJyYXkgPVxyXG4gICAgICB0aGlzLl90aW1lQXJyYXkgfHxcclxuICAgICAgQXJyYXkoOTYpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2YWx1ZTpcclxuICAgICAgICAgICAgICBNYXRoLmZsb29yKGluZGV4IC8gNClcclxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAucGFkU3RhcnQoMiwgJzAnKSArXHJcbiAgICAgICAgICAgICAgJzonICtcclxuICAgICAgICAgICAgICAoKGluZGV4ICUgNCkgKiAxNSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpLFxyXG4gICAgICAgICAgICBkaXNwbGF5OlxyXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyA0KVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcclxuICAgICAgICAgICAgICAnOicgK1xyXG4gICAgICAgICAgICAgICgoaW5kZXggJSA0KSAqIDE1KS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5fdGltZUFycmF5O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBwcmVmZXJyZWRDYXJyaWVycygpOiBPQlRBaXJsaW5lc0RldGFpbHNbXSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBwcmVmZXJyZWRDYXJyaWVycyh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzW10pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVycyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBvcGVyYXRvcjEoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMF07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG9wZXJhdG9yMSh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMF0gPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBvcGVyYXRvcjIoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMV07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG9wZXJhdG9yMih2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMV0gPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBvcGVyYXRvcjMoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMl07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG9wZXJhdG9yMyh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMl0gPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBvcGVyYXRvcjQoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbM107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG9wZXJhdG9yNCh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbM10gPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX21pbkRhdGU6IE5nYkRhdGVTdHJ1Y3Q7XHJcbiAgcHVibGljIGdldCBtaW5EYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgdGhpcy5fbWluRGF0ZSA9IHRoaXMuX21pbkRhdGUgfHwgdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG1vbWVudCgpKTtcclxuICAgIHJldHVybiB0aGlzLl9taW5EYXRlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhZHVsdHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBhZHVsdHModmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IE51bWJlcih2YWx1ZSk7XHJcbiAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlcnMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2hpbGRyZW4oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGNoaWxkcmVuKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IE51bWJlcih2YWx1ZSk7XHJcbiAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlcnMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZGVwYXJ0TG9jYXRpb24oKTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5kZXBhcnRMb2NhdGlvbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZGVwYXJ0TG9jYXRpb24odmFsdWU6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZGVwYXJ0TG9jYXRpb24gPSB2YWx1ZTtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRoaXMuX29yaWdpbkFpcnBvcnQgPSAnJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgdmFsdWUuZ2F0ZXdheSkge1xyXG4gICAgICB0aGlzLl9vcmlnaW5BaXJwb3J0ID0gdmFsdWUuZ2F0ZXdheTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX29yaWdpbkFpcnBvcnQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBxdWVyeU9yaWdpbkFpcG9ydCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX29yaWdpbkFpcnBvcnQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHF1ZXJ5RGVzdGluYXRpb25BaXBvcnQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRlcGFydERhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0RGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZGVwYXJ0RGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fb3V0RGF0ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQoXHJcbiAgICAgIHRoaXMuX291dERhdGUsXHJcbiAgICAgIHRoaXMuX291dFRpbWVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRlcGFydFRpbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9vdXRUaW1lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBkZXBhcnRUaW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX291dFRpbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMub3V0Qm91bmREYXRlID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KFxyXG4gICAgICB0aGlzLl9vdXREYXRlLFxyXG4gICAgICB0aGlzLl9vdXRUaW1lXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBvdXRCb3VuZERhdGUoKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgb3V0Qm91bmREYXRlKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlID0gdmFsdWUuaXNWYWxpZCgpID8gdmFsdWUgOiBudWxsO1xyXG4gICAgdGhpcy5taW5pbXVtSW5Cb3VuZERhdGUgPSB7XHJcbiAgICAgIHllYXI6IHZhbHVlLnllYXIoKSxcclxuICAgICAgbW9udGg6IHZhbHVlLm1vbnRoKCkgKyAxLFxyXG4gICAgICBkYXk6IHZhbHVlLmRhdGUoKVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUgJiZcclxuICAgICAgdGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlICYmXHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUuaXNBZnRlcih0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGUpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IG1vbWVudCh0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlKS5hZGQoMSwgJ2RheScpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fb3V0RGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZSh2YWx1ZSk7XHJcbiAgICB0aGlzLl9vdXRUaW1lID0gdGhpcy5oZWxwZXJzLmZvcm1hdFRpbWVDb2xvbih2YWx1ZSk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHJldHVybkRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5EYXRlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCByZXR1cm5EYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XHJcbiAgICB0aGlzLl9pbkRhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQodGhpcy5faW5EYXRlLCB0aGlzLl9pblRpbWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhcnJpdmVUaW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5UaW1lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBhcnJpdmVUaW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2luVGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudCh0aGlzLl9pbkRhdGUsIHRoaXMuX2luVGltZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGluYm91bmREYXRlKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgaW5ib3VuZERhdGUodmFsdWU6IG1vbWVudC5Nb21lbnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSA9IHZhbHVlLmlzVmFsaWQoKSA/IHZhbHVlIDogbnVsbDtcclxuICAgIHRoaXMuX2luRGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZSh2YWx1ZSk7XHJcbiAgICB0aGlzLl9pblRpbWUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0VGltZUNvbG9uKHZhbHVlKTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYXJyaXZlTG9jYXRpb24oKTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5hcnJpdmVMb2NhdGlvbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgYXJyaXZlTG9jYXRpb24odmFsdWU6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuYXJyaXZlTG9jYXRpb24gPSB2YWx1ZTtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9ICcnO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB2YWx1ZS5nYXRld2F5KSB7XHJcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9IHZhbHVlLmdhdGV3YXk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNhYmluQ2xhc3MoKTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jYWJpbkNsYXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNhYmluQ2xhc3ModmFsdWU6IEZsaWdodENhYmluQ2xhc3MgfCBudWxsKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHJldHVybkNhYmluQ2xhc3MoKTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IHJldHVybkNhYmluQ2xhc3ModmFsdWU6IEZsaWdodENhYmluQ2xhc3MgfCBudWxsKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNob3NlblNlYXJjaFR5cGUoKTogRmxpZ2h0U2VhcmNoVHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGU7XHJcbiAgfVxyXG5cclxuICBzZXQgY2hvc2VuU2VhcmNoVHlwZSh0eXBlOiBGbGlnaHRTZWFyY2hUeXBlKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9IHR5cGU7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNSZXR1cm4oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG91dFRpbWVDcml0ZXJpYSgpOiBUaW1lV2luZG93IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUNyaXRlcmlhO1xyXG4gIH1cclxuXHJcbiAgc2V0IG91dFRpbWVDcml0ZXJpYSh2YWx1ZTogVGltZVdpbmRvdykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm91dFRpbWVDcml0ZXJpYSA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGluVGltZUNyaXRlcmlhKCk6IFRpbWVXaW5kb3cge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYTtcclxuICB9XHJcblxyXG4gIHNldCBpblRpbWVDcml0ZXJpYSh2YWx1ZTogVGltZVdpbmRvdykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmluVGltZUNyaXRlcmlhID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG4gIGdldCBtYXhDb25uZWN0aW9ucygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5tYXhDb25uZWN0aW9ucztcclxuICB9XHJcblxyXG4gIHNldCBtYXhDb25uZWN0aW9ucyh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMubWF4Q29ubmVjdGlvbnMgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX211bHRpRGVzdGluYXRpb246IERlc3RpbmF0aW9uRW50cnlbXSA9IFtdO1xyXG4gIGdldCBtdWx0aURlc3RpbmF0aW9uKCk6IElNdWx0aURlc3RpbmF0aW9uW10ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2V0IG11bHRpRGVzdGluYXRpb24odmFsdWVBcnJheTogSU11bHRpRGVzdGluYXRpb25bXSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm11bHRpRGVzdGluYXRpb24gPSB2YWx1ZUFycmF5O1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzaG93SG90ZWxGb3JtKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Nob3dIb3RlbEZvcm07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHNob3dIb3RlbEZvcm0obmV3VmFsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9zaG93SG90ZWxGb3JtID0gbmV3VmFsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBob3RlbFNlYXJjaFJlcXVlc3RlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9ob3RlbFNlYXJjaFJlcXVlc3RlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgaG90ZWxTZWFyY2hSZXF1ZXN0ZWQobmV3VmFsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9ob3RlbFNlYXJjaFJlcXVlc3RlZCA9IG5ld1ZhbDtcclxuICB9XHJcblxyXG4gIHNldE11bHRpRGVzdGluYXRpb25RdWVyeShtdWx0aURlc3RpbmF0aW9uOiBJTXVsdGlEZXN0aW5hdGlvbltdKSB7XHJcbiAgICBjb25zdCBuZXdNdWx0aURlc3RpbmF0aW9uID0gdGhpcy5oZWxwZXJzLmNsb25lKG11bHRpRGVzdGluYXRpb24pO1xyXG4gICAgcmV0dXJuIG5ld011bHRpRGVzdGluYXRpb24ucmVkdWNlKFxyXG4gICAgICAoZGVzdGluYXRpb25BcnJheTogRGVzdGluYXRpb25FbnRyeVtdLCBpdGVtOiBJTXVsdGlEZXN0aW5hdGlvbikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uT2JqZWN0ID0ge30gYXMgRGVzdGluYXRpb25FbnRyeTtcclxuICAgICAgICBkZXN0aW5hdGlvbk9iamVjdC5vcmlnID0gaXRlbS5vcmlnLmdhdGV3YXk7XHJcbiAgICAgICAgZGVzdGluYXRpb25PYmplY3QuZGVzdCA9IGl0ZW0uZGVzdC5nYXRld2F5O1xyXG4gICAgICAgIGRlc3RpbmF0aW9uT2JqZWN0LmRhdGUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0SXNvRGF0ZShpdGVtLmRhdGUpO1xyXG4gICAgICAgIGRlc3RpbmF0aW9uQXJyYXkucHVzaChkZXN0aW5hdGlvbk9iamVjdCk7XHJcbiAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uQXJyYXk7XHJcbiAgICAgIH0sXHJcbiAgICAgIFtdIGFzIERlc3RpbmF0aW9uRW50cnlbXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIGdldCBvbmx5XHJcbiAgZ2V0IHNvcnREcm9wZG93blZhbHVlcygpOiBWYWx1ZURpc3BsYXk8RmxpZ2h0U29ydFR5cGVzPltdIHtcclxuICAgIHJldHVybiB0aGlzLl9zb3J0QXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXQgZmFyZVR5cGVzVmFsdWVzKCk6IFZhbHVlRGlzcGxheTxGYXJlVHlwZT5bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmFyZVR5cGVBcnJheTtcclxuICB9XHJcblxyXG4gIGdldCBmYXJlVHlwZSgpOiBGYXJlVHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmZhcmVUeXBlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGZhcmVUeXBlKHZhbHVlOiBGYXJlVHlwZSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmZhcmVUeXBlID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgbmVnb3RpYXRlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9uZWdvdGlhdGVkO1xyXG4gIH1cclxuXHJcbiAgc2V0IG5lZ290aWF0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX25lZ290aWF0ZWQgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBpbmNsdWRlTmVhcmJ5QWlycG9ydHMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmluY2x1ZGVOZWFyYnlBaXJwb3J0cztcclxuICB9XHJcblxyXG4gIHNldCBpbmNsdWRlTmVhcmJ5QWlycG9ydHModmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHMgPSB2YWx1ZTtcclxuICB9XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGZsaWdodGZldGNoZXI6IEJhc2VGbGlnaHRRdW90ZUZldGNoZXI8RlFfUT4sXHJcbiAgICBoZWxwZXJzOiBCYXNlSGVscGVyUm91dGluZXMsXHJcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZUludGVyZmFjZSxcclxuICAgIHByaXZhdGUgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBzdG9yYWdlU2VydmljZTogQmFzZVN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzZWFyY2hTZXJ2aWNlOiBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSxcclxuICAgIHByaXZhdGUgYXBwbHlGbGlnaHRSdWxlczogQmFzZUFwcGx5Sml0RmxpZ2h0UnVsZXNGZXRjaGVyPEFKRl9RPixcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCYXNlTW9kYWxPcGVuZXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihzdG9yYWdlU2VydmljZSwgaGVscGVycyk7XHJcblxyXG4gICAgY29uc3QgZGF0YToge1xyXG4gICAgICB0ZW1wUGFyYW1zOiBGbGlnaHRUZW1wUGFyYW1zO1xyXG4gICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IEZsaWdodFRlbXBQYXJhbXM7XHJcbiAgICB9ID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIEZsaWdodEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNU1xyXG4gICAgKSB8fCB7XHJcbiAgICAgIHRlbXBQYXJhbXM6IHt9IGFzIEZsaWdodFRlbXBQYXJhbXMsXHJcbiAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDoge30gYXMgRmxpZ2h0VGVtcFBhcmFtc1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBxdWVyeSA9IHNlYXJjaFNlcnZpY2UubWFrZUZsaWdodFF1ZXJ5KGRhdGEudGVtcFBhcmFtcyk7XHJcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXMocXVlcnkpO1xyXG4gICAgdGhpcy5fb3JpZ2luYWxVc2VyU2VhcmNoID0gZGF0YS5vcmlnaW5hbFVzZXJTZWFyY2g7XHJcbiAgICBpZiAoc2VhcmNoU2VydmljZS5zaG91bGRBZGRUcmF2ZWxsZXJTdWJzY3JpcHRpb24oKSkge1xyXG4gICAgICBzZWFyY2hTZXJ2aWNlLnRyYXZlbGxlckluZm9ybWF0aW9uLnN1YnNjcmliZShcclxuICAgICAgICAodHJhdmVsbGVyczogVHJhdmVsbGVyW10pID0+IHtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVycyA9IHRyYXZlbGxlcnM7XHJcbiAgICAgICAgICBjb25zdCBzcGxpdFRyYXZlbGxlcnMgPSB0aGlzLmhlbHBlcnMuc2VsZWN0ZWRUcmF2ZWxsZXJzKFxyXG4gICAgICAgICAgICB0cmF2ZWxsZXJzLFxyXG4gICAgICAgICAgICBTZXJ2aWNlVHlwZS5GbGlnaHRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gc3BsaXRUcmF2ZWxsZXJzLmFkdWx0cy5sZW5ndGg7XHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPSBzcGxpdFRyYXZlbGxlcnMuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgICAgLy8gdGhpcy50ZW1wUGFyYW1zLmluZmFudHMgPSBzcGxpdFRyYXZlbGxlcnMuaW5mYW50cy5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJzKCk7XHJcbiAgICAgICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHVzZXJTZXJ2aWNlLmNoYW5nZVVzZXIuc3Vic2NyaWJlKChfdXNlcjogRnVsbFVzZXJEZXRhaWxzKSA9PiB7XHJcbiAgICAgIHRoaXMudGltZUNyaXRlcmlhT3B0aW9ucy5uZXh0KFtcclxuICAgICAgICBUaW1lV2luZG93LkFueXRpbWUsXHJcbiAgICAgICAgVGltZVdpbmRvdy5BcnJpdmUsXHJcbiAgICAgICAgVGltZVdpbmRvdy5EZXBhcnRcclxuICAgICAgXSk7IC8vIFRPRE8gdXBkYXRlIHdpdGggYW55IFVGc1xyXG4gICAgICB0aGlzLmZsaWdodE9wZXJhdG9ycy5uZXh0KFt7IGNvZGU6ICdCQScsIG5hbWU6ICdCcml0aXNoIEFpcndheXMnIH1dKTsgLy8gRmV0Y2ggdGhlc2UgZnJvbSBEQlxyXG4gICAgICB0aGlzLnVwZGF0ZUF2YWxpYWJsZUNsYXNzZXMoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMudXBkYXRlVHJhdmVsbGVycygpO1xyXG5cclxuICAgIHRoaXMubmVnb3RpYXRlZCA9XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5mYXJlVHlwZSA9PT0gRmFyZVR5cGUuTmVnb3RpYXRlZCA/IHRydWUgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBwcm9jZXNzUmVzdWx0cyhcclxuICAgIHJlc3VsdHM6IEZsaWdodEFsbFF1b3RlUmVzdWx0XHJcbiAgKTogRmxpZ2h0UXVvdGVSZXN1bHRBcnJheSB7XHJcbiAgICBpZiAoIXJlc3VsdHMpIHtcclxuICAgICAgdGhpcy5fZ3JvdXBlZCA9IFtdO1xyXG4gICAgICB0aGlzLm11bHRpID0gW107XHJcbiAgICAgIHRoaXMucmVzdWx0UXVlcnkgPSBudWxsO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICB0aGlzLl9ncm91cGVkID0gcmVzdWx0cy5ncm91cGVkIHx8IFtdO1xyXG4gICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkgPSBPYmplY3QuYXNzaWduKFxyXG4gICAgICB7fSxcclxuICAgICAge1xyXG4gICAgICAgIGpvdXJuZXlXaGVuU2VsZWN0ZWQ6IHt9LFxyXG4gICAgICAgIGR1YWxTaW5nbGVXaGVuU2VsZWN0ZWQ6IHt9LFxyXG4gICAgICAgIHdoZW5TZWxlY3RlZEFsb25lOiB7fVxyXG4gICAgICB9LFxyXG4gICAgICByZXN1bHRzLnJ1bGVBY3Rpb25TdW1tYXJ5XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMucmVzdWx0UXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICB0aGlzLm11bHRpID0gcmVzdWx0cy5tdWx0aTtcclxuICAgIHRoaXMuc2V0RmxpZ2h0RGlzcGxheVR5cGUoRmxpZ2h0RGlzcGxheVR5cGVzLnJldHVybnMpO1xyXG4gICAgdGhpcy5jdXJyZW50RmlsdGVycyA9IHRoaXMuaGVscGVycy5jcmVhdGVGbGlnaHRGaWx0ZXJzKFxyXG4gICAgICByZXN1bHRzLmpvdXJuZXlzLFxyXG4gICAgICBERUZBVUxUX0ZMSUdIVF9GSUxURVJTXHJcbiAgICApO1xyXG4gICAgdGhpcy5maWx0ZXJzLm5leHQodGhpcy5jdXJyZW50RmlsdGVycyk7XHJcblxyXG4gICAgZGVsZXRlIHRoaXMucmVzdWx0UXVlcnkud2l0aEdyb3VwZWQ7XHJcbiAgICBjb25zdCBkdWFsU2luZ2xlcyA9IHJlc3VsdHMubXVsdGkucmVkdWNlKFxyXG4gICAgICAoXHJcbiAgICAgICAgcHJldmlvdXNJdGVtczoge1xyXG4gICAgICAgICAgb3V0Ym91bmQ6IFJlY29yZDxudW1iZXIsIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zPjtcclxuICAgICAgICAgIGluYm91bmQ6IFJlY29yZDxudW1iZXIsIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zPjtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG5leHRJdGVtOiBJdGluZXJhcnlTdW1tYXJ5XHJcbiAgICAgICkgPT4ge1xyXG4gICAgICAgIHByZXZpb3VzSXRlbXNbbmV4dEl0ZW0ub3JkZXIgPT09IE9VVEJPVU5EID8gJ291dGJvdW5kJyA6ICdpbmJvdW5kJ10gPVxyXG4gICAgICAgICAgbmV4dEl0ZW0ucmVzdWx0cy5yZWR1Y2UoXHJcbiAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICBhY2N1bTogUmVjb3JkPG51bWJlciwgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnM+LFxyXG4gICAgICAgICAgICAgIGZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcclxuICAgICAgICAgICAgKTogUmVjb3JkPG51bWJlciwgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnM+ID0+IHtcclxuICAgICAgICAgICAgICBhY2N1bVtmbGlnaHQudWlkXSA9IE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgY2FuU2VsZWN0OiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZmxpZ2h0XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICByZXR1cm4gYWNjdW07XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHByZXZpb3VzSXRlbXNbbmV4dEl0ZW0ub3JkZXIgPT09IE9VVEJPVU5EID8gJ291dGJvdW5kJyA6ICdpbmJvdW5kJ11cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIHByZXZpb3VzSXRlbXM7XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgb3V0Ym91bmQ6IHt9LCBpbmJvdW5kOiB7fSB9XHJcbiAgICApO1xyXG4gICAgLy8gY29uc29sZS5sb2coZHVhbFNpbmdsZXMpO1xyXG4gICAgY29uc3QgZHVhbEluYm91bmRGaWx0ZXJzID0gdGhpcy5oZWxwZXJzLmNyZWF0ZUZsaWdodEZpbHRlcnMoXHJcbiAgICAgIE9iamVjdC52YWx1ZXMoZHVhbFNpbmdsZXMuaW5ib3VuZCksXHJcbiAgICAgIERFRkFVTFRfRkxJR0hUX0ZJTFRFUlNcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5kdXJhbFNpbmdsZUZpbHRlci5uZXh0KFxyXG4gICAgICB0aGlzLmhlbHBlcnMuY3JlYXRlRmxpZ2h0RmlsdGVycyhPYmplY3QudmFsdWVzKGR1YWxTaW5nbGVzLm91dGJvdW5kKSwge1xyXG4gICAgICAgIC4uLkRFRkFVTFRfRkxJR0hUX0ZJTFRFUlMsXHJcbiAgICAgICAgYXJyaXZhbFJldHVybkFpcnBvcnQ6IGR1YWxJbmJvdW5kRmlsdGVycy5hcnJpdmFsQWlycG9ydCxcclxuICAgICAgICBkZXBhdHVyZVJldHVybkFpcnBvcnQ6IGR1YWxJbmJvdW5kRmlsdGVycy5kZXBhdHVyZUFpcnBvcnQsXHJcbiAgICAgICAgcmV0dXJuQXJyaXZhbFRpbWU6IGR1YWxJbmJvdW5kRmlsdGVycy5hcnJpdmFsVGltZSxcclxuICAgICAgICByZXR1cm5EdXJhdGlvbjogZHVhbEluYm91bmRGaWx0ZXJzLmR1cmF0aW9uLFxyXG4gICAgICAgIHJldHVybkRlcGFydHVyZVRpbWU6IGR1YWxJbmJvdW5kRmlsdGVycy5kZXBhcnR1cmVUaW1lXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgaWYgKHJlc3VsdHMgJiYgdGhpcy5zZWFyY2hTZXJ2aWNlLmlzRmxpZ2h0c0dyb3VwZWQoKSkge1xyXG4gICAgICBjb25zdCByZXR1cm5zID0gKFxyXG4gICAgICAgIChyZXN1bHRzLmpvdXJuZXlzIGFzIHVua25vd24gYXMgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNbXSkgfHwgW11cclxuICAgICAgKS5yZWR1Y2UoXHJcbiAgICAgICAgKFxyXG4gICAgICAgICAgYWNjdW06IFJlY29yZDxudW1iZXIsIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zPixcclxuICAgICAgICAgIGZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcclxuICAgICAgICApOiBSZWNvcmQ8bnVtYmVyLCBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucz4gPT4ge1xyXG4gICAgICAgICAgYWNjdW1bZmxpZ2h0LnVpZF0gPSBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGNhblNlbGVjdDogdHJ1ZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmbGlnaHRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm4gYWNjdW07XHJcbiAgICAgICAgfSxcclxuICAgICAgICB7fVxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgcmV0dXJuRGF0YSA9IChyZXN1bHRzLmdyb3VwZWQgfHwgW10pLnJlZHVjZShcclxuICAgICAgICB0aGlzLm1ha2VHcm91cGVkT2JqZWN0cyhyZXR1cm5zKSxcclxuICAgICAgICBbXVxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgZHVhbERhdGFPdXRib3VuZDogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0W10gPSAoXHJcbiAgICAgICAgcmVzdWx0cy5ncm91cGVkIHx8IFtdXHJcbiAgICAgIClcclxuICAgICAgICAucmVkdWNlKHRoaXMubWFrZUdyb3VwZWRPYmplY3RzKGR1YWxTaW5nbGVzLm91dGJvdW5kKSwgW10pXHJcbiAgICAgICAgLm1hcCgocmVzdWx0MTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICByZXN1bHQxLmRpcmVjdGlvbiA9IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZU91dGJvdW5kO1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDE7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBkdWFsRGF0YUluYm91bmQ6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFtdID0gKFxyXG4gICAgICAgIHJlc3VsdHMuZ3JvdXBlZCB8fCBbXVxyXG4gICAgICApXHJcbiAgICAgICAgLnJlZHVjZSh0aGlzLm1ha2VHcm91cGVkT2JqZWN0cyhkdWFsU2luZ2xlcy5pbmJvdW5kLCB0cnVlKSwgW10pXHJcbiAgICAgICAgLm1hcCgocmVzdWx0MTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICByZXN1bHQxLmRpcmVjdGlvbiA9IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZUluYm91bmQ7XHJcbiAgICAgICAgICByZXR1cm4gcmVzdWx0MTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IGRhdGEyID0gWy4uLnJldHVybkRhdGEsIC4uLmR1YWxEYXRhT3V0Ym91bmQsIC4uLmR1YWxEYXRhSW5ib3VuZF07XHJcbiAgICAgIGNvbnNvbGUubG9nKCdQcm9jZXNzZWQgR3JvdXBlZCBkYXRhJywgZGF0YTIpO1xyXG4gICAgICByZXR1cm4gZGF0YTI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gcmVzdWx0cyA/IFtyZXN1bHRzXSA6IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIG1ha2VHcm91cGVkT2JqZWN0cyhcclxuICAgIGdyb3VwZWRPYmplY3Q6IFJlY29yZDxudW1iZXIsIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zPixcclxuICAgIHRyZWF0T3V0Ym91bmRzQXNPdXRib3VuZHM6IGJvb2xlYW4gPSBmYWxzZVxyXG4gICkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgYWNjOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHRbXSxcclxuICAgICAgaXRlbTogR3JvdXBlZEZpZWxkc0ZyYWdtZW50XHJcbiAgICApOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHRbXSA9PiB7XHJcbiAgICAgIGNvbnN0IGlzT3V0Qm91bmQgPSBpdGVtLmJvdW5kSW5kaWNhdG9yID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kO1xyXG4gICAgICBjb25zdCByZXR1cm5PYmplY3Q6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCA9IHtcclxuICAgICAgICB0eXBlOiAnRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0JyxcclxuICAgICAgICBkaXJlY3Rpb246IGl0ZW0uYm91bmRJbmRpY2F0b3IsXHJcbiAgICAgICAgY2xhc3Nlczoge1xyXG4gICAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3NdOiBudWxsIGFzIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gICAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3NCcmFuZGVkXTogbnVsbCBhcyBGbGlnaHRJdGluZXJhcnlDbGFzcyxcclxuICAgICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aV06IG51bGwgYXMgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MsXHJcbiAgICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215RmxleGlCcmFuZGVkXTpcclxuICAgICAgICAgICAgbnVsbCBhcyBGbGlnaHRJdGluZXJhcnlDbGFzcyxcclxuICAgICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3NdOiBudWxsIGFzIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gICAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFnc0JyYW5kZWRdOlxyXG4gICAgICAgICAgICBudWxsIGFzIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gICAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWRdOiBudWxsIGFzIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gICAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWRCcmFuZGVkXTpcclxuICAgICAgICAgICAgbnVsbCBhcyBGbGlnaHRJdGluZXJhcnlDbGFzcyxcclxuICAgICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkZpcnN0XTogbnVsbCBhcyBGbGlnaHRJdGluZXJhcnlDbGFzcyxcclxuICAgICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkZpcnN0QnJhbmRlZF06IG51bGwgYXMgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MsXHJcbiAgICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teV06IG51bGwgYXMgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MsXHJcbiAgICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teUJyYW5kZWRdOlxyXG4gICAgICAgICAgICBudWxsIGFzIEZsaWdodEl0aW5lcmFyeUNsYXNzXHJcbiAgICAgICAgfSxcclxuICAgICAgICBvcmlnaW5BaXJwb3J0OiAnJyxcclxuICAgICAgICBvcmlnaW5BaXJwb3J0TmFtZTogJycsXHJcbiAgICAgICAgZGVzdGluYXRpb25BaXJwb3J0OiAnJyxcclxuICAgICAgICBkZXN0aW5hdGlvbkFpcnBvcnROYW1lOiAnJyxcclxuICAgICAgICBkZXBhcnREYXRlVGltZTogJycsXHJcbiAgICAgICAgYXJyaXZhbERhdGVUaW1lOiAnJyxcclxuICAgICAgICBvdXRib3VuZFRvdGFsRHVyYXRpb246IDAsXHJcbiAgICAgICAgaW5ib3VuZFRvdGFsRHVyYXRpb246IDAsXHJcbiAgICAgICAgb3V0bGVnczogbnVsbCxcclxuICAgICAgICBpbmxlZ3M6IG51bGwsXHJcbiAgICAgICAgb3V0bGVnc0NvdW50OiAwLFxyXG4gICAgICAgIGlubGVnc0NvdW50OiAwLFxyXG4gICAgICAgIGRhdGFTb3VyY2U6ICcnLFxyXG4gICAgICAgIHByZWZlcnJlZDogZmFsc2UsXHJcbiAgICAgICAgb3V0Ym91bmRGbGlnaHROdW1iZXI6ICcnLFxyXG4gICAgICAgIG9wZXJhdG9yOiAnJyxcclxuICAgICAgICBvcGVyYXRvckZ1bGw6ICcnLFxyXG4gICAgICAgIGluYm91bmRGbGlnaHROdW1iZXI6ICcnLFxyXG4gICAgICAgIGlzUmV0dXJuOiBmYWxzZSxcclxuICAgICAgICBtaW5QcmljZTogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXHJcbiAgICAgICAgbWF4UHJpY2U6IDAsXHJcbiAgICAgICAgY28yUGVySXRlbTogMCxcclxuICAgICAgICBjbzJQZXJQYXNzZW5nZXI6IDAsXHJcbiAgICAgICAgZ2lkOiBpdGVtLnJlZmVyZW5jZUlEXHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnN0IGJyYW5kczogTWF0Y2hpbmdGbGlnaHRzID0gaXRlbS5mbGlnaHRzO1xyXG5cclxuICAgICAgT2JqZWN0LmtleXMoYnJhbmRzKVxyXG4gICAgICAgIC5maWx0ZXIoKGtleTogc3RyaW5nKSA9PiBrZXlbMF0gIT09ICdfJylcclxuICAgICAgICAuZm9yRWFjaCgoYnJhbmQ6IEZsaWdodEdyb3VwcykgPT4ge1xyXG4gICAgICAgICAgaWYgKCFicmFuZHNbYnJhbmRdLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyAhIHVzaW5nIGEgcmVkdWNlIGJlY2F1c2Ugbm90IGFsbCBmbGlnaHRzIGFjdHVhbGx5IGV4aXN0IGFuZCB3ZSB3ZXJlIHNlZWluZyB1bmRlZmluZWQgaW4gdGhlIGZsaWdodCBsaXN0XHJcbiAgICAgICAgICBicmFuZHNbYnJhbmRdLmZvckVhY2goKGZsaWdodE51bTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZsaWdodCA9IGdyb3VwZWRPYmplY3RbZmxpZ2h0TnVtXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChmbGlnaHQpIHtcclxuICAgICAgICAgICAgICBpZiAoaXNPdXRCb3VuZCB8fCB0cmVhdE91dGJvdW5kc0FzT3V0Ym91bmRzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUdyb3VwZWRJdGVtKFxyXG4gICAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QsXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5zb3VyY2UsXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5vdXRib3VuZEZsaWdodHMsXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5vdXRib3VuZFRvdGFsRHVyYXRpb24sXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5pbmJvdW5kRmxpZ2h0cyxcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0LmluYm91bmRUb3RhbER1cmF0aW9uLFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQuY28yUGVySXRlbSxcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0LmNvMlBlclBhc3NlbmdlclxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVHcm91cGVkSXRlbShcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQuc291cmNlLFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQuaW5ib3VuZEZsaWdodHMsXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5pbmJvdW5kVG90YWxEdXJhdGlvbixcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0Lm91dGJvdW5kRmxpZ2h0cyxcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0Lm91dGJvdW5kVG90YWxEdXJhdGlvbixcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0LmNvMlBlckl0ZW0sXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5jbzJQZXJQYXNzZW5nZXJcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGNvbnN0IGNvcnJlY3RCcmFuZDogT0JURmxpZ2h0Q2FiaW5DbGFzcyA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhlbHBlcnMuRmxpZ2h0Q2FiaW5DbGFzc1RvQnJhbmRlZE9CVEZsaWdodENhYmluQ2xhc3MoXHJcbiAgICAgICAgICAgICAgICAgIGJyYW5kLFxyXG4gICAgICAgICAgICAgICAgICAhIWZsaWdodC5iYXNlRmFyZUlkICYmIGZsaWdodC5iYXNlRmFyZUlkICE9PSBmbGlnaHQudWlkXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGNvbnN0IG1pbnByaWNlID0gTWF0aC5mbG9vcihmbGlnaHQudG90YWwucHJpY2UpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IG1heHByaWNlID0gTWF0aC5jZWlsKGZsaWdodC50b3RhbC5wcmljZSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0Lm1pblByaWNlID1cclxuICAgICAgICAgICAgICAgIHJldHVybk9iamVjdC5taW5QcmljZSA8IG1pbnByaWNlXHJcbiAgICAgICAgICAgICAgICAgID8gcmV0dXJuT2JqZWN0Lm1pblByaWNlXHJcbiAgICAgICAgICAgICAgICAgIDogbWlucHJpY2U7XHJcblxyXG4gICAgICAgICAgICAgIHJldHVybk9iamVjdC5tYXhQcmljZSA9XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QubWF4UHJpY2UgPiBtYXhwcmljZVxyXG4gICAgICAgICAgICAgICAgICA/IHJldHVybk9iamVjdC5tYXhQcmljZVxyXG4gICAgICAgICAgICAgICAgICA6IG1heHByaWNlO1xyXG5cclxuICAgICAgICAgICAgICBpZiAocmV0dXJuT2JqZWN0LmNsYXNzZXNbY29ycmVjdEJyYW5kXT8uZmxpZ2h0cz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuY2xhc3Nlc1tjb3JyZWN0QnJhbmRdLmZsaWdodHMucHVzaChmbGlnaHQpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybk9iamVjdC5jbGFzc2VzW2NvcnJlY3RCcmFuZF0ubWlucHJpY2UgPSBNYXRoLm1pbihcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0LmNsYXNzZXNbY29ycmVjdEJyYW5kXS5taW5wcmljZSxcclxuICAgICAgICAgICAgICAgICAgbWlucHJpY2VcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuY2xhc3Nlc1tjb3JyZWN0QnJhbmRdLm1heHByaWNlID0gTWF0aC5tYXgoXHJcbiAgICAgICAgICAgICAgICAgIHJldHVybk9iamVjdC5jbGFzc2VzW2NvcnJlY3RCcmFuZF0ubWF4cHJpY2UsXHJcbiAgICAgICAgICAgICAgICAgIG1heHByaWNlXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuY2xhc3Nlc1tjb3JyZWN0QnJhbmRdID0ge1xyXG4gICAgICAgICAgICAgICAgICBmbGlnaHRzOiBbZmxpZ2h0XSxcclxuICAgICAgICAgICAgICAgICAgbWlucHJpY2UsXHJcbiAgICAgICAgICAgICAgICAgIG1heHByaWNlLFxyXG4gICAgICAgICAgICAgICAgICBjdXJyZW5jeTogZmxpZ2h0LnRvdGFsLmN1cnJlbmN5XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAvLyBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAgIC8vICAgJ1VuYWJsZSB0byBmaW5kIGZsaWdodCB3aXRoIHVpZCAnICsgZmxpZ2h0TnVtXHJcbiAgICAgICAgICAgICAgLy8gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICByZXR1cm5PYmplY3QgJiZcclxuICAgICAgICAhIU9iamVjdC52YWx1ZXMocmV0dXJuT2JqZWN0LmNsYXNzZXMpLmZpbmQoXHJcbiAgICAgICAgICAoY2xhczogRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MpOiBib29sZWFuID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGNsYXM/LmZsaWdodHM/Lmxlbmd0aCA+IDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICBhY2MucHVzaChyZXR1cm5PYmplY3QpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhY2MuZmlsdGVyKChpdGVtMjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0KSA9PiAhIWl0ZW0yKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUdyb3VwZWRJdGVtKFxyXG4gICAgcmV0dXJuT2JqZWN0OiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICBzb3VyY2U6IHN0cmluZyxcclxuICAgIG91dGJvdW5kRmxpZ2h0czogRmxpZ2h0Sm91cm5leVtdLFxyXG4gICAgb3V0Ym91bmRUb3RhbER1cmF0aW9uOiBudW1iZXIsXHJcbiAgICBpbmJvdW5kRmxpZ2h0czogRmxpZ2h0Sm91cm5leVtdLFxyXG4gICAgaW5ib3VuZFRvdGFsRHVyYXRpb246IG51bWJlcixcclxuICAgIGNvMlBlckl0ZW06IG51bWJlcixcclxuICAgIGNvMlBlclBhc3NlbmdlcjogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICBpZiAob3V0Ym91bmRGbGlnaHRzPy5sZW5ndGggJiYgIXJldHVybk9iamVjdC5kZXBhcnREYXRlVGltZSkge1xyXG4gICAgICBjb25zdCBmaXJzdCA9IG91dGJvdW5kRmxpZ2h0c1swXTtcclxuICAgICAgY29uc3QgbGFzdCA9IG91dGJvdW5kRmxpZ2h0c1tvdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMV07XHJcbiAgICAgIHJldHVybk9iamVjdC5vcmlnaW5BaXJwb3J0ID0gZmlyc3Qub3JpZ2luQWlycG9ydDtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm9yaWdpbkFpcnBvcnROYW1lID0gZmlyc3Qub3JpZ2luQWlycG9ydE5hbWU7XHJcbiAgICAgIHJldHVybk9iamVjdC5kZXN0aW5hdGlvbkFpcnBvcnQgPSBsYXN0LmRlc3RpbmF0aW9uQWlycG9ydDtcclxuICAgICAgcmV0dXJuT2JqZWN0LmRlc3RpbmF0aW9uQWlycG9ydE5hbWUgPSBsYXN0LmRlc3RpbmF0aW9uQWlycG9ydE5hbWU7XHJcbiAgICAgIHJldHVybk9iamVjdC5kZXBhcnREYXRlVGltZSA9IGZpcnN0LmRhdGVUaW1lRGVwYXJ0aW5nO1xyXG4gICAgICByZXR1cm5PYmplY3QuYXJyaXZhbERhdGVUaW1lID0gbGFzdC5kYXRlVGltZUFycml2aW5nO1xyXG4gICAgICByZXR1cm5PYmplY3Qub3V0Ym91bmRUb3RhbER1cmF0aW9uID0gb3V0Ym91bmRUb3RhbER1cmF0aW9uO1xyXG4gICAgICByZXR1cm5PYmplY3QuZGF0YVNvdXJjZSA9IHNvdXJjZTtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm9wZXJhdG9yID0gZmlyc3QubWFya2V0aW5nQ2FycmllcjtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm9wZXJhdG9yRnVsbCA9IGZpcnN0Lm1hcmtldGluZ0NhcnJpZXJOYW1lO1xyXG4gICAgICByZXR1cm5PYmplY3Qub3V0bGVnc0NvdW50ID0gb3V0Ym91bmRGbGlnaHRzLmxlbmd0aDtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm91dGxlZ3MgPSBvdXRib3VuZEZsaWdodHM7XHJcbiAgICAgIHJldHVybk9iamVjdC5vdXRib3VuZEZsaWdodE51bWJlciA9XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmpvaW5Gcm9tQXR0cmlidXRlPEZsaWdodEpvdXJuZXk+KFxyXG4gICAgICAgICAgJy0nLFxyXG4gICAgICAgICAgJ21hcmtldGluZ0ZsaWdodE51bWJlcicsXHJcbiAgICAgICAgICBvdXRib3VuZEZsaWdodHNcclxuICAgICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuT2JqZWN0LmlzUmV0dXJuID0gZmFsc2U7XHJcbiAgICAgIHJldHVybk9iamVjdC5jbzJQZXJJdGVtID0gY28yUGVySXRlbTtcclxuICAgICAgcmV0dXJuT2JqZWN0LmNvMlBlclBhc3NlbmdlciA9IGNvMlBlclBhc3NlbmdlcjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5ib3VuZEZsaWdodHM/Lmxlbmd0aCAmJiAhcmV0dXJuT2JqZWN0LmluYm91bmRUb3RhbER1cmF0aW9uKSB7XHJcbiAgICAgIHJldHVybk9iamVjdC5pbmJvdW5kVG90YWxEdXJhdGlvbiA9IGluYm91bmRUb3RhbER1cmF0aW9uO1xyXG4gICAgICByZXR1cm5PYmplY3QuaW5sZWdzQ291bnQgPSBpbmJvdW5kRmxpZ2h0cy5sZW5ndGg7XHJcbiAgICAgIHJldHVybk9iamVjdC5pbmxlZ3MgPSBpbmJvdW5kRmxpZ2h0cztcclxuICAgICAgcmV0dXJuT2JqZWN0LmluYm91bmRGbGlnaHROdW1iZXIgPVxyXG4gICAgICAgIHRoaXMuaGVscGVycy5qb2luRnJvbUF0dHJpYnV0ZTxGbGlnaHRKb3VybmV5PihcclxuICAgICAgICAgICctJyxcclxuICAgICAgICAgICdvcGVyYXRpbmdGbGlnaHROdW1iZXInLFxyXG4gICAgICAgICAgaW5ib3VuZEZsaWdodHNcclxuICAgICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuT2JqZWN0LmlzUmV0dXJuID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBtYWtlU2Vzc2lvblJlc3VsdHMoXHJcbiAgICBkYXRhOiBGbGlnaHRRdW90ZVJlc3VsdEFycmF5XHJcbiAgKTogRmxpZ2h0U2Vzc2lvblR5cGUge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVzdWx0czogZGF0YSxcclxuICAgICAgZ3JvdXBlZDogdGhpcy5fZ3JvdXBlZCxcclxuICAgICAgcXVlcnk6IHRoaXMucmVzdWx0UXVlcnlcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXRNYXhGbGlnaHRQcmljZUZvckJyYW5kKG1hdGNoaW5nQnJhbmRGbGlnaHRzOiBGbGlnaHRJdGluZXJhcnlbXSk6IG51bWJlciB7XHJcbiAgICBsZXQgbWF4ID0gMDtcclxuICAgIG1hdGNoaW5nQnJhbmRGbGlnaHRzLmZvckVhY2goKGZsaWdodCkgPT4ge1xyXG4gICAgICBpZiAobWF4IDwgZmxpZ2h0Py50b3RhbD8ucHJpY2UpIHtcclxuICAgICAgICBtYXggPSBmbGlnaHQudG90YWwucHJpY2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG1heDtcclxuICB9XHJcbiAgZ2V0TWluRmxpZ2h0UHJpY2VGb3JCcmFuZChtYXRjaGluZ0JyYW5kRmxpZ2h0czogRmxpZ2h0SXRpbmVyYXJ5W10pOiBudW1iZXIge1xyXG4gICAgbGV0IG1pbiA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xyXG4gICAgbWF0Y2hpbmdCcmFuZEZsaWdodHMuZm9yRWFjaCgoZmxpZ2h0KSA9PiB7XHJcbiAgICAgIGlmIChtaW4gPiBmbGlnaHQ/LnRvdGFsPy5wcmljZSkge1xyXG4gICAgICAgIG1pbiA9IGZsaWdodC50b3RhbC5wcmljZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbWluO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHJlc2V0UXVlcnkoY2hlY2tJc1ZhbGlkOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHRoaXMuc2VhcmNoU2VydmljZS5tYWtlRmxpZ2h0UXVlcnkoKSk7XHJcbiAgICBpZiAoY2hlY2tJc1ZhbGlkKSB7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldFBhcmFtcygpOiB2b2lkIHtcclxuICAgIHRoaXMucmVzZXQoKTtcclxuICAgIHRoaXMucmVzZXRRdWVyeSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNWYWxpZCgpIHtcclxuICAgIGlmICghdGhpcy5kb0NoZWNrcykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBGbGlnaHRFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgIHtcclxuICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXHJcbiAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzID0gW107XHJcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUubXVsdGlDaXR5KSB7XHJcbiAgICAgIHRoaXMubXVsdGlDaXR5VmFsaWRhdGlvbigpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKCF0aGlzLl9vcmlnaW5BaXJwb3J0KSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIGFkZCBpbiBhIGRlcGFydHVyZSBsb2NhdGlvbicpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0KSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIGFkZCBpbiBhbiBhcnJpdmFsIGRlc3RpbmF0aW9uJyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlLmlzQWZ0ZXIobW9tZW50KCkpKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnRGVwYXJ0dXJlIGRhdGUgY2FuIG5vdCBiZSBpbiB0aGUgcGFzdCcpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5fb3JpZ2luQWlycG9ydCAmJlxyXG4gICAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCAmJlxyXG4gICAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9PT0gdGhpcy5fb3JpZ2luQWlycG9ydFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICAgJ09yaWdpbiBhbmQgZGVzdGluYXRpb24gYWlycG9ydCBjYW5ub3QgYmUgdGhlIHNhbWUnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pc1JldHVybikge1xyXG4gICAgICAgIC8vIFRPRE8gY2hlY2sgdGhhdCByZXR1cm4gZGV0YWlscyBhcmUgc2V0XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZS5pc1NhbWVPckFmdGVyKFxyXG4gICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuaW5UaW1lQ3JpdGVyaWFcclxuICAgICAgICAgIClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgICAgICdSZXR1cm4gZGF0ZSBtdXN0IGJlIGFmdGVyIHRoZSBkZXBhcnR1cmUgZGF0ZSdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaXNWYWxpZC5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMCk7XHJcbiAgICAgIHRoaXMubWVzc2FnZXMubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtdWx0aUNpdHlWYWxpZGF0aW9uKCkge1xyXG4gICAgbGV0IGlzZW1wdHlWYWx1ZSA9IGZhbHNlO1xyXG4gICAgbGV0IGlzZW1wdHlMYW5kaW5nID0gZmFsc2U7XHJcbiAgICBsZXQgaXNTYW1lVmFsdWUgPSBmYWxzZTtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uLm1hcCgoZWxlbWVudCwgaSkgPT4ge1xyXG4gICAgICBpZiAoIWVsZW1lbnQub3JpZykge1xyXG4gICAgICAgIGlzZW1wdHlWYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgaWYgKGkgPCAyKSB7XHJcbiAgICAgICAgICBpc2VtcHR5TGFuZGluZyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChlbGVtZW50Lm9yaWcgPT09IGVsZW1lbnQuZGVzdCkgaXNTYW1lVmFsdWUgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgICBpZiAoIW1vbWVudCh0aGlzLnRlbXBQYXJhbXMubXVsdGlEZXN0aW5hdGlvblswXS5kYXRlKS5pc0FmdGVyKG1vbWVudCgpKSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdEZXBhcnR1cmUgZGF0ZSBjYW4gbm90IGJlIGluIHRoZSBwYXN0Jyk7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNlbXB0eUxhbmRpbmcpXHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBzZWxlY3QgbGFuZGluZyBhaXJwb3J0KHMpJyk7XHJcbiAgICBpZiAoaXNlbXB0eVZhbHVlKVxyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2Ugc2VsZWN0IHRha2Ugb2ZmIGFpcnBvcnQocyknKTtcclxuICAgIGlmIChpc1NhbWVWYWx1ZSlcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAnVGFrZSBvZmYgYW5kIGxhbmRpbmcgbG9jYXRpb24ocykgY2Fubm90IGJlIHRoZSBzYW1lJ1xyXG4gICAgICApO1xyXG4gIH1cclxuICBzdGFydFNlYXJjaCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX29yaWdpbmFsVXNlclNlYXJjaCA9IE9iamVjdC5mcmVlemUoXHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMudGVtcFBhcmFtcylcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgICBGbGlnaHRFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxyXG4gICAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlUmVjZW50U2VhcmNoKHRoaXMuZ2V0UmVjZW50U2VhcmNoUXVlcnkocXVlcnkpKTtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLl9zdGFydFNlYXJjaCh0aGlzLmZsaWdodGZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFJlY2VudFNlYXJjaFF1ZXJ5KFxyXG4gICAgcXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzXHJcbiAgKTogU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5GbGlnaHQsXHJcbiAgICAgIHNlYXJjaEFyZ3M6IHF1ZXJ5LFxyXG4gICAgICB0cmF2ZWxEYXRlOiB0aGlzLm91dEJvdW5kRGF0ZS5mb3JtYXQoKSxcclxuICAgICAgdHJhdmVsbGVyczogdGhpcy5oZWxwZXJzLmdldFRyYXZlbGxlcnNJZCh0aGlzLnRyYXZlbGxlcnMpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXJ0UmVjZW50U2VhcmNoKHJlY2VudFNlYXJjaDogUmVjZW50U2VhcmNoKTogdm9pZCB7XHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmREYXRlKSB7XHJcbiAgICAgIGxldCBvdXRib3VuZFRpbWVXaW5kb3cgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJnc1xyXG4gICAgICAgIC5vdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3dcclxuICAgICAgICA/IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvd1xyXG4gICAgICAgIDogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdztcclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmNvbnZlcnRSZWNlbnRTZWFyY2hEYXRlVGltZShcclxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZERhdGUsXHJcbiAgICAgICAgb3V0Ym91bmRUaW1lV2luZG93XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRhdGUpIHtcclxuICAgICAgbGV0IHJldHVyblRpbWVXaW5kb3cgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgPyByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5BcnJpdmFsVGltZVdpbmRvdztcclxuICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKFxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRhdGUsXHJcbiAgICAgICAgcmV0dXJuVGltZVdpbmRvd1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmFyZVR5cGUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5mYXJlVHlwZTtcclxuICAgIHRoaXMubWF4Q29ubmVjdGlvbnMgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5tYXhDb25uZWN0aW9ucztcclxuXHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmRDYWJpbkNsYXNzKSB7XHJcbiAgICAgIHRoaXMuY2FiaW5DbGFzcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kQ2FiaW5DbGFzc1swXTtcclxuICAgIH1cclxuICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5DYWJpbkNsYXNzKSB7XHJcbiAgICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkNhYmluQ2xhc3NbMF07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHMgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5pbmNsdWRlTmVhcmJ5QWlycG9ydHNcclxuICAgICAgPyB0cnVlXHJcbiAgICAgIDogZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuVHJpcFxyXG4gICAgICA/IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuXHJcbiAgICAgIDogRmxpZ2h0U2VhcmNoVHlwZS5vbmVXYXk7XHJcblxyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvdykge1xyXG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuRGVwYXJ0O1xyXG4gICAgfSBlbHNlIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZEFycml2YWxUaW1lV2luZG93KSB7XHJcbiAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5BcnJpdmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQW55dGltZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvdykge1xyXG4gICAgICB0aGlzLmluVGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5EZXBhcnQ7XHJcbiAgICB9IGVsc2UgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkFycml2YWxUaW1lV2luZG93KSB7XHJcbiAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFycml2ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFueXRpbWU7XHJcbiAgICB9XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbXHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0QnlDb2RlKFxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm9yaWdpbkFpcnBvcnRcclxuICAgICAgKSxcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEFpcnBvcnRCeUNvZGUoXHJcbiAgICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVzdGluYXRpb25BaXJwb3J0XHJcbiAgICAgIClcclxuICAgIF0pLnN1YnNjcmliZSgoW2RlcGFydExvY2F0aW9uLCBhcnJpdmVMb2NhdGlvbl0pID0+IHtcclxuICAgICAgaWYgKGRlcGFydExvY2F0aW9uICYmIGFycml2ZUxvY2F0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5kZXBhcnRMb2NhdGlvbiA9IHtcclxuICAgICAgICAgIGRlc3RpbmF0aW9uOiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2gubmFtZSxcclxuICAgICAgICAgIGdhdGV3YXk6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaC5pYXRhLFxyXG4gICAgICAgICAgdGVybWluYWxzOiB0aGlzLnNlYXJjaFNlcnZpY2UucHJvY2Vzc1Rlcm1pbmFscyhcclxuICAgICAgICAgICAgZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLnRlcm1pbmFsc1xyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGNvdW50cnk6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5LFxyXG4gICAgICAgICAgcG9zdGNvZGU6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5wb3N0Y29kZSxcclxuICAgICAgICAgIGNvdW50cnlDb2RlOiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeUNvZGVcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuYXJyaXZlTG9jYXRpb24gPSB7XHJcbiAgICAgICAgICBkZXN0aW5hdGlvbjogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLm5hbWUsXHJcbiAgICAgICAgICBnYXRld2F5OiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2guaWF0YSxcclxuICAgICAgICAgIHRlcm1pbmFsczogdGhpcy5zZWFyY2hTZXJ2aWNlLnByb2Nlc3NUZXJtaW5hbHMoXHJcbiAgICAgICAgICAgIGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC50ZXJtaW5hbHNcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBjb3VudHJ5OiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeSxcclxuICAgICAgICAgIHBvc3Rjb2RlOiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8ucG9zdGNvZGUsXHJcbiAgICAgICAgICBjb3VudHJ5Q29kZTogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnByZWZlcnJlZENhcnJpZXJzKSB7XHJcbiAgICAgICAgICBjb25zdCBwcmVmZXJyZWRDYXJyaWVyczogT0JUQWlybGluZXNEZXRhaWxzW10gPSBbXTtcclxuICAgICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnByZWZlcnJlZENhcnJpZXJzLm1hcChcclxuICAgICAgICAgICAgKHByZWZlcnJlZENhcnJ5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgICAgICAgICAgIC5nZXRBaXJsaW5lc0xpc3QocHJlZmVycmVkQ2FycnkpXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChpdGVtczogT0JUQWlybGluZXNEZXRhaWxzW10pID0+IHtcclxuICAgICAgICAgICAgICAgICAgaXRlbXMubWFwKChpdGVtOiBPQlRBaXJsaW5lc0RldGFpbHMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5jb2RlID09PSBwcmVmZXJyZWRDYXJyeSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcHJlZmVycmVkQ2FycmllcnMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnByZWZlcnJlZENhcnJpZXJzID0gcHJlZmVycmVkQ2FycmllcnM7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYWtlRGVwYXJ0dXJlVGltZVdpbmRvdyhcclxuICAgIGRhdGVUaW1lOiBtb21lbnQuTW9tZW50LFxyXG4gICAgd2luZG93OiBUaW1lV2luZG93LFxyXG4gICAgaXNGbGlnaHRzR3JvdXBlZDogYm9vbGVhblxyXG4gICk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gd2luZG93ID09PSBUaW1lV2luZG93LkRlcGFydFxyXG4gICAgICA/IGlzRmxpZ2h0c0dyb3VwZWRcclxuICAgICAgICA/IHRoaXMuaGVscGVycy5tYWtlVGltZVdpbmRvdyhkYXRlVGltZSwgLTIsIDIpXHJcbiAgICAgICAgOiB0aGlzLmhlbHBlcnMubWFrZVRpbWVXaW5kb3coZGF0ZVRpbWUsIDAsIDQpXHJcbiAgICAgIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWFrZUFycml2YWxUaW1lV2luZG93KFxyXG4gICAgZGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQsXHJcbiAgICB3aW5kb3c6IFRpbWVXaW5kb3csXHJcbiAgICBpc0ZsaWdodHNHcm91cGVkOiBib29sZWFuXHJcbiAgKTogc3RyaW5nIHtcclxuICAgIGlmICh3aW5kb3cgIT09IFRpbWVXaW5kb3cuQXJyaXZlKSByZXR1cm4gbnVsbDtcclxuICAgIHJldHVybiBpc0ZsaWdodHNHcm91cGVkXHJcbiAgICAgID8gdGhpcy5oZWxwZXJzLm1ha2VUaW1lV2luZG93KGRhdGVUaW1lLCAtMiwgMilcclxuICAgICAgOiB0aGlzLmhlbHBlcnMubWFrZVRpbWVXaW5kb3coZGF0ZVRpbWUsIDAsIDQpO1xyXG4gIH1cclxuXHJcbiAgY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKFxyXG4gICAgZGF0ZTogc3RyaW5nLFxyXG4gICAgdGltZVdpbmRvdz86IHN0cmluZ1xyXG4gICk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgaWYgKHRpbWVXaW5kb3cpIHtcclxuICAgICAgY29uc3QgZmxpZ2h0VGltZSA9IHRpbWVXaW5kb3cuc3BsaXQoJy0nKTtcclxuICAgICAgY29uc3QgdGltZUFuZERhdGUgPSBtb21lbnQoZGF0ZSkuYWRkKFxyXG4gICAgICAgIG1vbWVudC5kdXJhdGlvbih0aGlzLmhlbHBlcnMuaGhtbVRvVGltZShmbGlnaHRUaW1lWzBdKSlcclxuICAgICAgKTtcclxuICAgICAgLy8gYWRkIDIgaG91clxyXG4gICAgICByZXR1cm4gdGltZUFuZERhdGUuY2xvbmUoKS5hZGQoMiwgJ2hvdXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBtb21lbnQoZGF0ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTZWFyY2hRdWVyeSgpOiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyB7XHJcbiAgICBjb25zdCBpc011bHRpQ2l0eUFjdGl2ZSA9XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eTtcclxuICAgIHRoaXMuX211bHRpRGVzdGluYXRpb24gPSBpc011bHRpQ2l0eUFjdGl2ZVxyXG4gICAgICA/IHRoaXMuc2V0TXVsdGlEZXN0aW5hdGlvblF1ZXJ5KHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uKVxyXG4gICAgICA6IG51bGw7XHJcblxyXG4gICAgdGhpcy5fbXVsdGlEZXN0aW5hdGlvbiA9XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eVxyXG4gICAgICAgID8gdGhpcy5zZXRNdWx0aURlc3RpbmF0aW9uUXVlcnkodGhpcy50ZW1wUGFyYW1zLm11bHRpRGVzdGluYXRpb24pXHJcbiAgICAgICAgOiBbXTtcclxuICAgIGNvbnN0IGlzRmxpZ2h0c0dyb3VwZWQgPSB0aGlzLnNlYXJjaFNlcnZpY2UuaXNGbGlnaHRzR3JvdXBlZCgpO1xyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcz4oXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAge30sXHJcbiAgICAgICAgaXNNdWx0aUNpdHlBY3RpdmVcclxuICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgIG11bHRpRGVzdGluYXRpb246IHRoaXMuX211bHRpRGVzdGluYXRpb25cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgb3JpZ2luQWlycG9ydDogdGhpcy5fb3JpZ2luQWlycG9ydCxcclxuICAgICAgICAgICAgICBkZXN0aW5hdGlvbkFpcnBvcnQ6IHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCxcclxuICAgICAgICAgICAgICBvdXRib3VuZERhdGU6IHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlKFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZVxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgb3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93OiB0aGlzLm1ha2VEZXBhcnR1cmVUaW1lV2luZG93KFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZSxcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lQ3JpdGVyaWEsXHJcbiAgICAgICAgICAgICAgICBpc0ZsaWdodHNHcm91cGVkXHJcbiAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICBvdXRib3VuZEFycml2YWxUaW1lV2luZG93OiB0aGlzLm1ha2VBcnJpdmFsVGltZVdpbmRvdyhcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUNyaXRlcmlhLFxyXG4gICAgICAgICAgICAgICAgaXNGbGlnaHRzR3JvdXBlZFxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBwYXNzZW5nZXJzOiB0aGlzLl9wYXNzZW5nZXJzLFxyXG4gICAgICAgICAgcmV0dXJuVHJpcDogdGhpcy5pc1JldHVybixcclxuICAgICAgICAgIG91dGJvdW5kQ2FiaW5DbGFzczogdGhpcy50ZW1wUGFyYW1zLmNhYmluQ2xhc3NcclxuICAgICAgICAgICAgPyBbdGhpcy50ZW1wUGFyYW1zLmNhYmluQ2xhc3NdXHJcbiAgICAgICAgICAgIDogbnVsbCxcclxuICAgICAgICAgIHJlcXVpcmVGcmVlQmFnOiBudWxsLFxyXG4gICAgICAgICAgbWF4Q29ubmVjdGlvbnM6IHRoaXMudGVtcFBhcmFtcy5tYXhDb25uZWN0aW9ucyxcclxuICAgICAgICAgIGluY2x1ZGVOZWFyYnlBaXJwb3J0czogdGhpcy50ZW1wUGFyYW1zLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyxcclxuICAgICAgICAgIHByZWZlcnJlZENhcnJpZXJzOiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnMubWFwKFxyXG4gICAgICAgICAgICAoY2FycmllcjogT0JUQWlybGluZXNEZXRhaWxzKSA9PlxyXG4gICAgICAgICAgICAgIGNhcnJpZXI/LmNvZGUgPyBjYXJyaWVyLmNvZGUgOiBudWxsXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgZmFyZVR5cGU6IHRoaXMudGVtcFBhcmFtcy5mYXJlVHlwZSxcclxuICAgICAgICAgIHdpdGhHcm91cGVkOiBpc0ZsaWdodHNHcm91cGVkXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0aGlzLmlzUmV0dXJuXHJcbiAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICByZXR1cm5EYXRlOiB0aGlzLmhlbHBlcnMuZm9ybWF0SXNvRGF0ZShcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZVxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgcmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvdzogdGhpcy5tYWtlRGVwYXJ0dXJlVGltZVdpbmRvdyhcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSxcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYSxcclxuICAgICAgICAgICAgICAgIGlzRmxpZ2h0c0dyb3VwZWRcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIHJldHVybkFycml2YWxUaW1lV2luZG93OiB0aGlzLm1ha2VBcnJpdmFsVGltZVdpbmRvdyhcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSxcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYSxcclxuICAgICAgICAgICAgICAgIGlzRmxpZ2h0c0dyb3VwZWRcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIHJldHVybkNhYmluQ2xhc3M6IHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzXHJcbiAgICAgICAgICAgICAgICA/IFt0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzc11cclxuICAgICAgICAgICAgICAgIDogbnVsbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA6IHt9XHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVRyYXZlbGxlcnMoKSB7XHJcbiAgICBjb25zdCB0cmF2ZWxsZXJzOiBGbGlnaHRQYXNzZW5nZXJPYmplY3RbXSA9IFtdO1xyXG4gICAgZm9yIChsZXQgbG9vcCA9IDA7IGxvb3AgPCB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzOyBsb29wICs9IDEpIHtcclxuICAgICAgdHJhdmVsbGVycy5wdXNoKHsgdHlwZTogRmxpZ2h0UGFzc2VuZ2VyVHlwZS5BZHVsdCB9KTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IGxvb3AgPSAwOyBsb29wIDwgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuOyBsb29wICs9IDEpIHtcclxuICAgICAgdHJhdmVsbGVycy5wdXNoKHsgdHlwZTogRmxpZ2h0UGFzc2VuZ2VyVHlwZS5DaGlsZCB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9wYXNzZW5nZXJzID0gdHJhdmVsbGVycztcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlQXZhbGlhYmxlQ2xhc3NlcygpIHtcclxuICAgIGNvbnN0IGhpZGVDbGFzc2VzID1cclxuICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRmF2b3JpdGVPYmplY3Q8SGlkZUZsaWdodENhYmluQ2xhc3NJbnRlcmZhY2U+KFxyXG4gICAgICAgIFVzZXJGYXZvcnVyaXRlLkhpZGVGbGlnaHRDYWJpbkNsYXNzZXNcclxuICAgICAgKSB8fCB7XHJcbiAgICAgICAgYW55OiBmYWxzZSxcclxuICAgICAgICBidXNpbmVzczogZmFsc2UsXHJcbiAgICAgICAgZWNvbm9teTogZmFsc2UsXHJcbiAgICAgICAgZmlyc3Q6IGZhbHNlLFxyXG4gICAgICAgIHByZW1pdW1FY29ub215OiBmYWxzZVxyXG4gICAgICB9O1xyXG5cclxuICAgIGNvbnN0IG9wdGlvbnM6IHsgbmFtZTogc3RyaW5nOyB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzIH1bXSA9IFtdO1xyXG4gICAgaWYgKCFoaWRlQ2xhc3Nlcy5hbnkpIHtcclxuICAgICAgb3B0aW9ucy5wdXNoKHsgbmFtZTogJ0FueScsIHR5cGU6IEZsaWdodENhYmluQ2xhc3MuQW55IH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKCFoaWRlQ2xhc3Nlcy5lY29ub215KSB7XHJcbiAgICAgIG9wdGlvbnMucHVzaCh7IG5hbWU6ICdFY29ub215JywgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaGlkZUNsYXNzZXMucHJlbWl1bUVjb25vbXkpIHtcclxuICAgICAgb3B0aW9ucy5wdXNoKHsgbmFtZTogJ1ByZW1pdW0nLCB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaGlkZUNsYXNzZXMuYnVzaW5lc3MpIHtcclxuICAgICAgb3B0aW9ucy5wdXNoKHsgbmFtZTogJ0J1c2luZXNzJywgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzcyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWhpZGVDbGFzc2VzLmZpcnN0KSB7XHJcbiAgICAgIG9wdGlvbnMucHVzaCh7IG5hbWU6ICdGaXJzdCcsIHR5cGU6IEZsaWdodENhYmluQ2xhc3MuRmlyc3QgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jYWJpbkNsYXNzID0gdGhpcy5nZXRVcGRhdGVkQ2FiaW5DbGFzcyhcclxuICAgICAgdGhpcy5jYWJpbkNsYXNzLFxyXG4gICAgICBoaWRlQ2xhc3NlcyxcclxuICAgICAgb3B0aW9uc1xyXG4gICAgKTtcclxuICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9IHRoaXMuZ2V0VXBkYXRlZENhYmluQ2xhc3MoXHJcbiAgICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyxcclxuICAgICAgaGlkZUNsYXNzZXMsXHJcbiAgICAgIG9wdGlvbnNcclxuICAgICk7XHJcbiAgICB0aGlzLmF2YWxpYWJsZUNsYXNzZXMubmV4dChvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VXBkYXRlZENhYmluQ2xhc3MoXHJcbiAgICBjYWJpbkNsYXNzOiBGbGlnaHRDYWJpbkNsYXNzLFxyXG4gICAgaGlkZUNsYXNzZXM6IEhpZGVGbGlnaHRDYWJpbkNsYXNzSW50ZXJmYWNlLFxyXG4gICAgb3B0aW9uczogeyBuYW1lOiBzdHJpbmc7IHR5cGU6IEZsaWdodENhYmluQ2xhc3MgfVtdXHJcbiAgKTogRmxpZ2h0Q2FiaW5DbGFzcyB7XHJcbiAgICBzd2l0Y2ggKGNhYmluQ2xhc3MpIHtcclxuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkFueTpcclxuICAgICAgICByZXR1cm4gaGlkZUNsYXNzZXMuYW55ID8gb3B0aW9uc1swXS50eXBlIDogY2FiaW5DbGFzcztcclxuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzOlxyXG4gICAgICAgIHJldHVybiBoaWRlQ2xhc3Nlcy5idXNpbmVzcyA/IG9wdGlvbnNbMF0udHlwZSA6IGNhYmluQ2xhc3M7XHJcbiAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215OlxyXG4gICAgICAgIHJldHVybiBoaWRlQ2xhc3Nlcy5lY29ub215ID8gb3B0aW9uc1swXS50eXBlIDogY2FiaW5DbGFzcztcclxuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkZpcnN0OlxyXG4gICAgICAgIHJldHVybiBoaWRlQ2xhc3Nlcy5maXJzdCA/IG9wdGlvbnNbMF0udHlwZSA6IGNhYmluQ2xhc3M7XHJcbiAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teTpcclxuICAgICAgICByZXR1cm4gaGlkZUNsYXNzZXMucHJlbWl1bUVjb25vbXkgPyBvcHRpb25zWzBdLnR5cGUgOiBjYWJpbkNsYXNzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNhYmluQ2xhc3M7XHJcbiAgfVxyXG4gIHVwZGF0ZUZyb21QcmV2aW91c1NlYXJjaGVzKFxyXG4gICAgX3ByZXZpb3VzSXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT5cclxuICApOiB2b2lkIHtcclxuICAgIC8vIEZsaWdodHMgY2FuIG5vdCBiZSBzZWFyY2ggYWZ0ZXIgb3RoZXIgcHJvZHVjdHMgc28gbm8gZGVmYXVsdHMgY2FuIGJlIHNldC5cclxuICB9XHJcblxyXG4gIGdldFRvdGFsQmFnZ2FnZShyZXN1bHQ6IEZsaWdodEl0aW5lcmFyeSk6IG51bWJlciB7XHJcbiAgICBsZXQgdG90YWwgPSAwO1xyXG5cclxuICAgIGNvbnN0IHBhcnNlZEFkZGl0aW9uYWwgPSBKU09OLnBhcnNlKHJlc3VsdC5hZGRpdGlvbmFsKTtcclxuICAgIGlmIChwYXJzZWRBZGRpdGlvbmFsICYmIHBhcnNlZEFkZGl0aW9uYWwub3V0Ym91bmRGbGlnaHRzKSB7XHJcbiAgICAgIHBhcnNlZEFkZGl0aW9uYWwub3V0Ym91bmRGbGlnaHRzLmZvckVhY2goKGZsaWdodDogYW55KSA9PiB7XHJcbiAgICAgICAgZmxpZ2h0LmJhZ2dhZ2UuZm9yRWFjaCgoYmFnOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChiYWcuYWxsb3dhbmNlICYmIGJhZy5hbGxvd2FuY2UgPiB0b3RhbCkge1xyXG4gICAgICAgICAgICB0b3RhbCA9IGJhZy5hbGxvd2FuY2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChwYXJzZWRBZGRpdGlvbmFsICYmIHBhcnNlZEFkZGl0aW9uYWwuYmFnZ2FnZUFsbG93YW5jZSkge1xyXG4gICAgICBwYXJzZWRBZGRpdGlvbmFsLmJhZ2dhZ2VBbGxvd2FuY2UuZm9yRWFjaCgoYmFnZ2FnZUFsbG93OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBiYWdnYWdlQWxsb3cuYmFnZ2FnZS5xdHkgJiZcclxuICAgICAgICAgIE51bWJlcihiYWdnYWdlQWxsb3cuYmFnZ2FnZS5xdHkpID4gdG90YWxcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRvdGFsID0gTnVtYmVyKGJhZ2dhZ2VBbGxvdy5iYWdnYWdlLnF0eSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdG90YWw7XHJcbiAgfVxyXG5cclxuICBpc0dyb3VwZWRGbGlnaHRzKFxyXG4gICAgdG9UZXN0OiBGbGlnaHRRdW90ZVJlc3VsdEFycmF5XHJcbiAgKTogdG9UZXN0IGlzIEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFtdIHtcclxuICAgIHJldHVybiB0b1Rlc3RbMF0/LnR5cGUgPT09ICdGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQnO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBmaWx0ZXIgdGhlIHJlc3VsdHMsIHRoZW4gc29ydCB0aGUgcmVtYWluZGVyXHJcbiAgICogQHRvZG8gLSBBZGQgZmlsdGVycyBmb3IgdHJhdmVsIHBvbGljeSwgZmFyZSB0eXBlcyBhbmQgYW5jaWxsaWFyaWVzXHJcbiAgICovXHJcbiAgYXBwbHlGaWx0ZXJzKGZpbHRlcnM6IEZsaWdodEZpbHRlcnMsIHNvcnRWYWx1ZTogRmxpZ2h0U29ydFR5cGVzKTogdm9pZCB7XHJcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXJzID0gZmlsdGVycztcclxuICAgIHRoaXMuY3VycmVudFNvcnQgPSBzb3J0VmFsdWU7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnKysrIEFwcGx5aW5nIEZpbHRlcnMgdG8gZmxpZ2h0czogJywgZmlsdGVycywgJyArKysnKTtcclxuICAgIGlmICh0aGlzLmZ1bGxSZXN1bHRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLnJlc3VsdHMubmV4dChbXSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZmlsdGVyU2VsZWN0ZWRGbGlnaHRzOiAoXHJcbiAgICAgIGdyb3Vwc1RvU2hvdzogbnVtYmVyW10sXHJcbiAgICAgIGRpcmVjdGlvbjogRmxpZ2h0RGlyZWN0aW9uRW51bVxyXG4gICAgKSA9PiAoZjogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuID0gdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0XHJcbiAgICAgID8gdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0LmluYm91bmRGbGlnaHRzPy5sZW5ndGhcclxuICAgICAgICA/IChncm91cHNUb1Nob3c6IG51bWJlcltdLCBkaXJlY3Rpb246IEZsaWdodERpcmVjdGlvbkVudW0pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZUluYm91bmQgfHxcclxuICAgICAgICAgICAgICAgIGdyb3Vwc1RvU2hvdy5pbmNsdWRlcyhmbGlnaHRJdGluZXJhcnkudWlkKVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgOiAoZ3JvdXBzVG9TaG93OiBudW1iZXJbXSwgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpOiBib29sZWFuID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkR1YWxTaW5nbGVJbmJvdW5kIHx8XHJcbiAgICAgICAgICAgICAgICBncm91cHNUb1Nob3cuaW5jbHVkZXMoZmxpZ2h0SXRpbmVyYXJ5LnVpZClcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICA6IChfZ3JvdXBzVG9TaG93OiBudW1iZXJbXSwgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKF9mbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICBjb25zdCB0ZXN0ZXIgPSAoXHJcbiAgICAgIGZpbHRlcnNUb3Rlc3Q6IFJlY29yZDxudW1iZXIgfCBzdHJpbmcsIFNlbGVjdEZpbHRlcj4sXHJcbiAgICAgIHRlc3RGdW5jdGlvbjogKFxyXG4gICAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leSxcclxuICAgICAgICB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyXHJcbiAgICAgICkgPT4gYm9vbGVhblxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gT2JqZWN0LnZhbHVlcyhmaWx0ZXJzVG90ZXN0KS5maWx0ZXIoXHJcbiAgICAgICAgKGZpbHRlcjogU2VsZWN0RmlsdGVyKSA9PiBmaWx0ZXIuc2VsZWN0ZWRcclxuICAgICAgKTtcclxuICAgICAgaWYgKHNlbGVjdGVkLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gISFzZWxlY3RlZC5maW5kKChmaWx0ZXI6IFNlbGVjdEZpbHRlcikgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGVzdEZ1bmN0aW9uKGZsaWdodEl0aW5lcmFyeSwgZmlsdGVyLnZhbHVlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIChfZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHJlcGxhY2VGaWVsZHMgPSAoXHJcbiAgICAgIGZpZWxkOiBzdHJpbmcsXHJcbiAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5XHJcbiAgICApOiBzdHJpbmcgPT4ge1xyXG4gICAgICByZXR1cm4gZmllbGRcclxuICAgICAgICAucmVwbGFjZSgnT1VUQk9VTkRfREVQQVJUVVJFJywgJ291dGJvdW5kRmxpZ2h0cy4wJylcclxuICAgICAgICAucmVwbGFjZShcclxuICAgICAgICAgICdPVVRCT1VORF9BUlJJVkFMJyxcclxuICAgICAgICAgICdvdXRib3VuZEZsaWdodHMuJyArIChmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDEpXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5yZXBsYWNlKCdJTkJPVU5EX0RFUEFSVFVSRScsICdpbmJvdW5kRmxpZ2h0cy4wJylcclxuICAgICAgICAucmVwbGFjZShcclxuICAgICAgICAgICdJTkJPVU5EX0FSUklWQUwnLFxyXG4gICAgICAgICAgJ2luYm91bmRGbGlnaHRzLicgK1xyXG4gICAgICAgICAgICAoKGZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cyB8fCBbXSkubGVuZ3RoIC0gMSlcclxuICAgICAgICApO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGlzQmV0d2VlbiA9IChcclxuICAgICAgbWlubWF4OiBNaW5NYXgsXHJcbiAgICAgIGZpZWxkOiBzdHJpbmdcclxuICAgICk6ICgoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW4pID0+IHtcclxuICAgICAgcmV0dXJuIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuaGVscGVycy5mcm9tT2JqZWN0KFxyXG4gICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5LFxyXG4gICAgICAgICAgLi4ucmVwbGFjZUZpZWxkcyhmaWVsZCwgZmxpZ2h0SXRpbmVyYXJ5KS5zcGxpdCgnLicpXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gdmFsID49IG1pbm1heC5taW4gJiYgdmFsIDw9IG1pbm1heC5tYXg7XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgY29uc3QgaXNIb3VyQmV0d2VlbiA9IChcclxuICAgICAgbWlubWF4OiBNaW5NYXgsXHJcbiAgICAgIGZpZWxkOiBzdHJpbmdcclxuICAgICk6ICgoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW4pID0+IHtcclxuICAgICAgcmV0dXJuIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbCA9IG1vbWVudChcclxuICAgICAgICAgIHRoaXMuaGVscGVycy5mcm9tT2JqZWN0KFxyXG4gICAgICAgICAgICBmbGlnaHRJdGluZXJhcnksXHJcbiAgICAgICAgICAgIC4uLnJlcGxhY2VGaWVsZHMoZmllbGQsIGZsaWdodEl0aW5lcmFyeSkuc3BsaXQoJy4nKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICkuZ2V0KCdob3VyJyk7XHJcbiAgICAgICAgcmV0dXJuIHZhbCA+PSBtaW5tYXgubWluICYmIHZhbCA8PSBtaW5tYXgubWF4O1xyXG4gICAgICB9O1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBpc1RpbWVCZXR3ZWVuID0gKFxyXG4gICAgICBtaW5tYXg6IE1pbk1heCxcclxuICAgICAgZmllbGQ6IHN0cmluZ1xyXG4gICAgKTogKChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gYm9vbGVhbikgPT4ge1xyXG4gICAgICByZXR1cm4gKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsID0gbW9tZW50KFxyXG4gICAgICAgICAgdGhpcy5oZWxwZXJzLmZyb21PYmplY3QoXHJcbiAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeSxcclxuICAgICAgICAgICAgLi4ucmVwbGFjZUZpZWxkcyhmaWVsZCwgZmxpZ2h0SXRpbmVyYXJ5KS5zcGxpdCgnLicpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKS5nZXQoJ2hvdXInKTtcclxuXHJcbiAgICAgICAgLy8gbm93IGF0dGVtcHQgdG8gZ2V0IHRoZSBtaW4gLSBtYXkgbmVlZCB0byBub3JtYWxpc2UgdGhpc1xyXG4gICAgICAgIGNvbnN0IHZhbDIgPSBtb21lbnQoXHJcbiAgICAgICAgICB0aGlzLmhlbHBlcnMuZnJvbU9iamVjdChcclxuICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5LFxyXG4gICAgICAgICAgICAuLi5yZXBsYWNlRmllbGRzKGZpZWxkLCBmbGlnaHRJdGluZXJhcnkpLnNwbGl0KCcuJylcclxuICAgICAgICAgIClcclxuICAgICAgICApLmdldCgnbWludXRlJyk7XHJcblxyXG4gICAgICAgIGNvbnN0IHRvdGFsVGltZTogbnVtYmVyID0gTnVtYmVyKFxyXG4gICAgICAgICAgYCR7dmFsfS4ke3RoaXMuaGVscGVycy5ub3JtYWxpc2VNaW51dGVUb0Jhc2UxMCh2YWwyKX1gXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gdG90YWxUaW1lID49IG1pbm1heC5taW4gJiYgdG90YWxUaW1lIDw9IG1pbm1heC5tYXg7XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhhc1ZhbHVlID0gKFxyXG4gICAgICBmaWVsZDogc3RyaW5nXHJcbiAgICApOiAoKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB0b1Rlc3Q6IHN0cmluZykgPT4gYm9vbGVhbikgPT4ge1xyXG4gICAgICByZXR1cm4gKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB0b1Rlc3Q6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuaGVscGVycy5mcm9tT2JqZWN0KFxyXG4gICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5LFxyXG4gICAgICAgICAgLi4ucmVwbGFjZUZpZWxkcyhmaWVsZCwgZmxpZ2h0SXRpbmVyYXJ5KS5zcGxpdCgnLicpXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gdmFsID09PSB0b1Rlc3Q7XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGZpZWxkSGFzVmFsdWUgPSAoXHJcbiAgICAgIGZpZWxkOiBrZXlvZiBGbGlnaHRKb3VybmV5XHJcbiAgICApOiAoKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgdmFsdWU6IHN0cmluZyB8IG51bWJlcikgPT4gYm9vbGVhbikgPT4ge1xyXG4gICAgICByZXR1cm4gKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgdmFsdWU6IHN0cmluZyB8IG51bWJlcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBmbGlnaHRbZmllbGRdID09PSB2YWx1ZTtcclxuICAgICAgfTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgb3V0SXRpbmVyYXJ5VGVzdGVyczogKChcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnlcclxuICAgICkgPT4gYm9vbGVhbilbXSA9IFtdO1xyXG4gICAgY29uc3QgaW5JdGluZXJhcnlUZXN0ZXJzOiAoKFxyXG4gICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeVxyXG4gICAgKSA9PiBib29sZWFuKVtdID0gW107XHJcblxyXG4gICAgY29uc3QgaW5EdWFsSXRpbmVyYXJ5VGVzdGVyczogKChcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnlcclxuICAgICkgPT4gYm9vbGVhbilbXSA9IFtdO1xyXG5cclxuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgaXNUaW1lQmV0d2VlbihmaWx0ZXJzLmFycml2YWxUaW1lLCAnT1VUQk9VTkRfQVJSSVZBTC5kYXRlVGltZUFycml2aW5nJylcclxuICAgICk7XHJcbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzVGltZUJldHdlZW4oXHJcbiAgICAgICAgZmlsdGVycy5kZXBhcnR1cmVUaW1lLFxyXG4gICAgICAgICdPVVRCT1VORF9ERVBBUlRVUkUuZGF0ZVRpbWVEZXBhcnRpbmcnXHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICBpc0JldHdlZW4oZmlsdGVycy5yZXR1cm5EdXJhdGlvbiwgJ291dGJvdW5kVG90YWxEdXJhdGlvbicpXHJcbiAgICApO1xyXG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICBpc0JldHdlZW4oZmlsdGVycy5kdXJhdGlvbiwgJ291dGJvdW5kVG90YWxEdXJhdGlvbicpXHJcbiAgICApO1xyXG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKGlzQmV0d2VlbihmaWx0ZXJzLnByaWNlLCAndG90YWwucHJpY2UnKSk7XHJcblxyXG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoXHJcbiAgICAgICAgZmlsdGVycy5zdG9wcyxcclxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCA9PT0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLnRvdGFsU3RvcHMsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCArXHJcbiAgICAgICAgICAgICAgKGZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cyB8fCBbXSkubGVuZ3RoID09PVxyXG4gICAgICAgICAgICB2YWx1ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoXHJcbiAgICAgICAgZmlsdGVycy50b3RhbFN0b3BzLFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoID09PSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLmJhZ2dhZ2UsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBiYWdnYWdlQXJyYXk6IG51bWJlcltdID0gZmxpZ2h0SXRpbmVyYXJ5LmJhZ2dhZ2VBbGxvd2FuY2UubWFwKFxyXG4gICAgICAgICAgICAoYmFnZ2FnZUFsbG93YW5jZTogQmFnZ2FnZUFsbG93YW5jZSkgPT4gYmFnZ2FnZUFsbG93YW5jZS5xdHlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zdCBiYWdnYWdlOiBudW1iZXIgPSBiYWdnYWdlQXJyYXkubGVuZ3RoXHJcbiAgICAgICAgICAgID8gTWF0aC5taW4oLi4uYmFnZ2FnZUFycmF5KVxyXG4gICAgICAgICAgICA6IDA7XHJcbiAgICAgICAgICByZXR1cm4gYmFnZ2FnZSA9PT0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMuZGVwYXR1cmVBaXJwb3J0LFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHNbMF0/Lm9yaWdpbkFpcnBvcnQgPT09IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLmFycml2YWxBaXJwb3J0LFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0c1tcclxuICAgICAgICAgICAgICBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFcclxuICAgICAgICAgICAgXT8uZGVzdGluYXRpb25BaXJwb3J0ID09PSB2YWx1ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzQmV0d2VlbihmaWx0ZXJzLmR1cmF0aW9uLCAnb3V0Ym91bmRUb3RhbER1cmF0aW9uJylcclxuICAgICk7XHJcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChpc0JldHdlZW4oZmlsdGVycy5wcmljZSwgJ3RvdGFsLnByaWNlJykpO1xyXG4gICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5wdXNoKGlzQmV0d2VlbihmaWx0ZXJzLnByaWNlLCAndG90YWwucHJpY2UnKSk7XHJcblxyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzVGltZUJldHdlZW4oXHJcbiAgICAgICAgZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZSxcclxuICAgICAgICAnSU5CT1VORF9BUlJJVkFMLmRhdGVUaW1lQXJyaXZpbmcnXHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICBpc1RpbWVCZXR3ZWVuKFxyXG4gICAgICAgIGZpbHRlcnMucmV0dXJuQXJyaXZhbFRpbWUsXHJcbiAgICAgICAgJ09VVEJPVU5EX0FSUklWQUwuZGF0ZVRpbWVBcnJpdmluZydcclxuICAgICAgKVxyXG4gICAgKTtcclxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICBpc1RpbWVCZXR3ZWVuKFxyXG4gICAgICAgIGZpbHRlcnMucmV0dXJuRGVwYXJ0dXJlVGltZSxcclxuICAgICAgICAnSU5CT1VORF9ERVBBUlRVUkUuZGF0ZVRpbWVEZXBhcnRpbmcnXHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzQmV0d2VlbihmaWx0ZXJzLnJldHVybkR1cmF0aW9uLCAnaW5ib3VuZFRvdGFsRHVyYXRpb24nKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzQmV0d2VlbihmaWx0ZXJzLnJldHVybkR1cmF0aW9uLCAnb3V0Ym91bmRUb3RhbER1cmF0aW9uJylcclxuICAgICk7XHJcblxyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLnN0b3BzLFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cy5sZW5ndGggPT09IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLnN0b3BzLFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoID09PSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMudG90YWxTdG9wcyxcclxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoICtcclxuICAgICAgICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzIHx8IFtdKS5sZW5ndGggPT09XHJcbiAgICAgICAgICAgIHZhbHVlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoXHJcbiAgICAgICAgZmlsdGVycy5iYWdnYWdlLFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgY29uc3QgYmFnZ2FnZUFycmF5OiBudW1iZXJbXSA9IGZsaWdodEl0aW5lcmFyeS5iYWdnYWdlQWxsb3dhbmNlLm1hcChcclxuICAgICAgICAgICAgKGJhZ2dhZ2VBbGxvd2FuY2U6IEJhZ2dhZ2VBbGxvd2FuY2UpID0+IGJhZ2dhZ2VBbGxvd2FuY2UucXR5XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgY29uc3QgYmFnZ2FnZTogbnVtYmVyID0gYmFnZ2FnZUFycmF5Lmxlbmd0aFxyXG4gICAgICAgICAgICA/IE1hdGgubWluKC4uLmJhZ2dhZ2VBcnJheSlcclxuICAgICAgICAgICAgOiAwO1xyXG4gICAgICAgICAgcmV0dXJuIGJhZ2dhZ2UgPT09IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLmJhZ2dhZ2UsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBiYWdnYWdlQXJyYXk6IG51bWJlcltdID0gZmxpZ2h0SXRpbmVyYXJ5LmJhZ2dhZ2VBbGxvd2FuY2UubWFwKFxyXG4gICAgICAgICAgICAoYmFnZ2FnZUFsbG93YW5jZTogQmFnZ2FnZUFsbG93YW5jZSkgPT4gYmFnZ2FnZUFsbG93YW5jZS5xdHlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zdCBiYWdnYWdlOiBudW1iZXIgPSBiYWdnYWdlQXJyYXkubGVuZ3RoXHJcbiAgICAgICAgICAgID8gTWF0aC5taW4oLi4uYmFnZ2FnZUFycmF5KVxyXG4gICAgICAgICAgICA6IDA7XHJcbiAgICAgICAgICByZXR1cm4gYmFnZ2FnZSA9PT0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoXHJcbiAgICAgICAgZmlsdGVycy5kZXBhdHVyZVJldHVybkFpcnBvcnQsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzWzBdPy5vcmlnaW5BaXJwb3J0ID09PSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoXHJcbiAgICAgICAgZmlsdGVycy5kZXBhdHVyZVJldHVybkFpcnBvcnQsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0c1swXT8ub3JpZ2luQWlycG9ydCA9PT0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoXHJcbiAgICAgICAgZmlsdGVycy5hcnJpdmFsUmV0dXJuQWlycG9ydCxcclxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0c1tcclxuICAgICAgICAgICAgICBmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHMubGVuZ3RoIC0gMVxyXG4gICAgICAgICAgICBdPy5kZXN0aW5hdGlvbkFpcnBvcnQgPT09IHZhbHVlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLmFycml2YWxSZXR1cm5BaXJwb3J0LFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0c1tcclxuICAgICAgICAgICAgICBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFcclxuICAgICAgICAgICAgXT8uZGVzdGluYXRpb25BaXJwb3J0ID09PSB2YWx1ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgb3V0Sm91cm5leVRlc3RlcnM6ICgoXHJcbiAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leVxyXG4gICAgKSA9PiBib29sZWFuKVtdID0gW107XHJcbiAgICBvdXRKb3VybmV5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoZmlsdGVycy5jbGFzc2VzLCBmaWVsZEhhc1ZhbHVlKCdjYWJpbkNsYXNzJykpXHJcbiAgICApO1xyXG4gICAgb3V0Sm91cm5leVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKGZpbHRlcnMuYWlybGluZXMsIGZpZWxkSGFzVmFsdWUoJ21hcmtldGluZ0NhcnJpZXInKSlcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgaW5Kb3VybmV5VGVzdGVyczogKChcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5XHJcbiAgICApID0+IGJvb2xlYW4pW10gPSBbXTtcclxuICAgIGluSm91cm5leVRlc3RlcnMucHVzaCh0ZXN0ZXIoZmlsdGVycy5jbGFzc2VzLCBmaWVsZEhhc1ZhbHVlKCdjYWJpbkNsYXNzJykpKTtcclxuICAgIGluSm91cm5leVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKGZpbHRlcnMuYWlybGluZXMsIGZpZWxkSGFzVmFsdWUoJ21hcmtldGluZ0NhcnJpZXInKSlcclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgb3V0RmlsdGVySXRpbmVyYXJpZXMgPSAoXHJcbiAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LFxyXG4gICAgICBncm91cEluZGV4OiBudW1iZXJcclxuICAgICk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucmVkdWNlKFxyXG4gICAgICAgICAgKFxyXG4gICAgICAgICAgICBhY2M6IGJvb2xlYW4sXHJcbiAgICAgICAgICAgIHRlc3RlcjE6IChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gYm9vbGVhblxyXG4gICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgIGFjYyA9IGFjYyAmJiB0ZXN0ZXIxKGZsaWdodEl0aW5lcmFyeSk7XHJcbiAgICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICkgJiZcclxuICAgICAgICAoIWZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMgfHxcclxuICAgICAgICAgICEhKGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMgfHwgW10pLmZpbmQoXHJcbiAgICAgICAgICAgIChmbGlnaHRKb3VybmV5OiBGbGlnaHRKb3VybmV5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICEhb3V0Sm91cm5leVRlc3RlcnMucmVkdWNlKFxyXG4gICAgICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgICAgICBhY2M6IGJvb2xlYW4sXHJcbiAgICAgICAgICAgICAgICAgIHRlc3RlcjI6IChcclxuICAgICAgICAgICAgICAgICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXlcclxuICAgICAgICAgICAgICAgICAgKSA9PiBib29sZWFuXHJcbiAgICAgICAgICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYyAmJiB0ZXN0ZXIyKGZsaWdodEpvdXJuZXkpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHRydWVcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApKVxyXG4gICAgICApO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGluRmlsdGVySXRpbmVyYXJpZXMgPSAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpOiBib29sZWFuID0+IHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBpbkl0aW5lcmFyeVRlc3RlcnMucmVkdWNlKFxyXG4gICAgICAgICAgKFxyXG4gICAgICAgICAgICBhY2M6IGJvb2xlYW4sXHJcbiAgICAgICAgICAgIHRlc3RlcjE6IChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gYm9vbGVhblxyXG4gICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBhY2MgJiYgdGVzdGVyMShmbGlnaHRJdGluZXJhcnkpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApICYmXHJcbiAgICAgICAgKCFmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHM/Lmxlbmd0aCB8fFxyXG4gICAgICAgICAgISEoZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzIHx8IFtdKS5maW5kKFxyXG4gICAgICAgICAgICAoZmxpZ2h0Sm91cm5leTogRmxpZ2h0Sm91cm5leSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiAhIWluSm91cm5leVRlc3RlcnMucmVkdWNlKFxyXG4gICAgICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgICAgICBhY2M6IGJvb2xlYW4sXHJcbiAgICAgICAgICAgICAgICAgIHRlc3RlcjI6IChcclxuICAgICAgICAgICAgICAgICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXlcclxuICAgICAgICAgICAgICAgICAgKSA9PiBib29sZWFuXHJcbiAgICAgICAgICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYyAmJiB0ZXN0ZXIyKGZsaWdodEpvdXJuZXkpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHRydWVcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApKVxyXG4gICAgICApO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBpbkR1YWxGaWx0ZXJJdGluZXJhcmllcyA9IChcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnlcclxuICAgICk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucmVkdWNlKFxyXG4gICAgICAgICAgKFxyXG4gICAgICAgICAgICBhY2M6IGJvb2xlYW4sXHJcbiAgICAgICAgICAgIHRlc3RlcjE6IChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gYm9vbGVhblxyXG4gICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBhY2MgJiYgdGVzdGVyMShmbGlnaHRJdGluZXJhcnkpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApICYmXHJcbiAgICAgICAgKCFmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzPy5sZW5ndGggfHxcclxuICAgICAgICAgICEhKGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMgfHwgW10pLmZpbmQoXHJcbiAgICAgICAgICAgIChmbGlnaHRKb3VybmV5OiBGbGlnaHRKb3VybmV5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICEhaW5Kb3VybmV5VGVzdGVycy5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgICAgIGFjYzogYm9vbGVhbixcclxuICAgICAgICAgICAgICAgICAgdGVzdGVyMjogKFxyXG4gICAgICAgICAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leVxyXG4gICAgICAgICAgICAgICAgICApID0+IGJvb2xlYW5cclxuICAgICAgICAgICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gYWNjICYmIHRlc3RlcjIoZmxpZ2h0Sm91cm5leSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICkpXHJcbiAgICAgICk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkUnVsZVN1bW1hcnk6IFJlY29yZFJ1bGVBY3Rpb24gPVxyXG4gICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5kdWFsU2luZ2xlV2hlblNlbGVjdGVkW1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodD8uam91cm5leUhhc2hcclxuICAgICAgXSB8fCB7fTtcclxuXHJcbiAgICBjb25zdCBzZXRTZWxlY3RlZCA9IChmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSA9PiB7XHJcbiAgICAgIGZsaWdodC5zZWxlY3RlZCA9IGZsaWdodC51aWQgPT09IHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodD8udWlkO1xyXG4gICAgICBmbGlnaHQudW5hdmFpbGFibGUgPVxyXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbZmxpZ2h0LmpvdXJuZXlIYXNoXVxyXG4gICAgICAgICAgPy51bmF2YWlsYWJsZSB8fFxyXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2ZsaWdodC5qb3VybmV5SGFzaF1cclxuICAgICAgICAgID8udW5hdmFpbGFibGUgfHxcclxuICAgICAgICBzZWxlY3RlZFJ1bGVTdW1tYXJ5W2ZsaWdodC5qb3VybmV5SGFzaF0/LnVuYXZhaWxhYmxlIHx8XHJcbiAgICAgICAgZmFsc2U7XHJcbiAgICAgIGZsaWdodC51bmF2YWlsYWJsZU1lc3NhZ2UgPVxyXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbZmxpZ2h0LmpvdXJuZXlIYXNoXVxyXG4gICAgICAgICAgPy51bmF2YWlsYWJsZU1lc3NhZ2UgfHxcclxuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtmbGlnaHQuam91cm5leUhhc2hdXHJcbiAgICAgICAgICA/LnVuYXZhaWxhYmxlTWVzc2FnZSB8fFxyXG4gICAgICAgICcnO1xyXG4gICAgICByZXR1cm4gZmxpZ2h0O1xyXG4gICAgfTtcclxuICAgIGlmICh0aGlzLmlzR3JvdXBlZEZsaWdodHModGhpcy5mdWxsUmVzdWx0cykpIHtcclxuICAgICAgY29uc3QgZ3JvdXBlZEZsaWdodHM6IEdyb3VwRmxpZ2h0cyA9IHRoaXMuX2dyb3VwZWQuZmluZChcclxuICAgICAgICAoaXRlbTogR3JvdXBGbGlnaHRzKSA9PiBpdGVtLnJlZmVyZW5jZUlEID09PSB0aGlzLnNlbGVjdGVkR3JvdXBJZFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnJlc3VsdHMubmV4dChcclxuICAgICAgICB0aGlzLmhlbHBlcnNcclxuICAgICAgICAgIC5jbG9uZTxGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHRbXT4odGhpcy5mdWxsUmVzdWx0cylcclxuICAgICAgICAgIC5maWx0ZXIoKHJlc3VsdDE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gISFyZXN1bHQxO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5tYXAoXHJcbiAgICAgICAgICAgIChyZXN1bHQyOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQpOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGZpbHRlckl0aW5lcmFyaWVzID1cclxuICAgICAgICAgICAgICAgIHJlc3VsdDIuZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kIHx8XHJcbiAgICAgICAgICAgICAgICByZXN1bHQyLmRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5EdWFsU2luZ2xlT3V0Ym91bmRcclxuICAgICAgICAgICAgICAgICAgPyBvdXRGaWx0ZXJJdGluZXJhcmllc1xyXG4gICAgICAgICAgICAgICAgICA6IHJlc3VsdDIuZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkR1YWxTaW5nbGVJbmJvdW5kXHJcbiAgICAgICAgICAgICAgICAgID8gaW5EdWFsRmlsdGVySXRpbmVyYXJpZXNcclxuICAgICAgICAgICAgICAgICAgOiBpbkZpbHRlckl0aW5lcmFyaWVzO1xyXG5cclxuICAgICAgICAgICAgICByZXN1bHQyLmNsYXNzZXMgPSBPYmplY3QuZW50cmllcyhyZXN1bHQyLmNsYXNzZXMpLnJlZHVjZShcclxuICAgICAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgICAgYWNjdW06IFJlY29yZDxPQlRGbGlnaHRDYWJpbkNsYXNzLCBGbGlnaHRJdGluZXJhcnlDbGFzcz4sXHJcbiAgICAgICAgICAgICAgICAgIFtrZXksIHZhbHVlXTogW09CVEZsaWdodENhYmluQ2xhc3MsIEZsaWdodEl0aW5lcmFyeUNsYXNzXVxyXG4gICAgICAgICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5mbGlnaHRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRKb3VybmV5cyA9IHZhbHVlLmZsaWdodHNcclxuICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gISFmbGlnaHRJdGluZXJhcnlcclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclNlbGVjdGVkRmxpZ2h0cyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkRmxpZ2h0cz8uZmxpZ2h0c1tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGVscGVycy5PQlRGbGlnaHRDYWJpbkNsYXNzVG9GbGlnaHRDYWJpbkNsYXNzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBdIHx8IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDIuZGlyZWN0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZmlsdGVySXRpbmVyYXJpZXMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAubWFwKHNldFNlbGVjdGVkKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRKb3VybmV5cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBhY2N1bVtrZXldID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi52YWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmxpZ2h0czogZmlsdGVyZWRKb3VybmV5c1xyXG4gICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHt9IGFzIFJlY29yZDxPQlRGbGlnaHRDYWJpbkNsYXNzLCBGbGlnaHRJdGluZXJhcnlDbGFzcz5cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHQyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAuZmlsdGVyKChyZXN1bHQyOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDIgJiYgT2JqZWN0LmtleXMocmVzdWx0Mi5jbGFzc2VzKS5sZW5ndGggPiAwO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5zb3J0KHRoaXMuX3NvcnRHcm91cGVkUm91dGluZXNbc29ydFZhbHVlXSkgYXMgRmxpZ2h0UXVvdGVSZXN1bHRBcnJheVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZXN1bHRzLm5leHQoXHJcbiAgICAgICAgT2JqZWN0LmZyZWV6ZShcclxuICAgICAgICAgIHRoaXMuaGVscGVyc1xyXG4gICAgICAgICAgICAuY2xvbmUodGhpcy5mdWxsUmVzdWx0cylcclxuICAgICAgICAgICAgLm1hcCgocmVzdWx0NDogRmxpZ2h0QWxsUXVvdGVSZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICBsZXQgbmV3Sm91cm5leXM6IGFueSA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHQ0LmpvdXJuZXlzKTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGZpbHRlcnMuZmxpZ2h0TnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdKb3VybmV5cyA9IG5ld0pvdXJuZXlzLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgKGZsaWdodEl0ZW06IEZsaWdodEl0aW5lcmFyeSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG91dGJvdW5kRmxpZ2h0cyA9IGZsaWdodEl0ZW0ub3V0Ym91bmRGbGlnaHRzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAob3V0RmxpZ2h0KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRGbGlnaHQubWFya2V0aW5nRmxpZ2h0TnVtYmVyID09PSBmaWx0ZXJzLmZsaWdodE51bWJlclxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5ib3VuZEZsaWdodHMgPSBmbGlnaHRJdGVtLmluYm91bmRGbGlnaHRzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAoaW5GbGlnaHQpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluRmxpZ2h0Lm1hcmtldGluZ0ZsaWdodE51bWJlciA9PT0gZmlsdGVycy5mbGlnaHROdW1iZXJcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvdXRib3VuZEZsaWdodHMgfHwgaW5ib3VuZEZsaWdodHMpIHJldHVybiBmbGlnaHRJdGVtO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgbmV3Sm91cm5leXMgPSBuZXdKb3VybmV5cy5maWx0ZXIob3V0RmlsdGVySXRpbmVyYXJpZXMpO1xyXG5cclxuICAgICAgICAgICAgICBpZiAodGhpcy5pc1JldHVybikge1xyXG4gICAgICAgICAgICAgICAgbGV0IG5ld0luSm91cm5leXM6IGFueSA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHQ0LmpvdXJuZXlzKTtcclxuICAgICAgICAgICAgICAgIG5ld0luSm91cm5leXMgPSBuZXdJbkpvdXJuZXlzLmZpbHRlcihpbkZpbHRlckl0aW5lcmFyaWVzKTtcclxuICAgICAgICAgICAgICAgIG5ld0pvdXJuZXlzID0gdGhpcy5tZXJnZU91dEluQm91bmQobmV3Sm91cm5leXMsIG5ld0luSm91cm5leXMpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBuZXdKb3VybmV5cy5zb3J0KHRoaXMuX3NvcnRJdGluYXJ5Um91dGluZXNbc29ydFZhbHVlXSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdGbGlnaHRBbGxRdW90ZVJlc3VsdCcsXHJcbiAgICAgICAgICAgICAgICBqb3VybmV5czogPEZsaWdodEl0aW5lcmFyeVtdPm5ld0pvdXJuZXlzXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApIGFzIEZsaWdodFF1b3RlUmVzdWx0QXJyYXlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1lcmdlT3V0SW5Cb3VuZChcclxuICAgIG91dGJvdW5kOiBGbGlnaHRJdGluZXJhcnlbXSxcclxuICAgIGluYm91bmQ6IEZsaWdodEl0aW5lcmFyeVtdXHJcbiAgKTogRmxpZ2h0SXRpbmVyYXJ5W10ge1xyXG4gICAgY29uc3QgZmxpZ2h0cyA9IE9iamVjdC52YWx1ZXMoXHJcbiAgICAgIFsuLi5vdXRib3VuZCwgLi4uaW5ib3VuZF0ucmVkdWNlKChyZXN1bHQsIHsgdWlkLCAuLi5yZXN0IH0pID0+IHtcclxuICAgICAgICBpZiAoIXJlc3VsdFt1aWRdKSB7XHJcbiAgICAgICAgICByZXN1bHRbdWlkXSA9IHtcclxuICAgICAgICAgICAgLi4uKHJlc3VsdFt1aWRdIHx8IHt9KSxcclxuICAgICAgICAgICAgdWlkLFxyXG4gICAgICAgICAgICAuLi5yZXN0XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9LCBbXSlcclxuICAgICk7XHJcbiAgICByZXR1cm4gZmxpZ2h0cztcclxuICB9XHJcblxyXG4gIHVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHM6IEZsaWdodFF1b3RlUmVzdWx0QXJyYXkpOiBJQ2hlYXBlc3RQcmljZSB7XHJcbiAgICBpZiAoIXJlc3VsdHMubGVuZ3RoIHx8IHRoaXMuc2VhcmNoU2VydmljZS5pc0ZsaWdodHNHcm91cGVkKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGpvdXJuZXlzID0gKHJlc3VsdHNbMF0gYXMgRmxpZ2h0QWxsUXVvdGVSZXN1bHQpLmpvdXJuZXlzO1xyXG4gICAgaWYgKCFqb3VybmV5cy5sZW5ndGgpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBjdXJyZW5jeSA9IGpvdXJuZXlzWzBdLnRvdGFsLmN1cnJlbmN5O1xyXG4gICAgcmV0dXJuIGpvdXJuZXlzLnJlZHVjZShcclxuICAgICAgKGNoZWFwZXN0UHJpY2U6IElDaGVhcGVzdFByaWNlLCByZXN1bHQ6IEZsaWdodEl0aW5lcmFyeSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHByaWNlID0gcmVzdWx0LnRvdGFsLnByaWNlO1xyXG4gICAgICAgIGlmIChjaGVhcGVzdFByaWNlLmFtb3VudCA+IHByaWNlKSBjaGVhcGVzdFByaWNlLmFtb3VudCA9IHByaWNlO1xyXG4gICAgICAgIHJldHVybiBjaGVhcGVzdFByaWNlO1xyXG4gICAgICB9LFxyXG4gICAgICB7IGFtb3VudDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsIGN1cnJlbmN5Q29kZTogY3VycmVuY3kgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHNlbGVjdEdyb3VwZWRGbGlnaHQoXHJcbiAgICBzZWxlY3RlZEZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXHJcbiAgICBkaXJlY3Rpb246IEZsaWdodERpcmVjdGlvbkVudW0sXHJcbiAgICBncm91cElkOiBudW1iZXJcclxuICApIHtcclxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPVxyXG4gICAgICBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xyXG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgYmFza2V0ICYmXHJcbiAgICAgIHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUub25lV2F5ICYmXHJcbiAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5PdXRib3VuZFxyXG4gICAgKSB7XHJcbiAgICAgIC8vIFRPRE8gYmVjb3VzZSBwb3AtdXAgaXMgbm90IHJlYWR5IEkgY29tbWVudGVkIHRoZSBjb2RlLiBcclxuICAgICAgLy8gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbiggTW9kYWxUeXBlcy5GbGlnaHRFeHRyYXNEaWFsb2dDb21wb25lbnQsIHsgY2VudGVyZWQ6IHRydWUgfSwgeyBmbGlnaHQ6IHNlbGVjdGVkRmxpZ2h0IH0pLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgLy8gICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICB0aGlzLmJvb2tTaW5nbGVGbGlnaHQoaW50QmFza2V0LCBzZWxlY3RlZEZsaWdodCk7XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICBiYXNrZXQgJiZcclxuICAgICAgdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2guY2hvc2VuU2VhcmNoVHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm4gJiZcclxuICAgICAgKGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5PdXRib3VuZCB8fFxyXG4gICAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5EdWFsU2luZ2xlT3V0Ym91bmQpXHJcbiAgICApIHtcclxuICAgICAgaWYgKHNlbGVjdGVkRmxpZ2h0LnNlbGVjdGVkKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBJZCA9IC0xO1xyXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKHRoaXMuY3VycmVudEZpbHRlcnMsIHRoaXMuY3VycmVudFNvcnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodCA9IHNlbGVjdGVkRmxpZ2h0O1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkID0gZ3JvdXBJZDtcclxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycyh0aGlzLmN1cnJlbnRGaWx0ZXJzLCB0aGlzLmN1cnJlbnRTb3J0KTtcclxuICAgICAgICB0aGlzLl91cGRhdGVUcmF2ZWxQb2xpY2llcygpO1xyXG4gICAgICB9XHJcbiAgICAgIHNlbGVjdGVkRmxpZ2h0LnNlbGVjdGVkID0gIXNlbGVjdGVkRmxpZ2h0LnNlbGVjdGVkO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICBiYXNrZXQgJiZcclxuICAgICAgdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2guY2hvc2VuU2VhcmNoVHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm4gJiZcclxuICAgICAgZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkluYm91bmQgJiZcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0XHJcbiAgICApIHtcclxuICAgICAgdGhpcy5kb0Jvb2tpbmcoXHJcbiAgICAgICAgaW50QmFza2V0LFxyXG4gICAgICAgIHNlbGVjdGVkRmxpZ2h0LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG91dGJvdW5kRmxpZ2h0czogW1xyXG4gICAgICAgICAgICAuLi5zZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHMubWFwKFxyXG4gICAgICAgICAgICAgIChmbGlnaHQ6IEZsaWdodEpvdXJuZXksIHNlZ21lbnRJbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYWtlU2NoZW1hRmxpZ2h0cyhcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAnb3V0Ym91bmQnLFxyXG4gICAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgICBzZWdtZW50SW5kZXhcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgICAgaW5ib3VuZEZsaWdodHM6IFtcclxuICAgICAgICAgICAgLi4uc2VsZWN0ZWRGbGlnaHQuaW5ib3VuZEZsaWdodHMubWFwKFxyXG4gICAgICAgICAgICAgIChmbGlnaHQ6IEZsaWdodEpvdXJuZXksIHNlZ21lbnRJbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYWtlU2NoZW1hRmxpZ2h0cyhcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAnaW5ib3VuZCcsXHJcbiAgICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICAgIHNlZ21lbnRJbmRleFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIF0sXHJcbiAgICAgICAgICBqb3VybmV5VHlwZTogJ3JvdW5kdHJpcCdcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNlbGVjdGVkRmxpZ2h0Lm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZ1VUQyxcclxuICAgICAgICBzZWxlY3RlZEZsaWdodC5pbmJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZ1VUQ1xyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0ID0gbnVsbDtcclxuICAgICAgdGhpcy5hcHBseUZpbHRlcnModGhpcy5jdXJyZW50RmlsdGVycywgdGhpcy5jdXJyZW50U29ydCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgYmFza2V0ICYmXHJcbiAgICAgIHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuICYmXHJcbiAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5EdWFsU2luZ2xlSW5ib3VuZCAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHRcclxuICAgICkge1xyXG4gICAgICB0aGlzLmJvb2tTaW5nbGVGbGlnaHQoaW50QmFza2V0LCB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQpO1xyXG4gICAgICB0aGlzLmJvb2tTaW5nbGVGbGlnaHQoaW50QmFza2V0LCBzZWxlY3RlZEZsaWdodCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodC5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQgPSBudWxsO1xyXG4gICAgICB0aGlzLmFwcGx5RmlsdGVycyh0aGlzLmN1cnJlbnRGaWx0ZXJzLCB0aGlzLmN1cnJlbnRTb3J0KTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBfdXBkYXRlVHJhdmVsUG9saWNpZXMoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQgfHxcclxuICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuZHVhbFNpbmdsZVdoZW5TZWxlY3RlZFtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQuam91cm5leUhhc2hcclxuICAgICAgXSB8fFxyXG4gICAgICAhdGhpcy5tdWx0aSB8fFxyXG4gICAgICB0aGlzLm11bHRpLmxlbmd0aCA9PT0gMFxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IG11bHRpSW5ib3VuZHMgPSAodGhpcy5tdWx0aSB8fCBbXSkucmVkdWNlKFxyXG4gICAgICAoYWNjOiBGbGlnaHRJdGluZXJhcnlbXSwgaXRlbTogRmxpZ2h0TXVsdGkpID0+IHtcclxuICAgICAgICBpZiAoaXRlbS5vcmRlciA9PT0gMSAmJiBpdGVtLnJlc3VsdHMgJiYgaXRlbS5yZXN1bHRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGFjYyA9IGFjYy5jb25jYXQoaXRlbS5yZXN1bHRzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgfSxcclxuICAgICAgW11cclxuICAgICk7XHJcbiAgICBpZiAobXVsdGlJbmJvdW5kcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuYXBwbHlGbGlnaHRSdWxlc1xyXG4gICAgICAgIC5mZXRjaE9uZSh7XHJcbiAgICAgICAgICBzZWxlY3RlZE91dGJvdW5kRmxpZ2h0OiB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQsXHJcbiAgICAgICAgICBhdmFpbGFibGVJbmJvdW5kRmxpZ2h0czogbXVsdGlJbmJvdW5kc1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChydWxlczogUnVsZUFjdGlvblN1bW1hcnlJbnRlcmZhY2UpID0+IHtcclxuICAgICAgICAgIGlmIChydWxlcykge1xyXG4gICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeSA9IHRoaXMuaGVscGVycy5tZXJnZU9iamVjdHMoXHJcbiAgICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnksXHJcbiAgICAgICAgICAgICAgcnVsZXNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5fYXBwbHlGaWx0ZXIoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYm9va1NpbmdsZUZsaWdodChcclxuICAgIGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UsXHJcbiAgICBzZWxlY3RlZEZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcclxuICApIHtcclxuICAgIHRoaXMuZG9Cb29raW5nKFxyXG4gICAgICBpbnRCYXNrZXQsXHJcbiAgICAgIHNlbGVjdGVkRmxpZ2h0LFxyXG4gICAgICB7XHJcbiAgICAgICAgb3V0Ym91bmRGbGlnaHRzOiBzZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHMubWFwKFxyXG4gICAgICAgICAgKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgc2VnbWVudEluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFrZVNjaGVtYUZsaWdodHMoZmxpZ2h0LCAnb3V0Ym91bmQnLCAwLCBzZWdtZW50SW5kZXgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICksXHJcbiAgICAgICAgaW5ib3VuZEZsaWdodHM6IFtdLFxyXG4gICAgICAgIGpvdXJuZXlUeXBlOiAnc2luZ2xlJ1xyXG4gICAgICB9LFxyXG4gICAgICBzZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmdcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBkb0Jvb2tpbmcoXHJcbiAgICBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlLFxyXG4gICAgc2VsZWN0ZWRGbGlnaHQ6IEZsaWdodEl0aW5lcmFyeSxcclxuICAgIHNjaGVtYURldGFpbHM6IGFueSxcclxuICAgIG91dGJvdW5kRGF0ZTogc3RyaW5nLFxyXG4gICAgaW5ib3VuZERhdGU/OiBzdHJpbmdcclxuICApOiB2b2lkIHtcclxuICAgIGNvbnN0IHsgc291cmNlSWQsIGNvMlBlckl0ZW0sIGNvMlBlclBhc3NlbmdlciwgdG90YWwgfSA9IHNlbGVjdGVkRmxpZ2h0O1xyXG4gICAgY29uc3QgYm9va2luZzogQWRkSXRlbVRvQmFza2V0TXV0YXRpb25WYXJpYWJsZXMgPSB7XHJcbiAgICAgIGFkdWx0czogdGhpcy5hZHVsdHMsXHJcbiAgICAgIGJhc2tldDogaW50QmFza2V0LmlkLFxyXG4gICAgICBjaGlsZHJlbjogdGhpcy5jaGlsZHJlbixcclxuICAgICAgY28yUGVySXRlbSxcclxuICAgICAgY28yUGVyUGFzc2VuZ2VyLFxyXG4gICAgICBjdXJyZW5jeTogdG90YWwuY3VycmVuY3kgYXMgQ3VycmVuY3lDb2RlLFxyXG4gICAgICBkZXRhaWw6IHNjaGVtYURldGFpbHMsXHJcbiAgICAgIHByaWNlOiB0b3RhbC5wcmljZSxcclxuICAgICAgc2VhcmNoUXVlcnk6IHRoaXMucmVzdWx0UXVlcnksXHJcbiAgICAgIHNlcnZpY2U6IHNvdXJjZUlkLnRvU3RyaW5nKCksXHJcbiAgICAgIG91dGJvdW5kRGF0ZVxyXG4gICAgfTtcclxuICAgIGlmIChpbmJvdW5kRGF0ZSkge1xyXG4gICAgICBib29raW5nLmluYm91bmREYXRlID0gaW5ib3VuZERhdGU7XHJcbiAgICB9XHJcbiAgICB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgIGJvb2tpbmcsXHJcbiAgICAgIGludEJhc2tldCxcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxyXG4gICAgICB0aGlzLnRyYXZlbGxlcnNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1ha2VTY2hlbWFGbGlnaHRzKFxyXG4gICAgc2VsZWN0ZWRGbGlnaHQ6IEZsaWdodEpvdXJuZXksXHJcbiAgICBmbGlnaHRHcm91cDogJ291dGJvdW5kJyB8ICdpbmJvdW5kJyxcclxuICAgIGdyb3VwSW5kZXg6IG51bWJlcixcclxuICAgIHNlZ21lbnRJbmRleDogbnVtYmVyXHJcbiAgKTogYW55IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLnNlbGVjdGVkRmxpZ2h0LFxyXG4gICAgICBqb3VybmV5SW5mbzoge1xyXG4gICAgICAgIGZsaWdodEdyb3VwLFxyXG4gICAgICAgIGdyb3VwSW5kZXgsXHJcbiAgICAgICAgc2VnbWVudEluZGV4XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG4gIGFzeW5jIGFkZEZsaWdodEpvdXJuZXlzVG9CYXNrZXQoXHJcbiAgICBmbGlnaHRRdW90ZTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcclxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGlmIChmbGlnaHRRdW90ZS51bmF2YWlsYWJsZSkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPVxyXG4gICAgICBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xyXG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xyXG4gICAgaWYgKGJhc2tldCkge1xyXG4gICAgICBjb25zdCB7IHNvdXJjZUlkLCBjbzJQZXJJdGVtLCBjbzJQZXJQYXNzZW5nZXIsIHRvdGFsIH0gPSBmbGlnaHRRdW90ZTtcclxuICAgICAgY29uc3Qgb3V0Ym91bmREYXRlOiBhbnkgPSBtb21lbnQoXHJcbiAgICAgICAgZmxpZ2h0UXVvdGUub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGluYm91bmREYXRlOiBhbnkgPSBmbGlnaHRRdW90ZS5pbmJvdW5kRmxpZ2h0cy5sZW5ndGhcclxuICAgICAgICA/IG1vbWVudChmbGlnaHRRdW90ZS5pbmJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZylcclxuICAgICAgICA6IG51bGw7XHJcblxyXG4gICAgICBjb25zdCB0ZXJtc0FuZENvbmRpdGlvbnMgPSB0aGlzLmdldFRlcm1zQW5kQ29uZChmbGlnaHRRdW90ZSk7XHJcbiAgICAgIGNvbnN0IHNjaGVtYURldGFpbHMgPSB7XHJcbiAgICAgICAgb3V0Ym91bmRGbGlnaHRzOiBbXHJcbiAgICAgICAgICAuLi5mbGlnaHRRdW90ZS5vdXRib3VuZEZsaWdodHMubWFwKFxyXG4gICAgICAgICAgICAoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCBfc2VnbWVudEluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4geyAuLi5mbGlnaHQgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgaW5ib3VuZEZsaWdodHM6IFtcclxuICAgICAgICAgIC4uLmZsaWdodFF1b3RlLmluYm91bmRGbGlnaHRzLm1hcChcclxuICAgICAgICAgICAgKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgX3NlZ21lbnRJbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uZmxpZ2h0IH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIClcclxuICAgICAgICBdLFxyXG4gICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zLFxyXG4gICAgICAgIGpvdXJuZXlUeXBlOiAnc2luZ2xlJ1xyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBib29raW5nOiBBZGRJdGVtVG9CYXNrZXRNdXRhdGlvblZhcmlhYmxlcyA9IHtcclxuICAgICAgICBhZHVsdHM6IHRoaXMuYWR1bHRzLFxyXG4gICAgICAgIGJhc2tldDogaW50QmFza2V0LmlkLFxyXG4gICAgICAgIGNoaWxkcmVuOiB0aGlzLmNoaWxkcmVuLFxyXG4gICAgICAgIGNvMlBlckl0ZW0sXHJcbiAgICAgICAgY28yUGVyUGFzc2VuZ2VyLFxyXG4gICAgICAgIGN1cnJlbmN5OiB0b3RhbC5jdXJyZW5jeSBhcyBDdXJyZW5jeUNvZGUsXHJcbiAgICAgICAgZGV0YWlsOiBzY2hlbWFEZXRhaWxzLFxyXG4gICAgICAgIHByaWNlOiB0b3RhbC5wcmljZSxcclxuICAgICAgICBzZWFyY2hRdWVyeTogdGhpcy5yZXN1bHRRdWVyeSxcclxuICAgICAgICBzZXJ2aWNlOiBzb3VyY2VJZC50b1N0cmluZygpLFxyXG4gICAgICAgIG91dGJvdW5kRGF0ZTogb3V0Ym91bmREYXRlLmZvcm1hdCgpXHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChpbmJvdW5kRGF0ZSkge1xyXG4gICAgICAgIGJvb2tpbmcuaW5ib3VuZERhdGUgPSBpbmJvdW5kRGF0ZS5mb3JtYXQoKTtcclxuICAgICAgICBzY2hlbWFEZXRhaWxzLmpvdXJuZXlUeXBlID0gJ3JvdW5kdHJpcCc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgICAgYm9va2luZyxcclxuICAgICAgICBpbnRCYXNrZXQsXHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMudHJhdmVsbGVyc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7IC8vIFRPRE8gc2hvdWxkIHRoaXMgdGhyb3cgYW4gZXJyb3I/XHJcbiAgfVxyXG5cclxuICBzZXRGbGlnaHREaXNwbGF5VHlwZShkaXNwbGF5VHlwZTogRmxpZ2h0RGlzcGxheVR5cGVzKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQgPSBudWxsO1xyXG4gICAgdGhpcy5jaG9vc2VuRGlzcGxheVR5cGUubmV4dChkaXNwbGF5VHlwZSk7XHJcbiAgfVxyXG5cclxuICBfYXBwbHlGaWx0ZXIoKSB7XHJcbiAgICB0aGlzLmFwcGx5RmlsdGVycyh0aGlzLmN1cnJlbnRGaWx0ZXJzLCB0aGlzLmN1cnJlbnRTb3J0KTtcclxuICB9XHJcblxyXG4gIG9wZW5GbGlnaHRGYXJlUnVsZXMocnVsZXM6IEZhcmVDb25kaXRpb25zLCBmbGlnaHRzOiBGbGlnaHRKb3VybmV5W10pOiB2b2lkIHtcclxuICAgIC8vIGZpcnN0IGNoZWNrIGlmIHRoZXJlIGFyZSBydWxlc1xyXG4gICAgY29uc3QgZG9DYWxsID0gIU9iamVjdC52YWx1ZXMocnVsZXMpLmZpbmQoXHJcbiAgICAgIChydWxlOiBGYXJlQ29uZGl0aW9uRW50cnlbXSk6IG51bWJlciA9PiBydWxlLmxlbmd0aFxyXG4gICAgKTtcclxuICAgIGlmIChkb0NhbGwpIHtcclxuICAgICAgY29uc3QgcnVsZXNGcm9tQ2FsbCA9IHRoaXMuc2VhcmNoU2VydmljZS5nZXRGbGlnaHRGYXJlUnVsZXMoXHJcbiAgICAgICAgZmxpZ2h0c1swXSBhcyBJbnB1dEZsaWdodEpvdXJuZXlcclxuICAgICAgKTtcclxuICAgICAgcnVsZXNGcm9tQ2FsbC5zdWJzY3JpYmUoXHJcbiAgICAgICAgKGRhdGEpID0+IHtcclxuICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oTW9kYWxUeXBlcy5Nb2RhbEZsaWdodEZhcmVDb21wb25lbnQsIG51bGwsIHtcclxuICAgICAgICAgICAgcnVsZXM6IGRhdGEucmVzdWx0c1swXSxcclxuICAgICAgICAgICAgZnJvbTogZmxpZ2h0c1swXS5vcmlnaW5BaXJwb3J0LFxyXG4gICAgICAgICAgICB0bzogZmxpZ2h0c1tmbGlnaHRzLmxlbmd0aCAtIDFdLmRlc3RpbmF0aW9uQWlycG9ydFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oTW9kYWxUeXBlcy5Nb2RhbEZsaWdodEZhcmVDb21wb25lbnQsIG51bGwsIHtcclxuICAgICAgICBydWxlcyxcclxuICAgICAgICBmcm9tOiBmbGlnaHRzWzBdLm9yaWdpbkFpcnBvcnQsXHJcbiAgICAgICAgdG86IGZsaWdodHNbZmxpZ2h0cy5sZW5ndGggLSAxXS5kZXN0aW5hdGlvbkFpcnBvcnRcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBUT0RPIHdhaXRpbmcgZm9yIGRhdGFcclxuICBnZXRUZXJtc0FuZENvbmQoZmxpZ2h0UXVvdGU6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1BlbmFsdGllcycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRWxpZ2liaWxpdHknLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICAsXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRGF5L3RpbWUnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1NlYXNvbmFsaXR5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdGbGlnaHTCoEFwcGxpY2F0aW9uJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdBZHZhbmNlwqBSZXNlcnZhdGlvbnMvdGlja2V0aW5nJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdNYXhpbXVtwqBTdGF5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdNaW5pbXVtwqBTdGF5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdTdG9wb3ZlcnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RyYW5zZmVycycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQ29tYmluYXRpb25zJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdCbGFja291dMKgRGF0ZXMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1N1cmNoYXJnZXMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0FjY29tcGFuaWVkwqBUcmF2ZWwnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RyYXZlbMKgUmVzdHJpY3Rpb25zJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdTYWxlc8KgUmVzdHJpY3Rpb25zJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdIaXAvbWlsZWFnZcKgRXhjZXB0aW9ucycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVGlja2V0wqBFbmRvcnNlbWVudHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0NoaWxkcmVuwqBEaXNjb3VudHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RvdXLCoENvbmR1Y3RvcsKgRGlzY291bnRzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdBZ2VudMKgRGlzY291bnRzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdBbGzCoE90aGVywqBEaXNjb3VudHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ01pc2NlbGxhbmVvdXPCoFByb3Zpc2lvbnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0ZhcmXCoEJ5wqBSdWxlJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdHcm91cHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RvdXJzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdWaXNpdMKgQW5vdGhlcsKgQ291bnRyeScsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRGVwb3NpdHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1ZvbHVudGFyecKgQ2hhbmdlcycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVm9sdW50YXJ5wqBSZWZ1bmRzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdOZWdvdGlhdGVkwqBGYXJlcycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnUnVsZcKgQXBwbGljYXRpb27CoEFuZMKgT3RoZXLCoENvbmRpdGlvbnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9XHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVNlYXJjaCgpOiBPYnNlcnZhYmxlPFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHQ+e1xyXG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xyXG4gICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcclxuICAgICAgY29uc3QgZmF2b3VyaXRlU2VhcmNoUXVlcnk6IElGbGlnaHRTZWFyY2hBcmdzID0gdGhpcy51cGRhdGVTZXJjaFF1ZXJ5KHF1ZXJ5KTtcclxuXHJcbiAgICAgIGNvbnN0IHNlYXJjaEluZm8gPSB7XHJcbiAgICAgICAgbmFtZTogYCR7bW9tZW50KCl9YCxcclxuICAgICAgICBzZXJ2aWNlVHlwZTogU2VydmljZVR5cGUuRmxpZ2h0LFxyXG4gICAgICAgIHNlYXJjaEFyZ3M6IGZhdm91cml0ZVNlYXJjaFF1ZXJ5XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlRmF2b3VyaXRlU2VhcmNoKHNlYXJjaEluZm8pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTZXJjaFF1ZXJ5KHF1ZXJ5OiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyk6IElGbGlnaHRTZWFyY2hBcmdze1xyXG4gICAgY29uc3Qgc2VhcmNoUXVlcnk6IElGbGlnaHRTZWFyY2hBcmdzID0gcXVlcnk7XHJcbiAgICBzd2l0Y2godGhpcy5jaG9zZW5TZWFyY2hUeXBlKXtcclxuICAgICAgY2FzZSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eTpcclxuICAgICAgICBzZWFyY2hRdWVyeS5tdWx0aURlc3RpbmF0aW9uRGV0YWlsID0gdGhpcy5tdWx0aURlc3RpbmF0aW9uO1xyXG4gICAgICBicmVhaztcclxuICAgICAgY2FzZSBGbGlnaHRTZWFyY2hUeXBlLnJldHVybiA6XHJcbiAgICAgIGNhc2UgRmxpZ2h0U2VhcmNoVHlwZS5vbmVXYXk6XHJcbiAgICAgICAgc2VhcmNoUXVlcnkuZGVwYXJ0TG9jYXRpb25EZXRhaWwgPSB0aGlzLmRlcGFydExvY2F0aW9uO1xyXG4gICAgICAgIHNlYXJjaFF1ZXJ5LmFycml2ZUxvY2F0aW9uRGV0YWlsID0gdGhpcy5hcnJpdmVMb2NhdGlvbjtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc2VhcmNoUXVlcnk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|
|
1788
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxpZ2h0LWVudGVycHJpc2Utc2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2J0c2VydmljZXMvYmFzZS9zcmMvbGliL3ZlbmRvci9jbGFzc2VzL2ZsaWdodC1lbnRlcnByaXNlLXNlYXJjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBSXpELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBSWxFLE9BQU8sRUFRTCxRQUFRLEVBQ1IsZ0JBQWdCLEVBSWhCLG1CQUFtQixFQVFuQixXQUFXLEVBQ1osTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBRUwsbUJBQW1CLEVBWW5CLG1CQUFtQixFQU1wQixNQUFNLGdCQUFnQixDQUFDO0FBVXhCLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsa0JBQWtCLEVBR25CLE1BQU0seUNBQXlDLENBQUM7QUFFakQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFPN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBS3ZELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHaEQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBYW5CLE1BQU0sQ0FBTixJQUFZLFVBSVg7QUFKRCxXQUFZLFVBQVU7SUFDcEIsaUNBQW1CLENBQUE7SUFDbkIsa0NBQW9CLENBQUE7SUFDcEIsa0NBQW9CLENBQUE7QUFDdEIsQ0FBQyxFQUpXLFVBQVUsS0FBVixVQUFVLFFBSXJCO0FBRUQsTUFBTSxDQUFOLElBQVksZUFVWDtBQVZELFdBQVksZUFB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Q0FBQyxNQUFNO2dCQUMxQixXQUFXLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztnQkFDdkQsV0FBVyxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7Z0JBQ3ZELE1BQU07U0FDVDtRQUVELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7O0FBN2xGZSw2Q0FBc0IsR0FBRyxlQUFlLENBQUM7QUFDekMsOENBQXVCLEdBQUcsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IEJhc2VFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi9iYXNlLWVudGVycHJpc2UnO1xyXG5pbXBvcnQgeyBCYXNlU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlSGVscGVyUm91dGluZXMgfSBmcm9tICcuL2hlbHBlcnMnO1xyXG5pbXBvcnQgeyBUcmF2ZWxsZXIgfSBmcm9tICcuLi9tb2RlbHMvdHJhdmVsbGVyLm9iamVjdCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBWYWx1ZURpc3BsYXkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3ZhbHVlLWRpc3BsYXknO1xyXG5pbXBvcnQgeyBGbGlnaHRGaWx0ZXJzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mbGlnaHQtZmlsdGVycy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBTZWxlY3RGaWx0ZXIgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NlbGVjdC1maWx0ZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBBZGRJdGVtVG9CYXNrZXRNdXRhdGlvblZhcmlhYmxlcyxcclxuICBCYWdnYWdlQWxsb3dhbmNlLFxyXG4gIEJhc2tldEl0ZW0sXHJcbiAgQ3VycmVuY3lDb2RlLFxyXG4gIERlc3RpbmF0aW9uRW50cnksXHJcbiAgRmFyZUNvbmRpdGlvbkVudHJ5LFxyXG4gIEZhcmVDb25kaXRpb25zLFxyXG4gIEZhcmVUeXBlLFxyXG4gIEZsaWdodENhYmluQ2xhc3MsXHJcbiAgRmxpZ2h0SXRpbmVyYXJ5LFxyXG4gIEZsaWdodEpvdXJuZXksXHJcbiAgRmxpZ2h0UGFzc2VuZ2VyT2JqZWN0LFxyXG4gIEZsaWdodFBhc3NlbmdlclR5cGUsXHJcbiAgR3JvdXBlZEZpZWxkc0ZyYWdtZW50LFxyXG4gIEdyb3VwRmxpZ2h0cyxcclxuICBJbnB1dEZsaWdodEpvdXJuZXksXHJcbiAgSXRpbmVyYXJ5U3VtbWFyeSxcclxuICBNYXRjaGluZ0ZsaWdodHMsXHJcbiAgU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzLFxyXG4gIFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlcnZpY2VUeXBlXHJcbn0gZnJvbSAnLi4vdHlwZXMvZ3JhcGhxbC50eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgRmxpZ2h0QWxsUXVvdGVSZXN1bHQsXHJcbiAgRmxpZ2h0RGlyZWN0aW9uRW51bSxcclxuICBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgRmxpZ2h0R3JvdXBzLFxyXG4gIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxyXG4gIEZsaWdodE11bHRpLFxyXG4gIEZsaWdodFF1b3RlUmVzdWx0QXJyYXksXHJcbiAgR3JvdXBlZEZsaWdodHMsXHJcbiAgTWluTWF4LFxyXG4gIE5nYkRhdGVTdHJ1Y3QsXHJcbiAgT0JUQWlybGluZXNEZXRhaWxzLFxyXG4gIE9CVEFpcnBvcnREZXRhaWxzLFxyXG4gIE9CVEZsaWdodENhYmluQ2xhc3MsXHJcbiAgUmVjZW50U2VhcmNoLFxyXG4gIFJlY29yZFJ1bGVBY3Rpb24sXHJcbiAgUnVsZUFjdGlvblN1bW1hcnlJbnRlcmZhY2UsXHJcbiAgUnVsZUxvb2t1cCxcclxuICBTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0XHJcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VGbGlnaHRRdW90ZUZldGNoZXIsXHJcbiAgRmxpZ2h0UXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2ZsaWdodC1xdW90ZS5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBGdWxsVXNlckRldGFpbHMsXHJcbiAgVXNlclNlcnZpY2VJbnRlcmZhY2VcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0l1c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXNlYXJjaC5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBERUZBVUxUX0ZMSUdIVF9GSUxURVJTLFxyXG4gIEZsaWdodERpc3BsYXlUeXBlcyxcclxuICBGbGlnaHRFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlLFxyXG4gIEZsaWdodFRlbXBQYXJhbXNcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0lmbGlnaHQtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBJQ2hlYXBlc3RQcmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hlYXBlc3QtcHJpY2UnO1xyXG5pbXBvcnQgeyBGbGlnaHRTZWFyY2hUeXBlIH0gZnJvbSAnLi9mbGlnaHQtc2VhcmNoLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IElNdWx0aURlc3RpbmF0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mbGlnaHQtbXVsdGktZGVzdGluYXRpb24uaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcclxuICBJbnRlcm5hbEJhc2tldEludGVyZmFjZVxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWVudGVycHJpc2UtYmFza2V0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyByZXN1bHQgfSBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBVc2VyRmF2b3J1cml0ZSB9IGZyb20gJy4vdXNlci1mYXZvdXJpdGUuZW51bSc7XHJcbmltcG9ydCB7XHJcbiAgQXBwbHlKaXRGbGlnaHRSdWxlc1R5cGUsXHJcbiAgQmFzZUFwcGx5Sml0RmxpZ2h0UnVsZXNGZXRjaGVyXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvYXBwbHktaml0LWZsaWdodC1ydWxlcyc7XHJcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEJhc2VNb2RhbE9wZW5lclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RhbC1vcGVuZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IE1vZGFsVHlwZXMgfSBmcm9tICcuL21vZGFsLXR5cGVzLmVudW0nO1xyXG5pbXBvcnQgeyBJRmxpZ2h0U2VhcmNoQXJncyB9IGZyb20gJy4uL2ludGVyZmFjZXMvZmxpZ2h0LXNlYXJjaC1hcmdzLmludGVyZmFjZSc7XHJcblxyXG5jb25zdCBPVVRCT1VORCA9IDA7XHJcbmV4cG9ydCBpbnRlcmZhY2UgQWxsb3dlZENsYXNzIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmxpZ2h0T3BlcmF0b3Ige1xyXG4gIGNvZGU6IHN0cmluZztcclxuICBuYW1lOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEFsbG93ZWRDbGFzc2VzID0gQWxsb3dlZENsYXNzW107XHJcblxyXG5leHBvcnQgZW51bSBUaW1lV2luZG93IHtcclxuICBBbnl0aW1lID0gJ0FueXRpbWUnLFxyXG4gIERlcGFydCA9ICdEZXBhcnQgQnknLFxyXG4gIEFycml2ZSA9ICdBcnJpdmUgQnknXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIEZsaWdodFNvcnRUeXBlcyB7XHJcbiAgQ2hlYXBlc3QgPSAnQ2hlYXBlc3QnLFxyXG4gIE1vc3RFeHBlbnNpdmUgPSAnTW9zdCBFeHBlbnNpdmUnLFxyXG4gIEZhc3Rlc3QgPSAnRmFzdGVzdCcsXHJcbiAgUHJlZmVycmVkID0gJ1ByZWZlcnJlZCcsXHJcbiAgTG93ZXN0RW1pc3Npb25zID0gJ0xvd2VzdCBFbWlzc2lvbnMnLFxyXG4gIERlcGFydHVyZVRpbWUgPSAnRGVwYXJ0dXJlIFRpbWUnLFxyXG4gIEFycml2YWxUaW1lID0gJ0Fycml2YWwgVGltZScsXHJcbiAgUXVpY2tlc3QgPSAnUXVpY2tlc3QnLFxyXG4gIE1vc3REaXJlY3QgPSAnTW9zdCBEaXJlY3QnXHJcbn1cclxuXHJcbmludGVyZmFjZSBGbGlnaHRTZXNzaW9uVHlwZSB7XHJcbiAgcmVzdWx0czogRmxpZ2h0UXVvdGVSZXN1bHRBcnJheTtcclxuICBncm91cGVkOiBHcm91cGVkRmxpZ2h0cztcclxuICBxdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXM7XHJcbn1cclxuXHJcbmludGVyZmFjZSBIaWRlRmxpZ2h0Q2FiaW5DbGFzc0ludGVyZmFjZSB7XHJcbiAgYW55OiBib29sZWFuO1xyXG4gIGJ1c2luZXNzOiBib29sZWFuO1xyXG4gIGVjb25vbXk6IGJvb2xlYW47XHJcbiAgcHJlbWl1bUVjb25vbXk6IGJvb2xlYW47XHJcbiAgZmlyc3Q6IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBGbGlnaHRFbnRlcnByaXNlU2VhcmNoPFxyXG4gICAgRlFfUSBleHRlbmRzIEZsaWdodFF1b3RlRmV0Y2hlclR5cGUsXHJcbiAgICBBSkZfUSBleHRlbmRzIEFwcGx5Sml0RmxpZ2h0UnVsZXNUeXBlXHJcbiAgPlxyXG4gIGV4dGVuZHMgQmFzZUVudGVycHJpc2VTZWFyY2g8XHJcbiAgICBGbGlnaHRUZW1wUGFyYW1zLFxyXG4gICAgRmxpZ2h0QWxsUXVvdGVSZXN1bHQsXHJcbiAgICBGbGlnaHRRdW90ZVJlc3VsdEFycmF5XHJcbiAgPlxyXG4gIGltcGxlbWVudHMgRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZVxyXG57XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9QQVJBTVMgPSAnc2VhcmNoX2ZsaWdodCc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTID0gJ3Jlc3VsdHNfZmxpZ2h0JztcclxuXHJcbiAgcHVibGljIHR5cGU6IFNlcnZpY2VUeXBlID0gU2VydmljZVR5cGUuRmxpZ2h0O1xyXG5cclxuICBhdmFsaWFibGVDbGFzc2VzOiBCZWhhdmlvclN1YmplY3Q8QWxsb3dlZENsYXNzZXM+ID1cclxuICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8QWxsb3dlZENsYXNzZXM+KFtdKTtcclxuICB0aW1lQ3JpdGVyaWFPcHRpb25zOiBCZWhhdmlvclN1YmplY3Q8VGltZVdpbmRvd1tdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XHJcbiAgICBUaW1lV2luZG93W11cclxuICA+KFtdKTtcclxuICBmbGlnaHRPcGVyYXRvcnM6IEJlaGF2aW9yU3ViamVjdDxGbGlnaHRPcGVyYXRvcltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XHJcbiAgICBGbGlnaHRPcGVyYXRvcltdXHJcbiAgPihbXSk7XHJcblxyXG4gIHByaXZhdGUgX25lZ290aWF0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9uZWFyYnlfYWlycG9ydHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfdGltZUFycmF5OiBWYWx1ZURpc3BsYXk8c3RyaW5nPltdO1xyXG4gIHByaXZhdGUgX3NvcnRBcnJheTogVmFsdWVEaXNwbGF5PEZsaWdodFNvcnRUeXBlcz5bXSA9IFtcclxuICAgIHsgZGlzcGxheTogJ0NoZWFwZXN0IEZpcnN0JywgdmFsdWU6IEZsaWdodFNvcnRUeXBlcy5DaGVhcGVzdCB9LFxyXG4gICAge1xyXG4gICAgICBkaXNwbGF5OiAnTW9zdCBFeHBlbnNpdmUgRmlyc3QnLFxyXG4gICAgICB2YWx1ZTogRmxpZ2h0U29ydFR5cGVzLk1vc3RFeHBlbnNpdmVcclxuICAgIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdGYXN0ZXN0IEZpcnN0JywgdmFsdWU6IEZsaWdodFNvcnRUeXBlcy5GYXN0ZXN0IH0sXHJcbiAgICB7IGRpc3BsYXk6ICdQcmVmZXJyZWQgRmFyZXMgRmlyc3QnLCB2YWx1ZTogRmxpZ2h0U29ydFR5cGVzLlByZWZlcnJlZCB9LFxyXG4gICAge1xyXG4gICAgICBkaXNwbGF5OiAnTG93ZXN0IENvMiBFbWlzc2lvbnMgRmlyc3QnLFxyXG4gICAgICB2YWx1ZTogRmxpZ2h0U29ydFR5cGVzLkxvd2VzdEVtaXNzaW9uc1xyXG4gICAgfVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgX3NvcnRJdGluYXJ5Um91dGluZXM6IFJlY29yZDxcclxuICAgIEZsaWdodFNvcnRUeXBlcyxcclxuICAgIChhOiBGbGlnaHRJdGluZXJhcnksIGI6IEZsaWdodEl0aW5lcmFyeSkgPT4gbnVtYmVyXHJcbiAgPiA9IHtcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuQ2hlYXBlc3RdOiAoYTogRmxpZ2h0SXRpbmVyYXJ5LCBiOiBGbGlnaHRJdGluZXJhcnkpID0+IHtcclxuICAgICAgcmV0dXJuIGEudG90YWwucHJpY2UgLSBiLnRvdGFsLnByaWNlO1xyXG4gICAgfSxcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuTW9zdEV4cGVuc2l2ZV06IChcclxuICAgICAgYTogRmxpZ2h0SXRpbmVyYXJ5LFxyXG4gICAgICBiOiBGbGlnaHRJdGluZXJhcnlcclxuICAgICkgPT4ge1xyXG4gICAgICByZXR1cm4gYi50b3RhbC5wcmljZSAtIGEudG90YWwucHJpY2U7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5GYXN0ZXN0XTogKGE6IEZsaWdodEl0aW5lcmFyeSwgYjogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgYS5vdXRib3VuZFRvdGFsRHVyYXRpb24gK1xyXG4gICAgICAgIChhLmluYm91bmRUb3RhbER1cmF0aW9uID8gYS5pbmJvdW5kVG90YWxEdXJhdGlvbiA6IDApIC1cclxuICAgICAgICAoYi5vdXRib3VuZFRvdGFsRHVyYXRpb24gK1xyXG4gICAgICAgICAgKGIuaW5ib3VuZFRvdGFsRHVyYXRpb24gPyBiLmluYm91bmRUb3RhbER1cmF0aW9uIDogMCkpXHJcbiAgICAgICk7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5QcmVmZXJyZWRdOiAoXHJcbiAgICAgIGE6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxyXG4gICAgICBiOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9uc1xyXG4gICAgKSA9PiB7XHJcbiAgICAgIHJldHVybiBhLnByZWZlcnJlZCAtIGIucHJlZmVycmVkO1xyXG4gICAgfSxcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuTG93ZXN0RW1pc3Npb25zXTogKFxyXG4gICAgICBhOiBGbGlnaHRJdGluZXJhcnksXHJcbiAgICAgIGI6IEZsaWdodEl0aW5lcmFyeVxyXG4gICAgKSA9PiB7XHJcbiAgICAgIHJldHVybiBhLmNvMlBlckl0ZW0gLSBiLmNvMlBlckl0ZW07XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5EZXBhcnR1cmVUaW1lXTogKFxyXG4gICAgICBhOiBGbGlnaHRJdGluZXJhcnksXHJcbiAgICAgIGI6IEZsaWdodEl0aW5lcmFyeVxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGNvbnN0IGFUaW1lID0gbW9tZW50KGEub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKTtcclxuICAgICAgY29uc3QgYlRpbWUgPSBtb21lbnQoYi5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpO1xyXG4gICAgICBpZiAoYVRpbWUuaXNCZWZvcmUoYlRpbWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhVGltZS5pc1NhbWUoYlRpbWUpID8gMCA6IDE7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5BcnJpdmFsVGltZV06IChhOiBGbGlnaHRJdGluZXJhcnksIGI6IEZsaWdodEl0aW5lcmFyeSkgPT4ge1xyXG4gICAgICBjb25zdCBhVGltZSA9IG1vbWVudChhLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZUFycml2aW5nKTtcclxuICAgICAgY29uc3QgYlRpbWUgPSBtb21lbnQoYi5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVBcnJpdmluZyk7XHJcbiAgICAgIGlmIChhVGltZS5pc0JlZm9yZShiVGltZSkpIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGFUaW1lLmlzU2FtZShiVGltZSkgPyAwIDogMTtcclxuICAgIH0sXHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLlF1aWNrZXN0XTogKGE6IEZsaWdodEl0aW5lcmFyeSwgYjogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgYS5vdXRib3VuZFRvdGFsRHVyYXRpb24gK1xyXG4gICAgICAgIChhLmluYm91bmRUb3RhbER1cmF0aW9uID8gYS5pbmJvdW5kVG90YWxEdXJhdGlvbiA6IDApIC1cclxuICAgICAgICAoYi5vdXRib3VuZFRvdGFsRHVyYXRpb24gK1xyXG4gICAgICAgICAgKGIuaW5ib3VuZFRvdGFsRHVyYXRpb24gPyBiLmluYm91bmRUb3RhbER1cmF0aW9uIDogMCkpXHJcbiAgICAgICk7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5Nb3N0RGlyZWN0XTogKGE6IEZsaWdodEl0aW5lcmFyeSwgYjogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgYS5vdXRib3VuZEZsaWdodHMubGVuZ3RoICtcclxuICAgICAgICAoYS5vdXRib3VuZEZsaWdodHMgPyBhLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggOiAwKSAtXHJcbiAgICAgICAgKGIub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCArXHJcbiAgICAgICAgICAoYi5vdXRib3VuZEZsaWdodHMgPyBiLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggOiAwKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBwcml2YXRlIF9zb3J0R3JvdXBlZFJvdXRpbmVzOiBSZWNvcmQ8XHJcbiAgICBGbGlnaHRTb3J0VHlwZXMsXHJcbiAgICAoYTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0LCBiOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQpID0+IG51bWJlclxyXG4gID4gPSB7XHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLkNoZWFwZXN0XTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYS5taW5QcmljZSAtIGIubWluUHJpY2U7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5Nb3N0RXhwZW5zaXZlXTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYi5taW5QcmljZSAtIGEubWF4UHJpY2U7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5GYXN0ZXN0XTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYS5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmRcclxuICAgICAgICA/IGEub3V0Ym91bmRUb3RhbER1cmF0aW9uIC0gYi5vdXRib3VuZFRvdGFsRHVyYXRpb25cclxuICAgICAgICA6IGEuaW5ib3VuZFRvdGFsRHVyYXRpb24gLSBiLmluYm91bmRUb3RhbER1cmF0aW9uO1xyXG4gICAgfSxcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuUHJlZmVycmVkXTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gKGEucHJlZmVycmVkID8gMSA6IDApIC0gKGIucHJlZmVycmVkID8gMSA6IDApO1xyXG4gICAgfSxcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuTG93ZXN0RW1pc3Npb25zXTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYS5jbzJQZXJJdGVtIC0gYi5jbzJQZXJJdGVtO1xyXG4gICAgfSxcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuRGVwYXJ0dXJlVGltZV06IChcclxuICAgICAgYTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0LFxyXG4gICAgICBiOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHRcclxuICAgICkgPT4ge1xyXG4gICAgICBpZiAoYS5kaXJlY3Rpb24gIT09IGIuZGlyZWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGEuZGlyZWN0aW9uIC0gYi5kaXJlY3Rpb247XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgYVRpbWUgPSBtb21lbnQoYS5kZXBhcnREYXRlVGltZSk7XHJcbiAgICAgIGNvbnN0IGJUaW1lID0gbW9tZW50KGIuZGVwYXJ0RGF0ZVRpbWUpO1xyXG4gICAgICBpZiAoYVRpbWUuaXNCZWZvcmUoYlRpbWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhVGltZS5pc1NhbWUoYlRpbWUpID8gMCA6IDE7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5BcnJpdmFsVGltZV06IChcclxuICAgICAgYTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0LFxyXG4gICAgICBiOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHRcclxuICAgICkgPT4ge1xyXG4gICAgICBpZiAoYS5kaXJlY3Rpb24gIT09IGIuZGlyZWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGEuZGlyZWN0aW9uIC0gYi5kaXJlY3Rpb247XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgYVRpbWUgPSBtb21lbnQoYS5hcnJpdmFsRGF0ZVRpbWUpO1xyXG4gICAgICBjb25zdCBiVGltZSA9IG1vbWVudChiLmFycml2YWxEYXRlVGltZSk7XHJcbiAgICAgIGlmIChhVGltZS5pc0JlZm9yZShiVGltZSkpIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGFUaW1lLmlzU2FtZShiVGltZSkgPyAwIDogMTtcclxuICAgIH0sXHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLlF1aWNrZXN0XTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYS5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmRcclxuICAgICAgICA/IGEub3V0Ym91bmRUb3RhbER1cmF0aW9uIC0gYi5vdXRib3VuZFRvdGFsRHVyYXRpb25cclxuICAgICAgICA6IChhLmluYm91bmRUb3RhbER1cmF0aW9uID8gYS5pbmJvdW5kVG90YWxEdXJhdGlvbiA6IDApIC1cclxuICAgICAgICAgICAgKGIuaW5ib3VuZFRvdGFsRHVyYXRpb24gPyBiLmluYm91bmRUb3RhbER1cmF0aW9uIDogMCk7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5Nb3N0RGlyZWN0XTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYS5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmRcclxuICAgICAgICA/IGEub3V0bGVncy5sZW5ndGggLSBiLm91dGxlZ3MubGVuZ3RoXHJcbiAgICAgICAgOiAoYS5pbmxlZ3MgfHwgW10pLmxlbmd0aCAtIChiLmlubGVncyB8fCBbXSkubGVuZ3RoO1xyXG4gICAgfVxyXG4gIH07XHJcbiAgcHJpdmF0ZSBfZmFyZVR5cGVBcnJheTogVmFsdWVEaXNwbGF5PEZhcmVUeXBlPltdID0gW1xyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuRmxleGlibGUsIGRpc3BsYXk6ICdGbGV4aWJsZScgfSxcclxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLkxlaXN1cmUsIGRpc3BsYXk6ICdMZWlzdXJlJyB9LFxyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuTG93ZXN0LCBkaXNwbGF5OiAnTG93ZXN0JyB9LFxyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuTmVnb3RpYXRlZCwgZGlzcGxheTogJ05lZ290aWF0ZWQnIH0sXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5Ob25OZWdvdGlhdGVkLCBkaXNwbGF5OiAnTm9uLU5lZ290aWF0ZWQnIH0sXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5SZXF1ZXN0RmFyZVJ1bGVzLCBkaXNwbGF5OiAnUmVxdWVzdCBGYXJlIFJ1bGVzJyB9LFxyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuU2VsZWN0QW5kUHJvLCBkaXNwbGF5OiAnU2VsZWN0ICYgUHJvJyB9XHJcbiAgXTtcclxuXHJcbiAgcHVibGljIG1pbmltdW1PdXRCb3VuZERhdGUgPSB7XHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXHJcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBtaW5pbXVtSW5Cb3VuZERhdGUgPSB7XHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXHJcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxyXG4gIH07XHJcbiAgcHJpdmF0ZSBfb3V0RGF0ZTogTmdiRGF0ZVN0cnVjdDtcclxuICBwcml2YXRlIF9vdXRUaW1lOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfaW5EYXRlOiBOZ2JEYXRlU3RydWN0O1xyXG4gIHByaXZhdGUgX2luVGltZTogc3RyaW5nO1xyXG4gIHByaXZhdGUgX2Rlc3RpbmF0aW9uQWlycG9ydDogYW55O1xyXG4gIHByaXZhdGUgX29yaWdpbkFpcnBvcnQ6IGFueTtcclxuICBwcml2YXRlIF9wYXNzZW5nZXJzOiBhbnk7XHJcbiAgLy8gcHJpdmF0ZSBncm91cGVkT2JqZWN0OiBGbGlnaHRJdGluZXJhcnlXaXRoU2VsZWN0ZWRbXTtcclxuICBwcm90ZWN0ZWQgcmVzdWx0UXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzO1xyXG4gIHByb3RlY3RlZCBfZ3JvdXBlZDogR3JvdXBlZEZsaWdodHMgPSBudWxsO1xyXG4gIHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdID0gbnVsbDtcclxuICBwcm90ZWN0ZWQgcmVzdWx0c1Nlc3Npb25OYW1lID0gRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuICBwcm90ZWN0ZWQgbXVsdGlSZXN1bHRzU2Vzc2lvbk5hbWUgPVxyXG4gICAgRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuICBzZWxlY3RlZEdyb3VwRmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucztcclxuICBwcml2YXRlIF9zaG93SG90ZWxGb3JtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfaG90ZWxTZWFyY2hSZXF1ZXN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBmaWx0ZXJzOiBCZWhhdmlvclN1YmplY3Q8RmxpZ2h0RmlsdGVycz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFxyXG4gICAgREVGQVVMVF9GTElHSFRfRklMVEVSU1xyXG4gICk7XHJcbiAgZHVyYWxTaW5nbGVGaWx0ZXI6IEJlaGF2aW9yU3ViamVjdDxGbGlnaHRGaWx0ZXJzPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoXHJcbiAgICBERUZBVUxUX0ZMSUdIVF9GSUxURVJTXHJcbiAgKTtcclxuXHJcbiAgY2hvb3NlbkRpc3BsYXlUeXBlOiBCZWhhdmlvclN1YmplY3Q8RmxpZ2h0RGlzcGxheVR5cGVzPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoXHJcbiAgICBGbGlnaHREaXNwbGF5VHlwZXMucmV0dXJuc1xyXG4gICk7XHJcbiAgY3VycmVudFNvcnQ6IEZsaWdodFNvcnRUeXBlcztcclxuICBjdXJyZW50RmlsdGVyczogRmxpZ2h0RmlsdGVycztcclxuICBzZWxlY3RlZEdyb3VwSWQ6IG51bWJlcjtcclxuICBwcml2YXRlIF9ydWxlQWN0aW9uU3VtbWFyeTogUnVsZUFjdGlvblN1bW1hcnlJbnRlcmZhY2U7XHJcbiAgbXVsdGk6IEZsaWdodE11bHRpW107XHJcbiAgcHVibGljIGdldCB0aW1lQXJyYXkoKSB7XHJcbiAgICB0aGlzLl90aW1lQXJyYXkgPVxyXG4gICAgICB0aGlzLl90aW1lQXJyYXkgfHxcclxuICAgICAgQXJyYXkoOTYpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2YWx1ZTpcclxuICAgICAgICAgICAgICBNYXRoLmZsb29yKGluZGV4IC8gNClcclxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAucGFkU3RhcnQoMiwgJzAnKSArXHJcbiAgICAgICAgICAgICAgJzonICtcclxuICAgICAgICAgICAgICAoKGluZGV4ICUgNCkgKiAxNSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpLFxyXG4gICAgICAgICAgICBkaXNwbGF5OlxyXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyA0KVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcclxuICAgICAgICAgICAgICAnOicgK1xyXG4gICAgICAgICAgICAgICgoaW5kZXggJSA0KSAqIDE1KS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5fdGltZUFycmF5O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBwcmVmZXJyZWRDYXJyaWVycygpOiBPQlRBaXJsaW5lc0RldGFpbHNbXSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBwcmVmZXJyZWRDYXJyaWVycyh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzW10pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVycyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBvcGVyYXRvcjEoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMF07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG9wZXJhdG9yMSh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMF0gPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBvcGVyYXRvcjIoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMV07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG9wZXJhdG9yMih2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMV0gPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBvcGVyYXRvcjMoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMl07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG9wZXJhdG9yMyh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMl0gPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBvcGVyYXRvcjQoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbM107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG9wZXJhdG9yNCh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbM10gPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX21pbkRhdGU6IE5nYkRhdGVTdHJ1Y3Q7XHJcbiAgcHVibGljIGdldCBtaW5EYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgdGhpcy5fbWluRGF0ZSA9IHRoaXMuX21pbkRhdGUgfHwgdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG1vbWVudCgpKTtcclxuICAgIHJldHVybiB0aGlzLl9taW5EYXRlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhZHVsdHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBhZHVsdHModmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IE51bWJlcih2YWx1ZSk7XHJcbiAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlcnMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2hpbGRyZW4oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGNoaWxkcmVuKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IE51bWJlcih2YWx1ZSk7XHJcbiAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlcnMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZGVwYXJ0TG9jYXRpb24oKTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5kZXBhcnRMb2NhdGlvbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZGVwYXJ0TG9jYXRpb24odmFsdWU6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZGVwYXJ0TG9jYXRpb24gPSB2YWx1ZTtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRoaXMuX29yaWdpbkFpcnBvcnQgPSAnJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgdmFsdWUuZ2F0ZXdheSkge1xyXG4gICAgICB0aGlzLl9vcmlnaW5BaXJwb3J0ID0gdmFsdWUuZ2F0ZXdheTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX29yaWdpbkFpcnBvcnQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBxdWVyeU9yaWdpbkFpcG9ydCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX29yaWdpbkFpcnBvcnQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHF1ZXJ5RGVzdGluYXRpb25BaXBvcnQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRlcGFydERhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0RGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZGVwYXJ0RGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fb3V0RGF0ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQoXHJcbiAgICAgIHRoaXMuX291dERhdGUsXHJcbiAgICAgIHRoaXMuX291dFRpbWVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRlcGFydFRpbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9vdXRUaW1lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBkZXBhcnRUaW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX291dFRpbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMub3V0Qm91bmREYXRlID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KFxyXG4gICAgICB0aGlzLl9vdXREYXRlLFxyXG4gICAgICB0aGlzLl9vdXRUaW1lXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBvdXRCb3VuZERhdGUoKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgb3V0Qm91bmREYXRlKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlID0gdmFsdWUuaXNWYWxpZCgpID8gdmFsdWUgOiBudWxsO1xyXG4gICAgdGhpcy5taW5pbXVtSW5Cb3VuZERhdGUgPSB7XHJcbiAgICAgIHllYXI6IHZhbHVlLnllYXIoKSxcclxuICAgICAgbW9udGg6IHZhbHVlLm1vbnRoKCkgKyAxLFxyXG4gICAgICBkYXk6IHZhbHVlLmRhdGUoKVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUgJiZcclxuICAgICAgdGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlICYmXHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUuaXNBZnRlcih0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGUpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IG1vbWVudCh0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlKS5hZGQoMSwgJ2RheScpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fb3V0RGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZSh2YWx1ZSk7XHJcbiAgICB0aGlzLl9vdXRUaW1lID0gdGhpcy5oZWxwZXJzLmZvcm1hdFRpbWVDb2xvbih2YWx1ZSk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHJldHVybkRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5EYXRlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCByZXR1cm5EYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XHJcbiAgICB0aGlzLl9pbkRhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQodGhpcy5faW5EYXRlLCB0aGlzLl9pblRpbWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhcnJpdmVUaW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5UaW1lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBhcnJpdmVUaW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2luVGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudCh0aGlzLl9pbkRhdGUsIHRoaXMuX2luVGltZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGluYm91bmREYXRlKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgaW5ib3VuZERhdGUodmFsdWU6IG1vbWVudC5Nb21lbnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSA9IHZhbHVlLmlzVmFsaWQoKSA/IHZhbHVlIDogbnVsbDtcclxuICAgIHRoaXMuX2luRGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZSh2YWx1ZSk7XHJcbiAgICB0aGlzLl9pblRpbWUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0VGltZUNvbG9uKHZhbHVlKTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYXJyaXZlTG9jYXRpb24oKTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5hcnJpdmVMb2NhdGlvbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgYXJyaXZlTG9jYXRpb24odmFsdWU6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuYXJyaXZlTG9jYXRpb24gPSB2YWx1ZTtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9ICcnO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB2YWx1ZS5nYXRld2F5KSB7XHJcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9IHZhbHVlLmdhdGV3YXk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNhYmluQ2xhc3MoKTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jYWJpbkNsYXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNhYmluQ2xhc3ModmFsdWU6IEZsaWdodENhYmluQ2xhc3MgfCBudWxsKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHJldHVybkNhYmluQ2xhc3MoKTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IHJldHVybkNhYmluQ2xhc3ModmFsdWU6IEZsaWdodENhYmluQ2xhc3MgfCBudWxsKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNob3NlblNlYXJjaFR5cGUoKTogRmxpZ2h0U2VhcmNoVHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGU7XHJcbiAgfVxyXG5cclxuICBzZXQgY2hvc2VuU2VhcmNoVHlwZSh0eXBlOiBGbGlnaHRTZWFyY2hUeXBlKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9IHR5cGU7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNSZXR1cm4oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG91dFRpbWVDcml0ZXJpYSgpOiBUaW1lV2luZG93IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUNyaXRlcmlhO1xyXG4gIH1cclxuXHJcbiAgc2V0IG91dFRpbWVDcml0ZXJpYSh2YWx1ZTogVGltZVdpbmRvdykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm91dFRpbWVDcml0ZXJpYSA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGluVGltZUNyaXRlcmlhKCk6IFRpbWVXaW5kb3cge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYTtcclxuICB9XHJcblxyXG4gIHNldCBpblRpbWVDcml0ZXJpYSh2YWx1ZTogVGltZVdpbmRvdykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmluVGltZUNyaXRlcmlhID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG4gIGdldCBtYXhDb25uZWN0aW9ucygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5tYXhDb25uZWN0aW9ucztcclxuICB9XHJcblxyXG4gIHNldCBtYXhDb25uZWN0aW9ucyh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMubWF4Q29ubmVjdGlvbnMgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX211bHRpRGVzdGluYXRpb246IERlc3RpbmF0aW9uRW50cnlbXSA9IFtdO1xyXG4gIGdldCBtdWx0aURlc3RpbmF0aW9uKCk6IElNdWx0aURlc3RpbmF0aW9uW10ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2V0IG11bHRpRGVzdGluYXRpb24odmFsdWVBcnJheTogSU11bHRpRGVzdGluYXRpb25bXSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm11bHRpRGVzdGluYXRpb24gPSB2YWx1ZUFycmF5O1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzaG93SG90ZWxGb3JtKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Nob3dIb3RlbEZvcm07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHNob3dIb3RlbEZvcm0obmV3VmFsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9zaG93SG90ZWxGb3JtID0gbmV3VmFsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBob3RlbFNlYXJjaFJlcXVlc3RlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9ob3RlbFNlYXJjaFJlcXVlc3RlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgaG90ZWxTZWFyY2hSZXF1ZXN0ZWQobmV3VmFsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9ob3RlbFNlYXJjaFJlcXVlc3RlZCA9IG5ld1ZhbDtcclxuICB9XHJcblxyXG4gIHNldE11bHRpRGVzdGluYXRpb25RdWVyeShtdWx0aURlc3RpbmF0aW9uOiBJTXVsdGlEZXN0aW5hdGlvbltdKSB7XHJcbiAgICBjb25zdCBuZXdNdWx0aURlc3RpbmF0aW9uID0gdGhpcy5oZWxwZXJzLmNsb25lKG11bHRpRGVzdGluYXRpb24pO1xyXG4gICAgcmV0dXJuIG5ld011bHRpRGVzdGluYXRpb24ucmVkdWNlKFxyXG4gICAgICAoZGVzdGluYXRpb25BcnJheTogRGVzdGluYXRpb25FbnRyeVtdLCBpdGVtOiBJTXVsdGlEZXN0aW5hdGlvbikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uT2JqZWN0ID0ge30gYXMgRGVzdGluYXRpb25FbnRyeTtcclxuICAgICAgICBkZXN0aW5hdGlvbk9iamVjdC5vcmlnID0gaXRlbS5vcmlnLmdhdGV3YXk7XHJcbiAgICAgICAgZGVzdGluYXRpb25PYmplY3QuZGVzdCA9IGl0ZW0uZGVzdC5nYXRld2F5O1xyXG4gICAgICAgIGRlc3RpbmF0aW9uT2JqZWN0LmRhdGUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0SXNvRGF0ZShpdGVtLmRhdGUpO1xyXG4gICAgICAgIGRlc3RpbmF0aW9uQXJyYXkucHVzaChkZXN0aW5hdGlvbk9iamVjdCk7XHJcbiAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uQXJyYXk7XHJcbiAgICAgIH0sXHJcbiAgICAgIFtdIGFzIERlc3RpbmF0aW9uRW50cnlbXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIGdldCBvbmx5XHJcbiAgZ2V0IHNvcnREcm9wZG93blZhbHVlcygpOiBWYWx1ZURpc3BsYXk8RmxpZ2h0U29ydFR5cGVzPltdIHtcclxuICAgIHJldHVybiB0aGlzLl9zb3J0QXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXQgZmFyZVR5cGVzVmFsdWVzKCk6IFZhbHVlRGlzcGxheTxGYXJlVHlwZT5bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmFyZVR5cGVBcnJheTtcclxuICB9XHJcblxyXG4gIGdldCBmYXJlVHlwZSgpOiBGYXJlVHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmZhcmVUeXBlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGZhcmVUeXBlKHZhbHVlOiBGYXJlVHlwZSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmZhcmVUeXBlID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgbmVnb3RpYXRlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9uZWdvdGlhdGVkO1xyXG4gIH1cclxuXHJcbiAgc2V0IG5lZ290aWF0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX25lZ290aWF0ZWQgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBpbmNsdWRlTmVhcmJ5QWlycG9ydHMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmluY2x1ZGVOZWFyYnlBaXJwb3J0cztcclxuICB9XHJcblxyXG4gIHNldCBpbmNsdWRlTmVhcmJ5QWlycG9ydHModmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHMgPSB2YWx1ZTtcclxuICB9XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGZsaWdodGZldGNoZXI6IEJhc2VGbGlnaHRRdW90ZUZldGNoZXI8RlFfUT4sXHJcbiAgICBoZWxwZXJzOiBCYXNlSGVscGVyUm91dGluZXMsXHJcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZUludGVyZmFjZSxcclxuICAgIHByaXZhdGUgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBzdG9yYWdlU2VydmljZTogQmFzZVN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzZWFyY2hTZXJ2aWNlOiBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSxcclxuICAgIHByaXZhdGUgYXBwbHlGbGlnaHRSdWxlczogQmFzZUFwcGx5Sml0RmxpZ2h0UnVsZXNGZXRjaGVyPEFKRl9RPixcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCYXNlTW9kYWxPcGVuZXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihzdG9yYWdlU2VydmljZSwgaGVscGVycyk7XHJcblxyXG4gICAgY29uc3QgZGF0YToge1xyXG4gICAgICB0ZW1wUGFyYW1zOiBGbGlnaHRUZW1wUGFyYW1zO1xyXG4gICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IEZsaWdodFRlbXBQYXJhbXM7XHJcbiAgICB9ID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIEZsaWdodEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNU1xyXG4gICAgKSB8fCB7XHJcbiAgICAgIHRlbXBQYXJhbXM6IHt9IGFzIEZsaWdodFRlbXBQYXJhbXMsXHJcbiAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDoge30gYXMgRmxpZ2h0VGVtcFBhcmFtc1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBxdWVyeSA9IHNlYXJjaFNlcnZpY2UubWFrZUZsaWdodFF1ZXJ5KGRhdGEudGVtcFBhcmFtcyk7XHJcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXMocXVlcnkpO1xyXG4gICAgdGhpcy5fb3JpZ2luYWxVc2VyU2VhcmNoID0gZGF0YS5vcmlnaW5hbFVzZXJTZWFyY2g7XHJcbiAgICBpZiAoc2VhcmNoU2VydmljZS5zaG91bGRBZGRUcmF2ZWxsZXJTdWJzY3JpcHRpb24oKSkge1xyXG4gICAgICBzZWFyY2hTZXJ2aWNlLnRyYXZlbGxlckluZm9ybWF0aW9uLnN1YnNjcmliZShcclxuICAgICAgICAodHJhdmVsbGVyczogVHJhdmVsbGVyW10pID0+IHtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVycyA9IHRyYXZlbGxlcnM7XHJcbiAgICAgICAgICBjb25zdCBzcGxpdFRyYXZlbGxlcnMgPSB0aGlzLmhlbHBlcnMuc2VsZWN0ZWRUcmF2ZWxsZXJzKFxyXG4gICAgICAgICAgICB0cmF2ZWxsZXJzLFxyXG4gICAgICAgICAgICBTZXJ2aWNlVHlwZS5GbGlnaHRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gc3BsaXRUcmF2ZWxsZXJzLmFkdWx0cy5sZW5ndGg7XHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPSBzcGxpdFRyYXZlbGxlcnMuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgICAgLy8gdGhpcy50ZW1wUGFyYW1zLmluZmFudHMgPSBzcGxpdFRyYXZlbGxlcnMuaW5mYW50cy5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJzKCk7XHJcbiAgICAgICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHVzZXJTZXJ2aWNlLmNoYW5nZVVzZXIuc3Vic2NyaWJlKChfdXNlcjogRnVsbFVzZXJEZXRhaWxzKSA9PiB7XHJcbiAgICAgIHRoaXMudGltZUNyaXRlcmlhT3B0aW9ucy5uZXh0KFtcclxuICAgICAgICBUaW1lV2luZG93LkFueXRpbWUsXHJcbiAgICAgICAgVGltZVdpbmRvdy5BcnJpdmUsXHJcbiAgICAgICAgVGltZVdpbmRvdy5EZXBhcnRcclxuICAgICAgXSk7IC8vIFRPRE8gdXBkYXRlIHdpdGggYW55IFVGc1xyXG4gICAgICB0aGlzLmZsaWdodE9wZXJhdG9ycy5uZXh0KFt7IGNvZGU6ICdCQScsIG5hbWU6ICdCcml0aXNoIEFpcndheXMnIH1dKTsgLy8gRmV0Y2ggdGhlc2UgZnJvbSBEQlxyXG4gICAgICB0aGlzLnVwZGF0ZUF2YWxpYWJsZUNsYXNzZXMoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMudXBkYXRlVHJhdmVsbGVycygpO1xyXG5cclxuICAgIHRoaXMubmVnb3RpYXRlZCA9XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5mYXJlVHlwZSA9PT0gRmFyZVR5cGUuTmVnb3RpYXRlZCA/IHRydWUgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBwcm9jZXNzUmVzdWx0cyhcclxuICAgIHJlc3VsdHM6IEZsaWdodEFsbFF1b3RlUmVzdWx0XHJcbiAgKTogRmxpZ2h0UXVvdGVSZXN1bHRBcnJheSB7XHJcbiAgICBpZiAoIXJlc3VsdHMpIHtcclxuICAgICAgdGhpcy5fZ3JvdXBlZCA9IFtdO1xyXG4gICAgICB0aGlzLm11bHRpID0gW107XHJcbiAgICAgIHRoaXMucmVzdWx0UXVlcnkgPSBudWxsO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICB0aGlzLl9ncm91cGVkID0gcmVzdWx0cy5ncm91cGVkIHx8IFtdO1xyXG4gICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkgPSBPYmplY3QuYXNzaWduKFxyXG4gICAgICB7fSxcclxuICAgICAge1xyXG4gICAgICAgIGpvdXJuZXlXaGVuU2VsZWN0ZWQ6IHt9LFxyXG4gICAgICAgIGR1YWxTaW5nbGVXaGVuU2VsZWN0ZWQ6IHt9LFxyXG4gICAgICAgIHdoZW5TZWxlY3RlZEFsb25lOiB7fVxyXG4gICAgICB9LFxyXG4gICAgICByZXN1bHRzLnJ1bGVBY3Rpb25TdW1tYXJ5XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMucmVzdWx0UXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICB0aGlzLm11bHRpID0gcmVzdWx0cy5tdWx0aTtcclxuICAgIHRoaXMuc2V0RmxpZ2h0RGlzcGxheVR5cGUoRmxpZ2h0RGlzcGxheVR5cGVzLnJldHVybnMpO1xyXG4gICAgdGhpcy5jdXJyZW50RmlsdGVycyA9IHRoaXMuaGVscGVycy5jcmVhdGVGbGlnaHRGaWx0ZXJzKFxyXG4gICAgICByZXN1bHRzLmpvdXJuZXlzLFxyXG4gICAgICBERUZBVUxUX0ZMSUdIVF9GSUxURVJTXHJcbiAgICApO1xyXG4gICAgdGhpcy5maWx0ZXJzLm5leHQodGhpcy5jdXJyZW50RmlsdGVycyk7XHJcblxyXG4gICAgZGVsZXRlIHRoaXMucmVzdWx0UXVlcnkud2l0aEdyb3VwZWQ7XHJcbiAgICBjb25zdCBkdWFsU2luZ2xlcyA9IHJlc3VsdHMubXVsdGkucmVkdWNlKFxyXG4gICAgICAoXHJcbiAgICAgICAgcHJldmlvdXNJdGVtczoge1xyXG4gICAgICAgICAgb3V0Ym91bmQ6IFJlY29yZDxudW1iZXIsIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zPjtcclxuICAgICAgICAgIGluYm91bmQ6IFJlY29yZDxudW1iZXIsIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zPjtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG5leHRJdGVtOiBJdGluZXJhcnlTdW1tYXJ5XHJcbiAgICAgICkgPT4ge1xyXG4gICAgICAgIHByZXZpb3VzSXRlbXNbbmV4dEl0ZW0ub3JkZXIgPT09IE9VVEJPVU5EID8gJ291dGJvdW5kJyA6ICdpbmJvdW5kJ10gPVxyXG4gICAgICAgICAgbmV4dEl0ZW0ucmVzdWx0cy5yZWR1Y2UoXHJcbiAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICBhY2N1bTogUmVjb3JkPG51bWJlciwgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnM+LFxyXG4gICAgICAgICAgICAgIGZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcclxuICAgICAgICAgICAgKTogUmVjb3JkPG51bWJlciwgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnM+ID0+IHtcclxuICAgICAgICAgICAgICBhY2N1bVtmbGlnaHQudWlkXSA9IE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgY2FuU2VsZWN0OiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZmxpZ2h0XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICByZXR1cm4gYWNjdW07XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHByZXZpb3VzSXRlbXNbbmV4dEl0ZW0ub3JkZXIgPT09IE9VVEJPVU5EID8gJ291dGJvdW5kJyA6ICdpbmJvdW5kJ11cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIHByZXZpb3VzSXRlbXM7XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgb3V0Ym91bmQ6IHt9LCBpbmJvdW5kOiB7fSB9XHJcbiAgICApO1xyXG4gICAgLy8gY29uc29sZS5sb2coZHVhbFNpbmdsZXMpO1xyXG4gICAgY29uc3QgZHVhbEluYm91bmRGaWx0ZXJzID0gdGhpcy5oZWxwZXJzLmNyZWF0ZUZsaWdodEZpbHRlcnMoXHJcbiAgICAgIE9iamVjdC52YWx1ZXMoZHVhbFNpbmdsZXMuaW5ib3VuZCksXHJcbiAgICAgIERFRkFVTFRfRkxJR0hUX0ZJTFRFUlNcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5kdXJhbFNpbmdsZUZpbHRlci5uZXh0KFxyXG4gICAgICB0aGlzLmhlbHBlcnMuY3JlYXRlRmxpZ2h0RmlsdGVycyhPYmplY3QudmFsdWVzKGR1YWxTaW5nbGVzLm91dGJvdW5kKSwge1xyXG4gICAgICAgIC4uLkRFRkFVTFRfRkxJR0hUX0ZJTFRFUlMsXHJcbiAgICAgICAgYXJyaXZhbFJldHVybkFpcnBvcnQ6IGR1YWxJbmJvdW5kRmlsdGVycy5hcnJpdmFsQWlycG9ydCxcclxuICAgICAgICBkZXBhdHVyZVJldHVybkFpcnBvcnQ6IGR1YWxJbmJvdW5kRmlsdGVycy5kZXBhdHVyZUFpcnBvcnQsXHJcbiAgICAgICAgcmV0dXJuQXJyaXZhbFRpbWU6IGR1YWxJbmJvdW5kRmlsdGVycy5hcnJpdmFsVGltZSxcclxuICAgICAgICByZXR1cm5EdXJhdGlvbjogZHVhbEluYm91bmRGaWx0ZXJzLmR1cmF0aW9uLFxyXG4gICAgICAgIHJldHVybkRlcGFydHVyZVRpbWU6IGR1YWxJbmJvdW5kRmlsdGVycy5kZXBhcnR1cmVUaW1lXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgaWYgKHJlc3VsdHMgJiYgdGhpcy5zZWFyY2hTZXJ2aWNlLmlzRmxpZ2h0c0dyb3VwZWQoKSkge1xyXG4gICAgICBjb25zdCByZXR1cm5zID0gKFxyXG4gICAgICAgIChyZXN1bHRzLmpvdXJuZXlzIGFzIHVua25vd24gYXMgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNbXSkgfHwgW11cclxuICAgICAgKS5yZWR1Y2UoXHJcbiAgICAgICAgKFxyXG4gICAgICAgICAgYWNjdW06IFJlY29yZDxudW1iZXIsIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zPixcclxuICAgICAgICAgIGZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcclxuICAgICAgICApOiBSZWNvcmQ8bnVtYmVyLCBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucz4gPT4ge1xyXG4gICAgICAgICAgYWNjdW1bZmxpZ2h0LnVpZF0gPSBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGNhblNlbGVjdDogdHJ1ZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmbGlnaHRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm4gYWNjdW07XHJcbiAgICAgICAgfSxcclxuICAgICAgICB7fVxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgcmV0dXJuRGF0YSA9IChyZXN1bHRzLmdyb3VwZWQgfHwgW10pLnJlZHVjZShcclxuICAgICAgICB0aGlzLm1ha2VHcm91cGVkT2JqZWN0cyhyZXR1cm5zKSxcclxuICAgICAgICBbXVxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgZHVhbERhdGFPdXRib3VuZDogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0W10gPSAoXHJcbiAgICAgICAgcmVzdWx0cy5ncm91cGVkIHx8IFtdXHJcbiAgICAgIClcclxuICAgICAgICAucmVkdWNlKHRoaXMubWFrZUdyb3VwZWRPYmplY3RzKGR1YWxTaW5nbGVzLm91dGJvdW5kKSwgW10pXHJcbiAgICAgICAgLm1hcCgocmVzdWx0MTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICByZXN1bHQxLmRpcmVjdGlvbiA9IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZU91dGJvdW5kO1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDE7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBkdWFsRGF0YUluYm91bmQ6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFtdID0gKFxyXG4gICAgICAgIHJlc3VsdHMuZ3JvdXBlZCB8fCBbXVxyXG4gICAgICApXHJcbiAgICAgICAgLnJlZHVjZSh0aGlzLm1ha2VHcm91cGVkT2JqZWN0cyhkdWFsU2luZ2xlcy5pbmJvdW5kLCB0cnVlKSwgW10pXHJcbiAgICAgICAgLm1hcCgocmVzdWx0MTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICByZXN1bHQxLmRpcmVjdGlvbiA9IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZUluYm91bmQ7XHJcbiAgICAgICAgICByZXR1cm4gcmVzdWx0MTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IGRhdGEyID0gWy4uLnJldHVybkRhdGEsIC4uLmR1YWxEYXRhT3V0Ym91bmQsIC4uLmR1YWxEYXRhSW5ib3VuZF07XHJcbiAgICAgIGNvbnNvbGUubG9nKCdQcm9jZXNzZWQgR3JvdXBlZCBkYXRhJywgZGF0YTIpO1xyXG4gICAgICByZXR1cm4gZGF0YTI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gcmVzdWx0cyA/IFtyZXN1bHRzXSA6IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIG1ha2VHcm91cGVkT2JqZWN0cyhcclxuICAgIGdyb3VwZWRPYmplY3Q6IFJlY29yZDxudW1iZXIsIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zPixcclxuICAgIHRyZWF0T3V0Ym91bmRzQXNPdXRib3VuZHM6IGJvb2xlYW4gPSBmYWxzZVxyXG4gICkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgYWNjOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHRbXSxcclxuICAgICAgaXRlbTogR3JvdXBlZEZpZWxkc0ZyYWdtZW50XHJcbiAgICApOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHRbXSA9PiB7XHJcbiAgICAgIGNvbnN0IGlzT3V0Qm91bmQgPSBpdGVtLmJvdW5kSW5kaWNhdG9yID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kO1xyXG4gICAgICBjb25zdCByZXR1cm5PYmplY3Q6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCA9IHtcclxuICAgICAgICB0eXBlOiAnRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0JyxcclxuICAgICAgICBkaXJlY3Rpb246IGl0ZW0uYm91bmRJbmRpY2F0b3IsXHJcbiAgICAgICAgY2xhc3Nlczoge1xyXG4gICAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3NdOiBudWxsIGFzIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gICAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3NCcmFuZGVkXTogbnVsbCBhcyBGbGlnaHRJdGluZXJhcnlDbGFzcyxcclxuICAgICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aV06IG51bGwgYXMgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MsXHJcbiAgICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215RmxleGlCcmFuZGVkXTpcclxuICAgICAgICAgICAgbnVsbCBhcyBGbGlnaHRJdGluZXJhcnlDbGFzcyxcclxuICAgICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3NdOiBudWxsIGFzIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gICAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFnc0JyYW5kZWRdOlxyXG4gICAgICAgICAgICBudWxsIGFzIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gICAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWRdOiBudWxsIGFzIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gICAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWRCcmFuZGVkXTpcclxuICAgICAgICAgICAgbnVsbCBhcyBGbGlnaHRJdGluZXJhcnlDbGFzcyxcclxuICAgICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkZpcnN0XTogbnVsbCBhcyBGbGlnaHRJdGluZXJhcnlDbGFzcyxcclxuICAgICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkZpcnN0QnJhbmRlZF06IG51bGwgYXMgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MsXHJcbiAgICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teV06IG51bGwgYXMgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MsXHJcbiAgICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teUJyYW5kZWRdOlxyXG4gICAgICAgICAgICBudWxsIGFzIEZsaWdodEl0aW5lcmFyeUNsYXNzXHJcbiAgICAgICAgfSxcclxuICAgICAgICBvcmlnaW5BaXJwb3J0OiAnJyxcclxuICAgICAgICBvcmlnaW5BaXJwb3J0TmFtZTogJycsXHJcbiAgICAgICAgZGVzdGluYXRpb25BaXJwb3J0OiAnJyxcclxuICAgICAgICBkZXN0aW5hdGlvbkFpcnBvcnROYW1lOiAnJyxcclxuICAgICAgICBkZXBhcnREYXRlVGltZTogJycsXHJcbiAgICAgICAgYXJyaXZhbERhdGVUaW1lOiAnJyxcclxuICAgICAgICBvdXRib3VuZFRvdGFsRHVyYXRpb246IDAsXHJcbiAgICAgICAgaW5ib3VuZFRvdGFsRHVyYXRpb246IDAsXHJcbiAgICAgICAgb3V0bGVnczogbnVsbCxcclxuICAgICAgICBpbmxlZ3M6IG51bGwsXHJcbiAgICAgICAgb3V0bGVnc0NvdW50OiAwLFxyXG4gICAgICAgIGlubGVnc0NvdW50OiAwLFxyXG4gICAgICAgIGRhdGFTb3VyY2U6ICcnLFxyXG4gICAgICAgIHByZWZlcnJlZDogZmFsc2UsXHJcbiAgICAgICAgb3V0Ym91bmRGbGlnaHROdW1iZXI6ICcnLFxyXG4gICAgICAgIG9wZXJhdG9yOiAnJyxcclxuICAgICAgICBvcGVyYXRvckZ1bGw6ICcnLFxyXG4gICAgICAgIGluYm91bmRGbGlnaHROdW1iZXI6ICcnLFxyXG4gICAgICAgIGlzUmV0dXJuOiBmYWxzZSxcclxuICAgICAgICBtaW5QcmljZTogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXHJcbiAgICAgICAgbWF4UHJpY2U6IDAsXHJcbiAgICAgICAgY28yUGVySXRlbTogMCxcclxuICAgICAgICBjbzJQZXJQYXNzZW5nZXI6IDAsXHJcbiAgICAgICAgZ2lkOiBpdGVtLnJlZmVyZW5jZUlEXHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnN0IGJyYW5kczogTWF0Y2hpbmdGbGlnaHRzID0gaXRlbS5mbGlnaHRzO1xyXG5cclxuICAgICAgT2JqZWN0LmtleXMoYnJhbmRzKVxyXG4gICAgICAgIC5maWx0ZXIoKGtleTogc3RyaW5nKSA9PiBrZXlbMF0gIT09ICdfJylcclxuICAgICAgICAuZm9yRWFjaCgoYnJhbmQ6IEZsaWdodEdyb3VwcykgPT4ge1xyXG4gICAgICAgICAgaWYgKCFicmFuZHNbYnJhbmRdLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyAhIHVzaW5nIGEgcmVkdWNlIGJlY2F1c2Ugbm90IGFsbCBmbGlnaHRzIGFjdHVhbGx5IGV4aXN0IGFuZCB3ZSB3ZXJlIHNlZWluZyB1bmRlZmluZWQgaW4gdGhlIGZsaWdodCBsaXN0XHJcbiAgICAgICAgICBicmFuZHNbYnJhbmRdLmZvckVhY2goKGZsaWdodE51bTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZsaWdodCA9IGdyb3VwZWRPYmplY3RbZmxpZ2h0TnVtXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChmbGlnaHQpIHtcclxuICAgICAgICAgICAgICBpZiAoaXNPdXRCb3VuZCB8fCB0cmVhdE91dGJvdW5kc0FzT3V0Ym91bmRzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUdyb3VwZWRJdGVtKFxyXG4gICAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QsXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5zb3VyY2UsXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5vdXRib3VuZEZsaWdodHMsXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5vdXRib3VuZFRvdGFsRHVyYXRpb24sXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5pbmJvdW5kRmxpZ2h0cyxcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0LmluYm91bmRUb3RhbER1cmF0aW9uLFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQuY28yUGVySXRlbSxcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0LmNvMlBlclBhc3NlbmdlclxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVHcm91cGVkSXRlbShcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQuc291cmNlLFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQuaW5ib3VuZEZsaWdodHMsXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5pbmJvdW5kVG90YWxEdXJhdGlvbixcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0Lm91dGJvdW5kRmxpZ2h0cyxcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0Lm91dGJvdW5kVG90YWxEdXJhdGlvbixcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0LmNvMlBlckl0ZW0sXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5jbzJQZXJQYXNzZW5nZXJcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGNvbnN0IGNvcnJlY3RCcmFuZDogT0JURmxpZ2h0Q2FiaW5DbGFzcyA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhlbHBlcnMuRmxpZ2h0Q2FiaW5DbGFzc1RvQnJhbmRlZE9CVEZsaWdodENhYmluQ2xhc3MoXHJcbiAgICAgICAgICAgICAgICAgIGJyYW5kLFxyXG4gICAgICAgICAgICAgICAgICAhIWZsaWdodC5iYXNlRmFyZUlkICYmIGZsaWdodC5iYXNlRmFyZUlkICE9PSBmbGlnaHQudWlkXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGNvbnN0IG1pbnByaWNlID0gTWF0aC5mbG9vcihmbGlnaHQudG90YWwucHJpY2UpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IG1heHByaWNlID0gTWF0aC5jZWlsKGZsaWdodC50b3RhbC5wcmljZSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0Lm1pblByaWNlID1cclxuICAgICAgICAgICAgICAgIHJldHVybk9iamVjdC5taW5QcmljZSA8IG1pbnByaWNlXHJcbiAgICAgICAgICAgICAgICAgID8gcmV0dXJuT2JqZWN0Lm1pblByaWNlXHJcbiAgICAgICAgICAgICAgICAgIDogbWlucHJpY2U7XHJcblxyXG4gICAgICAgICAgICAgIHJldHVybk9iamVjdC5tYXhQcmljZSA9XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QubWF4UHJpY2UgPiBtYXhwcmljZVxyXG4gICAgICAgICAgICAgICAgICA/IHJldHVybk9iamVjdC5tYXhQcmljZVxyXG4gICAgICAgICAgICAgICAgICA6IG1heHByaWNlO1xyXG5cclxuICAgICAgICAgICAgICBpZiAocmV0dXJuT2JqZWN0LmNsYXNzZXNbY29ycmVjdEJyYW5kXT8uZmxpZ2h0cz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuY2xhc3Nlc1tjb3JyZWN0QnJhbmRdLmZsaWdodHMucHVzaChmbGlnaHQpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybk9iamVjdC5jbGFzc2VzW2NvcnJlY3RCcmFuZF0ubWlucHJpY2UgPSBNYXRoLm1pbihcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0LmNsYXNzZXNbY29ycmVjdEJyYW5kXS5taW5wcmljZSxcclxuICAgICAgICAgICAgICAgICAgbWlucHJpY2VcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuY2xhc3Nlc1tjb3JyZWN0QnJhbmRdLm1heHByaWNlID0gTWF0aC5tYXgoXHJcbiAgICAgICAgICAgICAgICAgIHJldHVybk9iamVjdC5jbGFzc2VzW2NvcnJlY3RCcmFuZF0ubWF4cHJpY2UsXHJcbiAgICAgICAgICAgICAgICAgIG1heHByaWNlXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuY2xhc3Nlc1tjb3JyZWN0QnJhbmRdID0ge1xyXG4gICAgICAgICAgICAgICAgICBmbGlnaHRzOiBbZmxpZ2h0XSxcclxuICAgICAgICAgICAgICAgICAgbWlucHJpY2UsXHJcbiAgICAgICAgICAgICAgICAgIG1heHByaWNlLFxyXG4gICAgICAgICAgICAgICAgICBjdXJyZW5jeTogZmxpZ2h0LnRvdGFsLmN1cnJlbmN5XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAvLyBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAgIC8vICAgJ1VuYWJsZSB0byBmaW5kIGZsaWdodCB3aXRoIHVpZCAnICsgZmxpZ2h0TnVtXHJcbiAgICAgICAgICAgICAgLy8gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICByZXR1cm5PYmplY3QgJiZcclxuICAgICAgICAhIU9iamVjdC52YWx1ZXMocmV0dXJuT2JqZWN0LmNsYXNzZXMpLmZpbmQoXHJcbiAgICAgICAgICAoY2xhczogRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MpOiBib29sZWFuID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGNsYXM/LmZsaWdodHM/Lmxlbmd0aCA+IDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICBhY2MucHVzaChyZXR1cm5PYmplY3QpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhY2MuZmlsdGVyKChpdGVtMjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0KSA9PiAhIWl0ZW0yKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUdyb3VwZWRJdGVtKFxyXG4gICAgcmV0dXJuT2JqZWN0OiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICBzb3VyY2U6IHN0cmluZyxcclxuICAgIG91dGJvdW5kRmxpZ2h0czogRmxpZ2h0Sm91cm5leVtdLFxyXG4gICAgb3V0Ym91bmRUb3RhbER1cmF0aW9uOiBudW1iZXIsXHJcbiAgICBpbmJvdW5kRmxpZ2h0czogRmxpZ2h0Sm91cm5leVtdLFxyXG4gICAgaW5ib3VuZFRvdGFsRHVyYXRpb246IG51bWJlcixcclxuICAgIGNvMlBlckl0ZW06IG51bWJlcixcclxuICAgIGNvMlBlclBhc3NlbmdlcjogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICBpZiAob3V0Ym91bmRGbGlnaHRzPy5sZW5ndGggJiYgIXJldHVybk9iamVjdC5kZXBhcnREYXRlVGltZSkge1xyXG4gICAgICBjb25zdCBmaXJzdCA9IG91dGJvdW5kRmxpZ2h0c1swXTtcclxuICAgICAgY29uc3QgbGFzdCA9IG91dGJvdW5kRmxpZ2h0c1tvdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMV07XHJcbiAgICAgIHJldHVybk9iamVjdC5vcmlnaW5BaXJwb3J0ID0gZmlyc3Qub3JpZ2luQWlycG9ydDtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm9yaWdpbkFpcnBvcnROYW1lID0gZmlyc3Qub3JpZ2luQWlycG9ydE5hbWU7XHJcbiAgICAgIHJldHVybk9iamVjdC5kZXN0aW5hdGlvbkFpcnBvcnQgPSBsYXN0LmRlc3RpbmF0aW9uQWlycG9ydDtcclxuICAgICAgcmV0dXJuT2JqZWN0LmRlc3RpbmF0aW9uQWlycG9ydE5hbWUgPSBsYXN0LmRlc3RpbmF0aW9uQWlycG9ydE5hbWU7XHJcbiAgICAgIHJldHVybk9iamVjdC5kZXBhcnREYXRlVGltZSA9IGZpcnN0LmRhdGVUaW1lRGVwYXJ0aW5nO1xyXG4gICAgICByZXR1cm5PYmplY3QuYXJyaXZhbERhdGVUaW1lID0gbGFzdC5kYXRlVGltZUFycml2aW5nO1xyXG4gICAgICByZXR1cm5PYmplY3Qub3V0Ym91bmRUb3RhbER1cmF0aW9uID0gb3V0Ym91bmRUb3RhbER1cmF0aW9uO1xyXG4gICAgICByZXR1cm5PYmplY3QuZGF0YVNvdXJjZSA9IHNvdXJjZTtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm9wZXJhdG9yID0gZmlyc3QubWFya2V0aW5nQ2FycmllcjtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm9wZXJhdG9yRnVsbCA9IGZpcnN0Lm1hcmtldGluZ0NhcnJpZXJOYW1lO1xyXG4gICAgICByZXR1cm5PYmplY3Qub3V0bGVnc0NvdW50ID0gb3V0Ym91bmRGbGlnaHRzLmxlbmd0aDtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm91dGxlZ3MgPSBvdXRib3VuZEZsaWdodHM7XHJcbiAgICAgIHJldHVybk9iamVjdC5vdXRib3VuZEZsaWdodE51bWJlciA9XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmpvaW5Gcm9tQXR0cmlidXRlPEZsaWdodEpvdXJuZXk+KFxyXG4gICAgICAgICAgJy0nLFxyXG4gICAgICAgICAgJ21hcmtldGluZ0ZsaWdodE51bWJlcicsXHJcbiAgICAgICAgICBvdXRib3VuZEZsaWdodHNcclxuICAgICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuT2JqZWN0LmlzUmV0dXJuID0gZmFsc2U7XHJcbiAgICAgIHJldHVybk9iamVjdC5jbzJQZXJJdGVtID0gY28yUGVySXRlbTtcclxuICAgICAgcmV0dXJuT2JqZWN0LmNvMlBlclBhc3NlbmdlciA9IGNvMlBlclBhc3NlbmdlcjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5ib3VuZEZsaWdodHM/Lmxlbmd0aCAmJiAhcmV0dXJuT2JqZWN0LmluYm91bmRUb3RhbER1cmF0aW9uKSB7XHJcbiAgICAgIHJldHVybk9iamVjdC5pbmJvdW5kVG90YWxEdXJhdGlvbiA9IGluYm91bmRUb3RhbER1cmF0aW9uO1xyXG4gICAgICByZXR1cm5PYmplY3QuaW5sZWdzQ291bnQgPSBpbmJvdW5kRmxpZ2h0cy5sZW5ndGg7XHJcbiAgICAgIHJldHVybk9iamVjdC5pbmxlZ3MgPSBpbmJvdW5kRmxpZ2h0cztcclxuICAgICAgcmV0dXJuT2JqZWN0LmluYm91bmRGbGlnaHROdW1iZXIgPVxyXG4gICAgICAgIHRoaXMuaGVscGVycy5qb2luRnJvbUF0dHJpYnV0ZTxGbGlnaHRKb3VybmV5PihcclxuICAgICAgICAgICctJyxcclxuICAgICAgICAgICdvcGVyYXRpbmdGbGlnaHROdW1iZXInLFxyXG4gICAgICAgICAgaW5ib3VuZEZsaWdodHNcclxuICAgICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuT2JqZWN0LmlzUmV0dXJuID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBtYWtlU2Vzc2lvblJlc3VsdHMoXHJcbiAgICBkYXRhOiBGbGlnaHRRdW90ZVJlc3VsdEFycmF5XHJcbiAgKTogRmxpZ2h0U2Vzc2lvblR5cGUge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVzdWx0czogZGF0YSxcclxuICAgICAgZ3JvdXBlZDogdGhpcy5fZ3JvdXBlZCxcclxuICAgICAgcXVlcnk6IHRoaXMucmVzdWx0UXVlcnlcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXRNYXhGbGlnaHRQcmljZUZvckJyYW5kKG1hdGNoaW5nQnJhbmRGbGlnaHRzOiBGbGlnaHRJdGluZXJhcnlbXSk6IG51bWJlciB7XHJcbiAgICBsZXQgbWF4ID0gMDtcclxuICAgIG1hdGNoaW5nQnJhbmRGbGlnaHRzLmZvckVhY2goKGZsaWdodCkgPT4ge1xyXG4gICAgICBpZiAobWF4IDwgZmxpZ2h0Py50b3RhbD8ucHJpY2UpIHtcclxuICAgICAgICBtYXggPSBmbGlnaHQudG90YWwucHJpY2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG1heDtcclxuICB9XHJcbiAgZ2V0TWluRmxpZ2h0UHJpY2VGb3JCcmFuZChtYXRjaGluZ0JyYW5kRmxpZ2h0czogRmxpZ2h0SXRpbmVyYXJ5W10pOiBudW1iZXIge1xyXG4gICAgbGV0IG1pbiA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xyXG4gICAgbWF0Y2hpbmdCcmFuZEZsaWdodHMuZm9yRWFjaCgoZmxpZ2h0KSA9PiB7XHJcbiAgICAgIGlmIChtaW4gPiBmbGlnaHQ/LnRvdGFsPy5wcmljZSkge1xyXG4gICAgICAgIG1pbiA9IGZsaWdodC50b3RhbC5wcmljZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbWluO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHJlc2V0UXVlcnkoY2hlY2tJc1ZhbGlkOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHRoaXMuc2VhcmNoU2VydmljZS5tYWtlRmxpZ2h0UXVlcnkoKSk7XHJcbiAgICBpZiAoY2hlY2tJc1ZhbGlkKSB7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldFBhcmFtcygpOiB2b2lkIHtcclxuICAgIHRoaXMucmVzZXQoKTtcclxuICAgIHRoaXMucmVzZXRRdWVyeSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNWYWxpZCgpIHtcclxuICAgIGlmICghdGhpcy5kb0NoZWNrcykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBGbGlnaHRFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgIHtcclxuICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXHJcbiAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzID0gW107XHJcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUubXVsdGlDaXR5KSB7XHJcbiAgICAgIHRoaXMubXVsdGlDaXR5VmFsaWRhdGlvbigpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKCF0aGlzLl9vcmlnaW5BaXJwb3J0KSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIGFkZCBpbiBhIGRlcGFydHVyZSBsb2NhdGlvbicpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0KSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIGFkZCBpbiBhbiBhcnJpdmFsIGRlc3RpbmF0aW9uJyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlLmlzQWZ0ZXIobW9tZW50KCkpKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnRGVwYXJ0dXJlIGRhdGUgY2FuIG5vdCBiZSBpbiB0aGUgcGFzdCcpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5fb3JpZ2luQWlycG9ydCAmJlxyXG4gICAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCAmJlxyXG4gICAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9PT0gdGhpcy5fb3JpZ2luQWlycG9ydFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICAgJ09yaWdpbiBhbmQgZGVzdGluYXRpb24gYWlycG9ydCBjYW5ub3QgYmUgdGhlIHNhbWUnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pc1JldHVybikge1xyXG4gICAgICAgIC8vIFRPRE8gY2hlY2sgdGhhdCByZXR1cm4gZGV0YWlscyBhcmUgc2V0XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZS5pc1NhbWVPckFmdGVyKFxyXG4gICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuaW5UaW1lQ3JpdGVyaWFcclxuICAgICAgICAgIClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgICAgICdSZXR1cm4gZGF0ZSBtdXN0IGJlIGFmdGVyIHRoZSBkZXBhcnR1cmUgZGF0ZSdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaXNWYWxpZC5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMCk7XHJcbiAgICAgIHRoaXMubWVzc2FnZXMubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtdWx0aUNpdHlWYWxpZGF0aW9uKCkge1xyXG4gICAgbGV0IGlzZW1wdHlWYWx1ZSA9IGZhbHNlO1xyXG4gICAgbGV0IGlzZW1wdHlMYW5kaW5nID0gZmFsc2U7XHJcbiAgICBsZXQgaXNTYW1lVmFsdWUgPSBmYWxzZTtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uLm1hcCgoZWxlbWVudCwgaSkgPT4ge1xyXG4gICAgICBpZiAoIWVsZW1lbnQub3JpZykge1xyXG4gICAgICAgIGlzZW1wdHlWYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgaWYgKGkgPCAyKSB7XHJcbiAgICAgICAgICBpc2VtcHR5TGFuZGluZyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChlbGVtZW50Lm9yaWcgPT09IGVsZW1lbnQuZGVzdCkgaXNTYW1lVmFsdWUgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgICBpZiAoIW1vbWVudCh0aGlzLnRlbXBQYXJhbXMubXVsdGlEZXN0aW5hdGlvblswXS5kYXRlKS5pc0FmdGVyKG1vbWVudCgpKSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdEZXBhcnR1cmUgZGF0ZSBjYW4gbm90IGJlIGluIHRoZSBwYXN0Jyk7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNlbXB0eUxhbmRpbmcpXHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBzZWxlY3QgbGFuZGluZyBhaXJwb3J0KHMpJyk7XHJcbiAgICBpZiAoaXNlbXB0eVZhbHVlKVxyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2Ugc2VsZWN0IHRha2Ugb2ZmIGFpcnBvcnQocyknKTtcclxuICAgIGlmIChpc1NhbWVWYWx1ZSlcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAnVGFrZSBvZmYgYW5kIGxhbmRpbmcgbG9jYXRpb24ocykgY2Fubm90IGJlIHRoZSBzYW1lJ1xyXG4gICAgICApO1xyXG4gIH1cclxuICBzdGFydFNlYXJjaCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX29yaWdpbmFsVXNlclNlYXJjaCA9IE9iamVjdC5mcmVlemUoXHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMudGVtcFBhcmFtcylcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgICBGbGlnaHRFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxyXG4gICAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlUmVjZW50U2VhcmNoKHRoaXMuZ2V0UmVjZW50U2VhcmNoUXVlcnkocXVlcnkpKTtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLl9zdGFydFNlYXJjaCh0aGlzLmZsaWdodGZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFJlY2VudFNlYXJjaFF1ZXJ5KFxyXG4gICAgcXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzXHJcbiAgKTogU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5GbGlnaHQsXHJcbiAgICAgIHNlYXJjaEFyZ3M6IHF1ZXJ5LFxyXG4gICAgICB0cmF2ZWxEYXRlOiB0aGlzLm91dEJvdW5kRGF0ZS5mb3JtYXQoKSxcclxuICAgICAgdHJhdmVsbGVyczogdGhpcy5oZWxwZXJzLmdldFRyYXZlbGxlcnNJZCh0aGlzLnRyYXZlbGxlcnMpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXJ0UmVjZW50U2VhcmNoKHJlY2VudFNlYXJjaDogUmVjZW50U2VhcmNoKTogdm9pZCB7XHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmREYXRlKSB7XHJcbiAgICAgIGxldCBvdXRib3VuZFRpbWVXaW5kb3cgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJnc1xyXG4gICAgICAgIC5vdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3dcclxuICAgICAgICA/IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvd1xyXG4gICAgICAgIDogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdztcclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmNvbnZlcnRSZWNlbnRTZWFyY2hEYXRlVGltZShcclxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZERhdGUsXHJcbiAgICAgICAgb3V0Ym91bmRUaW1lV2luZG93XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRhdGUpIHtcclxuICAgICAgbGV0IHJldHVyblRpbWVXaW5kb3cgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgPyByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5BcnJpdmFsVGltZVdpbmRvdztcclxuICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKFxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRhdGUsXHJcbiAgICAgICAgcmV0dXJuVGltZVdpbmRvd1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmFyZVR5cGUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5mYXJlVHlwZTtcclxuICAgIHRoaXMubWF4Q29ubmVjdGlvbnMgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5tYXhDb25uZWN0aW9ucztcclxuXHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmRDYWJpbkNsYXNzKSB7XHJcbiAgICAgIHRoaXMuY2FiaW5DbGFzcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kQ2FiaW5DbGFzc1swXTtcclxuICAgIH1cclxuICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5DYWJpbkNsYXNzKSB7XHJcbiAgICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkNhYmluQ2xhc3NbMF07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHMgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5pbmNsdWRlTmVhcmJ5QWlycG9ydHNcclxuICAgICAgPyB0cnVlXHJcbiAgICAgIDogZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuVHJpcFxyXG4gICAgICA/IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuXHJcbiAgICAgIDogRmxpZ2h0U2VhcmNoVHlwZS5vbmVXYXk7XHJcblxyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvdykge1xyXG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuRGVwYXJ0O1xyXG4gICAgfSBlbHNlIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZEFycml2YWxUaW1lV2luZG93KSB7XHJcbiAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5BcnJpdmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQW55dGltZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvdykge1xyXG4gICAgICB0aGlzLmluVGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5EZXBhcnQ7XHJcbiAgICB9IGVsc2UgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkFycml2YWxUaW1lV2luZG93KSB7XHJcbiAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFycml2ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFueXRpbWU7XHJcbiAgICB9XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbXHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0QnlDb2RlKFxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm9yaWdpbkFpcnBvcnRcclxuICAgICAgKSxcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEFpcnBvcnRCeUNvZGUoXHJcbiAgICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVzdGluYXRpb25BaXJwb3J0XHJcbiAgICAgIClcclxuICAgIF0pLnN1YnNjcmliZSgoW2RlcGFydExvY2F0aW9uLCBhcnJpdmVMb2NhdGlvbl0pID0+IHtcclxuICAgICAgaWYgKGRlcGFydExvY2F0aW9uICYmIGFycml2ZUxvY2F0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5kZXBhcnRMb2NhdGlvbiA9IHtcclxuICAgICAgICAgIGRlc3RpbmF0aW9uOiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2gubmFtZSxcclxuICAgICAgICAgIGdhdGV3YXk6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaC5pYXRhLFxyXG4gICAgICAgICAgdGVybWluYWxzOiB0aGlzLnNlYXJjaFNlcnZpY2UucHJvY2Vzc1Rlcm1pbmFscyhcclxuICAgICAgICAgICAgZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLnRlcm1pbmFsc1xyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGNvdW50cnk6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5LFxyXG4gICAgICAgICAgcG9zdGNvZGU6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5wb3N0Y29kZSxcclxuICAgICAgICAgIGNvdW50cnlDb2RlOiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeUNvZGVcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuYXJyaXZlTG9jYXRpb24gPSB7XHJcbiAgICAgICAgICBkZXN0aW5hdGlvbjogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLm5hbWUsXHJcbiAgICAgICAgICBnYXRld2F5OiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2guaWF0YSxcclxuICAgICAgICAgIHRlcm1pbmFsczogdGhpcy5zZWFyY2hTZXJ2aWNlLnByb2Nlc3NUZXJtaW5hbHMoXHJcbiAgICAgICAgICAgIGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC50ZXJtaW5hbHNcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBjb3VudHJ5OiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeSxcclxuICAgICAgICAgIHBvc3Rjb2RlOiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8ucG9zdGNvZGUsXHJcbiAgICAgICAgICBjb3VudHJ5Q29kZTogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnByZWZlcnJlZENhcnJpZXJzKSB7XHJcbiAgICAgICAgICBjb25zdCBwcmVmZXJyZWRDYXJyaWVyczogT0JUQWlybGluZXNEZXRhaWxzW10gPSBbXTtcclxuICAgICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnByZWZlcnJlZENhcnJpZXJzLm1hcChcclxuICAgICAgICAgICAgKHByZWZlcnJlZENhcnJ5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgICAgICAgICAgIC5nZXRBaXJsaW5lc0xpc3QocHJlZmVycmVkQ2FycnkpXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChpdGVtczogT0JUQWlybGluZXNEZXRhaWxzW10pID0+IHtcclxuICAgICAgICAgICAgICAgICAgaXRlbXMubWFwKChpdGVtOiBPQlRBaXJsaW5lc0RldGFpbHMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5jb2RlID09PSBwcmVmZXJyZWRDYXJyeSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcHJlZmVycmVkQ2FycmllcnMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnByZWZlcnJlZENhcnJpZXJzID0gcHJlZmVycmVkQ2FycmllcnM7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYWtlRGVwYXJ0dXJlVGltZVdpbmRvdyhcclxuICAgIGRhdGVUaW1lOiBtb21lbnQuTW9tZW50LFxyXG4gICAgd2luZG93OiBUaW1lV2luZG93LFxyXG4gICAgaXNGbGlnaHRzR3JvdXBlZDogYm9vbGVhblxyXG4gICk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gd2luZG93ID09PSBUaW1lV2luZG93LkRlcGFydFxyXG4gICAgICA/IGlzRmxpZ2h0c0dyb3VwZWRcclxuICAgICAgICA/IHRoaXMuaGVscGVycy5tYWtlVGltZVdpbmRvdyhkYXRlVGltZSwgLTIsIDIpXHJcbiAgICAgICAgOiB0aGlzLmhlbHBlcnMubWFrZVRpbWVXaW5kb3coZGF0ZVRpbWUsIDAsIDQpXHJcbiAgICAgIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWFrZUFycml2YWxUaW1lV2luZG93KFxyXG4gICAgZGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQsXHJcbiAgICB3aW5kb3c6IFRpbWVXaW5kb3csXHJcbiAgICBpc0ZsaWdodHNHcm91cGVkOiBib29sZWFuXHJcbiAgKTogc3RyaW5nIHtcclxuICAgIGlmICh3aW5kb3cgIT09IFRpbWVXaW5kb3cuQXJyaXZlKSByZXR1cm4gbnVsbDtcclxuICAgIHJldHVybiBpc0ZsaWdodHNHcm91cGVkXHJcbiAgICAgID8gdGhpcy5oZWxwZXJzLm1ha2VUaW1lV2luZG93KGRhdGVUaW1lLCAtMiwgMilcclxuICAgICAgOiB0aGlzLmhlbHBlcnMubWFrZVRpbWVXaW5kb3coZGF0ZVRpbWUsIDAsIDQpO1xyXG4gIH1cclxuXHJcbiAgY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKFxyXG4gICAgZGF0ZTogc3RyaW5nLFxyXG4gICAgdGltZVdpbmRvdz86IHN0cmluZ1xyXG4gICk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgaWYgKHRpbWVXaW5kb3cpIHtcclxuICAgICAgY29uc3QgZmxpZ2h0VGltZSA9IHRpbWVXaW5kb3cuc3BsaXQoJy0nKTtcclxuICAgICAgY29uc3QgdGltZUFuZERhdGUgPSBtb21lbnQoZGF0ZSkuYWRkKFxyXG4gICAgICAgIG1vbWVudC5kdXJhdGlvbih0aGlzLmhlbHBlcnMuaGhtbVRvVGltZShmbGlnaHRUaW1lWzBdKSlcclxuICAgICAgKTtcclxuICAgICAgLy8gYWRkIDIgaG91clxyXG4gICAgICByZXR1cm4gdGltZUFuZERhdGUuY2xvbmUoKS5hZGQoMiwgJ2hvdXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBtb21lbnQoZGF0ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTZWFyY2hRdWVyeSgpOiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyB7XHJcbiAgICBjb25zdCBpc011bHRpQ2l0eUFjdGl2ZSA9XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eTtcclxuICAgIHRoaXMuX211bHRpRGVzdGluYXRpb24gPSBpc011bHRpQ2l0eUFjdGl2ZVxyXG4gICAgICA/IHRoaXMuc2V0TXVsdGlEZXN0aW5hdGlvblF1ZXJ5KHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uKVxyXG4gICAgICA6IG51bGw7XHJcblxyXG4gICAgdGhpcy5fbXVsdGlEZXN0aW5hdGlvbiA9XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eVxyXG4gICAgICAgID8gdGhpcy5zZXRNdWx0aURlc3RpbmF0aW9uUXVlcnkodGhpcy50ZW1wUGFyYW1zLm11bHRpRGVzdGluYXRpb24pXHJcbiAgICAgICAgOiBbXTtcclxuICAgIGNvbnN0IGlzRmxpZ2h0c0dyb3VwZWQgPSB0aGlzLnNlYXJjaFNlcnZpY2UuaXNGbGlnaHRzR3JvdXBlZCgpO1xyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcz4oXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAge30sXHJcbiAgICAgICAgaXNNdWx0aUNpdHlBY3RpdmVcclxuICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgIG11bHRpRGVzdGluYXRpb246IHRoaXMuX211bHRpRGVzdGluYXRpb25cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgb3JpZ2luQWlycG9ydDogdGhpcy5fb3JpZ2luQWlycG9ydCxcclxuICAgICAgICAgICAgICBkZXN0aW5hdGlvbkFpcnBvcnQ6IHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCxcclxuICAgICAgICAgICAgICBvdXRib3VuZERhdGU6IHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlKFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZVxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgb3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93OiB0aGlzLm1ha2VEZXBhcnR1cmVUaW1lV2luZG93KFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZSxcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lQ3JpdGVyaWEsXHJcbiAgICAgICAgICAgICAgICBpc0ZsaWdodHNHcm91cGVkXHJcbiAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICBvdXRib3VuZEFycml2YWxUaW1lV2luZG93OiB0aGlzLm1ha2VBcnJpdmFsVGltZVdpbmRvdyhcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUNyaXRlcmlhLFxyXG4gICAgICAgICAgICAgICAgaXNGbGlnaHRzR3JvdXBlZFxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBwYXNzZW5nZXJzOiB0aGlzLl9wYXNzZW5nZXJzLFxyXG4gICAgICAgICAgcmV0dXJuVHJpcDogdGhpcy5pc1JldHVybixcclxuICAgICAgICAgIG91dGJvdW5kQ2FiaW5DbGFzczogdGhpcy50ZW1wUGFyYW1zLmNhYmluQ2xhc3NcclxuICAgICAgICAgICAgPyBbdGhpcy50ZW1wUGFyYW1zLmNhYmluQ2xhc3NdXHJcbiAgICAgICAgICAgIDogbnVsbCxcclxuICAgICAgICAgIHJlcXVpcmVGcmVlQmFnOiBudWxsLFxyXG4gICAgICAgICAgbWF4Q29ubmVjdGlvbnM6IHRoaXMudGVtcFBhcmFtcy5tYXhDb25uZWN0aW9ucyxcclxuICAgICAgICAgIGluY2x1ZGVOZWFyYnlBaXJwb3J0czogdGhpcy50ZW1wUGFyYW1zLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyxcclxuICAgICAgICAgIHByZWZlcnJlZENhcnJpZXJzOiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnMubWFwKFxyXG4gICAgICAgICAgICAoY2FycmllcjogT0JUQWlybGluZXNEZXRhaWxzKSA9PlxyXG4gICAgICAgICAgICAgIGNhcnJpZXI/LmNvZGUgPyBjYXJyaWVyLmNvZGUgOiBudWxsXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgZmFyZVR5cGU6IHRoaXMudGVtcFBhcmFtcy5mYXJlVHlwZSxcclxuICAgICAgICAgIHdpdGhHcm91cGVkOiBpc0ZsaWdodHNHcm91cGVkXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0aGlzLmlzUmV0dXJuXHJcbiAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICByZXR1cm5EYXRlOiB0aGlzLmhlbHBlcnMuZm9ybWF0SXNvRGF0ZShcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZVxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgcmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvdzogdGhpcy5tYWtlRGVwYXJ0dXJlVGltZVdpbmRvdyhcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSxcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYSxcclxuICAgICAgICAgICAgICAgIGlzRmxpZ2h0c0dyb3VwZWRcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIHJldHVybkFycml2YWxUaW1lV2luZG93OiB0aGlzLm1ha2VBcnJpdmFsVGltZVdpbmRvdyhcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSxcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYSxcclxuICAgICAgICAgICAgICAgIGlzRmxpZ2h0c0dyb3VwZWRcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIHJldHVybkNhYmluQ2xhc3M6IHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzXHJcbiAgICAgICAgICAgICAgICA/IFt0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzc11cclxuICAgICAgICAgICAgICAgIDogbnVsbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA6IHt9XHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVRyYXZlbGxlcnMoKSB7XHJcbiAgICBjb25zdCB0cmF2ZWxsZXJzOiBGbGlnaHRQYXNzZW5nZXJPYmplY3RbXSA9IFtdO1xyXG4gICAgZm9yIChsZXQgbG9vcCA9IDA7IGxvb3AgPCB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzOyBsb29wICs9IDEpIHtcclxuICAgICAgdHJhdmVsbGVycy5wdXNoKHsgdHlwZTogRmxpZ2h0UGFzc2VuZ2VyVHlwZS5BZHVsdCB9KTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IGxvb3AgPSAwOyBsb29wIDwgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuOyBsb29wICs9IDEpIHtcclxuICAgICAgdHJhdmVsbGVycy5wdXNoKHsgdHlwZTogRmxpZ2h0UGFzc2VuZ2VyVHlwZS5DaGlsZCB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9wYXNzZW5nZXJzID0gdHJhdmVsbGVycztcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlQXZhbGlhYmxlQ2xhc3NlcygpIHtcclxuICAgIGNvbnN0IGhpZGVDbGFzc2VzID1cclxuICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRmF2b3JpdGVPYmplY3Q8SGlkZUZsaWdodENhYmluQ2xhc3NJbnRlcmZhY2U+KFxyXG4gICAgICAgIFVzZXJGYXZvcnVyaXRlLkhpZGVGbGlnaHRDYWJpbkNsYXNzZXNcclxuICAgICAgKSB8fCB7XHJcbiAgICAgICAgYW55OiBmYWxzZSxcclxuICAgICAgICBidXNpbmVzczogZmFsc2UsXHJcbiAgICAgICAgZWNvbm9teTogZmFsc2UsXHJcbiAgICAgICAgZmlyc3Q6IGZhbHNlLFxyXG4gICAgICAgIHByZW1pdW1FY29ub215OiBmYWxzZVxyXG4gICAgICB9O1xyXG5cclxuICAgIGNvbnN0IG9wdGlvbnM6IHsgbmFtZTogc3RyaW5nOyB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzIH1bXSA9IFtdO1xyXG4gICAgaWYgKCFoaWRlQ2xhc3Nlcy5hbnkpIHtcclxuICAgICAgb3B0aW9ucy5wdXNoKHsgbmFtZTogJ0FueScsIHR5cGU6IEZsaWdodENhYmluQ2xhc3MuQW55IH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKCFoaWRlQ2xhc3Nlcy5lY29ub215KSB7XHJcbiAgICAgIG9wdGlvbnMucHVzaCh7IG5hbWU6ICdFY29ub215JywgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaGlkZUNsYXNzZXMucHJlbWl1bUVjb25vbXkpIHtcclxuICAgICAgb3B0aW9ucy5wdXNoKHsgbmFtZTogJ1ByZW1pdW0nLCB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaGlkZUNsYXNzZXMuYnVzaW5lc3MpIHtcclxuICAgICAgb3B0aW9ucy5wdXNoKHsgbmFtZTogJ0J1c2luZXNzJywgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzcyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWhpZGVDbGFzc2VzLmZpcnN0KSB7XHJcbiAgICAgIG9wdGlvbnMucHVzaCh7IG5hbWU6ICdGaXJzdCcsIHR5cGU6IEZsaWdodENhYmluQ2xhc3MuRmlyc3QgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jYWJpbkNsYXNzID0gdGhpcy5nZXRVcGRhdGVkQ2FiaW5DbGFzcyhcclxuICAgICAgdGhpcy5jYWJpbkNsYXNzLFxyXG4gICAgICBoaWRlQ2xhc3NlcyxcclxuICAgICAgb3B0aW9uc1xyXG4gICAgKTtcclxuICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9IHRoaXMuZ2V0VXBkYXRlZENhYmluQ2xhc3MoXHJcbiAgICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyxcclxuICAgICAgaGlkZUNsYXNzZXMsXHJcbiAgICAgIG9wdGlvbnNcclxuICAgICk7XHJcbiAgICB0aGlzLmF2YWxpYWJsZUNsYXNzZXMubmV4dChvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VXBkYXRlZENhYmluQ2xhc3MoXHJcbiAgICBjYWJpbkNsYXNzOiBGbGlnaHRDYWJpbkNsYXNzLFxyXG4gICAgaGlkZUNsYXNzZXM6IEhpZGVGbGlnaHRDYWJpbkNsYXNzSW50ZXJmYWNlLFxyXG4gICAgb3B0aW9uczogeyBuYW1lOiBzdHJpbmc7IHR5cGU6IEZsaWdodENhYmluQ2xhc3MgfVtdXHJcbiAgKTogRmxpZ2h0Q2FiaW5DbGFzcyB7XHJcbiAgICBzd2l0Y2ggKGNhYmluQ2xhc3MpIHtcclxuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkFueTpcclxuICAgICAgICByZXR1cm4gaGlkZUNsYXNzZXMuYW55ID8gb3B0aW9uc1swXS50eXBlIDogY2FiaW5DbGFzcztcclxuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzOlxyXG4gICAgICAgIHJldHVybiBoaWRlQ2xhc3Nlcy5idXNpbmVzcyA/IG9wdGlvbnNbMF0udHlwZSA6IGNhYmluQ2xhc3M7XHJcbiAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215OlxyXG4gICAgICAgIHJldHVybiBoaWRlQ2xhc3Nlcy5lY29ub215ID8gb3B0aW9uc1swXS50eXBlIDogY2FiaW5DbGFzcztcclxuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkZpcnN0OlxyXG4gICAgICAgIHJldHVybiBoaWRlQ2xhc3Nlcy5maXJzdCA/IG9wdGlvbnNbMF0udHlwZSA6IGNhYmluQ2xhc3M7XHJcbiAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teTpcclxuICAgICAgICByZXR1cm4gaGlkZUNsYXNzZXMucHJlbWl1bUVjb25vbXkgPyBvcHRpb25zWzBdLnR5cGUgOiBjYWJpbkNsYXNzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNhYmluQ2xhc3M7XHJcbiAgfVxyXG4gIHVwZGF0ZUZyb21QcmV2aW91c1NlYXJjaGVzKFxyXG4gICAgX3ByZXZpb3VzSXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT5cclxuICApOiB2b2lkIHtcclxuICAgIC8vIEZsaWdodHMgY2FuIG5vdCBiZSBzZWFyY2ggYWZ0ZXIgb3RoZXIgcHJvZHVjdHMgc28gbm8gZGVmYXVsdHMgY2FuIGJlIHNldC5cclxuICB9XHJcblxyXG4gIGdldFRvdGFsQmFnZ2FnZShyZXN1bHQ6IEZsaWdodEl0aW5lcmFyeSk6IG51bWJlciB7XHJcbiAgICBsZXQgdG90YWwgPSAwO1xyXG5cclxuICAgIGNvbnN0IHBhcnNlZEFkZGl0aW9uYWwgPSBKU09OLnBhcnNlKHJlc3VsdC5hZGRpdGlvbmFsKTtcclxuICAgIGlmIChwYXJzZWRBZGRpdGlvbmFsICYmIHBhcnNlZEFkZGl0aW9uYWwub3V0Ym91bmRGbGlnaHRzKSB7XHJcbiAgICAgIHBhcnNlZEFkZGl0aW9uYWwub3V0Ym91bmRGbGlnaHRzLmZvckVhY2goKGZsaWdodDogYW55KSA9PiB7XHJcbiAgICAgICAgZmxpZ2h0LmJhZ2dhZ2UuZm9yRWFjaCgoYmFnOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChiYWcuYWxsb3dhbmNlICYmIGJhZy5hbGxvd2FuY2UgPiB0b3RhbCkge1xyXG4gICAgICAgICAgICB0b3RhbCA9IGJhZy5hbGxvd2FuY2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChwYXJzZWRBZGRpdGlvbmFsICYmIHBhcnNlZEFkZGl0aW9uYWwuYmFnZ2FnZUFsbG93YW5jZSkge1xyXG4gICAgICBwYXJzZWRBZGRpdGlvbmFsLmJhZ2dhZ2VBbGxvd2FuY2UuZm9yRWFjaCgoYmFnZ2FnZUFsbG93OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBiYWdnYWdlQWxsb3cuYmFnZ2FnZS5xdHkgJiZcclxuICAgICAgICAgIE51bWJlcihiYWdnYWdlQWxsb3cuYmFnZ2FnZS5xdHkpID4gdG90YWxcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRvdGFsID0gTnVtYmVyKGJhZ2dhZ2VBbGxvdy5iYWdnYWdlLnF0eSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdG90YWw7XHJcbiAgfVxyXG5cclxuICBpc0dyb3VwZWRGbGlnaHRzKFxyXG4gICAgdG9UZXN0OiBGbGlnaHRRdW90ZVJlc3VsdEFycmF5XHJcbiAgKTogdG9UZXN0IGlzIEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFtdIHtcclxuICAgIHJldHVybiB0b1Rlc3RbMF0/LnR5cGUgPT09ICdGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQnO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBmaWx0ZXIgdGhlIHJlc3VsdHMsIHRoZW4gc29ydCB0aGUgcmVtYWluZGVyXHJcbiAgICogQHRvZG8gLSBBZGQgZmlsdGVycyBmb3IgdHJhdmVsIHBvbGljeSwgZmFyZSB0eXBlcyBhbmQgYW5jaWxsaWFyaWVzXHJcbiAgICovXHJcbiAgYXBwbHlGaWx0ZXJzKGZpbHRlcnM6IEZsaWdodEZpbHRlcnMsIHNvcnRWYWx1ZTogRmxpZ2h0U29ydFR5cGVzKTogdm9pZCB7XHJcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXJzID0gZmlsdGVycztcclxuICAgIHRoaXMuY3VycmVudFNvcnQgPSBzb3J0VmFsdWU7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnKysrIEFwcGx5aW5nIEZpbHRlcnMgdG8gZmxpZ2h0czogJywgZmlsdGVycywgJyArKysnKTtcclxuICAgIGlmICh0aGlzLmZ1bGxSZXN1bHRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLnJlc3VsdHMubmV4dChbXSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZmlsdGVyU2VsZWN0ZWRGbGlnaHRzOiAoXHJcbiAgICAgIGdyb3Vwc1RvU2hvdzogbnVtYmVyW10sXHJcbiAgICAgIGRpcmVjdGlvbjogRmxpZ2h0RGlyZWN0aW9uRW51bVxyXG4gICAgKSA9PiAoZjogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuID0gdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0XHJcbiAgICAgID8gdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0LmluYm91bmRGbGlnaHRzPy5sZW5ndGhcclxuICAgICAgICA/IChncm91cHNUb1Nob3c6IG51bWJlcltdLCBkaXJlY3Rpb246IEZsaWdodERpcmVjdGlvbkVudW0pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZUluYm91bmQgfHxcclxuICAgICAgICAgICAgICAgIGdyb3Vwc1RvU2hvdy5pbmNsdWRlcyhmbGlnaHRJdGluZXJhcnkudWlkKVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgOiAoZ3JvdXBzVG9TaG93OiBudW1iZXJbXSwgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpOiBib29sZWFuID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkR1YWxTaW5nbGVJbmJvdW5kIHx8XHJcbiAgICAgICAgICAgICAgICBncm91cHNUb1Nob3cuaW5jbHVkZXMoZmxpZ2h0SXRpbmVyYXJ5LnVpZClcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICA6IChfZ3JvdXBzVG9TaG93OiBudW1iZXJbXSwgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKF9mbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICBjb25zdCB0ZXN0ZXIgPSAoXHJcbiAgICAgIGZpbHRlcnNUb3Rlc3Q6IFJlY29yZDxudW1iZXIgfCBzdHJpbmcsIFNlbGVjdEZpbHRlcj4sXHJcbiAgICAgIHRlc3RGdW5jdGlvbjogKFxyXG4gICAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leSxcclxuICAgICAgICB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyXHJcbiAgICAgICkgPT4gYm9vbGVhblxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gT2JqZWN0LnZhbHVlcyhmaWx0ZXJzVG90ZXN0KS5maWx0ZXIoXHJcbiAgICAgICAgKGZpbHRlcjogU2VsZWN0RmlsdGVyKSA9PiBmaWx0ZXIuc2VsZWN0ZWRcclxuICAgICAgKTtcclxuICAgICAgaWYgKHNlbGVjdGVkLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gISFzZWxlY3RlZC5maW5kKChmaWx0ZXI6IFNlbGVjdEZpbHRlcikgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGVzdEZ1bmN0aW9uKGZsaWdodEl0aW5lcmFyeSwgZmlsdGVyLnZhbHVlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIChfZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHJlcGxhY2VGaWVsZHMgPSAoXHJcbiAgICAgIGZpZWxkOiBzdHJpbmcsXHJcbiAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5XHJcbiAgICApOiBzdHJpbmcgPT4ge1xyXG4gICAgICByZXR1cm4gZmllbGRcclxuICAgICAgICAucmVwbGFjZSgnT1VUQk9VTkRfREVQQVJUVVJFJywgJ291dGJvdW5kRmxpZ2h0cy4wJylcclxuICAgICAgICAucmVwbGFjZShcclxuICAgICAgICAgICdPVVRCT1VORF9BUlJJVkFMJyxcclxuICAgICAgICAgICdvdXRib3VuZEZsaWdodHMuJyArIChmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDEpXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5yZXBsYWNlKCdJTkJPVU5EX0RFUEFSVFVSRScsICdpbmJvdW5kRmxpZ2h0cy4wJylcclxuICAgICAgICAucmVwbGFjZShcclxuICAgICAgICAgICdJTkJPVU5EX0FSUklWQUwnLFxyXG4gICAgICAgICAgJ2luYm91bmRGbGlnaHRzLicgK1xyXG4gICAgICAgICAgICAoKGZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cyB8fCBbXSkubGVuZ3RoIC0gMSlcclxuICAgICAgICApO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGlzQmV0d2VlbiA9IChcclxuICAgICAgbWlubWF4OiBNaW5NYXgsXHJcbiAgICAgIGZpZWxkOiBzdHJpbmdcclxuICAgICk6ICgoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW4pID0+IHtcclxuICAgICAgcmV0dXJuIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuaGVscGVycy5mcm9tT2JqZWN0KFxyXG4gICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5LFxyXG4gICAgICAgICAgLi4ucmVwbGFjZUZpZWxkcyhmaWVsZCwgZmxpZ2h0SXRpbmVyYXJ5KS5zcGxpdCgnLicpXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gdmFsID49IG1pbm1heC5taW4gJiYgdmFsIDw9IG1pbm1heC5tYXg7XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgY29uc3QgaXNIb3VyQmV0d2VlbiA9IChcclxuICAgICAgbWlubWF4OiBNaW5NYXgsXHJcbiAgICAgIGZpZWxkOiBzdHJpbmdcclxuICAgICk6ICgoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW4pID0+IHtcclxuICAgICAgcmV0dXJuIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbCA9IG1vbWVudChcclxuICAgICAgICAgIHRoaXMuaGVscGVycy5mcm9tT2JqZWN0KFxyXG4gICAgICAgICAgICBmbGlnaHRJdGluZXJhcnksXHJcbiAgICAgICAgICAgIC4uLnJlcGxhY2VGaWVsZHMoZmllbGQsIGZsaWdodEl0aW5lcmFyeSkuc3BsaXQoJy4nKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICkuZ2V0KCdob3VyJyk7XHJcbiAgICAgICAgcmV0dXJuIHZhbCA+PSBtaW5tYXgubWluICYmIHZhbCA8PSBtaW5tYXgubWF4O1xyXG4gICAgICB9O1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBpc1RpbWVCZXR3ZWVuID0gKFxyXG4gICAgICBtaW5tYXg6IE1pbk1heCxcclxuICAgICAgZmllbGQ6IHN0cmluZ1xyXG4gICAgKTogKChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gYm9vbGVhbikgPT4ge1xyXG4gICAgICByZXR1cm4gKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsID0gbW9tZW50KFxyXG4gICAgICAgICAgdGhpcy5oZWxwZXJzLmZyb21PYmplY3QoXHJcbiAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeSxcclxuICAgICAgICAgICAgLi4ucmVwbGFjZUZpZWxkcyhmaWVsZCwgZmxpZ2h0SXRpbmVyYXJ5KS5zcGxpdCgnLicpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKS5nZXQoJ2hvdXInKTtcclxuXHJcbiAgICAgICAgLy8gbm93IGF0dGVtcHQgdG8gZ2V0IHRoZSBtaW4gLSBtYXkgbmVlZCB0byBub3JtYWxpc2UgdGhpc1xyXG4gICAgICAgIGNvbnN0IHZhbDIgPSBtb21lbnQoXHJcbiAgICAgICAgICB0aGlzLmhlbHBlcnMuZnJvbU9iamVjdChcclxuICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5LFxyXG4gICAgICAgICAgICAuLi5yZXBsYWNlRmllbGRzKGZpZWxkLCBmbGlnaHRJdGluZXJhcnkpLnNwbGl0KCcuJylcclxuICAgICAgICAgIClcclxuICAgICAgICApLmdldCgnbWludXRlJyk7XHJcblxyXG4gICAgICAgIGNvbnN0IHRvdGFsVGltZTogbnVtYmVyID0gTnVtYmVyKFxyXG4gICAgICAgICAgYCR7dmFsfS4ke3RoaXMuaGVscGVycy5ub3JtYWxpc2VNaW51dGVUb0Jhc2UxMCh2YWwyKX1gXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gdG90YWxUaW1lID49IG1pbm1heC5taW4gJiYgdG90YWxUaW1lIDw9IG1pbm1heC5tYXg7XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhhc1ZhbHVlID0gKFxyXG4gICAgICBmaWVsZDogc3RyaW5nXHJcbiAgICApOiAoKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB0b1Rlc3Q6IHN0cmluZykgPT4gYm9vbGVhbikgPT4ge1xyXG4gICAgICByZXR1cm4gKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB0b1Rlc3Q6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuaGVscGVycy5mcm9tT2JqZWN0KFxyXG4gICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5LFxyXG4gICAgICAgICAgLi4ucmVwbGFjZUZpZWxkcyhmaWVsZCwgZmxpZ2h0SXRpbmVyYXJ5KS5zcGxpdCgnLicpXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gdmFsID09PSB0b1Rlc3Q7XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGZpZWxkSGFzVmFsdWUgPSAoXHJcbiAgICAgIGZpZWxkOiBrZXlvZiBGbGlnaHRKb3VybmV5XHJcbiAgICApOiAoKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgdmFsdWU6IHN0cmluZyB8IG51bWJlcikgPT4gYm9vbGVhbikgPT4ge1xyXG4gICAgICByZXR1cm4gKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgdmFsdWU6IHN0cmluZyB8IG51bWJlcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBmbGlnaHRbZmllbGRdID09PSB2YWx1ZTtcclxuICAgICAgfTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgb3V0SXRpbmVyYXJ5VGVzdGVyczogKChcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnlcclxuICAgICkgPT4gYm9vbGVhbilbXSA9IFtdO1xyXG4gICAgY29uc3QgaW5JdGluZXJhcnlUZXN0ZXJzOiAoKFxyXG4gICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeVxyXG4gICAgKSA9PiBib29sZWFuKVtdID0gW107XHJcblxyXG4gICAgY29uc3QgaW5EdWFsSXRpbmVyYXJ5VGVzdGVyczogKChcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnlcclxuICAgICkgPT4gYm9vbGVhbilbXSA9IFtdO1xyXG5cclxuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgaXNUaW1lQmV0d2VlbihmaWx0ZXJzLmFycml2YWxUaW1lLCAnT1VUQk9VTkRfQVJSSVZBTC5kYXRlVGltZUFycml2aW5nJylcclxuICAgICk7XHJcbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzVGltZUJldHdlZW4oXHJcbiAgICAgICAgZmlsdGVycy5kZXBhcnR1cmVUaW1lLFxyXG4gICAgICAgICdPVVRCT1VORF9ERVBBUlRVUkUuZGF0ZVRpbWVEZXBhcnRpbmcnXHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICBpc0JldHdlZW4oZmlsdGVycy5yZXR1cm5EdXJhdGlvbiwgJ291dGJvdW5kVG90YWxEdXJhdGlvbicpXHJcbiAgICApO1xyXG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICBpc0JldHdlZW4oZmlsdGVycy5kdXJhdGlvbiwgJ291dGJvdW5kVG90YWxEdXJhdGlvbicpXHJcbiAgICApO1xyXG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKGlzQmV0d2VlbihmaWx0ZXJzLnByaWNlLCAndG90YWwucHJpY2UnKSk7XHJcblxyXG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoXHJcbiAgICAgICAgZmlsdGVycy5zdG9wcyxcclxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCA9PT0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLnRvdGFsU3RvcHMsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCArXHJcbiAgICAgICAgICAgICAgKGZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cyB8fCBbXSkubGVuZ3RoID09PVxyXG4gICAgICAgICAgICB2YWx1ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoXHJcbiAgICAgICAgZmlsdGVycy50b3RhbFN0b3BzLFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoID09PSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLmJhZ2dhZ2UsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBiYWdnYWdlQXJyYXk6IG51bWJlcltdID0gZmxpZ2h0SXRpbmVyYXJ5LmJhZ2dhZ2VBbGxvd2FuY2UubWFwKFxyXG4gICAgICAgICAgICAoYmFnZ2FnZUFsbG93YW5jZTogQmFnZ2FnZUFsbG93YW5jZSkgPT4gYmFnZ2FnZUFsbG93YW5jZS5xdHlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zdCBiYWdnYWdlOiBudW1iZXIgPSBiYWdnYWdlQXJyYXkubGVuZ3RoXHJcbiAgICAgICAgICAgID8gTWF0aC5taW4oLi4uYmFnZ2FnZUFycmF5KVxyXG4gICAgICAgICAgICA6IDA7XHJcbiAgICAgICAgICByZXR1cm4gYmFnZ2FnZSA9PT0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMuZGVwYXR1cmVBaXJwb3J0LFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHNbMF0/Lm9yaWdpbkFpcnBvcnQgPT09IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLmFycml2YWxBaXJwb3J0LFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0c1tcclxuICAgICAgICAgICAgICBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFcclxuICAgICAgICAgICAgXT8uZGVzdGluYXRpb25BaXJwb3J0ID09PSB2YWx1ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzQmV0d2VlbihmaWx0ZXJzLmR1cmF0aW9uLCAnb3V0Ym91bmRUb3RhbER1cmF0aW9uJylcclxuICAgICk7XHJcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChpc0JldHdlZW4oZmlsdGVycy5wcmljZSwgJ3RvdGFsLnByaWNlJykpO1xyXG4gICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5wdXNoKGlzQmV0d2VlbihmaWx0ZXJzLnByaWNlLCAndG90YWwucHJpY2UnKSk7XHJcblxyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzVGltZUJldHdlZW4oXHJcbiAgICAgICAgZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZSxcclxuICAgICAgICAnSU5CT1VORF9BUlJJVkFMLmRhdGVUaW1lQXJyaXZpbmcnXHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICBpc1RpbWVCZXR3ZWVuKFxyXG4gICAgICAgIGZpbHRlcnMucmV0dXJuQXJyaXZhbFRpbWUsXHJcbiAgICAgICAgJ09VVEJPVU5EX0FSUklWQUwuZGF0ZVRpbWVBcnJpdmluZydcclxuICAgICAgKVxyXG4gICAgKTtcclxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICBpc1RpbWVCZXR3ZWVuKFxyXG4gICAgICAgIGZpbHRlcnMucmV0dXJuRGVwYXJ0dXJlVGltZSxcclxuICAgICAgICAnSU5CT1VORF9ERVBBUlRVUkUuZGF0ZVRpbWVEZXBhcnRpbmcnXHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzQmV0d2VlbihmaWx0ZXJzLnJldHVybkR1cmF0aW9uLCAnaW5ib3VuZFRvdGFsRHVyYXRpb24nKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzQmV0d2VlbihmaWx0ZXJzLnJldHVybkR1cmF0aW9uLCAnb3V0Ym91bmRUb3RhbER1cmF0aW9uJylcclxuICAgICk7XHJcblxyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLnN0b3BzLFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cy5sZW5ndGggPT09IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLnN0b3BzLFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoID09PSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMudG90YWxTdG9wcyxcclxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoICtcclxuICAgICAgICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzIHx8IFtdKS5sZW5ndGggPT09XHJcbiAgICAgICAgICAgIHZhbHVlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoXHJcbiAgICAgICAgZmlsdGVycy5iYWdnYWdlLFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgY29uc3QgYmFnZ2FnZUFycmF5OiBudW1iZXJbXSA9IGZsaWdodEl0aW5lcmFyeS5iYWdnYWdlQWxsb3dhbmNlLm1hcChcclxuICAgICAgICAgICAgKGJhZ2dhZ2VBbGxvd2FuY2U6IEJhZ2dhZ2VBbGxvd2FuY2UpID0+IGJhZ2dhZ2VBbGxvd2FuY2UucXR5XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgY29uc3QgYmFnZ2FnZTogbnVtYmVyID0gYmFnZ2FnZUFycmF5Lmxlbmd0aFxyXG4gICAgICAgICAgICA/IE1hdGgubWluKC4uLmJhZ2dhZ2VBcnJheSlcclxuICAgICAgICAgICAgOiAwO1xyXG4gICAgICAgICAgcmV0dXJuIGJhZ2dhZ2UgPT09IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLmJhZ2dhZ2UsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBiYWdnYWdlQXJyYXk6IG51bWJlcltdID0gZmxpZ2h0SXRpbmVyYXJ5LmJhZ2dhZ2VBbGxvd2FuY2UubWFwKFxyXG4gICAgICAgICAgICAoYmFnZ2FnZUFsbG93YW5jZTogQmFnZ2FnZUFsbG93YW5jZSkgPT4gYmFnZ2FnZUFsbG93YW5jZS5xdHlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zdCBiYWdnYWdlOiBudW1iZXIgPSBiYWdnYWdlQXJyYXkubGVuZ3RoXHJcbiAgICAgICAgICAgID8gTWF0aC5taW4oLi4uYmFnZ2FnZUFycmF5KVxyXG4gICAgICAgICAgICA6IDA7XHJcbiAgICAgICAgICByZXR1cm4gYmFnZ2FnZSA9PT0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoXHJcbiAgICAgICAgZmlsdGVycy5kZXBhdHVyZVJldHVybkFpcnBvcnQsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzWzBdPy5vcmlnaW5BaXJwb3J0ID09PSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoXHJcbiAgICAgICAgZmlsdGVycy5kZXBhdHVyZVJldHVybkFpcnBvcnQsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0c1swXT8ub3JpZ2luQWlycG9ydCA9PT0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoXHJcbiAgICAgICAgZmlsdGVycy5hcnJpdmFsUmV0dXJuQWlycG9ydCxcclxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0c1tcclxuICAgICAgICAgICAgICBmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHMubGVuZ3RoIC0gMVxyXG4gICAgICAgICAgICBdPy5kZXN0aW5hdGlvbkFpcnBvcnQgPT09IHZhbHVlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLmFycml2YWxSZXR1cm5BaXJwb3J0LFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0c1tcclxuICAgICAgICAgICAgICBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFcclxuICAgICAgICAgICAgXT8uZGVzdGluYXRpb25BaXJwb3J0ID09PSB2YWx1ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgb3V0Sm91cm5leVRlc3RlcnM6ICgoXHJcbiAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leVxyXG4gICAgKSA9PiBib29sZWFuKVtdID0gW107XHJcbiAgICBvdXRKb3VybmV5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoZmlsdGVycy5jbGFzc2VzLCBmaWVsZEhhc1ZhbHVlKCdjYWJpbkNsYXNzJykpXHJcbiAgICApO1xyXG4gICAgb3V0Sm91cm5leVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKGZpbHRlcnMuYWlybGluZXMsIGZpZWxkSGFzVmFsdWUoJ21hcmtldGluZ0NhcnJpZXInKSlcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgaW5Kb3VybmV5VGVzdGVyczogKChcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5XHJcbiAgICApID0+IGJvb2xlYW4pW10gPSBbXTtcclxuICAgIGluSm91cm5leVRlc3RlcnMucHVzaCh0ZXN0ZXIoZmlsdGVycy5jbGFzc2VzLCBmaWVsZEhhc1ZhbHVlKCdjYWJpbkNsYXNzJykpKTtcclxuICAgIGluSm91cm5leVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKGZpbHRlcnMuYWlybGluZXMsIGZpZWxkSGFzVmFsdWUoJ21hcmtldGluZ0NhcnJpZXInKSlcclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgb3V0RmlsdGVySXRpbmVyYXJpZXMgPSAoXHJcbiAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LFxyXG4gICAgICBncm91cEluZGV4OiBudW1iZXJcclxuICAgICk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucmVkdWNlKFxyXG4gICAgICAgICAgKFxyXG4gICAgICAgICAgICBhY2M6IGJvb2xlYW4sXHJcbiAgICAgICAgICAgIHRlc3RlcjE6IChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gYm9vbGVhblxyXG4gICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgIGFjYyA9IGFjYyAmJiB0ZXN0ZXIxKGZsaWdodEl0aW5lcmFyeSk7XHJcbiAgICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICkgJiZcclxuICAgICAgICAoIWZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMgfHxcclxuICAgICAgICAgICEhKGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMgfHwgW10pLmZpbmQoXHJcbiAgICAgICAgICAgIChmbGlnaHRKb3VybmV5OiBGbGlnaHRKb3VybmV5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICEhb3V0Sm91cm5leVRlc3RlcnMucmVkdWNlKFxyXG4gICAgICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgICAgICBhY2M6IGJvb2xlYW4sXHJcbiAgICAgICAgICAgICAgICAgIHRlc3RlcjI6IChcclxuICAgICAgICAgICAgICAgICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXlcclxuICAgICAgICAgICAgICAgICAgKSA9PiBib29sZWFuXHJcbiAgICAgICAgICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYyAmJiB0ZXN0ZXIyKGZsaWdodEpvdXJuZXkpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHRydWVcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApKVxyXG4gICAgICApO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGluRmlsdGVySXRpbmVyYXJpZXMgPSAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpOiBib29sZWFuID0+IHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBpbkl0aW5lcmFyeVRlc3RlcnMucmVkdWNlKFxyXG4gICAgICAgICAgKFxyXG4gICAgICAgICAgICBhY2M6IGJvb2xlYW4sXHJcbiAgICAgICAgICAgIHRlc3RlcjE6IChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gYm9vbGVhblxyXG4gICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBhY2MgJiYgdGVzdGVyMShmbGlnaHRJdGluZXJhcnkpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApICYmXHJcbiAgICAgICAgKCFmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHM/Lmxlbmd0aCB8fFxyXG4gICAgICAgICAgISEoZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzIHx8IFtdKS5maW5kKFxyXG4gICAgICAgICAgICAoZmxpZ2h0Sm91cm5leTogRmxpZ2h0Sm91cm5leSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiAhIWluSm91cm5leVRlc3RlcnMucmVkdWNlKFxyXG4gICAgICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgICAgICBhY2M6IGJvb2xlYW4sXHJcbiAgICAgICAgICAgICAgICAgIHRlc3RlcjI6IChcclxuICAgICAgICAgICAgICAgICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXlcclxuICAgICAgICAgICAgICAgICAgKSA9PiBib29sZWFuXHJcbiAgICAgICAgICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYyAmJiB0ZXN0ZXIyKGZsaWdodEpvdXJuZXkpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHRydWVcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApKVxyXG4gICAgICApO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBpbkR1YWxGaWx0ZXJJdGluZXJhcmllcyA9IChcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnlcclxuICAgICk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucmVkdWNlKFxyXG4gICAgICAgICAgKFxyXG4gICAgICAgICAgICBhY2M6IGJvb2xlYW4sXHJcbiAgICAgICAgICAgIHRlc3RlcjE6IChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gYm9vbGVhblxyXG4gICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBhY2MgJiYgdGVzdGVyMShmbGlnaHRJdGluZXJhcnkpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApICYmXHJcbiAgICAgICAgKCFmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzPy5sZW5ndGggfHxcclxuICAgICAgICAgICEhKGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMgfHwgW10pLmZpbmQoXHJcbiAgICAgICAgICAgIChmbGlnaHRKb3VybmV5OiBGbGlnaHRKb3VybmV5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICEhaW5Kb3VybmV5VGVzdGVycy5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgICAgIGFjYzogYm9vbGVhbixcclxuICAgICAgICAgICAgICAgICAgdGVzdGVyMjogKFxyXG4gICAgICAgICAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leVxyXG4gICAgICAgICAgICAgICAgICApID0+IGJvb2xlYW5cclxuICAgICAgICAgICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gYWNjICYmIHRlc3RlcjIoZmxpZ2h0Sm91cm5leSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICkpXHJcbiAgICAgICk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkUnVsZVN1bW1hcnk6IFJlY29yZFJ1bGVBY3Rpb24gPVxyXG4gICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5kdWFsU2luZ2xlV2hlblNlbGVjdGVkW1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodD8uam91cm5leUhhc2hcclxuICAgICAgXSB8fCB7fTtcclxuXHJcbiAgICBjb25zdCBzZXRTZWxlY3RlZCA9IChmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSA9PiB7XHJcbiAgICAgIGZsaWdodC5zZWxlY3RlZCA9IGZsaWdodC51aWQgPT09IHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodD8udWlkO1xyXG4gICAgICBmbGlnaHQudW5hdmFpbGFibGUgPVxyXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbZmxpZ2h0LmpvdXJuZXlIYXNoXVxyXG4gICAgICAgICAgPy51bmF2YWlsYWJsZSB8fFxyXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2ZsaWdodC5qb3VybmV5SGFzaF1cclxuICAgICAgICAgID8udW5hdmFpbGFibGUgfHxcclxuICAgICAgICBzZWxlY3RlZFJ1bGVTdW1tYXJ5W2ZsaWdodC5qb3VybmV5SGFzaF0/LnVuYXZhaWxhYmxlIHx8XHJcbiAgICAgICAgZmFsc2U7XHJcbiAgICAgIGZsaWdodC51bmF2YWlsYWJsZU1lc3NhZ2UgPVxyXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbZmxpZ2h0LmpvdXJuZXlIYXNoXVxyXG4gICAgICAgICAgPy51bmF2YWlsYWJsZU1lc3NhZ2UgfHxcclxuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtmbGlnaHQuam91cm5leUhhc2hdXHJcbiAgICAgICAgICA/LnVuYXZhaWxhYmxlTWVzc2FnZSB8fFxyXG4gICAgICAgICcnO1xyXG5cclxuICAgICAgZmxpZ2h0LnJlcXVpcmVzUmVhc29uID1cclxuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2ZsaWdodC5qb3VybmV5SGFzaF1cclxuICAgICAgICAgID8ucmVxdWlyZXNSZWFzb24gfHxcclxuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtmbGlnaHQuam91cm5leUhhc2hdXHJcbiAgICAgICAgICA/LnJlcXVpcmVzUmVhc29uIHx8XHJcbiAgICAgICAgc2VsZWN0ZWRSdWxlU3VtbWFyeVtmbGlnaHQuam91cm5leUhhc2hdPy5yZXF1aXJlc1JlYXNvbiB8fFxyXG4gICAgICAgIGZhbHNlO1xyXG4gICAgICBmbGlnaHQucmVxdWlyZXNSZWFzb25NZXNzYWdlID1cclxuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2ZsaWdodC5qb3VybmV5SGFzaF1cclxuICAgICAgICAgID8ucmVxdWlyZXNSZWFzb25NZXNzYWdlIHx8XHJcbiAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbZmxpZ2h0LmpvdXJuZXlIYXNoXVxyXG4gICAgICAgICAgPy5yZXF1aXJlc1JlYXNvbk1lc3NhZ2UgfHxcclxuICAgICAgICAnJztcclxuXHJcbiAgICAgIHJldHVybiBmbGlnaHQ7XHJcbiAgICB9O1xyXG4gICAgaWYgKHRoaXMuaXNHcm91cGVkRmxpZ2h0cyh0aGlzLmZ1bGxSZXN1bHRzKSkge1xyXG4gICAgICBjb25zdCBncm91cGVkRmxpZ2h0czogR3JvdXBGbGlnaHRzID0gdGhpcy5fZ3JvdXBlZC5maW5kKFxyXG4gICAgICAgIChpdGVtOiBHcm91cEZsaWdodHMpID0+IGl0ZW0ucmVmZXJlbmNlSUQgPT09IHRoaXMuc2VsZWN0ZWRHcm91cElkXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMucmVzdWx0cy5uZXh0KFxyXG4gICAgICAgIHRoaXMuaGVscGVyc1xyXG4gICAgICAgICAgLmNsb25lPEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFtdPih0aGlzLmZ1bGxSZXN1bHRzKVxyXG4gICAgICAgICAgLmZpbHRlcigocmVzdWx0MTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiAhIXJlc3VsdDE7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLm1hcChcclxuICAgICAgICAgICAgKHJlc3VsdDI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCk6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZmlsdGVySXRpbmVyYXJpZXMgPVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0Mi5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmQgfHxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDIuZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkR1YWxTaW5nbGVPdXRib3VuZFxyXG4gICAgICAgICAgICAgICAgICA/IG91dEZpbHRlckl0aW5lcmFyaWVzXHJcbiAgICAgICAgICAgICAgICAgIDogcmVzdWx0Mi5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZUluYm91bmRcclxuICAgICAgICAgICAgICAgICAgPyBpbkR1YWxGaWx0ZXJJdGluZXJhcmllc1xyXG4gICAgICAgICAgICAgICAgICA6IGluRmlsdGVySXRpbmVyYXJpZXM7XHJcblxyXG4gICAgICAgICAgICAgIHJlc3VsdDIuY2xhc3NlcyA9IE9iamVjdC5lbnRyaWVzKHJlc3VsdDIuY2xhc3NlcykucmVkdWNlKFxyXG4gICAgICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgICAgICBhY2N1bTogUmVjb3JkPE9CVEZsaWdodENhYmluQ2xhc3MsIEZsaWdodEl0aW5lcmFyeUNsYXNzPixcclxuICAgICAgICAgICAgICAgICAgW2tleSwgdmFsdWVdOiBbT0JURmxpZ2h0Q2FiaW5DbGFzcywgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3NdXHJcbiAgICAgICAgICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmZsaWdodHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZEpvdXJuZXlzID0gdmFsdWUuZmxpZ2h0c1xyXG4gICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiAhIWZsaWdodEl0aW5lcmFyeVxyXG4gICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyU2VsZWN0ZWRGbGlnaHRzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRGbGlnaHRzPy5mbGlnaHRzW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWxwZXJzLk9CVEZsaWdodENhYmluQ2xhc3NUb0ZsaWdodENhYmluQ2xhc3MoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0gfHwgW10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Mi5kaXJlY3Rpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihmaWx0ZXJJdGluZXJhcmllcylcclxuICAgICAgICAgICAgICAgICAgICAgIC5tYXAoc2V0U2VsZWN0ZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJlZEpvdXJuZXlzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGFjY3VtW2tleV0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmbGlnaHRzOiBmaWx0ZXJlZEpvdXJuZXlzXHJcbiAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gYWNjdW07XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge30gYXMgUmVjb3JkPE9CVEZsaWdodENhYmluQ2xhc3MsIEZsaWdodEl0aW5lcmFyeUNsYXNzPlxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5maWx0ZXIoKHJlc3VsdDI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0MiAmJiBPYmplY3Qua2V5cyhyZXN1bHQyLmNsYXNzZXMpLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLnNvcnQodGhpcy5fc29ydEdyb3VwZWRSb3V0aW5lc1tzb3J0VmFsdWVdKSBhcyBGbGlnaHRRdW90ZVJlc3VsdEFycmF5XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlc3VsdHMubmV4dChcclxuICAgICAgICBPYmplY3QuZnJlZXplKFxyXG4gICAgICAgICAgdGhpcy5oZWxwZXJzXHJcbiAgICAgICAgICAgIC5jbG9uZSh0aGlzLmZ1bGxSZXN1bHRzKVxyXG4gICAgICAgICAgICAubWFwKChyZXN1bHQ0OiBGbGlnaHRBbGxRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCBuZXdKb3VybmV5czogYW55ID0gdGhpcy5oZWxwZXJzLmNsb25lKHJlc3VsdDQuam91cm5leXMpO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoZmlsdGVycy5mbGlnaHROdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIG5ld0pvdXJuZXlzID0gbmV3Sm91cm5leXMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAoZmxpZ2h0SXRlbTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3V0Ym91bmRGbGlnaHRzID0gZmxpZ2h0SXRlbS5vdXRib3VuZEZsaWdodHMuZmluZChcclxuICAgICAgICAgICAgICAgICAgICAgIChvdXRGbGlnaHQpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dEZsaWdodC5tYXJrZXRpbmdGbGlnaHROdW1iZXIgPT09IGZpbHRlcnMuZmxpZ2h0TnVtYmVyXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmJvdW5kRmxpZ2h0cyA9IGZsaWdodEl0ZW0uaW5ib3VuZEZsaWdodHMuZmluZChcclxuICAgICAgICAgICAgICAgICAgICAgIChpbkZsaWdodCkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5GbGlnaHQubWFya2V0aW5nRmxpZ2h0TnVtYmVyID09PSBmaWx0ZXJzLmZsaWdodE51bWJlclxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG91dGJvdW5kRmxpZ2h0cyB8fCBpbmJvdW5kRmxpZ2h0cykgcmV0dXJuIGZsaWdodEl0ZW07XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBuZXdKb3VybmV5cyA9IG5ld0pvdXJuZXlzLmZpbHRlcihvdXRGaWx0ZXJJdGluZXJhcmllcyk7XHJcblxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmlzUmV0dXJuKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbmV3SW5Kb3VybmV5czogYW55ID0gdGhpcy5oZWxwZXJzLmNsb25lKHJlc3VsdDQuam91cm5leXMpO1xyXG4gICAgICAgICAgICAgICAgbmV3SW5Kb3VybmV5cyA9IG5ld0luSm91cm5leXMuZmlsdGVyKGluRmlsdGVySXRpbmVyYXJpZXMpO1xyXG4gICAgICAgICAgICAgICAgbmV3Sm91cm5leXMgPSB0aGlzLm1lcmdlT3V0SW5Cb3VuZChuZXdKb3VybmV5cywgbmV3SW5Kb3VybmV5cyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIG5ld0pvdXJuZXlzLnNvcnQodGhpcy5fc29ydEl0aW5hcnlSb3V0aW5lc1tzb3J0VmFsdWVdKTtcclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ0ZsaWdodEFsbFF1b3RlUmVzdWx0JyxcclxuICAgICAgICAgICAgICAgIGpvdXJuZXlzOiA8RmxpZ2h0SXRpbmVyYXJ5W10+bmV3Sm91cm5leXNcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICkgYXMgRmxpZ2h0UXVvdGVSZXN1bHRBcnJheVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbWVyZ2VPdXRJbkJvdW5kKFxyXG4gICAgb3V0Ym91bmQ6IEZsaWdodEl0aW5lcmFyeVtdLFxyXG4gICAgaW5ib3VuZDogRmxpZ2h0SXRpbmVyYXJ5W11cclxuICApOiBGbGlnaHRJdGluZXJhcnlbXSB7XHJcbiAgICBjb25zdCBmbGlnaHRzID0gT2JqZWN0LnZhbHVlcyhcclxuICAgICAgWy4uLm91dGJvdW5kLCAuLi5pbmJvdW5kXS5yZWR1Y2UoKHJlc3VsdCwgeyB1aWQsIC4uLnJlc3QgfSkgPT4ge1xyXG4gICAgICAgIGlmICghcmVzdWx0W3VpZF0pIHtcclxuICAgICAgICAgIHJlc3VsdFt1aWRdID0ge1xyXG4gICAgICAgICAgICAuLi4ocmVzdWx0W3VpZF0gfHwge30pLFxyXG4gICAgICAgICAgICB1aWQsXHJcbiAgICAgICAgICAgIC4uLnJlc3RcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIH0sIFtdKVxyXG4gICAgKTtcclxuICAgIHJldHVybiBmbGlnaHRzO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0czogRmxpZ2h0UXVvdGVSZXN1bHRBcnJheSk6IElDaGVhcGVzdFByaWNlIHtcclxuICAgIGlmICghcmVzdWx0cy5sZW5ndGggfHwgdGhpcy5zZWFyY2hTZXJ2aWNlLmlzRmxpZ2h0c0dyb3VwZWQoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgam91cm5leXMgPSAocmVzdWx0c1swXSBhcyBGbGlnaHRBbGxRdW90ZVJlc3VsdCkuam91cm5leXM7XHJcbiAgICBpZiAoIWpvdXJuZXlzLmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGN1cnJlbmN5ID0gam91cm5leXNbMF0udG90YWwuY3VycmVuY3k7XHJcbiAgICByZXR1cm4gam91cm5leXMucmVkdWNlKFxyXG4gICAgICAoY2hlYXBlc3RQcmljZTogSUNoZWFwZXN0UHJpY2UsIHJlc3VsdDogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XHJcbiAgICAgICAgY29uc3QgcHJpY2UgPSByZXN1bHQudG90YWwucHJpY2U7XHJcbiAgICAgICAgaWYgKGNoZWFwZXN0UHJpY2UuYW1vdW50ID4gcHJpY2UpIGNoZWFwZXN0UHJpY2UuYW1vdW50ID0gcHJpY2U7XHJcbiAgICAgICAgcmV0dXJuIGNoZWFwZXN0UHJpY2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgYW1vdW50OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgY3VycmVuY3lDb2RlOiBjdXJyZW5jeSB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2VsZWN0R3JvdXBlZEZsaWdodChcclxuICAgIHNlbGVjdGVkRmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcclxuICAgIGRpcmVjdGlvbjogRmxpZ2h0RGlyZWN0aW9uRW51bSxcclxuICAgIGdyb3VwSWQ6IG51bWJlclxyXG4gICkge1xyXG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9XHJcbiAgICAgIGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XHJcbiAgICBjb25zdCBiYXNrZXQgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWU7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBiYXNrZXQgJiZcclxuICAgICAgdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2guY2hvc2VuU2VhcmNoVHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5vbmVXYXkgJiZcclxuICAgICAgZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kXHJcbiAgICApIHtcclxuICAgICAgLy8gVE9ETyBiZWNvdXNlIHBvcC11cCBpcyBub3QgcmVhZHkgSSBjb21tZW50ZWQgdGhlIGNvZGUuXHJcbiAgICAgIC8vIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oIE1vZGFsVHlwZXMuRmxpZ2h0RXh0cmFzRGlhbG9nQ29tcG9uZW50LCB7IGNlbnRlcmVkOiB0cnVlIH0sIHsgZmxpZ2h0OiBzZWxlY3RlZEZsaWdodCB9KS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgIC8vICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICB0aGlzLmJvb2tTaW5nbGVGbGlnaHQoaW50QmFza2V0LCBzZWxlY3RlZEZsaWdodCk7XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICBiYXNrZXQgJiZcclxuICAgICAgdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2guY2hvc2VuU2VhcmNoVHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm4gJiZcclxuICAgICAgKGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5PdXRib3VuZCB8fFxyXG4gICAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5EdWFsU2luZ2xlT3V0Ym91bmQpXHJcbiAgICApIHtcclxuICAgICAgaWYgKHNlbGVjdGVkRmxpZ2h0LnNlbGVjdGVkKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBJZCA9IC0xO1xyXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKHRoaXMuY3VycmVudEZpbHRlcnMsIHRoaXMuY3VycmVudFNvcnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodCA9IHNlbGVjdGVkRmxpZ2h0O1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkID0gZ3JvdXBJZDtcclxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycyh0aGlzLmN1cnJlbnRGaWx0ZXJzLCB0aGlzLmN1cnJlbnRTb3J0KTtcclxuICAgICAgICB0aGlzLl91cGRhdGVUcmF2ZWxQb2xpY2llcygpO1xyXG4gICAgICB9XHJcbiAgICAgIHNlbGVjdGVkRmxpZ2h0LnNlbGVjdGVkID0gIXNlbGVjdGVkRmxpZ2h0LnNlbGVjdGVkO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICBiYXNrZXQgJiZcclxuICAgICAgdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2guY2hvc2VuU2VhcmNoVHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm4gJiZcclxuICAgICAgZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkluYm91bmQgJiZcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0XHJcbiAgICApIHtcclxuICAgICAgdGhpcy5kb0Jvb2tpbmcoXHJcbiAgICAgICAgaW50QmFza2V0LFxyXG4gICAgICAgIHNlbGVjdGVkRmxpZ2h0LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG91dGJvdW5kRmxpZ2h0czogW1xyXG4gICAgICAgICAgICAuLi5zZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHMubWFwKFxyXG4gICAgICAgICAgICAgIChmbGlnaHQ6IEZsaWdodEpvdXJuZXksIHNlZ21lbnRJbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYWtlU2NoZW1hRmxpZ2h0cyhcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAnb3V0Ym91bmQnLFxyXG4gICAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgICBzZWdtZW50SW5kZXhcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgICAgaW5ib3VuZEZsaWdodHM6IFtcclxuICAgICAgICAgICAgLi4uc2VsZWN0ZWRGbGlnaHQuaW5ib3VuZEZsaWdodHMubWFwKFxyXG4gICAgICAgICAgICAgIChmbGlnaHQ6IEZsaWdodEpvdXJuZXksIHNlZ21lbnRJbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYWtlU2NoZW1hRmxpZ2h0cyhcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAnaW5ib3VuZCcsXHJcbiAgICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICAgIHNlZ21lbnRJbmRleFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIF0sXHJcbiAgICAgICAgICBqb3VybmV5VHlwZTogJ3JvdW5kdHJpcCdcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNlbGVjdGVkRmxpZ2h0Lm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZ1VUQyxcclxuICAgICAgICBzZWxlY3RlZEZsaWdodC5pbmJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZ1VUQ1xyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0ID0gbnVsbDtcclxuICAgICAgdGhpcy5hcHBseUZpbHRlcnModGhpcy5jdXJyZW50RmlsdGVycywgdGhpcy5jdXJyZW50U29ydCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgYmFza2V0ICYmXHJcbiAgICAgIHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuICYmXHJcbiAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5EdWFsU2luZ2xlSW5ib3VuZCAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHRcclxuICAgICkge1xyXG4gICAgICB0aGlzLmJvb2tTaW5nbGVGbGlnaHQoaW50QmFza2V0LCB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQpO1xyXG4gICAgICB0aGlzLmJvb2tTaW5nbGVGbGlnaHQoaW50QmFza2V0LCBzZWxlY3RlZEZsaWdodCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodC5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQgPSBudWxsO1xyXG4gICAgICB0aGlzLmFwcGx5RmlsdGVycyh0aGlzLmN1cnJlbnRGaWx0ZXJzLCB0aGlzLmN1cnJlbnRTb3J0KTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBfdXBkYXRlVHJhdmVsUG9saWNpZXMoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQgfHxcclxuICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuZHVhbFNpbmdsZVdoZW5TZWxlY3RlZFtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQuam91cm5leUhhc2hcclxuICAgICAgXSB8fFxyXG4gICAgICAhdGhpcy5tdWx0aSB8fFxyXG4gICAgICB0aGlzLm11bHRpLmxlbmd0aCA9PT0gMFxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IG11bHRpSW5ib3VuZHMgPSAodGhpcy5tdWx0aSB8fCBbXSkucmVkdWNlKFxyXG4gICAgICAoYWNjOiBGbGlnaHRJdGluZXJhcnlbXSwgaXRlbTogRmxpZ2h0TXVsdGkpID0+IHtcclxuICAgICAgICBpZiAoaXRlbS5vcmRlciA9PT0gMSAmJiBpdGVtLnJlc3VsdHMgJiYgaXRlbS5yZXN1bHRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGFjYyA9IGFjYy5jb25jYXQoaXRlbS5yZXN1bHRzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgfSxcclxuICAgICAgW11cclxuICAgICk7XHJcbiAgICBpZiAobXVsdGlJbmJvdW5kcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuYXBwbHlGbGlnaHRSdWxlc1xyXG4gICAgICAgIC5mZXRjaE9uZSh7XHJcbiAgICAgICAgICBzZWxlY3RlZE91dGJvdW5kRmxpZ2h0OiB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQsXHJcbiAgICAgICAgICBhdmFpbGFibGVJbmJvdW5kRmxpZ2h0czogbXVsdGlJbmJvdW5kc1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChydWxlczogUnVsZUFjdGlvblN1bW1hcnlJbnRlcmZhY2UpID0+IHtcclxuICAgICAgICAgIGlmIChydWxlcykge1xyXG4gICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeSA9IHRoaXMuaGVscGVycy5tZXJnZU9iamVjdHMoXHJcbiAgICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnksXHJcbiAgICAgICAgICAgICAgcnVsZXNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5fYXBwbHlGaWx0ZXIoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYm9va1NpbmdsZUZsaWdodChcclxuICAgIGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UsXHJcbiAgICBzZWxlY3RlZEZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcclxuICApIHtcclxuICAgIHRoaXMuZG9Cb29raW5nKFxyXG4gICAgICBpbnRCYXNrZXQsXHJcbiAgICAgIHNlbGVjdGVkRmxpZ2h0LFxyXG4gICAgICB7XHJcbiAgICAgICAgb3V0Ym91bmRGbGlnaHRzOiBzZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHMubWFwKFxyXG4gICAgICAgICAgKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgc2VnbWVudEluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFrZVNjaGVtYUZsaWdodHMoZmxpZ2h0LCAnb3V0Ym91bmQnLCAwLCBzZWdtZW50SW5kZXgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICksXHJcbiAgICAgICAgaW5ib3VuZEZsaWdodHM6IFtdLFxyXG4gICAgICAgIGpvdXJuZXlUeXBlOiAnc2luZ2xlJ1xyXG4gICAgICB9LFxyXG4gICAgICBzZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmdcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBkb0Jvb2tpbmcoXHJcbiAgICBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlLFxyXG4gICAgc2VsZWN0ZWRGbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxyXG4gICAgc2NoZW1hRGV0YWlsczogYW55LFxyXG4gICAgb3V0Ym91bmREYXRlOiBzdHJpbmcsXHJcbiAgICBpbmJvdW5kRGF0ZT86IHN0cmluZ1xyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgeyBzb3VyY2VJZCwgY28yUGVySXRlbSwgY28yUGVyUGFzc2VuZ2VyLCB0b3RhbCB9ID0gc2VsZWN0ZWRGbGlnaHQ7XHJcbiAgICBjb25zdCBib29raW5nOiBBZGRJdGVtVG9CYXNrZXRNdXRhdGlvblZhcmlhYmxlcyA9IHtcclxuICAgICAgYWR1bHRzOiB0aGlzLmFkdWx0cyxcclxuICAgICAgYmFza2V0OiBpbnRCYXNrZXQuaWQsXHJcbiAgICAgIGNoaWxkcmVuOiB0aGlzLmNoaWxkcmVuLFxyXG4gICAgICBjbzJQZXJJdGVtLFxyXG4gICAgICBjbzJQZXJQYXNzZW5nZXIsXHJcbiAgICAgIGN1cnJlbmN5OiB0b3RhbC5jdXJyZW5jeSBhcyBDdXJyZW5jeUNvZGUsXHJcbiAgICAgIGRldGFpbDogc2NoZW1hRGV0YWlscyxcclxuICAgICAgcHJpY2U6IHRvdGFsLnByaWNlLFxyXG4gICAgICBzZWFyY2hRdWVyeTogdGhpcy5yZXN1bHRRdWVyeSxcclxuICAgICAgc2VydmljZTogc291cmNlSWQudG9TdHJpbmcoKSxcclxuICAgICAgb3V0Ym91bmREYXRlXHJcbiAgICB9O1xyXG4gICAgaWYgKGluYm91bmREYXRlKSB7XHJcbiAgICAgIGJvb2tpbmcuaW5ib3VuZERhdGUgPSBpbmJvdW5kRGF0ZTtcclxuICAgIH1cclxuICAgIHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcclxuICAgICAgYm9va2luZyxcclxuICAgICAgaW50QmFza2V0LFxyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXHJcbiAgICAgIHRoaXMudHJhdmVsbGVycyxcclxuICAgICAgc2VsZWN0ZWRGbGlnaHQucmVxdWlyZXNSZWFzb25cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1ha2VTY2hlbWFGbGlnaHRzKFxyXG4gICAgc2VsZWN0ZWRGbGlnaHQ6IEZsaWdodEpvdXJuZXksXHJcbiAgICBmbGlnaHRHcm91cDogJ291dGJvdW5kJyB8ICdpbmJvdW5kJyxcclxuICAgIGdyb3VwSW5kZXg6IG51bWJlcixcclxuICAgIHNlZ21lbnRJbmRleDogbnVtYmVyXHJcbiAgKTogYW55IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLnNlbGVjdGVkRmxpZ2h0LFxyXG4gICAgICBqb3VybmV5SW5mbzoge1xyXG4gICAgICAgIGZsaWdodEdyb3VwLFxyXG4gICAgICAgIGdyb3VwSW5kZXgsXHJcbiAgICAgICAgc2VnbWVudEluZGV4XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG4gIGFzeW5jIGFkZEZsaWdodEpvdXJuZXlzVG9CYXNrZXQoXHJcbiAgICBmbGlnaHRRdW90ZTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcclxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGlmIChmbGlnaHRRdW90ZS51bmF2YWlsYWJsZSkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPVxyXG4gICAgICBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xyXG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xyXG4gICAgaWYgKGJhc2tldCkge1xyXG4gICAgICBjb25zdCB7IHNvdXJjZUlkLCBjbzJQZXJJdGVtLCBjbzJQZXJQYXNzZW5nZXIsIHRvdGFsIH0gPSBmbGlnaHRRdW90ZTtcclxuICAgICAgY29uc3Qgb3V0Ym91bmREYXRlOiBhbnkgPSBtb21lbnQoXHJcbiAgICAgICAgZmxpZ2h0UXVvdGUub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGluYm91bmREYXRlOiBhbnkgPSBmbGlnaHRRdW90ZS5pbmJvdW5kRmxpZ2h0cy5sZW5ndGhcclxuICAgICAgICA/IG1vbWVudChmbGlnaHRRdW90ZS5pbmJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZylcclxuICAgICAgICA6IG51bGw7XHJcblxyXG4gICAgICBjb25zdCB0ZXJtc0FuZENvbmRpdGlvbnMgPSB0aGlzLmdldFRlcm1zQW5kQ29uZChmbGlnaHRRdW90ZSk7XHJcbiAgICAgIGNvbnN0IHNjaGVtYURldGFpbHMgPSB7XHJcbiAgICAgICAgb3V0Ym91bmRGbGlnaHRzOiBbXHJcbiAgICAgICAgICAuLi5mbGlnaHRRdW90ZS5vdXRib3VuZEZsaWdodHMubWFwKFxyXG4gICAgICAgICAgICAoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCBfc2VnbWVudEluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4geyAuLi5mbGlnaHQgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgaW5ib3VuZEZsaWdodHM6IFtcclxuICAgICAgICAgIC4uLmZsaWdodFF1b3RlLmluYm91bmRGbGlnaHRzLm1hcChcclxuICAgICAgICAgICAgKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgX3NlZ21lbnRJbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uZmxpZ2h0IH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIClcclxuICAgICAgICBdLFxyXG4gICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zLFxyXG4gICAgICAgIGpvdXJuZXlUeXBlOiAnc2luZ2xlJ1xyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBib29raW5nOiBBZGRJdGVtVG9CYXNrZXRNdXRhdGlvblZhcmlhYmxlcyA9IHtcclxuICAgICAgICBhZHVsdHM6IHRoaXMuYWR1bHRzLFxyXG4gICAgICAgIGJhc2tldDogaW50QmFza2V0LmlkLFxyXG4gICAgICAgIGNoaWxkcmVuOiB0aGlzLmNoaWxkcmVuLFxyXG4gICAgICAgIGNvMlBlckl0ZW0sXHJcbiAgICAgICAgY28yUGVyUGFzc2VuZ2VyLFxyXG4gICAgICAgIGN1cnJlbmN5OiB0b3RhbC5jdXJyZW5jeSBhcyBDdXJyZW5jeUNvZGUsXHJcbiAgICAgICAgZGV0YWlsOiBzY2hlbWFEZXRhaWxzLFxyXG4gICAgICAgIHByaWNlOiB0b3RhbC5wcmljZSxcclxuICAgICAgICBzZWFyY2hRdWVyeTogdGhpcy5yZXN1bHRRdWVyeSxcclxuICAgICAgICBzZXJ2aWNlOiBzb3VyY2VJZC50b1N0cmluZygpLFxyXG4gICAgICAgIG91dGJvdW5kRGF0ZTogb3V0Ym91bmREYXRlLmZvcm1hdCgpXHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChpbmJvdW5kRGF0ZSkge1xyXG4gICAgICAgIGJvb2tpbmcuaW5ib3VuZERhdGUgPSBpbmJvdW5kRGF0ZS5mb3JtYXQoKTtcclxuICAgICAgICBzY2hlbWFEZXRhaWxzLmpvdXJuZXlUeXBlID0gJ3JvdW5kdHJpcCc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgICAgYm9va2luZyxcclxuICAgICAgICBpbnRCYXNrZXQsXHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMudHJhdmVsbGVycyxcclxuICAgICAgICBmbGlnaHRRdW90ZS5yZXF1aXJlc1JlYXNvblxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7IC8vIFRPRE8gc2hvdWxkIHRoaXMgdGhyb3cgYW4gZXJyb3I/XHJcbiAgfVxyXG5cclxuICBzZXRGbGlnaHREaXNwbGF5VHlwZShkaXNwbGF5VHlwZTogRmxpZ2h0RGlzcGxheVR5cGVzKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQgPSBudWxsO1xyXG4gICAgdGhpcy5jaG9vc2VuRGlzcGxheVR5cGUubmV4dChkaXNwbGF5VHlwZSk7XHJcbiAgfVxyXG5cclxuICBfYXBwbHlGaWx0ZXIoKSB7XHJcbiAgICB0aGlzLmFwcGx5RmlsdGVycyh0aGlzLmN1cnJlbnRGaWx0ZXJzLCB0aGlzLmN1cnJlbnRTb3J0KTtcclxuICB9XHJcblxyXG4gIG9wZW5GbGlnaHRGYXJlUnVsZXMocnVsZXM6IEZhcmVDb25kaXRpb25zLCBmbGlnaHRzOiBGbGlnaHRKb3VybmV5W10pOiB2b2lkIHtcclxuICAgIC8vIGZpcnN0IGNoZWNrIGlmIHRoZXJlIGFyZSBydWxlc1xyXG4gICAgY29uc3QgZG9DYWxsID0gIU9iamVjdC52YWx1ZXMocnVsZXMpLmZpbmQoXHJcbiAgICAgIChydWxlOiBGYXJlQ29uZGl0aW9uRW50cnlbXSk6IG51bWJlciA9PiBydWxlLmxlbmd0aFxyXG4gICAgKTtcclxuICAgIGlmIChkb0NhbGwpIHtcclxuICAgICAgY29uc3QgcnVsZXNGcm9tQ2FsbCA9IHRoaXMuc2VhcmNoU2VydmljZS5nZXRGbGlnaHRGYXJlUnVsZXMoXHJcbiAgICAgICAgZmxpZ2h0c1swXSBhcyBJbnB1dEZsaWdodEpvdXJuZXlcclxuICAgICAgKTtcclxuICAgICAgcnVsZXNGcm9tQ2FsbC5zdWJzY3JpYmUoXHJcbiAgICAgICAgKGRhdGEpID0+IHtcclxuICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oTW9kYWxUeXBlcy5Nb2RhbEZsaWdodEZhcmVDb21wb25lbnQsIG51bGwsIHtcclxuICAgICAgICAgICAgcnVsZXM6IGRhdGEucmVzdWx0c1swXSxcclxuICAgICAgICAgICAgZnJvbTogZmxpZ2h0c1swXS5vcmlnaW5BaXJwb3J0LFxyXG4gICAgICAgICAgICB0bzogZmxpZ2h0c1tmbGlnaHRzLmxlbmd0aCAtIDFdLmRlc3RpbmF0aW9uQWlycG9ydFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oTW9kYWxUeXBlcy5Nb2RhbEZsaWdodEZhcmVDb21wb25lbnQsIG51bGwsIHtcclxuICAgICAgICBydWxlcyxcclxuICAgICAgICBmcm9tOiBmbGlnaHRzWzBdLm9yaWdpbkFpcnBvcnQsXHJcbiAgICAgICAgdG86IGZsaWdodHNbZmxpZ2h0cy5sZW5ndGggLSAxXS5kZXN0aW5hdGlvbkFpcnBvcnRcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBUT0RPIHdhaXRpbmcgZm9yIGRhdGFcclxuICBnZXRUZXJtc0FuZENvbmQoZmxpZ2h0UXVvdGU6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1BlbmFsdGllcycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRWxpZ2liaWxpdHknLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICAsXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRGF5L3RpbWUnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1NlYXNvbmFsaXR5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdGbGlnaHTCoEFwcGxpY2F0aW9uJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdBZHZhbmNlwqBSZXNlcnZhdGlvbnMvdGlja2V0aW5nJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdNYXhpbXVtwqBTdGF5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdNaW5pbXVtwqBTdGF5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdTdG9wb3ZlcnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RyYW5zZmVycycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQ29tYmluYXRpb25zJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdCbGFja291dMKgRGF0ZXMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1N1cmNoYXJnZXMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0FjY29tcGFuaWVkwqBUcmF2ZWwnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RyYXZlbMKgUmVzdHJpY3Rpb25zJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdTYWxlc8KgUmVzdHJpY3Rpb25zJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdIaXAvbWlsZWFnZcKgRXhjZXB0aW9ucycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVGlja2V0wqBFbmRvcnNlbWVudHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0NoaWxkcmVuwqBEaXNjb3VudHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RvdXLCoENvbmR1Y3RvcsKgRGlzY291bnRzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdBZ2VudMKgRGlzY291bnRzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdBbGzCoE90aGVywqBEaXNjb3VudHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ01pc2NlbGxhbmVvdXPCoFByb3Zpc2lvbnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0ZhcmXCoEJ5wqBSdWxlJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdHcm91cHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RvdXJzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdWaXNpdMKgQW5vdGhlcsKgQ291bnRyeScsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRGVwb3NpdHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1ZvbHVudGFyecKgQ2hhbmdlcycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVm9sdW50YXJ5wqBSZWZ1bmRzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdOZWdvdGlhdGVkwqBGYXJlcycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnUnVsZcKgQXBwbGljYXRpb27CoEFuZMKgT3RoZXLCoENvbmRpdGlvbnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9XHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVNlYXJjaCgpOiBPYnNlcnZhYmxlPFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHQ+IHtcclxuICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcclxuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICAgIGNvbnN0IGZhdm91cml0ZVNlYXJjaFF1ZXJ5OiBJRmxpZ2h0U2VhcmNoQXJncyA9XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZXJjaFF1ZXJ5KHF1ZXJ5KTtcclxuXHJcbiAgICAgIGNvbnN0IHNlYXJjaEluZm8gPSB7XHJcbiAgICAgICAgbmFtZTogYCR7bW9tZW50KCl9YCxcclxuICAgICAgICBzZXJ2aWNlVHlwZTogU2VydmljZVR5cGUuRmxpZ2h0LFxyXG4gICAgICAgIHNlYXJjaEFyZ3M6IGZhdm91cml0ZVNlYXJjaFF1ZXJ5XHJcbiAgICAgIH07XHJcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZUZhdm91cml0ZVNlYXJjaChzZWFyY2hJbmZvKTtcclxuICAgIH1cclxuICB9XHJcbiAgYXN5bmMgYXBwbHlGYXZvdXJpdGUoZmF2OiBhbnkpOiBQcm9taXNlPHZvaWQ+e1xyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gZmF2Lm11bHRpRGVzdGluYXRpb24gPyBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eSA6IGZhdi5yZXR1cm5UcmlwID8gRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm4gOiBGbGlnaHRTZWFyY2hUeXBlLm9uZVdheVxyXG4gICAgaWYgKHRoaXMuY2hvc2VuU2VhcmNoVHlwZSA9PSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eSl7XHJcbiAgICAgIGNvbnN0IG11bHRpID0gYXdhaXQgUHJvbWlzZS5hbGwoZmF2Lm11bHRpRGVzdGluYXRpb24ubWFwKGFzeW5jIChhOiB7ZGF0ZTogc3RyaW5nLCBkZXN0OiBzdHJpbmcsIG9yaWc6IHN0cmluZ30pID0+IHtcclxuICAgICAgICBsZXQgZGVzdGluYXRpb246IHtkYXRlOiBtb21lbnQuTW9tZW50LCBkZXN0OiBhbnksIG9yaWc6IGFueX0gPSB7IGRhdGU6IHVuZGVmaW5lZCwgZGVzdDogdW5kZWZpbmVkLCBvcmlnOiB1bmRlZmluZWR9XHJcbiAgICAgICAgZGVzdGluYXRpb24ub3JpZyA9IGF3YWl0IHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0c0xpc3QoYS5vcmlnKS50b1Byb21pc2UoKS50aGVuKG9yaWdSZXN1bHRzID0+IHtcclxuICAgICAgICAgIHJldHVybiAob3JpZ1Jlc3VsdHMgYXMgYW55W10pLmZpbmQoYiA9PiBiLmdhdGV3YXkgPT0gYS5vcmlnKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgZGVzdGluYXRpb24uZGVzdCA9IGF3YWl0IHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0c0xpc3QoYS5kZXN0KS50b1Byb21pc2UoKS50aGVuKGRlc3RSZXN1bHRzID0+IHtcclxuICAgICAgICAgIHJldHVybiAoZGVzdFJlc3VsdHMgYXMgYW55W10pLmZpbmQoYiA9PiBiLmdhdGV3YXkgPT0gYS5kZXN0KVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uXHJcbiAgICAgIH0pKVxyXG4gICAgICB0aGlzLm11bHRpRGVzdGluYXRpb24gPSBtdWx0aSBhcyBhbnlcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0c0xpc3QoZmF2Lm9yaWdpbkFpcnBvcnQpLnN1YnNjcmliZShyZXN1bHRzID0+IHtcclxuICAgICAgICB0aGlzLmRlcGFydExvY2F0aW9uID0gKHJlc3VsdHMgYXMgYW55W10pLmZpbmQoYSA9PiBhLmdhdGV3YXkgPT0gZmF2Lm9yaWdpbkFpcnBvcnQpXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0c0xpc3QoZmF2LmRlc3RpbmF0aW9uQWlycG9ydCkuc3Vic2NyaWJlKHJlc3VsdHMgPT4ge1xyXG4gICAgICAgIHRoaXMuYXJyaXZlTG9jYXRpb24gPSAocmVzdWx0cyBhcyBhbnlbXSkuZmluZChhID0+IGEuZ2F0ZXdheSA9PSBmYXYuZGVzdGluYXRpb25BaXJwb3J0KVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgdGhpcy5jYWJpbkNsYXNzID0gZmF2Lm91dGJvdW5kQ2FiaW5DbGFzc1swXVxyXG4gICAgdGhpcy5yZXR1cm5DYWJpbkNsYXNzID0gdGhpcy5jaG9zZW5TZWFyY2hUeXBlICE9IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuID8gbnVsbCA6IGZhdi5yZXR1cm5DYWJpbkNsYXNzWzBdXHJcbiAgICB0aGlzLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA9IGZhdi5pbmNsdWRlTmVhcmJ5QWlycG9ydHNcclxuICAgIHRoaXMuYWR1bHRzID0gZmF2LnBhc3NlbmdlcnMuZmlsdGVyKChhOiBhbnkpID0+IGEudHlwZSA9PSBcIkFEVUxUXCIpLmxlbmd0aFxyXG4gICAgdGhpcy5jaGlsZHJlbiA9IGZhdi5wYXNzZW5nZXJzLmZpbHRlcigoYTogYW55KSA9PiBhLnR5cGUgPT0gXCJDSElMRFwiKS5sZW5ndGhcclxuICAgIC8vIHRoaXMucHJlZmVycmVkQ2FycmllcnMgPSBmYXYucHJlZmVycmVkQ2FycmllcnMubWFwKChhOiBhbnkpID0+IHtcclxuICAgICAgXHJcbiAgICAvLyB9KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTZXJjaFF1ZXJ5KFxyXG4gICAgcXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzXHJcbiAgKTogSUZsaWdodFNlYXJjaEFyZ3Mge1xyXG4gICAgY29uc3Qgc2VhcmNoUXVlcnk6IElGbGlnaHRTZWFyY2hBcmdzID0gcXVlcnk7XHJcbiAgICBzd2l0Y2ggKHRoaXMuY2hvc2VuU2VhcmNoVHlwZSkge1xyXG4gICAgICBjYXNlIEZsaWdodFNlYXJjaFR5cGUubXVsdGlDaXR5OlxyXG4gICAgICAgIHNlYXJjaFF1ZXJ5Lm11bHRpRGVzdGluYXRpb25EZXRhaWwgPSB0aGlzLm11bHRpRGVzdGluYXRpb247XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm46XHJcbiAgICAgIGNhc2UgRmxpZ2h0U2VhcmNoVHlwZS5vbmVXYXk6XHJcbiAgICAgICAgc2VhcmNoUXVlcnkuZGVwYXJ0TG9jYXRpb25EZXRhaWwgPSB0aGlzLmRlcGFydExvY2F0aW9uO1xyXG4gICAgICAgIHNlYXJjaFF1ZXJ5LmFycml2ZUxvY2F0aW9uRGV0YWlsID0gdGhpcy5hcnJpdmVMb2NhdGlvbjtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc2VhcmNoUXVlcnk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|