@sabstravtech/obtservices 0.2.2412101445 → 0.2.2412201510
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/base/lib/vendor/classes/flight-enterprise-search.d.ts +2 -2
- package/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +1 -1
- package/bundles/sabstravtech-obtservices-base.umd.js +52 -27
- package/bundles/sabstravtech-obtservices-base.umd.js.map +1 -1
- package/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +49 -27
- package/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +1 -1
- package/fesm2015/sabstravtech-obtservices-base.js +48 -26
- package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
- package/package.json +1 -1
|
@@ -1661,10 +1661,16 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1661
1661
|
});
|
|
1662
1662
|
}
|
|
1663
1663
|
}
|
|
1664
|
-
getTotalBaggage(fare) {
|
|
1664
|
+
getTotalBaggage(fare, isOutbound = true) {
|
|
1665
1665
|
const checkBaggages = this.getBaggageAllowance(fare);
|
|
1666
|
-
const
|
|
1667
|
-
|
|
1666
|
+
const checkBaggageAmountsOut = checkBaggages === null || checkBaggages === void 0 ? void 0 : checkBaggages.filter(a => (a === null || a === void 0 ? void 0 : a.type) === 'CheckIn' && !a.isIn).map(a => a === null || a === void 0 ? void 0 : a.qty);
|
|
1667
|
+
const checkBaggageAmountsIn = checkBaggages === null || checkBaggages === void 0 ? void 0 : checkBaggages.filter(a => (a === null || a === void 0 ? void 0 : a.type) === 'CheckIn' && a.isIn).map(a => a === null || a === void 0 ? void 0 : a.qty);
|
|
1668
|
+
if (isOutbound) {
|
|
1669
|
+
return checkBaggageAmountsOut.length ? Math.min(...checkBaggageAmountsOut) : 0;
|
|
1670
|
+
}
|
|
1671
|
+
else {
|
|
1672
|
+
return checkBaggageAmountsIn.length ? Math.min(...checkBaggageAmountsIn) : 0;
|
|
1673
|
+
}
|
|
1668
1674
|
}
|
|
1669
1675
|
getHandBaggage(fare) {
|
|
1670
1676
|
const checkBaggages = this.getBaggageAllowance(fare);
|
|
@@ -2125,6 +2131,7 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
2125
2131
|
return __awaiter(this, void 0, void 0, function* () {
|
|
2126
2132
|
const intBasket = yield this.basketService.getDefaultBasket();
|
|
2127
2133
|
const basket = intBasket === null || intBasket === void 0 ? void 0 : intBasket.subject.value;
|
|
2134
|
+
const isTFX = selectedFlight.source === ServiceProvider.Travelfusion;
|
|
2128
2135
|
if ((basket && this.originalUserSearch.chosenSearchType === FlightSearchType.oneWay) ||
|
|
2129
2136
|
(this.originalUserSearch.chosenSearchType === FlightSearchType.multiCity &&
|
|
2130
2137
|
direction === FlightDirectionEnum.Outbound)) {
|
|
@@ -2132,7 +2139,7 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
2132
2139
|
if (isLightning && this.checkSeatmapExtrasEnabled(selectedFlight)) {
|
|
2133
2140
|
const detailExtras = yield this.getFlightDetailExtras(selectedFlight, direction);
|
|
2134
2141
|
if (detailExtras === null || detailExtras === void 0 ? void 0 : detailExtras.valid) {
|
|
2135
|
-
selectedFlight.outboundFlights = this.applyExtraDetailsToFlights(selectedFlight.outboundFlights, detailExtras);
|
|
2142
|
+
selectedFlight.outboundFlights = this.applyExtraDetailsToFlights(selectedFlight.outboundFlights, detailExtras, isTFX);
|
|
2136
2143
|
yield this.bookSingleFlight(intBasket, selectedFlight);
|
|
2137
2144
|
}
|
|
2138
2145
|
}
|
|
@@ -2168,8 +2175,8 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
2168
2175
|
if (isLightning && this.checkSeatmapExtrasEnabled(selectedFlight)) {
|
|
2169
2176
|
const detailExtras = yield this.getFlightDetailExtras(selectedFlight, direction);
|
|
2170
2177
|
if (detailExtras === null || detailExtras === void 0 ? void 0 : detailExtras.valid) {
|
|
2171
|
-
selectedFlight.outboundFlights = this.applyExtraDetailsToFlights(selectedFlight.outboundFlights, detailExtras);
|
|
2172
|
-
selectedFlight.inboundFlights = this.applyExtraDetailsToFlights(selectedFlight.inboundFlights, detailExtras);
|
|
2178
|
+
selectedFlight.outboundFlights = this.applyExtraDetailsToFlights(selectedFlight.outboundFlights, detailExtras, isTFX);
|
|
2179
|
+
selectedFlight.inboundFlights = this.applyExtraDetailsToFlights(selectedFlight.inboundFlights, detailExtras, isTFX);
|
|
2173
2180
|
this.outboundCabinClass = ''; // reset outboundCabinClass
|
|
2174
2181
|
const schemaDetails = this.createSchemaDetails(selectedFlight, FlightJourneyType.Roundtrip);
|
|
2175
2182
|
yield this.doBooking(intBasket, selectedFlight, schemaDetails, selectedFlight.outboundFlights[0].dateTimeDepartingUTC, selectedFlight.inboundFlights[0].dateTimeDepartingUTC);
|
|
@@ -2196,14 +2203,14 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
2196
2203
|
if (isLightning && this.checkSeatmapExtrasEnabled(selectedFlight)) {
|
|
2197
2204
|
const detailExtrasOut = yield this.getFlightDetailExtras(selectedFlight, direction);
|
|
2198
2205
|
if (detailExtrasOut === null || detailExtrasOut === void 0 ? void 0 : detailExtrasOut.valid) {
|
|
2199
|
-
selectedFlight.outboundFlights = this.applyExtraDetailsToFlights(selectedFlight.outboundFlights, detailExtrasOut);
|
|
2200
|
-
selectedFlight.inboundFlights = this.applyExtraDetailsToFlights(selectedFlight.inboundFlights, detailExtrasOut);
|
|
2206
|
+
selectedFlight.outboundFlights = this.applyExtraDetailsToFlights(selectedFlight.outboundFlights, detailExtrasOut, isTFX);
|
|
2207
|
+
selectedFlight.inboundFlights = this.applyExtraDetailsToFlights(selectedFlight.inboundFlights, detailExtrasOut, isTFX);
|
|
2201
2208
|
yield this.bookSingleFlight(intBasket, selectedFlight, false, direction === FlightDirectionEnum.DualSingleInbound);
|
|
2202
2209
|
}
|
|
2203
2210
|
const detailExtrasIn = yield this.getFlightDetailExtras(selectedFlight, direction);
|
|
2204
2211
|
if (detailExtrasIn === null || detailExtrasIn === void 0 ? void 0 : detailExtrasIn.valid) {
|
|
2205
|
-
selectedFlight.outboundFlights = this.applyExtraDetailsToFlights(selectedFlight.outboundFlights, detailExtrasIn);
|
|
2206
|
-
selectedFlight.inboundFlights = this.applyExtraDetailsToFlights(selectedFlight.inboundFlights, detailExtrasIn);
|
|
2212
|
+
selectedFlight.outboundFlights = this.applyExtraDetailsToFlights(selectedFlight.outboundFlights, detailExtrasIn, isTFX);
|
|
2213
|
+
selectedFlight.inboundFlights = this.applyExtraDetailsToFlights(selectedFlight.inboundFlights, detailExtrasIn, isTFX);
|
|
2207
2214
|
yield this.bookSingleFlight(intBasket, this.selectedGroupFlight, false, direction !== FlightDirectionEnum.DualSingleInbound);
|
|
2208
2215
|
}
|
|
2209
2216
|
this.selectedGroupFlight.selected = false;
|
|
@@ -2234,10 +2241,11 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
2234
2241
|
checkForSeatMap(flight, intBasket, dualInbound, gmt = false) {
|
|
2235
2242
|
return __awaiter(this, void 0, void 0, function* () {
|
|
2236
2243
|
if (this.checkSeatmapExtrasEnabled(flight)) {
|
|
2244
|
+
const isTFX = flight.source === ServiceProvider.Travelfusion;
|
|
2237
2245
|
const detailExtras = yield this.getFlightDetailExtras(flight, FlightDirectionEnum.DualSingleOutbound, gmt);
|
|
2238
2246
|
if (detailExtras === null || detailExtras === void 0 ? void 0 : detailExtras.valid) {
|
|
2239
|
-
flight.outboundFlights = this.applyExtraDetailsToFlights(flight.outboundFlights, detailExtras);
|
|
2240
|
-
flight.inboundFlights = this.applyExtraDetailsToFlights(flight.inboundFlights, detailExtras);
|
|
2247
|
+
flight.outboundFlights = this.applyExtraDetailsToFlights(flight.outboundFlights, detailExtras, isTFX);
|
|
2248
|
+
flight.inboundFlights = this.applyExtraDetailsToFlights(flight.inboundFlights, detailExtras, isTFX);
|
|
2241
2249
|
yield this.addFlightJourneysToBasket(flight, intBasket, false, dualInbound, gmt);
|
|
2242
2250
|
return detailExtras.isBooking;
|
|
2243
2251
|
}
|
|
@@ -2289,7 +2297,7 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
2289
2297
|
}
|
|
2290
2298
|
return false;
|
|
2291
2299
|
}
|
|
2292
|
-
applyExtraDetailsToFlights(flights, detailExtras) {
|
|
2300
|
+
applyExtraDetailsToFlights(flights, detailExtras, isTFX = false) {
|
|
2293
2301
|
return flights.map(flight => {
|
|
2294
2302
|
const id = flight.id;
|
|
2295
2303
|
const seat = detailExtras.seats[id];
|
|
@@ -2302,7 +2310,8 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
2302
2310
|
flight.additional.loyalty = loyalty;
|
|
2303
2311
|
}
|
|
2304
2312
|
const additionalDetails = detailExtras.additionalDetails[id];
|
|
2305
|
-
|
|
2313
|
+
// here it's only TFX
|
|
2314
|
+
if (additionalDetails && isTFX) {
|
|
2306
2315
|
const additionalDetailsKeys = Object.keys(additionalDetails);
|
|
2307
2316
|
if (additionalDetailsKeys.length) {
|
|
2308
2317
|
additionalDetailsKeys.forEach(key => {
|
|
@@ -2539,21 +2548,34 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
2539
2548
|
segmentIndex
|
|
2540
2549
|
} });
|
|
2541
2550
|
}
|
|
2542
|
-
addBagsAllowanceToFlightsSchema(selectedFlight, flightQuote) {
|
|
2543
|
-
var _a
|
|
2551
|
+
addBagsAllowanceToFlightsSchema(selectedFlight, flightQuote, isIn = false) {
|
|
2552
|
+
var _a;
|
|
2544
2553
|
selectedFlight.additional['baggageAllowanceAmount'] = 0;
|
|
2545
|
-
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2554
|
+
let holdBagAmount = [0];
|
|
2555
|
+
if (!isIn) {
|
|
2556
|
+
holdBagAmount = flightQuote.outboundFlights.reduce((acc, flight) => {
|
|
2557
|
+
const bags = flight.additional.baggageAllowance.filter((bag) => bag.type === 'CheckIn');
|
|
2558
|
+
const result = bags.map((bag) => bag.qty);
|
|
2559
|
+
if (result.length) {
|
|
2560
|
+
acc.push(Math.min(...result));
|
|
2561
|
+
}
|
|
2562
|
+
return acc;
|
|
2563
|
+
}, []);
|
|
2564
|
+
}
|
|
2565
|
+
else {
|
|
2566
|
+
holdBagAmount = flightQuote.inboundFlights.reduce((acc, flight) => {
|
|
2567
|
+
const bags = flight.additional.baggageAllowance.filter((bag) => bag.type === 'CheckIn');
|
|
2568
|
+
const result = bags.map((bag) => bag.qty);
|
|
2569
|
+
if (result.length) {
|
|
2570
|
+
acc.push(Math.min(...result));
|
|
2549
2571
|
}
|
|
2550
|
-
return
|
|
2572
|
+
return acc;
|
|
2551
2573
|
}, []);
|
|
2552
|
-
selectedFlight.additional['baggageAllowanceAmount'] = holdBagAmount.length
|
|
2553
|
-
? Math.min(...holdBagAmount)
|
|
2554
|
-
: 0;
|
|
2555
2574
|
}
|
|
2556
|
-
selectedFlight.additional['
|
|
2575
|
+
selectedFlight.additional['baggageAllowanceAmount'] = holdBagAmount.length
|
|
2576
|
+
? Math.min(...holdBagAmount)
|
|
2577
|
+
: 0;
|
|
2578
|
+
selectedFlight.additional['isHandBaggage'] = !!((_a = flightQuote === null || flightQuote === void 0 ? void 0 : flightQuote.baggageAllowance) === null || _a === void 0 ? void 0 : _a.filter((bag) => bag.type === BaggageType.HandCarry));
|
|
2557
2579
|
return selectedFlight;
|
|
2558
2580
|
}
|
|
2559
2581
|
addFlightJourneysToBasket(flightQuote, intBasket, ignoreInvoke = false, dualInbound = false, gmt = false) {
|
|
@@ -2624,7 +2646,7 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
2624
2646
|
delete flight.additional.spanishResidencyAirport;
|
|
2625
2647
|
delete flight.additional.spanishResidencyGroup;
|
|
2626
2648
|
}
|
|
2627
|
-
return this.addBagsAllowanceToFlightsSchema(flight, flightQuote);
|
|
2649
|
+
return this.addBagsAllowanceToFlightsSchema(flight, flightQuote, true);
|
|
2628
2650
|
})
|
|
2629
2651
|
],
|
|
2630
2652
|
termsAndCond: termsAndConditions,
|
|
@@ -3276,4 +3298,4 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
3276
3298
|
}
|
|
3277
3299
|
FlightEnterpriseSearch.STORAGE_SESSION_PARAMS = 'search_flight';
|
|
3278
3300
|
FlightEnterpriseSearch.STORAGE_SESSION_RESULTS = 'results_flight';
|
|
3279
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxpZ2h0LWVudGVycHJpc2Utc2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2J0c2VydmljZXMvYmFzZS9zcmMvbGliL3ZlbmRvci9jbGFzc2VzL2ZsaWdodC1lbnRlcnByaXNlLXNlYXJjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBSXpELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUk3RSxPQUFPLEVBUUwsUUFBUSxFQUNSLGdCQUFnQixFQUloQixtQkFBbUIsRUFTbkIsV0FBVyxFQUlYLFlBQVksRUFFWixXQUFXLEVBS1osTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQ0wsNEJBQTRCLEVBRTVCLG1CQUFtQixFQVVuQixhQUFhLEVBTWIsY0FBYyxFQUtkLGVBQWUsRUFDZixjQUFjLEVBQ2YsTUFBTSxnQkFBZ0IsQ0FBQztBQVF4QixPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUduQixNQUFNLHlDQUF5QyxDQUFDO0FBRWpELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBTTdELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUt2RCxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdC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SUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsS0FBSyxTQUFTLENBQUMsQ0FBQztJQUN4RixDQUFDOztBQW5wSWUsNkNBQXNCLEdBQUcsZUFBZSxDQUFDO0FBQ3pDLDhDQUF1QixHQUFHLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgQmFzZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuL2Jhc2UtZW50ZXJwcmlzZSc7XG5pbXBvcnQgeyBCYXNlU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFzZUhlbHBlclJvdXRpbmVzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IFRyYXZlbGxlciB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZm9ya0pvaW4sICBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBWYWx1ZURpc3BsYXkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3ZhbHVlLWRpc3BsYXknO1xuaW1wb3J0IHsgRmxpZ2h0RmlsdGVycyB9IGZyb20gJy4uL2ludGVyZmFjZXMvZmxpZ2h0LWZpbHRlcnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFNlbGVjdEZpbHRlciB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2VsZWN0LWZpbHRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgQWRkSXRlbVRvQmFza2V0TXV0YXRpb25WYXJpYWJsZXMsXG4gIEJhZ2dhZ2VBbGxvd2FuY2UsXG4gIEJhc2tldEl0ZW0sXG4gIEN1cnJlbmN5Q29kZSxcbiAgRGVzdGluYXRpb25FbnRyeSxcbiAgRmFyZUNvbmRpdGlvbkVudHJ5LFxuICBGYXJlQ29uZGl0aW9ucyxcbiAgRmFyZVR5cGUsXG4gIEZsaWdodENhYmluQ2xhc3MsXG4gIEZsaWdodEl0aW5lcmFyeSxcbiAgRmxpZ2h0Sm91cm5leSxcbiAgRmxpZ2h0UGFzc2VuZ2VyT2JqZWN0LFxuICBGbGlnaHRQYXNzZW5nZXJUeXBlLFxuICBGbGlnaHRTZWF0TWFwU2VhdHMsXG4gIEdyb3VwZWRGaWVsZHNGcmFnbWVudCxcbiAgR3JvdXBGbGlnaHRzLFxuICBJbnB1dEZsaWdodEpvdXJuZXksXG4gIEl0aW5lcmFyeVN1bW1hcnksXG4gIE1hdGNoaW5nRmxpZ2h0cyxcbiAgU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzLFxuICBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyxcbiAgU2VydmljZVR5cGUsXG4gIEZsaWdodEFuY2lsbGFyeU9wdGlvbnMsXG4gIEZsaWdodEV4dHJhc09wdGlvbnMsXG4gIEZsaWdodE9wdGlvbnMsXG4gIExvY2F0aW9uVHlwZSxcbiAgUmFpbFN0YXRpb24sXG4gIEJhZ2dhZ2VUeXBlLFxuICBGbGlnaHRKb3VybmV5RXhjaGFuZ2UsXG4gIEZsaWdodEV4Y2hhbmdlRGV0YWlscyxcbiAgRmxpZ2h0RmFyZVJ1bGVzUmVzcG9uc2UsXG4gIEZsaWdodFVwc2VsbE9mZmVyc1Jlc3VsdFxufSBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcbmltcG9ydCB7XG4gIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMsXG4gIEZsaWdodEFsbFF1b3RlUmVzdWx0LFxuICBGbGlnaHREaXJlY3Rpb25FbnVtLFxuICBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXG4gIEZsaWdodEdyb3VwcyxcbiAgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MsXG4gIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxuICBGbGlnaHRNdWx0aSxcbiAgRmxpZ2h0UXVvdGVSZXN1bHRBcnJheSxcbiAgR3JlZW5lckNob2ljZSxcbiAgR3JvdXBlZEZsaWdodHMsXG4gIExvY2F0aW9uRGV0YWlscyxcbiAgTG9jYXRpb25UeXBlcyxcbiAgTWluTWF4LFxuICBOZ2JEYXRlU3RydWN0LFxuICBPQlRBaXJsaW5lc0RldGFpbHMsXG4gIE9CVEFpcnBvcnREZXRhaWxzLFxuICBPQlRGbGlnaHRDYWJpbkNsYXNzLFxuICBQcmVmZXJyZWRGbGFncyxcbiAgUmVjZW50U2VhcmNoLFxuICBSZWNvcmRSdWxlQWN0aW9uLFxuICBSdWxlQWN0aW9uU3VtbWFyeUludGVyZmFjZSxcbiAgU2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdCxcbiAgU2VydmljZVByb3ZpZGVyLFxuICBUcmF2ZWxQb2xpY2llc1xufSBmcm9tICcuLi90eXBlcy90eXBlcyc7XG5pbXBvcnQgeyBCYXNlRmxpZ2h0UXVvdGVGZXRjaGVyLCBGbGlnaHRRdW90ZUZldGNoZXJUeXBlIH0gZnJvbSAnLi4vZmV0Y2hlcnMvZmxpZ2h0LXF1b3RlLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgVXBkYXRlRmxpZ2h0U2VhdE1hcFR5cGUsXG4gIEJhc2VVcGRhdGVGbGlnaHRTZWF0TWFwVXBkYXRlclxufSBmcm9tICcuLi91cGRhdGVycy91cGRhdGUtZmxpZ2h0LXNlYXQtbWFwLnVwZGF0ZXInO1xuaW1wb3J0IHsgRnVsbFVzZXJEZXRhaWxzLCBVc2VyU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXVzZXIuc2VydmljZSc7XG5pbXBvcnQgeyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXNlYXJjaC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIERFRkFVTFRfRkxJR0hUX0ZJTFRFUlMsXG4gIEZsaWdodERpc3BsYXlUeXBlcyxcbiAgRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZSxcbiAgRmxpZ2h0VGVtcFBhcmFtc1xufSBmcm9tICcuLi9pbnRlcmZhY2VzL0lmbGlnaHQtZW50ZXJwcmlzZS1zZWFyY2gnO1xuaW1wb3J0IHsgSUNoZWFwZXN0UHJpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NoZWFwZXN0LXByaWNlJztcbmltcG9ydCB7IEZsaWdodFNlYXJjaFR5cGUgfSBmcm9tICcuL2ZsaWdodC1zZWFyY2gtdHlwZS5lbnVtJztcbmltcG9ydCB7IElNdWx0aURlc3RpbmF0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mbGlnaHQtbXVsdGktZGVzdGluYXRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxuICBJbnRlcm5hbEJhc2tldEludGVyZmFjZVxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0llbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJGYXZvcnVyaXRlIH0gZnJvbSAnLi91c2VyLWZhdm91cml0ZS5lbnVtJztcbmltcG9ydCB7XG4gIEFwcGx5Sml0RmxpZ2h0UnVsZXNUeXBlLFxuICBCYXNlQXBwbHlKaXRGbGlnaHRSdWxlc0ZldGNoZXJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvYXBwbHktaml0LWZsaWdodC1ydWxlcyc7XG5pbXBvcnQgeyBtYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCYXNlTW9kYWxPcGVuZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kYWwtb3BlbmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTW9kYWxUeXBlcyB9IGZyb20gJy4vbW9kYWwtdHlwZXMuZW51bSc7XG5pbXBvcnQgeyBJRmxpZ2h0U2VhcmNoQXJncyB9IGZyb20gJy4uL2ludGVyZmFjZXMvZmxpZ2h0LXNlYXJjaC1hcmdzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBHcmVlbmVyQ2hvaWNlSW1wbCB9IGZyb20gJy4vZ3JlZW5lcmNob2lzZSc7XG5pbXBvcnQgeyBBaXJUb0V1cm8gfSBmcm9tICcuLi9kYXRhL2Fpci10by1ldXJvJztcbmltcG9ydCB7IEFJUlRvUmFpbFVLIH0gZnJvbSAnLi4vZGF0YS9haXItdG8tcmFpbC11ayc7XG5pbXBvcnQgeyBFcm1UcmF2ZWxsZXJUeXBlIH0gZnJvbSAnLi9lcm0tdHJhdmVsbGVyLXR5cGUuZW51bSc7XG5pbXBvcnQge1xuICBCYXNlR2V0RmxpZ2h0RXh0cmFzT3B0aW9uc0ZldGNoZXIsXG4gIEdldEZsaWdodEV4dHJhc09wdGlvbnNUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1mbGlnaHQtZXh0cmFzLW9wdGlvbnMuZmV0Y2hlcic7XG5pbXBvcnQgeyBJQ2hlYXBlc3RQcmljZU9iamVjdCwgSUNoZWFwZXN0UHJpY2VEZXRhaWxzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jaGVhcGVzdC1wcmljZS1vYmplY3QnO1xuaW1wb3J0IHsgRmxpZ2h0Sm91cm5leVR5cGUgfSBmcm9tICcuL2ZsaWdodC1qb3VybmV5LXR5cGUtdHlwZS5lbnVtJztcblxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEZsaWdodEFtb3VudCB9IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xuaW1wb3J0IHsgVHJhaW5saW5lU2VhcmNoQ29uZmlnVHlwZXMgfSBmcm9tICcuL3JhaWwtZW50ZXJwcmlzZS1zZWFyY2gnO1xuaW1wb3J0IHtcbiAgQmFzZUZsaWdodFNlYXJjaEV4Y2hhbmdlRmV0Y2hlcixcbiAgRmxpZ2h0U2VhcmNoRXhjaGFuZ2VGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtZmxpZ2h0LXNlYXJjaC1leGNoYW5nZS5mZXRjaGVyJztcbmltcG9ydCB7XG4gIEJhc2VGbGlnaHRFeGNoYW5nZURldGFpbHNGZXRjaGVyLFxuICBGbGlnaHRFeGNoYW5nZURldGFpbHNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtZmxpZ2h0LWV4Y2hhbmdlLWRldGFpbHMuZmV0Y2hlcic7XG5pbXBvcnQgeyBJRmFyZVJ1bGVzS2V5IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mYXJlLXJ1bGVzLWtleSc7XG5pbXBvcnQgeyBCYXNrZXREZXRhaWxzIH0gZnJvbSAnLi4vc2VydmljZXMvZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XG5cbmNvbnN0IE9VVEJPVU5EID0gMDtcbmV4cG9ydCBpbnRlcmZhY2UgQWxsb3dlZENsYXNzIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGbGlnaHRPcGVyYXRvciB7XG4gIGNvZGU6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERldGFpbEV4dHJhcyB7XG4gIGFkZGl0aW9uYWxEZXRhaWxzOiB7XG4gICAgW2tleTogc3RyaW5nXTogQWRkaXRpb25hbDtcbiAgfTtcbiAgc2VhdHM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBGbGlnaHRTZWF0TWFwU2VhdHM7XG4gIH07XG5cbiAgbG95YWx0eToge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZ1tdO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkZGl0aW9uYWwge1xuICBhZHZhbmNlZEFuY2lsbGFyeU9wdGlvbnM6IEZsaWdodEFuY2lsbGFyeU9wdGlvbnNbXTtcbiAgYmFnZ2FnZUFsbG93YW5jZTogYW55O1xuICBmbGlnaHRFeHRyYXM6IGFueTtcbiAgcmVkdWNlZE1vYmlsbGl0eUFzc2lzdGFuY2U6IGFueTtcbiAgbWVhbDogYW55O1xufVxuZXhwb3J0IGludGVyZmFjZSBDb21iaW5lZEZsaWdodCB7XG4gIGZsaWdodHM6IEZsaWdodEl0aW5lcmFyeVtdIHwgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNbXTtcbiAgZmxpZ2h0SWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGVudW0gQWRkaXRpb25hbERldGFpbHMge1xuICBhZHZhbmNlZEFuY2lsbGFyeU9wdGlvbnMgPSAnYWR2YW5jZWRBbmNpbGxhcnlPcHRpb25zJyxcbiAgYmFnZ2FnZUFsbG93YW5jZSA9ICdiYWdnYWdlQWxsb3dhbmNlJyxcbiAgZmxpZ2h0RXh0cmFzID0gJ2ZsaWdodEV4dHJhcycsXG4gIHJlZHVjZWRNb2JpbGxpdHlBc3Npc3RhbmNlID0gJ3JlZHVjZWRNb2JpbGxpdHlBc3Npc3RhbmNlJyxcbiAgbWVhbCA9ICdtZWFsJ1xufVxuXG5leHBvcnQgdHlwZSBBbGxvd2VkQ2xhc3NlcyA9IEFsbG93ZWRDbGFzc1tdO1xuXG5leHBvcnQgZW51bSBUaW1lV2luZG93IHtcbiAgQW55dGltZSA9ICdBbnl0aW1lJyxcbiAgRGVwYXJ0ID0gJ0RlcGFydCBCeScsXG4gIEFycml2ZSA9ICdBcnJpdmUgQnknXG59XG5cbmV4cG9ydCBlbnVtIEZsaWdodFNvcnRUeXBlcyB7XG4gIENoZWFwZXN0ID0gJ0NoZWFwZXN0JyxcbiAgTW9zdEV4cGVuc2l2ZSA9ICdNb3N0IEV4cGVuc2l2ZScsXG4gIEZhc3Rlc3QgPSAnRmFzdGVzdCcsXG4gIFByZWZlcnJlZCA9ICdQcmVmZXJyZWQnLFxuICBMb3dlc3RFbWlzc2lvbnMgPSAnTG93ZXN0IEVtaXNzaW9ucycsXG4gIERlcGFydHVyZVRpbWUgPSAnRGVwYXJ0dXJlIFRpbWUnLFxuICBBcnJpdmFsVGltZSA9ICdBcnJpdmFsIFRpbWUnLFxuICBRdWlja2VzdCA9ICdRdWlja2VzdCcsXG4gIE1vc3REaXJlY3QgPSAnTW9zdCBEaXJlY3QnLFxuICBHcmVlbmVyQ2hvaWNlID0gJ0dyZWVuZXIgQ2hvaWNlJyxcbiAgU0FGID0gJ0hpZ2hlc3QgU0FGIFJhdGluZydcbn1cblxuZXhwb3J0IGNvbnN0IFNBRlJhdGluZ0FycmF5ID0gW1xuICB7XG4gICAgcmF0aW5nOiAnQUFBJyxcbiAgICBzY29yZTogMFxuICB9LFxuICB7XG4gICAgcmF0aW5nOiAnQUEnLFxuICAgIHNjb3JlOiAxXG4gIH0sXG4gIHtcbiAgICByYXRpbmc6ICdBJyxcbiAgICBzY29yZTogMlxuICB9LFxuICB7XG4gICAgcmF0aW5nOiAnQicsXG4gICAgc2NvcmU6IDNcbiAgfSxcbiAge1xuICAgIHJhdGluZzogJ0MnLFxuICAgIHNjb3JlOiA0XG4gIH0sXG4gIHtcbiAgICByYXRpbmc6ICdEJyxcbiAgICBzY29yZTogNVxuICB9LFxuICB7XG4gICAgcmF0aW5nOiAnRScsXG4gICAgc2NvcmU6IDZcbiAgfSxcbiAge1xuICAgIHJhdGluZzogJ04vQScsXG4gICAgc2NvcmU6IDdcbiAgfVxuXTtcblxuaW50ZXJmYWNlIEZsaWdodFNlc3Npb25UeXBlIHtcbiAgcmVzdWx0czogRmxpZ2h0UXVvdGVSZXN1bHRBcnJheTtcbiAgZ3JvdXBlZDogR3JvdXBlZEZsaWdodHM7XG4gIHF1ZXJ5OiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcztcbn1cblxuaW50ZXJmYWNlIEhpZGVGbGlnaHRDYWJpbkNsYXNzSW50ZXJmYWNlIHtcbiAgYW55OiBib29sZWFuO1xuICBidXNpbmVzczogYm9vbGVhbjtcbiAgZWNvbm9teTogYm9vbGVhbjtcbiAgcHJlbWl1bUVjb25vbXk6IGJvb2xlYW47XG4gIGZpcnN0OiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaDxcbiAgICBGUV9RIGV4dGVuZHMgRmxpZ2h0UXVvdGVGZXRjaGVyVHlwZSxcbiAgICBBSkZfUSBleHRlbmRzIEFwcGx5Sml0RmxpZ2h0UnVsZXNUeXBlLFxuICAgIEdGRU9fRiBleHRlbmRzIEdldEZsaWdodEV4dHJhc09wdGlvbnNUeXBlLFxuICAgIEZTRV9GIGV4dGVuZHMgRmxpZ2h0U2VhcmNoRXhjaGFuZ2VGZXRjaGVyVHlwZSxcbiAgICBGRURfRiBleHRlbmRzIEZsaWdodEV4Y2hhbmdlRGV0YWlsc0ZldGNoZXJUeXBlLFxuICAgIFVGU19VIGV4dGVuZHMgVXBkYXRlRmxpZ2h0U2VhdE1hcFR5cGVcbiAgPlxuICBleHRlbmRzIEJhc2VFbnRlcnByaXNlU2VhcmNoPEZsaWdodFRlbXBQYXJhbXMsIEZsaWdodEFsbFF1b3RlUmVzdWx0LCBGbGlnaHRRdW90ZVJlc3VsdEFycmF5PlxuICBpbXBsZW1lbnRzIEZsaWdodEVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2VcbntcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9QQVJBTVMgPSAnc2VhcmNoX2ZsaWdodCc7XG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUkVTVUxUUyA9ICdyZXN1bHRzX2ZsaWdodCc7XG5cbiAgcHVibGljIHR5cGU6IFNlcnZpY2VUeXBlID0gU2VydmljZVR5cGUuRmxpZ2h0O1xuXG4gIGF2YWxpYWJsZUNsYXNzZXM6IEJlaGF2aW9yU3ViamVjdDxBbGxvd2VkQ2xhc3Nlcz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFsbG93ZWRDbGFzc2VzPihbXSk7XG4gIHRpbWVDcml0ZXJpYU9wdGlvbnM6IEJlaGF2aW9yU3ViamVjdDxUaW1lV2luZG93W10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUaW1lV2luZG93W10+KFtdKTtcbiAgZmxpZ2h0T3BlcmF0b3JzOiBCZWhhdmlvclN1YmplY3Q8RmxpZ2h0T3BlcmF0b3JbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEZsaWdodE9wZXJhdG9yW10+KFtdKTtcbiAgc2VsZWN0ZWRGbGlnaHQ6IEJlaGF2aW9yU3ViamVjdDxGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucz4gPVxuICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8RmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnM+KG51bGwpO1xuICBzZWxlY3RlZFVJZDogc3RyaW5nID0gJyc7XG4gIGRpcmVjdERlZmF1bHRWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX3Nob3dDYWJpbkNsYXNzU2VsZWN0aW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfc2hvd1ByZWZlcnJlZEFpcmxpbmVzOiBib29sZWFuID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfbmVnb3RpYXRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF90aW1lQXJyYXk6IFZhbHVlRGlzcGxheTxzdHJpbmc+W107XG4gIHByaXZhdGUgX3NvcnRBcnJheTogVmFsdWVEaXNwbGF5PEZsaWdodFNvcnRUeXBlcz5bXSA9IFtcbiAgICB7IGRpc3BsYXk6ICdDaGVhcGVzdCBGaXJzdCcsIHZhbHVlOiBGbGlnaHRTb3J0VHlwZXMuQ2hlYXBlc3QgfSxcbiAgICB7XG4gICAgICBkaXNwbGF5OiAnTW9zdCBFeHBlbnNpdmUgRmlyc3QnLFxuICAgICAgdmFsdWU6IEZsaWdodFNvcnRUeXBlcy5Nb3N0RXhwZW5zaXZlXG4gICAgfSxcbiAgICB7IGRpc3BsYXk6ICdGYXN0ZXN0IEZpcnN0JywgdmFsdWU6IEZsaWdodFNvcnRUeXBlcy5GYXN0ZXN0IH0sXG4gICAgeyBkaXNwbGF5OiAnUHJlZmVycmVkIEZhcmVzIEZpcnN0JywgdmFsdWU6IEZsaWdodFNvcnRUeXBlcy5QcmVmZXJyZWQgfSxcbiAgICB7XG4gICAgICBkaXNwbGF5OiAnTG93ZXN0IENvMiBFbWlzc2lvbnMgRmlyc3QnLFxuICAgICAgdmFsdWU6IEZsaWdodFNvcnRUeXBlcy5Mb3dlc3RFbWlzc2lvbnNcbiAgICB9XG4gIF07XG5cbiAgcHJpdmF0ZSBfc29ydEl0aW5hcnlSb3V0aW5lczogUmVjb3JkPFxuICAgIEZsaWdodFNvcnRUeXBlcyxcbiAgICAoYTogRmxpZ2h0SXRpbmVyYXJ5LCBiOiBGbGlnaHRJdGluZXJhcnkpID0+IG51bWJlclxuICA+ID0ge1xuICAgIFtGbGlnaHRTb3J0VHlwZXMuQ2hlYXBlc3RdOiAoYTogRmxpZ2h0SXRpbmVyYXJ5LCBiOiBGbGlnaHRJdGluZXJhcnkpID0+IHtcbiAgICAgIHJldHVybiBhLnRvdGFsLnByaWNlIC0gYi50b3RhbC5wcmljZTtcbiAgICB9LFxuICAgIFtGbGlnaHRTb3J0VHlwZXMuTW9zdEV4cGVuc2l2ZV06IChhOiBGbGlnaHRJdGluZXJhcnksIGI6IEZsaWdodEl0aW5lcmFyeSkgPT4ge1xuICAgICAgcmV0dXJuIGIudG90YWwucHJpY2UgLSBhLnRvdGFsLnByaWNlO1xuICAgIH0sXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5GYXN0ZXN0XTogKGE6IEZsaWdodEl0aW5lcmFyeSwgYjogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBhLm91dGJvdW5kVG90YWxEdXJhdGlvbiArXG4gICAgICAgIChhLmluYm91bmRUb3RhbER1cmF0aW9uID8gYS5pbmJvdW5kVG90YWxEdXJhdGlvbiA6IDApIC1cbiAgICAgICAgKGIub3V0Ym91bmRUb3RhbER1cmF0aW9uICsgKGIuaW5ib3VuZFRvdGFsRHVyYXRpb24gPyBiLmluYm91bmRUb3RhbER1cmF0aW9uIDogMCkpXG4gICAgICApO1xuICAgIH0sXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5QcmVmZXJyZWRdOiAoXG4gICAgICBhOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcbiAgICAgIGI6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zXG4gICAgKSA9PiB7XG4gICAgICBpZiAoYS5wcmVmZXJlbmNlTGV2ZWwgJiYgYi5wcmVmZXJlbmNlTGV2ZWwpIHtcbiAgICAgICAgLy8gU29ydCBieSBwcmVmZXJlbmNlTGV2ZWwgaWYgYm90aCBpdGVtcyBoYXZlIG5vbi1udWxsIHByZWZlcmVuY2VMZXZlbFxuICAgICAgICBpZiAoYS5wcmVmZXJlbmNlTGV2ZWwgPiBiLnByZWZlcmVuY2VMZXZlbCkgcmV0dXJuIC0xO1xuICAgICAgICBpZiAoYS5wcmVmZXJlbmNlTGV2ZWwgPCBiLnByZWZlcmVuY2VMZXZlbCkgcmV0dXJuIDE7XG4gICAgICB9IGVsc2UgaWYgKGEucHJlZmVyZW5jZUxldmVsICYmICFiLnByZWZlcmVuY2VMZXZlbCkge1xuICAgICAgICAvLyBQdXQgaXRlbXMgd2l0aCBub24tbnVsbCBwcmVmZXJlbmNlTGV2ZWwgYmVmb3JlIGl0ZW1zIHdpdGggbnVsbCBwcmVmZXJlbmNlTGV2ZWxcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfSBlbHNlIGlmICghYS5wcmVmZXJlbmNlTGV2ZWwgJiYgYi5wcmVmZXJlbmNlTGV2ZWwpIHtcbiAgICAgICAgLy8gUHV0IGl0ZW1zIHdpdGggbnVsbCBwcmVmZXJlbmNlTGV2ZWwgYWZ0ZXIgaXRlbXMgd2l0aCBub24tbnVsbCBwcmVmZXJlbmNlTGV2ZWxcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG5cbiAgICAgIC8vIFNvcnQgYnkgcHJlZmVycmVkXG4gICAgICBpZiAoYS5wcmVmZXJyZWQgJiYgIWIucHJlZmVycmVkKSByZXR1cm4gLTE7XG4gICAgICBpZiAoIWEucHJlZmVycmVkICYmIGIucHJlZmVycmVkKSByZXR1cm4gMTtcblxuICAgICAgcmV0dXJuIDA7XG4gICAgfSxcbiAgICBbRmxpZ2h0U29ydFR5cGVzLkxvd2VzdEVtaXNzaW9uc106IChcbiAgICAgIGE6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxuICAgICAgYjogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcbiAgICApID0+IHtcbiAgICAgIHJldHVybiBhLmNvMlBlckl0ZW0gLSBiLmNvMlBlckl0ZW07XG4gICAgfSxcbiAgICBbRmxpZ2h0U29ydFR5cGVzLkRlcGFydHVyZVRpbWVdOiAoXG4gICAgICBhOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcbiAgICAgIGI6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCBhVGltZSA9IG1vbWVudChhLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZyk7XG4gICAgICBjb25zdCBiVGltZSA9IG1vbWVudChiLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZyk7XG4gICAgICBpZiAoYVRpbWUuaXNCZWZvcmUoYlRpbWUpKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhVGltZS5pc1NhbWUoYlRpbWUpID8gMCA6IDE7XG4gICAgfSxcbiAgICBbRmxpZ2h0U29ydFR5cGVzLkFycml2YWxUaW1lXTogKFxuICAgICAgYTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgICBiOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9uc1xuICAgICkgPT4ge1xuICAgICAgY29uc3QgYVRpbWUgPSBtb21lbnQoYS5vdXRib3VuZEZsaWdodHNbYS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMV0uZGF0ZVRpbWVBcnJpdmluZyk7XG4gICAgICBjb25zdCBiVGltZSA9IG1vbWVudChiLm91dGJvdW5kRmxpZ2h0c1tiLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXS5kYXRlVGltZUFycml2aW5nKTtcbiAgICAgIGlmIChhVGltZS5pc0JlZm9yZShiVGltZSkpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFUaW1lLmlzU2FtZShiVGltZSkgPyAwIDogMTtcbiAgICB9LFxuICAgIFtGbGlnaHRTb3J0VHlwZXMuUXVpY2tlc3RdOiAoXG4gICAgICBhOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcbiAgICAgIGI6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zXG4gICAgKSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBhLm91dGJvdW5kVG90YWxEdXJhdGlvbiArXG4gICAgICAgIChhLmluYm91bmRUb3RhbER1cmF0aW9uID8gYS5pbmJvdW5kVG90YWxEdXJhdGlvbiA6IDApIC1cbiAgICAgICAgKGIub3V0Ym91bmRUb3RhbER1cmF0aW9uICsgKGIuaW5ib3VuZFRvdGFsRHVyYXRpb24gPyBiLmluYm91bmRUb3RhbER1cmF0aW9uIDogMCkpXG4gICAgICApO1xuICAgIH0sXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5Nb3N0RGlyZWN0XTogKFxuICAgICAgYTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgICBiOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9uc1xuICAgICkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgYS5vdXRib3VuZEZsaWdodHMubGVuZ3RoICtcbiAgICAgICAgKGEub3V0Ym91bmRGbGlnaHRzID8gYS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIDogMCkgLVxuICAgICAgICAoYi5vdXRib3VuZEZsaWdodHMubGVuZ3RoICsgKGIub3V0Ym91bmRGbGlnaHRzID8gYi5vdXRib3VuZEZsaWdodHMubGVuZ3RoIDogMCkpXG4gICAgICApO1xuICAgIH0sXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5HcmVlbmVyQ2hvaWNlXTogKFxuICAgICAgYTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgICBiOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9uc1xuICAgICkgPT4ge1xuICAgICAgaWYgKGEuZ3JlZW5lckNob2ljZSAhPT0gYi5ncmVlbmVyQ2hvaWNlKSB7XG4gICAgICAgIHJldHVybiBhLmdyZWVuZXJDaG9pY2UgPyAtMSA6IDE7XG4gICAgICB9XG4gICAgICBpZiAoYS5ncmVlbmVyQ2hvaWNlKSB7XG4gICAgICAgIHJldHVybiBhLmdyZWVuZXJDaG9pY2VQZXJjZW50YWdlIC0gYi5ncmVlbmVyQ2hvaWNlUGVyY2VudGFnZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAwO1xuICAgIH0sXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5TQUZdOiAoYTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsIGI6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBTQUZSYXRpbmdBcnJheS5maW5kKHMgPT4gcy5yYXRpbmcgPT09IGEuc2FmUmF0aW5nKT8uc2NvcmUgLVxuICAgICAgICBTQUZSYXRpbmdBcnJheS5maW5kKHMgPT4gcy5yYXRpbmcgPT09IGIuc2FmUmF0aW5nKT8uc2NvcmVcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIC8vIHByaXZhdGUgX3NvcnRHcm91cGVkUm91dGluZXM6IFJlY29yZDxcbiAgLy8gICBGbGlnaHRTb3J0VHlwZXMsXG4gIC8vICAgKGE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCwgYjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0KSA9PiBudW1iZXJcbiAgLy8gPiA9IHtcbiAgLy8gICBbRmxpZ2h0U29ydFR5cGVzLkNoZWFwZXN0XTogKGE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCwgYjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0KSA9PiB7XG4gIC8vICAgICBpZiAoYS5kaXJlY3Rpb24gIT09IGIuZGlyZWN0aW9uKSB7XG4gIC8vICAgICAgIHJldHVybiBhLmRpcmVjdGlvbiAtIGIuZGlyZWN0aW9uO1xuICAvLyAgICAgfVxuICAvLyAgICAgcmV0dXJuIGEubWluUHJpY2UgLSBiLm1pblByaWNlO1xuICAvLyAgIH0sXG4gIC8vICAgW0ZsaWdodFNvcnRUeXBlcy5Nb3N0RXhwZW5zaXZlXTogKGE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCwgYjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0KSA9PiB7XG4gIC8vICAgICBpZiAoYS5kaXJlY3Rpb24gIT09IGIuZGlyZWN0aW9uKSB7XG4gIC8vICAgICAgIHJldHVybiBhLmRpcmVjdGlvbiAtIGIuZGlyZWN0aW9uO1xuICAvLyAgICAgfVxuICAvLyAgICAgcmV0dXJuIGIubWluUHJpY2UgLSBhLm1heFByaWNlO1xuICAvLyAgIH0sXG4gIC8vICAgW0ZsaWdodFNvcnRUeXBlcy5GYXN0ZXN0XTogKGE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCwgYjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0KSA9PiB7XG4gIC8vICAgICBpZiAoYS5kaXJlY3Rpb24gIT09IGIuZGlyZWN0aW9uKSB7XG4gIC8vICAgICAgIHJldHVybiBhLmRpcmVjdGlvbiAtIGIuZGlyZWN0aW9uO1xuICAvLyAgICAgfVxuICAvLyAgICAgcmV0dXJuIGEuZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kXG4gIC8vICAgICAgID8gYS5vdXRib3VuZFRvdGFsRHVyYXRpb24gLSBiLm91dGJvdW5kVG90YWxEdXJhdGlvblxuICAvLyAgICAgICA6IGEuaW5ib3VuZFRvdGFsRHVyYXRpb24gLSBiLmluYm91bmRUb3RhbER1cmF0aW9uO1xuICAvLyAgIH0sXG4gIC8vICAgW0ZsaWdodFNvcnRUeXBlcy5QcmVmZXJyZWRdOiAoYTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0LCBiOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQpID0+IHtcbiAgLy8gICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcbiAgLy8gICAgICAgcmV0dXJuIGEuZGlyZWN0aW9uIC0gYi5kaXJlY3Rpb247XG4gIC8vICAgICB9XG4gIC8vICAgICByZXR1cm4gKGIucHJlZmVycmVkID8gMSA6IDApIC0gKGEucHJlZmVycmVkID8gMSA6IDApO1xuICAvLyAgIH0sXG4gIC8vICAgW0ZsaWdodFNvcnRUeXBlcy5HcmVlbmVyQ2hvaWNlXTogKCkgPT4ge1xuICAvLyAgICAgcmV0dXJuIDA7XG4gIC8vICAgfSxcbiAgLy8gICBbRmxpZ2h0U29ydFR5cGVzLkxvd2VzdEVtaXNzaW9uc106IChcbiAgLy8gICAgIGE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCxcbiAgLy8gICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxuICAvLyAgICkgPT4ge1xuICAvLyAgICAgaWYgKGEuZGlyZWN0aW9uICE9PSBiLmRpcmVjdGlvbikge1xuICAvLyAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcbiAgLy8gICAgIH1cbiAgLy8gICAgIHJldHVybiBhLmNvMlBlckl0ZW0gLSBiLmNvMlBlckl0ZW07XG4gIC8vICAgfSxcbiAgLy8gICBbRmxpZ2h0U29ydFR5cGVzLkRlcGFydHVyZVRpbWVdOiAoYTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0LCBiOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQpID0+IHtcbiAgLy8gICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcbiAgLy8gICAgICAgcmV0dXJuIGEuZGlyZWN0aW9uIC0gYi5kaXJlY3Rpb247XG4gIC8vICAgICB9XG4gIC8vICAgICBjb25zdCBhVGltZSA9IG1vbWVudChhLmRlcGFydERhdGVUaW1lKTtcbiAgLy8gICAgIGNvbnN0IGJUaW1lID0gbW9tZW50KGIuZGVwYXJ0RGF0ZVRpbWUpO1xuICAvLyAgICAgaWYgKGFUaW1lLmlzQmVmb3JlKGJUaW1lKSkge1xuICAvLyAgICAgICByZXR1cm4gLTE7XG4gIC8vICAgICB9XG4gIC8vICAgICByZXR1cm4gYVRpbWUuaXNTYW1lKGJUaW1lKSA/IDAgOiAxO1xuICAvLyAgIH0sXG4gIC8vICAgW0ZsaWdodFNvcnRUeXBlcy5BcnJpdmFsVGltZV06IChhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCkgPT4ge1xuICAvLyAgICAgaWYgKGEuZGlyZWN0aW9uICE9PSBiLmRpcmVjdGlvbikge1xuICAvLyAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcbiAgLy8gICAgIH1cbiAgLy8gICAgIGNvbnN0IGFUaW1lID0gbW9tZW50KGEuYXJyaXZhbERhdGVUaW1lKTtcbiAgLy8gICAgIGNvbnN0IGJUaW1lID0gbW9tZW50KGIuYXJyaXZhbERhdGVUaW1lKTtcbiAgLy8gICAgIGlmIChhVGltZS5pc0JlZm9yZShiVGltZSkpIHtcbiAgLy8gICAgICAgcmV0dXJuIC0xO1xuICAvLyAgICAgfVxuICAvLyAgICAgcmV0dXJuIGFUaW1lLmlzU2FtZShiVGltZSkgPyAwIDogMTtcbiAgLy8gICB9LFxuICAvLyAgIFtGbGlnaHRTb3J0VHlwZXMuUXVpY2tlc3RdOiAoYTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0LCBiOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQpID0+IHtcbiAgLy8gICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcbiAgLy8gICAgICAgcmV0dXJuIGEuZGlyZWN0aW9uIC0gYi5kaXJlY3Rpb247XG4gIC8vICAgICB9XG4gIC8vICAgICByZXR1cm4gYS5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmRcbiAgLy8gICAgICAgPyBhLm91dGJvdW5kVG90YWxEdXJhdGlvbiAtIGIub3V0Ym91bmRUb3RhbER1cmF0aW9uXG4gIC8vICAgICAgIDogKGEuaW5ib3VuZFRvdGFsRHVyYXRpb24gPyBhLmluYm91bmRUb3RhbER1cmF0aW9uIDogMCkgLVxuICAvLyAgICAgICAgICAgKGIuaW5ib3VuZFRvdGFsRHVyYXRpb24gPyBiLmluYm91bmRUb3RhbER1cmF0aW9uIDogMCk7XG4gIC8vICAgfSxcbiAgLy8gICBbRmxpZ2h0U29ydFR5cGVzLk1vc3REaXJlY3RdOiAoYTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0LCBiOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQpID0+IHtcbiAgLy8gICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcbiAgLy8gICAgICAgcmV0dXJuIGEuZGlyZWN0aW9uIC0gYi5kaXJlY3Rpb247XG4gIC8vICAgICB9XG4gIC8vICAgICByZXR1cm4gYS5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmRcbiAgLy8gICAgICAgPyBhLm91dGxlZ3MubGVuZ3RoIC0gYi5vdXRsZWdzLmxlbmd0aFxuICAvLyAgICAgICA6IChhLmlubGVncyB8fCBbXSkubGVuZ3RoIC0gKGIuaW5sZWdzIHx8IFtdKS5sZW5ndGg7XG4gIC8vICAgfVxuICAvLyB9O1xuICBwcml2YXRlIF9mYXJlVHlwZUFycmF5OiBWYWx1ZURpc3BsYXk8RmFyZVR5cGU+W10gPSBbXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuRmxleGlibGUsIGRpc3BsYXk6ICdGbGV4aWJsZScgfSxcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5MZWlzdXJlLCBkaXNwbGF5OiAnTGVpc3VyZScgfSxcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5Mb3dlc3QsIGRpc3BsYXk6ICdMb3dlc3QnIH0sXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuTmVnb3RpYXRlZCwgZGlzcGxheTogJ05lZ290aWF0ZWQnIH0sXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuTm9uTmVnb3RpYXRlZCwgZGlzcGxheTogJ05vbi1OZWdvdGlhdGVkJyB9LFxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLlJlcXVlc3RGYXJlUnVsZXMsIGRpc3BsYXk6ICdSZXF1ZXN0IEZhcmUgUnVsZXMnIH0sXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuU2VsZWN0QW5kUHJvLCBkaXNwbGF5OiAnU2VsZWN0ICYgUHJvJyB9XG4gIF07XG5cbiAgcHVibGljIG1pbmltdW1PdXRCb3VuZERhdGUgPSB7XG4gICAgeWVhcjogbW9tZW50KCkueWVhcigpLFxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxuICB9O1xuXG4gIHB1YmxpYyBtaW5pbXVtSW5Cb3VuZERhdGUgPSB7XG4gICAgeWVhcjogbW9tZW50KCkueWVhcigpLFxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxuICB9O1xuICBwcml2YXRlIF9vdXREYXRlOiBOZ2JEYXRlU3RydWN0O1xuICBwcml2YXRlIF9vdXRUaW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX2luRGF0ZTogTmdiRGF0ZVN0cnVjdDtcbiAgcHJpdmF0ZSBfaW5UaW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Rlc3RpbmF0aW9uQWlycG9ydDogYW55O1xuICBwcml2YXRlIF9kZXN0aW5hdGlvbkFpcnBvcnRGdWxsOiBzdHJpbmc7XG4gIHByaXZhdGUgX29yaWdpbkFpcnBvcnQ6IGFueTtcbiAgcHJpdmF0ZSBfb3JpZ2luQWlycG9ydEZ1bGw6IHN0cmluZztcbiAgcHJpdmF0ZSBfb3JpZ2luTG9jYXRpb25UeXBlOiBMb2NhdGlvblR5cGU7XG4gIHByaXZhdGUgX2Rlc3RpbmF0aW9uTG9jYXRpb25UeXBlOiBMb2NhdGlvblR5cGU7XG4gIHByaXZhdGUgX3ZpYUFpcnBvcnQ6IGFueTtcbiAgcHJpdmF0ZSBfdmlhQWlycG9ydEZ1bGw6IHN0cmluZztcbiAgcHJpdmF0ZSBfcGFzc2VuZ2VyczogYW55O1xuICAvLyBwcml2YXRlIGdyb3VwZWRPYmplY3Q6IEZsaWdodEl0aW5lcmFyeVdpdGhTZWxlY3RlZFtdO1xuICBwcm90ZWN0ZWQgcmVzdWx0UXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzO1xuICBwcm90ZWN0ZWQgX2dyb3VwZWQ6IEdyb3VwZWRGbGlnaHRzID0gbnVsbDtcbiAgdHJhdmVsbGVyczogVHJhdmVsbGVyW10gPSBudWxsO1xuICBwcm90ZWN0ZWQgcmVzdWx0c1Nlc3Npb25OYW1lID0gRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcbiAgcHJvdGVjdGVkIG11bHRpUmVzdWx0c1Nlc3Npb25OYW1lID0gRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcbiAgc2VsZWN0ZWRHcm91cEZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnM7XG4gIHB1YmxpYyBvdXRib3VuZENhYmluQ2xhc3M6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9zaG93SG90ZWxGb3JtOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2ZldGNoaW5nUnVsZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaG90ZWxTZWFyY2hSZXF1ZXN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZmlsdGVyczogQmVoYXZpb3JTdWJqZWN0PEZsaWdodEZpbHRlcnM+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChERUZBVUxUX0ZMSUdIVF9GSUxURVJTKTtcbiAgZHVyYWxTaW5nbGVGaWx0ZXI6IEJlaGF2aW9yU3ViamVjdDxGbGlnaHRGaWx0ZXJzPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoREVGQVVMVF9GTElHSFRfRklMVEVSUyk7XG4gIHNjaGVkdWxlZEZpbHRlcnM6IEJlaGF2aW9yU3ViamVjdDxGbGlnaHRGaWx0ZXJzW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XG4gIHB1YmxpYyBvdXRib3VuZFNhbWVTZWFyY2hUcmFpbmxpbmVTdGF0aW9uczogUmFpbFN0YXRpb25bXTtcbiAgcHVibGljIGluYm91bmRTYW1lU2VhcmNoVHJhaW5saW5lU3RhdGlvbnM6IFJhaWxTdGF0aW9uW107XG5cbiAgY2hvb3NlbkRpc3BsYXlUeXBlOiBCZWhhdmlvclN1YmplY3Q8RmxpZ2h0RGlzcGxheVR5cGVzPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoXG4gICAgRmxpZ2h0RGlzcGxheVR5cGVzLnJldHVybnNcbiAgKTtcbiAgY3VycmVudFNvcnQ6IEZsaWdodFNvcnRUeXBlcztcbiAgY3VycmVudEZpbHRlcnM6IEZsaWdodEZpbHRlcnM7XG4gIGN1c3RvbVNjaGVkdWxlZEZpbHRlcnM6IEZsaWdodEZpbHRlcnNbXSA9IFtdO1xuICBzZWxlY3RlZEdyb3VwSWQ6IG51bWJlcjtcbiAgZXVyb3N0YXJGcm9tRmxpZ2h0U2VhcmNoUGVyZm9ybWVkOiBib29sZWFuID0gZmFsc2U7XG4gIHJhaWxGcm9tRmxpZ2h0U2VhcmNoUGVyZm9ybWVkOiBib29sZWFuID0gZmFsc2U7XG4gIGZhc3R0cmFja0Zyb21GbGlnaHRTZWFyY2hQZXJmb3JtZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcGFya2luZ0Zyb21GbGlnaHRTZWFyY2hQZXJmb3JtZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaG90ZWxGcm9tRmxpZ2h0U2VhcmNoUGVyZm9ybWVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3J1bGVBY3Rpb25TdW1tYXJ5OiBSdWxlQWN0aW9uU3VtbWFyeUludGVyZmFjZTtcbiAgbXVsdGk6IEZsaWdodE11bHRpW107XG4gIHNlYXJjaEJ5U2NoZWR1bGU6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zW11bXSA9IFtdO1xuICBzZWxlY3RlZFNlZ21lbnQ6IG51bWJlciA9IDA7XG4gIHNzb1NlYXJjaGVkID0gZmFsc2U7XG4gIF9jaGVhcGVzdFByaWNlT2JqZWN0OiBJQ2hlYXBlc3RQcmljZU9iamVjdCA9IHtcbiAgICBkdWFsT3V0Ym91bmQ6IHtcbiAgICAgIGFtb3VudDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXG4gICAgICBjdXJyZW5jeUNvZGU6ICdHQlAnLFxuICAgICAgZmxpZ2h0OiBudWxsXG4gICAgfSxcbiAgICBkdWFsSW5ib3VuZDoge1xuICAgICAgYW1vdW50OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcbiAgICAgIGN1cnJlbmN5Q29kZTogJ0dCUCcsXG4gICAgICBmbGlnaHQ6IG51bGxcbiAgICB9LFxuICAgIHJldHVybnM6IHtcbiAgICAgIGFtb3VudDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXG4gICAgICBjdXJyZW5jeUNvZGU6ICdHQlAnLFxuICAgICAgZmxpZ2h0OiBudWxsXG4gICAgfVxuICB9O1xuICBncmVlbmVyQ2hvaWNlOiBHcmVlbmVyQ2hvaWNlSW1wbDtcbiAgaXNMb2FkaW5nU1NPOiBib29sZWFuO1xuXG4gIHB1YmxpYyBnZXQgc2hvd0NhYmluQ2xhc3NTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgLy8gbm8gc2V0dGVyIC0gc2V0IGJ5IFVpIENvbmZpZ1xuICAgIHJldHVybiB0aGlzLl9zaG93Q2FiaW5DbGFzc1NlbGVjdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2hvd1ByZWZlcnJlZEFpcmxpbmVzKCk6IGJvb2xlYW4ge1xuICAgIC8vIG5vIHNldHRlciAtIHNldCBieSBVaSBDb25maWdcbiAgICByZXR1cm4gdGhpcy5fc2hvd1ByZWZlcnJlZEFpcmxpbmVzO1xuICB9XG5cbiAgcHVibGljIGdldCBmZXRjaGluZ1J1bGVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9mZXRjaGluZ1J1bGVzO1xuICB9XG5cbiAgcHVibGljIHNldCBmZXRjaGluZ1J1bGVzKG5ld1ZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuX2ZldGNoaW5nUnVsZXMgPSBuZXdWYWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNoZWFwZXN0UHJpY2VPYmplY3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NoZWFwZXN0UHJpY2VPYmplY3Q7XG4gIH1cbiAgcHVibGljIGdldCB0aW1lQXJyYXkoKSB7XG4gICAgdGhpcy5fdGltZUFycmF5ID1cbiAgICAgIHRoaXMuX3RpbWVBcnJheSB8fFxuICAgICAgQXJyYXkoOTYpXG4gICAgICAgIC5maWxsKDApXG4gICAgICAgIC5tYXAoKF8sIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6XG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyA0KVxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgLnBhZFN0YXJ0KDIsICcwJykgK1xuICAgICAgICAgICAgICAnOicgK1xuICAgICAgICAgICAgICAoKGluZGV4ICUgNCkgKiAxNSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpLFxuICAgICAgICAgICAgZGlzcGxheTpcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcihpbmRleCAvIDQpXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAucGFkU3RhcnQoMiwgJzAnKSArXG4gICAgICAgICAgICAgICc6JyArXG4gICAgICAgICAgICAgICgoaW5kZXggJSA0KSAqIDE1KS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5fdGltZUFycmF5O1xuICB9XG5cbiAgcHVibGljIGdldCBwcmVmZXJyZWRDYXJyaWVycygpOiBPQlRBaXJsaW5lc0RldGFpbHNbXSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVycztcbiAgfVxuXG4gIHB1YmxpYyBzZXQgcHJlZmVycmVkQ2FycmllcnModmFsdWU6IE9CVEFpcmxpbmVzRGV0YWlsc1tdKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgcHVibGljIGdldCBvcGVyYXRvcjEoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzBdO1xuICB9XG5cbiAgcHVibGljIHNldCBvcGVyYXRvcjEodmFsdWU6IE9CVEFpcmxpbmVzRGV0YWlscykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1swXSA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IG9wZXJhdG9yMigpOiBPQlRBaXJsaW5lc0RldGFpbHMge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMV07XG4gIH1cblxuICBwdWJsaWMgc2V0IG9wZXJhdG9yMih2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzFdID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG4gIHB1YmxpYyBnZXQgb3BlcmF0b3IzKCk6IE9CVEFpcmxpbmVzRGV0YWlscyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1syXTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgb3BlcmF0b3IzKHZhbHVlOiBPQlRBaXJsaW5lc0RldGFpbHMpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMl0gPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cbiAgcHVibGljIGdldCBvcGVyYXRvcjQoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzNdO1xuICB9XG5cbiAgcHVibGljIHNldCBvcGVyYXRvcjQodmFsdWU6IE9CVEFpcmxpbmVzRGV0YWlscykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1szXSA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX21pbkRhdGU6IE5nYkRhdGVTdHJ1Y3Q7XG4gIHB1YmxpYyBnZXQgbWluRGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcbiAgICB0aGlzLl9taW5EYXRlID0gdGhpcy5fbWluRGF0ZSB8fCB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUobW9tZW50KCkpO1xuICAgIHJldHVybiB0aGlzLl9taW5EYXRlO1xuICB9XG5cbiAgcHVibGljIGdldCBhZHVsdHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFkdWx0cztcbiAgfVxuXG4gIHB1YmxpYyBzZXQgYWR1bHRzKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gTnVtYmVyKHZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlcnMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2hpbGRyZW4oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuO1xuICB9XG5cbiAgcHVibGljIHNldCBjaGlsZHJlbih2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuID0gTnVtYmVyKHZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlcnMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGVwYXJ0TG9jYXRpb24oKTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZGVwYXJ0TG9jYXRpb247XG4gIH1cblxuICBwdWJsaWMgc2V0IGRlcGFydExvY2F0aW9uKHZhbHVlOiBzdHJpbmcgfCBPQlRBaXJwb3J0RGV0YWlscykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5kZXBhcnRMb2NhdGlvbiA9IHZhbHVlO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLl9vcmlnaW5BaXJwb3J0ID0gJyc7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB2YWx1ZS5nYXRld2F5KSB7XG4gICAgICB0aGlzLl9vcmlnaW5BaXJwb3J0ID0gdmFsdWUuZ2F0ZXdheTtcbiAgICAgIHRoaXMuX29yaWdpbkFpcnBvcnRGdWxsID0gdmFsdWUuZGVzdGluYXRpb247XG4gICAgICB0aGlzLl9vcmlnaW5Mb2NhdGlvblR5cGUgPSB2YWx1ZS5sb2NhdGlvblR5cGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX29yaWdpbkFpcnBvcnQgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZpYSgpOiBzdHJpbmcgfCBPQlRBaXJwb3J0RGV0YWlscyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy52aWE7XG4gIH1cblxuICBwdWJsaWMgc2V0IHZpYSh2YWx1ZTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMudmlhID0gdmFsdWU7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuX3ZpYUFpcnBvcnQgPSAnJztcbiAgICB9IGVsc2UgaWYgKHZhbHVlICYmIHZhbHVlLmdhdGV3YXkpIHtcbiAgICAgIHRoaXMuX3ZpYUFpcnBvcnQgPSB2YWx1ZS5nYXRld2F5O1xuICAgICAgdGhpcy5fdmlhQWlycG9ydEZ1bGwgPSB2YWx1ZS5kZXN0aW5hdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdmlhQWlycG9ydCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcXVlcnlPcmlnaW5BaXBvcnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fb3JpZ2luQWlycG9ydDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcXVlcnlEZXN0aW5hdGlvbkFpcG9ydCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRlcGFydERhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XG4gICAgcmV0dXJuIHRoaXMuX291dERhdGU7XG4gIH1cblxuICBwdWJsaWMgc2V0IGRlcGFydERhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcbiAgICB0aGlzLl9vdXREYXRlID0gdmFsdWU7XG4gICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQodGhpcy5fb3V0RGF0ZSwgdGhpcy5fb3V0VGltZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRlcGFydFRpbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fb3V0VGltZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgZGVwYXJ0VGltZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fb3V0VGltZSA9IHZhbHVlO1xuICAgIHRoaXMub3V0Qm91bmREYXRlID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KHRoaXMuX291dERhdGUsIHRoaXMuX291dFRpbWUpO1xuICB9XG5cbiAgcHVibGljIGdldCBvdXRCb3VuZERhdGUoKTogbW9tZW50Lk1vbWVudCB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGU7XG4gIH1cblxuICBwdWJsaWMgc2V0IG91dEJvdW5kRGF0ZSh2YWx1ZTogbW9tZW50Lk1vbWVudCkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUgPSB2YWx1ZS5pc1ZhbGlkKCkgPyB2YWx1ZSA6IG51bGw7XG4gICAgdGhpcy5taW5pbXVtSW5Cb3VuZERhdGUgPSB7XG4gICAgICB5ZWFyOiB2YWx1ZS55ZWFyKCksXG4gICAgICBtb250aDogdmFsdWUubW9udGgoKSArIDEsXG4gICAgICBkYXk6IHZhbHVlLmRhdGUoKVxuICAgIH07XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlICYmXG4gICAgICB0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGUgJiZcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUuaXNBZnRlcih0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGUpXG4gICAgKSB7XG4gICAgICB0aGlzLmluYm91bmREYXRlID0gbW9tZW50KHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUpLmFkZCgxLCAnZGF5Jyk7XG4gICAgfVxuICAgIHRoaXMuX291dERhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUodmFsdWUpO1xuICAgIHRoaXMuX291dFRpbWUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0VGltZUNvbG9uKHZhbHVlKTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJldHVybkRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XG4gICAgcmV0dXJuIHRoaXMuX2luRGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgcmV0dXJuRGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xuICAgIHRoaXMuX2luRGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQodGhpcy5faW5EYXRlLCB0aGlzLl9pblRpbWUpO1xuICB9XG5cbiAgcHVibGljIGdldCBhcnJpdmVUaW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2luVGltZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgYXJyaXZlVGltZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5faW5UaW1lID0gdmFsdWU7XG4gICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudCh0aGlzLl9pbkRhdGUsIHRoaXMuX2luVGltZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGluYm91bmREYXRlKCk6IG1vbWVudC5Nb21lbnQge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGU7XG4gIH1cblxuICBwdWJsaWMgc2V0IGluYm91bmREYXRlKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlID0gdmFsdWUuaXNWYWxpZCgpID8gdmFsdWUgOiBudWxsO1xuICAgIHRoaXMuX2luRGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZSh2YWx1ZSk7XG4gICAgdGhpcy5faW5UaW1lID0gdGhpcy5oZWxwZXJzLmZvcm1hdFRpbWVDb2xvbih2YWx1ZSk7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgcHVibGljIGdldCBhcnJpdmVMb2NhdGlvbigpOiBzdHJpbmcgfCBPQlRBaXJwb3J0RGV0YWlscyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5hcnJpdmVMb2NhdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgYXJyaXZlTG9jYXRpb24odmFsdWU6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmFycml2ZUxvY2F0aW9uID0gdmFsdWU7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9ICcnO1xuICAgICAgdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0RnVsbCA9ICcnO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgdmFsdWUuZ2F0ZXdheSkge1xuICAgICAgdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0ID0gdmFsdWUuZ2F0ZXdheTtcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydEZ1bGwgPSB2YWx1ZS5kZXN0aW5hdGlvbjtcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uTG9jYXRpb25UeXBlID0gdmFsdWUubG9jYXRpb25UeXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQgPSBudWxsO1xuICAgICAgdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0RnVsbCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBjYWJpbkNsYXNzKCk6IEZsaWdodENhYmluQ2xhc3MgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNhYmluQ2xhc3M7XG4gIH1cblxuICBzZXQgY2FiaW5DbGFzcyh2YWx1ZTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGwpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzcyA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCByZXR1cm5DYWJpbkNsYXNzKCk6IEZsaWdodENhYmluQ2xhc3MgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnJldHVybkNhYmluQ2xhc3M7XG4gIH1cblxuICBzZXQgcmV0dXJuQ2FiaW5DbGFzcyh2YWx1ZTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGwpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzcyA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBjaG9zZW5TZWFyY2hUeXBlKCk6IEZsaWdodFNlYXJjaFR5cGUge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZTtcbiAgfVxuXG4gIHNldCBjaG9zZW5TZWFyY2hUeXBlKHR5cGU6IEZsaWdodFNlYXJjaFR5cGUpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9IHR5cGU7XG5cbiAgICBpZiAodHlwZSAhPT0gRmxpZ2h0U2VhcmNoVHlwZS5tdWx0aUNpdHkpIHtcbiAgICAgIHRoaXMubXVsdGlEZXN0aW5hdGlvbiA9IFtcbiAgICAgICAge1xuICAgICAgICAgIG9yaWc6IG51bGwsXG4gICAgICAgICAgZGVzdDogbnVsbCxcbiAgICAgICAgICBkYXRlOiBtb21lbnQodGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyh0aGlzLmhlbHBlcnMubWFrZU1vbWVudERheVRpbWUoKSwgMzApKSxcbiAgICAgICAgICBvdXRUaW1lQ3JpdGVyaWE6IFRpbWVXaW5kb3cuRGVwYXJ0LFxuICAgICAgICAgIG91dFRpbWVGbGV4aWJpbGl0eTogMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb3JpZzogbnVsbCxcbiAgICAgICAgICBkZXN0OiBudWxsLFxuICAgICAgICAgIGRhdGU6IG1vbWVudCh0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKHRoaXMuaGVscGVycy5tYWtlTW9tZW50RGF5VGltZSgpLCAzMCkpLFxuICAgICAgICAgIG91dFRpbWVDcml0ZXJpYTogVGltZVdpbmRvdy5EZXBhcnQsXG4gICAgICAgICAgb3V0VGltZUZsZXhpYmlsaXR5OiAyXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgZ2V0IGlzUmV0dXJuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm47XG4gIH1cblxuICBnZXQgb3V0VGltZUNyaXRlcmlhKCk6IFRpbWVXaW5kb3cge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUNyaXRlcmlhO1xuICB9XG5cbiAgc2V0IG91dFRpbWVDcml0ZXJpYSh2YWx1ZTogVGltZVdpbmRvdykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lQ3JpdGVyaWEgPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgaW5UaW1lQ3JpdGVyaWEoKTogVGltZVdpbmRvdyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYTtcbiAgfVxuXG4gIHNldCBpblRpbWVDcml0ZXJpYSh2YWx1ZTogVGltZVdpbmRvdykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYSA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBvdXRUaW1lRmxleGliaWxpdHkoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm91dFRpbWVGbGV4aWJpbGl0eTtcbiAgfVxuXG4gIHNldCBvdXRUaW1lRmxleGliaWxpdHkodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lRmxleGliaWxpdHkgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBpblRpbWVGbGV4aWJpbGl0eSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaW5UaW1lRmxleGliaWxpdHk7XG4gIH1cblxuICBzZXQgaW5UaW1lRmxleGliaWxpdHkodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVGbGV4aWJpbGl0eSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IG1heENvbm5lY3Rpb25zKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5tYXhDb25uZWN0aW9ucztcbiAgfVxuXG4gIHNldCBtYXhDb25uZWN0aW9ucyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLm1heENvbm5lY3Rpb25zID0gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9tdWx0aURlc3RpbmF0aW9uOiBEZXN0aW5hdGlvbkVudHJ5W10gPSBbXTtcbiAgZ2V0IG11bHRpRGVzdGluYXRpb24oKTogSU11bHRpRGVzdGluYXRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uO1xuICB9XG5cbiAgc2V0IG11bHRpRGVzdGluYXRpb24odmFsdWVBcnJheTogSU11bHRpRGVzdGluYXRpb25bXSkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uID0gdmFsdWVBcnJheTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNob3dIb3RlbEZvcm0oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3Nob3dIb3RlbEZvcm07XG4gIH1cblxuICBwdWJsaWMgc2V0IHNob3dIb3RlbEZvcm0obmV3VmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2hvd0hvdGVsRm9ybSA9IG5ld1ZhbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaG90ZWxTZWFyY2hSZXF1ZXN0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2hvdGVsU2VhcmNoUmVxdWVzdGVkO1xuICB9XG5cbiAgcHVibGljIHNldCBob3RlbFNlYXJjaFJlcXVlc3RlZChuZXdWYWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9ob3RlbFNlYXJjaFJlcXVlc3RlZCA9IG5ld1ZhbDtcbiAgfVxuXG4gIHNldE11bHRpRGVzdGluYXRpb25RdWVyeShtdWx0aURlc3RpbmF0aW9uOiBJTXVsdGlEZXN0aW5hdGlvbltdKTogRGVzdGluYXRpb25FbnRyeVtdIHtcbiAgICBjb25zdCBuZXdNdWx0aURlc3RpbmF0aW9uID0gdGhpcy5oZWxwZXJzLmNsb25lKG11bHRpRGVzdGluYXRpb24pO1xuICAgIHJldHVybiBuZXdNdWx0aURlc3RpbmF0aW9uLnJlZHVjZShcbiAgICAgIChkZXN0aW5hdGlvbkFycmF5OiBEZXN0aW5hdGlvbkVudHJ5W10sIGl0ZW06IElNdWx0aURlc3RpbmF0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uT2JqZWN0ID0ge30gYXMgRGVzdGluYXRpb25FbnRyeTtcbiAgICAgICAgZGVzdGluYXRpb25PYmplY3Qub3JpZyA9IGl0ZW0ub3JpZy5nYXRld2F5O1xuICAgICAgICBkZXN0aW5hdGlvbk9iamVjdC5kZXN0ID0gaXRlbS5kZXN0LmdhdGV3YXk7XG4gICAgICAgIGRlc3RpbmF0aW9uT2JqZWN0Lm9yaWdpbkxvY2F0aW9uVHlwZSA9IGl0ZW0ub3JpZy5sb2NhdGlvblR5cGU7XG4gICAgICAgIGRlc3RpbmF0aW9uT2JqZWN0LmRlc3RpbmF0aW9uTG9jYXRpb25UeXBlID0gaXRlbS5kZXN0LmxvY2F0aW9uVHlwZTtcbiAgICAgICAgZGVzdGluYXRpb25PYmplY3Qub3JpZ2luQWlycG9ydEZ1bGwgPSBpdGVtLm9yaWcuZGVzdGluYXRpb247XG4gICAgICAgIGRlc3RpbmF0aW9uT2JqZWN0LmRlc3RpbmF0aW9uQWlycG9ydEZ1bGwgPSBpdGVtLmRlc3QuZGVzdGluYXRpb247XG4gICAgICAgIGRlc3RpbmF0aW9uT2JqZWN0LmRhdGUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0SXNvRGF0ZShpdGVtLmRhdGUpO1xuICAgICAgICBkZXN0aW5hdGlvbk9iamVjdC5kZXBhcnR1cmVUaW1lV2luZG93ID1cbiAgICAgICAgICBpdGVtLm91dFRpbWVDcml0ZXJpYSA9PT0gVGltZVdpbmRvdy5EZXBhcnRcbiAgICAgICAgICAgID8gdGhpcy5oZWxwZXJzLm1ha2VUaW1lV2luZG93KFxuICAgICAgICAgICAgICAgIGl0ZW0uZGF0ZSxcbiAgICAgICAgICAgICAgICAtaXRlbS5vdXRUaW1lRmxleGliaWxpdHksXG4gICAgICAgICAgICAgICAgaXRlbS5vdXRUaW1lRmxleGliaWxpdHlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICBkZXN0aW5hdGlvbk9iamVjdC5hcnJpdmFsVGltZVdpbmRvdyA9XG4gICAgICAgICAgaXRlbS5vdXRUaW1lQ3JpdGVyaWEgPT09IFRpbWVXaW5kb3cuQXJyaXZlXG4gICAgICAgICAgICA/IHRoaXMuaGVscGVycy5tYWtlVGltZVdpbmRvdyhpdGVtLmRhdGUsIC0yLCAyKVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICBkZXN0aW5hdGlvbk9iamVjdC5vdXRUaW1lRmxleGliaWxpdHkgPVxuICAgICAgICAgIGl0ZW0ub3V0VGltZUNyaXRlcmlhID09PSBUaW1lV2luZG93LkFycml2ZSA/IDIgOiBOdW1iZXIoaXRlbS5vdXRUaW1lRmxleGliaWxpdHkgfHwgMCk7XG4gICAgICAgIGRlc3RpbmF0aW9uQXJyYXkucHVzaChkZXN0aW5hdGlvbk9iamVjdCk7XG4gICAgICAgIHJldHVybiBkZXN0aW5hdGlvbkFycmF5O1xuICAgICAgfSxcbiAgICAgIFtdIGFzIERlc3RpbmF0aW9uRW50cnlbXVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9zc29PYmplY3Q6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSBudWxsO1xuICBzZXQgc3NvT2JqZWN0KHF1ZXJ5OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KSB7XG4gICAgdGhpcy5fc3NvT2JqZWN0ID0gcXVlcnk7XG4gIH1cblxuICBnZXQgc3NvT2JqZWN0KCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIHJldHVybiB0aGlzLl9zc29PYmplY3Q7XG4gIH1cbiAgLy8gZ2V0IG9ubHlcbiAgZ2V0IHNvcnREcm9wZG93blZhbHVlcygpOiBWYWx1ZURpc3BsYXk8RmxpZ2h0U29ydFR5cGVzPltdIHtcbiAgICByZXR1cm4gdGhpcy5fc29ydEFycmF5O1xuICB9XG5cbiAgZ2V0IGZhcmVUeXBlc1ZhbHVlcygpOiBWYWx1ZURpc3BsYXk8RmFyZVR5cGU+W10ge1xuICAgIHJldHVybiB0aGlzLl9mYXJlVHlwZUFycmF5O1xuICB9XG5cbiAgZ2V0IGZhcmVUeXBlKCk6IEZhcmVUeXBlIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmZhcmVUeXBlO1xuICB9XG5cbiAgc2V0IGZhcmVUeXBlKHZhbHVlOiBGYXJlVHlwZSkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5mYXJlVHlwZSA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBuZWdvdGlhdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9uZWdvdGlhdGVkO1xuICB9XG5cbiAgc2V0IG5lZ290aWF0ZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9uZWdvdGlhdGVkID0gdmFsdWU7XG4gIH1cblxuICBnZXQgaW5jbHVkZU5lYXJieUFpcnBvcnRzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaW5jbHVkZU5lYXJieUFpcnBvcnRzO1xuICB9XG5cbiAgc2V0IGluY2x1ZGVOZWFyYnlBaXJwb3J0cyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMudGVtcFBhcmFtcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHMgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBieVNjaGVkdWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYnlTY2hlZHVsZTtcbiAgfVxuXG4gIHNldCBieVNjaGVkdWxlKGV4dHJhOiBib29sZWFuKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmJ5U2NoZWR1bGUgPSBleHRyYTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmxpZ2h0ZmV0Y2hlcjogQmFzZUZsaWdodFF1b3RlRmV0Y2hlcjxGUV9RPixcbiAgICBoZWxwZXJzOiBCYXNlSGVscGVyUm91dGluZXMsXG4gICAgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlSW50ZXJmYWNlLFxuICAgIHByaXZhdGUgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXG4gICAgc3RvcmFnZVNlcnZpY2U6IEJhc2VTdG9yYWdlU2VydmljZSxcbiAgICBzZWFyY2hTZXJ2aWNlOiBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSxcbiAgICBwcml2YXRlIGFwcGx5RmxpZ2h0UnVsZXM6IEJhc2VBcHBseUppdEZsaWdodFJ1bGVzRmV0Y2hlcjxBSkZfUT4sXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IEJhc2VNb2RhbE9wZW5lclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBnZXRGbGlnaHRFeHRyYXNPcHRpb25zOiBCYXNlR2V0RmxpZ2h0RXh0cmFzT3B0aW9uc0ZldGNoZXI8R0ZFT19GPixcbiAgICBwcml2YXRlIGdldEZsaWdodFNlYXJjaEV4Y2hhbmdlRmV0Y2hlcjogQmFzZUZsaWdodFNlYXJjaEV4Y2hhbmdlRmV0Y2hlcjxGU0VfRj4sXG4gICAgcHJpdmF0ZSBnZXRGbGlnaHRFeGNoYW5nZURldGFpbHNGZXRjaGVyOiBCYXNlRmxpZ2h0RXhjaGFuZ2VEZXRhaWxzRmV0Y2hlcjxGRURfRj4sXG4gICAgcHJpdmF0ZSB1cGRhdGVGbGlnaHRTZWF0TWFwVXBkYXRlcjogQmFzZVVwZGF0ZUZsaWdodFNlYXRNYXBVcGRhdGVyPFVGU19VPlxuICApIHtcbiAgICBzdXBlcihzdG9yYWdlU2VydmljZSwgaGVscGVycywgc2VhcmNoU2VydmljZSwgdXNlclNlcnZpY2UpO1xuXG4gICAgY29uc3QgZGF0YToge1xuICAgICAgdGVtcFBhcmFtczogRmxpZ2h0VGVtcFBhcmFtcztcbiAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogRmxpZ2h0VGVtcFBhcmFtcztcbiAgICB9ID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TKSB8fCB7XG4gICAgICB0ZW1wUGFyYW1zOiB7fSBhcyBGbGlnaHRUZW1wUGFyYW1zLFxuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB7fSBhcyBGbGlnaHRUZW1wUGFyYW1zXG4gICAgfTtcblxuICAgIHRoaXMudXNlclNlcnZpY2UuZnVsbFVzZXJEZXRhaWxzLnVzZXJDb25maWdzLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCcrKysgVXNlciBDb25maWdzIEdyYWJiZWQgKysrJyk7XG4gICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckZhdm9yaXRlT2JqZWN0KFVzZXJGYXZvcnVyaXRlLkZsaWdodFNlYXJjaERlZmF1bHRzKSk7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICB0aGlzLmRpcmVjdERlZmF1bHRWYWx1ZSA9IChcbiAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJGYXZvcml0ZU9iamVjdChVc2VyRmF2b3J1cml0ZS5GbGlnaHRTZWFyY2hEZWZhdWx0cykgYXMgYW55XG4gICAgICAgICk/LmRpcmVjdEJ5RGVmYXVsdDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHF1ZXJ5ID0gc2VhcmNoU2VydmljZS5tYWtlRmxpZ2h0UXVlcnkoZGF0YS50ZW1wUGFyYW1zKTtcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXMocXVlcnkpO1xuICAgIHRoaXMuX29yaWdpbmFsVXNlclNlYXJjaCA9IGRhdGEub3JpZ2luYWxVc2VyU2VhcmNoO1xuICAgIGlmIChzZWFyY2hTZXJ2aWNlLnNob3VsZEFkZFRyYXZlbGxlclN1YnNjcmlwdGlvbigpKSB7XG4gICAgICBzZWFyY2hTZXJ2aWNlLnRyYXZlbGxlckluZm9ybWF0aW9uLnN1YnNjcmliZSgodHJhdmVsbGVyczogVHJhdmVsbGVyW10pID0+IHtcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzID0gdHJhdmVsbGVycztcbiAgICAgICAgY29uc3Qgc3BsaXRUcmF2ZWxsZXJzID0gdGhpcy5oZWxwZXJzLnNlbGVjdGVkVHJhdmVsbGVycyh0cmF2ZWxsZXJzLCBTZXJ2aWNlVHlwZS5GbGlnaHQpO1xuICAgICAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gc3BsaXRUcmF2ZWxsZXJzLmFkdWx0cy5sZW5ndGg7XG4gICAgICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IHNwbGl0VHJhdmVsbGVycy5jaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgIC8vIHRoaXMudGVtcFBhcmFtcy5pbmZhbnRzID0gc3BsaXRUcmF2ZWxsZXJzLmluZmFudHMubGVuZ3RoO1xuICAgICAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlcnMoKTtcbiAgICAgICAgdGhpcy5faXNWYWxpZCgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdXNlclNlcnZpY2UuY2hhbmdlVXNlci5zdWJzY3JpYmUoKF91c2VyOiBGdWxsVXNlckRldGFpbHMpID0+IHtcbiAgICAgIHRoaXMudGltZUNyaXRlcmlhT3B0aW9ucy5uZXh0KFtUaW1lV2luZG93LkFueXRpbWUsIFRpbWVXaW5kb3cuQXJyaXZlLCBUaW1lV2luZG93LkRlcGFydF0pOyAvLyBUT0RPIHVwZGF0ZSB3aXRoIGFueSBVRnNcbiAgICAgIHRoaXMuZmxpZ2h0T3BlcmF0b3JzLm5leHQoW3sgY29kZTogJ0JBJywgbmFtZTogJ0JyaXRpc2ggQWlyd2F5cycgfV0pOyAvLyBGZXRjaCB0aGVzZSBmcm9tIERCXG4gICAgICB0aGlzLnVwZGF0ZVNlYXJjaERlZmF1bHRzKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlcnMoKTtcblxuICAgIHRoaXMubmVnb3RpYXRlZCA9IHRoaXMudGVtcFBhcmFtcy5mYXJlVHlwZSA9PT0gRmFyZVR5cGUuTmVnb3RpYXRlZCA/IHRydWUgOiBmYWxzZTtcbiAgfVxuXG4gIGdldEZsaWdodEV4Y2hhbmdlU2VhcmNoKFxuICAgIGJhc2tldEl0ZW1JZDogbnVtYmVyLFxuICAgIG91dGJvdW5kRGF0ZT86IHN0cmluZyxcbiAgICBpbmJvdW5kRGF0ZT86IHN0cmluZyxcbiAgICBvdXRib3VuZENsYXNzPzogc3RyaW5nLFxuICAgIHJldHVybkNsYXNzPzogc3RyaW5nXG4gICk6IFByb21pc2U8RmxpZ2h0Sm91cm5leUV4Y2hhbmdlPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RmxpZ2h0U2VhcmNoRXhjaGFuZ2VGZXRjaGVyXG4gICAgICAuZmV0Y2hPbmUoe1xuICAgICAgICBiYXNrZXRJdGVtOiBiYXNrZXRJdGVtSWQudG9TdHJpbmcoKSxcbiAgICAgICAgb3V0Ym91bmREYXRlLFxuICAgICAgICBpbmJvdW5kRGF0ZSxcbiAgICAgICAgb3V0Ym91bmRDbGFzcyxcbiAgICAgICAgcmV0dXJuQ2xhc3NcbiAgICAgIH0pXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBnZXRGbGlnaHRFeGNoYW5nZURldGFpbHMoXG4gICAgYmFza2V0SXRlbUlkOiBzdHJpbmcsXG4gICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9uc1xuICApOiBQcm9taXNlPEZsaWdodEV4Y2hhbmdlRGV0YWlscz4ge1xuICAgIHJldHVybiB0aGlzLmdldEZsaWdodEV4Y2hhbmdlRGV0YWlsc0ZldGNoZXJcbiAgICAgIC5mZXRjaE9uZSh7XG4gICAgICAgIGJhc2tldEl0ZW06IGAke2Jhc2tldEl0ZW1JZH1gLFxuICAgICAgICBmbGlnaHRJdGluZXJhcnlcbiAgICAgIH0pXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvY2Vzc1Jlc3VsdHMocmVzdWx0czogRmxpZ2h0QWxsUXVvdGVSZXN1bHQpOiBGbGlnaHRRdW90ZVJlc3VsdEFycmF5IHtcbiAgICB0aGlzLmlzTG9hZGluZ1NTTyA9IGZhbHNlO1xuICAgIGlmICghcmVzdWx0cykge1xuICAgICAgdGhpcy5fZ3JvdXBlZCA9IFtdO1xuICAgICAgdGhpcy5tdWx0aSA9IFtdO1xuICAgICAgdGhpcy5yZXN1bHRRdWVyeSA9IG51bGw7XG4gICAgICB0aGlzLnNlYXJjaEJ5U2NoZWR1bGUgPSBbXTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgdGhpcy5fZ3JvdXBlZCA9IHJlc3VsdHMuZ3JvdXBlZCB8fCBbXTtcbiAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgam91cm5leVdoZW5TZWxlY3RlZDoge30sXG4gICAgICAgIGR1YWxTaW5nbGVXaGVuU2VsZWN0ZWQ6IHt9LFxuICAgICAgICB3aGVuU2VsZWN0ZWRBbG9uZToge31cbiAgICAgIH0sXG4gICAgICByZXN1bHRzLnJ1bGVBY3Rpb25TdW1tYXJ5IHx8IHt9XG4gICAgKTtcblxuICAgIHRoaXMucmVzdWx0UXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XG4gICAgdGhpcy5tdWx0aSA9IHJlc3VsdHMubXVsdGk7XG4gICAgaWYgKHRoaXMuY2hvc2VuU2VhcmNoVHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5tdWx0aUNpdHkpIHtcbiAgICAgIHRoaXMuaW5pdE11bHRpQ2l0eVNlYXJjaEJ5U2NoZWR1bGUocmVzdWx0cywgdHJ1ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuKSB7XG4gICAgICB0aGlzLmluaXRNdWx0aUNpdHlTZWFyY2hCeVNjaGVkdWxlKHJlc3VsdHMsIGZhbHNlKTtcbiAgICB9XG5cbiAgICAvLyBkZWxldGUgdGhpcy5yZXN1bHRRdWVyeVsnd2l0aEdyb3VwZWQnXTtcbiAgICBjb25zdCBkdWFsU2luZ2xlcyA9IHJlc3VsdHMubXVsdGkucmVkdWNlKFxuICAgICAgKFxuICAgICAgICBwcmV2aW91c0l0ZW1zOiB7XG4gICAgICAgICAgb3V0Ym91bmQ6IFJlY29yZDxudW1iZXIsIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zPjtcbiAgICAgICAgICBpbmJvdW5kOiBSZWNvcmQ8bnVtYmVyLCBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucz47XG4gICAgICAgIH0sXG4gICAgICAgIG5leHRJdGVtOiBJdGluZXJhcnlTdW1tYXJ5XG4gICAgICApID0+IHtcbiAgICAgICAgcHJldmlvdXNJdGVtc1tuZXh0SXRlbS5vcmRlciA9PT0gT1VUQk9VTkQgPyAnb3V0Ym91bmQnIDogJ2luYm91bmQnXSA9XG4gICAgICAgICAgbmV4dEl0ZW0ucmVzdWx0cy5yZWR1Y2UoXG4gICAgICAgICAgICAoXG4gICAgICAgICAgICAgIGFjY3VtOiBSZWNvcmQ8bnVtYmVyLCBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucz4sXG4gICAgICAgICAgICAgIGZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcbiAgICAgICAgICAgICk6IFJlY29yZDxudW1iZXIsIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zPiA9PiB7XG4gICAgICAgICAgICAgIC8vIG9ubHkgdG9wIDUlIG9mIGZsaWdodCBub3cgdGhleSBhcmUgaW4gb3JkZXIgc28gaW5kZXggPCA1JSB0b3RhbFxuICAgICAgICAgICAgICBhY2N1bVtmbGlnaHQudWlkXSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgY2FuU2VsZWN0OiB0cnVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmbGlnaHRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZXZpb3VzSXRlbXNbbmV4dEl0ZW0ub3JkZXIgPT09IE9VVEJPVU5EID8gJ291dGJvdW5kJyA6ICdpbmJvdW5kJ11cbiAgICAgICAgICApO1xuICAgICAgICByZXR1cm4gcHJldmlvdXNJdGVtcztcbiAgICAgIH0sXG4gICAgICB7IG91dGJvdW5kOiB7fSwgaW5ib3VuZDoge30gfVxuICAgICk7XG4gICAgLy8gY29uc29sZS5sb2coZHVhbFNpbmdsZXMpO1xuICAgIGNvbnN0IGR1YWxJbmJvdW5kRmlsdGVycyA9IHRoaXMuaGVscGVycy5jcmVhdGVGbGlnaHRGaWx0ZXJzKFxuICAgICAgT2JqZWN0LnZhbHVlcyhkdWFsU2luZ2xlcy5pbmJvdW5kKSxcbiAgICAgIERFRkFVTFRfRkxJR0hUX0ZJTFRFUlMsXG4gICAgICB0aGlzLnZpYVxuICAgICk7XG5cbiAgICB0aGlzLmR1cmFsU2luZ2xlRmlsdGVyLm5leHQoXG4gICAgICB0aGlzLmhlbHBlcnMuY3JlYXRlRmxpZ2h0RmlsdGVycyhcbiAgICAgICAgT2JqZWN0LnZhbHVlcyhkdWFsU2luZ2xlcy5vdXRib3VuZCksXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5ERUZBVUxUX0ZMSUdIVF9GSUxURVJTLFxuICAgICAgICAgIHByaWNlOiBkdWFsSW5ib3VuZEZpbHRlcnMucHJpY2UsXG4gICAgICAgICAgYXJyaXZhbFJldHVybkFpcnBvcnQ6IGR1YWxJbmJvdW5kRmlsdGVycy5hcnJpdmFsQWlycG9ydCxcbiAgICAgICAgICBkZXBhdHVyZVJldHVybkFpcnBvcnQ6IGR1YWxJbmJvdW5kRmlsdGVycy5kZXBhdHVyZUFpcnBvcnQsXG4gICAgICAgICAgcmV0dXJuQXJyaXZhbFRpbWU6IGR1YWxJbmJvdW5kRmlsdGVycy5hcnJpdmFsVGltZSxcbiAgICAgICAgICByZXR1cm5EdXJhdGlvbjogZHVhbEluYm91bmRGaWx0ZXJzLmR1cmF0aW9uLFxuICAgICAgICAgIHJldHVybkRlcGFydHVyZVRpbWU6IGR1YWxJbmJvdW5kRmlsdGVycy5kZXBhcnR1cmVUaW1lXG4gICAgICAgIH0sXG4gICAgICAgICh0aGlzLnZpYSBhcyBPQlRBaXJwb3J0RGV0YWlscyk/LmdhdGV3YXlcbiAgICAgIClcbiAgICApO1xuXG4gICAgIXJlc3VsdHMuam91cm5leXM/Lmxlbmd0aCAmJiAocmVzdWx0cy5tdWx0aVswXT8ucmVzdWx0cyB8fCByZXN1bHRzLm11bHRpWzFdPy5yZXN1bHRzKVxuICAgICAgPyB0aGlzLnNldEZsaWdodERpc3BsYXlUeXBlKEZsaWdodERpc3BsYXlUeXBlcy5kdWFsU2luZ2xlcylcbiAgICAgIDogdGhpcy5zZXRGbGlnaHREaXNwbGF5VHlwZShGbGlnaHREaXNwbGF5VHlwZXMucmV0dXJucyk7XG4gICAgdGhpcy5fY2hlYXBlc3RQcmljZU9iamVjdC5yZXR1cm5zID0gdGhpcy5jcmVhdGVDaGVhcGVzdFByaWNlKHJlc3VsdHMuam91cm5leXMpO1xuICAgIHRoaXMuX2NoZWFwZXN0UHJpY2VPYmplY3QuZHVhbE91dGJvdW5kID0gdGhpcy5jcmVhdGVDaGVhcGVzdFByaWNlKFxuICAgICAgcmVzdWx0cy5tdWx0aVswXT8ucmVzdWx0cyBhcyBGbGlnaHRJdGluZXJhcnlbXVxuICAgICk7XG4gICAgdGhpcy5fY2hlYXBlc3RQcmljZU9iamVjdC5kdWFsSW5ib3VuZCA9IHRoaXMuY3JlYXRlQ2hlYXBlc3RQcmljZShcbiAgICAgIHJlc3VsdHMubXVsdGlbMV0/LnJlc3VsdHMgYXMgRmxpZ2h0SXRpbmVyYXJ5W11cbiAgICApO1xuXG4gICAgbGV0IHVwZGF0ZWRSZXN1bHRzID0geyAuLi5yZXN1bHRzIH07XG4gICAgdXBkYXRlZFJlc3VsdHMuc2VhcmNoQnlTY2hlZHVsZSA9IHRoaXMuc2VhcmNoQnlTY2hlZHVsZTtcbiAgICB0aGlzLmdyZWVuZXJDaG9pY2UgPSBuZXcgR3JlZW5lckNob2ljZUltcGwodXBkYXRlZFJlc3VsdHMpO1xuICAgIGNvbnN0IHJlc3VsdHNXaXRoRXh0ZW5zaW9ucyA9IHRoaXMubWFkZUZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKHVwZGF0ZWRSZXN1bHRzKTtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXJzID0gdGhpcy5oZWxwZXJzLmNyZWF0ZUZsaWdodEZpbHRlcnMoXG4gICAgICByZXN1bHRzV2l0aEV4dGVuc2lvbnMuam91cm5leXMsXG4gICAgICBERUZBVUxUX0ZMSUdIVF9GSUxURVJTLFxuICAgICAgKHRoaXMudmlhIGFzIE9CVEFpcnBvcnREZXRhaWxzKT8uZ2F0ZXdheVxuICAgICk7XG4gICAgdGhpcy5maWx0ZXJzLm5leHQodGhpcy5jdXJyZW50RmlsdGVycyk7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmNob3NlblNlYXJjaFR5cGUgIT09IEZsaWdodFNlYXJjaFR5cGUub25lV2F5ICYmXG4gICAgICByZXN1bHRzV2l0aEV4dGVuc2lvbnMuc2VhcmNoQnlTY2hlZHVsZS5sZW5ndGhcbiAgICApIHtcbiAgICAgIHRoaXMuY3VzdG9tU2NoZWR1bGVkRmlsdGVycyA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm11bHRpRGVzdGluYXRpb24ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5oZWxwZXJzLmNyZWF0ZUZsaWdodEZpbHRlcnMoXG4gICAgICAgICAgcmVzdWx0c1dpdGhFeHRlbnNpb25zLnNlYXJjaEJ5U2NoZWR1bGVbaV0sXG4gICAgICAgICAgREVGQVVMVF9GTElHSFRfRklMVEVSU1xuICAgICAgICApO1xuICAgICAgICB0aGlzLmN1c3RvbVNjaGVkdWxlZEZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgICAgfVxuICAgICAgdGhpcy5zY2hlZHVsZWRGaWx0ZXJzLm5leHQodGhpcy5jdXN0b21TY2hlZHVsZWRGaWx0ZXJzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlZFJlc3VsdHMgPyBbdXBkYXRlZFJlc3VsdHNdIDogW107XG4gIH1cblxuICBpbml0TXVsdGlDaXR5U2VhcmNoQnlTY2hlZHVsZShyZXN1bHRzOiBGbGlnaHRBbGxRdW90ZVJlc3VsdCwgaXNNdWx0aUNpdHk6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNlYXJjaEJ5U2NoZWR1bGUgPSBbXTtcbiAgICBpZiAocmVzdWx0cz8uam91cm5leXMubGVuZ3RoKSB7XG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5tdWx0aURlc3RpbmF0aW9uLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICByZXN1bHRzLmpvdXJuZXlzLmZvckVhY2goKGZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMpID0+IHtcbiAgICAgICAgICBjb25zdCBmbGlnaHRzID0gaXNNdWx0aUNpdHlcbiAgICAgICAgICAgID8gZmxpZ2h0Lm91dGJvdW5kRmxpZ2h0cy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKG91dGJvdW5kRmxpZ2h0OiBGbGlnaHRKb3VybmV5KSA9PiBvdXRib3VuZEZsaWdodC5zZWdtZW50R3JvdXAgPT09IGluZGV4XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogaW5kZXggPT09IDBcbiAgICAgICAgICAgID8gZmxpZ2h0Lm91dGJvdW5kRmxpZ2h0c1xuICAgICAgICAgICAgOiBmbGlnaHQuaW5ib3VuZEZsaWdodHM7XG5cbiAgICAgICAgICBpZiAoIXRoaXMuc2VhcmNoQnlTY2hlZHVsZVtpbmRleF0pIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoQnlTY2hlZHVsZVtpbmRleF0gPSBbXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmxpZ2h0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoQnlTY2hlZHVsZVtpbmRleF0ucHVzaCh7XG4gICAgICAgICAgICAgIHByZWZlcnJlZDogZmxpZ2h0LnByZWZlcnJlZCxcbiAgICAgICAgICAgICAgcHJlZmVycmVkTWVzc2FnZXM6IGZsaWdodC5wcmVmZXJyZWRNZXNzYWdlcyxcbiAgICAgICAgICAgICAgcHJlZmVyZW5jZUxldmVsOiBmbGlnaHQucHJlZmVyZW5jZUxldmVsLFxuICAgICAgICAgICAgICBzb3VyY2U6IGZsaWdodC5zb3VyY2UsXG4gICAgICAgICAgICAgIGJhZ2dhZ2VBbGxvd2FuY2U6IGZsaWdodC5iYWdnYWdlQWxsb3dhbmNlLFxuICAgICAgICAgICAgICBkaXNjbG9zdXJlczogZmxpZ2h0LmRpc2Nsb3N1cmVzLFxuICAgICAgICAgICAgICBhZGRpdGlvbmFsOiBmbGlnaHQuYWRkaXRpb25hbCxcbiAgICAgICAgICAgICAgZmFyZUNvbmRpdGlvbnM6IGZsaWdodC5mYXJlQ29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgb3V0Ym91bmRUb3RhbER1cmF0aW9uOiB0aGlzLmhlbHBlcnMuZ2V0VGltZURpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgZmxpZ2h0c1tmbGlnaHRzLmxlbmd0aCAtIDFdPy5kYXRlVGltZUFycml2aW5nLFxuICAgICAgICAgICAgICAgIGZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmdcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgb3V0Ym91bmRGbGlnaHRzOiBmbGlnaHRzLFxuICAgICAgICAgICAgICBzY2hlZHVsZUlkOiBmbGlnaHRzXG4gICAgICAgICAgICAgICAgLm1hcChpdGVtID0+IGl0ZW0uaWQpXG4gICAgICAgICAgICAgICAgLnNvcnQoKVxuICAgICAgICAgICAgICAgIC5qb2luKCcsJyksXG4gICAgICAgICAgICAgIGNvMlBlckl0ZW06IGZsaWdodHMucmVkdWNlKChhY2MsIG9iaikgPT4gYWNjICsgb2JqLmNvMlBlckl0ZW0sIDApLFxuICAgICAgICAgICAgICBjbzJQZXJQYXNzZW5nZXI6IGZsaWdodHMucmVkdWNlKChhY2MsIG9iaikgPT4gYWNjICsgb2JqLmNvMlBlclBhc3NlbmdlciwgMCksXG4gICAgICAgICAgICAgIGpvdXJuZXlIYXNoOiBmbGlnaHRzWzBdLmpvdXJuZXlIYXNoLFxuICAgICAgICAgICAgICBzYWZSYXRpbmc6IGZsaWdodHNbMF0uc2FmUmF0aW5nLFxuICAgICAgICAgICAgICBncmVlbmVyQ2hvaWNlOiBmYWxzZSxcbiAgICAgICAgICAgICAgZ3JlZW5lckNob2ljZVBlcmNlbnRhZ2U6IDAsXG4gICAgICAgICAgICAgIHNvdXJjZUlkOiBmbGlnaHQuc291cmNlSWQsXG4gICAgICAgICAgICAgIGluYm91bmRGbGlnaHRzOiBbXSxcbiAgICAgICAgICAgICAgdWlkOiBudWxsLFxuICAgICAgICAgICAgICB0b3RhbDogeyBwcmljZTogMCwgY3VycmVuY3k6IG51bGwgfSxcbiAgICAgICAgICAgICAgcGFzc2VuZ2VyQ291bnQ6IDAsXG4gICAgICAgICAgICAgIHZlcnNpb246ICcnLFxuICAgICAgICAgICAgICB0bWNQcmVmZXJyZWRMb2dvVXJsOiAnJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGVGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyhmbGlnaHQ6RmxpZ2h0SXRpbmVyYXJ5LCBydWxlczpSdWxlQWN0aW9uU3VtbWFyeUludGVyZmFjZSkge1xuICAgIGNvbnN0IGlzRHVhbFNpbmdsZVdoZW5TZWxlY3RlZCAgPSB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5kdWFsU2luZ2xlV2hlblNlbGVjdGVkW2ZsaWdodC5qb3VybmV5SGFzaF07XG4gICAgY29uc3QgaXNKb3VybmV5V2hlblNlbGVjdGVkID0gdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtmbGlnaHQuam91cm5leUhhc2hdO1xuICAgIGNvbnN0IGlzV2hlblNlbGVjdGVkQWxvbmUgPSB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtmbGlnaHQuam91cm5leUhhc2hdO1xuICAgIGlmIChpc0R1YWxTaW5nbGVXaGVuU2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWRbZmxpZ2h0LmpvdXJuZXlIYXNoXSA9IHJ1bGVzLmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWRbZmxpZ2h0LmpvdXJuZXlIYXNoXTtcbiAgICB9IGVsc2UgaWYgKGlzSm91cm5leVdoZW5TZWxlY3RlZCkge1xuICAgICAgaWYgKHJ1bGVzLmpvdXJuZXlXaGVuU2VsZWN0ZWRbZmxpZ2h0LmpvdXJuZXlIYXNoXSkge1xuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2ZsaWdodC5qb3VybmV5SGFzaF0gPSBydWxlcy5qb3VybmV5V2hlblNlbGVjdGVkW2ZsaWdodC5qb3VybmV5SGFzaF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtmbGlnaHQuam91cm5leUhhc2hdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNXaGVuU2VsZWN0ZWRBbG9uZSkge1xuICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbZmxpZ2h0LmpvdXJuZXlIYXNoXSA9IHJ1bGVzLndoZW5TZWxlY3RlZEFsb25lW2ZsaWdodC5qb3VybmV5SGFzaF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYWRlRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMocmVzdWx0czogYW55KTogRmxpZ2h0QWxsUXVvdGVSZXN1bHQge1xuICAgIHJlc3VsdHMuam91cm5leXMubWFwKChmbGlnaHRJdGVtOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucykgPT4ge1xuICAgICAgZmxpZ2h0SXRlbSA9IHRoaXMuYWRkUnVsZXNUb0ZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKGZsaWdodEl0ZW0pO1xuICAgIH0pO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm11bHRpRGVzdGluYXRpb24ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdHMuc2VhcmNoQnlTY2hlZHVsZVtpXT8ubWFwKChmbGlnaHRJdGVtOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucykgPT4ge1xuICAgICAgICBmbGlnaHRJdGVtID0gdGhpcy5hZGRSdWxlc1RvRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMoZmxpZ2h0SXRlbSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXN1bHRzLm11bHRpWzBdPy5yZXN1bHRzLm1hcCgoZmxpZ2h0SXRlbTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMpID0+IHtcbiAgICAgIGZsaWdodEl0ZW0gPSB0aGlzLmFkZFJ1bGVzVG9GbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyhmbGlnaHRJdGVtKTtcbiAgICB9KTtcblxuICAgIHJlc3VsdHMubXVsdGlbMV0/LnJlc3VsdHMubWFwKChmbGlnaHRJdGVtOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucykgPT4ge1xuICAgICAgZmxpZ2h0SXRlbS5wcmVmZXJyZWQgPSBQcmVmZXJyZWRGbGFncy5ub25lO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICBwdWJsaWMgYWRkUnVsZXNUb0ZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKFxuICAgIGl0ZW06IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxuICAgIHJ1bGVzOiBSdWxlQWN0aW9uU3VtbWFyeUludGVyZmFjZSA9IHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5XG4gICk6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zIHtcbiAgICBjb25zdCB7IGpvdXJuZXlXaGVuU2VsZWN0ZWQsIHdoZW5TZWxlY3RlZEFsb25lIH0gPSBydWxlcztcbiAgICBjb25zdCBjb21wYW55UHJlZmVycmVkID1cbiAgICAgIHJ1bGVzLmpvdXJuZXlXaGVuU2VsZWN0ZWRbaXRlbS5qb3VybmV5SGFzaF0/LmNvbXBhbnlQcmVmZXJyZWQgfHxcbiAgICAgIHJ1bGVzLndoZW5TZWxlY3RlZEFsb25lW2l0ZW0uam91cm5leUhhc2hdPy5jb21wYW55UHJlZmVycmVkO1xuICAgIGNvbnN0IG9mZmljZVByZWZlcnJlZCA9XG4gICAgICBqb3VybmV5V2hlblNlbGVjdGVkW2l0ZW0uam91cm5leUhhc2hdPy5vZmZpY2VQcmVmZXJyZWQgfHxcbiAgICAgIHdoZW5TZWxlY3RlZEFsb25lW2l0ZW0uam91cm5leUhhc2hdPy5vZmZpY2VQcmVmZXJyZWQ7XG4gICAgY29uc3QgdG1jUHJlZmVycmVkID1cbiAgICAgIGpvdXJuZXlXaGVuU2VsZWN0ZWRbaXRlbS5qb3VybmV5SGFzaF0/LnRtY1ByZWZlcnJlZCB8fFxuICAgICAgd2hlblNlbGVjdGVkQWxvbmVbaXRlbS5qb3VybmV5SGFzaF0/LnRtY1ByZWZlcnJlZDtcblxuICAgIGl0ZW0ucHJlZmVycmVkID0gY29tcGFueVByZWZlcnJlZFxuICAgICAgPyBQcmVmZXJyZWRGbGFncy5jb21wYW55UHJlZmVycmVkXG4gICAgICA6IG9mZmljZVByZWZlcnJlZFxuICAgICAgPyBQcmVmZXJyZWRGbGFncy5vZmZpY2VQcmVmZXJyZWRcbiAgICAgIDogdG1jUHJlZmVycmVkXG4gICAgICA/IFByZWZlcnJlZEZsYWdzLnRtY1ByZWZlcnJlZFxuICAgICAgOiBQcmVmZXJyZWRGbGFncy5ub25lO1xuXG4gICAgY29uc3QgY29tcGFueVByZWZlcnJlZE1lc3NhZ2UgPVxuICAgICAgam91cm5leVdoZW5TZWxlY3RlZFtpdGVtLmpvdXJuZXlIYXNoXT8uY29tcGFueVByZWZlcnJlZE1lc3NhZ2UgfHxcbiAgICAgIHdoZW5TZWxlY3RlZEFsb25lW2l0ZW0uam91cm5leUhhc2hdPy5jb21wYW55UHJlZmVycmVkTWVzc2FnZSB8fFxuICAgICAgJyc7XG4gICAgY29uc3Qgb2ZmaWNlUHJlZmVycmVkTWVzc2FnZSA9XG4gICAgICBqb3VybmV5V2hlblNlbGVjdGVkW2l0ZW0uam91cm5leUhhc2hdPy5vZmZpY2VQcmVmZXJyZWRNZXNzYWdlIHx8XG4gICAgICB3aGVuU2VsZWN0ZWRBbG9uZVtpdGVtLmpvdXJuZXlIYXNoXT8ub2ZmaWNlUHJlZmVycmVkTWVzc2FnZSB8fFxuICAgICAgJyc7XG4gICAgY29uc3QgdG1jUHJlZmVycmVkTWVzc2FnZSA9XG4gICAgICBqb3VybmV5V2hlblNlbGVjdGVkW2l0ZW0uam91cm5leUhhc2hdPy50bWNQcmVmZXJyZWRNZXNzYWdlIHx8XG4gICAgICB3aGVuU2VsZWN0ZWRBbG9uZVtpdGVtLmpvdXJuZXlIYXNoXT8udG1jUHJlZmVycmVkTWVzc2FnZSB8fFxuICAgICAgJyc7XG5cbiAgICBpdGVtLnByZWZlcnJlZE1lc3NhZ2VzID0ge1xuICAgICAgW1ByZWZlcnJlZEZsYWdzLmNvbXBhbnlQcmVmZXJyZWRdOiBjb21wYW55UHJlZmVycmVkTWVzc2FnZSxcbiAgICAgIFtQcmVmZXJyZWRGbGFncy5vZmZpY2VQcmVmZXJyZWRdOiBvZmZpY2VQcmVmZXJyZWRNZXNzYWdlLFxuICAgICAgW1ByZWZlcnJlZEZsYWdzLnRtY1ByZWZlcnJlZF06IHRtY1ByZWZlcnJlZE1lc3NhZ2UsXG4gICAgICBbUHJlZmVycmVkRmxhZ3MuYWxsXTpcbiAgICAgICAgYCR7Y29tcGFueVByZWZlcnJlZE1lc3NhZ2V9ICR7b2ZmaWNlUHJlZmVycmVkTWVzc2FnZX0gJHt0bWNQcmVmZXJyZWRNZXNzYWdlfWAudHJpbSgpIHx8ICcnLFxuICAgICAgW1ByZWZlcnJlZEZsYWdzLm5vbmVdOiAnJ1xuICAgIH07XG5cbiAgICBpdGVtLnByZWZlcmVuY2VMZXZlbCA9XG4gICAgICAram91cm5leVdoZW5TZWxlY3RlZFtpdGVtLmpvdXJuZXlIYXNoXT8ucHJlZmVyZW5jZUxldmVsIHx8XG4gICAgICArd2hlblNlbGVjdGVkQWxvbmVbaXRlbS5qb3VybmV5SGFzaF0/LnByZWZlcmVuY2VMZXZlbCB8fFxuICAgICAgbnVsbDtcblxuICAgIGl0ZW0ucmVxdWlyZXNSZWFzb25LZXlzID1cbiAgICAgIHJ1bGVzLmpvdXJuZXlXaGVuU2VsZWN0ZWRbaXRlbS5qb3VybmV5SGFzaF0/LnJlcXVpcmVzUmVhc29uS2V5cyB8fFxuICAgICAgcnVsZXMud2hlblNlbGVjdGVkQWxvbmVbaXRlbS5qb3VybmV5SGFzaF0/LnJlcXVpcmVzUmVhc29uS2V5cztcbiAgICBpdGVtLnJlcXVpcmVzUmVhc29uTWVzc2FnZXMgPVxuICAgICAgam91cm5leVdoZW5TZWxlY3RlZFtpdGVtLmpvdXJuZXlIYXNoXT8ucmVxdWlyZXNSZWFzb25NZXNzYWdlcyB8fFxuICAgICAgd2hlblNlbGVjdGVkQWxvbmVbaXRlbS5qb3VybmV5SGFzaF0/LnJlcXVpcmVzUmVhc29uTWVzc2FnZXMgfHxcbiAgICAgIFtdO1xuXG4gICAgaXRlbS51bmF2YWlsYWJsZSA9XG4gICAgICBydWxlcy5qb3VybmV5V2hlblNlbGVjdGVkW2l0ZW0uam91cm5leUhhc2hdPy51bmF2YWlsYWJsZSB8fFxuICAgICAgcnVsZXMud2hlblNlbGVjdGVkQWxvbmVbaXRlbS5qb3VybmV5SGFzaF0/LnVuYXZhaWxhYmxlO1xuICAgIGl0ZW0udW5hdmFpbGFibGVNZXNzYWdlID1cbiAgICAgIGpvdXJuZXlXaGVuU2VsZWN0ZWRbaXRlbS5qb3VybmV5SGFzaF0/LnVuYXZhaWxhYmxlTWVzc2FnZSB8fFxuICAgICAgd2hlblNlbGVjdGVkQWxvbmVbaXRlbS5qb3VybmV5SGFzaF0/LnVuYXZhaWxhYmxlTWVzc2FnZSB8fFxuICAgICAgJyc7XG5cbiAgICBpdGVtLnRtY1ByZWZlcnJlZExvZ29VcmwgPVxuICAgICAgam91cm5leVdoZW5TZWxlY3RlZFtpdGVtLmpvdXJuZXlIYXNoXT8udG1jUHJlZmVycmVkTG9nb1VybCB8fFxuICAgICAgd2hlblNlbGVjdGVkQWxvbmVbaXRlbS5qb3VybmV5SGFzaF0/LnRtY1ByZWZlcnJlZExvZ29VcmwgfHxcbiAgICAgICcnO1xuXG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cblxuXG4gIHByb3RlY3RlZCBtYWtlU2Vzc2lvblJlc3VsdHMoZGF0YTogRmxpZ2h0UXVvdGVSZXN1bHRBcnJheSk6IEZsaWdodFNlc3Npb25UeXBlIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzdWx0czogZGF0YSxcbiAgICAgIGdyb3VwZWQ6IHRoaXMuX2dyb3VwZWQsXG4gICAgICBxdWVyeTogdGhpcy5yZXN1bHRRdWVyeVxuICAgIH07XG4gIH1cblxuICBnZXRNYXhGbGlnaHRQcmljZUZvckJyYW5kKG1hdGNoaW5nQnJhbmRGbGlnaHRzOiBGbGlnaHRJdGluZXJhcnlbXSk6IG51bWJlciB7XG4gICAgbGV0IG1heCA9IDA7XG4gICAgbWF0Y2hpbmdCcmFuZEZsaWdodHMuZm9yRWFjaChmbGlnaHQgPT4ge1xuICAgICAgaWYgKG1heCA8IGZsaWdodD8udG90YWw/LnByaWNlKSB7XG4gICAgICAgIG1heCA9IGZsaWdodC50b3RhbC5wcmljZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbWF4O1xuICB9XG4gIGdldE1pbkZsaWdodFByaWNlRm9yQnJhbmQobWF0Y2hpbmdCcmFuZEZsaWdodHM6IEZsaWdodEl0aW5lcmFyeVtdKTogbnVtYmVyIHtcbiAgICBsZXQgbWluID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG4gICAgbWF0Y2hpbmdCcmFuZEZsaWdodHMuZm9yRWFjaChmbGlnaHQgPT4ge1xuICAgICAgaWYgKG1pbiA+IGZsaWdodD8udG90YWw/LnByaWNlKSB7XG4gICAgICAgIG1pbiA9IGZsaWdodC50b3RhbC5wcmljZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbWluO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc2V0UXVlcnkoY2hlY2tJc1ZhbGlkOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyh0aGlzLnNlYXJjaFNlcnZpY2UubWFrZUZsaWdodFF1ZXJ5KCkpO1xuICAgIGlmIChjaGVja0lzVmFsaWQpIHtcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVzZXRQYXJhbXMoKTogdm9pZCB7XG4gICAgdGhpcy5yZXNldCgpO1xuICAgIHRoaXMucmVzZXRRdWVyeSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNWYWxpZCgpIHtcbiAgICBpZiAoIXRoaXMuZG9DaGVja3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShGbGlnaHRFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsIHtcbiAgICAgIHRlbXBQYXJhbXM6IHRoaXMudGVtcFBhcmFtcyxcbiAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2hcbiAgICB9KTtcblxuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzID0gW107XG4gICAgaWYgKHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eSkge1xuICAgICAgdGhpcy5tdWx0aUNpdHlWYWxpZGF0aW9uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdGhpcy5fb3JpZ2luQWlycG9ydCkge1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2UgYWRkIGluIGEgZGVwYXJ0dXJlIGxvY2F0aW9uJyk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCkge1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2UgYWRkIGluIGFuIGFycml2YWwgZGVzdGluYXRpb24nKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZS5pc0FmdGVyKG1vbWVudCgpKSkge1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdEZXBhcnR1cmUgZGF0ZSBjYW4gbm90IGJlIGluIHRoZSBwYXN0Jyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5fb3JpZ2luQWlycG9ydCAmJlxuICAgICAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQgJiZcbiAgICAgICAgdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0ID09PSB0aGlzLl9vcmlnaW5BaXJwb3J0XG4gICAgICApIHtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnT3JpZ2luIGFuZCBkZXN0aW5hdGlvbiBhaXJwb3J0IGNhbm5vdCBiZSB0aGUgc2FtZScpO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaW5ib3VuZERhdGUuZGlmZih0aGlzLm91dEJvdW5kRGF0ZSwgJ3NlY29uZHMnKSA8PSAwICYmXG4gICAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhICE9PSBUaW1lV2luZG93LkFueXRpbWUgJiZcbiAgICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSAhPT0gVGltZVdpbmRvdy5Bbnl0aW1lXG4gICAgICApIHtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcbiAgICAgICAgICAnVGhlIHRpbWUgb2YgYXJyaXZhbCBjYW5ub3QgYmUgbGVzcyB0aGFuIHRoZSB0aW1lIG9mIGRlcGFydHVyZSdcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuaXNSZXR1cm4pIHtcbiAgICAgICAgLy8gVE9ETyBjaGVjayB0aGF0IHJldHVybiBkZXRhaWxzIGFyZSBzZXRcbiAgICAgICAgaWYgKHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUuaXNTYW1lT3JBZnRlcih0aGlzLnRlbXBQYXJhbXMuaW5UaW1lQ3JpdGVyaWEpKSB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUmV0dXJuIGRhdGUgbXVzdCBiZSBhZnRlciB0aGUgZGVwYXJ0dXJlIGRhdGUnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmlzVmFsaWQubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5sZW5ndGggPT09IDApO1xuICAgIHRoaXMubWVzc2FnZXMubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyk7XG4gIH1cblxuICBtdWx0aUNpdHlWYWxpZGF0aW9uKCkge1xuICAgIGxldCBpc2VtcHR5VmFsdWUgPSBmYWxzZTtcbiAgICBsZXQgaXNlbXB0eUxhbmRpbmcgPSBmYWxzZTtcbiAgICBsZXQgaXNTYW1lVmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLnRlbXBQYXJhbXMubXVsdGlEZXN0aW5hdGlvbi5tYXAoKGVsZW1lbnQsIGkpID0+IHtcbiAgICAgIGlmICghZWxlbWVudC5vcmlnKSB7XG4gICAgICAgIGlzZW1wdHlWYWx1ZSA9IHRydWU7XG4gICAgICAgIGlmIChpIDwgMikge1xuICAgICAgICAgIGlzZW1wdHlMYW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGVsZW1lbnQub3JpZyA9PT0gZWxlbWVudC5kZXN0KSBpc1NhbWVWYWx1ZSA9IHRydWU7XG4gICAgfSk7XG4gICAgaWYgKCFtb21lbnQodGhpcy50ZW1wUGFyYW1zLm11bHRpRGVzdGluYXRpb25bMF0uZGF0ZSkuaXNBZnRlcihtb21lbnQoKSkpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ0RlcGFydHVyZSBkYXRlIGNhbiBub3QgYmUgaW4gdGhlIHBhc3QnKTtcbiAgICB9XG4gICAgaWYgKGlzZW1wdHlMYW5kaW5nKSB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2Ugc2VsZWN0IGxhbmRpbmcgYWlycG9ydChzKScpO1xuICAgIGlmIChpc2VtcHR5VmFsdWUpIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBzZWxlY3QgdGFrZSBvZmYgYWlycG9ydChzKScpO1xuICAgIGlmIChpc1NhbWVWYWx1ZSlcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1Rha2Ugb2ZmIGFuZCBsYW5kaW5nIGxvY2F0aW9uKHMpIGNhbm5vdCBiZSB0aGUgc2FtZScpO1xuICB9XG4gIHN0YXJ0U2VhcmNoKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcbiAgICB0aGlzLnNlbGVjdGVkRmxpZ2h0Lm5leHQobnVsbCk7XG4gICAgY29uc3Qgc3M6IGFueSA9IHRoaXMuc3NvT2JqZWN0O1xuICAgIGlmIChzcyAmJiAhc3Muc2VhcmNoZWQpIHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nU1NPID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUud2FybignKysrIFN0YXJ0aW5nIHNlYXJjaCBmcm9tIHNzbyBvYmplY3QgKysrJyk7XG4gICAgICBzcy5zZWFyY2hlZCA9IHRydWU7XG4gICAgICB0aGlzLmZhcmVUeXBlID0gc3MuZmFyZVR5cGUgYXMgRmFyZVR5cGU7XG4gICAgICB0aGlzLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA9IHNzLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA9PT0gJ3RydWUnID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgLy8gdGhpcy5fb3JpZ2luQWlycG9ydD0gc3Mub3JpZ2luQWlycG9ydDtcbiAgICAgIHRoaXMub3V0Ym91bmRDYWJpbkNsYXNzID0gc3Mub3V0Ym91bmRDYWJpbkNsYXNzO1xuICAgICAgdGhpcy5jYWJpbkNsYXNzID0gc3Mub3V0Ym91bmRDYWJpbkNsYXNzO1xuICAgICAgY29uc3Qgc3BsaXRPdXREYXRlID0gc3Mub3V0Ym91bmREYXRlLnNwbGl0KCctJyk7XG4gICAgICBjb25zdCBvdXREYXRlT2JqID0ge1xuICAgICAgICB5ZWFyOiArc3BsaXRPdXREYXRlWzBdLFxuICAgICAgICBtb250aDogK3NwbGl0T3V0RGF0ZVsxXSxcbiAgICAgICAgZGF5OiArc3BsaXRPdXREYXRlWzJdXG4gICAgICB9O1xuICAgICAgdGhpcy5kZXBhcnREYXRlID0gb3V0RGF0ZU9iajtcbiAgICAgIHRoaXMuZGVwYXJ0VGltZSA9IGAke3NzLm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvdy5zdWJzdHIoXG4gICAgICAgIDAsXG4gICAgICAgIDJcbiAgICAgICl9OiR7c3Mub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93LnN1YnN0cigyLCAyKX1gO1xuICAgICAgdGhpcy5yZXR1cm5DYWJpbkNsYXNzID0gc3MucmV0dXJuQ2FiaW5DbGFzcyBhcyBGbGlnaHRDYWJpbkNsYXNzO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3BsaXRSZXREYXRlID0gc3MucmV0dXJuRGF0ZS5zcGxpdCgnLScpO1xuICAgICAgICBjb25zdCBSZXREYXRlT2JqID0ge1xuICAgICAgICAgIHllYXI6ICtzcGxpdFJldERhdGVbMF0sXG4gICAgICAgICAgbW9udGg6ICtzcGxpdFJldERhdGVbMV0sXG4gICAgICAgICAgZGF5OiArc3BsaXRSZXREYXRlWzJdXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucmV0dXJuRGF0ZSA9IFJldERhdGVPYmo7XG4gICAgICAgIHRoaXMuYXJyaXZlVGltZSA9IGAke3NzLnJldHVybkRlcGFydHVyZVRpbWVXaW5kb3cuc3Vic3RyKFxuICAgICAgICAgIDAsXG4gICAgICAgICAgMlxuICAgICAgICApfToke3NzLnJldHVybkRlcGFydHVyZVRpbWVXaW5kb3cuc3Vic3RyKDIsIDIpfWA7XG4gICAgICAgIHRoaXMubWF4Q29ubmVjdGlvbnMgPSBudWxsO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGArKysgVW5hYmxlIHRvIHNwbGl0IHJldHVybiBkYXRlIC0gbWF5IG5vdCBoYXZlIGJlZW4gcHJvdmlkZWQgKysrYCk7XG4gICAgICB9XG4gICAgICB0aGlzLmNob3NlblNlYXJjaFR5cGUgPVxuICAgICAgICBzcy5yZXR1cm5UcmlwID09PSAndHJ1ZScgPyBGbGlnaHRTZWFyY2hUeXBlLnJldHVybiA6IEZsaWdodFNlYXJjaFR5cGUub25lV2F5O1xuICAgICAgY29uc29sZS53YXJuKGArKysgUmVjb3ZlcmluZyBzc28gb3JpZ2luIGFpcnBvcnQ6ICR7c3Mub3JpZ2luQWlycG9ydH0gKysrYCk7XG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0QWlycG9ydHNMaXN0KHNzLm9yaWdpbkFpcnBvcnQpLnN1YnNjcmliZShcbiAgICAgICAgcmVzdWx0cyA9PiB7XG4gICAgICAgICAgdGhpcy5kZXBhcnRMb2NhdGlvbiA9IChyZXN1bHRzIGFzIGFueVtdKS5maW5kKGEgPT4gYS5nYXRld2F5ID09IHNzLm9yaWdpbkFpcnBvcnQpO1xuICAgICAgICAgIGNvbnNvbGUud2FybihgKysrIFJlY292ZXJpbmcgc3NvIGRlc3RpbmF0aW9uIGFpcnBvcnQ6ICR7c3MuZGVzdGluYXRpb25BaXJwb3J0fSArKytgKTtcbiAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0QWlycG9ydHNMaXN0KHNzLmRlc3RpbmF0aW9uQWlycG9ydCkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgcmVzdWx0cyA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuYXJyaXZlTG9jYXRpb24gPSAocmVzdWx0cyBhcyBhbnlbXSkuZmluZChcbiAgICAgICAgICAgICAgICBhID0+IGEuZ2F0ZXdheSA9PSBzcy5kZXN0aW5hdGlvbkFpcnBvcnRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgdGhpcy5faXNWYWxpZCgpO1xuXG4gICAgICAgICAgICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJysrKyBTU08gc2VhcmNoIGlzIHZhbGlkICsrKycpO1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsVXNlclNlYXJjaCA9IE9iamVjdC5mcmVlemUodGhpcy5oZWxwZXJzLmNsb25lKHRoaXMudGVtcFBhcmFtcykpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TLCB7XG4gICAgICAgICAgICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KFxuICAgICAgICAgICAgICAgICAgc3NcbiAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRib3VuZFRpbWVXaW5kb3c6IHNzLm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvdyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblRpbWVXaW5kb3c6IHNzLnJldHVybkRlcGFydHVyZVRpbWVXaW5kb3dcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVSZWNlbnRTZWFyY2godGhpcy5nZXRSZWNlbnRTZWFyY2hRdWVyeShxdWVyeSkpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNzb09iamVjdDtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJysrKyBzdGFydGluZyBzc28gc2VhcmNoICsrKycpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGFydFNlYXJjaCh0aGlzLmZsaWdodGZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignKysrIFNlYXJjaCBpcyBpbnZhbGlkOiAnLCB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcywgJyArKysnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZ1NTTyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGArKysgRXJyb3IgcmVjb3ZlcmluZyBkZXN0aW5hdGlvbiBhaXJwb3J0OiAke2Vycm9yfSArKytgKTtcbiAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdTU08gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgKysrIEVycm9yIHJlY292ZXJpbmcgb3JpZ2luIGFpcnBvcnQ6ICR7ZXJyb3J9ICsrK2ApO1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nU1NPID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcbiAgICAgICAgdGhpcy5fb3JpZ2luYWxVc2VyU2VhcmNoID0gT2JqZWN0LmZyZWV6ZSh0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy50ZW1wUGFyYW1zKSk7XG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TLCB7XG4gICAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxuICAgICAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2hcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeShcbiAgICAgICAgICBzc1xuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgb3V0Ym91bmRUaW1lV2luZG93OiBzcy5vdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3csXG4gICAgICAgICAgICAgICAgcmV0dXJuVGltZVdpbmRvdzogc3MucmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvd1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVSZWNlbnRTZWFyY2godGhpcy5nZXRSZWNlbnRTZWFyY2hRdWVyeShxdWVyeSkpO1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRTZWFyY2godGhpcy5mbGlnaHRmZXRjaGVyLmZldGNoTGlzdChxdWVyeSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ210U2VhcmNoKHF1ZXJ5OiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyk6IE9ic2VydmFibGU8RmxpZ2h0QWxsUXVvdGVSZXN1bHQ+IHtcbiAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlcnMoKTtcbiAgICBxdWVyeS5wYXNzZW5nZXJzID0gdGhpcy5fcGFzc2VuZ2VycztcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmZsaWdodGZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KTtcbiAgICB0aGlzLl9zdGFydFNlYXJjaChyZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBnZXRSZWNlbnRTZWFyY2hRdWVyeShxdWVyeTogSUZsaWdodFNlYXJjaEFyZ3MpOiBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMge1xuICAgIGlmICgodGhpcy52aWEgYXMgT0JUQWlycG9ydERldGFpbHMpPy5nYXRld2F5KSB7XG4gICAgICBxdWVyeS52aWEgPSAodGhpcy52aWEgYXMgT0JUQWlycG9ydERldGFpbHMpLmdhdGV3YXk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnZpYSkge1xuICAgICAgcXVlcnkudmlhID0gdGhpcy52aWEgYXMgc3RyaW5nO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm91dFRpbWVGbGV4aWJpbGl0eSAmJiB0aGlzLm91dFRpbWVDcml0ZXJpYSA9PT0gVGltZVdpbmRvdy5EZXBhcnQpIHtcbiAgICAgIHF1ZXJ5Lm91dFRpbWVGbGV4aWJpbGl0eSA9IHRoaXMub3V0VGltZUZsZXhpYmlsaXR5O1xuICAgIH0gZWxzZSBpZiAodGhpcy5vdXRUaW1lQ3JpdGVyaWEgPT09IFRpbWVXaW5kb3cuQXJyaXZlKSB7XG4gICAgICBxdWVyeS5vdXRUaW1lRmxleGliaWxpdHkgPSAyO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmluVGltZUZsZXhpYmlsaXR5ICYmIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPT09IFRpbWVXaW5kb3cuRGVwYXJ0KSB7XG4gICAgICBxdWVyeS5pblRpbWVGbGV4aWJpbGl0eSA9IHRoaXMuaW5UaW1lRmxleGliaWxpdHk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmluVGltZUNyaXRlcmlhID09PSBUaW1lV2luZG93LkFycml2ZSkge1xuICAgICAgcXVlcnkuaW5UaW1lRmxleGliaWxpdHkgPSAyO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzZXJ2aWNlVHlwZTogU2VydmljZVR5cGUuRmxpZ2h0LFxuICAgICAgc2VhcmNoQXJnczogcXVlcnksXG4gICAgICB0cmF2ZWxEYXRlOiB0aGlzLm91dEJvdW5kRGF0ZS5mb3JtYXQoKSxcbiAgICAgIHRyYXZlbGxlcnM6IHRoaXMuaGVscGVycy5nZXRUcmF2ZWxsZXJzSWQodGhpcy50cmF2ZWxsZXJzLCB0aGlzLnVzZXJTZXJ2aWNlLmJvYm8/LmlkKVxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc3RhcnRSZWNlbnRTZWFyY2gocmVjZW50U2VhcmNoOiBSZWNlbnRTZWFyY2gpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByZWNlbnRTZWFyY2hBcmdzID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3M7XG4gICAgaWYgKHJlY2VudFNlYXJjaEFyZ3Mub3V0VGltZUZsZXhpYmlsaXR5KSB7XG4gICAgICB0aGlzLm91dFRpbWVGbGV4aWJpbGl0eSA9IHJlY2VudFNlYXJjaEFyZ3Mub3V0VGltZUZsZXhpYmlsaXR5O1xuICAgIH1cbiAgICBpZiAocmVjZW50U2VhcmNoQXJncy5vdXRib3VuZERhdGUpIHtcbiAgICAgIGxldCBvdXRib3VuZFRpbWVXaW5kb3cgPSByZWNlbnRTZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvd1xuICAgICAgICA/IHJlY2VudFNlYXJjaEFyZ3Mub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93XG4gICAgICAgIDogcmVjZW50U2VhcmNoQXJncy5vdXRib3VuZEFycml2YWxUaW1lV2luZG93O1xuICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmNvbnZlcnRSZWNlbnRTZWFyY2hEYXRlVGltZShcbiAgICAgICAgcmVjZW50U2VhcmNoQXJncy5vdXRib3VuZERhdGUsXG4gICAgICAgIG91dGJvdW5kVGltZVdpbmRvdyxcbiAgICAgICAgdGhpcy5vdXRUaW1lRmxleGliaWxpdHkgfHwgMlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocmVjZW50U2VhcmNoQXJncy5yZXR1cm5EYXRlKSB7XG4gICAgICBpZiAocmVjZW50U2VhcmNoQXJncy5pblRpbWVGbGV4aWJpbGl0eSkge1xuICAgICAgICB0aGlzLmluVGltZUZsZXhpYmlsaXR5ID0gcmVjZW50U2VhcmNoQXJncy5pblRpbWVGbGV4aWJpbGl0eTtcbiAgICAgIH1cbiAgICAgIGxldCByZXR1cm5UaW1lV2luZG93ID0gcmVjZW50U2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XG4gICAgICAgID8gcmVjZW50U2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XG4gICAgICAgIDogcmVjZW50U2VhcmNoQXJncy5yZXR1cm5BcnJpdmFsVGltZVdpbmRvdztcbiAgICAgIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmNvbnZlcnRSZWNlbnRTZWFyY2hEYXRlVGltZShcbiAgICAgICAgcmVjZW50U2VhcmNoQXJncy5yZXR1cm5EYXRlLFxuICAgICAgICByZXR1cm5UaW1lV2luZG93LFxuICAgICAgICB0aGlzLmluVGltZUZsZXhpYmlsaXR5IHx8IDJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5mYXJlVHlwZSA9IHJlY2VudFNlYXJjaEFyZ3MuZmFyZVR5cGU7XG4gICAgdGhpcy5tYXhDb25uZWN0aW9ucyA9IHJlY2VudFNlYXJjaEFyZ3MubWF4Q29ubmVjdGlvbnM7XG5cbiAgICBpZiAocmVjZW50U2VhcmNoQXJncy5vdXRib3VuZENhYmluQ2xhc3MpIHtcbiAgICAgIHRoaXMuY2FiaW5DbGFzcyA9IHJlY2VudFNlYXJjaEFyZ3Mub3V0Ym91bmRDYWJpbkNsYXNzWzBdO1xuICAgIH1cbiAgICBpZiAocmVjZW50U2VhcmNoQXJncy5yZXR1cm5DYWJpbkNsYXNzKSB7XG4gICAgICB0aGlzLnJldHVybkNhYmluQ2xhc3MgPSByZWNlbnRTZWFyY2hBcmdzLnJldHVybkNhYmluQ2xhc3NbMF07XG4gICAgfVxuXG4gICAgdGhpcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHMgPSByZWNlbnRTZWFyY2hBcmdzLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA/IHRydWUgOiBmYWxzZTtcblxuICAgIHRoaXMuY2hvc2VuU2VhcmNoVHlwZSA9IHJlY2VudFNlYXJjaEFyZ3M/Lm11bHRpRGVzdGluYXRpb24/Lmxlbmd0aFxuICAgICAgPyBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eVxuICAgICAgOiByZWNlbnRTZWFyY2hBcmdzLnJldHVyblRyaXBcbiAgICAgID8gRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm5cbiAgICAgIDogRmxpZ2h0U2VhcmNoVHlwZS5vbmVXYXk7XG5cbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93KSB7XG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuRGVwYXJ0O1xuICAgIH0gZWxzZSBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdykge1xuICAgICAgdGhpcy5vdXRUaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFycml2ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vdXRUaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFueXRpbWU7XG4gICAgfVxuXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRlcGFydHVyZVRpbWVXaW5kb3cpIHtcbiAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkRlcGFydDtcbiAgICB9IGVsc2UgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkFycml2YWxUaW1lV2luZG93KSB7XG4gICAgICB0aGlzLmluVGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5BcnJpdmU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFueXRpbWU7XG4gICAgfVxuXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnZpYSkge1xuICAgICAgdGhpcy52aWEgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy52aWE7XG4gICAgfVxuICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hfbG9hZGluZyA9IHRydWU7XG4gICAgaWYgKCFyZWNlbnRTZWFyY2hBcmdzPy5tdWx0aURlc3RpbmF0aW9uPy5sZW5ndGgpIHtcbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0QWlycG9ydEJ5Q29kZShcbiAgICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vcmlnaW5BaXJwb3J0LFxuICAgICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm9yaWdpbkxvY2F0aW9uVHlwZVxuICAgICAgICApLFxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0QWlycG9ydEJ5Q29kZShcbiAgICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXN0aW5hdGlvbkFpcnBvcnQsXG4gICAgICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVzdGluYXRpb25Mb2NhdGlvblR5cGVcbiAgICAgICAgKVxuICAgICAgXSkuc3Vic2NyaWJlKChbZGVwYXJ0TG9jYXRpb24sIGFycml2ZUxvY2F0aW9uXSkgPT4ge1xuICAgICAgICBpZiAoZGVwYXJ0TG9jYXRpb24gJiYgYXJyaXZlTG9jYXRpb24pIHtcbiAgICAgICAgICB0aGlzLmRlcGFydExvY2F0aW9uID0ge1xuICAgICAgICAgICAgZGVzdGluYXRpb246IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaC5uYW1lLFxuICAgICAgICAgICAgZ2F0ZXdheTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLmlhdGEsXG4gICAgICAgICAgICB0ZXJtaW5hbHM6IHRoaXMuc2VhcmNoU2VydmljZS5wcm9jZXNzVGVybWluYWxzKGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaC50ZXJtaW5hbHMpLFxuICAgICAgICAgICAgY291bnRyeTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnksXG4gICAgICAgICAgICBwb3N0Y29kZTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LnBvc3Rjb2RlLFxuICAgICAgICAgICAgY291bnRyeUNvZGU6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5Q29kZSxcbiAgICAgICAgICAgIGxvY2F0aW9uVHlwZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3JpZ2luTG9jYXRpb25UeXBlXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLmFycml2ZUxvY2F0aW9uID0ge1xuICAgICAgICAgICAgZGVzdGluYXRpb246IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC5uYW1lLFxuICAgICAgICAgICAgZ2F0ZXdheTogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLmlhdGEsXG4gICAgICAgICAgICB0ZXJtaW5hbHM6IHRoaXMuc2VhcmNoU2VydmljZS5wcm9jZXNzVGVybWluYWxzKGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC50ZXJtaW5hbHMpLFxuICAgICAgICAgICAgY291bnRyeTogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnksXG4gICAgICAgICAgICBwb3N0Y29kZTogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LnBvc3Rjb2RlLFxuICAgICAgICAgICAgY291bnRyeUNvZGU6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5Q29kZSxcbiAgICAgICAgICAgIGxvY2F0aW9uVHlwZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVzdGluYXRpb25Mb2NhdGlvblR5cGVcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuSG90ZWxdLmNoZWNrRm9ySG90ZWxSZW1pbmRlcigpICYmIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hfb2JqZWN0cy5IT1RFTC5lbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoX29iamVjdHNbU2VydmljZVR5cGUuSG90ZWxdLmNob3NlbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNldEhvdGVsUGFyYW1zKHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucHJlZmVycmVkQ2FycmllcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZWZlcnJlZENhcnJpZXJzOiBPQlRBaXJsaW5lc0RldGFpbHNbXSA9IFtdO1xuICAgICAgICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucHJlZmVycmVkQ2FycmllcnMubWFwKChwcmVmZXJyZWRDYXJyeTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZVxuICAgICAgICAgICAgICAgIC5nZXRBaXJsaW5lc0xpc3QocHJlZmVycmVkQ2FycnkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoaXRlbXM6IE9CVEFpcmxpbmVzRGV0YWlsc1tdKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpdGVtcy5tYXAoKGl0ZW06IE9CVEFpcmxpbmVzRGV0YWlscykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5jb2RlID09PSBwcmVmZXJyZWRDYXJyeSkge1xuICAgICAgICAgICAgICAgICAgICAgIHByZWZlcnJlZENhcnJpZXJzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgdGhpcy5wcmVmZXJyZWRDYXJyaWVycyA9IHByZWZlcnJlZENhcnJpZXJzO1xuICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2ltdWx0YW5lb3VzU2VhcmNoZXNDaGVjayh0cnVlKS50aGVuKHZhbCA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHJlY2VudFNlYXJjaEFyZ3M/Lm11bHRpRGVzdGluYXRpb24/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSBtb21lbnQocmVjZW50U2VhcmNoQXJncy5tdWx0aURlc3RpbmF0aW9uWzBdLmRhdGUpO1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVNdWx0aURlc3RpbmF0aW9uKHJlY2VudFNlYXJjaEFyZ3MpO1xuICAgICAgdGhpcy5kZXBhcnRMb2NhdGlvbiA9IHRoaXMubXVsdGlEZXN0aW5hdGlvblswXS5vcmlnO1xuICAgICAgdGhpcy5hcnJpdmVMb2NhdGlvbiA9IHRoaXMubXVsdGlEZXN0aW5hdGlvblswXS5kZXN0O1xuICAgICAgaWYgKHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5Ib3RlbF0uY2hlY2tGb3JIb3RlbFJlbWluZGVyKCkgJiYgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaF9vYmplY3RzLkhPVEVMLmVuYWJsZWQpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLkhvdGVsXS5jaG9zZW4gPSB0cnVlO1xuICAgICAgICB0aGlzLnNldEhvdGVsUGFyYW1zKHRydWUpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNpbXVsdGFuZW91c1NlYXJjaGVzQ2hlY2sodHJ1ZSkudGhlbih2YWwgPT4ge1xuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZpcnN0IGhlcmVcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XG4gICAgfVxuICB9XG5cbiAgc2V0SG90ZWxQYXJhbXMoc3RhcnRTZWFyY2hlczogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkhvdGVsXS5jaGVja2luX2RhdGUgPSB0aGlzLm91dEJvdW5kRGF0ZTtcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuSG90ZWxdLmNoZWNrb3V0X2RhdGUgPSB0aGlzLmluYm91bmREYXRlO1xuXG4gICAgY29uc3QgbG9jYXRpb24gPSAgdGhpcy5hcnJpdmVMb2NhdGlvbiBhcyBPQlRBaXJwb3J0RGV0YWlscztcblxuICAgIGxldCBob3RlbENvdW50eSA9IHtcbiAgICAgIGNDb2RlOiBsb2NhdGlvbj8uY291bnRyeUNvZGUsXG4gICAgICBjTmFtZTogbG9jYXRpb24/LmNvdW50cnlcbiAgICB9O1xuXG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkhvdGVsXS5jb3VudHJ5ID0gaG90ZWxDb3VudHk7XG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkhvdGVsXS5sb2NhdGlvbl90eXBlX3NlbGVjdCA9IExvY2F0aW9uVHlwZXMuQ2l0eTtcblxuICAgIGNvbnN0IGNpdHlMb2NhdGlvbiA9IGxvY2F0aW9uPy5kZXN0aW5hdGlvbi5zcGxpdCgnLCcpWzBdO1xuICAgIHRoaXMuc2VhcmNoU2VydmljZVxuICAgICAgLmdldENpdHlMb2NhdGlvbnMoY2l0eUxvY2F0aW9uLCBob3RlbENvdW50eS5jQ29kZSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIChyZXN1bHRzOkxvY2F0aW9uRGV0YWlsc1tdKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkhvdGVsXS5sb2NhdGlvbiA9IHJlc3VsdHMuZmluZChyZXMgPT4gcmVzLm5hbWUgPT09IGNpdHlMb2NhdGlvbikgfHwgcmVzdWx0c1swXTtcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkhvdGVsXS5sb2NhdGlvbiAmJiBzdGFydFNlYXJjaGVzKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVNdWx0aURlc3RpbmF0aW9uKGZhdjogYW55KSB7XG4gICAgY29uc3QgbXVsdGkgPSAoYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBmYXYubXVsdGlEZXN0aW5hdGlvbi5tYXAoXG4gICAgICAgIGFzeW5jIChhOiB7XG4gICAgICAgICAgZGF0ZTogc3RyaW5nO1xuICAgICAgICAgIGRlc3Q6IHN0cmluZztcbiAgICAgICAgICBvcmlnOiBzdHJpbmc7XG4gICAgICAgICAgb3JpZ2luQWlycG9ydEZ1bGw6IGFueTtcbiAgICAgICAgICBkZXN0aW5hdGlvbkFpcnBvcnRGdWxsOiBhbnk7XG4gICAgICAgICAgb3V0VGltZUNyaXRlcmlhOiBUaW1lV2luZG93O1xuICAgICAgICAgIGRlcGFydHVyZVRpbWVXaW5kb3c6IHN0cmluZztcbiAgICAgICAgICBhcnJpdmFsVGltZVdpbmRvdzogc3RyaW5nO1xuICAgICAgICAgIG9yaWdpbkxvY2F0aW9uVHlwZTogTG9jYXRpb25UeXBlO1xuICAgICAgICAgIGRlc3RpbmF0aW9uTG9jYXRpb25UeXBlOiBMb2NhdGlvblR5cGU7XG4gICAgICAgIH0pID0+IHtcbiAgICAgICAgICBsZXQgZGVzdGluYXRpb246IHtcbiAgICAgICAgICAgIGRhdGU6IG1vbWVudC5Nb21lbnQ7XG4gICAgICAgICAgICBkZXN0OiBhbnk7XG4gICAgICAgICAgICBvcmlnOiBhbnk7XG4gICAgICAgICAgICBvcmlnaW5BaXJwb3J0RnVsbDogYW55O1xuICAgICAgICAgICAgZGVzdGluYXRpb25BaXJwb3J0RnVsbDogYW55O1xuICAgICAgICAgICAgb3V0VGltZUNyaXRlcmlhOiBUaW1lV2luZG93O1xuICAgICAgICAgICAgb3V0VGltZUZsZXhpYmlsaXR5PzogbnVtYmVyO1xuICAgICAgICAgICAgb3JpZ2luTG9jYXRpb25UeXBlOiBMb2NhdGlvblR5cGU7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbkxvY2F0aW9uVHlwZTogTG9jYXRpb25UeXBlO1xuICAgICAgICAgIH0gPSB7XG4gICAgICAgICAgICBkYXRlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBkZXN0OiB1bmRlZmluZWQsXG4gICAgICAgICAgICBvcmlnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBvcmlnaW5BaXJwb3J0RnVsbDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZGVzdGluYXRpb25BaXJwb3J0RnVsbDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgb3V0VGltZUNyaXRlcmlhOiBUaW1lV2luZG93LkFueXRpbWUsXG4gICAgICAgICAgICBvdXRUaW1lRmxleGliaWxpdHk6IG51bGwsXG4gICAgICAgICAgICBvcmlnaW5Mb2NhdGlvblR5cGU6IExvY2F0aW9uVHlwZS5BLFxuICAgICAgICAgICAgZGVzdGluYXRpb25Mb2NhdGlvblR5cGU6IExvY2F0aW9uVHlwZS5BXG4gICAgICAgICAgfTtcbiAgICAgICAgICBkZXN0aW5hdGlvbi5vcmlnID0gYXdhaXQgdGhpcy5zZWFyY2hTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0QWlycG9ydHNMaXN0KGEub3JpZywgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgYS5vcmlnaW5Mb2NhdGlvblR5cGUpXG4gICAgICAgICAgICAudG9Qcm9taXNlKClcbiAgICAgICAgICAgIC50aGVuKG9yaWdSZXN1bHRzID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIChvcmlnUmVzdWx0cyBhcyBhbnlbXSkuZmluZChiID0+IGIuZ2F0ZXdheSA9PSBhLm9yaWcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgZGVzdGluYXRpb24uZGVzdCA9IGF3YWl0IHRoaXMuc2VhcmNoU2VydmljZVxuICAgICAgICAgICAgLmdldEFpcnBvcnRzTGlzdChhLmRlc3QsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIGEuZGVzdGluYXRpb25Mb2NhdGlvblR5cGUpXG4gICAgICAgICAgICAudG9Qcm9taXNlKClcbiAgICAgICAgICAgIC50aGVuKGRlc3RSZXN1bHRzID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIChkZXN0UmVzdWx0cyBhcyBhbnlbXSkuZmluZChiID0+IGIuZ2F0ZXdheSA9PSBhLmRlc3QpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICBkZXN0aW5hdGlvbi5vcmlnaW5BaXJwb3J0RnVsbCA9IGF3YWl0IHRoaXMuc2VhcmNoU2VydmljZVxuICAgICAgICAgICAgLmdldEFpcnBvcnRzTGlzdChhLmRlc3QsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIGEuZGVzdGluYXRpb25Mb2NhdGlvblR5cGUpXG4gICAgICAgICAgICAudG9Qcm9taXNlKClcbiAgICAgICAgICAgIC50aGVuKGRlc3RSZXN1bHRzID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIChkZXN0UmVzdWx0cyBhcyBhbnlbXSkuZmluZChiID0+IGIuZGVzdGluYXRpb24gPT0gYS5vcmlnaW5BaXJwb3J0RnVsbCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIGRlc3RpbmF0aW9uLmRlc3RpbmF0aW9uQWlycG9ydEZ1bGwgPSBhd2FpdCB0aGlzLnNlYXJjaFNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRBaXJwb3J0c0xpc3QoYS5kZXN0LCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBhLmRlc3RpbmF0aW9uTG9jYXRpb25UeXBlKVxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAgICAgICAudGhlbihkZXN0UmVzdWx0cyA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiAoZGVzdFJlc3VsdHMgYXMgYW55W10pLmZpbmQoYiA9PiBiLmRlc3RpbmF0aW9uID09IGEuZGVzdGluYXRpb25BaXJwb3J0RnVsbCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChhLmRlcGFydHVyZVRpbWVXaW5kb3cpIHtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLm91dFRpbWVGbGV4aWJpbGl0eSA9IHRoaXMuaGVscGVycy5jYWxjdWxhdGVEdXJhdGlvbkluSG91cnMoXG4gICAgICAgICAgICAgIGEuZGVwYXJ0dXJlVGltZVdpbmRvd1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGEuZGF0ZSkge1xuICAgICAgICAgICAgZGVzdGluYXRpb24uZGF0ZSA9IHRoaXMuY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKFxuICAgICAgICAgICAgICBhLmRhdGUsXG4gICAgICAgICAgICAgIGEuZGVwYXJ0dXJlVGltZVdpbmRvdyB8fCBhLmFycml2YWxUaW1lV2luZG93LFxuICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5vdXRUaW1lRmxleGliaWxpdHkgfHwgMlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYS5kZXBhcnR1cmVUaW1lV2luZG93IHx8IGEuYXJyaXZhbFRpbWVXaW5kb3cpIHtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLm91dFRpbWVDcml0ZXJpYSA9IGEuZGVwYXJ0dXJlVGltZVdpbmRvd1xuICAgICAgICAgICAgICA/IFRpbWVXaW5kb3cuRGVwYXJ0XG4gICAgICAgICAgICAgIDogVGltZVdpbmRvdy5BcnJpdmU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uO1xuICAgICAgICB9XG4gICAgICApXG4gICAgKSkgYXMgYW55W107XG5cbiAgICB0aGlzLm11bHRpRGVzdGluYXRpb24gPSBtdWx0aTtcbiAgICB0aGlzLmRlcGFydExvY2F0aW9uID0gdGhpcy5tdWx0aURlc3RpbmF0aW9uWzBdLm9yaWc7XG4gICAgdGhpcy5hcnJpdmVMb2NhdGlvbiA9IHRoaXMubXVsdGlEZXN0aW5hdGlvblswXS5kZXN0O1xuICAgIHRoaXMuc2VhcmNoU2VydmljZS5zaW11bHRhbmVvdXNTZWFyY2hlc0NoZWNrKHRydWUpLnRoZW4odmFsID0+IHtcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG1ha2VEZXBhcnR1cmVUaW1lV2luZG93KFxuICAgIGRhdGVUaW1lOiBtb21lbnQuTW9tZW50LFxuICAgIHdpbmRvdzogVGltZVdpbmRvdyxcbiAgICB0eXBlOiBGbGlnaHRTZWFyY2hUeXBlXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgdGltZUZsZXhpYmlsaXR5ID1cbiAgICAgIHR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUub25lV2F5XG4gICAgICAgID8gdGhpcy50ZW1wUGFyYW1zLm91dFRpbWVGbGV4aWJpbGl0eVxuICAgICAgICA6IHRoaXMudGVtcFBhcmFtcy5pblRpbWVGbGV4aWJpbGl0eTtcblxuICAgIHJldHVybiB3aW5kb3cgPT09IFRpbWVXaW5kb3cuRGVwYXJ0XG4gICAgICA/IHRoaXMuaGVscGVycy5tYWtlVGltZVdpbmRvdyhkYXRlVGltZSwgLXRpbWVGbGV4aWJpbGl0eSwgdGltZUZsZXhpYmlsaXR5KVxuICAgICAgOiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBtYWtlQXJyaXZhbFRpbWVXaW5kb3coXG4gICAgZGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQsXG4gICAgd2luZG93OiBUaW1lV2luZG93LFxuICAgIHR5cGU6IEZsaWdodFNlYXJjaFR5cGVcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAod2luZG93ICE9PSBUaW1lV2luZG93LkFycml2ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgdGltZUZsZXhpYmlsaXR5ID1cbiAgICAgIHR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUub25lV2F5XG4gICAgICAgID8gdGhpcy50ZW1wUGFyYW1zLm91dFRpbWVGbGV4aWJpbGl0eVxuICAgICAgICA6IHRoaXMudGVtcFBhcmFtcy5pblRpbWVGbGV4aWJpbGl0eTtcblxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMubWFrZVRpbWVXaW5kb3coZGF0ZVRpbWUsIC10aW1lRmxleGliaWxpdHksIDApO1xuICB9XG5cbiAgY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKGRhdGU6IHN0cmluZywgdGltZVdpbmRvdz86IHN0cmluZywgaG91cnM6IG51bWJlciA9IDIpOiBtb21lbnQuTW9tZW50IHtcbiAgICBpZiAodGltZVdpbmRvdykge1xuICAgICAgY29uc3QgW3N0YXJ0VGltZV0gPSB0aW1lV2luZG93LnNwbGl0KCctJyk7XG4gICAgICBjb25zdCB1cGRhdGVkU3RhcnRUaW1lID0gbW9tZW50KHN0YXJ0VGltZSwgJ0hIbW0nKS5hZGQoaG91cnMsICdob3VycycpLmZvcm1hdCgnSEhtbScpO1xuICAgICAgcmV0dXJuIG1vbWVudChgJHtkYXRlfVQke3VwZGF0ZWRTdGFydFRpbWV9YCwgJ1lZWVktTU0tRERUSEhtbScpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbW9tZW50KGRhdGUpO1xuICAgIH1cbiAgfVxuXG4gIGdldFNlYXJjaFF1ZXJ5KFxuICAgIHRpbWVXaW5kb3c6IHtcbiAgICAgIG91dGJvdW5kVGltZVdpbmRvdzogc3RyaW5nO1xuICAgICAgcmV0dXJuVGltZVdpbmRvdzogc3RyaW5nO1xuICAgIH0gPSBudWxsXG4gICk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzIHtcbiAgICBjb25zdCBpc011bHRpQ2l0eUFjdGl2ZSA9IHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eTtcbiAgICB0aGlzLl9tdWx0aURlc3RpbmF0aW9uID0gaXNNdWx0aUNpdHlBY3RpdmVcbiAgICAgID8gdGhpcy5zZXRNdWx0aURlc3RpbmF0aW9uUXVlcnkodGhpcy50ZW1wUGFyYW1zLm11bHRpRGVzdGluYXRpb24pXG4gICAgICA6IG51bGw7XG5cbiAgICB0aGlzLl9tdWx0aURlc3RpbmF0aW9uID1cbiAgICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eVxuICAgICAgICA/IHRoaXMuc2V0TXVsdGlEZXN0aW5hdGlvblF1ZXJ5KHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uKVxuICAgICAgICA6IFtdO1xuXG4gICAgY29uc3QgbXVsdGlDaXR5Q29ubmVjdGlvbnMgPVxuICAgICAgdGhpcy50ZW1wUGFyYW1zLm1heENvbm5lY3Rpb25zID09PSAwICYmIGlzTXVsdGlDaXR5QWN0aXZlXG4gICAgICAgID8gdGhpcy5fbXVsdGlEZXN0aW5hdGlvbi5sZW5ndGggLSAxXG4gICAgICAgIDogbnVsbDtcblxuICAgIGNvbnN0IGlzRmxpZ2h0c0dyb3VwZWQgPSB0aGlzLnNlYXJjaFNlcnZpY2UuaXNGbGlnaHRzR3JvdXBlZCgpO1xuICAgIHJldHVybiB0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8U2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXM+KFxuICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAge30sXG4gICAgICAgIGlzTXVsdGlDaXR5QWN0aXZlXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIG11bHRpRGVzdGluYXRpb246IHRoaXMuX211bHRpRGVzdGluYXRpb25cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgb3JpZ2luQWlycG9ydDogdGhpcy5fb3JpZ2luQWlycG9ydCxcbiAgICAgICAgICAgICAgb3JpZ2luQWlycG9ydEZ1bGw6IHRoaXMuX29yaWdpbkFpcnBvcnRGdWxsLFxuICAgICAgICAgICAgICBkZXN0aW5hdGlvbkFpcnBvcnQ6IHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCxcbiAgICAgICAgICAgICAgZGVzdGluYXRpb25BaXJwb3J0RnVsbDogdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0RnVsbCxcbiAgICAgICAgICAgICAgb3JpZ2luTG9jYXRpb25UeXBlOiB0aGlzLl9vcmlnaW5Mb2NhdGlvblR5cGUsXG4gICAgICAgICAgICAgIGRlc3RpbmF0aW9uTG9jYXRpb25UeXBlOiB0aGlzLl9kZXN0aW5hdGlvbkxvY2F0aW9uVHlwZSxcbiAgICAgICAgICAgICAgam9pbmVyT3JMZWF2ZXI6IHRoaXMuaXNFcm1UcmF2ZWxsZXIoKSxcbiAgICAgICAgICAgICAgb3V0Ym91bmREYXRlOiB0aGlzLmhlbHBlcnMuZm9ybWF0SXNvRGF0ZSh0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlKSxcbiAgICAgICAgICAgICAgb3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93OiB0aW1lV2luZG93XG4gICAgICAgICAgICAgICAgPyB0aW1lV2luZG93Lm91dGJvdW5kVGltZVdpbmRvdy5yZXBsYWNlKC8lM0EvZywgJycpXG4gICAgICAgICAgICAgICAgOiB0aGlzLm1ha2VEZXBhcnR1cmVUaW1lV2luZG93KFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUNyaXRlcmlhLFxuICAgICAgICAgICAgICAgICAgICBGbGlnaHRTZWFyY2hUeXBlLm9uZVdheVxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgb3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdzogdGhpcy5tYWtlQXJyaXZhbFRpbWVXaW5kb3coXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZSxcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUNyaXRlcmlhLFxuICAgICAgICAgICAgICAgIEZsaWdodFNlYXJjaFR5cGUub25lV2F5XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXNzZW5nZXJzOiB0aGlzLl9wYXNzZW5nZXJzLFxuICAgICAgICAgIHJldHVyblRyaXA6IHRoaXMuaXNSZXR1cm4sXG4gICAgICAgICAgb3V0Ym91bmRDYWJpbkNsYXNzOiB0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzcyA/IFt0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzc10gOiBudWxsLFxuICAgICAgICAgIHJlcXVpcmVGcmVlQmFnOiBudWxsLFxuICAgICAgICAgIG1heENvbm5lY3Rpb25zOiBpc011bHRpQ2l0eUFjdGl2ZSA/IG11bHRpQ2l0eUNvbm5lY3Rpb25zIDogdGhpcy50ZW1wUGFyYW1zLm1heENvbm5lY3Rpb25zLFxuICAgICAgICAgIGluY2x1ZGVOZWFyYnlBaXJwb3J0czogaXNNdWx0aUNpdHlBY3RpdmUgPyBudWxsIDogdGhpcy50ZW1wUGFyYW1zLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyxcbiAgICAgICAgICBwcmVmZXJyZWRDYXJyaWVyczogdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzLm1hcCgoY2FycmllcjogT0JUQWlybGluZXNEZXRhaWxzKSA9PlxuICAgICAgICAgICAgY2Fycmllcj8uY29kZSA/IGNhcnJpZXIuY29kZSA6IG51bGxcbiAgICAgICAgICApLFxuICAgICAgICAgIGZhcmVUeXBlOiB0aGlzLnRlbXBQYXJhbXMuZmFyZVR5cGVcbiAgICAgICAgICAvLyB3aXRoR3JvdXBlZDogaXNGbGlnaHRzR3JvdXBlZFxuICAgICAgICB9LFxuICAgICAgICB0aGlzLmlzUmV0dXJuXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHJldHVybkRhdGU6IHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlKHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSksXG4gICAgICAgICAgICAgIHJldHVybkRlcGFydHVyZVRpbWVXaW5kb3c6IHRpbWVXaW5kb3dcbiAgICAgICAgICAgICAgICA/IHRpbWVXaW5kb3cucmV0dXJuVGltZVdpbmRvdy5yZXBsYWNlKC8lM0EvZywgJycpXG4gICAgICAgICAgICAgICAgOiB0aGlzLm1ha2VEZXBhcnR1cmVUaW1lV2luZG93KFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGUsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYSxcbiAgICAgICAgICAgICAgICAgICAgRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm5cbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIHJldHVybkFycml2YWxUaW1lV2luZG93OiB0aGlzLm1ha2VBcnJpdmFsVGltZVdpbmRvdyhcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGUsXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmluVGltZUNyaXRlcmlhLFxuICAgICAgICAgICAgICAgIEZsaWdodFNlYXJjaFR5cGUucmV0dXJuXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIHJldHVybkNhYmluQ2xhc3M6IHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzXG4gICAgICAgICAgICAgICAgPyBbdGhpcy50ZW1wUGFyYW1zLnJldHVybkNhYmluQ2xhc3NdXG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7fVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBpc0VybVRyYXZlbGxlcigpOiBFcm1UcmF2ZWxsZXJUeXBlIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZXJtVHJhdmVsbGVyVHlwZSAmJlxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmVybVRyYXZlbGxlclR5cGUgIT09IEVybVRyYXZlbGxlclR5cGUuTm9uZVxuICAgICkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoU2VydmljZS5lcm1UcmF2ZWxsZXJUeXBlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVHJhdmVsbGVycygpIHtcbiAgICBjb25zdCB0cmF2ZWxsZXJzOiBGbGlnaHRQYXNzZW5nZXJPYmplY3RbXSA9IFtdO1xuICAgIGZvciAobGV0IGxvb3AgPSAwOyBsb29wIDwgdGhpcy50ZW1wUGFyYW1zLmFkdWx0czsgbG9vcCArPSAxKSB7XG4gICAgICB0cmF2ZWxsZXJzLnB1c2goeyB0eXBlOiBGbGlnaHRQYXNzZW5nZXJUeXBlLkFkdWx0IH0pO1xuICAgIH1cbiAgICBmb3IgKGxldCBsb29wID0gMDsgbG9vcCA8IHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbjsgbG9vcCArPSAxKSB7XG4gICAgICB0cmF2ZWxsZXJzLnB1c2goeyB0eXBlOiBGbGlnaHRQYXNzZW5nZXJUeXBlLkNoaWxkIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX3Bhc3NlbmdlcnMgPSB0cmF2ZWxsZXJzO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VhcmNoRGVmYXVsdHMoKSB7XG4gICAgY29uc3QgaGlkZUNsYXNzZXMgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJGYXZvcml0ZU9iamVjdDxhbnk+KFxuICAgICAgVXNlckZhdm9ydXJpdGUuRmxpZ2h0U2VhcmNoRGVmYXVsdHNcbiAgICApIHx8IHtcbiAgICAgIGNsYXNzU2VsZWN0aW9uOiB7XG4gICAgICAgIGFueTogZmFsc2UsXG4gICAgICAgIGJ1c2luZXNzOiBmYWxzZSxcbiAgICAgICAgZWNvbm9teTogZmFsc2UsXG4gICAgICAgIGZpcnN0OiBmYWxzZSxcbiAgICAgICAgcHJlbWl1bTogZmFsc2VcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgb3B0aW9uczogeyBuYW1lOiBzdHJpbmc7IHR5cGU6IEZsaWdodENhYmluQ2xhc3MgfVtdID0gW107XG4gICAgaWYgKCFoaWRlQ2xhc3Nlcy5jbGFzc1NlbGVjdGlvbi5lY29ub215KSB7XG4gICAgICBvcHRpb25zLnB1c2goeyBuYW1lOiAnRWNvbm9teScsIHR5cGU6IEZsaWdodENhYmluQ2xhc3MuRWNvbm9teSB9KTtcbiAgICB9XG5cbiAgICBpZiAoIWhpZGVDbGFzc2VzLmNsYXNzU2VsZWN0aW9uLnByZW1pdW0pIHtcbiAgICAgIG9wdGlvbnMucHVzaCh7IG5hbWU6ICdQcmVtaXVtJywgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teSB9KTtcbiAgICB9XG5cbiAgICBpZiAoIWhpZGVDbGFzc2VzLmNsYXNzU2VsZWN0aW9uLmJ1c2luZXNzKSB7XG4gICAgICBvcHRpb25zLnB1c2goeyBuYW1lOiAnQnVzaW5lc3MnLCB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzIH0pO1xuICAgIH1cblxuICAgIGlmICghaGlkZUNsYXNzZXMuY2xhc3NTZWxlY3Rpb24uZmlyc3QpIHtcbiAgICAgIG9wdGlvbnMucHVzaCh7IG5hbWU6ICdGaXJzdCcsIHR5cGU6IEZsaWdodENhYmluQ2xhc3MuRmlyc3QgfSk7XG4gICAgfVxuXG4gICAgaWYgKCFoaWRlQ2xhc3Nlcy5jbGFzc1NlbGVjdGlvbi5hbnkpIHtcbiAgICAgIG9wdGlvbnMucHVzaCh7IG5hbWU6ICdBbnknLCB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzLkFueSB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmNhYmluQ2xhc3MgPSB0aGlzLmdldFVwZGF0ZWRDYWJpbkNsYXNzKHRoaXMuY2FiaW5DbGFzcywgaGlkZUNsYXNzZXMsIG9wdGlvbnMpO1xuICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9IHRoaXMuZ2V0VXBkYXRlZENhYmluQ2xhc3ModGhpcy5yZXR1cm5DYWJpbkNsYXNzLCBoaWRlQ2xhc3Nlcywgb3B0aW9ucyk7XG4gICAgdGhpcy5hdmFsaWFibGVDbGFzc2VzLm5leHQob3B0aW9ucyk7XG5cbiAgICBpZiAoaGlkZUNsYXNzZXM/LmhpZGVGbGlnaHRDYWJpbkNsYXNzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX3Nob3dDYWJpbkNsYXNzU2VsZWN0aW9uID0gIWhpZGVDbGFzc2VzLmhpZGVGbGlnaHRDYWJpbkNsYXNzO1xuICAgICAgdGhpcy5jYWJpbkNsYXNzID0gdGhpcy5nZXRVcGRhdGVkQ2FiaW5DbGFzcyh0aGlzLmNhYmluQ2xhc3MsIGhpZGVDbGFzc2VzLCBvcHRpb25zKTtcbiAgICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9IHRoaXMuZ2V0VXBkYXRlZENhYmluQ2xhc3ModGhpcy5jYWJpbkNsYXNzLCBoaWRlQ2xhc3Nlcywgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKGhpZGVDbGFzc2VzPy5oaWRlQ2hvb3NlQWlybGluZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fc2hvd1ByZWZlcnJlZEFpcmxpbmVzID0gIWhpZGVDbGFzc2VzLmhpZGVDaG9vc2VBaXJsaW5lcztcbiAgICB9XG5cbiAgICBpZiAoaGlkZUNsYXNzZXM/LnRpbWVTZWxlY3Rpb25EZWZhdWx0KSB7XG4gICAgICBzd2l0Y2ggKGhpZGVDbGFzc2VzLnRpbWVTZWxlY3Rpb25EZWZhdWx0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgY2FzZSAnYW55dGltZSc6XG4gICAgICAgICAgdGhpcy5vdXRUaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFueXRpbWU7XG4gICAgICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQW55dGltZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYXJyaXZlJzpcbiAgICAgICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQXJyaXZlO1xuICAgICAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFycml2ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZGVwYXJ0JzpcbiAgICAgICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuRGVwYXJ0O1xuICAgICAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkRlcGFydDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgKysrIFVua25vd24gdGltZSBzZWxlY3Rpb24gZGVmYXVsdDogJHtoaWRlQ2xhc3Nlcy50aW1lU2VsZWN0aW9uRGVmYXVsdH0gKysrYFxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRVcGRhdGVkQ2FiaW5DbGFzcyhcbiAgICBjYWJpbkNsYXNzOiBGbGlnaHRDYWJpbkNsYXNzLFxuICAgIGhpZGVDbGFzc2VzOiBhbnksXG4gICAgb3B0aW9uczogeyBuYW1lOiBzdHJpbmc7IHR5cGU6IEZsaWdodENhYmluQ2xhc3MgfVtdXG4gICk6IEZsaWdodENhYmluQ2xhc3Mge1xuICAgIHN3aXRjaCAoY2FiaW5DbGFzcykge1xuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkFueTpcbiAgICAgICAgcmV0dXJuIGhpZGVDbGFzc2VzLmNsYXNzU2VsZWN0aW9uLmFueSA/IG9wdGlvbnNbMF0udHlwZSA6IGNhYmluQ2xhc3M7XG4gICAgICBjYXNlIEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3M6XG4gICAgICAgIHJldHVybiBoaWRlQ2xhc3Nlcy5jbGFzc1NlbGVjdGlvbi5idXNpbmVzcyA/IG9wdGlvbnNbMF0udHlwZSA6IGNhYmluQ2xhc3M7XG4gICAgICBjYXNlIEZsaWdodENhYmluQ2xhc3MuRWNvbm9teTpcbiAgICAgICAgcmV0dXJuIGhpZGVDbGFzc2VzLmNsYXNzU2VsZWN0aW9uLmVjb25vbXkgPyBvcHRpb25zWzBdLnR5cGUgOiBjYWJpbkNsYXNzO1xuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkZpcnN0OlxuICAgICAgICByZXR1cm4gaGlkZUNsYXNzZXMuY2xhc3NTZWxlY3Rpb24uZmlyc3QgPyBvcHRpb25zWzBdLnR5cGUgOiBjYWJpbkNsYXNzO1xuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215OlxuICAgICAgICByZXR1cm4gaGlkZUNsYXNzZXMuY2xhc3NTZWxlY3Rpb24ucHJlbWl1bSA/IG9wdGlvbnNbMF0udHlwZSA6IGNhYmluQ2xhc3M7XG4gICAgfVxuICAgIHJldHVybiBjYWJpbkNsYXNzO1xuICB9XG4gIHVwZGF0ZUZyb21QcmV2aW91c1NlYXJjaGVzKF9wcmV2aW91c0l0ZW1zOiBSZWNvcmQ8U2VydmljZVR5cGUsIEJhc2tldEl0ZW0+KTogdm9pZCB7XG4gICAgLy8gRmxpZ2h0cyBjYW4gbm90IGJlIHNlYXJjaCBhZnRlciBvdGhlciBwcm9kdWN0cyBzbyBubyBkZWZhdWx0cyBjYW4gYmUgc2V0LlxuICB9XG5cbiAgdXBkYXRlU2VhcmNoRnJvbUV4cGlyZWRCYXNrZXRJdGVtKGJhc2tldEl0ZW06IEJhc2tldEl0ZW0pOiB2b2lkIHtcbiAgICBjb25zdCBzZWFyY2hGbGlnaHRzUXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzID0gYmFza2V0SXRlbS5zZWFyY2hRdWVyeTtcbiAgICBpZiAoc2VhcmNoRmxpZ2h0c1F1ZXJ5Lm91dGJvdW5kRGF0ZSkge1xuICAgICAgbGV0IG91dGJvdW5kVGltZVdpbmRvdyA9IHNlYXJjaEZsaWdodHNRdWVyeS5vdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3dcbiAgICAgICAgPyBzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93XG4gICAgICAgIDogc2VhcmNoRmxpZ2h0c1F1ZXJ5Lm91dGJvdW5kQXJyaXZhbFRpbWVXaW5kb3c7XG4gICAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IHRoaXMuY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKFxuICAgICAgICBzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmREYXRlLFxuICAgICAgICBvdXRib3VuZFRpbWVXaW5kb3dcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHNlYXJjaEZsaWdodHNRdWVyeS5yZXR1cm5EYXRlKSB7XG4gICAgICBsZXQgcmV0dXJuVGltZVdpbmRvdyA9IHNlYXJjaEZsaWdodHNRdWVyeS5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XG4gICAgICAgID8gc2VhcmNoRmxpZ2h0c1F1ZXJ5LnJldHVybkRlcGFydHVyZVRpbWVXaW5kb3dcbiAgICAgICAgOiBzZWFyY2hGbGlnaHRzUXVlcnkucmV0dXJuQXJyaXZhbFRpbWVXaW5kb3c7XG4gICAgICB0aGlzLmluYm91bmREYXRlID0gdGhpcy5jb252ZXJ0UmVjZW50U2VhcmNoRGF0ZVRpbWUoXG4gICAgICAgIHNlYXJjaEZsaWdodHNRdWVyeS5yZXR1cm5EYXRlLFxuICAgICAgICByZXR1cm5UaW1lV2luZG93XG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuZmFyZVR5cGUgPSBzZWFyY2hGbGlnaHRzUXVlcnkuZmFyZVR5cGU7XG4gICAgdGhpcy5tYXhDb25uZWN0aW9ucyA9IHNlYXJjaEZsaWdodHNRdWVyeS5tYXhDb25uZWN0aW9ucztcblxuICAgIGlmIChzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmRDYWJpbkNsYXNzKSB7XG4gICAgICB0aGlzLmNhYmluQ2xhc3MgPSBzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmRDYWJpbkNsYXNzWzBdIGFzIEZsaWdodENhYmluQ2xhc3M7XG4gICAgfVxuICAgIGlmIChzZWFyY2hGbGlnaHRzUXVlcnkucmV0dXJuQ2FiaW5DbGFzcykge1xuICAgICAgdGhpcy5yZXR1cm5DYWJpbkNsYXNzID0gc2VhcmNoRmxpZ2h0c1F1ZXJ5LnJldHVybkNhYmluQ2xhc3NbMF0gYXMgRmxpZ2h0Q2FiaW5DbGFzcztcbiAgICB9XG5cbiAgICB0aGlzLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA9IHNlYXJjaEZsaWdodHNRdWVyeS5pbmNsdWRlTmVhcmJ5QWlycG9ydHMgPyB0cnVlIDogZmFsc2U7XG5cbiAgICB0aGlzLmNob3NlblNlYXJjaFR5cGUgPSBzZWFyY2hGbGlnaHRzUXVlcnkucmV0dXJuVHJpcFxuICAgICAgPyBGbGlnaHRTZWFyY2hUeXBlLnJldHVyblxuICAgICAgOiBGbGlnaHRTZWFyY2hUeXBlLm9uZVdheTtcblxuICAgIGlmIChzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93KSB7XG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuRGVwYXJ0O1xuICAgIH0gZWxzZSBpZiAoc2VhcmNoRmxpZ2h0c1F1ZXJ5Lm91dGJvdW5kQXJyaXZhbFRpbWVXaW5kb3cpIHtcbiAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5BcnJpdmU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5Bbnl0aW1lO1xuICAgIH1cblxuICAgIGlmIChzZWFyY2hGbGlnaHRzUXVlcnkucmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvdykge1xuICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuRGVwYXJ0O1xuICAgIH0gZWxzZSBpZiAoc2VhcmNoRmxpZ2h0c1F1ZXJ5LnJldHVybkFycml2YWxUaW1lV2luZG93KSB7XG4gICAgICB0aGlzLmluVGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5BcnJpdmU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFueXRpbWU7XG4gICAgfVxuXG4gICAgY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0QWlycG9ydEJ5Q29kZShcbiAgICAgICAgc2VhcmNoRmxpZ2h0c1F1ZXJ5Lm9yaWdpbkFpcnBvcnQsXG4gICAgICAgIHNlYXJjaEZsaWdodHNRdWVyeS5vcmlnaW5Mb2NhdGlvblR5cGVcbiAgICAgICksXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0QWlycG9ydEJ5Q29kZShcbiAgICAgICAgc2VhcmNoRmxpZ2h0c1F1ZXJ5LmRlc3RpbmF0aW9uQWlycG9ydCxcbiAgICAgICAgc2VhcmNoRmxpZ2h0c1F1ZXJ5LmRlc3RpbmF0aW9uTG9jYXRpb25UeXBlXG4gICAgICApXG4gICAgXSkuc3Vic2NyaWJlKChbZGVwYXJ0TG9jYXRpb24sIGFycml2ZUxvY2F0aW9uXSkgPT4ge1xuICAgICAgaWYgKGRlcGFydExvY2F0aW9uICYmIGFycml2ZUxvY2F0aW9uKSB7XG4gICAgICAgIHRoaXMuZGVwYXJ0TG9jYXRpb24gPSB7XG4gICAgICAgICAgZGVzdGluYXRpb246IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaC5uYW1lLFxuICAgICAgICAgIGdhdGV3YXk6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaC5pYXRhLFxuICAgICAgICAgIHRlcm1pbmFsczogdGhpcy5zZWFyY2hTZXJ2aWNlLnByb2Nlc3NUZXJtaW5hbHMoZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLnRlcm1pbmFscyksXG4gICAgICAgICAgY291bnRyeTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnksXG4gICAgICAgICAgcG9zdGNvZGU6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5wb3N0Y29kZSxcbiAgICAgICAgICBjb3VudHJ5Q29kZTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlLFxuICAgICAgICAgIGxvY2F0aW9uVHlwZTogc2VhcmNoRmxpZ2h0c1F1ZXJ5Lm9yaWdpbkxvY2F0aW9uVHlwZVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmFycml2ZUxvY2F0aW9uID0ge1xuICAgICAgICAgIGRlc3RpbmF0aW9uOiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2gubmFtZSxcbiAgICAgICAgICBnYXRld2F5OiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2guaWF0YSxcbiAgICAgICAgICB0ZXJtaW5hbHM6IHRoaXMuc2VhcmNoU2VydmljZS5wcm9jZXNzVGVybWluYWxzKGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC50ZXJtaW5hbHMpLFxuICAgICAgICAgIGNvdW50cnk6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5LFxuICAgICAgICAgIHBvc3Rjb2RlOiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8ucG9zdGNvZGUsXG4gICAgICAgICAgY291bnRyeUNvZGU6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5Q29kZSxcbiAgICAgICAgICBsb2NhdGlvblR5cGU6IHNlYXJjaEZsaWdodHNRdWVyeS5kZXN0aW5hdGlvbkxvY2F0aW9uVHlwZVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChzZWFyY2hGbGlnaHRzUXVlcnkucHJlZmVycmVkQ2FycmllcnMpIHtcbiAgICAgICAgICBsZXQgY2FycmllcnM6IHN0cmluZ1tdID0gc2VhcmNoRmxpZ2h0c1F1ZXJ5LnByZWZlcnJlZENhcnJpZXJzIGFzIHN0cmluZ1tdO1xuICAgICAgICAgIGNvbnN0IHByZWZlcnJlZENhcnJpZXJzOiBPQlRBaXJsaW5lc0RldGFpbHNbXSA9IFtdO1xuICAgICAgICAgIGNhcnJpZXJzLm1hcCgocHJlZmVycmVkQ2Fycnk6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlXG4gICAgICAgICAgICAgIC5nZXRBaXJsaW5lc0xpc3QocHJlZmVycmVkQ2FycnkpXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGl0ZW1zOiBPQlRBaXJsaW5lc0RldGFpbHNbXSkgPT4ge1xuICAgICAgICAgICAgICAgIGl0ZW1zLm1hcCgoaXRlbTogT0JUQWlybGluZXNEZXRhaWxzKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoaXRlbS5jb2RlID09PSBwcmVmZXJyZWRDYXJyeSkge1xuICAgICAgICAgICAgICAgICAgICBwcmVmZXJyZWRDYXJyaWVycy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMucHJlZmVycmVkQ2FycmllcnMgPSBwcmVmZXJyZWRDYXJyaWVycztcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIGFkZCBUcmF2ZWxsZXJzXG4gICAgaWYgKGJhc2tldEl0ZW0udXNlcnMpIHtcbiAgICAgIGJhc2tldEl0ZW0udXNlcnMuZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5hZGRUcmF2ZWxsZXIodXNlcik7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXRUb3RhbEJhZ2dhZ2UoZmFyZTogRmxpZ2h0SXRpbmVyYXJ5KTogbnVtYmVyIHtcbiAgICBjb25zdCBjaGVja0JhZ2dhZ2VzID0gdGhpcy5nZXRCYWdnYWdlQWxsb3dhbmNlKGZhcmUpO1xuICAgIGNvbnN0IGNoZWNrQmFnZ2FnZUFtb3VudHMgPSBjaGVja0JhZ2dhZ2VzXG4gICAgICA/LmZpbHRlcihhID0+IGE/LnR5cGUgPT09ICdDaGVja0luJylcbiAgICAgIC5tYXAoYSA9PiBhPy5xdHkpIGFzIG51bWJlcltdO1xuICAgIHJldHVybiBjaGVja0JhZ2dhZ2VBbW91bnRzLmxlbmd0aCA/IE1hdGgubWluKC4uLmNoZWNrQmFnZ2FnZUFtb3VudHMpIDogMDtcbiAgfVxuXG4gIGdldEhhbmRCYWdnYWdlKGZhcmU6IEZsaWdodEl0aW5lcmFyeSk6IG51bWJlciB7XG4gICAgY29uc3QgY2hlY2tCYWdnYWdlcyA9IHRoaXMuZ2V0QmFnZ2FnZUFsbG93YW5jZShmYXJlKTtcbiAgICBjb25zdCBoYW5kQmFnZ2FnZUFtb3VudHMgPSBjaGVja0JhZ2dhZ2VzXG4gICAgICA/LmZpbHRlcihhID0+IGE/LnR5cGUgPT09ICdIYW5kQ2FycnknKVxuICAgICAgLm1hcChhID0+IGE/LnF0eSkgYXMgbnVtYmVyW107XG4gICAgcmV0dXJuIGhhbmRCYWdnYWdlQW1vdW50cy5sZW5ndGggPyBNYXRoLm1pbiguLi5oYW5kQmFnZ2FnZUFtb3VudHMpIDogMDtcbiAgfVxuXG4gIGdldEJhZ2dhZ2VBbGxvd2FuY2UoZmFyZTogRmxpZ2h0SXRpbmVyYXJ5KTogeyB0eXBlOiBzdHJpbmc7IHF0eTogbnVtYmVyOyBpc0luOiBib29sZWFuIH1bXSB7XG4gICAgY29uc3QgY2hlY2tCYWdnYWdlczogeyB0eXBlOiBzdHJpbmc7IHF0eTogbnVtYmVyOyBpc0luOiBib29sZWFuIH1bXSA9IFtdO1xuICAgIGZhcmU/Lm91dGJvdW5kRmxpZ2h0cy5mb3JFYWNoKGZsaWdodCA9PiB7XG4gICAgICBpZiAoZmxpZ2h0LmFkZGl0aW9uYWw/LmJhZ2dhZ2VBbGxvd2FuY2U/Lmxlbmd0aCkge1xuICAgICAgICBjaGVja0JhZ2dhZ2VzLnB1c2goLi4uZmxpZ2h0LmFkZGl0aW9uYWwuYmFnZ2FnZUFsbG93YW5jZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoZmFyZT8uaW5ib3VuZEZsaWdodHMubGVuZ3RoKSB7XG4gICAgICBmYXJlLmluYm91bmRGbGlnaHRzLmZvckVhY2goZmxpZ2h0ID0+IHtcbiAgICAgICAgaWYgKGZsaWdodD8uYWRkaXRpb25hbD8uYmFnZ2FnZUFsbG93YW5jZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgY2hlY2tCYWdnYWdlcy5wdXNoKC4uLmZsaWdodC5hZGRpdGlvbmFsLmJhZ2dhZ2VBbGxvd2FuY2UpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hlY2tCYWdnYWdlcztcbiAgfVxuICAvLyBpc0dyb3VwZWRGbGlnaHRzKHRvVGVzdDogRmxpZ2h0UXVvdGVSZXN1bHRBcnJheSk6IHRvVGVzdCBpcyBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHRbXSB7XG4gIC8vICAgcmV0dXJuIHRvVGVzdFswXT8udHlwZSA9PT0gJ0ZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCc7XG4gIC8vIH1cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiAtIGZpbHRlciB0aGUgcmVzdWx0cywgdGhlbiBzb3J0IHRoZSByZW1haW5kZXJcbiAgICogQHRvZG8gLSBBZGQgZmlsdGVycyBmb3IgdHJhdmVsIHBvbGljeSwgZmFyZSB0eXBlcyBhbmQgYW5jaWxsaWFyaWVzXG4gICAqL1xuICBhcHBseUZpbHRlcnMoZmlsdGVyczogRmxpZ2h0RmlsdGVycywgc29ydFZhbHVlOiBGbGlnaHRTb3J0VHlwZXMpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXJzID0gZmlsdGVycztcbiAgICB0aGlzLmN1cnJlbnRTb3J0ID0gc29ydFZhbHVlO1xuICAgIC8vIGNvbnNvbGUubG9nKCcrKysgQXBwbHlpbmcgRmlsdGVycyB0byBmbGlnaHRzOiAnLCBmaWx0ZXJzLCAnICsrKycpO1xuICAgIGlmICh0aGlzLmZ1bGxSZXN1bHRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5yZXN1bHRzLm5leHQoW10pO1xuICAgIH1cblxuICAgIC8vIGNvbnN0IGZpbHRlclNlbGVjdGVkRmxpZ2h0czogKFxuICAgIC8vICAgZ3JvdXBzVG9TaG93OiBudW1iZXJbXSxcbiAgICAvLyAgIGRpcmVjdGlvbjogRmxpZ2h0RGlyZWN0aW9uRW51bVxuICAgIC8vICkgPT4gKGY6IEZsaWdodEl0aW5lcmFyeSkgPT4gYm9vbGVhbiA9IHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodFxuICAgIC8vICAgPyB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQuaW5ib3VuZEZsaWdodHM/Lmxlbmd0aFxuICAgIC8vICAgICA/IChncm91cHNUb1Nob3c6IG51bWJlcltdLCBkaXJlY3Rpb246IEZsaWdodERpcmVjdGlvbkVudW0pID0+IHtcbiAgICAvLyAgICAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpOiBib29sZWFuID0+IHtcbiAgICAvLyAgICAgICAgICAgcmV0dXJuIChcbiAgICAvLyAgICAgICAgICAgICBkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZUluYm91bmQgfHxcbiAgICAvLyAgICAgICAgICAgICBncm91cHNUb1Nob3cuaW5jbHVkZXMoZmxpZ2h0SXRpbmVyYXJ5LnVpZClcbiAgICAvLyAgICAgICAgICAgKTtcbiAgICAvLyAgICAgICAgIH07XG4gICAgLy8gICAgICAgfVxuICAgIC8vICAgICA6IChncm91cHNUb1Nob3c6IG51bWJlcltdLCBkaXJlY3Rpb246IEZsaWdodERpcmVjdGlvbkVudW0pID0+IHtcbiAgICAvLyAgICAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpOiBib29sZWFuID0+IHtcbiAgICAvLyAgICAgICAgICAgcmV0dXJuIChcbiAgICAvLyAgICAgICAgICAgICBkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZUluYm91bmQgfHxcbiAgICAvLyAgICAgICAgICAgICBncm91cHNUb1Nob3cuaW5jbHVkZXMoZmxpZ2h0SXRpbmVyYXJ5LnVpZClcbiAgICAvLyAgICAgICAgICAgKTtcbiAgICAvLyAgICAgICAgIH07XG4gICAgLy8gICAgICAgfVxuICAgIC8vICAgOiAoX2dyb3Vwc1RvU2hvdzogbnVtYmVyW10pID0+IHtcbiAgICAvLyAgICAgICByZXR1cm4gKF9mbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xuICAgIC8vICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgLy8gICAgICAgfTtcbiAgICAvLyAgICAgfTtcblxuICAgIGNvbnN0IHRlc3RlciA9IChcbiAgICAgIGZpbHRlcnNUb3Rlc3Q6IFJlY29yZDxudW1iZXIgfCBzdHJpbmcsIFNlbGVjdEZpbHRlcj4sXG4gICAgICB0ZXN0RnVuY3Rpb246IChcbiAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5LFxuICAgICAgICB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyXG4gICAgICApID0+IGJvb2xlYW5cbiAgICApID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gT2JqZWN0LnZhbHVlcyhmaWx0ZXJzVG90ZXN0KS5maWx0ZXIoXG4gICAgICAgIChmaWx0ZXI6IFNlbGVjdEZpbHRlcikgPT4gZmlsdGVyLnNlbGVjdGVkXG4gICAgICApO1xuICAgICAgaWYgKHNlbGVjdGVkLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leSkgPT4ge1xuICAgICAgICAgIHJldHVybiAhIXNlbGVjdGVkLmZpbmQoKGZpbHRlcjogU2VsZWN0RmlsdGVyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGVzdEZ1bmN0aW9uKGZsaWdodEl0aW5lcmFyeSwgZmlsdGVyLnZhbHVlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoX2ZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leSkgPT4ge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCByZXBsYWNlRmllbGRzID0gKGZpZWxkOiBzdHJpbmcsIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogc3RyaW5nID0+IHtcbiAgICAgIHJldHVybiBmaWVsZFxuICAgICAgICAucmVwbGFjZSgnT1VUQk9VTkRfREVQQVJUVVJFJywgJ291dGJvdW5kRmxpZ2h0cy4wJylcbiAgICAgICAgLnJlcGxhY2UoXG4gICAgICAgICAgJ09VVEJPVU5EX0FSUklWQUwnLFxuICAgICAgICAgICdvdXRib3VuZEZsaWdodHMuJyArIChmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDEpXG4gICAgICAgIClcbiAgICAgICAgLnJlcGxhY2UoJ0lOQk9VTkRfREVQQVJUVVJFJywgJ2luYm91bmRGbGlnaHRzLjAnKVxuICAgICAgICAucmVwbGFjZShcbiAgICAgICAgICAnSU5CT1VORF9BUlJJVkFMJyxcbiAgICAgICAgICAnaW5ib3VuZEZsaWdodHMuJyArICgoZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzIHx8IFtdKS5sZW5ndGggLSAxKVxuICAgICAgICApO1xuICAgIH07XG4gICAgY29uc3QgaXNCZXR3ZWVuID0gKFxuICAgICAgbWlubWF4OiBNaW5NYXgsXG4gICAgICBmaWVsZDogc3RyaW5nXG4gICAgKTogKChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gYm9vbGVhbikgPT4ge1xuICAgICAgcmV0dXJuIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICBjb25zdCB2YWwgPSB0aGlzLmhlbHBlcnMuZnJvbU9iamVjdChcbiAgICAgICAgICBmbGlnaHRJdGluZXJhcnksXG4gICAgICAgICAgLi4ucmVwbGFjZUZpZWxkcyhmaWVsZCwgZmxpZ2h0SXRpbmVyYXJ5KS5zcGxpdCgnLicpXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB2YWwgPj0gbWlubWF4Lm1pbiAmJiB2YWwgPD0gbWlubWF4Lm1heDtcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGlzVGltZUJldHdlZW4gPSAoXG4gICAgICBtaW5tYXg6IE1pbk1heCxcbiAgICAgIGZpZWxkOiBzdHJpbmdcbiAgICApOiAoKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuKSA9PiB7XG4gICAgICByZXR1cm4gKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogYm9vbGVhbiA9PiB7XG4gICAgICAgIGNvbnN0IHZhbCA9IG1vbWVudChcbiAgICAgICAgICB0aGlzLmhlbHBlcnMuZnJvbU9iamVjdChcbiAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeSxcbiAgICAgICAgICAgIC4uLnJlcGxhY2VGaWVsZHMoZmllbGQsIGZsaWdodEl0aW5lcmFyeSkuc3BsaXQoJy4nKVxuICAgICAgICAgIClcbiAgICAgICAgKS5nZXQoJ2hvdXInKTtcblxuICAgICAgICAvLyBub3cgYXR0ZW1wdCB0byBnZXQgdGhlIG1pbiAtIG1heSBuZWVkIHRvIG5vcm1hbGlzZSB0aGlzXG4gICAgICAgIGNvbnN0IHZhbDIgPSBtb21lbnQoXG4gICAgICAgICAgdGhpcy5oZWxwZXJzLmZyb21PYmplY3QoXG4gICAgICAgICAgICBmbGlnaHRJdGluZXJhcnksXG4gICAgICAgICAgICAuLi5yZXBsYWNlRmllbGRzKGZpZWxkLCBmbGlnaHRJdGluZXJhcnkpLnNwbGl0KCcuJylcbiAgICAgICAgICApXG4gICAgICAgICkuZ2V0KCdtaW51dGUnKTtcblxuICAgICAgICBjb25zdCB0b3RhbFRpbWU6IG51bWJlciA9IE51bWJlcihgJHt2YWx9LiR7dGhpcy5oZWxwZXJzLm5vcm1hbGlzZU1pbnV0ZVRvQmFzZTEwKHZhbDIpfWApO1xuICAgICAgICByZXR1cm4gdG90YWxUaW1lID49IG1pbm1heC5taW4gJiYgdG90YWxUaW1lIDw9IG1pbm1heC5tYXg7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBmaWVsZEhhc1ZhbHVlID0gKFxuICAgICAgZmllbGQ6IGtleW9mIEZsaWdodEpvdXJuZXlcbiAgICApOiAoKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgdmFsdWU6IHN0cmluZyB8IG51bWJlcikgPT4gYm9vbGVhbikgPT4ge1xuICAgICAgcmV0dXJuIChmbGlnaHQ6IEZsaWdodEpvdXJuZXksIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIGZsaWdodFtmaWVsZF0gPT09IHZhbHVlO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb3V0SXRpbmVyYXJ5VGVzdGVyczogKChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gYm9vbGVhbilbXSA9IFtdO1xuICAgIGNvbnN0IGluSXRpbmVyYXJ5VGVzdGVyczogKChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gYm9vbGVhbilbXSA9IFtdO1xuXG4gICAgY29uc3QgaW5EdWFsSXRpbmVyYXJ5VGVzdGVyczogKChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gYm9vbGVhbilbXSA9IFtdO1xuXG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxuICAgICAgaXNUaW1lQmV0d2VlbihmaWx0ZXJzLmFycml2YWxUaW1lLCAnT1VUQk9VTkRfQVJSSVZBTC5kYXRlVGltZUFycml2aW5nJylcbiAgICApO1xuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChcbiAgICAgIGlzVGltZUJldHdlZW4oZmlsdGVycy5kZXBhcnR1cmVUaW1lLCAnT1VUQk9VTkRfREVQQVJUVVJFLmRhdGVUaW1lRGVwYXJ0aW5nJylcbiAgICApO1xuXG4gICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5wdXNoKGlzQmV0d2VlbihmaWx0ZXJzLnJldHVybkR1cmF0aW9uLCAnb3V0Ym91bmRUb3RhbER1cmF0aW9uJykpO1xuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChpc0JldHdlZW4oZmlsdGVycy5kdXJhdGlvbiwgJ291dGJvdW5kVG90YWxEdXJhdGlvbicpKTtcbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goaXNCZXR3ZWVuKGZpbHRlcnMucHJpY2UsICd0b3RhbC5wcmljZScpKTtcblxuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChcbiAgICAgIHRlc3RlcihmaWx0ZXJzLnN0b3BzLCAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlID4gMSkge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCA9PT0gdmFsdWUgfHxcbiAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cz8ubGVuZ3RoID09PSB2YWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoID09PSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICB0ZXN0ZXIoZmlsdGVycy50b3RhbFN0b3BzLCAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBudW1iZXIpID0+IHtcbiAgICAgICAgY29uc3Qgb3V0U3RvcHMgPSBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgaW5TdG9wcyA9IGZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHRvdGFsU3RvcHMgPSBvdXRTdG9wcyA+IGluU3RvcHMgPyBvdXRTdG9wcyA6IGluU3RvcHM7XG4gICAgICAgIHJldHVybiB0b3RhbFN0b3BzID09PSB2YWx1ZTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucHVzaChcbiAgICAgIHRlc3RlcihmaWx0ZXJzLnRvdGFsU3RvcHMsIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggPT09IHZhbHVlO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxuICAgICAgdGVzdGVyKFxuICAgICAgICBmaWx0ZXJzLnRyYXZlbFBvbGljeSxcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBjb25zdCByZXF1aXJlc1JlYXNvbiA9IGZsaWdodEl0aW5lcmFyeS51bmF2YWlsYWJsZVxuICAgICAgICAgICAgPyBUcmF2ZWxQb2xpY2llcy5VTkFWQUlMQUJMRVxuICAgICAgICAgICAgOiBmbGlnaHRJdGluZXJhcnkucmVxdWlyZXNSZWFzb25LZXlzXG4gICAgICAgICAgICA/IFRyYXZlbFBvbGljaWVzLkFMTE9XX1dJVEhfUkVBU09OXG4gICAgICAgICAgICA6IFRyYXZlbFBvbGljaWVzLklOX1BPTElDWTtcbiAgICAgICAgICByZXR1cm4gcmVxdWlyZXNSZWFzb24gPT09IHZhbHVlO1xuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcblxuICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucHVzaChcbiAgICAgIHRlc3RlcihcbiAgICAgICAgZmlsdGVycy50cmF2ZWxQb2xpY3ksXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVxdWlyZXNSZWFzb24gPSBmbGlnaHRJdGluZXJhcnkudW5hdmFpbGFibGVcbiAgICAgICAgICAgID8gVHJhdmVsUG9saWNpZXMuVU5BVkFJTEFCTEVcbiAgICAgICAgICAgIDogZmxpZ2h0SXRpbmVyYXJ5LnJlcXVpcmVzUmVhc29uS2V5c1xuICAgICAgICAgICAgPyBUcmF2ZWxQb2xpY2llcy5BTExPV19XSVRIX1JFQVNPTlxuICAgICAgICAgICAgOiBUcmF2ZWxQb2xpY2llcy5JTl9QT0xJQ1k7XG4gICAgICAgICAgcmV0dXJuIHJlcXVpcmVzUmVhc29uID09PSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgKVxuICAgICk7XG5cbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICB0ZXN0ZXIoZmlsdGVycy5iYWdnYWdlLCAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBudW1iZXIpID0+IHtcbiAgICAgICAgY29uc3QgYmFnZ2FnZUFycmF5OiBudW1iZXJbXSA9IGZsaWdodEl0aW5lcmFyeS5iYWdnYWdlQWxsb3dhbmNlXG4gICAgICAgICAgPy5maWx0ZXIoYSA9PiBhPy50eXBlID09PSAnQ2hlY2tJbicpXG4gICAgICAgICAgLm1hcChhID0+IGE/LnF0eSkgYXMgbnVtYmVyW107XG4gICAgICAgIGNvbnN0IGJhZ2dhZ2U6IG51bWJlciA9IGJhZ2dhZ2VBcnJheS5sZW5ndGggPyBNYXRoLm1pbiguLi5iYWdnYWdlQXJyYXkpIDogMDtcbiAgICAgICAgcmV0dXJuIGJhZ2dhZ2UgPT09IHZhbHVlO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxuICAgICAgdGVzdGVyKGZpbHRlcnMuZGVwYXR1cmVBaXJwb3J0LCAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHNbMF0/Lm9yaWdpbkFpcnBvcnQgPT09IHZhbHVlO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxuICAgICAgdGVzdGVyKGZpbHRlcnMuYXJyaXZhbEFpcnBvcnQsIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHNbZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXVxuICAgICAgICAgICAgPy5kZXN0aW5hdGlvbkFpcnBvcnQgPT09IHZhbHVlXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChpc0JldHdlZW4oZmlsdGVycy5kdXJhdGlvbiwgJ291dGJvdW5kVG90YWxEdXJhdGlvbicpKTtcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChpc0JldHdlZW4oZmlsdGVycy5wcmljZSwgJ3RvdGFsLnByaWNlJykpO1xuICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucHVzaChpc0JldHdlZW4oZmlsdGVycy5wcmljZSwgJ3RvdGFsLnByaWNlJykpO1xuXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICBpc1RpbWVCZXR3ZWVuKGZpbHRlcnMucmV0dXJuQXJyaXZhbFRpbWUsICdJTkJPVU5EX0FSUklWQUwuZGF0ZVRpbWVBcnJpdmluZycpXG4gICAgKTtcblxuICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucHVzaChcbiAgICAgIGlzVGltZUJldHdlZW4oZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZSwgJ09VVEJPVU5EX0FSUklWQUwuZGF0ZVRpbWVBcnJpdmluZycpXG4gICAgKTtcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcbiAgICAgIGlzVGltZUJldHdlZW4oZmlsdGVycy5yZXR1cm5EZXBhcnR1cmVUaW1lLCAnSU5CT1VORF9ERVBBUlRVUkUuZGF0ZVRpbWVEZXBhcnRpbmcnKVxuICAgICk7XG5cbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICBpc1RpbWVCZXR3ZWVuKGZpbHRlcnMucmV0dXJuRGVwYXJ0dXJlVGltZSwgJ09VVEJPVU5EX0RFUEFSVFVSRS5kYXRlVGltZURlcGFydGluZycpXG4gICAgKTtcblxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKGlzQmV0d2VlbihmaWx0ZXJzLnJldHVybkR1cmF0aW9uLCAnaW5ib3VuZFRvdGFsRHVyYXRpb24nKSk7XG5cbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goaXNCZXR3ZWVuKGZpbHRlcnMucmV0dXJuRHVyYXRpb24sICdvdXRib3VuZFRvdGFsRHVyYXRpb24nKSk7XG5cbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcbiAgICAgIHRlc3RlcihmaWx0ZXJzLnN0b3BzLCAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlID4gMSkge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHMubGVuZ3RoID09PSB2YWx1ZSB8fFxuICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cz8ubGVuZ3RoID09PSB2YWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cy5sZW5ndGggPT09IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICB0ZXN0ZXIoZmlsdGVycy5zdG9wcywgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCA9PT0gdmFsdWU7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcbiAgICAgIHRlc3RlcihmaWx0ZXJzLmJhZ2dhZ2UsIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBiYWdnYWdlQXJyYXk6IG51bWJlcltdID0gZmxpZ2h0SXRpbmVyYXJ5LmJhZ2dhZ2VBbGxvd2FuY2VcbiAgICAgICAgICA/LmZpbHRlcihhID0+IGE/LnR5cGUgPT09ICdDaGVja0luJylcbiAgICAgICAgICAubWFwKChiYWdnYWdlQWxsb3dhbmNlOiBCYWdnYWdlQWxsb3dhbmNlKSA9PiBiYWdnYWdlQWxsb3dhbmNlLnF0eSk7XG4gICAgICAgIGNvbnN0IGJhZ2dhZ2U6IG51bWJlciA9IGJhZ2dhZ2VBcnJheS5sZW5ndGggPyBNYXRoLm1pbiguLi5iYWdnYWdlQXJyYXkpIDogMDtcbiAgICAgICAgcmV0dXJuIGJhZ2dhZ2UgPT09IHZhbHVlO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxuICAgICAgdGVzdGVyKGZpbHRlcnMuYmFnZ2FnZSwgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGJhZ2dhZ2VBcnJheTogbnVtYmVyW10gPSBmbGlnaHRJdGluZXJhcnkuYmFnZ2FnZUFsbG93YW5jZVxuICAgICAgICAgID8uZmlsdGVyKGEgPT4gYT8udHlwZSA9PT0gJ0NoZWNrSW4nKVxuICAgICAgICAgIC5tYXAoKGJhZ2dhZ2VBbGxvd2FuY2U6IEJhZ2dhZ2VBbGxvd2FuY2UpID0+IGJhZ2dhZ2VBbGxvd2FuY2UucXR5KTtcbiAgICAgICAgY29uc3QgYmFnZ2FnZTogbnVtYmVyID0gYmFnZ2FnZUFycmF5Lmxlbmd0aCA/IE1hdGgubWluKC4uLmJhZ2dhZ2VBcnJheSkgOiAwO1xuICAgICAgICByZXR1cm4gYmFnZ2FnZSA9PT0gdmFsdWU7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcbiAgICAgIHRlc3RlcihmaWx0ZXJzLmRlcGF0dXJlUmV0dXJuQWlycG9ydCwgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiBmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHNbMF0/Lm9yaWdpbkFpcnBvcnQgPT09IHZhbHVlO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxuICAgICAgdGVzdGVyKGZpbHRlcnMuZGVwYXR1cmVSZXR1cm5BaXJwb3J0LCAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHNbMF0/Lm9yaWdpbkFpcnBvcnQgPT09IHZhbHVlO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICB0ZXN0ZXIoZmlsdGVycy5hcnJpdmFsUmV0dXJuQWlycG9ydCwgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzW2ZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXVxuICAgICAgICAgICAgPy5kZXN0aW5hdGlvbkFpcnBvcnQgPT09IHZhbHVlXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICB0ZXN0ZXIoZmlsdGVycy5hcnJpdmFsUmV0dXJuQWlycG9ydCwgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0c1tmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICA/LmRlc3RpbmF0aW9uQWlycG9ydCA9PT0gdmFsdWVcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IG91dEpvdXJuZXlUZXN0ZXJzOiAoKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leSkgPT4gYm9vbGVhbilbXSA9IFtdO1xuICAgIG91dEpvdXJuZXlUZXN0ZXJzLnB1c2godGVzdGVyKGZpbHRlcnMuY2xhc3NlcywgZmllbGRIYXNWYWx1ZSgnY2FiaW5DbGFzcycpKSk7XG4gICAgb3V0Sm91cm5leVRlc3RlcnMucHVzaCh0ZXN0ZXIoZmlsdGVycy5haXJsaW5lcywgZmllbGRIYXNWYWx1ZSgnbWFya2V0aW5nQ2FycmllcicpKSk7XG4gICAgb3V0Sm91cm5leVRlc3RlcnMucHVzaChcbiAgICAgIHRlc3RlcihmaWx0ZXJzLnByaXZhdGVGYXJlcywgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0Sm91cm5leSwgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5LmZhcmVJbmZvLnRpdGxlID09PSB2YWx1ZTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGluSm91cm5leVRlc3RlcnM6ICgoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5KSA9PiBib29sZWFuKVtdID0gW107XG4gICAgaW5Kb3VybmV5VGVzdGVycy5wdXNoKHRlc3RlcihmaWx0ZXJzLmNsYXNzZXMsIGZpZWxkSGFzVmFsdWUoJ2NhYmluQ2xhc3MnKSkpO1xuICAgIGluSm91cm5leVRlc3RlcnMucHVzaCh0ZXN0ZXIoZmlsdGVycy5haXJsaW5lcywgZmllbGRIYXNWYWx1ZSgnbWFya2V0aW5nQ2FycmllcicpKSk7XG4gICAgaW5Kb3VybmV5VGVzdGVycy5wdXNoKFxuICAgICAgdGVzdGVyKGZpbHRlcnMucHJpdmF0ZUZhcmVzLCAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRKb3VybmV5LCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiBmbGlnaHRJdGluZXJhcnkuZmFyZUluZm8udGl0bGUgPT09IHZhbHVlO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgb3V0Sm91cm5leVRlc3RlcnMucHVzaChcbiAgICAgIHRlc3RlcihmaWx0ZXJzLnZpYXMsIGZpZWxkSGFzVmFsdWUoJ29yaWdpbkFpcnBvcnQnKSkgfHxcbiAgICAgICAgdGVzdGVyKGZpbHRlcnMudmlhcywgZmllbGRIYXNWYWx1ZSgnZGVzdGluYXRpb25BaXJwb3J0JykpXG4gICAgKTtcbiAgICBpbkpvdXJuZXlUZXN0ZXJzLnB1c2goXG4gICAgICB0ZXN0ZXIoZmlsdGVycy52aWFzLCBmaWVsZEhhc1ZhbHVlKCdvcmlnaW5BaXJwb3J0JykpIHx8XG4gICAgICAgIHRlc3RlcihmaWx0ZXJzLnZpYXMsIGZpZWxkSGFzVmFsdWUoJ2Rlc3RpbmF0aW9uQWlycG9ydCcpKVxuICAgICk7XG5cbiAgICBjb25zdCBvdXRGaWx0ZXJJdGluZXJhcmllcyA9IChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5yZWR1Y2UoXG4gICAgICAgICAgKGFjYzogYm9vbGVhbiwgdGVzdGVyMTogKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICBhY2MgPSBhY2MgJiYgdGVzdGVyMShmbGlnaHRJdGluZXJhcnkpO1xuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRydWVcbiAgICAgICAgKSAmJlxuICAgICAgICAoIWZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMgfHxcbiAgICAgICAgICAhIShmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzIHx8IFtdKS5maW5kKFxuICAgICAgICAgICAgKGZsaWdodEpvdXJuZXk6IEZsaWdodEpvdXJuZXkpOiBib29sZWFuID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuICEhb3V0Sm91cm5leVRlc3RlcnMucmVkdWNlKFxuICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgIGFjYzogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgIHRlc3RlcjI6IChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXkpID0+IGJvb2xlYW5cbiAgICAgICAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBhY2MgJiYgdGVzdGVyMihmbGlnaHRKb3VybmV5KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApKVxuICAgICAgKTtcbiAgICB9O1xuICAgIGNvbnN0IGluRmlsdGVySXRpbmVyYXJpZXMgPSAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpOiBib29sZWFuID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGluSXRpbmVyYXJ5VGVzdGVycy5yZWR1Y2UoXG4gICAgICAgICAgKGFjYzogYm9vbGVhbiwgdGVzdGVyMTogKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYWNjICYmIHRlc3RlcjEoZmxpZ2h0SXRpbmVyYXJ5KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRydWVcbiAgICAgICAgKSAmJlxuICAgICAgICAoIWZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cz8ubGVuZ3RoIHx8XG4gICAgICAgICAgISEoZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzIHx8IFtdKS5maW5kKChmbGlnaHRKb3VybmV5OiBGbGlnaHRKb3VybmV5KTogYm9vbGVhbiA9PiB7XG4gICAgICAgICAgICByZXR1cm4gISFpbkpvdXJuZXlUZXN0ZXJzLnJlZHVjZShcbiAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgIGFjYzogYm9vbGVhbixcbiAgICAgICAgICAgICAgICB0ZXN0ZXIyOiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5KSA9PiBib29sZWFuXG4gICAgICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2MgJiYgdGVzdGVyMihmbGlnaHRKb3VybmV5KTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KSlcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGNvbnN0IGluRHVhbEZpbHRlckl0aW5lcmFyaWVzID0gKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogYm9vbGVhbiA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnJlZHVjZShcbiAgICAgICAgICAoYWNjOiBib29sZWFuLCB0ZXN0ZXIxOiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhY2MgJiYgdGVzdGVyMShmbGlnaHRJdGluZXJhcnkpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApICYmXG4gICAgICAgICghZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cz8ubGVuZ3RoIHx8XG4gICAgICAgICAgISEoZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cyB8fCBbXSkuZmluZChcbiAgICAgICAgICAgIChmbGlnaHRKb3VybmV5OiBGbGlnaHRKb3VybmV5KTogYm9vbGVhbiA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiAhIWluSm91cm5leVRlc3RlcnMucmVkdWNlKFxuICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgIGFjYzogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgIHRlc3RlcjI6IChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXkpID0+IGJvb2xlYW5cbiAgICAgICAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBhY2MgJiYgdGVzdGVyMihmbGlnaHRKb3VybmV5KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApKVxuICAgICAgKTtcbiAgICB9O1xuXG5cbiAgICBjb25zdCBzZXRTZWxlY3RlZCA9IChmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSA9PiB7XG4gICAgICBmbGlnaHQuc2VsZWN0ZWQgPSBmbGlnaHQudWlkID09PSB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQ/LnVpZDtcbiAgICAgIGZsaWdodC5wcmVmZXJyZWQgPSB0aGlzLmhlbHBlcnMucHJlZmVycmVkRHVhbFNpbmdsZShcbiAgICAgICAgZmxpZ2h0LFxuICAgICAgICB0aGlzLnNlbGVjdGVkVUlkLFxuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeVxuICAgICAgKTtcbiAgICAgIGZsaWdodC5wcmVmZXJyZWRNZXNzYWdlcyA9IHRoaXMuaGVscGVycy5wcmVmZXJyZWRNZXNzYWdlc0R1YWxTaW5nbGUoXG4gICAgICAgIGZsaWdodCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZFVJZCxcbiAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnlcbiAgICAgICk7XG4gICAgICBmbGlnaHQucHJlZmVyZW5jZUxldmVsID0gdGhpcy5oZWxwZXJzLnByZWZlcmVuY2VMZXZlbER1YWxTaW5nbGUoXG4gICAgICAgIGZsaWdodCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZFVJZCxcbiAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnlcbiAgICAgICk7XG4gICAgICBmbGlnaHQudW5hdmFpbGFibGUgPSB0aGlzLmhlbHBlcnMudW5hdmFpbGFibGVEdWFsU2luZ2xlKFxuICAgICAgICBmbGlnaHQsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRVSWQsXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5XG4gICAgICApO1xuICAgICAgZmxpZ2h0LnJlcXVpcmVzUmVhc29uS2V5cyA9IHRoaXMuaGVscGVycy5yZXF1aXJlc1JlYXNvbkR1YWxTaW5nbGUoXG4gICAgICAgIGZsaWdodCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZFVJZCxcbiAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnlcbiAgICAgICk7XG4gICAgICBmbGlnaHQucmVxdWlyZXNSZWFzb25NZXNzYWdlS2V5cyA9IHRoaXMuaGVscGVycy5yZXF1aXJlc1JlYXNvbk1lc3NhZ2VEdWFsU2luZ2xlKFxuICAgICAgICBmbGlnaHQsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRVSWQsXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5XG4gICAgICApO1xuICAgICAgZmxpZ2h0LnVuYXZhaWxhYmxlTWVzc2FnZSA9IHRoaXMuaGVscGVycy51bmF2YWlsYWJsZU1lc3NhZ2VEdWFsU2luZ2xlKFxuICAgICAgICBmbGlnaHQsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRVSWQsXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5XG4gICAgICApO1xuICAgICAgcmV0dXJuIGZsaWdodDtcbiAgICB9O1xuICAgIHRoaXMucmVzdWx0cy5uZXh0KFxuICAgICAgT2JqZWN0LmZyZWV6ZShcbiAgICAgICAgdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMuZnVsbFJlc3VsdHMpLm1hcCgocmVzdWx0NDogRmxpZ2h0QWxsUXVvdGVSZXN1bHQpID0+IHtcbiAgICAgICAgICBsZXQgbmV3Sm91cm5leXM6IGFueSA9IHRoaXMuYnlTY2hlZHVsZVxuICAgICAgICAgICAgPyB0aGlzLmhlbHBlcnMuY2xvbmUocmVzdWx0NC5zZWFyY2hCeVNjaGVkdWxlW3RoaXMuc2VsZWN0ZWRTZWdtZW50XSlcbiAgICAgICAgICAgIDogdGhpcy5oZWxwZXJzLmNsb25lKHJlc3VsdDQuam91cm5leXMpO1xuICAgICAgICAgIGlmIChmaWx0ZXJzLmZsaWdodE51bWJlcikge1xuICAgICAgICAgICAgbmV3Sm91cm5leXMgPSBuZXdKb3VybmV5cy5maWx0ZXIoKGZsaWdodEl0ZW06IEZsaWdodEl0aW5lcmFyeSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBvdXRib3VuZEZsaWdodHMgPSBmbGlnaHRJdGVtLm91dGJvdW5kRmxpZ2h0cy5maW5kKG91dEZsaWdodCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbnVtYmVyID0gb3V0RmxpZ2h0Lm1hcmtldGluZ0NhcnJpZXIgKyBvdXRGbGlnaHQubWFya2V0aW5nRmxpZ2h0TnVtYmVyO1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIudG9Mb3dlckNhc2UoKSA9PT0gZmlsdGVycy5mbGlnaHROdW1iZXIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGlmIChvdXRib3VuZEZsaWdodHMpIHJldHVybiBmbGlnaHRJdGVtO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChmaWx0ZXJzLmluYm91bmRGbGlnaHROdW1iZXIpIHtcbiAgICAgICAgICAgIG5ld0pvdXJuZXlzID0gbmV3Sm91cm5leXMuZmlsdGVyKChmbGlnaHRJdGVtOiBGbGlnaHRJdGluZXJhcnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaW5ib3VuZEZsaWdodHMgPSBmbGlnaHRJdGVtLmluYm91bmRGbGlnaHRzLmZpbmQoaW5GbGlnaHQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlciA9IGluRmxpZ2h0Lm1hcmtldGluZ0NhcnJpZXIgKyBpbkZsaWdodC5tYXJrZXRpbmdGbGlnaHROdW1iZXI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlci50b0xvd2VyQ2FzZSgpID09PSBmaWx0ZXJzLmluYm91bmRGbGlnaHROdW1iZXIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGlmIChpbmJvdW5kRmxpZ2h0cykgcmV0dXJuIGZsaWdodEl0ZW07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXdKb3VybmV5cyA9IG5ld0pvdXJuZXlzLmZpbHRlcihvdXRGaWx0ZXJJdGluZXJhcmllcyk7XG4gICAgICAgICAgbGV0IG5ld0R1YWxTaW5nbGU6IEl0aW5lcmFyeVN1bW1hcnlbXSA9IHJlc3VsdDQubXVsdGkgYXMgSXRpbmVyYXJ5U3VtbWFyeVtdO1xuICAgICAgICAgIGlmICh0aGlzLmlzUmV0dXJuICYmICF0aGlzLmJ5U2NoZWR1bGUpIHtcbiAgICAgICAgICAgIGxldCBuZXdJbkpvdXJuZXlzOiBhbnkgPSB0aGlzLmhlbHBlcnMuY2xvbmUocmVzdWx0NC5qb3VybmV5cyk7XG4gICAgICAgICAgICBuZXdJbkpvdXJuZXlzID0gbmV3SW5Kb3VybmV5cy5maWx0ZXIoaW5GaWx0ZXJJdGluZXJhcmllcyk7XG4gICAgICAgICAgICBuZXdKb3VybmV5cyA9IHRoaXMubWVyZ2VPdXRJbkJvdW5kKG5ld0pvdXJuZXlzLCBuZXdJbkpvdXJuZXlzKTtcblxuICAgICAgICAgICAgLy8gRFVBTCBTSU5HTEVcbiAgICAgICAgICAgIGxldCBkdWFsU2luZ2xlSm91cm5leXNPdXQ6IGFueVtdID0gW107XG4gICAgICAgICAgICBsZXQgZHVhbFNpbmdsZUpvdXJuZXlzSW46IGFueVtdID0gW107XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBkdWFsU2luZ2xlSm91cm5leXNPdXQgPSB0aGlzLnNlbGVjdGVkRmxpZ2h0LnZhbHVlXG4gICAgICAgICAgICAgICAgPyB0aGlzLmhlbHBlcnNcbiAgICAgICAgICAgICAgICAgICAgLmNsb25lKHJlc3VsdDQubXVsdGlbMF0/LnJlc3VsdHMpXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgKGl0ZW06IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSA9PiBpdGVtLmpvdXJuZXlIYXNoID09PSB0aGlzLnNlbGVjdGVkVUlkXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IHRoaXMuaGVscGVyc1xuICAgICAgICAgICAgICAgICAgICAuY2xvbmUocmVzdWx0NC5tdWx0aVswXT8ucmVzdWx0cylcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihvdXRGaWx0ZXJJdGluZXJhcmllcylcbiAgICAgICAgICAgICAgICAgICAgLnNvcnQodGhpcy5fc29ydEl0aW5hcnlSb3V0aW5lc1tzb3J0VmFsdWVdKTtcblxuICAgICAgICAgICAgICBkdWFsU2luZ2xlSm91cm5leXNJbiA9IHRoaXMuc2VsZWN0ZWRGbGlnaHQudmFsdWVcbiAgICAgICAgICAgICAgICA/IHRoaXMuaGVscGVyc1xuICAgICAgICAgICAgICAgICAgICAuY2xvbmUocmVzdWx0NC5tdWx0aVsxXT8ucmVzdWx0cylcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihpbkR1YWxGaWx0ZXJJdGluZXJhcmllcylcbiAgICAgICAgICAgICAgICAgICAgLm1hcChzZXRTZWxlY3RlZClcbiAgICAgICAgICAgICAgICAgICAgLnNvcnQodGhpcy5fc29ydEl0aW5hcnlSb3V0aW5lc1tzb3J0VmFsdWVdKVxuICAgICAgICAgICAgICAgIDogdGhpcy5oZWxwZXJzXG4gICAgICAgICAgICAgICAgICAgIC5jbG9uZShyZXN1bHQ0Lm11bHRpWzFdPy5yZXN1bHRzKVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGluRHVhbEZpbHRlckl0aW5lcmFyaWVzKVxuICAgICAgICAgICAgICAgICAgICAuc29ydCh0aGlzLl9zb3J0SXRpbmFyeVJvdXRpbmVzW3NvcnRWYWx1ZV0pO1xuXG4gICAgICAgICAgICAgIGlmIChmaWx0ZXJzLmZsaWdodE51bWJlcikge1xuICAgICAgICAgICAgICAgIGR1YWxTaW5nbGVKb3VybmV5c091dCA9IGR1YWxTaW5nbGVKb3VybmV5c091dC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAoZmxpZ2h0SXRlbTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG91dGJvdW5kRmxpZ2h0cyA9IGZsaWdodEl0ZW0ub3V0Ym91bmRGbGlnaHRzLmZpbmQob3V0RmxpZ2h0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBudW1iZXIgPSBvdXRGbGlnaHQubWFya2V0aW5nQ2FycmllciArIG91dEZsaWdodC5tYXJrZXRpbmdGbGlnaHROdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlci50b0xvd2VyQ2FzZSgpID09PSBmaWx0ZXJzLmZsaWdodE51bWJlci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG91dGJvdW5kRmxpZ2h0cykgcmV0dXJuIGZsaWdodEl0ZW07XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZmlsdGVycy5pbmJvdW5kRmxpZ2h0TnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlzSW4gPSBkdWFsU2luZ2xlSm91cm5leXNJbi5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAoZmxpZ2h0SXRlbTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluYm91bmRGbGlnaHRzID0gZmxpZ2h0SXRlbS5vdXRib3VuZEZsaWdodHMuZmluZChpbkZsaWdodCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnVtYmVyID0gaW5GbGlnaHQubWFya2V0aW5nQ2FycmllciArIGluRmxpZ2h0Lm1hcmtldGluZ0ZsaWdodE51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyLnRvTG93ZXJDYXNlKCkgPT09IGZpbHRlcnMuaW5ib3VuZEZsaWdodE51bWJlci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluYm91bmRGbGlnaHRzKSByZXR1cm4gZmxpZ2h0SXRlbTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGArKysgRXJyb3Igc29ydGluZyBkdWFsIHNpbmdsZXM6ICR7ZXJyb3J9ICsrK2ApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobmV3RHVhbFNpbmdsZVswXSkge1xuICAgICAgICAgICAgICBuZXdEdWFsU2luZ2xlWzBdLnJlc3VsdHMgPSBkdWFsU2luZ2xlSm91cm5leXNPdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmV3RHVhbFNpbmdsZVsxXSkge1xuICAgICAgICAgICAgICBuZXdEdWFsU2luZ2xlWzFdLnJlc3VsdHMgPSBkdWFsU2luZ2xlSm91cm5leXNJbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgbmV3Sm91cm5leXMuc29ydCh0aGlzLl9zb3J0SXRpbmFyeVJvdXRpbmVzW3NvcnRWYWx1ZV0pO1xuICAgICAgICAgIGxldCBmaWx0ZXJlZHlTY2hlZHVsZTogRmxpZ2h0SXRpbmVyYXJ5W11bXSA9IFtdO1xuICAgICAgICAgIHJlc3VsdDQuc2VhcmNoQnlTY2hlZHVsZVt0aGlzLnNlbGVjdGVkU2VnbWVudF0gPSBuZXdKb3VybmV5cztcbiAgICAgICAgICBmaWx0ZXJlZHlTY2hlZHVsZSA9IHJlc3VsdDQuc2VhcmNoQnlTY2hlZHVsZTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ0ZsaWdodEFsbFF1b3RlUmVzdWx0JyxcbiAgICAgICAgICAgIGpvdXJuZXlzOiAhdGhpcy5ieVNjaGVkdWxlXG4gICAgICAgICAgICAgID8gPEZsaWdodEl0aW5lcmFyeVtdPm5ld0pvdXJuZXlzXG4gICAgICAgICAgICAgIDogPEZsaWdodEl0aW5lcmFyeVtdPnJlc3VsdDQuam91cm5leXMsXG4gICAgICAgICAgICBtdWx0aTogbmV3RHVhbFNpbmdsZSxcbiAgICAgICAgICAgIHNlYXJjaEJ5U2NoZWR1bGU6IHRoaXMuYnlTY2hlZHVsZVxuICAgICAgICAgICAgICA/IDxGbGlnaHRJdGluZXJhcnlbXVtdPmZpbHRlcmVkeVNjaGVkdWxlXG4gICAgICAgICAgICAgIDogPEZsaWdodEl0aW5lcmFyeVtdW10+cmVzdWx0NC5zZWFyY2hCeVNjaGVkdWxlXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgICkgYXMgdW5rbm93biBhcyBGbGlnaHRRdW90ZVJlc3VsdEFycmF5XG4gICAgKTtcbiAgICAvLyB9XG4gIH1cblxuICBtZXJnZU91dEluQm91bmQob3V0Ym91bmQ6IEZsaWdodEl0aW5lcmFyeVtdLCBpbmJvdW5kOiBGbGlnaHRJdGluZXJhcnlbXSk6IEZsaWdodEl0aW5lcmFyeVtdIHtcbiAgICBsZXQgZmxpZ2h0czogRmxpZ2h0SXRpbmVyYXJ5W10gPSBbXTtcbiAgICBvdXRib3VuZC5mb3JFYWNoKG91dEZsaWdodCA9PiB7XG4gICAgICBpZiAoaW5ib3VuZC5maW5kKGEgPT4gYS51aWQgPT0gb3V0RmxpZ2h0LnVpZCkpIGZsaWdodHNbb3V0RmxpZ2h0LnVpZF0gPSBvdXRGbGlnaHQ7XG4gICAgfSk7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZmxpZ2h0cyk7XG4gIH1cblxuICB1cGRhdGVMb3dlc3RQcmljZShyZXN1bHRzOiBGbGlnaHRRdW90ZVJlc3VsdEFycmF5KTogSUNoZWFwZXN0UHJpY2Uge1xuICAgIGlmICghcmVzdWx0cy5sZW5ndGggfHwgdGhpcy5zZWFyY2hTZXJ2aWNlLmlzRmxpZ2h0c0dyb3VwZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGpvdXJuZXlzID0gKHJlc3VsdHNbMF0gYXMgRmxpZ2h0QWxsUXVvdGVSZXN1bHQpLmpvdXJuZXlzO1xuICAgIGlmICgham91cm5leXMubGVuZ3RoKSByZXR1cm47XG5cbiAgICBjb25zdCBjdXJyZW5jeSA9IGpvdXJuZXlzWzBdLnRvdGFsLmN1cnJlbmN5O1xuICAgIHJldHVybiBqb3VybmV5cy5yZWR1Y2UoXG4gICAgICAoY2hlYXBlc3RQcmljZTogSUNoZWFwZXN0UHJpY2UsIHJlc3VsdDogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XG4gICAgICAgIGNvbnN0IHByaWNlID0gcmVzdWx0LnRvdGFsLnByaWNlO1xuICAgICAgICBpZiAoY2hlYXBlc3RQcmljZS5hbW91bnQgPiBwcmljZSkgY2hlYXBlc3RQcmljZS5hbW91bnQgPSBwcmljZTtcbiAgICAgICAgcmV0dXJuIGNoZWFwZXN0UHJpY2U7XG4gICAgICB9LFxuICAgICAgeyBhbW91bnQ6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLCBjdXJyZW5jeUNvZGU6IGN1cnJlbmN5IH1cbiAgICApO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdGVkRHVhbFNpbmdsZShzZWxlY3RlZEZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMpOiB2b2lkIHtcbiAgICB0aGlzLmZldGNoaW5nUnVsZXMgPSB0cnVlO1xuICAgIHRoaXMuc2VsZWN0ZWRGbGlnaHQubmV4dChzZWxlY3RlZEZsaWdodCk7XG4gICAgdGhpcy5zZWxlY3RlZFVJZCA9IHNlbGVjdGVkRmxpZ2h0LmpvdXJuZXlIYXNoO1xuICAgIGNvbnN0IGFwcGx5UnVsZXNPYnNlcnZhYmxlcyA9IHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLmZ1bGxSZXN1bHRzKS5tYXAoKHJlc3VsdDQ6IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuYXBwbHlGbGlnaHRSdWxlc1xuICAgICAgICAuZmV0Y2hPbmUoe1xuICAgICAgICAgIHNlbGVjdGVkT3V0Ym91bmRGbGlnaHQ6IHNlbGVjdGVkRmxpZ2h0LFxuICAgICAgICAgIGF2YWlsYWJsZUluYm91bmRGbGlnaHRzOiByZXN1bHQ0Lm11bHRpWzFdPy5yZXN1bHRzLFxuICAgICAgICAgIHNlYXJjaElkOiB0aGlzLnJhd1Jlc3VsdHMuc2VhcmNoSWRcbiAgICAgICAgfSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICBtYXAoKHJ1bGVzOiBSdWxlQWN0aW9uU3VtbWFyeUludGVyZmFjZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJ1bGVzPy5kdWFsU2luZ2xlV2hlblNlbGVjdGVkW3RoaXMuc2VsZWN0ZWRVSWRdKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5ID0gdGhpcy5oZWxwZXJzLm1lcmdlT2JqZWN0cyh0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeSwgcnVsZXMpO1xuICAgICAgICAgICAgICByZXN1bHQ0Lm11bHRpWzFdPy5yZXN1bHRzLm1hcCgoZmxpZ2h0SXRlbTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMpID0+IHtcbiAgICAgICAgICAgICAgICBmbGlnaHRJdGVtLnJlbW92ZVJlc3VsdCA9IHRoaXMuaGVscGVycy5yZW1vdmVSZXN1bHRzRHVhbFNpbmdsZShcbiAgICAgICAgICAgICAgICAgIGZsaWdodEl0ZW0sXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVUlkLFxuICAgICAgICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGZsaWdodEl0ZW0ucHJlZmVycmVkID0gdGhpcy5oZWxwZXJzLnByZWZlcnJlZER1YWxTaW5nbGUoXG4gICAgICAgICAgICAgICAgICBmbGlnaHRJdGVtLFxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVJZCxcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBmbGlnaHRJdGVtLnByZWZlcnJlZE1lc3NhZ2VzID0gdGhpcy5oZWxwZXJzLnByZWZlcnJlZE1lc3NhZ2VzRHVhbFNpbmdsZShcbiAgICAgICAgICAgICAgICAgIGZsaWdodEl0ZW0sXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVUlkLFxuICAgICAgICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGZsaWdodEl0ZW0ucHJlZmVyZW5jZUxldmVsID0gdGhpcy5oZWxwZXJzLnByZWZlcmVuY2VMZXZlbER1YWxTaW5nbGUoXG4gICAgICAgICAgICAgICAgICBmbGlnaHRJdGVtLFxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVJZCxcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBmbGlnaHRJdGVtLnJlcXVpcmVzUmVhc29uS2V5cyA9IHRoaXMuaGVscGVycy5yZXF1aXJlc1JlYXNvbkR1YWxTaW5nbGUoXG4gICAgICAgICAgICAgICAgICBmbGlnaHRJdGVtLFxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVJZCxcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBmbGlnaHRJdGVtLnJlcXVpcmVzUmVhc29uTWVzc2FnZUtleXMgPSB0aGlzLmhlbHBlcnMucmVxdWlyZXNSZWFzb25NZXNzYWdlRHVhbFNpbmdsZShcbiAgICAgICAgICAgICAgICAgIGZsaWdodEl0ZW0sXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVUlkLFxuICAgICAgICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGZsaWdodEl0ZW0udW5hdmFpbGFibGUgPSB0aGlzLmhlbHBlcnMudW5hdmFpbGFibGVEdWFsU2luZ2xlKFxuICAgICAgICAgICAgICAgICAgZmxpZ2h0SXRlbSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVSWQsXG4gICAgICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZmxpZ2h0SXRlbS51bmF2YWlsYWJsZU1lc3NhZ2UgPSB0aGlzLmhlbHBlcnMudW5hdmFpbGFibGVNZXNzYWdlRHVhbFNpbmdsZShcbiAgICAgICAgICAgICAgICAgIGZsaWdodEl0ZW0sXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVUlkLFxuICAgICAgICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWYgKHJlc3VsdDQubXVsdGlbMV0/LnJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQ0Lm11bHRpWzFdLnJlc3VsdHMgPSByZXN1bHQ0Lm11bHRpWzFdLnJlc3VsdHMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgKGZsaWdodEl0ZW06IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSA9PiAhZmxpZ2h0SXRlbS5yZW1vdmVSZXN1bHRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgbmV3RHVhbFNpbmdsZTogSXRpbmVyYXJ5U3VtbWFyeVtdID0gcmVzdWx0NC5tdWx0aTtcbiAgICAgICAgICAgIGxldCBkdWFsU2luZ2xlSm91cm5leXNPdXQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zW10gPSBbXG4gICAgICAgICAgICAgIHRoaXMuaGVscGVycy5jbG9uZShzZWxlY3RlZEZsaWdodClcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICAvLyAuZmlsdGVyKChpdGVtOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucykgPT4gaXRlbS51aWQgPT09IHNlbGVjdGVkRmxpZ2h0LnVpZCk7XG5cbiAgICAgICAgICAgIGlmIChuZXdEdWFsU2luZ2xlWzBdKSB7XG4gICAgICAgICAgICAgIG5ld0R1YWxTaW5nbGVbMF0ucmVzdWx0cyA9IGR1YWxTaW5nbGVKb3VybmV5c091dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZmV0Y2hpbmdSdWxlcyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBfdHlwZTogJ0ZsaWdodEFsbFF1b3RlUmVzdWx0JyxcbiAgICAgICAgICAgICAgam91cm5leXM6IDxGbGlnaHRJdGluZXJhcnlbXT5yZXN1bHQ0LmpvdXJuZXlzLFxuICAgICAgICAgICAgICBtdWx0aTogbmV3RHVhbFNpbmdsZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgZm9ya0pvaW4oYXBwbHlSdWxlc09ic2VydmFibGVzKS5zdWJzY3JpYmUoKHJlc3VsdHM6IGFueSkgPT4ge1xuICAgICAgdGhpcy5yZXN1bHRzLm5leHQoT2JqZWN0LmZyZWV6ZShyZXN1bHRzKSBhcyBGbGlnaHRRdW90ZVJlc3VsdEFycmF5KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlc2V0U2VsZWN0ZWREdWFsU2luZ2xlKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRGbGlnaHQubmV4dChudWxsKTtcbiAgICB0aGlzLmFwcGx5RmlsdGVycyh0aGlzLmN1cnJlbnRGaWx0ZXJzLCB0aGlzLmN1cnJlbnRTb3J0KTtcbiAgfVxuXG5cbiAgYXN5bmMgc2VsZWN0R3JvdXBlZEZsaWdodChcbiAgICBzZWxlY3RlZEZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtLFxuICAgIGdyb3VwSWQ6IG51bWJlcixcbiAgICBpc0xpZ2h0bmluZzogYm9vbGVhbiA9IGZhbHNlIC8vIHRlbXAgYXJnIGFzIHNlYXRtYXBzIG9uIG9uIGx1XG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPSBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcblxuICAgIGlmIChcbiAgICAgIChiYXNrZXQgJiYgdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2guY2hvc2VuU2VhcmNoVHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5vbmVXYXkpIHx8XG4gICAgICAodGhpcy5vcmlnaW5hbFVzZXJTZWFyY2guY2hvc2VuU2VhcmNoVHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5tdWx0aUNpdHkgJiZcbiAgICAgICAgZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kKVxuICAgICkge1xuICAgICAgLy8gdGVtcCBzdGF0ZW1lbnQgYXMgc2VhdG1hcHMgb24gb24gbHUsIGFsc28gb25seSBmb3IgVEZYIGZvciB0aGUgbW9tZW50XG4gICAgICBpZiAoaXNMaWdodG5pbmcgJiYgdGhpcy5jaGVja1NlYXRtYXBFeHRyYXNFbmFibGVkKHNlbGVjdGVkRmxpZ2h0KSkge1xuICAgICAgICBjb25zdCBkZXRhaWxFeHRyYXMgPSBhd2FpdCB0aGlzLmdldEZsaWdodERldGFpbEV4dHJhcyhzZWxlY3RlZEZsaWdodCwgZGlyZWN0aW9uKTtcbiAgICAgICAgaWYgKGRldGFpbEV4dHJhcz8udmFsaWQpIHtcbiAgICAgICAgICBzZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHMgPSB0aGlzLmFwcGx5RXh0cmFEZXRhaWxzVG9GbGlnaHRzKFxuICAgICAgICAgICAgc2VsZWN0ZWRGbGlnaHQub3V0Ym91bmRGbGlnaHRzLFxuICAgICAgICAgICAgZGV0YWlsRXh0cmFzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmJvb2tTaW5nbGVGbGlnaHQoaW50QmFza2V0LCBzZWxlY3RlZEZsaWdodCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYm9va1NpbmdsZUZsaWdodChpbnRCYXNrZXQsIHNlbGVjdGVkRmxpZ2h0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBiYXNrZXQgJiZcbiAgICAgIHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuICYmXG4gICAgICAoZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kIHx8XG4gICAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5EdWFsU2luZ2xlT3V0Ym91bmQpXG4gICAgKSB7XG4gICAgICB0aGlzLm91dGJvdW5kQ2FiaW5DbGFzcyA9IHNlbGVjdGVkRmxpZ2h0Lm91dGJvdW5kRmxpZ2h0c1swXS5jYWJpbkNsYXNzO1xuICAgICAgaWYgKHNlbGVjdGVkRmxpZ2h0LnNlbGVjdGVkKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodCA9IG51bGw7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkID0gLTE7XG4gICAgICAgIHRoaXMub3V0Ym91bmRDYWJpbkNsYXNzID0gJyc7IC8vIHJlc2V0IG91dGJvdW5kQ2FiaW5DbGFzc1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycyh0aGlzLmN1cnJlbnRGaWx0ZXJzLCB0aGlzLmN1cnJlbnRTb3J0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodCA9IHNlbGVjdGVkRmxpZ2h0O1xuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBJZCA9IGdyb3VwSWQ7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKHRoaXMuY3VycmVudEZpbHRlcnMsIHRoaXMuY3VycmVudFNvcnQpO1xuICAgICAgICB0aGlzLl91cGRhdGVUcmF2ZWxQb2xpY2llcygpO1xuICAgICAgfVxuICAgICAgc2VsZWN0ZWRGbGlnaHQuc2VsZWN0ZWQgPSAhc2VsZWN0ZWRGbGlnaHQuc2VsZWN0ZWQ7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGJhc2tldCAmJlxuICAgICAgdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2guY2hvc2VuU2VhcmNoVHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm4gJiZcbiAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5JbmJvdW5kICYmXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHRcbiAgICApIHtcbiAgICAgIC8vIHRlbXAgc3RhdGVtZW50IGFzIHNlYXRtYXBzIG9uIG9uIGx1XG4gICAgICBpZiAoaXNMaWdodG5pbmcgJiYgdGhpcy5jaGVja1NlYXRtYXBFeHRyYXNFbmFibGVkKHNlbGVjdGVkRmxpZ2h0KSkge1xuICAgICAgICBjb25zdCBkZXRhaWxFeHRyYXMgPSBhd2FpdCB0aGlzLmdldEZsaWdodERldGFpbEV4dHJhcyhzZWxlY3RlZEZsaWdodCwgZGlyZWN0aW9uKTtcbiAgICAgICAgaWYgKGRldGFpbEV4dHJhcz8udmFsaWQpIHtcbiAgICAgICAgICBzZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHMgPSB0aGlzLmFwcGx5RXh0cmFEZXRhaWxzVG9GbGlnaHRzKFxuICAgICAgICAgICAgc2VsZWN0ZWRGbGlnaHQub3V0Ym91bmRGbGlnaHRzLFxuICAgICAgICAgICAgZGV0YWlsRXh0cmFzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBzZWxlY3RlZEZsaWdodC5pbmJvdW5kRmxpZ2h0cyA9IHRoaXMuYXBwbHlFeHRyYURldGFpbHNUb0ZsaWdodHMoXG4gICAgICAgICAgICBzZWxlY3RlZEZsaWdodC5pbmJvdW5kRmxpZ2h0cyxcbiAgICAgICAgICAgIGRldGFpbEV4dHJhc1xuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5vdXRib3VuZENhYmluQ2xhc3MgPSAnJzsgLy8gcmVzZXQgb3V0Ym91bmRDYWJpbkNsYXNzXG4gICAgICAgICAgY29uc3Qgc2NoZW1hRGV0YWlscyA9IHRoaXMuY3JlYXRlU2NoZW1hRGV0YWlscyhcbiAgICAgICAgICAgIHNlbGVjdGVkRmxpZ2h0LFxuICAgICAgICAgICAgRmxpZ2h0Sm91cm5leVR5cGUuUm91bmR0cmlwXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmRvQm9va2luZyhcbiAgICAgICAgICAgIGludEJhc2tldCxcbiAgICAgICAgICAgIHNlbGVjdGVkRmxpZ2h0LFxuICAgICAgICAgICAgc2NoZW1hRGV0YWlscyxcbiAgICAgICAgICAgIHNlbGVjdGVkRmxpZ2h0Lm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZ1VUQyxcbiAgICAgICAgICAgIHNlbGVjdGVkRmxpZ2h0LmluYm91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nVVRDXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQgPSBudWxsO1xuICAgICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKHRoaXMuY3VycmVudEZpbHRlcnMsIHRoaXMuY3VycmVudFNvcnQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm91dGJvdW5kQ2FiaW5DbGFzcyA9ICcnOyAvLyByZXNldCBvdXRib3VuZENhYmluQ2xhc3NcbiAgICAgICAgY29uc3Qgc2NoZW1hRGV0YWlscyA9IHRoaXMuY3JlYXRlU2NoZW1hRGV0YWlscyhzZWxlY3RlZEZsaWdodCwgRmxpZ2h0Sm91cm5leVR5cGUuUm91bmR0cmlwKTtcbiAgICAgICAgYXdhaXQgdGhpcy5kb0Jvb2tpbmcoXG4gICAgICAgICAgaW50QmFza2V0LFxuICAgICAgICAgIHNlbGVjdGVkRmxpZ2h0LFxuICAgICAgICAgIHNjaGVtYURldGFpbHMsXG4gICAgICAgICAgc2VsZWN0ZWRGbGlnaHQub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nVVRDLFxuICAgICAgICAgIHNlbGVjdGVkRmxpZ2h0LmluYm91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nVVRDXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodC5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQgPSBudWxsO1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycyh0aGlzLmN1cnJlbnRGaWx0ZXJzLCB0aGlzLmN1cnJlbnRTb3J0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBiYXNrZXQgJiZcbiAgICAgIHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuICYmXG4gICAgICBkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZUluYm91bmQgJiZcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodFxuICAgICkge1xuICAgICAgLy8gdGVtcCBzdGF0ZW1lbnQgYXMgc2VhdG1hcHMgb24gb24gbHVcbiAgICAgIGlmIChpc0xpZ2h0bmluZyAmJiB0aGlzLmNoZWNrU2VhdG1hcEV4dHJhc0VuYWJsZWQoc2VsZWN0ZWRGbGlnaHQpKSB7XG4gICAgICAgIGNvbnN0IGRldGFpbEV4dHJhc091dCA9IGF3YWl0IHRoaXMuZ2V0RmxpZ2h0RGV0YWlsRXh0cmFzKHNlbGVjdGVkRmxpZ2h0LCBkaXJlY3Rpb24pO1xuICAgICAgICBpZiAoZGV0YWlsRXh0cmFzT3V0Py52YWxpZCkge1xuICAgICAgICAgIHNlbGVjdGVkRmxpZ2h0Lm91dGJvdW5kRmxpZ2h0cyA9IHRoaXMuYXBwbHlFeHRyYURldGFpbHNUb0ZsaWdodHMoXG4gICAgICAgICAgICBzZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHMsXG4gICAgICAgICAgICBkZXRhaWxFeHRyYXNPdXRcbiAgICAgICAgICApO1xuICAgICAgICAgIHNlbGVjdGVkRmxpZ2h0LmluYm91bmRGbGlnaHRzID0gdGhpcy5hcHBseUV4dHJhRGV0YWlsc1RvRmxpZ2h0cyhcbiAgICAgICAgICAgIHNlbGVjdGVkRmxpZ2h0LmluYm91bmRGbGlnaHRzLFxuICAgICAgICAgICAgZGV0YWlsRXh0cmFzT3V0XG4gICAgICAgICAgKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmJvb2tTaW5nbGVGbGlnaHQoXG4gICAgICAgICAgICBpbnRCYXNrZXQsXG4gICAgICAgICAgICBzZWxlY3RlZEZsaWdodCxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkR1YWxTaW5nbGVJbmJvdW5kXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZXRhaWxFeHRyYXNJbiA9IGF3YWl0IHRoaXMuZ2V0RmxpZ2h0RGV0YWlsRXh0cmFzKHNlbGVjdGVkRmxpZ2h0LCBkaXJlY3Rpb24pO1xuICAgICAgICBpZiAoZGV0YWlsRXh0cmFzSW4/LnZhbGlkKSB7XG4gICAgICAgICAgc2VsZWN0ZWRGbGlnaHQub3V0Ym91bmRGbGlnaHRzID0gdGhpcy5hcHBseUV4dHJhRGV0YWlsc1RvRmxpZ2h0cyhcbiAgICAgICAgICAgIHNlbGVjdGVkRmxpZ2h0Lm91dGJvdW5kRmxpZ2h0cyxcbiAgICAgICAgICAgIGRldGFpbEV4dHJhc0luXG4gICAgICAgICAgKTtcbiAgICAgICAgICBzZWxlY3RlZEZsaWdodC5pbmJvdW5kRmxpZ2h0cyA9IHRoaXMuYXBwbHlFeHRyYURldGFpbHNUb0ZsaWdodHMoXG4gICAgICAgICAgICBzZWxlY3RlZEZsaWdodC5pbmJvdW5kRmxpZ2h0cyxcbiAgICAgICAgICAgIGRldGFpbEV4dHJhc0luXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmJvb2tTaW5nbGVGbGlnaHQoXG4gICAgICAgICAgICBpbnRCYXNrZXQsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQsXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIGRpcmVjdGlvbiAhPT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5EdWFsU2luZ2xlSW5ib3VuZFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0LnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodCA9IG51bGw7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKHRoaXMuY3VycmVudEZpbHRlcnMsIHRoaXMuY3VycmVudFNvcnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYm9va1NpbmdsZUZsaWdodChcbiAgICAgICAgICBpbnRCYXNrZXQsXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0LFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIGRpcmVjdGlvbiAhPT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5EdWFsU2luZ2xlSW5ib3VuZFxuICAgICAgICApO1xuICAgICAgICBhd2FpdCB0aGlzLmJvb2tTaW5nbGVGbGlnaHQoXG4gICAgICAgICAgaW50QmFza2V0LFxuICAgICAgICAgIHNlbGVjdGVkRmxpZ2h0LFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5EdWFsU2luZ2xlSW5ib3VuZFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHNlbGVjdEZsaWdodFNlYXRNYXBDaGVjayhcbiAgICBmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxuICAgIGRpcmVjdGlvbjogRmxpZ2h0RGlyZWN0aW9uRW51bSA9IG51bGwsXG4gICAgZ210OiBib29sZWFuID0gZmFsc2VcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgLy9mb3IgU2Npb24gYW5kIEdvMiBmbGlnaHRcbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID0gYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcbiAgICBpZiAoZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkR1YWxTaW5nbGVJbmJvdW5kKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5kdWFsU2luZ2xlU2VhdENoZWNrKGZsaWdodCwgaW50QmFza2V0LCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2hlY2tGb3JTZWF0TWFwKGZsaWdodCwgaW50QmFza2V0LCBmYWxzZSwgZ210KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjaGVja0ZvclNlYXRNYXAoXG4gICAgZmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcbiAgICBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlLFxuICAgIGR1YWxJbmJvdW5kOiBib29sZWFuLFxuICAgIGdtdDogYm9vbGVhbiA9IGZhbHNlXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmNoZWNrU2VhdG1hcEV4dHJhc0VuYWJsZWQoZmxpZ2h0KSkge1xuICAgICAgY29uc3QgZGV0YWlsRXh0cmFzID0gYXdhaXQgdGhpcy5nZXRGbGlnaHREZXRhaWxFeHRyYXMoXG4gICAgICAgIGZsaWdodCxcbiAgICAgICAgRmxpZ2h0RGlyZWN0aW9uRW51bS5EdWFsU2luZ2xlT3V0Ym91bmQsXG4gICAgICAgIGdtdFxuICAgICAgKTtcbiAgICAgIGlmIChkZXRhaWxFeHRyYXM/LnZhbGlkKSB7XG4gICAgICAgIGZsaWdodC5vdXRib3VuZEZsaWdodHMgPSB0aGlzLmFwcGx5RXh0cmFEZXRhaWxzVG9GbGlnaHRzKFxuICAgICAgICAgIGZsaWdodC5vdXRib3VuZEZsaWdodHMsXG4gICAgICAgICAgZGV0YWlsRXh0cmFzXG4gICAgICAgICk7XG4gICAgICAgIGZsaWdodC5pbmJvdW5kRmxpZ2h0cyA9IHRoaXMuYXBwbHlFeHRyYURldGFpbHNUb0ZsaWdodHMoXG4gICAgICAgICAgZmxpZ2h0LmluYm91bmRGbGlnaHRzLFxuICAgICAgICAgIGRldGFpbEV4dHJhc1xuICAgICAgICApO1xuICAgICAgICBhd2FpdCB0aGlzLmFkZEZsaWdodEpvdXJuZXlzVG9CYXNrZXQoZmxpZ2h0LCBpbnRCYXNrZXQsIGZhbHNlLCBkdWFsSW5ib3VuZCwgZ210KTtcbiAgICAgICAgcmV0dXJuIGRldGFpbEV4dHJhcy5pc0Jvb2tpbmc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRkRmxpZ2h0Sm91cm5leXNUb0Jhc2tldChmbGlnaHQsIGludEJhc2tldCwgZmFsc2UsIGR1YWxJbmJvdW5kLCBnbXQpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG4gIGFzeW5jIGR1YWxTaW5nbGVTZWF0Q2hlY2soXG4gICAgZmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcbiAgICBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlLFxuICAgIGR1YWxJbmJvdW5kOiBib29sZWFuXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHNlbGVjdGVkb3V0Ym91bmREUyA9IHRoaXMuc2VsZWN0ZWRGbGlnaHQudmFsdWU7XG4gICAgY29uc3Qgb3V0cnVsZXMgPSB0aGlzLmdldEZhcmVSdWxlcyhzZWxlY3RlZG91dGJvdW5kRFM/LmpvdXJuZXlIYXNoKTtcbiAgICBjb25zdCBvdXRmbGlnaHRDb3B5ID0gPEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zPnRoaXMuaGVscGVycy5jbG9uZShzZWxlY3RlZG91dGJvdW5kRFMpO1xuICAgIGlmIChvdXRydWxlcy5qb3VybmV5V2hlblNlbGVjdGVkPy5yZXF1aXJlc1JlYXNvbikge1xuICAgICAgb3V0ZmxpZ2h0Q29weS5yZXF1aXJlc1JlYXNvbktleXMgPSBvdXRydWxlcy5qb3VybmV5V2hlblNlbGVjdGVkPy5yZXF1aXJlc1JlYXNvbktleXM7XG4gICAgICBvdXRmbGlnaHRDb3B5LnJlcXVpcmVzUmVhc29uTWVzc2FnZXMgPSBvdXRydWxlcy5qb3VybmV5V2hlblNlbGVjdGVkPy5yZXF1aXJlc1JlYXNvbk1lc3NhZ2VzO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmNoZWNrRm9yU2VhdE1hcChvdXRmbGlnaHRDb3B5LCBpbnRCYXNrZXQsIGZhbHNlKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jaGVja0ZvclNlYXRNYXAoZmxpZ2h0LCBpbnRCYXNrZXQsIGR1YWxJbmJvdW5kKTtcbiAgfVxuXG4gIGNoZWNrU2VhdG1hcEV4dHJhc0VuYWJsZWQoc2VsZWN0ZWRGbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2VhdE1hcENvbmZpZ3MgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJGYXZvcml0ZU9iamVjdDx7XG4gICAgICBHRFM6IHsgc2hvd1NlYXRNYXBzOiBib29sZWFuIH07XG4gICAgICBMQ0M6IHsgc2hvd1NlYXRNYXBzOiBib29sZWFuOyBzaG93RXh0cmFzOiBib29sZWFuIH07XG4gICAgICBOREM6IHsgc2hvd1NlYXRNYXBzOiBib29sZWFuIH07XG4gICAgfT4oVXNlckZhdm9ydXJpdGUuRmxpZ2h0UmVzdWx0c0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgY29uc3QgYWxsb3dBZ2VudFRvVmlld1NlYXRNYXBzID0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRmF2b3JpdGVPYmplY3Q8e1xuICAgICAgR0RTOiB7IHNob3dTZWF0TWFwczogYm9vbGVhbiB9O1xuICAgICAgTENDOiB7IHNob3dTZWF0TWFwczogYm9vbGVhbiB9O1xuICAgICAgTkRDOiB7IHNob3dTZWF0TWFwczogYm9vbGVhbiB9O1xuICAgIH0+KFVzZXJGYXZvcnVyaXRlLkFsbG93QWdlbnRUb1ZpZXdTZWF0TWFwcyk7XG5cbiAgICBjb25zdCBwZXJtaXR0ZWRTZXJ2aWNlc0xDQzogc3RyaW5nW10gPSBbU2VydmljZVByb3ZpZGVyLlRyYXZlbGZ1c2lvbl07XG4gICAgY29uc3QgcGVybWl0dGVkU2VydmljZXNHRFM6IHN0cmluZ1tdID0gW1xuICAgICAgU2VydmljZVByb3ZpZGVyLlNhYnJlRmxpZ2h0LFxuICAgICAgU2VydmljZVByb3ZpZGVyLlRyYXZlbHBvcnRGbGlnaHQsXG4gICAgICBTZXJ2aWNlUHJvdmlkZXIuQW1hZGV1c0ZsaWdodFxuICAgIF07XG5cbiAgICBjb25zdCBwZXJtaXR0ZWRTZXJ2aWNlc05EQzogc3RyaW5nW10gPSBbU2VydmljZVByb3ZpZGVyLlNhYnJlTkRDXTtcbiAgICBjb25zdCB7IHNvdXJjZSB9ID0gc2VsZWN0ZWRGbGlnaHQ7XG5cbiAgICBpZiAocGVybWl0dGVkU2VydmljZXNMQ0MuaW5jbHVkZXMoc291cmNlKSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgc2VhdE1hcENvbmZpZ3M/LkxDQz8uc2hvd1NlYXRNYXBzIHx8XG4gICAgICAgIHNlYXRNYXBDb25maWdzPy5MQ0M/LnNob3dFeHRyYXMgfHxcbiAgICAgICAgKHRoaXMudXNlclNlcnZpY2UudXNlcklzQWdlbnQoKSAmJiBhbGxvd0FnZW50VG9WaWV3U2VhdE1hcHM/LkxDQz8uc2hvd1NlYXRNYXBzKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocGVybWl0dGVkU2VydmljZXNHRFMuaW5jbHVkZXMoc291cmNlKSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgc2VhdE1hcENvbmZpZ3M/LkdEUz8uc2hvd1NlYXRNYXBzIHx8XG4gICAgICAgICh0aGlzLnVzZXJTZXJ2aWNlLnVzZXJJc0FnZW50KCkgJiYgYWxsb3dBZ2VudFRvVmlld1NlYXRNYXBzPy5HRFM/LnNob3dTZWF0TWFwcylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHBlcm1pdHRlZFNlcnZpY2VzTkRDLmluY2x1ZGVzKHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHNlYXRNYXBDb25maWdzPy5OREM/LnNob3dTZWF0TWFwcyB8fFxuICAgICAgICAodGhpcy51c2VyU2VydmljZS51c2VySXNBZ2VudCgpICYmIGFsbG93QWdlbnRUb1ZpZXdTZWF0TWFwcz8uTkRDPy5zaG93U2VhdE1hcHMpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGFwcGx5RXh0cmFEZXRhaWxzVG9GbGlnaHRzKFxuICAgIGZsaWdodHM6IEZsaWdodEpvdXJuZXlbXSxcbiAgICBkZXRhaWxFeHRyYXM6IERldGFpbEV4dHJhc1xuICApOiBGbGlnaHRKb3VybmV5W10ge1xuICAgIHJldHVybiBmbGlnaHRzLm1hcChmbGlnaHQgPT4ge1xuICAgICAgY29uc3QgaWQ6IHN0cmluZyA9IGZsaWdodC5pZDtcbiAgICAgIGNvbnN0IHNlYXQ6IEZsaWdodFNlYXRNYXBTZWF0cyA9IGRldGFpbEV4dHJhcy5zZWF0c1tpZF07XG4gICAgICBjb25zdCBsb3lhbHR5OiBzdHJpbmdbXSA9IGRldGFpbEV4dHJhcy5sb3lhbHR5W2lkXTtcblxuICAgICAgaWYgKHNlYXQpIHtcbiAgICAgICAgZGVsZXRlIHNlYXQuX190eXBlbmFtZTtcbiAgICAgICAgZmxpZ2h0LmFkZGl0aW9uYWwuc2VhdCA9IHNlYXQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChsb3lhbHR5KSB7XG4gICAgICAgIGZsaWdodC5hZGRpdGlvbmFsLmxveWFsdHkgPSBsb3lhbHR5O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhZGRpdGlvbmFsRGV0YWlscyA9IGRldGFpbEV4dHJhcy5hZGRpdGlvbmFsRGV0YWlsc1tpZF07XG4gICAgICBpZiAoYWRkaXRpb25hbERldGFpbHMpIHtcbiAgICAgICAgY29uc3QgYWRkaXRpb25hbERldGFpbHNLZXlzOiBBZGRpdGlvbmFsRGV0YWlsc1tdID0gT2JqZWN0LmtleXMoXG4gICAgICAgICAgYWRkaXRpb25hbERldGFpbHNcbiAgICAgICAgKSBhcyBBZGRpdGlvbmFsRGV0YWlsc1tdO1xuICAgICAgICBpZiAoYWRkaXRpb25hbERldGFpbHNLZXlzLmxlbmd0aCkge1xuICAgICAgICAgIGFkZGl0aW9uYWxEZXRhaWxzS2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBmbGlnaHQuYWRkaXRpb25hbFtrZXldID0gYWRkaXRpb25hbERldGFpbHNba2V5XTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZsaWdodDtcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIF91cGRhdGVUcmF2ZWxQb2xpY2llcygpIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0IHx8XG4gICAgICAodGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuZHVhbFNpbmdsZVdoZW5TZWxlY3RlZCAmJlxuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5kdWFsU2luZ2xlV2hlblNlbGVjdGVkW3RoaXMuc2VsZWN0ZWRHcm91cEZsaWdodC5qb3VybmV5SGFzaF0pIHx8XG4gICAgICAhdGhpcy5tdWx0aSB8fFxuICAgICAgdGhpcy5tdWx0aS5sZW5ndGggPT09IDBcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbXVsdGlJbmJvdW5kcyA9ICh0aGlzLm11bHRpIHx8IFtdKS5yZWR1Y2UoKGFjYzogRmxpZ2h0SXRpbmVyYXJ5W10sIGl0ZW06IEZsaWdodE11bHRpKSA9PiB7XG4gICAgICBpZiAoaXRlbS5vcmRlciA9PT0gMSAmJiBpdGVtLnJlc3VsdHMgJiYgaXRlbS5yZXN1bHRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYWNjID0gYWNjLmNvbmNhdChpdGVtLnJlc3VsdHMgYXMgRmxpZ2h0SXRpbmVyYXJ5W10pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSk7XG4gICAgaWYgKG11bHRpSW5ib3VuZHMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKCF0aGlzLnJhd1Jlc3VsdHMpIHtcbiAgICAgICAgdGhpcy5yYXdSZXN1bHRzID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbSh0aGlzLnJlc3VsdHNTZXNzaW9uTmFtZSArICdfcmF3Jyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZmV0Y2hpbmdSdWxlcyA9IHRydWU7XG5cbiAgICAgIGNvbnNvbGUubG9nKHRoaXMucmF3UmVzdWx0cyk7XG4gICAgICB0aGlzLmFwcGx5RmxpZ2h0UnVsZXNcbiAgICAgICAgLmZldGNoT25lKHtcbiAgICAgICAgICBzZWxlY3RlZE91dGJvdW5kRmxpZ2h0OiB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQsXG4gICAgICAgICAgYXZhaWxhYmxlSW5ib3VuZEZsaWdodHM6IG11bHRpSW5ib3VuZHMsXG4gICAgICAgICAgc2VhcmNoSWQ6IHRoaXMucmF3UmVzdWx0cy5zZWFyY2hJZFxuICAgICAgICB9KVxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgIChydWxlczogUnVsZUFjdGlvblN1bW1hcnlJbnRlcmZhY2UpID0+IHtcbiAgICAgICAgICAgIGlmIChydWxlcykge1xuICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeSA9IHRoaXMuaGVscGVycy5tZXJnZU9iamVjdHModGhpcy5fcnVsZUFjdGlvblN1bW1hcnksIHJ1bGVzKTtcbiAgICAgICAgICAgICAgdGhpcy5fYXBwbHlGaWx0ZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHt9LFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hpbmdSdWxlcyA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJvb2tTaW5nbGVGbGlnaHQoXG4gICAgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSxcbiAgICBzZWxlY3RlZEZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgaW5nb3JlSW52b2tlZDogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGR1YWxJbmJvdW5kOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgY29uc3Qgc2NoZW1hRGV0YWlscyA9IHRoaXMuY3JlYXRlU2NoZW1hRGV0YWlscyhzZWxlY3RlZEZsaWdodCwgRmxpZ2h0Sm91cm5leVR5cGUuU2luZ2xlKTtcbiAgICBhd2FpdCB0aGlzLmRvQm9va2luZyhcbiAgICAgIGludEJhc2tldCxcbiAgICAgIHNlbGVjdGVkRmxpZ2h0LFxuICAgICAgc2NoZW1hRGV0YWlscyxcbiAgICAgIHNlbGVjdGVkRmxpZ2h0Lm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZyxcbiAgICAgICcnLFxuICAgICAgaW5nb3JlSW52b2tlZCxcbiAgICAgIGR1YWxJbmJvdW5kXG4gICAgKTtcbiAgfVxuXG4gIGNyZWF0ZVNjaGVtYURldGFpbHMoZmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucywgam91cm5leVR5cGU6IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKGpvdXJuZXlUeXBlID09PSBGbGlnaHRKb3VybmV5VHlwZS5TaW5nbGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG91dGJvdW5kRmxpZ2h0czogZmxpZ2h0Lm91dGJvdW5kRmxpZ2h0cy5tYXAoXG4gICAgICAgICAgKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgc2VnbWVudEluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1ha2VTY2hlbWFGbGlnaHRzKGZsaWdodCwgJ291dGJvdW5kJywgMCwgc2VnbWVudEluZGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIGluYm91bmRGbGlnaHRzOiBbXSxcbiAgICAgICAgam91cm5leVR5cGU6IEZsaWdodEpvdXJuZXlUeXBlLlNpbmdsZSxcbiAgICAgICAgdGF4ZXM6IGZsaWdodC50YXhlcy5tYXAoKHRheDogRmxpZ2h0QW1vdW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0YXguZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBjdXJyZW5jeTogdGF4LmN1cnJlbmN5LFxuICAgICAgICAgICAgYW1vdW50OiB0YXguYW1vdW50XG4gICAgICAgICAgfTtcbiAgICAgICAgfSksXG4gICAgICAgIGZhcmVDb25kaXRpb25zOiBmbGlnaHQuZmFyZUNvbmRpdGlvbnNcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG91dGJvdW5kRmxpZ2h0czogW1xuICAgICAgICAgIC4uLmZsaWdodC5vdXRib3VuZEZsaWdodHMubWFwKChmbGlnaHQ6IEZsaWdodEpvdXJuZXksIHNlZ21lbnRJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYWtlU2NoZW1hRmxpZ2h0cyhmbGlnaHQsICdvdXRib3VuZCcsIDAsIHNlZ21lbnRJbmRleCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgXSxcbiAgICAgICAgaW5ib3VuZEZsaWdodHM6IFtcbiAgICAgICAgICAuLi5mbGlnaHQuaW5ib3VuZEZsaWdodHMubWFwKChmbGlnaHQ6IEZsaWdodEpvdXJuZXksIHNlZ21lbnRJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYWtlU2NoZW1hRmxpZ2h0cyhmbGlnaHQsICdpbmJvdW5kJywgMCwgc2VnbWVudEluZGV4KTtcbiAgICAgICAgICB9KVxuICAgICAgICBdLFxuICAgICAgICBqb3VybmV5VHlwZTogRmxpZ2h0Sm91cm5leVR5cGUuUm91bmR0cmlwLFxuICAgICAgICB0YXhlczogKGZsaWdodC50YXhlcyA/IGZsaWdodC50YXhlcyA6IFtdKS5tYXAoKHRheDogRmxpZ2h0QW1vdW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0YXguZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBjdXJyZW5jeTogdGF4LmN1cnJlbmN5LFxuICAgICAgICAgICAgYW1vdW50OiB0YXguYW1vdW50XG4gICAgICAgICAgfTtcbiAgICAgICAgfSksXG4gICAgICAgIGZhcmVDb25kaXRpb25zOiBmbGlnaHQuZmFyZUNvbmRpdGlvbnNcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlQm9va2luZ0Jhc2tldE9iamVjdChcbiAgICBpZDogc3RyaW5nLFxuICAgIGZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgam91cm5leVR5cGU6IHN0cmluZ1xuICApOiBBZGRJdGVtVG9CYXNrZXRNdXRhdGlvblZhcmlhYmxlcyB7XG4gICAgY29uc3Qgc2NoZW1hRGV0YWlscyA9IHRoaXMuY3JlYXRlU2NoZW1hRGV0YWlscyhmbGlnaHQsIGpvdXJuZXlUeXBlKTtcbiAgICBjb25zdCBib29raW5nOiBBZGRJdGVtVG9CYXNrZXRNdXRhdGlvblZhcmlhYmxlcyA9IHtcbiAgICAgIGFkdWx0czogdGhpcy5hZHVsdHMsXG4gICAgICBiYXNrZXQ6IGlkLFxuICAgICAgY2hpbGRyZW46IHRoaXMuY2hpbGRyZW4sXG4gICAgICBjbzJQZXJJdGVtOiBmbGlnaHQuY28yUGVySXRlbSxcbiAgICAgIGNvMlBlclBhc3NlbmdlcjogZmxpZ2h0LmNvMlBlclBhc3NlbmdlcixcbiAgICAgIGN1cnJlbmN5OiBmbGlnaHQudG90YWwuY3VycmVuY3kgYXMgQ3VycmVuY3lDb2RlLFxuICAgICAgZGV0YWlsOiBzY2hlbWFEZXRhaWxzLFxuICAgICAgcHJpY2U6ICtmbGlnaHQudG90YWwucHJpY2UudG9GaXhlZCgyKSxcbiAgICAgIHNlYXJjaFF1ZXJ5OiB0aGlzLnJlc3VsdFF1ZXJ5LFxuICAgICAgc2VydmljZTogZmxpZ2h0LnNvdXJjZUlkLnRvU3RyaW5nKCksXG4gICAgICBvdXRib3VuZERhdGU6IGZsaWdodC5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmdVVENcbiAgICB9O1xuICAgIGxldCBpbmJvdW5kRGF0ZSA9IGZsaWdodD8uaW5ib3VuZEZsaWdodHM/LlswXT8uZGF0ZVRpbWVEZXBhcnRpbmdVVEM7XG4gICAgaWYgKGluYm91bmREYXRlKSB7XG4gICAgICBib29raW5nLmluYm91bmREYXRlID0gaW5ib3VuZERhdGU7XG4gICAgfVxuICAgIHJldHVybiBib29raW5nO1xuICB9XG5cbiAgY3JlYXRlTG93ZXN0Qm9va2luZyhcbiAgICBpZDogc3RyaW5nLFxuICAgIGR1YWxJbmJvdW5kOiBib29sZWFuLFxuICAgIHNlbGVjdGVkRmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9uc1xuICApOiBhbnkge1xuICAgIGlmIChcbiAgICAgICF0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3Q/LnJldHVybnMgfHxcbiAgICAgICh0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3Q/LmR1YWxJbmJvdW5kPy5hbW91bnQgK1xuICAgICAgICB0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3Q/LmR1YWxPdXRib3VuZD8uYW1vdW50IDxcbiAgICAgICAgdGhpcy5jaGVhcGVzdFByaWNlT2JqZWN0Py5yZXR1cm5zPy5hbW91bnQgJiZcbiAgICAgICAgdGhpcy5jaGVhcGVzdFByaWNlT2JqZWN0Py5kdWFsSW5ib3VuZD8uY3VycmVuY3lDb2RlID09XG4gICAgICAgICAgdGhpcy5jaGVhcGVzdFByaWNlT2JqZWN0Py5kdWFsT3V0Ym91bmQ/LmN1cnJlbmN5Q29kZSlcbiAgICApIHtcbiAgICAgIGlmIChzZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHMubGVuZ3RoICYmICFzZWxlY3RlZEZsaWdodC5pbmJvdW5kRmxpZ2h0cy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKCFkdWFsSW5ib3VuZCkge1xuICAgICAgICAgIC8vIGR1YWwgb3V0XG4gICAgICAgICAgY29uc3QgY2hlYXBGbGlnaHREdWFsT3V0Ym91bmQgPSB0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3QuZHVhbE91dGJvdW5kLmZsaWdodDtcbiAgICAgICAgICBjb25zdCBkdWFsT3V0Ym91bmRCb29raW5nID0gdGhpcy5jcmVhdGVCb29raW5nQmFza2V0T2JqZWN0KFxuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICBjaGVhcEZsaWdodER1YWxPdXRib3VuZCxcbiAgICAgICAgICAgIEZsaWdodEpvdXJuZXlUeXBlLlNpbmdsZVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCBmdWxsUHJpY2UgPSBkdWFsT3V0Ym91bmRCb29raW5nLnByaWNlO1xuICAgICAgICAgIHJldHVybiB7IGxvd2VzdFByaWNlQm9va2luZzogZHVhbE91dGJvdW5kQm9va2luZywgbG93ZXN0RnVsbFRvdGFsOiBmdWxsUHJpY2UgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBkdWFsIGluXG4gICAgICAgICAgY29uc3QgY2hlYXBGbGlnaHREdWFsSW5ib3VuZCA9IHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdC5kdWFsSW5ib3VuZC5mbGlnaHQ7XG4gICAgICAgICAgY29uc3QgZHVhbEluYm91bmRCb29raW5nID0gdGhpcy5jcmVhdGVCb29raW5nQmFza2V0T2JqZWN0KFxuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICBjaGVhcEZsaWdodER1YWxJbmJvdW5kLFxuICAgICAgICAgICAgRmxpZ2h0Sm91cm5leVR5cGUuU2luZ2xlXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IGZ1bGxQcmljZSA9IGR1YWxJbmJvdW5kQm9va2luZy5wcmljZTtcbiAgICAgICAgICByZXR1cm4geyBsb3dlc3RQcmljZUJvb2tpbmc6IGR1YWxJbmJvdW5kQm9va2luZywgbG93ZXN0RnVsbFRvdGFsOiBmdWxsUHJpY2UgfTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gcmV0dXJuIGZsaWdodFxuICAgICAgICBsZXQgY2hlYXBGbGlnaHREdWFsT3V0Ym91bmQgPSB0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3QuZHVhbE91dGJvdW5kLmZsaWdodDtcbiAgICAgICAgY2hlYXBGbGlnaHREdWFsT3V0Ym91bmQuaW5ib3VuZEZsaWdodHMgPVxuICAgICAgICAgIHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdC5kdWFsSW5ib3VuZC5mbGlnaHQub3V0Ym91bmRGbGlnaHRzO1xuICAgICAgICBsZXQgZHVhbE91dGJvdW5kQm9va2luZyA9IHRoaXMuY3JlYXRlQm9va2luZ0Jhc2tldE9iamVjdChcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBjaGVhcEZsaWdodER1YWxPdXRib3VuZCxcbiAgICAgICAgICBGbGlnaHRKb3VybmV5VHlwZS5Sb3VuZHRyaXBcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBjaGVhcEZsaWdodER1YWxJbmJvdW5kID0gdGhpcy5jaGVhcGVzdFByaWNlT2JqZWN0LmR1YWxJbmJvdW5kLmZsaWdodDtcbiAgICAgICAgY29uc3QgZHVhbEluYm91bmRCb29raW5nID0gdGhpcy5jcmVhdGVCb29raW5nQmFza2V0T2JqZWN0KFxuICAgICAgICAgIGlkLFxuICAgICAgICAgIGNoZWFwRmxpZ2h0RHVhbEluYm91bmQsXG4gICAgICAgICAgRmxpZ2h0Sm91cm5leVR5cGUuU2luZ2xlXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgZnVsbFByaWNlID0gZHVhbE91dGJvdW5kQm9va2luZy5wcmljZSArIGR1YWxJbmJvdW5kQm9va2luZy5wcmljZTtcbiAgICAgICAgZHVhbE91dGJvdW5kQm9va2luZy5wcmljZSA9ICtmdWxsUHJpY2UudG9GaXhlZCgyKTtcbiAgICAgICAgcmV0dXJuIHsgbG93ZXN0UHJpY2VCb29raW5nOiBkdWFsT3V0Ym91bmRCb29raW5nLCBsb3dlc3RGdWxsVG90YWw6IGZ1bGxQcmljZSB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjaGVhcEZsaWdodCA9IHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdC5yZXR1cm5zLmZsaWdodDtcbiAgICAgIGNvbnN0IGpvdXJuZXlUeXBlID0gdGhpcy5pc1JldHVybiA/IEZsaWdodEpvdXJuZXlUeXBlLlJvdW5kdHJpcCA6IEZsaWdodEpvdXJuZXlUeXBlLlNpbmdsZTtcbiAgICAgIGNvbnN0IGxvd2VzdEZ1bGxGbGlnaHQgPSBjaGVhcEZsaWdodCA/IHRoaXMuY3JlYXRlQm9va2luZ0Jhc2tldE9iamVjdChpZCwgY2hlYXBGbGlnaHQsIGpvdXJuZXlUeXBlKTpudWxsO1xuICAgICAgcmV0dXJuIHsgbG93ZXN0UHJpY2VCb29raW5nOiBsb3dlc3RGdWxsRmxpZ2h0LCBsb3dlc3RGdWxsVG90YWw6IGxvd2VzdEZ1bGxGbGlnaHQucHJpY2UgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkb0Jvb2tpbmcoXG4gICAgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSxcbiAgICBzZWxlY3RlZEZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgc2NoZW1hRGV0YWlsczogYW55LFxuICAgIG91dGJvdW5kRGF0ZTogc3RyaW5nLFxuICAgIGluYm91bmREYXRlPzogc3RyaW5nLFxuICAgIGluZ29yZUludm9rZWQgPSBmYWxzZSxcbiAgICBkdWFsSW5ib3VuZCA9IGZhbHNlXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xuICAgIGNvbnN0IHsgc291cmNlSWQsIGNvMlBlckl0ZW0sIGNvMlBlclBhc3NlbmdlciwgdG90YWwsIHJlcXVpcmVzUmVhc29uS2V5cyB9ID0gc2VsZWN0ZWRGbGlnaHQ7XG4gICAgY29uc3QgeyBsb3dlc3RQcmljZUJvb2tpbmcsIGxvd2VzdEZ1bGxUb3RhbCB9ID0gdGhpcy5jcmVhdGVMb3dlc3RCb29raW5nKFxuICAgICAgaW50QmFza2V0LmlkLFxuICAgICAgZHVhbEluYm91bmQsXG4gICAgICBzZWxlY3RlZEZsaWdodFxuICAgICk7XG4gICAgc2NoZW1hRGV0YWlscy5obXVwID0gdG90YWwuaG11cDtcbiAgICB0aGlzLnJlc3VsdFF1ZXJ5LmFzU2luZ2xlcyA9IGR1YWxJbmJvdW5kO1xuICAgIGNvbnN0IGJvb2tpbmc6IEFkZEl0ZW1Ub0Jhc2tldE11dGF0aW9uVmFyaWFibGVzID0ge1xuICAgICAgYWR1bHRzOiB0aGlzLmFkdWx0cyxcbiAgICAgIGJhc2tldDogaW50QmFza2V0LmlkLFxuICAgICAgY2hpbGRyZW46IHRoaXMuY2hpbGRyZW4sXG4gICAgICBjbzJQZXJJdGVtLFxuICAgICAgY28yUGVyUGFzc2VuZ2VyLFxuICAgICAgY3VycmVuY3k6IHRvdGFsLmN1cnJlbmN5IGFzIEN1cnJlbmN5Q29kZSxcbiAgICAgIGRldGFpbDogc2NoZW1hRGV0YWlscyxcbiAgICAgIHByaWNlOiArdG90YWwucHJpY2UudG9GaXhlZCgyKSxcbiAgICAgIHNlYXJjaFF1ZXJ5OiB0aGlzLnJlc3VsdFF1ZXJ5LFxuICAgICAgc2VydmljZTogc291cmNlSWQudG9TdHJpbmcoKSxcbiAgICAgIG91dGJvdW5kRGF0ZSxcbiAgICAgIGxvd2VzdFByaWNlQ3VycmVuY3k6XG4gICAgICAgIHRoaXMuYWJzb2x1dGVDaGVhcGVzdFByaWNlLmFtb3VudCB8fFxuICAgICAgICB0aGlzLmFic29sdXRlQ2hlYXBlc3RQcmljZS5jdXJyZW5jeUNvZGUgIT09IHRvdGFsLmN1cnJlbmN5XG4gICAgICAgICAgPyA8Q3VycmVuY3lDb2RlPnRoaXMuYWJzb2x1dGVDaGVhcGVzdFByaWNlLmN1cnJlbmN5Q29kZVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIGxvd2VzdFByaWNlOiBsb3dlc3RGdWxsVG90YWwsXG4gICAgICBsb3dlc3RQcmljZURldGFpbDogbG93ZXN0UHJpY2VCb29raW5nLFxuICAgICAgcmVhc29uS2V5czogcmVxdWlyZXNSZWFzb25LZXlzXG4gICAgfTtcbiAgICBpZiAoaW5ib3VuZERhdGUpIHtcbiAgICAgIGJvb2tpbmcuaW5ib3VuZERhdGUgPSBpbmJvdW5kRGF0ZTtcbiAgICB9XG4gICAgLy8gYm9va2luZy5kZXRhaWwubWFya3VwID0gW3thbW91bnQ6IDAsIGNvc3Q6MH1dO1xuICAgIGNvbnN0IHdoYXRIYXBwZW5lZCA9IGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcbiAgICAgIGJvb2tpbmcsXG4gICAgICBpbnRCYXNrZXQsXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXG4gICAgICB0aGlzLnRyYXZlbGxlcnMsXG4gICAgICBzZWxlY3RlZEZsaWdodC5yZXF1aXJlc1JlYXNvbktleXMsXG4gICAgICBmYWxzZSxcbiAgICAgIGluZ29yZUludm9rZWRcbiAgICApO1xuICAgIGlmICh3aGF0SGFwcGVuZWQgPT09IERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMucmVzZWFyY2gpIHtcbiAgICAgIHRoaXMucmVzZWFyY2hXaXRoTmV3VXNlcigpO1xuICAgIH1cbiAgICByZXR1cm4gd2hhdEhhcHBlbmVkO1xuICB9XG5cbiAgYXN5bmMgZ2V0RmxpZ2h0RGV0YWlsRXh0cmFzKFxuICAgIHNlbGVjdGVkRmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyB8IEZsaWdodEl0aW5lcmFyeSxcbiAgICBkaXJlY3Rpb246IEZsaWdodERpcmVjdGlvbkVudW0sXG4gICAgZ210OiBib29sZWFuID0gZmFsc2UsXG4gICAgdXNlcnM/OlRyYXZlbGxlcltdXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgLy8gb25seSBURlggZm9yIG5vdywgcmVtb3ZlIGlmIHN0YXRlbWVudCB3aGVuIHdlIGRvIHRoZSByZXN0XG4gICAgY29uc3Qgc2VhdHMgPSBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxuICAgICAgTW9kYWxUeXBlcy5GbGlnaHRFeHRyYXNEaWFsb2dDb21wb25lbnQsXG4gICAgICB7IGNlbnRlcmVkOiB0cnVlLCB3aW5kb3dDbGFzczogJ21vZGFsLWZsaWdodC1leHRyYXMnLCBiYWNrZHJvcDogJ3N0YXRpYycgfSxcbiAgICAgIHsgZmxpZ2h0OiBzZWxlY3RlZEZsaWdodCwgZGlyZWN0aW9uLCBnbXQsIHVzZXJzIH1cbiAgICApO1xuICAgIGlmIChzZWF0cykge1xuICAgICAgcmV0dXJuIHNlYXRzO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZygncmV0aGluZyBsaWZlIGNob2ljZXMnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldCBhYnNvbHV0ZUNoZWFwZXN0UHJpY2UoKTogSUNoZWFwZXN0UHJpY2UgfCBJQ2hlYXBlc3RQcmljZURldGFpbHMge1xuICAgIGlmICh0aGlzLmNoZWFwZXN0UHJpY2UpIHJldHVybiB0aGlzLmNoZWFwZXN0UHJpY2U7XG4gICAgbGV0IHByaWNlOiBJQ2hlYXBlc3RQcmljZURldGFpbHMgPSB7IGFtb3VudDogbnVsbCwgY3VycmVuY3lDb2RlOiBudWxsLCBmbGlnaHQ6IG51bGwgfTtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5jaGVhcGVzdFByaWNlT2JqZWN0LnJldHVybnMgfHxcbiAgICAgICh0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3QuZHVhbEluYm91bmQuYW1vdW50ICsgdGhpcy5jaGVhcGVzdFByaWNlT2JqZWN0LmR1YWxPdXRib3VuZC5hbW91bnQgPFxuICAgICAgICB0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3QucmV0dXJucz8uYW1vdW50ICYmXG4gICAgICAgIHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdC5kdWFsSW5ib3VuZC5jdXJyZW5jeUNvZGUgPT1cbiAgICAgICAgICB0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3QuZHVhbE91dGJvdW5kLmN1cnJlbmN5Q29kZSlcbiAgICApIHtcbiAgICAgIHByaWNlLmFtb3VudCA9XG4gICAgICAgIHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdC5kdWFsSW5ib3VuZC5hbW91bnQgKyB0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3QuZHVhbE91dGJvdW5kLmFtb3VudDtcbiAgICAgIHByaWNlLmN1cnJlbmN5Q29kZSA9IHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdC5kdWFsSW5ib3VuZC5jdXJyZW5jeUNvZGU7XG4gICAgfSBlbHNlIHByaWNlID0gdGhpcy5jaGVhcGVzdFByaWNlT2JqZWN0LnJldHVybnM7XG4gICAgcmV0dXJuIHByaWNlO1xuICB9XG5cbiAgcHJpdmF0ZSBtYWtlU2NoZW1hRmxpZ2h0cyhcbiAgICBzZWxlY3RlZEZsaWdodDogRmxpZ2h0Sm91cm5leSxcbiAgICBmbGlnaHRHcm91cDogJ291dGJvdW5kJyB8ICdpbmJvdW5kJyxcbiAgICBncm91cEluZGV4OiBudW1iZXIsXG4gICAgc2VnbWVudEluZGV4OiBudW1iZXJcbiAgKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc2VsZWN0ZWRGbGlnaHQsXG4gICAgICBqb3VybmV5SW5mbzoge1xuICAgICAgICBmbGlnaHRHcm91cCxcbiAgICAgICAgZ3JvdXBJbmRleCxcbiAgICAgICAgc2VnbWVudEluZGV4XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQmFnc0FsbG93YW5jZVRvRmxpZ2h0c1NjaGVtYShcbiAgICBzZWxlY3RlZEZsaWdodDogRmxpZ2h0Sm91cm5leSxcbiAgICBmbGlnaHRRdW90ZTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcbiAgKTogYW55IHtcbiAgICBzZWxlY3RlZEZsaWdodC5hZGRpdGlvbmFsWydiYWdnYWdlQWxsb3dhbmNlQW1vdW50J10gPSAwO1xuICAgIGlmIChmbGlnaHRRdW90ZT8uYmFnZ2FnZUFsbG93YW5jZT8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBob2xkQmFnQW1vdW50ID0gZmxpZ2h0UXVvdGUuYmFnZ2FnZUFsbG93YW5jZS5yZWR1Y2UoXG4gICAgICAgIChiYWdBbW91bnQ6IG51bWJlcltdLCBiYWc6IEJhZ2dhZ2VBbGxvd2FuY2UpID0+IHtcbiAgICAgICAgICBpZiAoYmFnLnR5cGUgPT09IEJhZ2dhZ2VUeXBlLkNoZWNrSW4pIHtcbiAgICAgICAgICAgIGJhZ0Ftb3VudC5wdXNoKGJhZy5xdHkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYmFnQW1vdW50O1xuICAgICAgICB9LFxuICAgICAgICBbXVxuICAgICAgKTtcbiAgICAgIHNlbGVjdGVkRmxpZ2h0LmFkZGl0aW9uYWxbJ2JhZ2dhZ2VBbGxvd2FuY2VBbW91bnQnXSA9IGhvbGRCYWdBbW91bnQubGVuZ3RoXG4gICAgICAgID8gTWF0aC5taW4oLi4uaG9sZEJhZ0Ftb3VudClcbiAgICAgICAgOiAwO1xuICAgIH1cblxuICAgIHNlbGVjdGVkRmxpZ2h0LmFkZGl0aW9uYWxbJ2lzSGFuZEJhZ2dhZ2UnXSA9ICEhZmxpZ2h0UXVvdGU/LmJhZ2dhZ2VBbGxvd2FuY2U/LmZpbHRlcihcbiAgICAgIChiYWc6IEJhZ2dhZ2VBbGxvd2FuY2UpID0+IGJhZy50eXBlID09PSBCYWdnYWdlVHlwZS5IYW5kQ2FycnlcbiAgICApO1xuXG4gICAgcmV0dXJuIHNlbGVjdGVkRmxpZ2h0O1xuICB9XG5cbiAgYXN5bmMgYWRkRmxpZ2h0Sm91cm5leXNUb0Jhc2tldChcbiAgICBmbGlnaHRRdW90ZTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSxcbiAgICBpZ25vcmVJbnZva2U6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBkdWFsSW5ib3VuZDogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGdtdDogYm9vbGVhbiA9IGZhbHNlXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xuICAgIGxldCByZXF1aXJlc092ZXJyaWRlUmVhc29uID0gZmFsc2U7XG5cbiAgICBpZiAoKGZsaWdodFF1b3RlIGFzIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKS51bmF2YWlsYWJsZSAmJiAhdGhpcy51c2VyU2VydmljZS5ib2JvKSB7XG4gICAgICAvLyBjaGVjayBoZXJlIGlmIHdlIGFyZSBhbiBhZ2VudCB1c2VyIGludm9raW5nXG4gICAgICBjb25zb2xlLndhcm4oJysrKyBGbGlnaHQgaXMgb3V0IG9mIHBvbGljeSAtIGJhY2tpbmcgb3V0ICsrKycpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNhbmNlbCk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIChmbGlnaHRRdW90ZSBhcyBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucykudW5hdmFpbGFibGUgJiZcbiAgICAgIHRoaXMudXNlclNlcnZpY2UuYm9ib1xuICAgICkge1xuICAgICAgcmVxdWlyZXNPdmVycmlkZVJlYXNvbiA9IHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcbiAgICBpZiAoYmFza2V0KSB7XG4gICAgICB0aGlzLmJhc2tldFNlcnZpY2UudG9nZ2xlTWVudSgpO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWRkSm91cm5leVRvQmFza2V0KFxuICAgICAgICBmbGlnaHRRdW90ZSxcbiAgICAgICAgaWdub3JlSW52b2tlLFxuICAgICAgICBpbnRCYXNrZXQsXG4gICAgICAgIGR1YWxJbmJvdW5kLFxuICAgICAgICByZXF1aXJlc092ZXJyaWRlUmVhc29uLFxuICAgICAgICBnbXRcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jYW5jZWwpOyAvLyBUT0RPIHNob3VsZCB0aGlzIHRocm93IGFuIGVycm9yP1xuICB9XG5cbiAgYXN5bmMgYWRkSm91cm5leVRvQmFza2V0KFxuICAgIGZsaWdodFF1b3RlOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcbiAgICBpZ25vcmVJbnZva2U6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlLFxuICAgIGR1YWxJbmJvdW5kOiBib29sZWFuID0gZmFsc2UsXG4gICAgcmVxdWlyZXNPdmVycmlkZVJlYXNvbj86IGJvb2xlYW4sXG4gICAgZ210OiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgY29uc3QgeyBzb3VyY2VJZCwgY28yUGVySXRlbSwgY28yUGVyUGFzc2VuZ2VyLCB0b3RhbCB9ID0gZmxpZ2h0UXVvdGU7XG5cbiAgICBsZXQgbG93ZXN0UHJpY2VCb29raW5nID0gbnVsbDtcbiAgICBsZXQgbG93ZXN0RnVsbFRvdGFsID0gbnVsbDtcblxuICAgIGNvbnN0IG91dGJvdW5kRGF0ZTogYW55ID0gbW9tZW50KGZsaWdodFF1b3RlLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZyk7XG4gICAgY29uc3QgaW5ib3VuZERhdGU6IGFueSA9IGZsaWdodFF1b3RlLmluYm91bmRGbGlnaHRzLmxlbmd0aFxuICAgICAgPyBtb21lbnQoZmxpZ2h0UXVvdGUuaW5ib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpXG4gICAgICA6IG51bGw7XG5cbiAgICBpZiAoIWdtdCkge1xuICAgICAgY29uc3QgeyBsb3dlc3RQcmljZUJvb2tpbmc6IGxwLCBsb3dlc3RGdWxsVG90YWw6IGxmdCB9ID0gdGhpcy5jcmVhdGVMb3dlc3RCb29raW5nKFxuICAgICAgICBpbnRCYXNrZXQuaWQsXG4gICAgICAgIGR1YWxJbmJvdW5kLFxuICAgICAgICBmbGlnaHRRdW90ZVxuICAgICAgKTtcbiAgICAgIGxvd2VzdFByaWNlQm9va2luZyA9IGxwO1xuICAgICAgbG93ZXN0RnVsbFRvdGFsID0gbGZ0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlc3VsdFF1ZXJ5ID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAge1xuICAgICAgICAgIGZhcmVUeXBlOiBGYXJlVHlwZS5GbGV4aWJsZSxcbiAgICAgICAgICBwYXNzZW5nZXJzOiBbeyB0eXBlOiBGbGlnaHRQYXNzZW5nZXJUeXBlLkFkdWx0IH1dLFxuICAgICAgICAgIG9yaWdpbkFpcnBvcnQ6IGZsaWdodFF1b3RlLm91dGJvdW5kRmxpZ2h0c1swXS5vcmlnaW5BaXJwb3J0LFxuICAgICAgICAgIGRlc3RpbmF0aW9uQWlycG9ydDpcbiAgICAgICAgICAgIGZsaWdodFF1b3RlLm91dGJvdW5kRmxpZ2h0c1tmbGlnaHRRdW90ZS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMV0uZGVzdGluYXRpb25BaXJwb3J0LFxuICAgICAgICAgIHJldHVyblRyaXA6IGluYm91bmREYXRlID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgIG91dGJvdW5kRGF0ZTogdGhpcy5oZWxwZXJzLmZvcm1hdElzb0RhdGUob3V0Ym91bmREYXRlKSxcbiAgICAgICAgICBvdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3c6IHRoaXMuaGVscGVycy5tYWtlVGltZVdpbmRvdyhvdXRib3VuZERhdGUsIC0yLCAyKVxuICAgICAgICB9LFxuICAgICAgICBpbmJvdW5kRGF0ZVxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICByZXR1cm5EYXRlOiB0aGlzLmhlbHBlcnMuZm9ybWF0SXNvRGF0ZShpbmJvdW5kRGF0ZSksXG4gICAgICAgICAgICAgIHJldHVybkRlcGFydHVyZVRpbWVXaW5kb3c6IHRoaXMuaGVscGVycy5tYWtlVGltZVdpbmRvdyhpbmJvdW5kRGF0ZSwgLTIsIDIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7fVxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgaGFzU3BhbmlzaERpc2NvdW50ID0gZmxpZ2h0UXVvdGUudG90YWwuZGlzY291bnQ7XG4gICAgY29uc3QgdGVybXNBbmRDb25kaXRpb25zID0gdGhpcy5nZXRUZXJtc0FuZENvbmQoKTtcbiAgICBjb25zdCBzY2hlbWFEZXRhaWxzID0ge1xuICAgICAgb3V0Ym91bmRGbGlnaHRzOiBbXG4gICAgICAgIC4uLmZsaWdodFF1b3RlLm91dGJvdW5kRmxpZ2h0cy5tYXAoKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgX3NlZ21lbnRJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgaWYgKCFoYXNTcGFuaXNoRGlzY291bnQpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBmbGlnaHQuYWRkaXRpb25hbC5zcGFuaXNoUmVzaWRlbmN5QWlycG9ydDtcbiAgICAgICAgICAgIGRlbGV0ZSBmbGlnaHQuYWRkaXRpb25hbC5zcGFuaXNoUmVzaWRlbmN5R3JvdXA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLmFkZEJhZ3NBbGxvd2FuY2VUb0ZsaWdodHNTY2hlbWEoZmxpZ2h0LCBmbGlnaHRRdW90ZSk7XG4gICAgICAgIH0pXG4gICAgICBdLFxuICAgICAgaW5ib3VuZEZsaWdodHM6IFtcbiAgICAgICAgLi4uZmxpZ2h0UXVvdGUuaW5ib3VuZEZsaWdodHMubWFwKChmbGlnaHQ6IEZsaWdodEpvdXJuZXksIF9zZWdtZW50SW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgIGlmICghaGFzU3BhbmlzaERpc2NvdW50KSB7XG4gICAgICAgICAgICBkZWxldGUgZmxpZ2h0LmFkZGl0aW9uYWwuc3BhbmlzaFJlc2lkZW5jeUFpcnBvcnQ7XG4gICAgICAgICAgICBkZWxldGUgZmxpZ2h0LmFkZGl0aW9uYWwuc3BhbmlzaFJlc2lkZW5jeUdyb3VwO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy5hZGRCYWdzQWxsb3dhbmNlVG9GbGlnaHRzU2NoZW1hKGZsaWdodCwgZmxpZ2h0UXVvdGUpO1xuICAgICAgICB9KVxuICAgICAgXSxcbiAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zLFxuICAgICAgam91cm5leVR5cGU6IEZsaWdodEpvdXJuZXlUeXBlLlNpbmdsZSxcbiAgICAgIHRheGVzOiBmbGlnaHRRdW90ZS50YXhlcy5tYXAoKHRheDogRmxpZ2h0QW1vdW50KSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246IHRheC5kZXNjcmlwdGlvbixcbiAgICAgICAgICBjdXJyZW5jeTogdGF4LmN1cnJlbmN5LFxuICAgICAgICAgIGFtb3VudDogdGF4LmFtb3VudFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgICBmYXJlQ29uZGl0aW9uczogZmxpZ2h0UXVvdGUuZmFyZUNvbmRpdGlvbnMsXG5cbiAgICAgIC8vIFNhYnJlIE5EQyBmaWVsZHMgb25seVxuICAgICAgb2ZmZXJJZDogZmxpZ2h0UXVvdGUub2ZmZXJJZCxcbiAgICAgIG9mZmVySXRlbUlkOiBmbGlnaHRRdW90ZS5vZmZlckl0ZW1JZCxcbiAgICAgIG9mZmVyVFRMOiBmbGlnaHRRdW90ZS5vZmZlclRUTCxcbiAgICAgIG9mZmVyVGltZVN0YW1wOiBmbGlnaHRRdW90ZS5vZmZlclRpbWVTdGFtcCxcbiAgICAgIGhtdXA6IGZsaWdodFF1b3RlLnRvdGFsLmhtdXBcbiAgICB9O1xuICAgIGNvbnN0IGJvb2tpbmc6IEFkZEl0ZW1Ub0Jhc2tldE11dGF0aW9uVmFyaWFibGVzID0ge1xuICAgICAgYWR1bHRzOiB0aGlzLmFkdWx0cyxcbiAgICAgIGJhc2tldDogaW50QmFza2V0LmlkLFxuICAgICAgY2hpbGRyZW46IHRoaXMuY2hpbGRyZW4sXG4gICAgICBjbzJQZXJJdGVtLFxuICAgICAgY28yUGVyUGFzc2VuZ2VyLFxuICAgICAgY3VycmVuY3k6IHRvdGFsLmN1cnJlbmN5IGFzIEN1cnJlbmN5Q29kZSxcbiAgICAgIGRldGFpbDogc2NoZW1hRGV0YWlscyxcbiAgICAgIHByaWNlOiArdG90YWwucHJpY2UudG9GaXhlZCgyKSxcbiAgICAgIHNlYXJjaFF1ZXJ5OiB0aGlzLnJlc3VsdFF1ZXJ5LFxuICAgICAgc2VydmljZTogc291cmNlSWQudG9TdHJpbmcoKSxcbiAgICAgIG91dGJvdW5kRGF0ZTogb3V0Ym91bmREYXRlLmZvcm1hdCgpLFxuICAgICAgbG93ZXN0UHJpY2VDdXJyZW5jeTpcbiAgICAgICAgdGhpcy5hYnNvbHV0ZUNoZWFwZXN0UHJpY2UuYW1vdW50IHx8XG4gICAgICAgIHRoaXMuYWJzb2x1dGVDaGVhcGVzdFByaWNlLmN1cnJlbmN5Q29kZSAhPT0gdG90YWwuY3VycmVuY3lcbiAgICAgICAgICA/IDxDdXJyZW5jeUNvZGU+dGhpcy5hYnNvbHV0ZUNoZWFwZXN0UHJpY2UuY3VycmVuY3lDb2RlXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgbG93ZXN0UHJpY2U6IGxvd2VzdEZ1bGxUb3RhbCxcbiAgICAgIGxvd2VzdFByaWNlRGV0YWlsOiBsb3dlc3RQcmljZUJvb2tpbmcsXG4gICAgICByZWFzb25LZXlzOiBmbGlnaHRRdW90ZS5yZXF1aXJlc1JlYXNvbktleXMsXG4gICAgICBhZ2VudE92ZXJyb2RlVW5hdmFpbGFibGU6IGZsaWdodFF1b3RlLnVuYXZhaWxhYmxlXG4gICAgfTtcbiAgICBjb25zb2xlLmxvZyhib29raW5nKTtcbiAgICBpZiAoaW5ib3VuZERhdGUpIHtcbiAgICAgIGJvb2tpbmcuaW5ib3VuZERhdGUgPSBpbmJvdW5kRGF0ZS5mb3JtYXQoKTtcbiAgICAgIHNjaGVtYURldGFpbHMuam91cm5leVR5cGUgPSBGbGlnaHRKb3VybmV5VHlwZS5Sb3VuZHRyaXA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcbiAgICAgIGJvb2tpbmcsXG4gICAgICBpbnRCYXNrZXQsXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXG4gICAgICB0aGlzLnRyYXZlbGxlcnMsXG4gICAgICBmbGlnaHRRdW90ZS5yZXF1aXJlc1JlYXNvbktleXMsXG4gICAgICBmYWxzZSxcbiAgICAgIGlnbm9yZUludm9rZVxuICAgICk7XG4gIH1cblxuICBzZXRGbGlnaHREaXNwbGF5VHlwZShkaXNwbGF5VHlwZTogRmxpZ2h0RGlzcGxheVR5cGVzKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0ID0gbnVsbDtcbiAgICB0aGlzLmNob29zZW5EaXNwbGF5VHlwZS5uZXh0KGRpc3BsYXlUeXBlKTtcbiAgfVxuXG4gIF9hcHBseUZpbHRlcigpIHtcbiAgICB0aGlzLmFwcGx5RmlsdGVycyh0aGlzLmN1cnJlbnRGaWx0ZXJzLCB0aGlzLmN1cnJlbnRTb3J0KTtcbiAgfVxuXG4gIG9wZW5GbGlnaHRGYXJlUnVsZXMoXG4gICAgcnVsZXM6IEZhcmVDb25kaXRpb25zLFxuICAgIGZsaWdodHM6IEZsaWdodEpvdXJuZXlbXSxcbiAgICBpZDogbnVtYmVyLFxuICAgIG9wdGlvbnM6IGFueSA9IG51bGwsXG4gICAgZmxpZ2h0OiBGbGlnaHRKb3VybmV5ID0gbnVsbCxcbiAgICBmbGlnaHREZXRhaWw6IEZsaWdodEl0aW5lcmFyeSA9IG51bGwsXG4gICAgaW5ib3VuZFJ1bGVzOiBGYXJlQ29uZGl0aW9ucyA9IG51bGwsXG4gICAgaW5ib3VuZEZsaWdodHM6IEZsaWdodEpvdXJuZXlbXSA9IG51bGxcbiAgKTogdm9pZCB7XG4gICAgLy8gZmlyc3QgY2hlY2sgaWYgdGhlcmUgYXJlIHJ1bGVzXG4gICAgY29uc3QgZG9DYWxsID0gIU9iamVjdC52YWx1ZXMocnVsZXMpLmZpbmQoKHJ1bGU6IEZhcmVDb25kaXRpb25FbnRyeVtdKTogbnVtYmVyID0+IHJ1bGUubGVuZ3RoKTtcbiAgICBpZiAoZG9DYWxsKSB7XG4gICAgICBsZXQgZmxpZ2h0c0Nsb25lID0gXy5jbG9uZURlZXAoZmxpZ2h0cyk7XG5cbiAgICAgIGlmIChmbGlnaHRzQ2xvbmUubGVuZ3RoID4gMSkge1xuICAgICAgICBmbGlnaHRzQ2xvbmVbMF0uZGVzdGluYXRpb25BaXJwb3J0ID0gZmxpZ2h0c0Nsb25lW2ZsaWdodHMubGVuZ3RoIC0gMV0uZGVzdGluYXRpb25BaXJwb3J0O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBydWxlc0Zyb21DYWxsID0gdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEZsaWdodEZhcmVSdWxlcyhmbGlnaHRzQ2xvbmVbMF0sIGlkKTtcbiAgICAgIGlmIChpbmJvdW5kRmxpZ2h0cykge1xuICAgICAgICBsZXQgaW5ib3VuZEZsaWdodHNDbG9uZSA9IF8uY2xvbmVEZWVwKGluYm91bmRGbGlnaHRzKTtcblxuICAgICAgICBpZiAoaW5ib3VuZEZsaWdodHNDbG9uZS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgaW5ib3VuZEZsaWdodHNDbG9uZVswXS5kZXN0aW5hdGlvbkFpcnBvcnQgPVxuICAgICAgICAgICAgaW5ib3VuZEZsaWdodHNDbG9uZVtmbGlnaHRzLmxlbmd0aCAtIDFdLmRlc3RpbmF0aW9uQWlycG9ydDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmJvdW5kRmxpZ2h0c0Nsb25lWzBdLmhhc093blByb3BlcnR5KCdiYWdnYWdlQWxsb3dhbmNlQW1vdW50JykpIHtcbiAgICAgICAgICBkZWxldGUgKGluYm91bmRGbGlnaHRzQ2xvbmVbMF0gYXMgYW55KS5iYWdnYWdlQWxsb3dhbmNlQW1vdW50O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluYm91bmRSdWxlc0Zyb21DYWxsID0gdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEZsaWdodEZhcmVSdWxlcyhcbiAgICAgICAgICBpbmJvdW5kRmxpZ2h0c0Nsb25lWzBdLFxuICAgICAgICAgIGlkXG4gICAgICAgICk7XG4gICAgICAgIHJ1bGVzRnJvbUNhbGwuc3Vic2NyaWJlKFxuICAgICAgICAgIGRhdGEgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmFyZVJ1bGVzS2V5ID0gdGhpcy5jaGVja0ZhcmVSdWxlKGRhdGEucmVzdWx0c1swXSk7XG4gICAgICAgICAgICBpbmJvdW5kUnVsZXNGcm9tQ2FsbC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgIGluYm91bmREYXRhID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKE1vZGFsVHlwZXMuTW9kYWxGbGlnaHRGYXJlQ29tcG9uZW50LCBvcHRpb25zLCB7XG4gICAgICAgICAgICAgICAgICBydWxlczogZGF0YS5yZXN1bHRzWzBdLFxuICAgICAgICAgICAgICAgICAgZnJvbTogZmxpZ2h0Py5vcmlnaW5BaXJwb3J0IHx8IGZsaWdodHNDbG9uZVswXS5vcmlnaW5BaXJwb3J0LFxuICAgICAgICAgICAgICAgICAgdG86XG4gICAgICAgICAgICAgICAgICAgIGZsaWdodD8uZGVzdGluYXRpb25BaXJwb3J0IHx8XG4gICAgICAgICAgICAgICAgICAgIGZsaWdodHNDbG9uZVtmbGlnaHRzLmxlbmd0aCAtIDFdLmRlc3RpbmF0aW9uQWlycG9ydCxcbiAgICAgICAgICAgICAgICAgIGZsaWdodDogZmxpZ2h0RGV0YWlsLFxuICAgICAgICAgICAgICAgICAgc291cmNlSWQ6IGlkLFxuICAgICAgICAgICAgICAgICAgaW5ib3VuZFJ1bGVzOiBpbmJvdW5kRGF0YS5yZXN1bHRzWzBdLFxuICAgICAgICAgICAgICAgICAgZmFyZVJ1bGVzS2V5OiBmYXJlUnVsZXNLZXlcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcnVsZXNGcm9tQ2FsbC5zdWJzY3JpYmUoXG4gICAgICAgICAgZGF0YSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmYXJlUnVsZXNLZXkgPSB0aGlzLmNoZWNrRmFyZVJ1bGUoZGF0YS5yZXN1bHRzWzBdKTtcbiAgICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oTW9kYWxUeXBlcy5Nb2RhbEZsaWdodEZhcmVDb21wb25lbnQsIG9wdGlvbnMsIHtcbiAgICAgICAgICAgICAgcnVsZXM6IGRhdGEucmVzdWx0c1swXSxcbiAgICAgICAgICAgICAgZnJvbTogZmxpZ2h0Py5vcmlnaW5BaXJwb3J0IHx8IGZsaWdodHNDbG9uZVswXS5vcmlnaW5BaXJwb3J0LFxuICAgICAgICAgICAgICB0bzogZmxpZ2h0Py5kZXN0aW5hdGlvbkFpcnBvcnQgfHwgZmxpZ2h0c0Nsb25lW2ZsaWdodHMubGVuZ3RoIC0gMV0uZGVzdGluYXRpb25BaXJwb3J0LFxuICAgICAgICAgICAgICBmbGlnaHQ6IGZsaWdodERldGFpbCxcbiAgICAgICAgICAgICAgc291cmNlSWQ6IGlkLFxuICAgICAgICAgICAgICBmYXJlUnVsZXNLZXk6IGZhcmVSdWxlc0tleVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZhcmVSdWxlc0tleSA9IHRoaXMuY2hlY2tGYXJlUnVsZShydWxlcyk7XG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKE1vZGFsVHlwZXMuTW9kYWxGbGlnaHRGYXJlQ29tcG9uZW50LCBvcHRpb25zLCB7XG4gICAgICAgIHJ1bGVzLFxuICAgICAgICBmcm9tOiBmbGlnaHQ/Lm9yaWdpbkFpcnBvcnQgfHwgZmxpZ2h0c1swXS5vcmlnaW5BaXJwb3J0LFxuICAgICAgICB0bzogZmxpZ2h0Py5kZXN0aW5hdGlvbkFpcnBvcnQgfHwgZmxpZ2h0c1tmbGlnaHRzLmxlbmd0aCAtIDFdLmRlc3RpbmF0aW9uQWlycG9ydCxcbiAgICAgICAgZmxpZ2h0OiBmbGlnaHREZXRhaWwsXG4gICAgICAgIHNvdXJjZUlkOiBpZCxcbiAgICAgICAgaW5ib3VuZFJ1bGVzOiBpbmJvdW5kUnVsZXMsXG4gICAgICAgIGZhcmVSdWxlc0tleTogZmFyZVJ1bGVzS2V5XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjaGVja0ZhcmVSdWxlKHJ1bGVzOiBGbGlnaHRGYXJlUnVsZXNSZXNwb25zZSB8IEZhcmVDb25kaXRpb25zKTogSUZhcmVSdWxlc0tleSB7XG4gICAgY29uc3QgcnVsZUNvbnRlbnQgPSBPYmplY3QudmFsdWVzKHJ1bGVzIHx8IHt9KVxuICAgICAgLm1hcCgocnVsZTogRmFyZUNvbmRpdGlvbkVudHJ5W10pID0+XG4gICAgICAgIHJ1bGU/Lmxlbmd0aCAmJiBBcnJheS5pc0FycmF5KHJ1bGUpID8gcnVsZS5tYXAociA9PiByLnJlbWFyaykgOiBbXVxuICAgICAgKVxuICAgICAgLmZsYXQoKTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNDSEE6IHRoaXMuY2hlY2tGYXJlUnVsZUtleShydWxlQ29udGVudCwgJ0NIQScpLFxuICAgICAgaXNJTkM6IHRoaXMuY2hlY2tGYXJlUnVsZUtleShydWxlQ29udGVudCwgJ0lOQycpLFxuICAgICAgaXNOT0Y6IHRoaXMuY2hlY2tGYXJlUnVsZUtleShydWxlQ29udGVudCwgJ05PRicpXG4gICAgfTtcbiAgfVxuXG4gIGNoZWNrRmFyZVJ1bGVLZXkocnVsZUNvbnRlbnQ6IHN0cmluZ1tdLCBrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChgXFxcXGIke2tleX1cXFxcYmAsICdnaScpO1xuICAgIHJldHVybiAhIXJ1bGVDb250ZW50LmZpbmQocnVsZSA9PiByZWdleC50ZXN0KHJ1bGUpKTtcbiAgfVxuXG4gIC8vIFRPRE8gd2FpdGluZyBmb3IgZGF0YVxuICBnZXRUZXJtc0FuZENvbmQoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1BlbmFsdGllcycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0VsaWdpYmlsaXR5JyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAgLFxuICAgICAge1xuICAgICAgICBuYW1lOiAnRGF5L3RpbWUnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdTZWFzb25hbGl0eScsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0ZsaWdodMKgQXBwbGljYXRpb24nLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdBZHZhbmNlwqBSZXNlcnZhdGlvbnMvdGlja2V0aW5nJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnTWF4aW11bcKgU3RheScsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ01pbmltdW3CoFN0YXknLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdTdG9wb3ZlcnMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdUcmFuc2ZlcnMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdDb21iaW5hdGlvbnMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdCbGFja291dMKgRGF0ZXMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdTdXJjaGFyZ2VzJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnQWNjb21wYW5pZWTCoFRyYXZlbCcsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1RyYXZlbMKgUmVzdHJpY3Rpb25zJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnU2FsZXPCoFJlc3RyaWN0aW9ucycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0hpcC9taWxlYWdlwqBFeGNlcHRpb25zJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnVGlja2V0wqBFbmRvcnNlbWVudHMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdDaGlsZHJlbsKgRGlzY291bnRzJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnVG91csKgQ29uZHVjdG9ywqBEaXNjb3VudHMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdBZ2VudMKgRGlzY291bnRzJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnQWxswqBPdGhlcsKgRGlzY291bnRzJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnTWlzY2VsbGFuZW91c8KgUHJvdmlzaW9ucycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0ZhcmXCoEJ5wqBSdWxlJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnR3JvdXBzJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnVG91cnMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdWaXNpdMKgQW5vdGhlcsKgQ291bnRyeScsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0RlcG9zaXRzJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnVm9sdW50YXJ5wqBDaGFuZ2VzJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnVm9sdW50YXJ5wqBSZWZ1bmRzJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnTmVnb3RpYXRlZMKgRmFyZXMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdSdWxlwqBBcHBsaWNhdGlvbsKgQW5kwqBPdGhlcsKgQ29uZGl0aW9ucycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfVxuICAgIF07XG4gIH1cblxuICBzYXZlU2VhcmNoKCk6IE9ic2VydmFibGU8U2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdD4ge1xuICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xuICAgICAgY29uc3QgZmF2b3VyaXRlU2VhcmNoUXVlcnk6IElGbGlnaHRTZWFyY2hBcmdzID0gdGhpcy51cGRhdGVTZXJjaFF1ZXJ5KHF1ZXJ5KTtcblxuICAgICAgY29uc3Qgc2VhcmNoSW5mbyA9IHtcbiAgICAgICAgbmFtZTogYCR7bW9tZW50KCl9YCxcbiAgICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLkZsaWdodCxcbiAgICAgICAgc2VhcmNoQXJnczogZmF2b3VyaXRlU2VhcmNoUXVlcnlcbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVGYXZvdXJpdGVTZWFyY2goc2VhcmNoSW5mbyk7XG4gICAgfVxuICB9XG4gIGFzeW5jIGFwcGx5RmF2b3VyaXRlKGZhdjogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gZmF2Lm11bHRpRGVzdGluYXRpb25cbiAgICAgID8gRmxpZ2h0U2VhcmNoVHlwZS5tdWx0aUNpdHlcbiAgICAgIDogZmF2LnJldHVyblRyaXBcbiAgICAgID8gRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm5cbiAgICAgIDogRmxpZ2h0U2VhcmNoVHlwZS5vbmVXYXk7XG4gICAgaWYgKHRoaXMuY2hvc2VuU2VhcmNoVHlwZSA9PSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eSkge1xuICAgICAgY29uc3QgbXVsdGkgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgZmF2Lm11bHRpRGVzdGluYXRpb24ubWFwKFxuICAgICAgICAgIGFzeW5jIChhOiB7XG4gICAgICAgICAgICBkYXRlOiBzdHJpbmc7XG4gICAgICAgICAgICBkZXN0OiBzdHJpbmc7XG4gICAgICAgICAgICBvcmlnOiBzdHJpbmc7XG4gICAgICAgICAgICBvcmlnaW5BaXJwb3J0RnVsbDogYW55O1xuICAgICAgICAgICAgZGVzdGluYXRpb25BaXJwb3J0RnVsbDogYW55O1xuICAgICAgICAgIH0pID0+IHtcbiAgICAgICAgICAgIGxldCBkZXN0aW5hdGlvbjoge1xuICAgICAgICAgICAgICBkYXRlOiBtb21lbnQuTW9tZW50O1xuICAgICAgICAgICAgICBkZXN0OiBhbnk7XG4gICAgICAgICAgICAgIG9yaWc6IGFueTtcbiAgICAgICAgICAgICAgb3JpZ2luQWlycG9ydEZ1bGw6IGFueTtcbiAgICAgICAgICAgICAgZGVzdGluYXRpb25BaXJwb3J0RnVsbDogYW55O1xuICAgICAgICAgICAgfSA9IHtcbiAgICAgICAgICAgICAgZGF0ZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBkZXN0OiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIG9yaWc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgb3JpZ2luQWlycG9ydEZ1bGw6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgZGVzdGluYXRpb25BaXJwb3J0RnVsbDogdW5kZWZpbmVkXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZGVzdGluYXRpb24ub3JpZyA9IGF3YWl0IHRoaXMuc2VhcmNoU2VydmljZVxuICAgICAgICAgICAgICAuZ2V0QWlycG9ydHNMaXN0KGEub3JpZylcbiAgICAgICAgICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAgICAgICAgIC50aGVuKG9yaWdSZXN1bHRzID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKG9yaWdSZXN1bHRzIGFzIGFueVtdKS5maW5kKGIgPT4gYi5nYXRld2F5ID09IGEub3JpZyk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZGVzdGluYXRpb24uZGVzdCA9IGF3YWl0IHRoaXMuc2VhcmNoU2VydmljZVxuICAgICAgICAgICAgICAuZ2V0QWlycG9ydHNMaXN0KGEuZGVzdClcbiAgICAgICAgICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAgICAgICAgIC50aGVuKGRlc3RSZXN1bHRzID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGRlc3RSZXN1bHRzIGFzIGFueVtdKS5maW5kKGIgPT4gYi5nYXRld2F5ID09IGEuZGVzdCk7XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkZXN0aW5hdGlvbi5vcmlnaW5BaXJwb3J0RnVsbCA9IGF3YWl0IHRoaXMuc2VhcmNoU2VydmljZVxuICAgICAgICAgICAgICAuZ2V0QWlycG9ydHNMaXN0KGEuZGVzdClcbiAgICAgICAgICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAgICAgICAgIC50aGVuKGRlc3RSZXN1bHRzID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGRlc3RSZXN1bHRzIGFzIGFueVtdKS5maW5kKGIgPT4gYi5kZXN0aW5hdGlvbiA9PSBhLm9yaWdpbkFpcnBvcnRGdWxsKTtcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLmRlc3RpbmF0aW9uQWlycG9ydEZ1bGwgPSBhd2FpdCB0aGlzLnNlYXJjaFNlcnZpY2VcbiAgICAgICAgICAgICAgLmdldEFpcnBvcnRzTGlzdChhLmRlc3QpXG4gICAgICAgICAgICAgIC50b1Byb21pc2UoKVxuICAgICAgICAgICAgICAudGhlbihkZXN0UmVzdWx0cyA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChkZXN0UmVzdWx0cyBhcyBhbnlbXSkuZmluZChiID0+IGIuZGVzdGluYXRpb24gPT0gYS5kZXN0aW5hdGlvbkFpcnBvcnRGdWxsKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gZGVzdGluYXRpb247XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgdGhpcy5tdWx0aURlc3RpbmF0aW9uID0gbXVsdGkgYXMgYW55O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0QWlycG9ydHNMaXN0KGZhdi5vcmlnaW5BaXJwb3J0KS5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XG4gICAgICAgIHRoaXMuZGVwYXJ0TG9jYXRpb24gPSAocmVzdWx0cyBhcyBhbnlbXSkuZmluZChhID0+IGEuZ2F0ZXdheSA9PSBmYXYub3JpZ2luQWlycG9ydCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0c0xpc3QoZmF2LmRlc3RpbmF0aW9uQWlycG9ydCkuc3Vic2NyaWJlKHJlc3VsdHMgPT4ge1xuICAgICAgICB0aGlzLmFycml2ZUxvY2F0aW9uID0gKHJlc3VsdHMgYXMgYW55W10pLmZpbmQoYSA9PiBhLmdhdGV3YXkgPT0gZmF2LmRlc3RpbmF0aW9uQWlycG9ydCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5jYWJpbkNsYXNzID0gZmF2Lm91dGJvdW5kQ2FiaW5DbGFzc1swXTtcbiAgICB0aGlzLnJldHVybkNhYmluQ2xhc3MgPVxuICAgICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlICE9IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuID8gbnVsbCA6IGZhdi5yZXR1cm5DYWJpbkNsYXNzWzBdO1xuICAgIHRoaXMuaW5jbHVkZU5lYXJieUFpcnBvcnRzID0gZmF2LmluY2x1ZGVOZWFyYnlBaXJwb3J0cztcbiAgICB0aGlzLmFkdWx0cyA9IGZhdi5wYXNzZW5nZXJzLmZpbHRlcigoYTogYW55KSA9PiBhLnR5cGUgPT0gJ0FEVUxUJykubGVuZ3RoO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBmYXYucGFzc2VuZ2Vycy5maWx0ZXIoKGE6IGFueSkgPT4gYS50eXBlID09ICdDSElMRCcpLmxlbmd0aDtcbiAgICAvLyB0aGlzLnByZWZlcnJlZENhcnJpZXJzID0gZmF2LnByZWZlcnJlZENhcnJpZXJzLm1hcCgoYTogYW55KSA9PiB7XG5cbiAgICAvLyB9KVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZXJjaFF1ZXJ5KHF1ZXJ5OiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyk6IElGbGlnaHRTZWFyY2hBcmdzIHtcbiAgICBjb25zdCBzZWFyY2hRdWVyeTogSUZsaWdodFNlYXJjaEFyZ3MgPSBxdWVyeTtcbiAgICBzd2l0Y2ggKHRoaXMuY2hvc2VuU2VhcmNoVHlwZSkge1xuICAgICAgY2FzZSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eTpcbiAgICAgICAgc2VhcmNoUXVlcnkubXVsdGlEZXN0aW5hdGlvbkRldGFpbCA9IHRoaXMubXVsdGlEZXN0aW5hdGlvbjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEZsaWdodFNlYXJjaFR5cGUucmV0dXJuOlxuICAgICAgY2FzZSBGbGlnaHRTZWFyY2hUeXBlLm9uZVdheTpcbiAgICAgICAgc2VhcmNoUXVlcnkuZGVwYXJ0TG9jYXRpb25EZXRhaWwgPSB0aGlzLmRlcGFydExvY2F0aW9uO1xuICAgICAgICBzZWFyY2hRdWVyeS5hcnJpdmVMb2NhdGlvbkRldGFpbCA9IHRoaXMuYXJyaXZlTG9jYXRpb247XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiBzZWFyY2hRdWVyeTtcbiAgfVxuXG4gIGNhbkJlRXVyb1NlYXJjaGVkKFxuICAgIGRlcGFydExvY2F0aW9uOiBzdHJpbmcgPSAodGhpcy5kZXBhcnRMb2NhdGlvbiBhcyBPQlRBaXJwb3J0RGV0YWlscyk/LmdhdGV3YXksXG4gICAgYXJyaXZlTG9jYXRpb246IHN0cmluZyA9ICh0aGlzLmFycml2ZUxvY2F0aW9uIGFzIE9CVEFpcnBvcnREZXRhaWxzKT8uZ2F0ZXdheSxcbiAgICBjaG9zZW5TZWFyY2hUeXBlOiBGbGlnaHRTZWFyY2hUeXBlID0gdGhpcy5jaG9zZW5TZWFyY2hUeXBlXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmIChjaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoQWlyVG9FdXJvW2RlcGFydExvY2F0aW9uXSAmJiBBaXJUb0V1cm9bYXJyaXZlTG9jYXRpb25dKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBhc3luYyBjYW5CZVJhaWxTZWFyY2hlZChcbiAgICBjaG9zZW5TZWFyY2hUeXBlOiBGbGlnaHRTZWFyY2hUeXBlID0gdGhpcy5jaG9zZW5TZWFyY2hUeXBlLFxuICAgIHRyYWlubGluZUNvbmZpZzogc3RyaW5nXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnNvbGUubG9nKCcrKysgQ2hlY2tpbmcgaWYgZmxpZ2h0IGpvdXJuZXkgY2FuIGJlIHNlZWFyY2hlZCBieSByYWlsICsrKycpO1xuXG4gICAgaWYgKGNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUubXVsdGlDaXR5KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRyYWlubGluZUNvbmZpZykge1xuICAgICAgLy8gYXR0ZW1wdCB0byBsb29rdXAgdGhlIHN0YXRpb25zIC0gd291bGQgYmUgdG8gbWFueSB0byBtYXAgcHJvcGVybHlcbiAgICAgIGNvbnNvbGUubG9nKCcrKysgVHJhaW5saW5lIGVuYWJsZWQgLSBhdHRlbXB0IHRvIGxvb2t1cCB0aGUgc3RhdGlvbnMgKysrJyk7XG4gICAgICBjb25zdCBzcGxpdCA9ICh0aGlzLmRlcGFydExvY2F0aW9uIGFzIE9CVEFpcnBvcnREZXRhaWxzKT8uZGVzdGluYXRpb24uc3BsaXQoJywnKVswXTtcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuZGVwYXJ0TG9jYXRpb24pO1xuICAgICAgY29uc3QgdHJhaW5saW5lT3V0Ym91bmRTdGF0aW9uczogYW55ID0gYXdhaXQgdGhpcy5zZWFyY2hTZXJ2aWNlXG4gICAgICAgIC5nZXRTdGF0aW9uTG9jYXRpb25zKHNwbGl0LCB1bmRlZmluZWQsIGZhbHNlLCBmYWxzZSwgZmFsc2UpXG4gICAgICAgIC50b1Byb21pc2UoKTtcbiAgICAgIGNvbnNvbGUubG9nKHRyYWlubGluZU91dGJvdW5kU3RhdGlvbnMpO1xuXG4gICAgICBjb25zdCBpblNwbGl0ID0gKHRoaXMuYXJyaXZlTG9jYXRpb24gYXMgT0JUQWlycG9ydERldGFpbHMpPy5kZXN0aW5hdGlvbi5zcGxpdCgnLCcpWzBdO1xuXG4gICAgICBjb25zdCB0cmFpbmxpbmVJbmJvdW5kU3RhdGlvbnM6IGFueSA9IGF3YWl0IHRoaXMuc2VhcmNoU2VydmljZVxuICAgICAgICAuZ2V0U3RhdGlvbkxvY2F0aW9ucyhpblNwbGl0LCB1bmRlZmluZWQsIGZhbHNlLCBmYWxzZSwgZmFsc2UpXG4gICAgICAgIC50b1Byb21pc2UoKTtcbiAgICAgIGNvbnNvbGUubG9nKHRyYWlubGluZUluYm91bmRTdGF0aW9ucyk7XG5cbiAgICAgIGlmICh0cmFpbmxpbmVPdXRib3VuZFN0YXRpb25zLmxlbmd0aCAmJiB0cmFpbmxpbmVJbmJvdW5kU3RhdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMub3V0Ym91bmRTYW1lU2VhcmNoVHJhaW5saW5lU3RhdGlvbnMgPSB0cmFpbmxpbmVPdXRib3VuZFN0YXRpb25zO1xuICAgICAgICB0aGlzLmluYm91bmRTYW1lU2VhcmNoVHJhaW5saW5lU3RhdGlvbnMgPSB0cmFpbmxpbmVJbmJvdW5kU3RhdGlvbnM7XG5cbiAgICAgICAgY29uc29sZS5sb2coJysrKyBIYXZlIGJvdGggdHJhaW5saW5lIGluYm91bmQgYW5kIG91dGJvdW5kIHN0YXRpb25zICsrKycpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICBBSVJUb1JhaWxVS1sodGhpcy5kZXBhcnRMb2NhdGlvbiBhcyBPQlRBaXJwb3J0RGV0YWlscyk/LmdhdGV3YXldICYmXG4gICAgICAgIEFJUlRvUmFpbFVLWyh0aGlzLmFycml2ZUxvY2F0aW9uIGFzIE9CVEFpcnBvcnREZXRhaWxzKT8uZ2F0ZXdheV1cbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0RmFyZVJ1bGVzKGpvdXJuZXlIYXNoOiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICB3aGVuU2VsZWN0ZWRBbG9uZTogdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdLFxuICAgICAgam91cm5leVdoZW5TZWxlY3RlZDogdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF1cbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGdldFJlcXVpcmVzUmVhc29uKGpvdXJuZXlIYXNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgISF0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXT8ucmVxdWlyZXNSZWFzb25LZXlzPy5sZW5ndGggfHxcbiAgICAgICEhdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdPy5yZXF1aXJlc1JlYXNvbktleXM/Lmxlbmd0aFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0UmVxdWlyZXNSZWFzb25NZXNzYWdlKGpvdXJuZXlIYXNoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXT8ucmVxdWlyZXNSZWFzb25NZXNzYWdlcy5qb2luKCcsICcpIHx8XG4gICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF0/LnJlcXVpcmVzUmVhc29uTWVzc2FnZXMuam9pbignLCAnKSB8fFxuICAgICAgJydcbiAgICApO1xuICB9XG5cbiAgbWVzc2FnZUNvbmZpZ0NoZWNrKGNvbmZpZzogYW55LCBpc0NoZWNrUGFzczogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGRlcGFydExvY2F0aW9uID0gdGhpcy5kZXBhcnRMb2NhdGlvbiBhcyBPQlRBaXJwb3J0RGV0YWlscztcbiAgICBjb25zdCBhcnJpdmVMb2NhdGlvbiA9IHRoaXMuYXJyaXZlTG9jYXRpb24gYXMgT0JUQWlycG9ydERldGFpbHM7XG4gICAgY29uc3QgZGVwYXJ0RGV0YWlsID0gZGVwYXJ0TG9jYXRpb24/LmRlc3RpbmF0aW9uPy50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGFycml2ZURldGFpbCA9IGFycml2ZUxvY2F0aW9uPy5kZXN0aW5hdGlvbj8udG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoY29uZmlnLmFycml2YWxBaXJwb3J0KSB7XG4gICAgICBpc0NoZWNrUGFzcyA9IGFycml2ZURldGFpbCA9PT0gY29uZmlnLmFycml2YWxBaXJwb3J0O1xuICAgIH1cblxuICAgIGlmIChjb25maWcuZGVwYXJ0dXJlQWlycG9ydCkge1xuICAgICAgaXNDaGVja1Bhc3MgPSBkZXBhcnREZXRhaWwgPT09IGNvbmZpZy5kZXBhcnR1cmVBaXJwb3J0O1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmNpdHkpIHtcbiAgICAgIGNvbnN0IGNpdHkgPSBjb25maWcuY2l0eS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgbWF0Y2ggPSAhIXRoaXMubXVsdGlEZXN0aW5hdGlvbi5maW5kKFxuICAgICAgICBtdWwgPT5cbiAgICAgICAgICBtdWwuZGVzdD8uZGVzdGluYXRpb24/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoY2l0eSkgfHxcbiAgICAgICAgICBtdWwub3JpZz8uZGVzdGluYXRpb24/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoY2l0eSlcbiAgICAgICk7XG4gICAgICBpc0NoZWNrUGFzcyA9IGRlcGFydERldGFpbD8uaW5jbHVkZXMoY2l0eSkgfHwgYXJyaXZlRGV0YWlsPy5pbmNsdWRlcyhjaXR5KSB8fCBtYXRjaDtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5jb3VudHJ5KSB7XG4gICAgICBjb25zdCBtYXRjaCA9ICEhdGhpcy5tdWx0aURlc3RpbmF0aW9uLmZpbmQoXG4gICAgICAgIG11bCA9PiBtdWwuZGVzdD8uY291bnRyeUNvZGUgPT09IGNvbmZpZy5jb3VudHJ5IHx8IG11bC5vcmlnPy5jb3VudHJ5Q29kZSA9PT0gY29uZmlnLmNvdW50cnlcbiAgICAgICk7XG4gICAgICBpc0NoZWNrUGFzcyA9XG4gICAgICAgIGRlcGFydExvY2F0aW9uPy5jb3VudHJ5ID09PSBjb25maWcuY291bnRyeSB8fFxuICAgICAgICBhcnJpdmVMb2NhdGlvbj8uY291bnRyeSA9PT0gY29uZmlnLmNvdW50cnkgfHxcbiAgICAgICAgbWF0Y2g7XG4gICAgfVxuICAgIGlmIChjb25maWcuY2Fycmllcikge1xuICAgICAgaXNDaGVja1Bhc3MgPSAhIXRoaXMucHJlZmVycmVkQ2FycmllcnMuZmluZChjYXJyaWVyID0+XG4gICAgICAgIGNhcnJpZXIgIT09IG51bGxcbiAgICAgICAgICA/IGNhcnJpZXIuY29kZSA9PT0gY29uZmlnLmNhcnJpZXIgfHwgY2Fycmllci5uYW1lID09PSBjb25maWcuY2FycmllclxuICAgICAgICAgIDogZmFsc2VcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzQ2hlY2tQYXNzO1xuICB9XG5cbiAgLy8gICBwdWJsaWMgZ2V0RmxpZ2h0RXh0cmFzKGZsaWdodDogSW5wdXRGbGlnaHRKb3VybmV5LCkge1xuICAvLyAgIHJldHVybiB0aGlzLmdldEZsaWdodEV4dHJhc09wdGlvbnMuZmV0Y2hMaXN0KHtmbGlnaHR9KVxuICAvLyB9XG5cbiAgcHVibGljIGdldEZsaWdodEV4dHJhcyhcbiAgICBmbGlnaHRzOiBJbnB1dEZsaWdodEpvdXJuZXlbXSxcbiAgICBzdXBwbGllcjogc3RyaW5nLFxuICAgIGxveWFsdHlDb2RlPzogc3RyaW5nLFxuICAgIHVzZXJJZD86IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPEZsaWdodE9wdGlvbnNbXT4ge1xuICAgIC8vIEdldCBzZWFyY2ggcXVlcnlcbiAgICBsZXQgc2VhcmNoUXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XG5cbiAgICBzZWFyY2hRdWVyeS5wYXNzZW5nZXJzID0gdGhpcy50cmF2ZWxsZXJzLm1hcChcbiAgICAgICh4KTogRmxpZ2h0UGFzc2VuZ2VyT2JqZWN0ID0+ICh7XG4gICAgICAgIHR5cGU6IEZsaWdodFBhc3NlbmdlclR5cGUuQWR1bHQsXG4gICAgICAgIGRvYjogeC5kb2IgPyBuZXcgRGF0ZShOdW1iZXIoeC5kb2IpKS50b0xvY2FsZURhdGVTdHJpbmcoKSA6IG51bGwsXG4gICAgICAgIGZpcnN0TmFtZTogeC5mb3JlbmFtZSxcbiAgICAgICAgc3VybmFtZTogeC5zdXJuYW1lXG4gICAgICB9KVxuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRGbGlnaHRFeHRyYXNPcHRpb25zXG4gICAgICAuZmV0Y2hMaXN0KHsgZmxpZ2h0cywgc3VwcGxpZXIsIHNlYXJjaFF1ZXJ5LCBsb3lhbHR5Q29kZSwgdXNlcklkIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChkYXRhOiBGbGlnaHRPcHRpb25zW10pID0+IHtcbiAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldFNlbGVjdGVkRmxpZ2h0KCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodCA9IG51bGw7XG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwSWQgPSAtMTtcbiAgICB0aGlzLm91dGJvdW5kQ2FiaW5DbGFzcyA9ICcnOyAvLyByZXNldCBvdXRib3VuZENhYmluQ2xhc3NcbiAgfVxuXG4gIGNyZWF0ZUNoZWFwZXN0UHJpY2VPYmplY3QoZmxpZ2h0c0dyb3VwVHlwZTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0W10pOiBJQ2hlYXBlc3RQcmljZURldGFpbHMge1xuICAgIHJldHVybiBmbGlnaHRzR3JvdXBUeXBlLnJlZHVjZShcbiAgICAgIChjaGVhcGVzdFByaWNlOiBJQ2hlYXBlc3RQcmljZURldGFpbHMsIHJlc3VsdDogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0KSA9PiB7XG4gICAgICAgIGNvbnN0IHByaWNlID0gcmVzdWx0Lm1pblByaWNlO1xuICAgICAgICBpZiAoY2hlYXBlc3RQcmljZS5hbW91bnQgPiBwcmljZSkge1xuICAgICAgICAgIGNoZWFwZXN0UHJpY2UuYW1vdW50ID0gcHJpY2U7XG4gICAgICAgICAgY29uc3QgY2hlYXBGbGlnaHRDbGFzcyA9IE9iamVjdC52YWx1ZXMocmVzdWx0LmNsYXNzZXMpXG4gICAgICAgICAgICAuZmlsdGVyKGZsaWdodENsYXNzID0+IGZsaWdodENsYXNzICE9PSBudWxsKVxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGEubWlucHJpY2UgLSBiLm1pbnByaWNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGNoZWFwRmxpZ2h0Q2xhc3MubGVuZ3RoKSB7XG4gICAgICAgICAgICBjaGVhcGVzdFByaWNlLmZsaWdodCA9IGNoZWFwRmxpZ2h0Q2xhc3NbMF0uZmxpZ2h0c1swXTtcbiAgICAgICAgICAgIGNoZWFwZXN0UHJpY2UuY3VycmVuY3lDb2RlID0gY2hlYXBGbGlnaHRDbGFzc1swXS5jdXJyZW5jeTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoZWFwZXN0UHJpY2U7XG4gICAgICB9LFxuICAgICAgeyBhbW91bnQ6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLCBjdXJyZW5jeUNvZGU6ICdHQlAnLCBmbGlnaHQ6IG51bGwgfVxuICAgICk7XG4gIH1cblxuICBjcmVhdGVDaGVhcGVzdFByaWNlKGpvdXJuZXlzOiBGbGlnaHRJdGluZXJhcnlbXSk6IElDaGVhcGVzdFByaWNlRGV0YWlscyB7XG4gICAgaWYgKCFqb3VybmV5cz8ubGVuZ3RoKSByZXR1cm47XG4gICAgY29uc3QgY3VycmVuY3kgPSBqb3VybmV5c1swXS50b3RhbC5jdXJyZW5jeTtcbiAgICByZXR1cm4gam91cm5leXMucmVkdWNlKFxuICAgICAgKGNoZWFwZXN0UHJpY2U6IElDaGVhcGVzdFByaWNlRGV0YWlscywgcmVzdWx0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucykgPT4ge1xuICAgICAgICBjb25zdCBwcmljZSA9IHJlc3VsdC50b3RhbC5wcmljZTtcbiAgICAgICAgY29uc3QgY3VycmVuY3kgPSByZXN1bHQudG90YWwuY3VycmVuY3k7XG4gICAgICAgIGNvbnN0IGZsaWdodCA9IHJlc3VsdDtcbiAgICAgICAgaWYgKGNoZWFwZXN0UHJpY2UuYW1vdW50ID4gcHJpY2UpIHtcbiAgICAgICAgICBjaGVhcGVzdFByaWNlLmFtb3VudCA9IHByaWNlO1xuICAgICAgICAgIGNoZWFwZXN0UHJpY2UuY3VycmVuY3lDb2RlID0gY3VycmVuY3k7XG4gICAgICAgICAgY2hlYXBlc3RQcmljZS5mbGlnaHQgPSBmbGlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoZWFwZXN0UHJpY2U7XG4gICAgICB9LFxuICAgICAgeyBhbW91bnQ6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLCBjdXJyZW5jeUNvZGU6IGN1cnJlbmN5LCBmbGlnaHQ6IG51bGwgfVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc2FuaXRpc2VEYXRlVGltZShkYXRlVGltZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnNhbml0aXNlRGF0ZVRpbWUoZGF0ZVRpbWUpO1xuICB9XG5cbiAgYXN5bmMgc2V0UXVlcnlGcm9tQmFza2V0SXRlbShiYXNrZXRJdGVtOiBCYXNrZXRJdGVtKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVjZW50U2VhcmNoQXJncyA9IGJhc2tldEl0ZW0uc2VhcmNoUXVlcnk7XG5cbiAgICB0aGlzLmZhcmVUeXBlID0gcmVjZW50U2VhcmNoQXJncy5mYXJlVHlwZTtcbiAgICB0aGlzLm1heENvbm5lY3Rpb25zID0gcmVjZW50U2VhcmNoQXJncy5tYXhDb25uZWN0aW9ucztcblxuICAgIGlmIChyZWNlbnRTZWFyY2hBcmdzLm91dGJvdW5kQ2FiaW5DbGFzcykge1xuICAgICAgdGhpcy5jYWJpbkNsYXNzID0gcmVjZW50U2VhcmNoQXJncy5vdXRib3VuZENhYmluQ2xhc3NbMF07XG4gICAgfVxuICAgIGlmIChyZWNlbnRTZWFyY2hBcmdzLnJldHVybkNhYmluQ2xhc3MpIHtcbiAgICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9IHJlY2VudFNlYXJjaEFyZ3MucmV0dXJuQ2FiaW5DbGFzc1swXTtcbiAgICB9XG5cbiAgICB0aGlzLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA9IHJlY2VudFNlYXJjaEFyZ3MuaW5jbHVkZU5lYXJieUFpcnBvcnRzID8gdHJ1ZSA6IGZhbHNlO1xuXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gcmVjZW50U2VhcmNoQXJncz8ubXVsdGlEZXN0aW5hdGlvbj8ubGVuZ3RoXG4gICAgICA/IEZsaWdodFNlYXJjaFR5cGUubXVsdGlDaXR5XG4gICAgICA6IHJlY2VudFNlYXJjaEFyZ3MucmV0dXJuVHJpcFxuICAgICAgPyBGbGlnaHRTZWFyY2hUeXBlLnJldHVyblxuICAgICAgOiBGbGlnaHRTZWFyY2hUeXBlLm9uZVdheTtcblxuICAgIGlmIChyZWNlbnRTZWFyY2hBcmdzLnZpYSkge1xuICAgICAgdGhpcy52aWEgPSByZWNlbnRTZWFyY2hBcmdzLnZpYTtcbiAgICB9XG5cbiAgICBpZiAoIXJlY2VudFNlYXJjaEFyZ3M/Lm11bHRpRGVzdGluYXRpb24/Lmxlbmd0aCkge1xuICAgICAgY29uc3QgZGVwYXJ0TG9jYXRpb24gPSBhd2FpdCB0aGlzLnNlYXJjaFNlcnZpY2VcbiAgICAgICAgLmdldEFpcnBvcnRCeUNvZGUocmVjZW50U2VhcmNoQXJncy5vcmlnaW5BaXJwb3J0LCBudWxsKSAvLyBwYXNzIGluIG51bGwgb3RoZXJ3aXNlIGdlbmVyaWMgYWlycG9ydHMgKGUuZy4gTE9OKSBkbyBub3QgZ2V0IGV4YWN0IGlhdGEgbWF0Y2hlcyBiYWNrXG4gICAgICAgIC50b1Byb21pc2UoKTtcbiAgICAgIGNvbnN0IGFycml2ZUxvY2F0aW9uID0gYXdhaXQgdGhpcy5zZWFyY2hTZXJ2aWNlXG4gICAgICAgIC5nZXRBaXJwb3J0QnlDb2RlKHJlY2VudFNlYXJjaEFyZ3MuZGVzdGluYXRpb25BaXJwb3J0LCBudWxsKVxuICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgICBpZiAoZGVwYXJ0TG9jYXRpb24gJiYgYXJyaXZlTG9jYXRpb24pIHtcbiAgICAgICAgdGhpcy5kZXBhcnRMb2NhdGlvbiA9IHtcbiAgICAgICAgICBkZXN0aW5hdGlvbjogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLm5hbWUsXG4gICAgICAgICAgZ2F0ZXdheTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLmlhdGEsXG4gICAgICAgICAgdGVybWluYWxzOiB0aGlzLnNlYXJjaFNlcnZpY2UucHJvY2Vzc1Rlcm1pbmFscyhkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2gudGVybWluYWxzKSxcbiAgICAgICAgICBjb3VudHJ5OiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeSxcbiAgICAgICAgICBwb3N0Y29kZTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LnBvc3Rjb2RlLFxuICAgICAgICAgIGNvdW50cnlDb2RlOiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeUNvZGVcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5hcnJpdmVMb2NhdGlvbiA9IHtcbiAgICAgICAgICBkZXN0aW5hdGlvbjogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLm5hbWUsXG4gICAgICAgICAgZ2F0ZXdheTogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLmlhdGEsXG4gICAgICAgICAgdGVybWluYWxzOiB0aGlzLnNlYXJjaFNlcnZpY2UucHJvY2Vzc1Rlcm1pbmFscyhhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2gudGVybWluYWxzKSxcbiAgICAgICAgICBjb3VudHJ5OiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeSxcbiAgICAgICAgICBwb3N0Y29kZTogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LnBvc3Rjb2RlLFxuICAgICAgICAgIGNvdW50cnlDb2RlOiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeUNvZGVcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAocmVjZW50U2VhcmNoQXJncy5wcmVmZXJyZWRDYXJyaWVycykge1xuICAgICAgICAgIGNvbnN0IHByZWZlcnJlZENhcnJpZXJzOiBPQlRBaXJsaW5lc0RldGFpbHNbXSA9IFtdO1xuICAgICAgICAgIGZvciAobGV0IHByZWZlcnJlZENhcnJ5IG9mIHJlY2VudFNlYXJjaEFyZ3MucHJlZmVycmVkQ2FycmllcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zOiBhbnkgPSBhd2FpdCB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0QWlybGluZXNMaXN0KHByZWZlcnJlZENhcnJ5KS50b1Byb21pc2UoKTtcbiAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW06IE9CVEFpcmxpbmVzRGV0YWlscykgPT4ge1xuICAgICAgICAgICAgICBpZiAoaXRlbS5jb2RlID09PSBwcmVmZXJyZWRDYXJyeSkge1xuICAgICAgICAgICAgICAgIHByZWZlcnJlZENhcnJpZXJzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5wcmVmZXJyZWRDYXJyaWVycyA9IHByZWZlcnJlZENhcnJpZXJzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZU11bHRpRGVzdGluYXRpb24ocmVjZW50U2VhcmNoQXJncyk7XG4gICAgICB0aGlzLmRlcGFydExvY2F0aW9uID0gdGhpcy5tdWx0aURlc3RpbmF0aW9uWzBdLm9yaWc7XG4gICAgICB0aGlzLmFycml2ZUxvY2F0aW9uID0gdGhpcy5tdWx0aURlc3RpbmF0aW9uWzBdLmRlc3Q7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG1ha2VSZXR1cm5PdXRib3VuZChjbzJQZXJQYXNzZW5nZXI6IG51bWJlcik6IEdyZWVuZXJDaG9pY2Uge1xuICAgIHJldHVybiB0aGlzLmdyZWVuZXJDaG9pY2UubWFrZVJldHVybk91dGJvdW5kKGNvMlBlclBhc3Nlbmdlcik7XG4gIH1cblxuICBwdWJsaWMgbWFrZU11bHRpKG9yZGVyOiBudW1iZXIsIGNvMlBlclBhc3NlbmdlcjogbnVtYmVyKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5ncmVlbmVyQ2hvaWNlLm1ha2VNdWx0aShvcmRlciwgY28yUGVyUGFzc2VuZ2VyKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDdXN0b21DU1Moam91cm5leUhhc2g6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdPy5jdXN0b21DU1MgfHxcbiAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXT8uY3VzdG9tQ1NTIHx8XG4gICAgICAnJ1xuICAgICk7XG4gIH1cblxuICBhc3luYyByZXByaWNlRmxpZ2h0KGZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMpOiBQcm9taXNlPEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zPiB7XG4gICAgY29uc29sZS5sb2coJysrKyBBdHRlbXB0aW5nIHRvIHJlcHJpY2U6ICcsIGZsaWdodCwgJyArKysnKTtcbiAgICAvLyB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0dGluZ0ZsaWdodENsYXNzZXMubmV4dCh0cnVlKTtcbiAgICB0cnkge1xuICAgICAgLy8gbm93IGFjdHVhbGx5IGRvIHRoZSByZXByaWNlIGNhbGwgLSBpZiB3ZSB3YW50IHRoYXRcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5yZXByaWNpbmdGbGlnaHQubmV4dCh0cnVlKTtcbiAgICAgIGNvbnN0IG5ld0ZsaWdodCA9IGF3YWl0IFxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0RmxpZ2h0QXROZXdDbGFzcyhcbiAgICAgICAgICB0aGlzLmdldFNlYXJjaFF1ZXJ5KCksXG4gICAgICAgICAgZmxpZ2h0LFxuICAgICAgICAgIHRoaXMuYWR1bHRzLFxuICAgICAgICAgIHRoaXMuY2hpbGRyZW5cbiAgICAgICAgKS50b1Byb21pc2UoKTtcbiAgICAgICAgXG4gICAgICBmbGlnaHQudG90YWwgPSBuZXdGbGlnaHQuZmxpZ2h0c1swXS50b3RhbDtcbiAgICAgIC8vIHRoaXMgYml0IGZvciBuZXcgcG9saWN5IEVOVC05NzcyXG4gICAgICBjb25zdCB7IGpvdXJuZXlXaGVuU2VsZWN0ZWQsIHdoZW5TZWxlY3RlZEFsb25lIH0gPSBuZXdGbGlnaHQucnVsZUFjdGlvblN1bW1hcnk7XG4gICAgICAvLyB1cGRhdGUgaW4gb2J0c1xuICAgICAgdGhpcy51cGRhdGVGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyhmbGlnaHQsIG5ld0ZsaWdodC5ydWxlQWN0aW9uU3VtbWFyeSk7XG4gICAgICBmbGlnaHQucmVxdWlyZXNSZWFzb25LZXlzID1cbiAgICAgICAgam91cm5leVdoZW5TZWxlY3RlZFtmbGlnaHQuam91cm5leUhhc2hdPy5yZXF1aXJlc1JlYXNvbktleXMgfHxcbiAgICAgICAgd2hlblNlbGVjdGVkQWxvbmVbZmxpZ2h0LmpvdXJuZXlIYXNoXT8ucmVxdWlyZXNSZWFzb25LZXlzO1xuICAgICAgZmxpZ2h0LnJlcXVpcmVzUmVhc29uTWVzc2FnZXMgPVxuICAgICAgICBqb3VybmV5V2hlblNlbGVjdGVkW2ZsaWdodC5qb3VybmV5SGFzaF0/LnJlcXVpcmVzUmVhc29uTWVzc2FnZXMgfHxcbiAgICAgICAgd2hlblNlbGVjdGVkQWxvbmVbZmxpZ2h0LmpvdXJuZXlIYXNoXT8ucmVxdWlyZXNSZWFzb25NZXNzYWdlcyB8fFxuICAgICAgICBbXTtcblxuICAgICAgZmxpZ2h0LnVuYXZhaWxhYmxlID1cbiAgICAgICAgam91cm5leVdoZW5TZWxlY3RlZFtmbGlnaHQuam91cm5leUhhc2hdPy51bmF2YWlsYWJsZSB8fFxuICAgICAgICB3aGVuU2VsZWN0ZWRBbG9uZVtmbGlnaHQuam91cm5leUhhc2hdPy51bmF2YWlsYWJsZTtcbiAgICAgIGZsaWdodC51bmF2YWlsYWJsZU1lc3NhZ2UgPVxuICAgICAgICBqb3VybmV5V2hlblNlbGVjdGVkW2ZsaWdodC5qb3VybmV5SGFzaF0/LnVuYXZhaWxhYmxlTWVzc2FnZSB8fFxuICAgICAgICB3aGVuU2VsZWN0ZWRBbG9uZVtmbGlnaHQuam91cm5leUhhc2hdPy51bmF2YWlsYWJsZU1lc3NhZ2UgfHxcbiAgICAgICAgJyc7XG4gICAgICAvLyB3ZSB3ZXJlIHVwZGF0aW5nIHRoZSB3aG9sZSwgYWxsIHdlIG5lZWQgdG8gZG8gaXMgdXBkYXRlIHRoZSB0b3RhbCwgdGhpcyBjb250YWlucyBkaXNjb3VudCBpbmZvXG4gICAgICAvLyBhbmQgYWxzbyB1b2RhdGUgcG9saWN5XG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UucmVwcmljaW5nRmxpZ2h0Lm5leHQoZmFsc2UpO1xuICAgICAgcmV0dXJuIGZsaWdodFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0dGluZ0ZsaWdodENsYXNzZXMubmV4dChmYWxzZSk7XG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UucmVwcmljaW5nRmxpZ2h0Lm5leHQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUZsaWdodFNlYXRNYXAodXNlcjpzdHJpbmcsIGZsaWdodElkOnN0cmluZyxmbGlnaHRIYXNoOnN0cmluZyxzZWF0czphbnkpOk9ic2VydmFibGU8QmFza2V0RGV0YWlscz4ge1xuICAgIHJldHVybiB0aGlzLnVwZGF0ZUZsaWdodFNlYXRNYXBVcGRhdGVyLnVwZGF0ZU9uZSh7dXNlciwgYmFza2V0SXRlbUlkOmZsaWdodElkLGZsaWdodERldGFpbEhhc2g6ZmxpZ2h0SGFzaCwgc2VhdDpzZWF0c30pXG4gIH1cblxuICBzaG93TWl4ZWRDYWJpbihmbGlnaHRzOiBGbGlnaHRKb3VybmV5W10pOiBib29sZWFue1xuICAgIHJldHVybiBmbGlnaHRzLmxlbmd0aCA+IDAgJiYgXG4gICAgICBmbGlnaHRzLnNvbWUoZmxpZ2h0ID0+IGZsaWdodD8uY2FiaW5Db2RlICE9PSBmbGlnaHRzWzBdPy5jYWJpbkNvZGUpICYmIFxuICAgICAgZmxpZ2h0cy5zb21lKGZsaWdodCA9PiBmbGlnaHQuY2FiaW5Db2RlID09PSBcIllcIiAmJiBmbGlnaHQuY2FiaW5DbGFzcyA9PT0gXCJQcmVtaXVtXCIpO1xuICB9XG59XG5cbiJdfQ==
|
|
3301
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxpZ2h0LWVudGVycHJpc2Utc2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2J0c2VydmljZXMvYmFzZS9zcmMvbGliL3ZlbmRvci9jbGFzc2VzL2ZsaWdodC1lbnRlcnByaXNlLXNlYXJjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBSXpELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUk3RSxPQUFPLEVBUUwsUUFBUSxFQUNSLGdCQUFnQixFQUloQixtQkFBbUIsRUFTbkIsV0FBVyxFQUlYLFlBQVksRUFFWixXQUFXLEVBS1osTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQ0wsNEJBQTRCLEVBRTVCLG1CQUFtQixFQVVuQixhQUFhLEVBTWIsY0FBYyxFQUtkLGVBQWUsRUFDZixjQUFjLEVBQ2YsTUFBTSxnQkFBZ0IsQ0FBQztBQVF4QixPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUduQixNQUFNLHlDQUF5QyxDQUFDO0FBRWpELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBTTdELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUt2RCxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdC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QUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNoRDs7S0FDRjtJQUVELG1CQUFtQixDQUFDLElBQVcsRUFBRSxRQUFlLEVBQUMsVUFBaUIsRUFBQyxLQUFTO1FBQzFFLE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDLFNBQVMsQ0FBQyxFQUFDLElBQUksRUFBRSxZQUFZLEVBQUMsUUFBUSxFQUFDLGdCQUFnQixFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQTtJQUN6SCxDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQXdCO1FBQ3JDLE9BQU8sT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQ3ZCLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsV0FBQyxPQUFBLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFNBQVMsT0FBSyxNQUFBLE9BQU8sQ0FBQyxDQUFDLENBQUMsMENBQUUsU0FBUyxDQUFBLENBQUEsRUFBQSxDQUFDO1lBQ25FLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxLQUFLLFNBQVMsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7O0FBbnJJZSw2Q0FBc0IsR0FBRyxlQUFlLENBQUM7QUFDekMsOENBQXVCLEdBQUcsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBCYXNlRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4vYmFzZS1lbnRlcnByaXNlJztcbmltcG9ydCB7IEJhc2VTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlSGVscGVyUm91dGluZXMgfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgVHJhdmVsbGVyIH0gZnJvbSAnLi4vbW9kZWxzL3RyYXZlbGxlci5vYmplY3QnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmb3JrSm9pbiwgIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFZhbHVlRGlzcGxheSB9IGZyb20gJy4uL2ludGVyZmFjZXMvdmFsdWUtZGlzcGxheSc7XG5pbXBvcnQgeyBGbGlnaHRGaWx0ZXJzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mbGlnaHQtZmlsdGVycy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU2VsZWN0RmlsdGVyIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zZWxlY3QtZmlsdGVyLmludGVyZmFjZSc7XG5pbXBvcnQge1xuICBBZGRJdGVtVG9CYXNrZXRNdXRhdGlvblZhcmlhYmxlcyxcbiAgQmFnZ2FnZUFsbG93YW5jZSxcbiAgQmFza2V0SXRlbSxcbiAgQ3VycmVuY3lDb2RlLFxuICBEZXN0aW5hdGlvbkVudHJ5LFxuICBGYXJlQ29uZGl0aW9uRW50cnksXG4gIEZhcmVDb25kaXRpb25zLFxuICBGYXJlVHlwZSxcbiAgRmxpZ2h0Q2FiaW5DbGFzcyxcbiAgRmxpZ2h0SXRpbmVyYXJ5LFxuICBGbGlnaHRKb3VybmV5LFxuICBGbGlnaHRQYXNzZW5nZXJPYmplY3QsXG4gIEZsaWdodFBhc3NlbmdlclR5cGUsXG4gIEZsaWdodFNlYXRNYXBTZWF0cyxcbiAgR3JvdXBlZEZpZWxkc0ZyYWdtZW50LFxuICBHcm91cEZsaWdodHMsXG4gIElucHV0RmxpZ2h0Sm91cm5leSxcbiAgSXRpbmVyYXJ5U3VtbWFyeSxcbiAgTWF0Y2hpbmdGbGlnaHRzLFxuICBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMsXG4gIFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzLFxuICBTZXJ2aWNlVHlwZSxcbiAgRmxpZ2h0QW5jaWxsYXJ5T3B0aW9ucyxcbiAgRmxpZ2h0RXh0cmFzT3B0aW9ucyxcbiAgRmxpZ2h0T3B0aW9ucyxcbiAgTG9jYXRpb25UeXBlLFxuICBSYWlsU3RhdGlvbixcbiAgQmFnZ2FnZVR5cGUsXG4gIEZsaWdodEpvdXJuZXlFeGNoYW5nZSxcbiAgRmxpZ2h0RXhjaGFuZ2VEZXRhaWxzLFxuICBGbGlnaHRGYXJlUnVsZXNSZXNwb25zZSxcbiAgRmxpZ2h0VXBzZWxsT2ZmZXJzUmVzdWx0XG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xuaW1wb3J0IHtcbiAgRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucyxcbiAgRmxpZ2h0QWxsUXVvdGVSZXN1bHQsXG4gIEZsaWdodERpcmVjdGlvbkVudW0sXG4gIEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCxcbiAgRmxpZ2h0R3JvdXBzLFxuICBGbGlnaHRJdGluZXJhcnlDbGFzcyxcbiAgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gIEZsaWdodE11bHRpLFxuICBGbGlnaHRRdW90ZVJlc3VsdEFycmF5LFxuICBHcmVlbmVyQ2hvaWNlLFxuICBHcm91cGVkRmxpZ2h0cyxcbiAgTG9jYXRpb25EZXRhaWxzLFxuICBMb2NhdGlvblR5cGVzLFxuICBNaW5NYXgsXG4gIE5nYkRhdGVTdHJ1Y3QsXG4gIE9CVEFpcmxpbmVzRGV0YWlscyxcbiAgT0JUQWlycG9ydERldGFpbHMsXG4gIE9CVEZsaWdodENhYmluQ2xhc3MsXG4gIFByZWZlcnJlZEZsYWdzLFxuICBSZWNlbnRTZWFyY2gsXG4gIFJlY29yZFJ1bGVBY3Rpb24sXG4gIFJ1bGVBY3Rpb25TdW1tYXJ5SW50ZXJmYWNlLFxuICBTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0LFxuICBTZXJ2aWNlUHJvdmlkZXIsXG4gIFRyYXZlbFBvbGljaWVzXG59IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcbmltcG9ydCB7IEJhc2VGbGlnaHRRdW90ZUZldGNoZXIsIEZsaWdodFF1b3RlRmV0Y2hlclR5cGUgfSBmcm9tICcuLi9mZXRjaGVycy9mbGlnaHQtcXVvdGUuZmV0Y2hlcic7XG5pbXBvcnQge1xuICBVcGRhdGVGbGlnaHRTZWF0TWFwVHlwZSxcbiAgQmFzZVVwZGF0ZUZsaWdodFNlYXRNYXBVcGRhdGVyXG59IGZyb20gJy4uL3VwZGF0ZXJzL3VwZGF0ZS1mbGlnaHQtc2VhdC1tYXAudXBkYXRlcic7XG5pbXBvcnQgeyBGdWxsVXNlckRldGFpbHMsIFVzZXJTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9GTElHSFRfRklMVEVSUyxcbiAgRmxpZ2h0RGlzcGxheVR5cGVzLFxuICBGbGlnaHRFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlLFxuICBGbGlnaHRUZW1wUGFyYW1zXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWZsaWdodC1lbnRlcnByaXNlLXNlYXJjaCc7XG5pbXBvcnQgeyBJQ2hlYXBlc3RQcmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hlYXBlc3QtcHJpY2UnO1xuaW1wb3J0IHsgRmxpZ2h0U2VhcmNoVHlwZSB9IGZyb20gJy4vZmxpZ2h0LXNlYXJjaC10eXBlLmVudW0nO1xuaW1wb3J0IHsgSU11bHRpRGVzdGluYXRpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL2ZsaWdodC1tdWx0aS1kZXN0aW5hdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXG4gIEludGVybmFsQmFza2V0SW50ZXJmYWNlXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWVudGVycHJpc2UtYmFza2V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlckZhdm9ydXJpdGUgfSBmcm9tICcuL3VzZXItZmF2b3VyaXRlLmVudW0nO1xuaW1wb3J0IHtcbiAgQXBwbHlKaXRGbGlnaHRSdWxlc1R5cGUsXG4gIEJhc2VBcHBseUppdEZsaWdodFJ1bGVzRmV0Y2hlclxufSBmcm9tICcuLi9mZXRjaGVycy9hcHBseS1qaXQtZmxpZ2h0LXJ1bGVzJztcbmltcG9ydCB7IG1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEJhc2VNb2RhbE9wZW5lclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RhbC1vcGVuZXIuc2VydmljZSc7XG5pbXBvcnQgeyBNb2RhbFR5cGVzIH0gZnJvbSAnLi9tb2RhbC10eXBlcy5lbnVtJztcbmltcG9ydCB7IElGbGlnaHRTZWFyY2hBcmdzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mbGlnaHQtc2VhcmNoLWFyZ3MuaW50ZXJmYWNlJztcbmltcG9ydCB7IEdyZWVuZXJDaG9pY2VJbXBsIH0gZnJvbSAnLi9ncmVlbmVyY2hvaXNlJztcbmltcG9ydCB7IEFpclRvRXVybyB9IGZyb20gJy4uL2RhdGEvYWlyLXRvLWV1cm8nO1xuaW1wb3J0IHsgQUlSVG9SYWlsVUsgfSBmcm9tICcuLi9kYXRhL2Fpci10by1yYWlsLXVrJztcbmltcG9ydCB7IEVybVRyYXZlbGxlclR5cGUgfSBmcm9tICcuL2VybS10cmF2ZWxsZXItdHlwZS5lbnVtJztcbmltcG9ydCB7XG4gIEJhc2VHZXRGbGlnaHRFeHRyYXNPcHRpb25zRmV0Y2hlcixcbiAgR2V0RmxpZ2h0RXh0cmFzT3B0aW9uc1R5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWZsaWdodC1leHRyYXMtb3B0aW9ucy5mZXRjaGVyJztcbmltcG9ydCB7IElDaGVhcGVzdFByaWNlT2JqZWN0LCBJQ2hlYXBlc3RQcmljZURldGFpbHMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NoZWFwZXN0LXByaWNlLW9iamVjdCc7XG5pbXBvcnQgeyBGbGlnaHRKb3VybmV5VHlwZSB9IGZyb20gJy4vZmxpZ2h0LWpvdXJuZXktdHlwZS10eXBlLmVudW0nO1xuXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgRmxpZ2h0QW1vdW50IH0gZnJvbSAnLi4vdHlwZXMvZ3JhcGhxbC50eXBlcyc7XG5pbXBvcnQgeyBUcmFpbmxpbmVTZWFyY2hDb25maWdUeXBlcyB9IGZyb20gJy4vcmFpbC1lbnRlcnByaXNlLXNlYXJjaCc7XG5pbXBvcnQge1xuICBCYXNlRmxpZ2h0U2VhcmNoRXhjaGFuZ2VGZXRjaGVyLFxuICBGbGlnaHRTZWFyY2hFeGNoYW5nZUZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1mbGlnaHQtc2VhcmNoLWV4Y2hhbmdlLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUZsaWdodEV4Y2hhbmdlRGV0YWlsc0ZldGNoZXIsXG4gIEZsaWdodEV4Y2hhbmdlRGV0YWlsc0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1mbGlnaHQtZXhjaGFuZ2UtZGV0YWlscy5mZXRjaGVyJztcbmltcG9ydCB7IElGYXJlUnVsZXNLZXkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2ZhcmUtcnVsZXMta2V5JztcbmltcG9ydCB7IEJhc2tldERldGFpbHMgfSBmcm9tICcuLi9zZXJ2aWNlcy9lbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcblxuY29uc3QgT1VUQk9VTkQgPSAwO1xuZXhwb3J0IGludGVyZmFjZSBBbGxvd2VkQ2xhc3Mge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IEZsaWdodENhYmluQ2xhc3MgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZsaWdodE9wZXJhdG9yIHtcbiAgY29kZTogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGV0YWlsRXh0cmFzIHtcbiAgYWRkaXRpb25hbERldGFpbHM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBBZGRpdGlvbmFsO1xuICB9O1xuICBzZWF0czoge1xuICAgIFtrZXk6IHN0cmluZ106IEZsaWdodFNlYXRNYXBTZWF0cztcbiAgfTtcblxuICBsb3lhbHR5OiB7XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nW107XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkaXRpb25hbCB7XG4gIGFkdmFuY2VkQW5jaWxsYXJ5T3B0aW9uczogRmxpZ2h0QW5jaWxsYXJ5T3B0aW9uc1tdO1xuICBiYWdnYWdlQWxsb3dhbmNlOiBhbnk7XG4gIGZsaWdodEV4dHJhczogYW55O1xuICByZWR1Y2VkTW9iaWxsaXR5QXNzaXN0YW5jZTogYW55O1xuICBtZWFsOiBhbnk7XG59XG5leHBvcnQgaW50ZXJmYWNlIENvbWJpbmVkRmxpZ2h0IHtcbiAgZmxpZ2h0czogRmxpZ2h0SXRpbmVyYXJ5W10gfCBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9uc1tdO1xuICBmbGlnaHRJZDogc3RyaW5nO1xufVxuXG5leHBvcnQgZW51bSBBZGRpdGlvbmFsRGV0YWlscyB7XG4gIGFkdmFuY2VkQW5jaWxsYXJ5T3B0aW9ucyA9ICdhZHZhbmNlZEFuY2lsbGFyeU9wdGlvbnMnLFxuICBiYWdnYWdlQWxsb3dhbmNlID0gJ2JhZ2dhZ2VBbGxvd2FuY2UnLFxuICBmbGlnaHRFeHRyYXMgPSAnZmxpZ2h0RXh0cmFzJyxcbiAgcmVkdWNlZE1vYmlsbGl0eUFzc2lzdGFuY2UgPSAncmVkdWNlZE1vYmlsbGl0eUFzc2lzdGFuY2UnLFxuICBtZWFsID0gJ21lYWwnXG59XG5cbmV4cG9ydCB0eXBlIEFsbG93ZWRDbGFzc2VzID0gQWxsb3dlZENsYXNzW107XG5cbmV4cG9ydCBlbnVtIFRpbWVXaW5kb3cge1xuICBBbnl0aW1lID0gJ0FueXRpbWUnLFxuICBEZXBhcnQgPSAnRGVwYXJ0IEJ5JyxcbiAgQXJyaXZlID0gJ0Fycml2ZSBCeSdcbn1cblxuZXhwb3J0IGVudW0gRmxpZ2h0U29ydFR5cGVzIHtcbiAgQ2hlYXBlc3QgPSAnQ2hlYXBlc3QnLFxuICBNb3N0RXhwZW5zaXZlID0gJ01vc3QgRXhwZW5zaXZlJyxcbiAgRmFzdGVzdCA9ICdGYXN0ZXN0JyxcbiAgUHJlZmVycmVkID0gJ1ByZWZlcnJlZCcsXG4gIExvd2VzdEVtaXNzaW9ucyA9ICdMb3dlc3QgRW1pc3Npb25zJyxcbiAgRGVwYXJ0dXJlVGltZSA9ICdEZXBhcnR1cmUgVGltZScsXG4gIEFycml2YWxUaW1lID0gJ0Fycml2YWwgVGltZScsXG4gIFF1aWNrZXN0ID0gJ1F1aWNrZXN0JyxcbiAgTW9zdERpcmVjdCA9ICdNb3N0IERpcmVjdCcsXG4gIEdyZWVuZXJDaG9pY2UgPSAnR3JlZW5lciBDaG9pY2UnLFxuICBTQUYgPSAnSGlnaGVzdCBTQUYgUmF0aW5nJ1xufVxuXG5leHBvcnQgY29uc3QgU0FGUmF0aW5nQXJyYXkgPSBbXG4gIHtcbiAgICByYXRpbmc6ICdBQUEnLFxuICAgIHNjb3JlOiAwXG4gIH0sXG4gIHtcbiAgICByYXRpbmc6ICdBQScsXG4gICAgc2NvcmU6IDFcbiAgfSxcbiAge1xuICAgIHJhdGluZzogJ0EnLFxuICAgIHNjb3JlOiAyXG4gIH0sXG4gIHtcbiAgICByYXRpbmc6ICdCJyxcbiAgICBzY29yZTogM1xuICB9LFxuICB7XG4gICAgcmF0aW5nOiAnQycsXG4gICAgc2NvcmU6IDRcbiAgfSxcbiAge1xuICAgIHJhdGluZzogJ0QnLFxuICAgIHNjb3JlOiA1XG4gIH0sXG4gIHtcbiAgICByYXRpbmc6ICdFJyxcbiAgICBzY29yZTogNlxuICB9LFxuICB7XG4gICAgcmF0aW5nOiAnTi9BJyxcbiAgICBzY29yZTogN1xuICB9XG5dO1xuXG5pbnRlcmZhY2UgRmxpZ2h0U2Vzc2lvblR5cGUge1xuICByZXN1bHRzOiBGbGlnaHRRdW90ZVJlc3VsdEFycmF5O1xuICBncm91cGVkOiBHcm91cGVkRmxpZ2h0cztcbiAgcXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzO1xufVxuXG5pbnRlcmZhY2UgSGlkZUZsaWdodENhYmluQ2xhc3NJbnRlcmZhY2Uge1xuICBhbnk6IGJvb2xlYW47XG4gIGJ1c2luZXNzOiBib29sZWFuO1xuICBlY29ub215OiBib29sZWFuO1xuICBwcmVtaXVtRWNvbm9teTogYm9vbGVhbjtcbiAgZmlyc3Q6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBGbGlnaHRFbnRlcnByaXNlU2VhcmNoPFxuICAgIEZRX1EgZXh0ZW5kcyBGbGlnaHRRdW90ZUZldGNoZXJUeXBlLFxuICAgIEFKRl9RIGV4dGVuZHMgQXBwbHlKaXRGbGlnaHRSdWxlc1R5cGUsXG4gICAgR0ZFT19GIGV4dGVuZHMgR2V0RmxpZ2h0RXh0cmFzT3B0aW9uc1R5cGUsXG4gICAgRlNFX0YgZXh0ZW5kcyBGbGlnaHRTZWFyY2hFeGNoYW5nZUZldGNoZXJUeXBlLFxuICAgIEZFRF9GIGV4dGVuZHMgRmxpZ2h0RXhjaGFuZ2VEZXRhaWxzRmV0Y2hlclR5cGUsXG4gICAgVUZTX1UgZXh0ZW5kcyBVcGRhdGVGbGlnaHRTZWF0TWFwVHlwZVxuICA+XG4gIGV4dGVuZHMgQmFzZUVudGVycHJpc2VTZWFyY2g8RmxpZ2h0VGVtcFBhcmFtcywgRmxpZ2h0QWxsUXVvdGVSZXN1bHQsIEZsaWdodFF1b3RlUmVzdWx0QXJyYXk+XG4gIGltcGxlbWVudHMgRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZVxue1xuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyA9ICdzZWFyY2hfZmxpZ2h0JztcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTID0gJ3Jlc3VsdHNfZmxpZ2h0JztcblxuICBwdWJsaWMgdHlwZTogU2VydmljZVR5cGUgPSBTZXJ2aWNlVHlwZS5GbGlnaHQ7XG5cbiAgYXZhbGlhYmxlQ2xhc3NlczogQmVoYXZpb3JTdWJqZWN0PEFsbG93ZWRDbGFzc2VzPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QWxsb3dlZENsYXNzZXM+KFtdKTtcbiAgdGltZUNyaXRlcmlhT3B0aW9uczogQmVoYXZpb3JTdWJqZWN0PFRpbWVXaW5kb3dbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRpbWVXaW5kb3dbXT4oW10pO1xuICBmbGlnaHRPcGVyYXRvcnM6IEJlaGF2aW9yU3ViamVjdDxGbGlnaHRPcGVyYXRvcltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RmxpZ2h0T3BlcmF0b3JbXT4oW10pO1xuICBzZWxlY3RlZEZsaWdodDogQmVoYXZpb3JTdWJqZWN0PEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zPiA9XG4gICAgbmV3IEJlaGF2aW9yU3ViamVjdDxGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucz4obnVsbCk7XG4gIHNlbGVjdGVkVUlkOiBzdHJpbmcgPSAnJztcbiAgZGlyZWN0RGVmYXVsdFZhbHVlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfc2hvd0NhYmluQ2xhc3NTZWxlY3Rpb246IGJvb2xlYW4gPSB0cnVlO1xuICBwcml2YXRlIF9zaG93UHJlZmVycmVkQWlybGluZXM6IGJvb2xlYW4gPSB0cnVlO1xuICBwcml2YXRlIF9uZWdvdGlhdGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3RpbWVBcnJheTogVmFsdWVEaXNwbGF5PHN0cmluZz5bXTtcbiAgcHJpdmF0ZSBfc29ydEFycmF5OiBWYWx1ZURpc3BsYXk8RmxpZ2h0U29ydFR5cGVzPltdID0gW1xuICAgIHsgZGlzcGxheTogJ0NoZWFwZXN0IEZpcnN0JywgdmFsdWU6IEZsaWdodFNvcnRUeXBlcy5DaGVhcGVzdCB9LFxuICAgIHtcbiAgICAgIGRpc3BsYXk6ICdNb3N0IEV4cGVuc2l2ZSBGaXJzdCcsXG4gICAgICB2YWx1ZTogRmxpZ2h0U29ydFR5cGVzLk1vc3RFeHBlbnNpdmVcbiAgICB9LFxuICAgIHsgZGlzcGxheTogJ0Zhc3Rlc3QgRmlyc3QnLCB2YWx1ZTogRmxpZ2h0U29ydFR5cGVzLkZhc3Rlc3QgfSxcbiAgICB7IGRpc3BsYXk6ICdQcmVmZXJyZWQgRmFyZXMgRmlyc3QnLCB2YWx1ZTogRmxpZ2h0U29ydFR5cGVzLlByZWZlcnJlZCB9LFxuICAgIHtcbiAgICAgIGRpc3BsYXk6ICdMb3dlc3QgQ28yIEVtaXNzaW9ucyBGaXJzdCcsXG4gICAgICB2YWx1ZTogRmxpZ2h0U29ydFR5cGVzLkxvd2VzdEVtaXNzaW9uc1xuICAgIH1cbiAgXTtcblxuICBwcml2YXRlIF9zb3J0SXRpbmFyeVJvdXRpbmVzOiBSZWNvcmQ8XG4gICAgRmxpZ2h0U29ydFR5cGVzLFxuICAgIChhOiBGbGlnaHRJdGluZXJhcnksIGI6IEZsaWdodEl0aW5lcmFyeSkgPT4gbnVtYmVyXG4gID4gPSB7XG4gICAgW0ZsaWdodFNvcnRUeXBlcy5DaGVhcGVzdF06IChhOiBGbGlnaHRJdGluZXJhcnksIGI6IEZsaWdodEl0aW5lcmFyeSkgPT4ge1xuICAgICAgcmV0dXJuIGEudG90YWwucHJpY2UgLSBiLnRvdGFsLnByaWNlO1xuICAgIH0sXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5Nb3N0RXhwZW5zaXZlXTogKGE6IEZsaWdodEl0aW5lcmFyeSwgYjogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XG4gICAgICByZXR1cm4gYi50b3RhbC5wcmljZSAtIGEudG90YWwucHJpY2U7XG4gICAgfSxcbiAgICBbRmxpZ2h0U29ydFR5cGVzLkZhc3Rlc3RdOiAoYTogRmxpZ2h0SXRpbmVyYXJ5LCBiOiBGbGlnaHRJdGluZXJhcnkpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGEub3V0Ym91bmRUb3RhbER1cmF0aW9uICtcbiAgICAgICAgKGEuaW5ib3VuZFRvdGFsRHVyYXRpb24gPyBhLmluYm91bmRUb3RhbER1cmF0aW9uIDogMCkgLVxuICAgICAgICAoYi5vdXRib3VuZFRvdGFsRHVyYXRpb24gKyAoYi5pbmJvdW5kVG90YWxEdXJhdGlvbiA/IGIuaW5ib3VuZFRvdGFsRHVyYXRpb24gOiAwKSlcbiAgICAgICk7XG4gICAgfSxcbiAgICBbRmxpZ2h0U29ydFR5cGVzLlByZWZlcnJlZF06IChcbiAgICAgIGE6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxuICAgICAgYjogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcbiAgICApID0+IHtcbiAgICAgIGlmIChhLnByZWZlcmVuY2VMZXZlbCAmJiBiLnByZWZlcmVuY2VMZXZlbCkge1xuICAgICAgICAvLyBTb3J0IGJ5IHByZWZlcmVuY2VMZXZlbCBpZiBib3RoIGl0ZW1zIGhhdmUgbm9uLW51bGwgcHJlZmVyZW5jZUxldmVsXG4gICAgICAgIGlmIChhLnByZWZlcmVuY2VMZXZlbCA+IGIucHJlZmVyZW5jZUxldmVsKSByZXR1cm4gLTE7XG4gICAgICAgIGlmIChhLnByZWZlcmVuY2VMZXZlbCA8IGIucHJlZmVyZW5jZUxldmVsKSByZXR1cm4gMTtcbiAgICAgIH0gZWxzZSBpZiAoYS5wcmVmZXJlbmNlTGV2ZWwgJiYgIWIucHJlZmVyZW5jZUxldmVsKSB7XG4gICAgICAgIC8vIFB1dCBpdGVtcyB3aXRoIG5vbi1udWxsIHByZWZlcmVuY2VMZXZlbCBiZWZvcmUgaXRlbXMgd2l0aCBudWxsIHByZWZlcmVuY2VMZXZlbFxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9IGVsc2UgaWYgKCFhLnByZWZlcmVuY2VMZXZlbCAmJiBiLnByZWZlcmVuY2VMZXZlbCkge1xuICAgICAgICAvLyBQdXQgaXRlbXMgd2l0aCBudWxsIHByZWZlcmVuY2VMZXZlbCBhZnRlciBpdGVtcyB3aXRoIG5vbi1udWxsIHByZWZlcmVuY2VMZXZlbFxuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cblxuICAgICAgLy8gU29ydCBieSBwcmVmZXJyZWRcbiAgICAgIGlmIChhLnByZWZlcnJlZCAmJiAhYi5wcmVmZXJyZWQpIHJldHVybiAtMTtcbiAgICAgIGlmICghYS5wcmVmZXJyZWQgJiYgYi5wcmVmZXJyZWQpIHJldHVybiAxO1xuXG4gICAgICByZXR1cm4gMDtcbiAgICB9LFxuICAgIFtGbGlnaHRTb3J0VHlwZXMuTG93ZXN0RW1pc3Npb25zXTogKFxuICAgICAgYTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgICBiOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9uc1xuICAgICkgPT4ge1xuICAgICAgcmV0dXJuIGEuY28yUGVySXRlbSAtIGIuY28yUGVySXRlbTtcbiAgICB9LFxuICAgIFtGbGlnaHRTb3J0VHlwZXMuRGVwYXJ0dXJlVGltZV06IChcbiAgICAgIGE6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxuICAgICAgYjogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IGFUaW1lID0gbW9tZW50KGEub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKTtcbiAgICAgIGNvbnN0IGJUaW1lID0gbW9tZW50KGIub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKTtcbiAgICAgIGlmIChhVGltZS5pc0JlZm9yZShiVGltZSkpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFUaW1lLmlzU2FtZShiVGltZSkgPyAwIDogMTtcbiAgICB9LFxuICAgIFtGbGlnaHRTb3J0VHlwZXMuQXJyaXZhbFRpbWVdOiAoXG4gICAgICBhOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcbiAgICAgIGI6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCBhVGltZSA9IG1vbWVudChhLm91dGJvdW5kRmxpZ2h0c1thLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXS5kYXRlVGltZUFycml2aW5nKTtcbiAgICAgIGNvbnN0IGJUaW1lID0gbW9tZW50KGIub3V0Ym91bmRGbGlnaHRzW2Iub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFdLmRhdGVUaW1lQXJyaXZpbmcpO1xuICAgICAgaWYgKGFUaW1lLmlzQmVmb3JlKGJUaW1lKSkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICByZXR1cm4gYVRpbWUuaXNTYW1lKGJUaW1lKSA/IDAgOiAxO1xuICAgIH0sXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5RdWlja2VzdF06IChcbiAgICAgIGE6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxuICAgICAgYjogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcbiAgICApID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGEub3V0Ym91bmRUb3RhbER1cmF0aW9uICtcbiAgICAgICAgKGEuaW5ib3VuZFRvdGFsRHVyYXRpb24gPyBhLmluYm91bmRUb3RhbER1cmF0aW9uIDogMCkgLVxuICAgICAgICAoYi5vdXRib3VuZFRvdGFsRHVyYXRpb24gKyAoYi5pbmJvdW5kVG90YWxEdXJhdGlvbiA/IGIuaW5ib3VuZFRvdGFsRHVyYXRpb24gOiAwKSlcbiAgICAgICk7XG4gICAgfSxcbiAgICBbRmxpZ2h0U29ydFR5cGVzLk1vc3REaXJlY3RdOiAoXG4gICAgICBhOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcbiAgICAgIGI6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zXG4gICAgKSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBhLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggK1xuICAgICAgICAoYS5vdXRib3VuZEZsaWdodHMgPyBhLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggOiAwKSAtXG4gICAgICAgIChiLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggKyAoYi5vdXRib3VuZEZsaWdodHMgPyBiLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggOiAwKSlcbiAgICAgICk7XG4gICAgfSxcbiAgICBbRmxpZ2h0U29ydFR5cGVzLkdyZWVuZXJDaG9pY2VdOiAoXG4gICAgICBhOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcbiAgICAgIGI6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zXG4gICAgKSA9PiB7XG4gICAgICBpZiAoYS5ncmVlbmVyQ2hvaWNlICE9PSBiLmdyZWVuZXJDaG9pY2UpIHtcbiAgICAgICAgcmV0dXJuIGEuZ3JlZW5lckNob2ljZSA/IC0xIDogMTtcbiAgICAgIH1cbiAgICAgIGlmIChhLmdyZWVuZXJDaG9pY2UpIHtcbiAgICAgICAgcmV0dXJuIGEuZ3JlZW5lckNob2ljZVBlcmNlbnRhZ2UgLSBiLmdyZWVuZXJDaG9pY2VQZXJjZW50YWdlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIDA7XG4gICAgfSxcbiAgICBbRmxpZ2h0U29ydFR5cGVzLlNBRl06IChhOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucywgYjogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIFNBRlJhdGluZ0FycmF5LmZpbmQocyA9PiBzLnJhdGluZyA9PT0gYS5zYWZSYXRpbmcpPy5zY29yZSAtXG4gICAgICAgIFNBRlJhdGluZ0FycmF5LmZpbmQocyA9PiBzLnJhdGluZyA9PT0gYi5zYWZSYXRpbmcpPy5zY29yZVxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gcHJpdmF0ZSBfc29ydEdyb3VwZWRSb3V0aW5lczogUmVjb3JkPFxuICAvLyAgIEZsaWdodFNvcnRUeXBlcyxcbiAgLy8gICAoYTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0LCBiOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQpID0+IG51bWJlclxuICAvLyA+ID0ge1xuICAvLyAgIFtGbGlnaHRTb3J0VHlwZXMuQ2hlYXBlc3RdOiAoYTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0LCBiOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQpID0+IHtcbiAgLy8gICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcbiAgLy8gICAgICAgcmV0dXJuIGEuZGlyZWN0aW9uIC0gYi5kaXJlY3Rpb247XG4gIC8vICAgICB9XG4gIC8vICAgICByZXR1cm4gYS5taW5QcmljZSAtIGIubWluUHJpY2U7XG4gIC8vICAgfSxcbiAgLy8gICBbRmxpZ2h0U29ydFR5cGVzLk1vc3RFeHBlbnNpdmVdOiAoYTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0LCBiOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQpID0+IHtcbiAgLy8gICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcbiAgLy8gICAgICAgcmV0dXJuIGEuZGlyZWN0aW9uIC0gYi5kaXJlY3Rpb247XG4gIC8vICAgICB9XG4gIC8vICAgICByZXR1cm4gYi5taW5QcmljZSAtIGEubWF4UHJpY2U7XG4gIC8vICAgfSxcbiAgLy8gICBbRmxpZ2h0U29ydFR5cGVzLkZhc3Rlc3RdOiAoYTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0LCBiOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQpID0+IHtcbiAgLy8gICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcbiAgLy8gICAgICAgcmV0dXJuIGEuZGlyZWN0aW9uIC0gYi5kaXJlY3Rpb247XG4gIC8vICAgICB9XG4gIC8vICAgICByZXR1cm4gYS5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmRcbiAgLy8gICAgICAgPyBhLm91dGJvdW5kVG90YWxEdXJhdGlvbiAtIGIub3V0Ym91bmRUb3RhbER1cmF0aW9uXG4gIC8vICAgICAgIDogYS5pbmJvdW5kVG90YWxEdXJhdGlvbiAtIGIuaW5ib3VuZFRvdGFsRHVyYXRpb247XG4gIC8vICAgfSxcbiAgLy8gICBbRmxpZ2h0U29ydFR5cGVzLlByZWZlcnJlZF06IChhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCkgPT4ge1xuICAvLyAgICAgaWYgKGEuZGlyZWN0aW9uICE9PSBiLmRpcmVjdGlvbikge1xuICAvLyAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcbiAgLy8gICAgIH1cbiAgLy8gICAgIHJldHVybiAoYi5wcmVmZXJyZWQgPyAxIDogMCkgLSAoYS5wcmVmZXJyZWQgPyAxIDogMCk7XG4gIC8vICAgfSxcbiAgLy8gICBbRmxpZ2h0U29ydFR5cGVzLkdyZWVuZXJDaG9pY2VdOiAoKSA9PiB7XG4gIC8vICAgICByZXR1cm4gMDtcbiAgLy8gICB9LFxuICAvLyAgIFtGbGlnaHRTb3J0VHlwZXMuTG93ZXN0RW1pc3Npb25zXTogKFxuICAvLyAgICAgYTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0LFxuICAvLyAgICAgYjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0XG4gIC8vICAgKSA9PiB7XG4gIC8vICAgICBpZiAoYS5kaXJlY3Rpb24gIT09IGIuZGlyZWN0aW9uKSB7XG4gIC8vICAgICAgIHJldHVybiBhLmRpcmVjdGlvbiAtIGIuZGlyZWN0aW9uO1xuICAvLyAgICAgfVxuICAvLyAgICAgcmV0dXJuIGEuY28yUGVySXRlbSAtIGIuY28yUGVySXRlbTtcbiAgLy8gICB9LFxuICAvLyAgIFtGbGlnaHRTb3J0VHlwZXMuRGVwYXJ0dXJlVGltZV06IChhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCkgPT4ge1xuICAvLyAgICAgaWYgKGEuZGlyZWN0aW9uICE9PSBiLmRpcmVjdGlvbikge1xuICAvLyAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcbiAgLy8gICAgIH1cbiAgLy8gICAgIGNvbnN0IGFUaW1lID0gbW9tZW50KGEuZGVwYXJ0RGF0ZVRpbWUpO1xuICAvLyAgICAgY29uc3QgYlRpbWUgPSBtb21lbnQoYi5kZXBhcnREYXRlVGltZSk7XG4gIC8vICAgICBpZiAoYVRpbWUuaXNCZWZvcmUoYlRpbWUpKSB7XG4gIC8vICAgICAgIHJldHVybiAtMTtcbiAgLy8gICAgIH1cbiAgLy8gICAgIHJldHVybiBhVGltZS5pc1NhbWUoYlRpbWUpID8gMCA6IDE7XG4gIC8vICAgfSxcbiAgLy8gICBbRmxpZ2h0U29ydFR5cGVzLkFycml2YWxUaW1lXTogKGE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCwgYjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0KSA9PiB7XG4gIC8vICAgICBpZiAoYS5kaXJlY3Rpb24gIT09IGIuZGlyZWN0aW9uKSB7XG4gIC8vICAgICAgIHJldHVybiBhLmRpcmVjdGlvbiAtIGIuZGlyZWN0aW9uO1xuICAvLyAgICAgfVxuICAvLyAgICAgY29uc3QgYVRpbWUgPSBtb21lbnQoYS5hcnJpdmFsRGF0ZVRpbWUpO1xuICAvLyAgICAgY29uc3QgYlRpbWUgPSBtb21lbnQoYi5hcnJpdmFsRGF0ZVRpbWUpO1xuICAvLyAgICAgaWYgKGFUaW1lLmlzQmVmb3JlKGJUaW1lKSkge1xuICAvLyAgICAgICByZXR1cm4gLTE7XG4gIC8vICAgICB9XG4gIC8vICAgICByZXR1cm4gYVRpbWUuaXNTYW1lKGJUaW1lKSA/IDAgOiAxO1xuICAvLyAgIH0sXG4gIC8vICAgW0ZsaWdodFNvcnRUeXBlcy5RdWlja2VzdF06IChhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCkgPT4ge1xuICAvLyAgICAgaWYgKGEuZGlyZWN0aW9uICE9PSBiLmRpcmVjdGlvbikge1xuICAvLyAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcbiAgLy8gICAgIH1cbiAgLy8gICAgIHJldHVybiBhLmRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5PdXRib3VuZFxuICAvLyAgICAgICA/IGEub3V0Ym91bmRUb3RhbER1cmF0aW9uIC0gYi5vdXRib3VuZFRvdGFsRHVyYXRpb25cbiAgLy8gICAgICAgOiAoYS5pbmJvdW5kVG90YWxEdXJhdGlvbiA/IGEuaW5ib3VuZFRvdGFsRHVyYXRpb24gOiAwKSAtXG4gIC8vICAgICAgICAgICAoYi5pbmJvdW5kVG90YWxEdXJhdGlvbiA/IGIuaW5ib3VuZFRvdGFsRHVyYXRpb24gOiAwKTtcbiAgLy8gICB9LFxuICAvLyAgIFtGbGlnaHRTb3J0VHlwZXMuTW9zdERpcmVjdF06IChhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCkgPT4ge1xuICAvLyAgICAgaWYgKGEuZGlyZWN0aW9uICE9PSBiLmRpcmVjdGlvbikge1xuICAvLyAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcbiAgLy8gICAgIH1cbiAgLy8gICAgIHJldHVybiBhLmRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5PdXRib3VuZFxuICAvLyAgICAgICA/IGEub3V0bGVncy5sZW5ndGggLSBiLm91dGxlZ3MubGVuZ3RoXG4gIC8vICAgICAgIDogKGEuaW5sZWdzIHx8IFtdKS5sZW5ndGggLSAoYi5pbmxlZ3MgfHwgW10pLmxlbmd0aDtcbiAgLy8gICB9XG4gIC8vIH07XG4gIHByaXZhdGUgX2ZhcmVUeXBlQXJyYXk6IFZhbHVlRGlzcGxheTxGYXJlVHlwZT5bXSA9IFtcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5GbGV4aWJsZSwgZGlzcGxheTogJ0ZsZXhpYmxlJyB9LFxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLkxlaXN1cmUsIGRpc3BsYXk6ICdMZWlzdXJlJyB9LFxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLkxvd2VzdCwgZGlzcGxheTogJ0xvd2VzdCcgfSxcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5OZWdvdGlhdGVkLCBkaXNwbGF5OiAnTmVnb3RpYXRlZCcgfSxcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5Ob25OZWdvdGlhdGVkLCBkaXNwbGF5OiAnTm9uLU5lZ290aWF0ZWQnIH0sXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuUmVxdWVzdEZhcmVSdWxlcywgZGlzcGxheTogJ1JlcXVlc3QgRmFyZSBSdWxlcycgfSxcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5TZWxlY3RBbmRQcm8sIGRpc3BsYXk6ICdTZWxlY3QgJiBQcm8nIH1cbiAgXTtcblxuICBwdWJsaWMgbWluaW11bU91dEJvdW5kRGF0ZSA9IHtcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKCksXG4gICAgbW9udGg6IG1vbWVudCgpLm1vbnRoKCkgKyAxLFxuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpXG4gIH07XG5cbiAgcHVibGljIG1pbmltdW1JbkJvdW5kRGF0ZSA9IHtcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKCksXG4gICAgbW9udGg6IG1vbWVudCgpLm1vbnRoKCkgKyAxLFxuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpXG4gIH07XG4gIHByaXZhdGUgX291dERhdGU6IE5nYkRhdGVTdHJ1Y3Q7XG4gIHByaXZhdGUgX291dFRpbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfaW5EYXRlOiBOZ2JEYXRlU3RydWN0O1xuICBwcml2YXRlIF9pblRpbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfZGVzdGluYXRpb25BaXJwb3J0OiBhbnk7XG4gIHByaXZhdGUgX2Rlc3RpbmF0aW9uQWlycG9ydEZ1bGw6IHN0cmluZztcbiAgcHJpdmF0ZSBfb3JpZ2luQWlycG9ydDogYW55O1xuICBwcml2YXRlIF9vcmlnaW5BaXJwb3J0RnVsbDogc3RyaW5nO1xuICBwcml2YXRlIF9vcmlnaW5Mb2NhdGlvblR5cGU6IExvY2F0aW9uVHlwZTtcbiAgcHJpdmF0ZSBfZGVzdGluYXRpb25Mb2NhdGlvblR5cGU6IExvY2F0aW9uVHlwZTtcbiAgcHJpdmF0ZSBfdmlhQWlycG9ydDogYW55O1xuICBwcml2YXRlIF92aWFBaXJwb3J0RnVsbDogc3RyaW5nO1xuICBwcml2YXRlIF9wYXNzZW5nZXJzOiBhbnk7XG4gIC8vIHByaXZhdGUgZ3JvdXBlZE9iamVjdDogRmxpZ2h0SXRpbmVyYXJ5V2l0aFNlbGVjdGVkW107XG4gIHByb3RlY3RlZCByZXN1bHRRdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXM7XG4gIHByb3RlY3RlZCBfZ3JvdXBlZDogR3JvdXBlZEZsaWdodHMgPSBudWxsO1xuICB0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSA9IG51bGw7XG4gIHByb3RlY3RlZCByZXN1bHRzU2Vzc2lvbk5hbWUgPSBGbGlnaHRFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xuICBwcm90ZWN0ZWQgbXVsdGlSZXN1bHRzU2Vzc2lvbk5hbWUgPSBGbGlnaHRFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xuICBzZWxlY3RlZEdyb3VwRmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucztcbiAgcHVibGljIG91dGJvdW5kQ2FiaW5DbGFzczogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX3Nob3dIb3RlbEZvcm06IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZmV0Y2hpbmdSdWxlczogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9ob3RlbFNlYXJjaFJlcXVlc3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBmaWx0ZXJzOiBCZWhhdmlvclN1YmplY3Q8RmxpZ2h0RmlsdGVycz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KERFRkFVTFRfRkxJR0hUX0ZJTFRFUlMpO1xuICBkdXJhbFNpbmdsZUZpbHRlcjogQmVoYXZpb3JTdWJqZWN0PEZsaWdodEZpbHRlcnM+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChERUZBVUxUX0ZMSUdIVF9GSUxURVJTKTtcbiAgc2NoZWR1bGVkRmlsdGVyczogQmVoYXZpb3JTdWJqZWN0PEZsaWdodEZpbHRlcnNbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcbiAgcHVibGljIG91dGJvdW5kU2FtZVNlYXJjaFRyYWlubGluZVN0YXRpb25zOiBSYWlsU3RhdGlvbltdO1xuICBwdWJsaWMgaW5ib3VuZFNhbWVTZWFyY2hUcmFpbmxpbmVTdGF0aW9uczogUmFpbFN0YXRpb25bXTtcblxuICBjaG9vc2VuRGlzcGxheVR5cGU6IEJlaGF2aW9yU3ViamVjdDxGbGlnaHREaXNwbGF5VHlwZXM+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChcbiAgICBGbGlnaHREaXNwbGF5VHlwZXMucmV0dXJuc1xuICApO1xuICBjdXJyZW50U29ydDogRmxpZ2h0U29ydFR5cGVzO1xuICBjdXJyZW50RmlsdGVyczogRmxpZ2h0RmlsdGVycztcbiAgY3VzdG9tU2NoZWR1bGVkRmlsdGVyczogRmxpZ2h0RmlsdGVyc1tdID0gW107XG4gIHNlbGVjdGVkR3JvdXBJZDogbnVtYmVyO1xuICBldXJvc3RhckZyb21GbGlnaHRTZWFyY2hQZXJmb3JtZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmFpbEZyb21GbGlnaHRTZWFyY2hQZXJmb3JtZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZmFzdHRyYWNrRnJvbUZsaWdodFNlYXJjaFBlcmZvcm1lZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwYXJraW5nRnJvbUZsaWdodFNlYXJjaFBlcmZvcm1lZDogYm9vbGVhbiA9IGZhbHNlO1xuICBob3RlbEZyb21GbGlnaHRTZWFyY2hQZXJmb3JtZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfcnVsZUFjdGlvblN1bW1hcnk6IFJ1bGVBY3Rpb25TdW1tYXJ5SW50ZXJmYWNlO1xuICBtdWx0aTogRmxpZ2h0TXVsdGlbXTtcbiAgc2VhcmNoQnlTY2hlZHVsZTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNbXVtdID0gW107XG4gIHNlbGVjdGVkU2VnbWVudDogbnVtYmVyID0gMDtcbiAgc3NvU2VhcmNoZWQgPSBmYWxzZTtcbiAgX2NoZWFwZXN0UHJpY2VPYmplY3Q6IElDaGVhcGVzdFByaWNlT2JqZWN0ID0ge1xuICAgIGR1YWxPdXRib3VuZDoge1xuICAgICAgYW1vdW50OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcbiAgICAgIGN1cnJlbmN5Q29kZTogJ0dCUCcsXG4gICAgICBmbGlnaHQ6IG51bGxcbiAgICB9LFxuICAgIGR1YWxJbmJvdW5kOiB7XG4gICAgICBhbW91bnQ6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLFxuICAgICAgY3VycmVuY3lDb2RlOiAnR0JQJyxcbiAgICAgIGZsaWdodDogbnVsbFxuICAgIH0sXG4gICAgcmV0dXJuczoge1xuICAgICAgYW1vdW50OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcbiAgICAgIGN1cnJlbmN5Q29kZTogJ0dCUCcsXG4gICAgICBmbGlnaHQ6IG51bGxcbiAgICB9XG4gIH07XG4gIGdyZWVuZXJDaG9pY2U6IEdyZWVuZXJDaG9pY2VJbXBsO1xuICBpc0xvYWRpbmdTU086IGJvb2xlYW47XG5cbiAgcHVibGljIGdldCBzaG93Q2FiaW5DbGFzc1NlbGVjdGlvbigpOiBib29sZWFuIHtcbiAgICAvLyBubyBzZXR0ZXIgLSBzZXQgYnkgVWkgQ29uZmlnXG4gICAgcmV0dXJuIHRoaXMuX3Nob3dDYWJpbkNsYXNzU2VsZWN0aW9uO1xuICB9XG5cbiAgcHVibGljIGdldCBzaG93UHJlZmVycmVkQWlybGluZXMoKTogYm9vbGVhbiB7XG4gICAgLy8gbm8gc2V0dGVyIC0gc2V0IGJ5IFVpIENvbmZpZ1xuICAgIHJldHVybiB0aGlzLl9zaG93UHJlZmVycmVkQWlybGluZXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZldGNoaW5nUnVsZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZldGNoaW5nUnVsZXM7XG4gIH1cblxuICBwdWJsaWMgc2V0IGZldGNoaW5nUnVsZXMobmV3VmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZmV0Y2hpbmdSdWxlcyA9IG5ld1ZhbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2hlYXBlc3RQcmljZU9iamVjdCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY2hlYXBlc3RQcmljZU9iamVjdDtcbiAgfVxuICBwdWJsaWMgZ2V0IHRpbWVBcnJheSgpIHtcbiAgICB0aGlzLl90aW1lQXJyYXkgPVxuICAgICAgdGhpcy5fdGltZUFycmF5IHx8XG4gICAgICBBcnJheSg5NilcbiAgICAgICAgLmZpbGwoMClcbiAgICAgICAgLm1hcCgoXywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcihpbmRleCAvIDQpXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAucGFkU3RhcnQoMiwgJzAnKSArXG4gICAgICAgICAgICAgICc6JyArXG4gICAgICAgICAgICAgICgoaW5kZXggJSA0KSAqIDE1KS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyksXG4gICAgICAgICAgICBkaXNwbGF5OlxuICAgICAgICAgICAgICBNYXRoLmZsb29yKGluZGV4IC8gNClcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcbiAgICAgICAgICAgICAgJzonICtcbiAgICAgICAgICAgICAgKChpbmRleCAlIDQpICogMTUpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIHJldHVybiB0aGlzLl90aW1lQXJyYXk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHByZWZlcnJlZENhcnJpZXJzKCk6IE9CVEFpcmxpbmVzRGV0YWlsc1tdIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzO1xuICB9XG5cbiAgcHVibGljIHNldCBwcmVmZXJyZWRDYXJyaWVycyh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzW10pIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnMgPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG9wZXJhdG9yMSgpOiBPQlRBaXJsaW5lc0RldGFpbHMge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMF07XG4gIH1cblxuICBwdWJsaWMgc2V0IG9wZXJhdG9yMSh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzBdID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG4gIHB1YmxpYyBnZXQgb3BlcmF0b3IyKCk6IE9CVEFpcmxpbmVzRGV0YWlscyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1sxXTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgb3BlcmF0b3IyKHZhbHVlOiBPQlRBaXJsaW5lc0RldGFpbHMpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMV0gPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cbiAgcHVibGljIGdldCBvcGVyYXRvcjMoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzJdO1xuICB9XG5cbiAgcHVibGljIHNldCBvcGVyYXRvcjModmFsdWU6IE9CVEFpcmxpbmVzRGV0YWlscykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1syXSA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IG9wZXJhdG9yNCgpOiBPQlRBaXJsaW5lc0RldGFpbHMge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbM107XG4gIH1cblxuICBwdWJsaWMgc2V0IG9wZXJhdG9yNCh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzNdID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbWluRGF0ZTogTmdiRGF0ZVN0cnVjdDtcbiAgcHVibGljIGdldCBtaW5EYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xuICAgIHRoaXMuX21pbkRhdGUgPSB0aGlzLl9taW5EYXRlIHx8IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZShtb21lbnQoKSk7XG4gICAgcmV0dXJuIHRoaXMuX21pbkRhdGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFkdWx0cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzO1xuICB9XG5cbiAgcHVibGljIHNldCBhZHVsdHModmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMudGVtcFBhcmFtcy5hZHVsdHMgPSBOdW1iZXIodmFsdWUpO1xuICAgIHRoaXMudXBkYXRlVHJhdmVsbGVycygpO1xuICB9XG5cbiAgcHVibGljIGdldCBjaGlsZHJlbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW47XG4gIH1cblxuICBwdWJsaWMgc2V0IGNoaWxkcmVuKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPSBOdW1iZXIodmFsdWUpO1xuICAgIHRoaXMudXBkYXRlVHJhdmVsbGVycygpO1xuICB9XG5cbiAgcHVibGljIGdldCBkZXBhcnRMb2NhdGlvbigpOiBzdHJpbmcgfCBPQlRBaXJwb3J0RGV0YWlscyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5kZXBhcnRMb2NhdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgZGVwYXJ0TG9jYXRpb24odmFsdWU6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmRlcGFydExvY2F0aW9uID0gdmFsdWU7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuX29yaWdpbkFpcnBvcnQgPSAnJztcbiAgICB9IGVsc2UgaWYgKHZhbHVlICYmIHZhbHVlLmdhdGV3YXkpIHtcbiAgICAgIHRoaXMuX29yaWdpbkFpcnBvcnQgPSB2YWx1ZS5nYXRld2F5O1xuICAgICAgdGhpcy5fb3JpZ2luQWlycG9ydEZ1bGwgPSB2YWx1ZS5kZXN0aW5hdGlvbjtcbiAgICAgIHRoaXMuX29yaWdpbkxvY2F0aW9uVHlwZSA9IHZhbHVlLmxvY2F0aW9uVHlwZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fb3JpZ2luQWlycG9ydCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdmlhKCk6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnZpYTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgdmlhKHZhbHVlOiBzdHJpbmcgfCBPQlRBaXJwb3J0RGV0YWlscykge1xuICAgIHRoaXMudGVtcFBhcmFtcy52aWEgPSB2YWx1ZTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5fdmlhQWlycG9ydCA9ICcnO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgdmFsdWUuZ2F0ZXdheSkge1xuICAgICAgdGhpcy5fdmlhQWlycG9ydCA9IHZhbHVlLmdhdGV3YXk7XG4gICAgICB0aGlzLl92aWFBaXJwb3J0RnVsbCA9IHZhbHVlLmRlc3RpbmF0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl92aWFBaXJwb3J0ID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgcHVibGljIGdldCBxdWVyeU9yaWdpbkFpcG9ydCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9vcmlnaW5BaXJwb3J0O1xuICB9XG5cbiAgcHVibGljIGdldCBxdWVyeURlc3RpbmF0aW9uQWlwb3J0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGVwYXJ0RGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcbiAgICByZXR1cm4gdGhpcy5fb3V0RGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgZGVwYXJ0RGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xuICAgIHRoaXMuX291dERhdGUgPSB2YWx1ZTtcbiAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudCh0aGlzLl9vdXREYXRlLCB0aGlzLl9vdXRUaW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGVwYXJ0VGltZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9vdXRUaW1lO1xuICB9XG5cbiAgcHVibGljIHNldCBkZXBhcnRUaW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9vdXRUaW1lID0gdmFsdWU7XG4gICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQodGhpcy5fb3V0RGF0ZSwgdGhpcy5fb3V0VGltZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG91dEJvdW5kRGF0ZSgpOiBtb21lbnQuTW9tZW50IHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgb3V0Qm91bmREYXRlKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZSA9IHZhbHVlLmlzVmFsaWQoKSA/IHZhbHVlIDogbnVsbDtcbiAgICB0aGlzLm1pbmltdW1JbkJvdW5kRGF0ZSA9IHtcbiAgICAgIHllYXI6IHZhbHVlLnllYXIoKSxcbiAgICAgIG1vbnRoOiB2YWx1ZS5tb250aCgpICsgMSxcbiAgICAgIGRheTogdmFsdWUuZGF0ZSgpXG4gICAgfTtcblxuICAgIGlmIChcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUgJiZcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSAmJlxuICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZS5pc0FmdGVyKHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSlcbiAgICApIHtcbiAgICAgIHRoaXMuaW5ib3VuZERhdGUgPSBtb21lbnQodGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZSkuYWRkKDEsICdkYXknKTtcbiAgICB9XG4gICAgdGhpcy5fb3V0RGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZSh2YWx1ZSk7XG4gICAgdGhpcy5fb3V0VGltZSA9IHRoaXMuaGVscGVycy5mb3JtYXRUaW1lQ29sb24odmFsdWUpO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcmV0dXJuRGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcbiAgICByZXR1cm4gdGhpcy5faW5EYXRlO1xuICB9XG5cbiAgcHVibGljIHNldCByZXR1cm5EYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XG4gICAgdGhpcy5faW5EYXRlID0gdmFsdWU7XG4gICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudCh0aGlzLl9pbkRhdGUsIHRoaXMuX2luVGltZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFycml2ZVRpbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5faW5UaW1lO1xuICB9XG5cbiAgcHVibGljIHNldCBhcnJpdmVUaW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9pblRpbWUgPSB2YWx1ZTtcbiAgICB0aGlzLmluYm91bmREYXRlID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KHRoaXMuX2luRGF0ZSwgdGhpcy5faW5UaW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW5ib3VuZERhdGUoKTogbW9tZW50Lk1vbWVudCB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgaW5ib3VuZERhdGUodmFsdWU6IG1vbWVudC5Nb21lbnQpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGUgPSB2YWx1ZS5pc1ZhbGlkKCkgPyB2YWx1ZSA6IG51bGw7XG4gICAgdGhpcy5faW5EYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKHZhbHVlKTtcbiAgICB0aGlzLl9pblRpbWUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0VGltZUNvbG9uKHZhbHVlKTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFycml2ZUxvY2F0aW9uKCk6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFycml2ZUxvY2F0aW9uO1xuICB9XG5cbiAgcHVibGljIHNldCBhcnJpdmVMb2NhdGlvbih2YWx1ZTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuYXJyaXZlTG9jYXRpb24gPSB2YWx1ZTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0ID0gJyc7XG4gICAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnRGdWxsID0gJyc7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB2YWx1ZS5nYXRld2F5KSB7XG4gICAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQgPSB2YWx1ZS5nYXRld2F5O1xuICAgICAgdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0RnVsbCA9IHZhbHVlLmRlc3RpbmF0aW9uO1xuICAgICAgdGhpcy5fZGVzdGluYXRpb25Mb2NhdGlvblR5cGUgPSB2YWx1ZS5sb2NhdGlvblR5cGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9IG51bGw7XG4gICAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnRGdWxsID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGNhYmluQ2xhc3MoKTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzcztcbiAgfVxuXG4gIHNldCBjYWJpbkNsYXNzKHZhbHVlOiBGbGlnaHRDYWJpbkNsYXNzIHwgbnVsbCkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5jYWJpbkNsYXNzID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IHJldHVybkNhYmluQ2xhc3MoKTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzcztcbiAgfVxuXG4gIHNldCByZXR1cm5DYWJpbkNsYXNzKHZhbHVlOiBGbGlnaHRDYWJpbkNsYXNzIHwgbnVsbCkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGNob3NlblNlYXJjaFR5cGUoKTogRmxpZ2h0U2VhcmNoVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlO1xuICB9XG5cbiAgc2V0IGNob3NlblNlYXJjaFR5cGUodHlwZTogRmxpZ2h0U2VhcmNoVHlwZSkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID0gdHlwZTtcblxuICAgIGlmICh0eXBlICE9PSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eSkge1xuICAgICAgdGhpcy5tdWx0aURlc3RpbmF0aW9uID0gW1xuICAgICAgICB7XG4gICAgICAgICAgb3JpZzogbnVsbCxcbiAgICAgICAgICBkZXN0OiBudWxsLFxuICAgICAgICAgIGRhdGU6IG1vbWVudCh0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKHRoaXMuaGVscGVycy5tYWtlTW9tZW50RGF5VGltZSgpLCAzMCkpLFxuICAgICAgICAgIG91dFRpbWVDcml0ZXJpYTogVGltZVdpbmRvdy5EZXBhcnQsXG4gICAgICAgICAgb3V0VGltZUZsZXhpYmlsaXR5OiAyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvcmlnOiBudWxsLFxuICAgICAgICAgIGRlc3Q6IG51bGwsXG4gICAgICAgICAgZGF0ZTogbW9tZW50KHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXModGhpcy5oZWxwZXJzLm1ha2VNb21lbnREYXlUaW1lKCksIDMwKSksXG4gICAgICAgICAgb3V0VGltZUNyaXRlcmlhOiBUaW1lV2luZG93LkRlcGFydCxcbiAgICAgICAgICBvdXRUaW1lRmxleGliaWxpdHk6IDJcbiAgICAgICAgfVxuICAgICAgXTtcbiAgICB9XG4gIH1cblxuICBnZXQgaXNSZXR1cm4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLnJldHVybjtcbiAgfVxuXG4gIGdldCBvdXRUaW1lQ3JpdGVyaWEoKTogVGltZVdpbmRvdyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lQ3JpdGVyaWE7XG4gIH1cblxuICBzZXQgb3V0VGltZUNyaXRlcmlhKHZhbHVlOiBUaW1lV2luZG93KSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLm91dFRpbWVDcml0ZXJpYSA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBpblRpbWVDcml0ZXJpYSgpOiBUaW1lV2luZG93IHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmluVGltZUNyaXRlcmlhO1xuICB9XG5cbiAgc2V0IGluVGltZUNyaXRlcmlhKHZhbHVlOiBUaW1lV2luZG93KSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmluVGltZUNyaXRlcmlhID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IG91dFRpbWVGbGV4aWJpbGl0eSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUZsZXhpYmlsaXR5O1xuICB9XG5cbiAgc2V0IG91dFRpbWVGbGV4aWJpbGl0eSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLm91dFRpbWVGbGV4aWJpbGl0eSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGluVGltZUZsZXhpYmlsaXR5KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pblRpbWVGbGV4aWJpbGl0eTtcbiAgfVxuXG4gIHNldCBpblRpbWVGbGV4aWJpbGl0eSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmluVGltZUZsZXhpYmlsaXR5ID0gdmFsdWU7XG4gIH1cblxuICBnZXQgbWF4Q29ubmVjdGlvbnMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm1heENvbm5lY3Rpb25zO1xuICB9XG5cbiAgc2V0IG1heENvbm5lY3Rpb25zKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMubWF4Q29ubmVjdGlvbnMgPSB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX211bHRpRGVzdGluYXRpb246IERlc3RpbmF0aW9uRW50cnlbXSA9IFtdO1xuICBnZXQgbXVsdGlEZXN0aW5hdGlvbigpOiBJTXVsdGlEZXN0aW5hdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm11bHRpRGVzdGluYXRpb247XG4gIH1cblxuICBzZXQgbXVsdGlEZXN0aW5hdGlvbih2YWx1ZUFycmF5OiBJTXVsdGlEZXN0aW5hdGlvbltdKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLm11bHRpRGVzdGluYXRpb24gPSB2YWx1ZUFycmF5O1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2hvd0hvdGVsRm9ybSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2hvd0hvdGVsRm9ybTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgc2hvd0hvdGVsRm9ybShuZXdWYWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zaG93SG90ZWxGb3JtID0gbmV3VmFsO1xuICB9XG5cbiAgcHVibGljIGdldCBob3RlbFNlYXJjaFJlcXVlc3RlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faG90ZWxTZWFyY2hSZXF1ZXN0ZWQ7XG4gIH1cblxuICBwdWJsaWMgc2V0IGhvdGVsU2VhcmNoUmVxdWVzdGVkKG5ld1ZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuX2hvdGVsU2VhcmNoUmVxdWVzdGVkID0gbmV3VmFsO1xuICB9XG5cbiAgc2V0TXVsdGlEZXN0aW5hdGlvblF1ZXJ5KG11bHRpRGVzdGluYXRpb246IElNdWx0aURlc3RpbmF0aW9uW10pOiBEZXN0aW5hdGlvbkVudHJ5W10ge1xuICAgIGNvbnN0IG5ld011bHRpRGVzdGluYXRpb24gPSB0aGlzLmhlbHBlcnMuY2xvbmUobXVsdGlEZXN0aW5hdGlvbik7XG4gICAgcmV0dXJuIG5ld011bHRpRGVzdGluYXRpb24ucmVkdWNlKFxuICAgICAgKGRlc3RpbmF0aW9uQXJyYXk6IERlc3RpbmF0aW9uRW50cnlbXSwgaXRlbTogSU11bHRpRGVzdGluYXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgZGVzdGluYXRpb25PYmplY3QgPSB7fSBhcyBEZXN0aW5hdGlvbkVudHJ5O1xuICAgICAgICBkZXN0aW5hdGlvbk9iamVjdC5vcmlnID0gaXRlbS5vcmlnLmdhdGV3YXk7XG4gICAgICAgIGRlc3RpbmF0aW9uT2JqZWN0LmRlc3QgPSBpdGVtLmRlc3QuZ2F0ZXdheTtcbiAgICAgICAgZGVzdGluYXRpb25PYmplY3Qub3JpZ2luTG9jYXRpb25UeXBlID0gaXRlbS5vcmlnLmxvY2F0aW9uVHlwZTtcbiAgICAgICAgZGVzdGluYXRpb25PYmplY3QuZGVzdGluYXRpb25Mb2NhdGlvblR5cGUgPSBpdGVtLmRlc3QubG9jYXRpb25UeXBlO1xuICAgICAgICBkZXN0aW5hdGlvbk9iamVjdC5vcmlnaW5BaXJwb3J0RnVsbCA9IGl0ZW0ub3JpZy5kZXN0aW5hdGlvbjtcbiAgICAgICAgZGVzdGluYXRpb25PYmplY3QuZGVzdGluYXRpb25BaXJwb3J0RnVsbCA9IGl0ZW0uZGVzdC5kZXN0aW5hdGlvbjtcbiAgICAgICAgZGVzdGluYXRpb25PYmplY3QuZGF0ZSA9IHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlKGl0ZW0uZGF0ZSk7XG4gICAgICAgIGRlc3RpbmF0aW9uT2JqZWN0LmRlcGFydHVyZVRpbWVXaW5kb3cgPVxuICAgICAgICAgIGl0ZW0ub3V0VGltZUNyaXRlcmlhID09PSBUaW1lV2luZG93LkRlcGFydFxuICAgICAgICAgICAgPyB0aGlzLmhlbHBlcnMubWFrZVRpbWVXaW5kb3coXG4gICAgICAgICAgICAgICAgaXRlbS5kYXRlLFxuICAgICAgICAgICAgICAgIC1pdGVtLm91dFRpbWVGbGV4aWJpbGl0eSxcbiAgICAgICAgICAgICAgICBpdGVtLm91dFRpbWVGbGV4aWJpbGl0eVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGRlc3RpbmF0aW9uT2JqZWN0LmFycml2YWxUaW1lV2luZG93ID1cbiAgICAgICAgICBpdGVtLm91dFRpbWVDcml0ZXJpYSA9PT0gVGltZVdpbmRvdy5BcnJpdmVcbiAgICAgICAgICAgID8gdGhpcy5oZWxwZXJzLm1ha2VUaW1lV2luZG93KGl0ZW0uZGF0ZSwgLTIsIDIpXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGRlc3RpbmF0aW9uT2JqZWN0Lm91dFRpbWVGbGV4aWJpbGl0eSA9XG4gICAgICAgICAgaXRlbS5vdXRUaW1lQ3JpdGVyaWEgPT09IFRpbWVXaW5kb3cuQXJyaXZlID8gMiA6IE51bWJlcihpdGVtLm91dFRpbWVGbGV4aWJpbGl0eSB8fCAwKTtcbiAgICAgICAgZGVzdGluYXRpb25BcnJheS5wdXNoKGRlc3RpbmF0aW9uT2JqZWN0KTtcbiAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uQXJyYXk7XG4gICAgICB9LFxuICAgICAgW10gYXMgRGVzdGluYXRpb25FbnRyeVtdXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX3Nzb09iamVjdDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IG51bGw7XG4gIHNldCBzc29PYmplY3QocXVlcnk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICB0aGlzLl9zc29PYmplY3QgPSBxdWVyeTtcbiAgfVxuXG4gIGdldCBzc29PYmplY3QoKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgcmV0dXJuIHRoaXMuX3Nzb09iamVjdDtcbiAgfVxuICAvLyBnZXQgb25seVxuICBnZXQgc29ydERyb3Bkb3duVmFsdWVzKCk6IFZhbHVlRGlzcGxheTxGbGlnaHRTb3J0VHlwZXM+W10ge1xuICAgIHJldHVybiB0aGlzLl9zb3J0QXJyYXk7XG4gIH1cblxuICBnZXQgZmFyZVR5cGVzVmFsdWVzKCk6IFZhbHVlRGlzcGxheTxGYXJlVHlwZT5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZhcmVUeXBlQXJyYXk7XG4gIH1cblxuICBnZXQgZmFyZVR5cGUoKTogRmFyZVR5cGUge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZmFyZVR5cGU7XG4gIH1cblxuICBzZXQgZmFyZVR5cGUodmFsdWU6IEZhcmVUeXBlKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmZhcmVUeXBlID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IG5lZ290aWF0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX25lZ290aWF0ZWQ7XG4gIH1cblxuICBzZXQgbmVnb3RpYXRlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX25lZ290aWF0ZWQgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBpbmNsdWRlTmVhcmJ5QWlycG9ydHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHM7XG4gIH1cblxuICBzZXQgaW5jbHVkZU5lYXJieUFpcnBvcnRzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGJ5U2NoZWR1bGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5ieVNjaGVkdWxlO1xuICB9XG5cbiAgc2V0IGJ5U2NoZWR1bGUoZXh0cmE6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuYnlTY2hlZHVsZSA9IGV4dHJhO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmbGlnaHRmZXRjaGVyOiBCYXNlRmxpZ2h0UXVvdGVGZXRjaGVyPEZRX1E+LFxuICAgIGhlbHBlcnM6IEJhc2VIZWxwZXJSb3V0aW5lcyxcbiAgICB1c2VyU2VydmljZTogVXNlclNlcnZpY2VJbnRlcmZhY2UsXG4gICAgcHJpdmF0ZSBiYXNrZXRTZXJ2aWNlOiBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcbiAgICBzdG9yYWdlU2VydmljZTogQmFzZVN0b3JhZ2VTZXJ2aWNlLFxuICAgIHNlYXJjaFNlcnZpY2U6IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlLFxuICAgIHByaXZhdGUgYXBwbHlGbGlnaHRSdWxlczogQmFzZUFwcGx5Sml0RmxpZ2h0UnVsZXNGZXRjaGVyPEFKRl9RPixcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogQmFzZU1vZGFsT3BlbmVyU2VydmljZSxcbiAgICBwcml2YXRlIGdldEZsaWdodEV4dHJhc09wdGlvbnM6IEJhc2VHZXRGbGlnaHRFeHRyYXNPcHRpb25zRmV0Y2hlcjxHRkVPX0Y+LFxuICAgIHByaXZhdGUgZ2V0RmxpZ2h0U2VhcmNoRXhjaGFuZ2VGZXRjaGVyOiBCYXNlRmxpZ2h0U2VhcmNoRXhjaGFuZ2VGZXRjaGVyPEZTRV9GPixcbiAgICBwcml2YXRlIGdldEZsaWdodEV4Y2hhbmdlRGV0YWlsc0ZldGNoZXI6IEJhc2VGbGlnaHRFeGNoYW5nZURldGFpbHNGZXRjaGVyPEZFRF9GPixcbiAgICBwcml2YXRlIHVwZGF0ZUZsaWdodFNlYXRNYXBVcGRhdGVyOiBCYXNlVXBkYXRlRmxpZ2h0U2VhdE1hcFVwZGF0ZXI8VUZTX1U+XG4gICkge1xuICAgIHN1cGVyKHN0b3JhZ2VTZXJ2aWNlLCBoZWxwZXJzLCBzZWFyY2hTZXJ2aWNlLCB1c2VyU2VydmljZSk7XG5cbiAgICBjb25zdCBkYXRhOiB7XG4gICAgICB0ZW1wUGFyYW1zOiBGbGlnaHRUZW1wUGFyYW1zO1xuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiBGbGlnaHRUZW1wUGFyYW1zO1xuICAgIH0gPSBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbShGbGlnaHRFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMpIHx8IHtcbiAgICAgIHRlbXBQYXJhbXM6IHt9IGFzIEZsaWdodFRlbXBQYXJhbXMsXG4gICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHt9IGFzIEZsaWdodFRlbXBQYXJhbXNcbiAgICB9O1xuXG4gICAgdGhpcy51c2VyU2VydmljZS5mdWxsVXNlckRldGFpbHMudXNlckNvbmZpZ3Muc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgY29uc29sZS5sb2coJysrKyBVc2VyIENvbmZpZ3MgR3JhYmJlZCArKysnKTtcbiAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgY29uc29sZS5sb2codGhpcy51c2VyU2VydmljZS5nZXRVc2VyRmF2b3JpdGVPYmplY3QoVXNlckZhdm9ydXJpdGUuRmxpZ2h0U2VhcmNoRGVmYXVsdHMpKTtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIHRoaXMuZGlyZWN0RGVmYXVsdFZhbHVlID0gKFxuICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckZhdm9yaXRlT2JqZWN0KFVzZXJGYXZvcnVyaXRlLkZsaWdodFNlYXJjaERlZmF1bHRzKSBhcyBhbnlcbiAgICAgICAgKT8uZGlyZWN0QnlEZWZhdWx0O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgcXVlcnkgPSBzZWFyY2hTZXJ2aWNlLm1ha2VGbGlnaHRRdWVyeShkYXRhLnRlbXBQYXJhbXMpO1xuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyhxdWVyeSk7XG4gICAgdGhpcy5fb3JpZ2luYWxVc2VyU2VhcmNoID0gZGF0YS5vcmlnaW5hbFVzZXJTZWFyY2g7XG4gICAgaWYgKHNlYXJjaFNlcnZpY2Uuc2hvdWxkQWRkVHJhdmVsbGVyU3Vic2NyaXB0aW9uKCkpIHtcbiAgICAgIHNlYXJjaFNlcnZpY2UudHJhdmVsbGVySW5mb3JtYXRpb24uc3Vic2NyaWJlKCh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSkgPT4ge1xuICAgICAgICB0aGlzLnRyYXZlbGxlcnMgPSB0cmF2ZWxsZXJzO1xuICAgICAgICBjb25zdCBzcGxpdFRyYXZlbGxlcnMgPSB0aGlzLmhlbHBlcnMuc2VsZWN0ZWRUcmF2ZWxsZXJzKHRyYXZlbGxlcnMsIFNlcnZpY2VUeXBlLkZsaWdodCk7XG4gICAgICAgIHRoaXMudGVtcFBhcmFtcy5hZHVsdHMgPSBzcGxpdFRyYXZlbGxlcnMuYWR1bHRzLmxlbmd0aDtcbiAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuID0gc3BsaXRUcmF2ZWxsZXJzLmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgLy8gdGhpcy50ZW1wUGFyYW1zLmluZmFudHMgPSBzcGxpdFRyYXZlbGxlcnMuaW5mYW50cy5sZW5ndGg7XG4gICAgICAgIHRoaXMudXBkYXRlVHJhdmVsbGVycygpO1xuICAgICAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB1c2VyU2VydmljZS5jaGFuZ2VVc2VyLnN1YnNjcmliZSgoX3VzZXI6IEZ1bGxVc2VyRGV0YWlscykgPT4ge1xuICAgICAgdGhpcy50aW1lQ3JpdGVyaWFPcHRpb25zLm5leHQoW1RpbWVXaW5kb3cuQW55dGltZSwgVGltZVdpbmRvdy5BcnJpdmUsIFRpbWVXaW5kb3cuRGVwYXJ0XSk7IC8vIFRPRE8gdXBkYXRlIHdpdGggYW55IFVGc1xuICAgICAgdGhpcy5mbGlnaHRPcGVyYXRvcnMubmV4dChbeyBjb2RlOiAnQkEnLCBuYW1lOiAnQnJpdGlzaCBBaXJ3YXlzJyB9XSk7IC8vIEZldGNoIHRoZXNlIGZyb20gREJcbiAgICAgIHRoaXMudXBkYXRlU2VhcmNoRGVmYXVsdHMoKTtcbiAgICB9KTtcblxuICAgIHRoaXMudXBkYXRlVHJhdmVsbGVycygpO1xuXG4gICAgdGhpcy5uZWdvdGlhdGVkID0gdGhpcy50ZW1wUGFyYW1zLmZhcmVUeXBlID09PSBGYXJlVHlwZS5OZWdvdGlhdGVkID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG5cbiAgZ2V0RmxpZ2h0RXhjaGFuZ2VTZWFyY2goXG4gICAgYmFza2V0SXRlbUlkOiBudW1iZXIsXG4gICAgb3V0Ym91bmREYXRlPzogc3RyaW5nLFxuICAgIGluYm91bmREYXRlPzogc3RyaW5nLFxuICAgIG91dGJvdW5kQ2xhc3M/OiBzdHJpbmcsXG4gICAgcmV0dXJuQ2xhc3M/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxGbGlnaHRKb3VybmV5RXhjaGFuZ2U+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRGbGlnaHRTZWFyY2hFeGNoYW5nZUZldGNoZXJcbiAgICAgIC5mZXRjaE9uZSh7XG4gICAgICAgIGJhc2tldEl0ZW06IGJhc2tldEl0ZW1JZC50b1N0cmluZygpLFxuICAgICAgICBvdXRib3VuZERhdGUsXG4gICAgICAgIGluYm91bmREYXRlLFxuICAgICAgICBvdXRib3VuZENsYXNzLFxuICAgICAgICByZXR1cm5DbGFzc1xuICAgICAgfSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGdldEZsaWdodEV4Y2hhbmdlRGV0YWlscyhcbiAgICBiYXNrZXRJdGVtSWQ6IHN0cmluZyxcbiAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zXG4gICk6IFByb21pc2U8RmxpZ2h0RXhjaGFuZ2VEZXRhaWxzPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RmxpZ2h0RXhjaGFuZ2VEZXRhaWxzRmV0Y2hlclxuICAgICAgLmZldGNoT25lKHtcbiAgICAgICAgYmFza2V0SXRlbTogYCR7YmFza2V0SXRlbUlkfWAsXG4gICAgICAgIGZsaWdodEl0aW5lcmFyeVxuICAgICAgfSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcm9jZXNzUmVzdWx0cyhyZXN1bHRzOiBGbGlnaHRBbGxRdW90ZVJlc3VsdCk6IEZsaWdodFF1b3RlUmVzdWx0QXJyYXkge1xuICAgIHRoaXMuaXNMb2FkaW5nU1NPID0gZmFsc2U7XG4gICAgaWYgKCFyZXN1bHRzKSB7XG4gICAgICB0aGlzLl9ncm91cGVkID0gW107XG4gICAgICB0aGlzLm11bHRpID0gW107XG4gICAgICB0aGlzLnJlc3VsdFF1ZXJ5ID0gbnVsbDtcbiAgICAgIHRoaXMuc2VhcmNoQnlTY2hlZHVsZSA9IFtdO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICB0aGlzLl9ncm91cGVkID0gcmVzdWx0cy5ncm91cGVkIHx8IFtdO1xuICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5ID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBqb3VybmV5V2hlblNlbGVjdGVkOiB7fSxcbiAgICAgICAgZHVhbFNpbmdsZVdoZW5TZWxlY3RlZDoge30sXG4gICAgICAgIHdoZW5TZWxlY3RlZEFsb25lOiB7fVxuICAgICAgfSxcbiAgICAgIHJlc3VsdHMucnVsZUFjdGlvblN1bW1hcnkgfHwge31cbiAgICApO1xuXG4gICAgdGhpcy5yZXN1bHRRdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcbiAgICB0aGlzLm11bHRpID0gcmVzdWx0cy5tdWx0aTtcbiAgICBpZiAodGhpcy5jaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eSkge1xuICAgICAgdGhpcy5pbml0TXVsdGlDaXR5U2VhcmNoQnlTY2hlZHVsZShyZXN1bHRzLCB0cnVlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY2hvc2VuU2VhcmNoVHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm4pIHtcbiAgICAgIHRoaXMuaW5pdE11bHRpQ2l0eVNlYXJjaEJ5U2NoZWR1bGUocmVzdWx0cywgZmFsc2UpO1xuICAgIH1cblxuICAgIC8vIGRlbGV0ZSB0aGlzLnJlc3VsdFF1ZXJ5Wyd3aXRoR3JvdXBlZCddO1xuICAgIGNvbnN0IGR1YWxTaW5nbGVzID0gcmVzdWx0cy5tdWx0aS5yZWR1Y2UoXG4gICAgICAoXG4gICAgICAgIHByZXZpb3VzSXRlbXM6IHtcbiAgICAgICAgICBvdXRib3VuZDogUmVjb3JkPG51bWJlciwgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnM+O1xuICAgICAgICAgIGluYm91bmQ6IFJlY29yZDxudW1iZXIsIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zPjtcbiAgICAgICAgfSxcbiAgICAgICAgbmV4dEl0ZW06IEl0aW5lcmFyeVN1bW1hcnlcbiAgICAgICkgPT4ge1xuICAgICAgICBwcmV2aW91c0l0ZW1zW25leHRJdGVtLm9yZGVyID09PSBPVVRCT1VORCA/ICdvdXRib3VuZCcgOiAnaW5ib3VuZCddID1cbiAgICAgICAgICBuZXh0SXRlbS5yZXN1bHRzLnJlZHVjZShcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgYWNjdW06IFJlY29yZDxudW1iZXIsIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zPixcbiAgICAgICAgICAgICAgZmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9uc1xuICAgICAgICAgICAgKTogUmVjb3JkPG51bWJlciwgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnM+ID0+IHtcbiAgICAgICAgICAgICAgLy8gb25seSB0b3AgNSUgb2YgZmxpZ2h0IG5vdyB0aGV5IGFyZSBpbiBvcmRlciBzbyBpbmRleCA8IDUlIHRvdGFsXG4gICAgICAgICAgICAgIGFjY3VtW2ZsaWdodC51aWRdID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBjYW5TZWxlY3Q6IHRydWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZsaWdodFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXR1cm4gYWNjdW07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJldmlvdXNJdGVtc1tuZXh0SXRlbS5vcmRlciA9PT0gT1VUQk9VTkQgPyAnb3V0Ym91bmQnIDogJ2luYm91bmQnXVxuICAgICAgICAgICk7XG4gICAgICAgIHJldHVybiBwcmV2aW91c0l0ZW1zO1xuICAgICAgfSxcbiAgICAgIHsgb3V0Ym91bmQ6IHt9LCBpbmJvdW5kOiB7fSB9XG4gICAgKTtcbiAgICAvLyBjb25zb2xlLmxvZyhkdWFsU2luZ2xlcyk7XG4gICAgY29uc3QgZHVhbEluYm91bmRGaWx0ZXJzID0gdGhpcy5oZWxwZXJzLmNyZWF0ZUZsaWdodEZpbHRlcnMoXG4gICAgICBPYmplY3QudmFsdWVzKGR1YWxTaW5nbGVzLmluYm91bmQpLFxuICAgICAgREVGQVVMVF9GTElHSFRfRklMVEVSUyxcbiAgICAgIHRoaXMudmlhXG4gICAgKTtcblxuICAgIHRoaXMuZHVyYWxTaW5nbGVGaWx0ZXIubmV4dChcbiAgICAgIHRoaXMuaGVscGVycy5jcmVhdGVGbGlnaHRGaWx0ZXJzKFxuICAgICAgICBPYmplY3QudmFsdWVzKGR1YWxTaW5nbGVzLm91dGJvdW5kKSxcbiAgICAgICAge1xuICAgICAgICAgIC4uLkRFRkFVTFRfRkxJR0hUX0ZJTFRFUlMsXG4gICAgICAgICAgcHJpY2U6IGR1YWxJbmJvdW5kRmlsdGVycy5wcmljZSxcbiAgICAgICAgICBhcnJpdmFsUmV0dXJuQWlycG9ydDogZHVhbEluYm91bmRGaWx0ZXJzLmFycml2YWxBaXJwb3J0LFxuICAgICAgICAgIGRlcGF0dXJlUmV0dXJuQWlycG9ydDogZHVhbEluYm91bmRGaWx0ZXJzLmRlcGF0dXJlQWlycG9ydCxcbiAgICAgICAgICByZXR1cm5BcnJpdmFsVGltZTogZHVhbEluYm91bmRGaWx0ZXJzLmFycml2YWxUaW1lLFxuICAgICAgICAgIHJldHVybkR1cmF0aW9uOiBkdWFsSW5ib3VuZEZpbHRlcnMuZHVyYXRpb24sXG4gICAgICAgICAgcmV0dXJuRGVwYXJ0dXJlVGltZTogZHVhbEluYm91bmRGaWx0ZXJzLmRlcGFydHVyZVRpbWVcbiAgICAgICAgfSxcbiAgICAgICAgKHRoaXMudmlhIGFzIE9CVEFpcnBvcnREZXRhaWxzKT8uZ2F0ZXdheVxuICAgICAgKVxuICAgICk7XG5cbiAgICAhcmVzdWx0cy5qb3VybmV5cz8ubGVuZ3RoICYmIChyZXN1bHRzLm11bHRpWzBdPy5yZXN1bHRzIHx8IHJlc3VsdHMubXVsdGlbMV0/LnJlc3VsdHMpXG4gICAgICA/IHRoaXMuc2V0RmxpZ2h0RGlzcGxheVR5cGUoRmxpZ2h0RGlzcGxheVR5cGVzLmR1YWxTaW5nbGVzKVxuICAgICAgOiB0aGlzLnNldEZsaWdodERpc3BsYXlUeXBlKEZsaWdodERpc3BsYXlUeXBlcy5yZXR1cm5zKTtcbiAgICB0aGlzLl9jaGVhcGVzdFByaWNlT2JqZWN0LnJldHVybnMgPSB0aGlzLmNyZWF0ZUNoZWFwZXN0UHJpY2UocmVzdWx0cy5qb3VybmV5cyk7XG4gICAgdGhpcy5fY2hlYXBlc3RQcmljZU9iamVjdC5kdWFsT3V0Ym91bmQgPSB0aGlzLmNyZWF0ZUNoZWFwZXN0UHJpY2UoXG4gICAgICByZXN1bHRzLm11bHRpWzBdPy5yZXN1bHRzIGFzIEZsaWdodEl0aW5lcmFyeVtdXG4gICAgKTtcbiAgICB0aGlzLl9jaGVhcGVzdFByaWNlT2JqZWN0LmR1YWxJbmJvdW5kID0gdGhpcy5jcmVhdGVDaGVhcGVzdFByaWNlKFxuICAgICAgcmVzdWx0cy5tdWx0aVsxXT8ucmVzdWx0cyBhcyBGbGlnaHRJdGluZXJhcnlbXVxuICAgICk7XG5cbiAgICBsZXQgdXBkYXRlZFJlc3VsdHMgPSB7IC4uLnJlc3VsdHMgfTtcbiAgICB1cGRhdGVkUmVzdWx0cy5zZWFyY2hCeVNjaGVkdWxlID0gdGhpcy5zZWFyY2hCeVNjaGVkdWxlO1xuICAgIHRoaXMuZ3JlZW5lckNob2ljZSA9IG5ldyBHcmVlbmVyQ2hvaWNlSW1wbCh1cGRhdGVkUmVzdWx0cyk7XG4gICAgY29uc3QgcmVzdWx0c1dpdGhFeHRlbnNpb25zID0gdGhpcy5tYWRlRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnModXBkYXRlZFJlc3VsdHMpO1xuICAgIHRoaXMuY3VycmVudEZpbHRlcnMgPSB0aGlzLmhlbHBlcnMuY3JlYXRlRmxpZ2h0RmlsdGVycyhcbiAgICAgIHJlc3VsdHNXaXRoRXh0ZW5zaW9ucy5qb3VybmV5cyxcbiAgICAgIERFRkFVTFRfRkxJR0hUX0ZJTFRFUlMsXG4gICAgICAodGhpcy52aWEgYXMgT0JUQWlycG9ydERldGFpbHMpPy5nYXRld2F5XG4gICAgKTtcbiAgICB0aGlzLmZpbHRlcnMubmV4dCh0aGlzLmN1cnJlbnRGaWx0ZXJzKTtcblxuICAgIGlmIChcbiAgICAgIHRoaXMuY2hvc2VuU2VhcmNoVHlwZSAhPT0gRmxpZ2h0U2VhcmNoVHlwZS5vbmVXYXkgJiZcbiAgICAgIHJlc3VsdHNXaXRoRXh0ZW5zaW9ucy5zZWFyY2hCeVNjaGVkdWxlLmxlbmd0aFxuICAgICkge1xuICAgICAgdGhpcy5jdXN0b21TY2hlZHVsZWRGaWx0ZXJzID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubXVsdGlEZXN0aW5hdGlvbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmhlbHBlcnMuY3JlYXRlRmxpZ2h0RmlsdGVycyhcbiAgICAgICAgICByZXN1bHRzV2l0aEV4dGVuc2lvbnMuc2VhcmNoQnlTY2hlZHVsZVtpXSxcbiAgICAgICAgICBERUZBVUxUX0ZMSUdIVF9GSUxURVJTXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY3VzdG9tU2NoZWR1bGVkRmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgICB9XG4gICAgICB0aGlzLnNjaGVkdWxlZEZpbHRlcnMubmV4dCh0aGlzLmN1c3RvbVNjaGVkdWxlZEZpbHRlcnMpO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVkUmVzdWx0cyA/IFt1cGRhdGVkUmVzdWx0c10gOiBbXTtcbiAgfVxuXG4gIGluaXRNdWx0aUNpdHlTZWFyY2hCeVNjaGVkdWxlKHJlc3VsdHM6IEZsaWdodEFsbFF1b3RlUmVzdWx0LCBpc011bHRpQ2l0eTogYm9vbGVhbikge1xuICAgIHRoaXMuc2VhcmNoQnlTY2hlZHVsZSA9IFtdO1xuICAgIGlmIChyZXN1bHRzPy5qb3VybmV5cy5sZW5ndGgpIHtcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLm11bHRpRGVzdGluYXRpb24ubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHJlc3VsdHMuam91cm5leXMuZm9yRWFjaCgoZmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucykgPT4ge1xuICAgICAgICAgIGNvbnN0IGZsaWdodHMgPSBpc011bHRpQ2l0eVxuICAgICAgICAgICAgPyBmbGlnaHQub3V0Ym91bmRGbGlnaHRzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAob3V0Ym91bmRGbGlnaHQ6IEZsaWdodEpvdXJuZXkpID0+IG91dGJvdW5kRmxpZ2h0LnNlZ21lbnRHcm91cCA9PT0gaW5kZXhcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBpbmRleCA9PT0gMFxuICAgICAgICAgICAgPyBmbGlnaHQub3V0Ym91bmRGbGlnaHRzXG4gICAgICAgICAgICA6IGZsaWdodC5pbmJvdW5kRmxpZ2h0cztcblxuICAgICAgICAgIGlmICghdGhpcy5zZWFyY2hCeVNjaGVkdWxlW2luZGV4XSkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hCeVNjaGVkdWxlW2luZGV4XSA9IFtdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmbGlnaHRzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hCeVNjaGVkdWxlW2luZGV4XS5wdXNoKHtcbiAgICAgICAgICAgICAgcHJlZmVycmVkOiBmbGlnaHQucHJlZmVycmVkLFxuICAgICAgICAgICAgICBwcmVmZXJyZWRNZXNzYWdlczogZmxpZ2h0LnByZWZlcnJlZE1lc3NhZ2VzLFxuICAgICAgICAgICAgICBwcmVmZXJlbmNlTGV2ZWw6IGZsaWdodC5wcmVmZXJlbmNlTGV2ZWwsXG4gICAgICAgICAgICAgIHNvdXJjZTogZmxpZ2h0LnNvdXJjZSxcbiAgICAgICAgICAgICAgYmFnZ2FnZUFsbG93YW5jZTogZmxpZ2h0LmJhZ2dhZ2VBbGxvd2FuY2UsXG4gICAgICAgICAgICAgIGRpc2Nsb3N1cmVzOiBmbGlnaHQuZGlzY2xvc3VyZXMsXG4gICAgICAgICAgICAgIGFkZGl0aW9uYWw6IGZsaWdodC5hZGRpdGlvbmFsLFxuICAgICAgICAgICAgICBmYXJlQ29uZGl0aW9uczogZmxpZ2h0LmZhcmVDb25kaXRpb25zLFxuICAgICAgICAgICAgICBvdXRib3VuZFRvdGFsRHVyYXRpb246IHRoaXMuaGVscGVycy5nZXRUaW1lRGlmZmVyZW5jZShcbiAgICAgICAgICAgICAgICBmbGlnaHRzW2ZsaWdodHMubGVuZ3RoIC0gMV0/LmRhdGVUaW1lQXJyaXZpbmcsXG4gICAgICAgICAgICAgICAgZmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZ1xuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBvdXRib3VuZEZsaWdodHM6IGZsaWdodHMsXG4gICAgICAgICAgICAgIHNjaGVkdWxlSWQ6IGZsaWdodHNcbiAgICAgICAgICAgICAgICAubWFwKGl0ZW0gPT4gaXRlbS5pZClcbiAgICAgICAgICAgICAgICAuc29ydCgpXG4gICAgICAgICAgICAgICAgLmpvaW4oJywnKSxcbiAgICAgICAgICAgICAgY28yUGVySXRlbTogZmxpZ2h0cy5yZWR1Y2UoKGFjYywgb2JqKSA9PiBhY2MgKyBvYmouY28yUGVySXRlbSwgMCksXG4gICAgICAgICAgICAgIGNvMlBlclBhc3NlbmdlcjogZmxpZ2h0cy5yZWR1Y2UoKGFjYywgb2JqKSA9PiBhY2MgKyBvYmouY28yUGVyUGFzc2VuZ2VyLCAwKSxcbiAgICAgICAgICAgICAgam91cm5leUhhc2g6IGZsaWdodHNbMF0uam91cm5leUhhc2gsXG4gICAgICAgICAgICAgIHNhZlJhdGluZzogZmxpZ2h0c1swXS5zYWZSYXRpbmcsXG4gICAgICAgICAgICAgIGdyZWVuZXJDaG9pY2U6IGZhbHNlLFxuICAgICAgICAgICAgICBncmVlbmVyQ2hvaWNlUGVyY2VudGFnZTogMCxcbiAgICAgICAgICAgICAgc291cmNlSWQ6IGZsaWdodC5zb3VyY2VJZCxcbiAgICAgICAgICAgICAgaW5ib3VuZEZsaWdodHM6IFtdLFxuICAgICAgICAgICAgICB1aWQ6IG51bGwsXG4gICAgICAgICAgICAgIHRvdGFsOiB7IHByaWNlOiAwLCBjdXJyZW5jeTogbnVsbCB9LFxuICAgICAgICAgICAgICBwYXNzZW5nZXJDb3VudDogMCxcbiAgICAgICAgICAgICAgdmVyc2lvbjogJycsXG4gICAgICAgICAgICAgIHRtY1ByZWZlcnJlZExvZ29Vcmw6ICcnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKGZsaWdodDpGbGlnaHRJdGluZXJhcnksIHJ1bGVzOlJ1bGVBY3Rpb25TdW1tYXJ5SW50ZXJmYWNlKSB7XG4gICAgY29uc3QgaXNEdWFsU2luZ2xlV2hlblNlbGVjdGVkICA9IHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWRbZmxpZ2h0LmpvdXJuZXlIYXNoXTtcbiAgICBjb25zdCBpc0pvdXJuZXlXaGVuU2VsZWN0ZWQgPSB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2ZsaWdodC5qb3VybmV5SGFzaF07XG4gICAgY29uc3QgaXNXaGVuU2VsZWN0ZWRBbG9uZSA9IHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2ZsaWdodC5qb3VybmV5SGFzaF07XG4gICAgaWYgKGlzRHVhbFNpbmdsZVdoZW5TZWxlY3RlZCkge1xuICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuZHVhbFNpbmdsZVdoZW5TZWxlY3RlZFtmbGlnaHQuam91cm5leUhhc2hdID0gcnVsZXMuZHVhbFNpbmdsZVdoZW5TZWxlY3RlZFtmbGlnaHQuam91cm5leUhhc2hdO1xuICAgIH0gZWxzZSBpZiAoaXNKb3VybmV5V2hlblNlbGVjdGVkKSB7XG4gICAgICBpZiAocnVsZXMuam91cm5leVdoZW5TZWxlY3RlZFtmbGlnaHQuam91cm5leUhhc2hdKSB7XG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbZmxpZ2h0LmpvdXJuZXlIYXNoXSA9IHJ1bGVzLmpvdXJuZXlXaGVuU2VsZWN0ZWRbZmxpZ2h0LmpvdXJuZXlIYXNoXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2ZsaWdodC5qb3VybmV5SGFzaF07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1doZW5TZWxlY3RlZEFsb25lKSB7XG4gICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtmbGlnaHQuam91cm5leUhhc2hdID0gcnVsZXMud2hlblNlbGVjdGVkQWxvbmVbZmxpZ2h0LmpvdXJuZXlIYXNoXTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hZGVGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyhyZXN1bHRzOiBhbnkpOiBGbGlnaHRBbGxRdW90ZVJlc3VsdCB7XG4gICAgcmVzdWx0cy5qb3VybmV5cy5tYXAoKGZsaWdodEl0ZW06IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSA9PiB7XG4gICAgICBmbGlnaHRJdGVtID0gdGhpcy5hZGRSdWxlc1RvRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMoZmxpZ2h0SXRlbSk7XG4gICAgfSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubXVsdGlEZXN0aW5hdGlvbi5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0cy5zZWFyY2hCeVNjaGVkdWxlW2ldPy5tYXAoKGZsaWdodEl0ZW06IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSA9PiB7XG4gICAgICAgIGZsaWdodEl0ZW0gPSB0aGlzLmFkZFJ1bGVzVG9GbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyhmbGlnaHRJdGVtKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlc3VsdHMubXVsdGlbMF0/LnJlc3VsdHMubWFwKChmbGlnaHRJdGVtOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucykgPT4ge1xuICAgICAgZmxpZ2h0SXRlbSA9IHRoaXMuYWRkUnVsZXNUb0ZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKGZsaWdodEl0ZW0pO1xuICAgIH0pO1xuXG4gICAgcmVzdWx0cy5tdWx0aVsxXT8ucmVzdWx0cy5tYXAoKGZsaWdodEl0ZW06IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSA9PiB7XG4gICAgICBmbGlnaHRJdGVtLnByZWZlcnJlZCA9IFByZWZlcnJlZEZsYWdzLm5vbmU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIHB1YmxpYyBhZGRSdWxlc1RvRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMoXG4gICAgaXRlbTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgcnVsZXM6IFJ1bGVBY3Rpb25TdW1tYXJ5SW50ZXJmYWNlID0gdGhpcy5fcnVsZUFjdGlvblN1bW1hcnlcbiAgKTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMge1xuICAgIGNvbnN0IHsgam91cm5leVdoZW5TZWxlY3RlZCwgd2hlblNlbGVjdGVkQWxvbmUgfSA9IHJ1bGVzO1xuICAgIGNvbnN0IGNvbXBhbnlQcmVmZXJyZWQgPVxuICAgICAgcnVsZXMuam91cm5leVdoZW5TZWxlY3RlZFtpdGVtLmpvdXJuZXlIYXNoXT8uY29tcGFueVByZWZlcnJlZCB8fFxuICAgICAgcnVsZXMud2hlblNlbGVjdGVkQWxvbmVbaXRlbS5qb3VybmV5SGFzaF0/LmNvbXBhbnlQcmVmZXJyZWQ7XG4gICAgY29uc3Qgb2ZmaWNlUHJlZmVycmVkID1cbiAgICAgIGpvdXJuZXlXaGVuU2VsZWN0ZWRbaXRlbS5qb3VybmV5SGFzaF0/Lm9mZmljZVByZWZlcnJlZCB8fFxuICAgICAgd2hlblNlbGVjdGVkQWxvbmVbaXRlbS5qb3VybmV5SGFzaF0/Lm9mZmljZVByZWZlcnJlZDtcbiAgICBjb25zdCB0bWNQcmVmZXJyZWQgPVxuICAgICAgam91cm5leVdoZW5TZWxlY3RlZFtpdGVtLmpvdXJuZXlIYXNoXT8udG1jUHJlZmVycmVkIHx8XG4gICAgICB3aGVuU2VsZWN0ZWRBbG9uZVtpdGVtLmpvdXJuZXlIYXNoXT8udG1jUHJlZmVycmVkO1xuXG4gICAgaXRlbS5wcmVmZXJyZWQgPSBjb21wYW55UHJlZmVycmVkXG4gICAgICA/IFByZWZlcnJlZEZsYWdzLmNvbXBhbnlQcmVmZXJyZWRcbiAgICAgIDogb2ZmaWNlUHJlZmVycmVkXG4gICAgICA/IFByZWZlcnJlZEZsYWdzLm9mZmljZVByZWZlcnJlZFxuICAgICAgOiB0bWNQcmVmZXJyZWRcbiAgICAgID8gUHJlZmVycmVkRmxhZ3MudG1jUHJlZmVycmVkXG4gICAgICA6IFByZWZlcnJlZEZsYWdzLm5vbmU7XG5cbiAgICBjb25zdCBjb21wYW55UHJlZmVycmVkTWVzc2FnZSA9XG4gICAgICBqb3VybmV5V2hlblNlbGVjdGVkW2l0ZW0uam91cm5leUhhc2hdPy5jb21wYW55UHJlZmVycmVkTWVzc2FnZSB8fFxuICAgICAgd2hlblNlbGVjdGVkQWxvbmVbaXRlbS5qb3VybmV5SGFzaF0/LmNvbXBhbnlQcmVmZXJyZWRNZXNzYWdlIHx8XG4gICAgICAnJztcbiAgICBjb25zdCBvZmZpY2VQcmVmZXJyZWRNZXNzYWdlID1cbiAgICAgIGpvdXJuZXlXaGVuU2VsZWN0ZWRbaXRlbS5qb3VybmV5SGFzaF0/Lm9mZmljZVByZWZlcnJlZE1lc3NhZ2UgfHxcbiAgICAgIHdoZW5TZWxlY3RlZEFsb25lW2l0ZW0uam91cm5leUhhc2hdPy5vZmZpY2VQcmVmZXJyZWRNZXNzYWdlIHx8XG4gICAgICAnJztcbiAgICBjb25zdCB0bWNQcmVmZXJyZWRNZXNzYWdlID1cbiAgICAgIGpvdXJuZXlXaGVuU2VsZWN0ZWRbaXRlbS5qb3VybmV5SGFzaF0/LnRtY1ByZWZlcnJlZE1lc3NhZ2UgfHxcbiAgICAgIHdoZW5TZWxlY3RlZEFsb25lW2l0ZW0uam91cm5leUhhc2hdPy50bWNQcmVmZXJyZWRNZXNzYWdlIHx8XG4gICAgICAnJztcblxuICAgIGl0ZW0ucHJlZmVycmVkTWVzc2FnZXMgPSB7XG4gICAgICBbUHJlZmVycmVkRmxhZ3MuY29tcGFueVByZWZlcnJlZF06IGNvbXBhbnlQcmVmZXJyZWRNZXNzYWdlLFxuICAgICAgW1ByZWZlcnJlZEZsYWdzLm9mZmljZVByZWZlcnJlZF06IG9mZmljZVByZWZlcnJlZE1lc3NhZ2UsXG4gICAgICBbUHJlZmVycmVkRmxhZ3MudG1jUHJlZmVycmVkXTogdG1jUHJlZmVycmVkTWVzc2FnZSxcbiAgICAgIFtQcmVmZXJyZWRGbGFncy5hbGxdOlxuICAgICAgICBgJHtjb21wYW55UHJlZmVycmVkTWVzc2FnZX0gJHtvZmZpY2VQcmVmZXJyZWRNZXNzYWdlfSAke3RtY1ByZWZlcnJlZE1lc3NhZ2V9YC50cmltKCkgfHwgJycsXG4gICAgICBbUHJlZmVycmVkRmxhZ3Mubm9uZV06ICcnXG4gICAgfTtcblxuICAgIGl0ZW0ucHJlZmVyZW5jZUxldmVsID1cbiAgICAgICtqb3VybmV5V2hlblNlbGVjdGVkW2l0ZW0uam91cm5leUhhc2hdPy5wcmVmZXJlbmNlTGV2ZWwgfHxcbiAgICAgICt3aGVuU2VsZWN0ZWRBbG9uZVtpdGVtLmpvdXJuZXlIYXNoXT8ucHJlZmVyZW5jZUxldmVsIHx8XG4gICAgICBudWxsO1xuXG4gICAgaXRlbS5yZXF1aXJlc1JlYXNvbktleXMgPVxuICAgICAgcnVsZXMuam91cm5leVdoZW5TZWxlY3RlZFtpdGVtLmpvdXJuZXlIYXNoXT8ucmVxdWlyZXNSZWFzb25LZXlzIHx8XG4gICAgICBydWxlcy53aGVuU2VsZWN0ZWRBbG9uZVtpdGVtLmpvdXJuZXlIYXNoXT8ucmVxdWlyZXNSZWFzb25LZXlzO1xuICAgIGl0ZW0ucmVxdWlyZXNSZWFzb25NZXNzYWdlcyA9XG4gICAgICBqb3VybmV5V2hlblNlbGVjdGVkW2l0ZW0uam91cm5leUhhc2hdPy5yZXF1aXJlc1JlYXNvbk1lc3NhZ2VzIHx8XG4gICAgICB3aGVuU2VsZWN0ZWRBbG9uZVtpdGVtLmpvdXJuZXlIYXNoXT8ucmVxdWlyZXNSZWFzb25NZXNzYWdlcyB8fFxuICAgICAgW107XG5cbiAgICBpdGVtLnVuYXZhaWxhYmxlID1cbiAgICAgIHJ1bGVzLmpvdXJuZXlXaGVuU2VsZWN0ZWRbaXRlbS5qb3VybmV5SGFzaF0/LnVuYXZhaWxhYmxlIHx8XG4gICAgICBydWxlcy53aGVuU2VsZWN0ZWRBbG9uZVtpdGVtLmpvdXJuZXlIYXNoXT8udW5hdmFpbGFibGU7XG4gICAgaXRlbS51bmF2YWlsYWJsZU1lc3NhZ2UgPVxuICAgICAgam91cm5leVdoZW5TZWxlY3RlZFtpdGVtLmpvdXJuZXlIYXNoXT8udW5hdmFpbGFibGVNZXNzYWdlIHx8XG4gICAgICB3aGVuU2VsZWN0ZWRBbG9uZVtpdGVtLmpvdXJuZXlIYXNoXT8udW5hdmFpbGFibGVNZXNzYWdlIHx8XG4gICAgICAnJztcblxuICAgIGl0ZW0udG1jUHJlZmVycmVkTG9nb1VybCA9XG4gICAgICBqb3VybmV5V2hlblNlbGVjdGVkW2l0ZW0uam91cm5leUhhc2hdPy50bWNQcmVmZXJyZWRMb2dvVXJsIHx8XG4gICAgICB3aGVuU2VsZWN0ZWRBbG9uZVtpdGVtLmpvdXJuZXlIYXNoXT8udG1jUHJlZmVycmVkTG9nb1VybCB8fFxuICAgICAgJyc7XG5cbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuXG5cbiAgcHJvdGVjdGVkIG1ha2VTZXNzaW9uUmVzdWx0cyhkYXRhOiBGbGlnaHRRdW90ZVJlc3VsdEFycmF5KTogRmxpZ2h0U2Vzc2lvblR5cGUge1xuICAgIHJldHVybiB7XG4gICAgICByZXN1bHRzOiBkYXRhLFxuICAgICAgZ3JvdXBlZDogdGhpcy5fZ3JvdXBlZCxcbiAgICAgIHF1ZXJ5OiB0aGlzLnJlc3VsdFF1ZXJ5XG4gICAgfTtcbiAgfVxuXG4gIGdldE1heEZsaWdodFByaWNlRm9yQnJhbmQobWF0Y2hpbmdCcmFuZEZsaWdodHM6IEZsaWdodEl0aW5lcmFyeVtdKTogbnVtYmVyIHtcbiAgICBsZXQgbWF4ID0gMDtcbiAgICBtYXRjaGluZ0JyYW5kRmxpZ2h0cy5mb3JFYWNoKGZsaWdodCA9PiB7XG4gICAgICBpZiAobWF4IDwgZmxpZ2h0Py50b3RhbD8ucHJpY2UpIHtcbiAgICAgICAgbWF4ID0gZmxpZ2h0LnRvdGFsLnByaWNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBtYXg7XG4gIH1cbiAgZ2V0TWluRmxpZ2h0UHJpY2VGb3JCcmFuZChtYXRjaGluZ0JyYW5kRmxpZ2h0czogRmxpZ2h0SXRpbmVyYXJ5W10pOiBudW1iZXIge1xuICAgIGxldCBtaW4gPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcbiAgICBtYXRjaGluZ0JyYW5kRmxpZ2h0cy5mb3JFYWNoKGZsaWdodCA9PiB7XG4gICAgICBpZiAobWluID4gZmxpZ2h0Py50b3RhbD8ucHJpY2UpIHtcbiAgICAgICAgbWluID0gZmxpZ2h0LnRvdGFsLnByaWNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBtaW47XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzZXRRdWVyeShjaGVja0lzVmFsaWQ6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHRoaXMuc2VhcmNoU2VydmljZS5tYWtlRmxpZ2h0UXVlcnkoKSk7XG4gICAgaWYgKGNoZWNrSXNWYWxpZCkge1xuICAgICAgdGhpcy5faXNWYWxpZCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZXNldFBhcmFtcygpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2V0KCk7XG4gICAgdGhpcy5yZXNldFF1ZXJ5KCk7XG4gIH1cblxuICBwcml2YXRlIF9pc1ZhbGlkKCkge1xuICAgIGlmICghdGhpcy5kb0NoZWNrcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKEZsaWdodEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUywge1xuICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxuICAgIH0pO1xuXG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMgPSBbXTtcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUubXVsdGlDaXR5KSB7XG4gICAgICB0aGlzLm11bHRpQ2l0eVZhbGlkYXRpb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0aGlzLl9vcmlnaW5BaXJwb3J0KSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBhZGQgaW4gYSBkZXBhcnR1cmUgbG9jYXRpb24nKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0KSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBhZGQgaW4gYW4gYXJyaXZhbCBkZXN0aW5hdGlvbicpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlLmlzQWZ0ZXIobW9tZW50KCkpKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ0RlcGFydHVyZSBkYXRlIGNhbiBub3QgYmUgaW4gdGhlIHBhc3QnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLl9vcmlnaW5BaXJwb3J0ICYmXG4gICAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCAmJlxuICAgICAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQgPT09IHRoaXMuX29yaWdpbkFpcnBvcnRcbiAgICAgICkge1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdPcmlnaW4gYW5kIGRlc3RpbmF0aW9uIGFpcnBvcnQgY2Fubm90IGJlIHRoZSBzYW1lJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pbmJvdW5kRGF0ZS5kaWZmKHRoaXMub3V0Qm91bmREYXRlLCAnc2Vjb25kcycpIDw9IDAgJiZcbiAgICAgICAgdGhpcy5vdXRUaW1lQ3JpdGVyaWEgIT09IFRpbWVXaW5kb3cuQW55dGltZSAmJlxuICAgICAgICB0aGlzLmluVGltZUNyaXRlcmlhICE9PSBUaW1lV2luZG93LkFueXRpbWVcbiAgICAgICkge1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxuICAgICAgICAgICdUaGUgdGltZSBvZiBhcnJpdmFsIGNhbm5vdCBiZSBsZXNzIHRoYW4gdGhlIHRpbWUgb2YgZGVwYXJ0dXJlJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5pc1JldHVybikge1xuICAgICAgICAvLyBUT0RPIGNoZWNrIHRoYXQgcmV0dXJuIGRldGFpbHMgYXJlIHNldFxuICAgICAgICBpZiAodGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZS5pc1NhbWVPckFmdGVyKHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYSkpIHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdSZXR1cm4gZGF0ZSBtdXN0IGJlIGFmdGVyIHRoZSBkZXBhcnR1cmUgZGF0ZScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuaXNWYWxpZC5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMCk7XG4gICAgdGhpcy5tZXNzYWdlcy5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzKTtcbiAgfVxuXG4gIG11bHRpQ2l0eVZhbGlkYXRpb24oKSB7XG4gICAgbGV0IGlzZW1wdHlWYWx1ZSA9IGZhbHNlO1xuICAgIGxldCBpc2VtcHR5TGFuZGluZyA9IGZhbHNlO1xuICAgIGxldCBpc1NhbWVWYWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uLm1hcCgoZWxlbWVudCwgaSkgPT4ge1xuICAgICAgaWYgKCFlbGVtZW50Lm9yaWcpIHtcbiAgICAgICAgaXNlbXB0eVZhbHVlID0gdHJ1ZTtcbiAgICAgICAgaWYgKGkgPCAyKSB7XG4gICAgICAgICAgaXNlbXB0eUxhbmRpbmcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZWxlbWVudC5vcmlnID09PSBlbGVtZW50LmRlc3QpIGlzU2FtZVZhbHVlID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBpZiAoIW1vbWVudCh0aGlzLnRlbXBQYXJhbXMubXVsdGlEZXN0aW5hdGlvblswXS5kYXRlKS5pc0FmdGVyKG1vbWVudCgpKSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnRGVwYXJ0dXJlIGRhdGUgY2FuIG5vdCBiZSBpbiB0aGUgcGFzdCcpO1xuICAgIH1cbiAgICBpZiAoaXNlbXB0eUxhbmRpbmcpIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBzZWxlY3QgbGFuZGluZyBhaXJwb3J0KHMpJyk7XG4gICAgaWYgKGlzZW1wdHlWYWx1ZSkgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIHNlbGVjdCB0YWtlIG9mZiBhaXJwb3J0KHMpJyk7XG4gICAgaWYgKGlzU2FtZVZhbHVlKVxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnVGFrZSBvZmYgYW5kIGxhbmRpbmcgbG9jYXRpb24ocykgY2Fubm90IGJlIHRoZSBzYW1lJyk7XG4gIH1cbiAgc3RhcnRTZWFyY2goKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdGhpcy5yZXN1bHRzLm5leHQoW10pO1xuICAgIHRoaXMuc2VsZWN0ZWRGbGlnaHQubmV4dChudWxsKTtcbiAgICBjb25zdCBzczogYW55ID0gdGhpcy5zc29PYmplY3Q7XG4gICAgaWYgKHNzICYmICFzcy5zZWFyY2hlZCkge1xuICAgICAgdGhpcy5pc0xvYWRpbmdTU08gPSB0cnVlO1xuICAgICAgY29uc29sZS53YXJuKCcrKysgU3RhcnRpbmcgc2VhcmNoIGZyb20gc3NvIG9iamVjdCArKysnKTtcbiAgICAgIHNzLnNlYXJjaGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuZmFyZVR5cGUgPSBzcy5mYXJlVHlwZSBhcyBGYXJlVHlwZTtcbiAgICAgIHRoaXMuaW5jbHVkZU5lYXJieUFpcnBvcnRzID0gc3MuaW5jbHVkZU5lYXJieUFpcnBvcnRzID09PSAndHJ1ZScgPyB0cnVlIDogZmFsc2U7XG4gICAgICAvLyB0aGlzLl9vcmlnaW5BaXJwb3J0PSBzcy5vcmlnaW5BaXJwb3J0O1xuICAgICAgdGhpcy5vdXRib3VuZENhYmluQ2xhc3MgPSBzcy5vdXRib3VuZENhYmluQ2xhc3M7XG4gICAgICB0aGlzLmNhYmluQ2xhc3MgPSBzcy5vdXRib3VuZENhYmluQ2xhc3M7XG4gICAgICBjb25zdCBzcGxpdE91dERhdGUgPSBzcy5vdXRib3VuZERhdGUuc3BsaXQoJy0nKTtcbiAgICAgIGNvbnN0IG91dERhdGVPYmogPSB7XG4gICAgICAgIHllYXI6ICtzcGxpdE91dERhdGVbMF0sXG4gICAgICAgIG1vbnRoOiArc3BsaXRPdXREYXRlWzFdLFxuICAgICAgICBkYXk6ICtzcGxpdE91dERhdGVbMl1cbiAgICAgIH07XG4gICAgICB0aGlzLmRlcGFydERhdGUgPSBvdXREYXRlT2JqO1xuICAgICAgdGhpcy5kZXBhcnRUaW1lID0gYCR7c3Mub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93LnN1YnN0cihcbiAgICAgICAgMCxcbiAgICAgICAgMlxuICAgICAgKX06JHtzcy5vdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3cuc3Vic3RyKDIsIDIpfWA7XG4gICAgICB0aGlzLnJldHVybkNhYmluQ2xhc3MgPSBzcy5yZXR1cm5DYWJpbkNsYXNzIGFzIEZsaWdodENhYmluQ2xhc3M7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzcGxpdFJldERhdGUgPSBzcy5yZXR1cm5EYXRlLnNwbGl0KCctJyk7XG4gICAgICAgIGNvbnN0IFJldERhdGVPYmogPSB7XG4gICAgICAgICAgeWVhcjogK3NwbGl0UmV0RGF0ZVswXSxcbiAgICAgICAgICBtb250aDogK3NwbGl0UmV0RGF0ZVsxXSxcbiAgICAgICAgICBkYXk6ICtzcGxpdFJldERhdGVbMl1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5yZXR1cm5EYXRlID0gUmV0RGF0ZU9iajtcbiAgICAgICAgdGhpcy5hcnJpdmVUaW1lID0gYCR7c3MucmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvdy5zdWJzdHIoXG4gICAgICAgICAgMCxcbiAgICAgICAgICAyXG4gICAgICAgICl9OiR7c3MucmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvdy5zdWJzdHIoMiwgMil9YDtcbiAgICAgICAgdGhpcy5tYXhDb25uZWN0aW9ucyA9IG51bGw7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLndhcm4oYCsrKyBVbmFibGUgdG8gc3BsaXQgcmV0dXJuIGRhdGUgLSBtYXkgbm90IGhhdmUgYmVlbiBwcm92aWRlZCArKytgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2hvc2VuU2VhcmNoVHlwZSA9XG4gICAgICAgIHNzLnJldHVyblRyaXAgPT09ICd0cnVlJyA/IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuIDogRmxpZ2h0U2VhcmNoVHlwZS5vbmVXYXk7XG4gICAgICBjb25zb2xlLndhcm4oYCsrKyBSZWNvdmVyaW5nIHNzbyBvcmlnaW4gYWlycG9ydDogJHtzcy5vcmlnaW5BaXJwb3J0fSArKytgKTtcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0c0xpc3Qoc3Mub3JpZ2luQWlycG9ydCkuc3Vic2NyaWJlKFxuICAgICAgICByZXN1bHRzID0+IHtcbiAgICAgICAgICB0aGlzLmRlcGFydExvY2F0aW9uID0gKHJlc3VsdHMgYXMgYW55W10pLmZpbmQoYSA9PiBhLmdhdGV3YXkgPT0gc3Mub3JpZ2luQWlycG9ydCk7XG4gICAgICAgICAgY29uc29sZS53YXJuKGArKysgUmVjb3ZlcmluZyBzc28gZGVzdGluYXRpb24gYWlycG9ydDogJHtzcy5kZXN0aW5hdGlvbkFpcnBvcnR9ICsrK2ApO1xuICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0c0xpc3Qoc3MuZGVzdGluYXRpb25BaXJwb3J0KS5zdWJzY3JpYmUoXG4gICAgICAgICAgICByZXN1bHRzID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5hcnJpdmVMb2NhdGlvbiA9IChyZXN1bHRzIGFzIGFueVtdKS5maW5kKFxuICAgICAgICAgICAgICAgIGEgPT4gYS5nYXRld2F5ID09IHNzLmRlc3RpbmF0aW9uQWlycG9ydFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB0aGlzLl9pc1ZhbGlkKCk7XG5cbiAgICAgICAgICAgICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignKysrIFNTTyBzZWFyY2ggaXMgdmFsaWQgKysrJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxVc2VyU2VhcmNoID0gT2JqZWN0LmZyZWV6ZSh0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy50ZW1wUGFyYW1zKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShGbGlnaHRFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsIHtcbiAgICAgICAgICAgICAgICAgIHRlbXBQYXJhbXM6IHRoaXMudGVtcFBhcmFtcyxcbiAgICAgICAgICAgICAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2hcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoXG4gICAgICAgICAgICAgICAgICBzc1xuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dGJvdW5kVGltZVdpbmRvdzogc3Mub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVGltZVdpbmRvdzogc3MucmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvd1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZVJlY2VudFNlYXJjaCh0aGlzLmdldFJlY2VudFNlYXJjaFF1ZXJ5KHF1ZXJ5KSk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc3NvT2JqZWN0O1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignKysrIHN0YXJ0aW5nIHNzbyBzZWFyY2ggKysrJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0U2VhcmNoKHRoaXMuZmxpZ2h0ZmV0Y2hlci5mZXRjaExpc3QocXVlcnkpKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCcrKysgU2VhcmNoIGlzIGludmFsaWQ6ICcsIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLCAnICsrKycpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nU1NPID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYCsrKyBFcnJvciByZWNvdmVyaW5nIGRlc3RpbmF0aW9uIGFpcnBvcnQ6ICR7ZXJyb3J9ICsrK2ApO1xuICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZ1NTTyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGArKysgRXJyb3IgcmVjb3ZlcmluZyBvcmlnaW4gYWlycG9ydDogJHtlcnJvcn0gKysrYCk7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmdTU08gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faXNWYWxpZCgpO1xuICAgICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xuICAgICAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBPYmplY3QuZnJlZXplKHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLnRlbXBQYXJhbXMpKTtcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShGbGlnaHRFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsIHtcbiAgICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXG4gICAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KFxuICAgICAgICAgIHNzXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBvdXRib3VuZFRpbWVXaW5kb3c6IHNzLm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvdyxcbiAgICAgICAgICAgICAgICByZXR1cm5UaW1lV2luZG93OiBzcy5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZVJlY2VudFNlYXJjaCh0aGlzLmdldFJlY2VudFNlYXJjaFF1ZXJ5KHF1ZXJ5KSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGFydFNlYXJjaCh0aGlzLmZsaWdodGZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnbXRTZWFyY2gocXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzKTogT2JzZXJ2YWJsZTxGbGlnaHRBbGxRdW90ZVJlc3VsdD4ge1xuICAgIHRoaXMudXBkYXRlVHJhdmVsbGVycygpO1xuICAgIHF1ZXJ5LnBhc3NlbmdlcnMgPSB0aGlzLl9wYXNzZW5nZXJzO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZmxpZ2h0ZmV0Y2hlci5mZXRjaExpc3QocXVlcnkpO1xuICAgIHRoaXMuX3N0YXJ0U2VhcmNoKHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGdldFJlY2VudFNlYXJjaFF1ZXJ5KHF1ZXJ5OiBJRmxpZ2h0U2VhcmNoQXJncyk6IFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyB7XG4gICAgaWYgKCh0aGlzLnZpYSBhcyBPQlRBaXJwb3J0RGV0YWlscyk/LmdhdGV3YXkpIHtcbiAgICAgIHF1ZXJ5LnZpYSA9ICh0aGlzLnZpYSBhcyBPQlRBaXJwb3J0RGV0YWlscykuZ2F0ZXdheTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudmlhKSB7XG4gICAgICBxdWVyeS52aWEgPSB0aGlzLnZpYSBhcyBzdHJpbmc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3V0VGltZUZsZXhpYmlsaXR5ICYmIHRoaXMub3V0VGltZUNyaXRlcmlhID09PSBUaW1lV2luZG93LkRlcGFydCkge1xuICAgICAgcXVlcnkub3V0VGltZUZsZXhpYmlsaXR5ID0gdGhpcy5vdXRUaW1lRmxleGliaWxpdHk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm91dFRpbWVDcml0ZXJpYSA9PT0gVGltZVdpbmRvdy5BcnJpdmUpIHtcbiAgICAgIHF1ZXJ5Lm91dFRpbWVGbGV4aWJpbGl0eSA9IDI7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW5UaW1lRmxleGliaWxpdHkgJiYgdGhpcy5pblRpbWVDcml0ZXJpYSA9PT0gVGltZVdpbmRvdy5EZXBhcnQpIHtcbiAgICAgIHF1ZXJ5LmluVGltZUZsZXhpYmlsaXR5ID0gdGhpcy5pblRpbWVGbGV4aWJpbGl0eTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaW5UaW1lQ3JpdGVyaWEgPT09IFRpbWVXaW5kb3cuQXJyaXZlKSB7XG4gICAgICBxdWVyeS5pblRpbWVGbGV4aWJpbGl0eSA9IDI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5GbGlnaHQsXG4gICAgICBzZWFyY2hBcmdzOiBxdWVyeSxcbiAgICAgIHRyYXZlbERhdGU6IHRoaXMub3V0Qm91bmREYXRlLmZvcm1hdCgpLFxuICAgICAgdHJhdmVsbGVyczogdGhpcy5oZWxwZXJzLmdldFRyYXZlbGxlcnNJZCh0aGlzLnRyYXZlbGxlcnMsIHRoaXMudXNlclNlcnZpY2UuYm9ibz8uaWQpXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzdGFydFJlY2VudFNlYXJjaChyZWNlbnRTZWFyY2g6IFJlY2VudFNlYXJjaCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlY2VudFNlYXJjaEFyZ3MgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncztcbiAgICBpZiAocmVjZW50U2VhcmNoQXJncy5vdXRUaW1lRmxleGliaWxpdHkpIHtcbiAgICAgIHRoaXMub3V0VGltZUZsZXhpYmlsaXR5ID0gcmVjZW50U2VhcmNoQXJncy5vdXRUaW1lRmxleGliaWxpdHk7XG4gICAgfVxuICAgIGlmIChyZWNlbnRTZWFyY2hBcmdzLm91dGJvdW5kRGF0ZSkge1xuICAgICAgbGV0IG91dGJvdW5kVGltZVdpbmRvdyA9IHJlY2VudFNlYXJjaEFyZ3Mub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93XG4gICAgICAgID8gcmVjZW50U2VhcmNoQXJncy5vdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3dcbiAgICAgICAgOiByZWNlbnRTZWFyY2hBcmdzLm91dGJvdW5kQXJyaXZhbFRpbWVXaW5kb3c7XG4gICAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IHRoaXMuY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKFxuICAgICAgICByZWNlbnRTZWFyY2hBcmdzLm91dGJvdW5kRGF0ZSxcbiAgICAgICAgb3V0Ym91bmRUaW1lV2luZG93LFxuICAgICAgICB0aGlzLm91dFRpbWVGbGV4aWJpbGl0eSB8fCAyXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChyZWNlbnRTZWFyY2hBcmdzLnJldHVybkRhdGUpIHtcbiAgICAgIGlmIChyZWNlbnRTZWFyY2hBcmdzLmluVGltZUZsZXhpYmlsaXR5KSB7XG4gICAgICAgIHRoaXMuaW5UaW1lRmxleGliaWxpdHkgPSByZWNlbnRTZWFyY2hBcmdzLmluVGltZUZsZXhpYmlsaXR5O1xuICAgICAgfVxuICAgICAgbGV0IHJldHVyblRpbWVXaW5kb3cgPSByZWNlbnRTZWFyY2hBcmdzLnJldHVybkRlcGFydHVyZVRpbWVXaW5kb3dcbiAgICAgICAgPyByZWNlbnRTZWFyY2hBcmdzLnJldHVybkRlcGFydHVyZVRpbWVXaW5kb3dcbiAgICAgICAgOiByZWNlbnRTZWFyY2hBcmdzLnJldHVybkFycml2YWxUaW1lV2luZG93O1xuICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKFxuICAgICAgICByZWNlbnRTZWFyY2hBcmdzLnJldHVybkRhdGUsXG4gICAgICAgIHJldHVyblRpbWVXaW5kb3csXG4gICAgICAgIHRoaXMuaW5UaW1lRmxleGliaWxpdHkgfHwgMlxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmZhcmVUeXBlID0gcmVjZW50U2VhcmNoQXJncy5mYXJlVHlwZTtcbiAgICB0aGlzLm1heENvbm5lY3Rpb25zID0gcmVjZW50U2VhcmNoQXJncy5tYXhDb25uZWN0aW9ucztcblxuICAgIGlmIChyZWNlbnRTZWFyY2hBcmdzLm91dGJvdW5kQ2FiaW5DbGFzcykge1xuICAgICAgdGhpcy5jYWJpbkNsYXNzID0gcmVjZW50U2VhcmNoQXJncy5vdXRib3VuZENhYmluQ2xhc3NbMF07XG4gICAgfVxuICAgIGlmIChyZWNlbnRTZWFyY2hBcmdzLnJldHVybkNhYmluQ2xhc3MpIHtcbiAgICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9IHJlY2VudFNlYXJjaEFyZ3MucmV0dXJuQ2FiaW5DbGFzc1swXTtcbiAgICB9XG5cbiAgICB0aGlzLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA9IHJlY2VudFNlYXJjaEFyZ3MuaW5jbHVkZU5lYXJieUFpcnBvcnRzID8gdHJ1ZSA6IGZhbHNlO1xuXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gcmVjZW50U2VhcmNoQXJncz8ubXVsdGlEZXN0aW5hdGlvbj8ubGVuZ3RoXG4gICAgICA/IEZsaWdodFNlYXJjaFR5cGUubXVsdGlDaXR5XG4gICAgICA6IHJlY2VudFNlYXJjaEFyZ3MucmV0dXJuVHJpcFxuICAgICAgPyBGbGlnaHRTZWFyY2hUeXBlLnJldHVyblxuICAgICAgOiBGbGlnaHRTZWFyY2hUeXBlLm9uZVdheTtcblxuICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3cpIHtcbiAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5EZXBhcnQ7XG4gICAgfSBlbHNlIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZEFycml2YWxUaW1lV2luZG93KSB7XG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQXJyaXZlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQW55dGltZTtcbiAgICB9XG5cbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvdykge1xuICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuRGVwYXJ0O1xuICAgIH0gZWxzZSBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuQXJyaXZhbFRpbWVXaW5kb3cpIHtcbiAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFycml2ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQW55dGltZTtcbiAgICB9XG5cbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MudmlhKSB7XG4gICAgICB0aGlzLnZpYSA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnZpYTtcbiAgICB9XG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaF9sb2FkaW5nID0gdHJ1ZTtcbiAgICBpZiAoIXJlY2VudFNlYXJjaEFyZ3M/Lm11bHRpRGVzdGluYXRpb24/Lmxlbmd0aCkge1xuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0QnlDb2RlKFxuICAgICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm9yaWdpbkFpcnBvcnQsXG4gICAgICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3JpZ2luTG9jYXRpb25UeXBlXG4gICAgICAgICksXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0QnlDb2RlKFxuICAgICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlc3RpbmF0aW9uQWlycG9ydCxcbiAgICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXN0aW5hdGlvbkxvY2F0aW9uVHlwZVxuICAgICAgICApXG4gICAgICBdKS5zdWJzY3JpYmUoKFtkZXBhcnRMb2NhdGlvbiwgYXJyaXZlTG9jYXRpb25dKSA9PiB7XG4gICAgICAgIGlmIChkZXBhcnRMb2NhdGlvbiAmJiBhcnJpdmVMb2NhdGlvbikge1xuICAgICAgICAgIHRoaXMuZGVwYXJ0TG9jYXRpb24gPSB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLm5hbWUsXG4gICAgICAgICAgICBnYXRld2F5OiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2guaWF0YSxcbiAgICAgICAgICAgIHRlcm1pbmFsczogdGhpcy5zZWFyY2hTZXJ2aWNlLnByb2Nlc3NUZXJtaW5hbHMoZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLnRlcm1pbmFscyksXG4gICAgICAgICAgICBjb3VudHJ5OiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeSxcbiAgICAgICAgICAgIHBvc3Rjb2RlOiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8ucG9zdGNvZGUsXG4gICAgICAgICAgICBjb3VudHJ5Q29kZTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlLFxuICAgICAgICAgICAgbG9jYXRpb25UeXBlOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vcmlnaW5Mb2NhdGlvblR5cGVcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuYXJyaXZlTG9jYXRpb24gPSB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLm5hbWUsXG4gICAgICAgICAgICBnYXRld2F5OiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2guaWF0YSxcbiAgICAgICAgICAgIHRlcm1pbmFsczogdGhpcy5zZWFyY2hTZXJ2aWNlLnByb2Nlc3NUZXJtaW5hbHMoYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLnRlcm1pbmFscyksXG4gICAgICAgICAgICBjb3VudHJ5OiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeSxcbiAgICAgICAgICAgIHBvc3Rjb2RlOiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8ucG9zdGNvZGUsXG4gICAgICAgICAgICBjb3VudHJ5Q29kZTogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlLFxuICAgICAgICAgICAgbG9jYXRpb25UeXBlOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXN0aW5hdGlvbkxvY2F0aW9uVHlwZVxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5Ib3RlbF0uY2hlY2tGb3JIb3RlbFJlbWluZGVyKCkgJiYgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaF9vYmplY3RzLkhPVEVMLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5Ib3RlbF0uY2hvc2VuID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2V0SG90ZWxQYXJhbXModHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5wcmVmZXJyZWRDYXJyaWVycykge1xuICAgICAgICAgICAgY29uc3QgcHJlZmVycmVkQ2FycmllcnM6IE9CVEFpcmxpbmVzRGV0YWlsc1tdID0gW107XG4gICAgICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5wcmVmZXJyZWRDYXJyaWVycy5tYXAoKHByZWZlcnJlZENhcnJ5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmdldEFpcmxpbmVzTGlzdChwcmVmZXJyZWRDYXJyeSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChpdGVtczogT0JUQWlybGluZXNEZXRhaWxzW10pID0+IHtcbiAgICAgICAgICAgICAgICAgIGl0ZW1zLm1hcCgoaXRlbTogT0JUQWlybGluZXNEZXRhaWxzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmNvZGUgPT09IHByZWZlcnJlZENhcnJ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgcHJlZmVycmVkQ2FycmllcnMucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB0aGlzLnByZWZlcnJlZENhcnJpZXJzID0gcHJlZmVycmVkQ2FycmllcnM7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zaW11bHRhbmVvdXNTZWFyY2hlc0NoZWNrKHRydWUpLnRoZW4odmFsID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAocmVjZW50U2VhcmNoQXJncz8ubXVsdGlEZXN0aW5hdGlvbj8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IG1vbWVudChyZWNlbnRTZWFyY2hBcmdzLm11bHRpRGVzdGluYXRpb25bMF0uZGF0ZSk7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZU11bHRpRGVzdGluYXRpb24ocmVjZW50U2VhcmNoQXJncyk7XG4gICAgICB0aGlzLmRlcGFydExvY2F0aW9uID0gdGhpcy5tdWx0aURlc3RpbmF0aW9uWzBdLm9yaWc7XG4gICAgICB0aGlzLmFycml2ZUxvY2F0aW9uID0gdGhpcy5tdWx0aURlc3RpbmF0aW9uWzBdLmRlc3Q7XG4gICAgICBpZiAodGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkhvdGVsXS5jaGVja0ZvckhvdGVsUmVtaW5kZXIoKSAmJiB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoX29iamVjdHMuSE9URUwuZW5hYmxlZCkge1xuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoX29iamVjdHNbU2VydmljZVR5cGUuSG90ZWxdLmNob3NlbiA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0SG90ZWxQYXJhbXModHJ1ZSk7XG4gICAgICB9XG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2ltdWx0YW5lb3VzU2VhcmNoZXNDaGVjayh0cnVlKS50aGVuKHZhbCA9PiB7XG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmlyc3QgaGVyZVxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcbiAgICB9XG4gIH1cblxuICBzZXRIb3RlbFBhcmFtcyhzdGFydFNlYXJjaGVzOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuSG90ZWxdLmNoZWNraW5fZGF0ZSA9IHRoaXMub3V0Qm91bmREYXRlO1xuICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5Ib3RlbF0uY2hlY2tvdXRfZGF0ZSA9IHRoaXMuaW5ib3VuZERhdGU7XG5cbiAgICBjb25zdCBsb2NhdGlvbiA9ICB0aGlzLmFycml2ZUxvY2F0aW9uIGFzIE9CVEFpcnBvcnREZXRhaWxzO1xuXG4gICAgbGV0IGhvdGVsQ291bnR5ID0ge1xuICAgICAgY0NvZGU6IGxvY2F0aW9uPy5jb3VudHJ5Q29kZSxcbiAgICAgIGNOYW1lOiBsb2NhdGlvbj8uY291bnRyeVxuICAgIH07XG5cbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuSG90ZWxdLmNvdW50cnkgPSBob3RlbENvdW50eTtcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuSG90ZWxdLmxvY2F0aW9uX3R5cGVfc2VsZWN0ID0gTG9jYXRpb25UeXBlcy5DaXR5O1xuXG4gICAgY29uc3QgY2l0eUxvY2F0aW9uID0gbG9jYXRpb24/LmRlc3RpbmF0aW9uLnNwbGl0KCcsJylbMF07XG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlXG4gICAgICAuZ2V0Q2l0eUxvY2F0aW9ucyhjaXR5TG9jYXRpb24sIGhvdGVsQ291bnR5LmNDb2RlKVxuICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgKHJlc3VsdHM6TG9jYXRpb25EZXRhaWxzW10pID0+IHtcbiAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuSG90ZWxdLmxvY2F0aW9uID0gcmVzdWx0cy5maW5kKHJlcyA9PiByZXMubmFtZSA9PT0gY2l0eUxvY2F0aW9uKSB8fCByZXN1bHRzWzBdO1xuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuSG90ZWxdLmxvY2F0aW9uICYmIHN0YXJ0U2VhcmNoZXMpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZU11bHRpRGVzdGluYXRpb24oZmF2OiBhbnkpIHtcbiAgICBjb25zdCBtdWx0aSA9IChhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGZhdi5tdWx0aURlc3RpbmF0aW9uLm1hcChcbiAgICAgICAgYXN5bmMgKGE6IHtcbiAgICAgICAgICBkYXRlOiBzdHJpbmc7XG4gICAgICAgICAgZGVzdDogc3RyaW5nO1xuICAgICAgICAgIG9yaWc6IHN0cmluZztcbiAgICAgICAgICBvcmlnaW5BaXJwb3J0RnVsbDogYW55O1xuICAgICAgICAgIGRlc3RpbmF0aW9uQWlycG9ydEZ1bGw6IGFueTtcbiAgICAgICAgICBvdXRUaW1lQ3JpdGVyaWE6IFRpbWVXaW5kb3c7XG4gICAgICAgICAgZGVwYXJ0dXJlVGltZVdpbmRvdzogc3RyaW5nO1xuICAgICAgICAgIGFycml2YWxUaW1lV2luZG93OiBzdHJpbmc7XG4gICAgICAgICAgb3JpZ2luTG9jYXRpb25UeXBlOiBMb2NhdGlvblR5cGU7XG4gICAgICAgICAgZGVzdGluYXRpb25Mb2NhdGlvblR5cGU6IExvY2F0aW9uVHlwZTtcbiAgICAgICAgfSkgPT4ge1xuICAgICAgICAgIGxldCBkZXN0aW5hdGlvbjoge1xuICAgICAgICAgICAgZGF0ZTogbW9tZW50Lk1vbWVudDtcbiAgICAgICAgICAgIGRlc3Q6IGFueTtcbiAgICAgICAgICAgIG9yaWc6IGFueTtcbiAgICAgICAgICAgIG9yaWdpbkFpcnBvcnRGdWxsOiBhbnk7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbkFpcnBvcnRGdWxsOiBhbnk7XG4gICAgICAgICAgICBvdXRUaW1lQ3JpdGVyaWE6IFRpbWVXaW5kb3c7XG4gICAgICAgICAgICBvdXRUaW1lRmxleGliaWxpdHk/OiBudW1iZXI7XG4gICAgICAgICAgICBvcmlnaW5Mb2NhdGlvblR5cGU6IExvY2F0aW9uVHlwZTtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uTG9jYXRpb25UeXBlOiBMb2NhdGlvblR5cGU7XG4gICAgICAgICAgfSA9IHtcbiAgICAgICAgICAgIGRhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGRlc3Q6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG9yaWc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG9yaWdpbkFpcnBvcnRGdWxsOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBkZXN0aW5hdGlvbkFpcnBvcnRGdWxsOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBvdXRUaW1lQ3JpdGVyaWE6IFRpbWVXaW5kb3cuQW55dGltZSxcbiAgICAgICAgICAgIG91dFRpbWVGbGV4aWJpbGl0eTogbnVsbCxcbiAgICAgICAgICAgIG9yaWdpbkxvY2F0aW9uVHlwZTogTG9jYXRpb25UeXBlLkEsXG4gICAgICAgICAgICBkZXN0aW5hdGlvbkxvY2F0aW9uVHlwZTogTG9jYXRpb25UeXBlLkFcbiAgICAgICAgICB9O1xuICAgICAgICAgIGRlc3RpbmF0aW9uLm9yaWcgPSBhd2FpdCB0aGlzLnNlYXJjaFNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRBaXJwb3J0c0xpc3QoYS5vcmlnLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBhLm9yaWdpbkxvY2F0aW9uVHlwZSlcbiAgICAgICAgICAgIC50b1Byb21pc2UoKVxuICAgICAgICAgICAgLnRoZW4ob3JpZ1Jlc3VsdHMgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gKG9yaWdSZXN1bHRzIGFzIGFueVtdKS5maW5kKGIgPT4gYi5nYXRld2F5ID09IGEub3JpZyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICBkZXN0aW5hdGlvbi5kZXN0ID0gYXdhaXQgdGhpcy5zZWFyY2hTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0QWlycG9ydHNMaXN0KGEuZGVzdCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgYS5kZXN0aW5hdGlvbkxvY2F0aW9uVHlwZSlcbiAgICAgICAgICAgIC50b1Byb21pc2UoKVxuICAgICAgICAgICAgLnRoZW4oZGVzdFJlc3VsdHMgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gKGRlc3RSZXN1bHRzIGFzIGFueVtdKS5maW5kKGIgPT4gYi5nYXRld2F5ID09IGEuZGVzdCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIGRlc3RpbmF0aW9uLm9yaWdpbkFpcnBvcnRGdWxsID0gYXdhaXQgdGhpcy5zZWFyY2hTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0QWlycG9ydHNMaXN0KGEuZGVzdCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgYS5kZXN0aW5hdGlvbkxvY2F0aW9uVHlwZSlcbiAgICAgICAgICAgIC50b1Byb21pc2UoKVxuICAgICAgICAgICAgLnRoZW4oZGVzdFJlc3VsdHMgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gKGRlc3RSZXN1bHRzIGFzIGFueVtdKS5maW5kKGIgPT4gYi5kZXN0aW5hdGlvbiA9PSBhLm9yaWdpbkFpcnBvcnRGdWxsKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgZGVzdGluYXRpb24uZGVzdGluYXRpb25BaXJwb3J0RnVsbCA9IGF3YWl0IHRoaXMuc2VhcmNoU2VydmljZVxuICAgICAgICAgICAgLmdldEFpcnBvcnRzTGlzdChhLmRlc3QsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIGEuZGVzdGluYXRpb25Mb2NhdGlvblR5cGUpXG4gICAgICAgICAgICAudG9Qcm9taXNlKClcbiAgICAgICAgICAgIC50aGVuKGRlc3RSZXN1bHRzID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIChkZXN0UmVzdWx0cyBhcyBhbnlbXSkuZmluZChiID0+IGIuZGVzdGluYXRpb24gPT0gYS5kZXN0aW5hdGlvbkFpcnBvcnRGdWxsKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKGEuZGVwYXJ0dXJlVGltZVdpbmRvdykge1xuICAgICAgICAgICAgZGVzdGluYXRpb24ub3V0VGltZUZsZXhpYmlsaXR5ID0gdGhpcy5oZWxwZXJzLmNhbGN1bGF0ZUR1cmF0aW9uSW5Ib3VycyhcbiAgICAgICAgICAgICAgYS5kZXBhcnR1cmVUaW1lV2luZG93XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYS5kYXRlKSB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbi5kYXRlID0gdGhpcy5jb252ZXJ0UmVjZW50U2VhcmNoRGF0ZVRpbWUoXG4gICAgICAgICAgICAgIGEuZGF0ZSxcbiAgICAgICAgICAgICAgYS5kZXBhcnR1cmVUaW1lV2luZG93IHx8IGEuYXJyaXZhbFRpbWVXaW5kb3csXG4gICAgICAgICAgICAgIGRlc3RpbmF0aW9uLm91dFRpbWVGbGV4aWJpbGl0eSB8fCAyXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhLmRlcGFydHVyZVRpbWVXaW5kb3cgfHwgYS5hcnJpdmFsVGltZVdpbmRvdykge1xuICAgICAgICAgICAgZGVzdGluYXRpb24ub3V0VGltZUNyaXRlcmlhID0gYS5kZXBhcnR1cmVUaW1lV2luZG93XG4gICAgICAgICAgICAgID8gVGltZVdpbmRvdy5EZXBhcnRcbiAgICAgICAgICAgICAgOiBUaW1lV2luZG93LkFycml2ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZGVzdGluYXRpb247XG4gICAgICAgIH1cbiAgICAgIClcbiAgICApKSBhcyBhbnlbXTtcblxuICAgIHRoaXMubXVsdGlEZXN0aW5hdGlvbiA9IG11bHRpO1xuICAgIHRoaXMuZGVwYXJ0TG9jYXRpb24gPSB0aGlzLm11bHRpRGVzdGluYXRpb25bMF0ub3JpZztcbiAgICB0aGlzLmFycml2ZUxvY2F0aW9uID0gdGhpcy5tdWx0aURlc3RpbmF0aW9uWzBdLmRlc3Q7XG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNpbXVsdGFuZW91c1NlYXJjaGVzQ2hlY2sodHJ1ZSkudGhlbih2YWwgPT4ge1xuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbWFrZURlcGFydHVyZVRpbWVXaW5kb3coXG4gICAgZGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQsXG4gICAgd2luZG93OiBUaW1lV2luZG93LFxuICAgIHR5cGU6IEZsaWdodFNlYXJjaFR5cGVcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCB0aW1lRmxleGliaWxpdHkgPVxuICAgICAgdHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5vbmVXYXlcbiAgICAgICAgPyB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUZsZXhpYmlsaXR5XG4gICAgICAgIDogdGhpcy50ZW1wUGFyYW1zLmluVGltZUZsZXhpYmlsaXR5O1xuXG4gICAgcmV0dXJuIHdpbmRvdyA9PT0gVGltZVdpbmRvdy5EZXBhcnRcbiAgICAgID8gdGhpcy5oZWxwZXJzLm1ha2VUaW1lV2luZG93KGRhdGVUaW1lLCAtdGltZUZsZXhpYmlsaXR5LCB0aW1lRmxleGliaWxpdHkpXG4gICAgICA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIG1ha2VBcnJpdmFsVGltZVdpbmRvdyhcbiAgICBkYXRlVGltZTogbW9tZW50Lk1vbWVudCxcbiAgICB3aW5kb3c6IFRpbWVXaW5kb3csXG4gICAgdHlwZTogRmxpZ2h0U2VhcmNoVHlwZVxuICApOiBzdHJpbmcge1xuICAgIGlmICh3aW5kb3cgIT09IFRpbWVXaW5kb3cuQXJyaXZlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lRmxleGliaWxpdHkgPVxuICAgICAgdHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5vbmVXYXlcbiAgICAgICAgPyB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUZsZXhpYmlsaXR5XG4gICAgICAgIDogdGhpcy50ZW1wUGFyYW1zLmluVGltZUZsZXhpYmlsaXR5O1xuXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5tYWtlVGltZVdpbmRvdyhkYXRlVGltZSwgLXRpbWVGbGV4aWJpbGl0eSwgMCk7XG4gIH1cblxuICBjb252ZXJ0UmVjZW50U2VhcmNoRGF0ZVRpbWUoZGF0ZTogc3RyaW5nLCB0aW1lV2luZG93Pzogc3RyaW5nLCBob3VyczogbnVtYmVyID0gMik6IG1vbWVudC5Nb21lbnQge1xuICAgIGlmICh0aW1lV2luZG93KSB7XG4gICAgICBjb25zdCBbc3RhcnRUaW1lXSA9IHRpbWVXaW5kb3cuc3BsaXQoJy0nKTtcbiAgICAgIGNvbnN0IHVwZGF0ZWRTdGFydFRpbWUgPSBtb21lbnQoc3RhcnRUaW1lLCAnSEhtbScpLmFkZChob3VycywgJ2hvdXJzJykuZm9ybWF0KCdISG1tJyk7XG4gICAgICByZXR1cm4gbW9tZW50KGAke2RhdGV9VCR7dXBkYXRlZFN0YXJ0VGltZX1gLCAnWVlZWS1NTS1ERFRISG1tJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBtb21lbnQoZGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0U2VhcmNoUXVlcnkoXG4gICAgdGltZVdpbmRvdzoge1xuICAgICAgb3V0Ym91bmRUaW1lV2luZG93OiBzdHJpbmc7XG4gICAgICByZXR1cm5UaW1lV2luZG93OiBzdHJpbmc7XG4gICAgfSA9IG51bGxcbiAgKTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMge1xuICAgIGNvbnN0IGlzTXVsdGlDaXR5QWN0aXZlID0gdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUubXVsdGlDaXR5O1xuICAgIHRoaXMuX211bHRpRGVzdGluYXRpb24gPSBpc011bHRpQ2l0eUFjdGl2ZVxuICAgICAgPyB0aGlzLnNldE11bHRpRGVzdGluYXRpb25RdWVyeSh0aGlzLnRlbXBQYXJhbXMubXVsdGlEZXN0aW5hdGlvbilcbiAgICAgIDogbnVsbDtcblxuICAgIHRoaXMuX211bHRpRGVzdGluYXRpb24gPVxuICAgICAgdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUubXVsdGlDaXR5XG4gICAgICAgID8gdGhpcy5zZXRNdWx0aURlc3RpbmF0aW9uUXVlcnkodGhpcy50ZW1wUGFyYW1zLm11bHRpRGVzdGluYXRpb24pXG4gICAgICAgIDogW107XG5cbiAgICBjb25zdCBtdWx0aUNpdHlDb25uZWN0aW9ucyA9XG4gICAgICB0aGlzLnRlbXBQYXJhbXMubWF4Q29ubmVjdGlvbnMgPT09IDAgJiYgaXNNdWx0aUNpdHlBY3RpdmVcbiAgICAgICAgPyB0aGlzLl9tdWx0aURlc3RpbmF0aW9uLmxlbmd0aCAtIDFcbiAgICAgICAgOiBudWxsO1xuXG4gICAgY29uc3QgaXNGbGlnaHRzR3JvdXBlZCA9IHRoaXMuc2VhcmNoU2VydmljZS5pc0ZsaWdodHNHcm91cGVkKCk7XG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcz4oXG4gICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICB7fSxcbiAgICAgICAgaXNNdWx0aUNpdHlBY3RpdmVcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgbXVsdGlEZXN0aW5hdGlvbjogdGhpcy5fbXVsdGlEZXN0aW5hdGlvblxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICBvcmlnaW5BaXJwb3J0OiB0aGlzLl9vcmlnaW5BaXJwb3J0LFxuICAgICAgICAgICAgICBvcmlnaW5BaXJwb3J0RnVsbDogdGhpcy5fb3JpZ2luQWlycG9ydEZ1bGwsXG4gICAgICAgICAgICAgIGRlc3RpbmF0aW9uQWlycG9ydDogdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0LFxuICAgICAgICAgICAgICBkZXN0aW5hdGlvbkFpcnBvcnRGdWxsOiB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnRGdWxsLFxuICAgICAgICAgICAgICBvcmlnaW5Mb2NhdGlvblR5cGU6IHRoaXMuX29yaWdpbkxvY2F0aW9uVHlwZSxcbiAgICAgICAgICAgICAgZGVzdGluYXRpb25Mb2NhdGlvblR5cGU6IHRoaXMuX2Rlc3RpbmF0aW9uTG9jYXRpb25UeXBlLFxuICAgICAgICAgICAgICBqb2luZXJPckxlYXZlcjogdGhpcy5pc0VybVRyYXZlbGxlcigpLFxuICAgICAgICAgICAgICBvdXRib3VuZERhdGU6IHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlKHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUpLFxuICAgICAgICAgICAgICBvdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3c6IHRpbWVXaW5kb3dcbiAgICAgICAgICAgICAgICA/IHRpbWVXaW5kb3cub3V0Ym91bmRUaW1lV2luZG93LnJlcGxhY2UoLyUzQS9nLCAnJylcbiAgICAgICAgICAgICAgICA6IHRoaXMubWFrZURlcGFydHVyZVRpbWVXaW5kb3coXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lQ3JpdGVyaWEsXG4gICAgICAgICAgICAgICAgICAgIEZsaWdodFNlYXJjaFR5cGUub25lV2F5XG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBvdXRib3VuZEFycml2YWxUaW1lV2luZG93OiB0aGlzLm1ha2VBcnJpdmFsVGltZVdpbmRvdyhcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlLFxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lQ3JpdGVyaWEsXG4gICAgICAgICAgICAgICAgRmxpZ2h0U2VhcmNoVHlwZS5vbmVXYXlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhc3NlbmdlcnM6IHRoaXMuX3Bhc3NlbmdlcnMsXG4gICAgICAgICAgcmV0dXJuVHJpcDogdGhpcy5pc1JldHVybixcbiAgICAgICAgICBvdXRib3VuZENhYmluQ2xhc3M6IHRoaXMudGVtcFBhcmFtcy5jYWJpbkNsYXNzID8gW3RoaXMudGVtcFBhcmFtcy5jYWJpbkNsYXNzXSA6IG51bGwsXG4gICAgICAgICAgcmVxdWlyZUZyZWVCYWc6IG51bGwsXG4gICAgICAgICAgbWF4Q29ubmVjdGlvbnM6IGlzTXVsdGlDaXR5QWN0aXZlID8gbXVsdGlDaXR5Q29ubmVjdGlvbnMgOiB0aGlzLnRlbXBQYXJhbXMubWF4Q29ubmVjdGlvbnMsXG4gICAgICAgICAgaW5jbHVkZU5lYXJieUFpcnBvcnRzOiBpc011bHRpQ2l0eUFjdGl2ZSA/IG51bGwgOiB0aGlzLnRlbXBQYXJhbXMuaW5jbHVkZU5lYXJieUFpcnBvcnRzLFxuICAgICAgICAgIHByZWZlcnJlZENhcnJpZXJzOiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnMubWFwKChjYXJyaWVyOiBPQlRBaXJsaW5lc0RldGFpbHMpID0+XG4gICAgICAgICAgICBjYXJyaWVyPy5jb2RlID8gY2Fycmllci5jb2RlIDogbnVsbFxuICAgICAgICAgICksXG4gICAgICAgICAgZmFyZVR5cGU6IHRoaXMudGVtcFBhcmFtcy5mYXJlVHlwZVxuICAgICAgICAgIC8vIHdpdGhHcm91cGVkOiBpc0ZsaWdodHNHcm91cGVkXG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMuaXNSZXR1cm5cbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgcmV0dXJuRGF0ZTogdGhpcy5oZWxwZXJzLmZvcm1hdElzb0RhdGUodGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlKSxcbiAgICAgICAgICAgICAgcmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvdzogdGltZVdpbmRvd1xuICAgICAgICAgICAgICAgID8gdGltZVdpbmRvdy5yZXR1cm5UaW1lV2luZG93LnJlcGxhY2UoLyUzQS9nLCAnJylcbiAgICAgICAgICAgICAgICA6IHRoaXMubWFrZURlcGFydHVyZVRpbWVXaW5kb3coXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmluVGltZUNyaXRlcmlhLFxuICAgICAgICAgICAgICAgICAgICBGbGlnaHRTZWFyY2hUeXBlLnJldHVyblxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgcmV0dXJuQXJyaXZhbFRpbWVXaW5kb3c6IHRoaXMubWFrZUFycml2YWxUaW1lV2luZG93KFxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSxcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuaW5UaW1lQ3JpdGVyaWEsXG4gICAgICAgICAgICAgICAgRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm5cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgcmV0dXJuQ2FiaW5DbGFzczogdGhpcy50ZW1wUGFyYW1zLnJldHVybkNhYmluQ2xhc3NcbiAgICAgICAgICAgICAgICA/IFt0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzc11cbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHt9XG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGlzRXJtVHJhdmVsbGVyKCk6IEVybVRyYXZlbGxlclR5cGUge1xuICAgIGlmIChcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5lcm1UcmF2ZWxsZXJUeXBlICYmXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZXJtVHJhdmVsbGVyVHlwZSAhPT0gRXJtVHJhdmVsbGVyVHlwZS5Ob25lXG4gICAgKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hTZXJ2aWNlLmVybVRyYXZlbGxlclR5cGU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVUcmF2ZWxsZXJzKCkge1xuICAgIGNvbnN0IHRyYXZlbGxlcnM6IEZsaWdodFBhc3Nlbmdlck9iamVjdFtdID0gW107XG4gICAgZm9yIChsZXQgbG9vcCA9IDA7IGxvb3AgPCB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzOyBsb29wICs9IDEpIHtcbiAgICAgIHRyYXZlbGxlcnMucHVzaCh7IHR5cGU6IEZsaWdodFBhc3NlbmdlclR5cGUuQWR1bHQgfSk7XG4gICAgfVxuICAgIGZvciAobGV0IGxvb3AgPSAwOyBsb29wIDwgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuOyBsb29wICs9IDEpIHtcbiAgICAgIHRyYXZlbGxlcnMucHVzaCh7IHR5cGU6IEZsaWdodFBhc3NlbmdlclR5cGUuQ2hpbGQgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGFzc2VuZ2VycyA9IHRyYXZlbGxlcnM7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWFyY2hEZWZhdWx0cygpIHtcbiAgICBjb25zdCBoaWRlQ2xhc3NlcyA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckZhdm9yaXRlT2JqZWN0PGFueT4oXG4gICAgICBVc2VyRmF2b3J1cml0ZS5GbGlnaHRTZWFyY2hEZWZhdWx0c1xuICAgICkgfHwge1xuICAgICAgY2xhc3NTZWxlY3Rpb246IHtcbiAgICAgICAgYW55OiBmYWxzZSxcbiAgICAgICAgYnVzaW5lc3M6IGZhbHNlLFxuICAgICAgICBlY29ub215OiBmYWxzZSxcbiAgICAgICAgZmlyc3Q6IGZhbHNlLFxuICAgICAgICBwcmVtaXVtOiBmYWxzZVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvcHRpb25zOiB7IG5hbWU6IHN0cmluZzsgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcyB9W10gPSBbXTtcbiAgICBpZiAoIWhpZGVDbGFzc2VzLmNsYXNzU2VsZWN0aW9uLmVjb25vbXkpIHtcbiAgICAgIG9wdGlvbnMucHVzaCh7IG5hbWU6ICdFY29ub215JywgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215IH0pO1xuICAgIH1cblxuICAgIGlmICghaGlkZUNsYXNzZXMuY2xhc3NTZWxlY3Rpb24ucHJlbWl1bSkge1xuICAgICAgb3B0aW9ucy5wdXNoKHsgbmFtZTogJ1ByZW1pdW0nLCB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215IH0pO1xuICAgIH1cblxuICAgIGlmICghaGlkZUNsYXNzZXMuY2xhc3NTZWxlY3Rpb24uYnVzaW5lc3MpIHtcbiAgICAgIG9wdGlvbnMucHVzaCh7IG5hbWU6ICdCdXNpbmVzcycsIHR5cGU6IEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3MgfSk7XG4gICAgfVxuXG4gICAgaWYgKCFoaWRlQ2xhc3Nlcy5jbGFzc1NlbGVjdGlvbi5maXJzdCkge1xuICAgICAgb3B0aW9ucy5wdXNoKHsgbmFtZTogJ0ZpcnN0JywgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdCB9KTtcbiAgICB9XG5cbiAgICBpZiAoIWhpZGVDbGFzc2VzLmNsYXNzU2VsZWN0aW9uLmFueSkge1xuICAgICAgb3B0aW9ucy5wdXNoKHsgbmFtZTogJ0FueScsIHR5cGU6IEZsaWdodENhYmluQ2xhc3MuQW55IH0pO1xuICAgIH1cblxuICAgIHRoaXMuY2FiaW5DbGFzcyA9IHRoaXMuZ2V0VXBkYXRlZENhYmluQ2xhc3ModGhpcy5jYWJpbkNsYXNzLCBoaWRlQ2xhc3Nlcywgb3B0aW9ucyk7XG4gICAgdGhpcy5yZXR1cm5DYWJpbkNsYXNzID0gdGhpcy5nZXRVcGRhdGVkQ2FiaW5DbGFzcyh0aGlzLnJldHVybkNhYmluQ2xhc3MsIGhpZGVDbGFzc2VzLCBvcHRpb25zKTtcbiAgICB0aGlzLmF2YWxpYWJsZUNsYXNzZXMubmV4dChvcHRpb25zKTtcblxuICAgIGlmIChoaWRlQ2xhc3Nlcz8uaGlkZUZsaWdodENhYmluQ2xhc3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fc2hvd0NhYmluQ2xhc3NTZWxlY3Rpb24gPSAhaGlkZUNsYXNzZXMuaGlkZUZsaWdodENhYmluQ2xhc3M7XG4gICAgICB0aGlzLmNhYmluQ2xhc3MgPSB0aGlzLmdldFVwZGF0ZWRDYWJpbkNsYXNzKHRoaXMuY2FiaW5DbGFzcywgaGlkZUNsYXNzZXMsIG9wdGlvbnMpO1xuICAgICAgdGhpcy5yZXR1cm5DYWJpbkNsYXNzID0gdGhpcy5nZXRVcGRhdGVkQ2FiaW5DbGFzcyh0aGlzLmNhYmluQ2xhc3MsIGhpZGVDbGFzc2VzLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAoaGlkZUNsYXNzZXM/LmhpZGVDaG9vc2VBaXJsaW5lcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9zaG93UHJlZmVycmVkQWlybGluZXMgPSAhaGlkZUNsYXNzZXMuaGlkZUNob29zZUFpcmxpbmVzO1xuICAgIH1cblxuICAgIGlmIChoaWRlQ2xhc3Nlcz8udGltZVNlbGVjdGlvbkRlZmF1bHQpIHtcbiAgICAgIHN3aXRjaCAoaGlkZUNsYXNzZXMudGltZVNlbGVjdGlvbkRlZmF1bHQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlICdhbnl0aW1lJzpcbiAgICAgICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQW55dGltZTtcbiAgICAgICAgICB0aGlzLmluVGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5Bbnl0aW1lO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdhcnJpdmUnOlxuICAgICAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5BcnJpdmU7XG4gICAgICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQXJyaXZlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdkZXBhcnQnOlxuICAgICAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5EZXBhcnQ7XG4gICAgICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuRGVwYXJ0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGArKysgVW5rbm93biB0aW1lIHNlbGVjdGlvbiBkZWZhdWx0OiAke2hpZGVDbGFzc2VzLnRpbWVTZWxlY3Rpb25EZWZhdWx0fSArKytgXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFVwZGF0ZWRDYWJpbkNsYXNzKFxuICAgIGNhYmluQ2xhc3M6IEZsaWdodENhYmluQ2xhc3MsXG4gICAgaGlkZUNsYXNzZXM6IGFueSxcbiAgICBvcHRpb25zOiB7IG5hbWU6IHN0cmluZzsgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcyB9W11cbiAgKTogRmxpZ2h0Q2FiaW5DbGFzcyB7XG4gICAgc3dpdGNoIChjYWJpbkNsYXNzKSB7XG4gICAgICBjYXNlIEZsaWdodENhYmluQ2xhc3MuQW55OlxuICAgICAgICByZXR1cm4gaGlkZUNsYXNzZXMuY2xhc3NTZWxlY3Rpb24uYW55ID8gb3B0aW9uc1swXS50eXBlIDogY2FiaW5DbGFzcztcbiAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzczpcbiAgICAgICAgcmV0dXJuIGhpZGVDbGFzc2VzLmNsYXNzU2VsZWN0aW9uLmJ1c2luZXNzID8gb3B0aW9uc1swXS50eXBlIDogY2FiaW5DbGFzcztcbiAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215OlxuICAgICAgICByZXR1cm4gaGlkZUNsYXNzZXMuY2xhc3NTZWxlY3Rpb24uZWNvbm9teSA/IG9wdGlvbnNbMF0udHlwZSA6IGNhYmluQ2xhc3M7XG4gICAgICBjYXNlIEZsaWdodENhYmluQ2xhc3MuRmlyc3Q6XG4gICAgICAgIHJldHVybiBoaWRlQ2xhc3Nlcy5jbGFzc1NlbGVjdGlvbi5maXJzdCA/IG9wdGlvbnNbMF0udHlwZSA6IGNhYmluQ2xhc3M7XG4gICAgICBjYXNlIEZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXk6XG4gICAgICAgIHJldHVybiBoaWRlQ2xhc3Nlcy5jbGFzc1NlbGVjdGlvbi5wcmVtaXVtID8gb3B0aW9uc1swXS50eXBlIDogY2FiaW5DbGFzcztcbiAgICB9XG4gICAgcmV0dXJuIGNhYmluQ2xhc3M7XG4gIH1cbiAgdXBkYXRlRnJvbVByZXZpb3VzU2VhcmNoZXMoX3ByZXZpb3VzSXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT4pOiB2b2lkIHtcbiAgICAvLyBGbGlnaHRzIGNhbiBub3QgYmUgc2VhcmNoIGFmdGVyIG90aGVyIHByb2R1Y3RzIHNvIG5vIGRlZmF1bHRzIGNhbiBiZSBzZXQuXG4gIH1cblxuICB1cGRhdGVTZWFyY2hGcm9tRXhwaXJlZEJhc2tldEl0ZW0oYmFza2V0SXRlbTogQmFza2V0SXRlbSk6IHZvaWQge1xuICAgIGNvbnN0IHNlYXJjaEZsaWdodHNRdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMgPSBiYXNrZXRJdGVtLnNlYXJjaFF1ZXJ5O1xuICAgIGlmIChzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmREYXRlKSB7XG4gICAgICBsZXQgb3V0Ym91bmRUaW1lV2luZG93ID0gc2VhcmNoRmxpZ2h0c1F1ZXJ5Lm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvd1xuICAgICAgICA/IHNlYXJjaEZsaWdodHNRdWVyeS5vdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3dcbiAgICAgICAgOiBzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdztcbiAgICAgIHRoaXMub3V0Qm91bmREYXRlID0gdGhpcy5jb252ZXJ0UmVjZW50U2VhcmNoRGF0ZVRpbWUoXG4gICAgICAgIHNlYXJjaEZsaWdodHNRdWVyeS5vdXRib3VuZERhdGUsXG4gICAgICAgIG91dGJvdW5kVGltZVdpbmRvd1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoc2VhcmNoRmxpZ2h0c1F1ZXJ5LnJldHVybkRhdGUpIHtcbiAgICAgIGxldCByZXR1cm5UaW1lV2luZG93ID0gc2VhcmNoRmxpZ2h0c1F1ZXJ5LnJldHVybkRlcGFydHVyZVRpbWVXaW5kb3dcbiAgICAgICAgPyBzZWFyY2hGbGlnaHRzUXVlcnkucmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvd1xuICAgICAgICA6IHNlYXJjaEZsaWdodHNRdWVyeS5yZXR1cm5BcnJpdmFsVGltZVdpbmRvdztcbiAgICAgIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmNvbnZlcnRSZWNlbnRTZWFyY2hEYXRlVGltZShcbiAgICAgICAgc2VhcmNoRmxpZ2h0c1F1ZXJ5LnJldHVybkRhdGUsXG4gICAgICAgIHJldHVyblRpbWVXaW5kb3dcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5mYXJlVHlwZSA9IHNlYXJjaEZsaWdodHNRdWVyeS5mYXJlVHlwZTtcbiAgICB0aGlzLm1heENvbm5lY3Rpb25zID0gc2VhcmNoRmxpZ2h0c1F1ZXJ5Lm1heENvbm5lY3Rpb25zO1xuXG4gICAgaWYgKHNlYXJjaEZsaWdodHNRdWVyeS5vdXRib3VuZENhYmluQ2xhc3MpIHtcbiAgICAgIHRoaXMuY2FiaW5DbGFzcyA9IHNlYXJjaEZsaWdodHNRdWVyeS5vdXRib3VuZENhYmluQ2xhc3NbMF0gYXMgRmxpZ2h0Q2FiaW5DbGFzcztcbiAgICB9XG4gICAgaWYgKHNlYXJjaEZsaWdodHNRdWVyeS5yZXR1cm5DYWJpbkNsYXNzKSB7XG4gICAgICB0aGlzLnJldHVybkNhYmluQ2xhc3MgPSBzZWFyY2hGbGlnaHRzUXVlcnkucmV0dXJuQ2FiaW5DbGFzc1swXSBhcyBGbGlnaHRDYWJpbkNsYXNzO1xuICAgIH1cblxuICAgIHRoaXMuaW5jbHVkZU5lYXJieUFpcnBvcnRzID0gc2VhcmNoRmxpZ2h0c1F1ZXJ5LmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA/IHRydWUgOiBmYWxzZTtcblxuICAgIHRoaXMuY2hvc2VuU2VhcmNoVHlwZSA9IHNlYXJjaEZsaWdodHNRdWVyeS5yZXR1cm5UcmlwXG4gICAgICA/IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuXG4gICAgICA6IEZsaWdodFNlYXJjaFR5cGUub25lV2F5O1xuXG4gICAgaWYgKHNlYXJjaEZsaWdodHNRdWVyeS5vdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3cpIHtcbiAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5EZXBhcnQ7XG4gICAgfSBlbHNlIGlmIChzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdykge1xuICAgICAgdGhpcy5vdXRUaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFycml2ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vdXRUaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFueXRpbWU7XG4gICAgfVxuXG4gICAgaWYgKHNlYXJjaEZsaWdodHNRdWVyeS5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93KSB7XG4gICAgICB0aGlzLmluVGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5EZXBhcnQ7XG4gICAgfSBlbHNlIGlmIChzZWFyY2hGbGlnaHRzUXVlcnkucmV0dXJuQXJyaXZhbFRpbWVXaW5kb3cpIHtcbiAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFycml2ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQW55dGltZTtcbiAgICB9XG5cbiAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0QnlDb2RlKFxuICAgICAgICBzZWFyY2hGbGlnaHRzUXVlcnkub3JpZ2luQWlycG9ydCxcbiAgICAgICAgc2VhcmNoRmxpZ2h0c1F1ZXJ5Lm9yaWdpbkxvY2F0aW9uVHlwZVxuICAgICAgKSxcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0QnlDb2RlKFxuICAgICAgICBzZWFyY2hGbGlnaHRzUXVlcnkuZGVzdGluYXRpb25BaXJwb3J0LFxuICAgICAgICBzZWFyY2hGbGlnaHRzUXVlcnkuZGVzdGluYXRpb25Mb2NhdGlvblR5cGVcbiAgICAgIClcbiAgICBdKS5zdWJzY3JpYmUoKFtkZXBhcnRMb2NhdGlvbiwgYXJyaXZlTG9jYXRpb25dKSA9PiB7XG4gICAgICBpZiAoZGVwYXJ0TG9jYXRpb24gJiYgYXJyaXZlTG9jYXRpb24pIHtcbiAgICAgICAgdGhpcy5kZXBhcnRMb2NhdGlvbiA9IHtcbiAgICAgICAgICBkZXN0aW5hdGlvbjogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLm5hbWUsXG4gICAgICAgICAgZ2F0ZXdheTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLmlhdGEsXG4gICAgICAgICAgdGVybWluYWxzOiB0aGlzLnNlYXJjaFNlcnZpY2UucHJvY2Vzc1Rlcm1pbmFscyhkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2gudGVybWluYWxzKSxcbiAgICAgICAgICBjb3VudHJ5OiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeSxcbiAgICAgICAgICBwb3N0Y29kZTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LnBvc3Rjb2RlLFxuICAgICAgICAgIGNvdW50cnlDb2RlOiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeUNvZGUsXG4gICAgICAgICAgbG9jYXRpb25UeXBlOiBzZWFyY2hGbGlnaHRzUXVlcnkub3JpZ2luTG9jYXRpb25UeXBlXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuYXJyaXZlTG9jYXRpb24gPSB7XG4gICAgICAgICAgZGVzdGluYXRpb246IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC5uYW1lLFxuICAgICAgICAgIGdhdGV3YXk6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC5pYXRhLFxuICAgICAgICAgIHRlcm1pbmFsczogdGhpcy5zZWFyY2hTZXJ2aWNlLnByb2Nlc3NUZXJtaW5hbHMoYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLnRlcm1pbmFscyksXG4gICAgICAgICAgY291bnRyeTogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnksXG4gICAgICAgICAgcG9zdGNvZGU6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5wb3N0Y29kZSxcbiAgICAgICAgICBjb3VudHJ5Q29kZTogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlLFxuICAgICAgICAgIGxvY2F0aW9uVHlwZTogc2VhcmNoRmxpZ2h0c1F1ZXJ5LmRlc3RpbmF0aW9uTG9jYXRpb25UeXBlXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHNlYXJjaEZsaWdodHNRdWVyeS5wcmVmZXJyZWRDYXJyaWVycykge1xuICAgICAgICAgIGxldCBjYXJyaWVyczogc3RyaW5nW10gPSBzZWFyY2hGbGlnaHRzUXVlcnkucHJlZmVycmVkQ2FycmllcnMgYXMgc3RyaW5nW107XG4gICAgICAgICAgY29uc3QgcHJlZmVycmVkQ2FycmllcnM6IE9CVEFpcmxpbmVzRGV0YWlsc1tdID0gW107XG4gICAgICAgICAgY2FycmllcnMubWFwKChwcmVmZXJyZWRDYXJyeTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2VcbiAgICAgICAgICAgICAgLmdldEFpcmxpbmVzTGlzdChwcmVmZXJyZWRDYXJyeSlcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSgoaXRlbXM6IE9CVEFpcmxpbmVzRGV0YWlsc1tdKSA9PiB7XG4gICAgICAgICAgICAgICAgaXRlbXMubWFwKChpdGVtOiBPQlRBaXJsaW5lc0RldGFpbHMpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmNvZGUgPT09IHByZWZlcnJlZENhcnJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIHByZWZlcnJlZENhcnJpZXJzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVmZXJyZWRDYXJyaWVycyA9IHByZWZlcnJlZENhcnJpZXJzO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gYWRkIFRyYXZlbGxlcnNcbiAgICBpZiAoYmFza2V0SXRlbS51c2Vycykge1xuICAgICAgYmFza2V0SXRlbS51c2Vycy5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmFkZFRyYXZlbGxlcih1c2VyKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldFRvdGFsQmFnZ2FnZShmYXJlOiBGbGlnaHRJdGluZXJhcnksIGlzT3V0Ym91bmQgPSB0cnVlKTogbnVtYmVyIHtcbiAgICBjb25zdCBjaGVja0JhZ2dhZ2VzID0gdGhpcy5nZXRCYWdnYWdlQWxsb3dhbmNlKGZhcmUpO1xuICAgIGNvbnN0IGNoZWNrQmFnZ2FnZUFtb3VudHNPdXQgPSBjaGVja0JhZ2dhZ2VzXG4gICAgICA/LmZpbHRlcihhID0+IGE/LnR5cGUgPT09ICdDaGVja0luJyAmJiAhYS5pc0luKVxuICAgICAgLm1hcChhID0+IGE/LnF0eSkgYXMgbnVtYmVyW107XG4gICAgY29uc3QgY2hlY2tCYWdnYWdlQW1vdW50c0luID0gY2hlY2tCYWdnYWdlc1xuICAgICAgPy5maWx0ZXIoYSA9PiBhPy50eXBlID09PSAnQ2hlY2tJbicgJiYgYS5pc0luKVxuICAgICAgLm1hcChhID0+IGE/LnF0eSkgYXMgbnVtYmVyW107XG4gICAgICBpZiAoaXNPdXRib3VuZCkge1xuICAgICAgICByZXR1cm4gY2hlY2tCYWdnYWdlQW1vdW50c091dC5sZW5ndGggPyBNYXRoLm1pbiguLi5jaGVja0JhZ2dhZ2VBbW91bnRzT3V0KSA6IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY2hlY2tCYWdnYWdlQW1vdW50c0luLmxlbmd0aCA/IE1hdGgubWluKC4uLmNoZWNrQmFnZ2FnZUFtb3VudHNJbikgOiAwO1xuICAgICAgfVxuICB9XG5cbiAgZ2V0SGFuZEJhZ2dhZ2UoZmFyZTogRmxpZ2h0SXRpbmVyYXJ5KTogbnVtYmVyIHtcbiAgICBjb25zdCBjaGVja0JhZ2dhZ2VzID0gdGhpcy5nZXRCYWdnYWdlQWxsb3dhbmNlKGZhcmUpO1xuICAgIGNvbnN0IGhhbmRCYWdnYWdlQW1vdW50cyA9IGNoZWNrQmFnZ2FnZXNcbiAgICAgID8uZmlsdGVyKGEgPT4gYT8udHlwZSA9PT0gJ0hhbmRDYXJyeScpXG4gICAgICAubWFwKGEgPT4gYT8ucXR5KSBhcyBudW1iZXJbXTtcbiAgICByZXR1cm4gaGFuZEJhZ2dhZ2VBbW91bnRzLmxlbmd0aCA/IE1hdGgubWluKC4uLmhhbmRCYWdnYWdlQW1vdW50cykgOiAwO1xuICB9XG5cbiAgZ2V0QmFnZ2FnZUFsbG93YW5jZShmYXJlOiBGbGlnaHRJdGluZXJhcnkpOiB7IHR5cGU6IHN0cmluZzsgcXR5OiBudW1iZXI7IGlzSW46IGJvb2xlYW4gfVtdIHtcbiAgICBjb25zdCBjaGVja0JhZ2dhZ2VzOiB7IHR5cGU6IHN0cmluZzsgcXR5OiBudW1iZXI7IGlzSW46IGJvb2xlYW4gfVtdID0gW107XG4gICAgZmFyZT8ub3V0Ym91bmRGbGlnaHRzLmZvckVhY2goZmxpZ2h0ID0+IHtcbiAgICAgIGlmIChmbGlnaHQuYWRkaXRpb25hbD8uYmFnZ2FnZUFsbG93YW5jZT8ubGVuZ3RoKSB7XG4gICAgICAgIGNoZWNrQmFnZ2FnZXMucHVzaCguLi5mbGlnaHQuYWRkaXRpb25hbC5iYWdnYWdlQWxsb3dhbmNlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChmYXJlPy5pbmJvdW5kRmxpZ2h0cy5sZW5ndGgpIHtcbiAgICAgIGZhcmUuaW5ib3VuZEZsaWdodHMuZm9yRWFjaChmbGlnaHQgPT4ge1xuICAgICAgICBpZiAoZmxpZ2h0Py5hZGRpdGlvbmFsPy5iYWdnYWdlQWxsb3dhbmNlPy5sZW5ndGgpIHtcbiAgICAgICAgICBjaGVja0JhZ2dhZ2VzLnB1c2goLi4uZmxpZ2h0LmFkZGl0aW9uYWwuYmFnZ2FnZUFsbG93YW5jZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBjaGVja0JhZ2dhZ2VzO1xuICB9XG4gIC8vIGlzR3JvdXBlZEZsaWdodHModG9UZXN0OiBGbGlnaHRRdW90ZVJlc3VsdEFycmF5KTogdG9UZXN0IGlzIEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFtdIHtcbiAgLy8gICByZXR1cm4gdG9UZXN0WzBdPy50eXBlID09PSAnRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0JztcbiAgLy8gfVxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gZmlsdGVyIHRoZSByZXN1bHRzLCB0aGVuIHNvcnQgdGhlIHJlbWFpbmRlclxuICAgKiBAdG9kbyAtIEFkZCBmaWx0ZXJzIGZvciB0cmF2ZWwgcG9saWN5LCBmYXJlIHR5cGVzIGFuZCBhbmNpbGxpYXJpZXNcbiAgICovXG4gIGFwcGx5RmlsdGVycyhmaWx0ZXJzOiBGbGlnaHRGaWx0ZXJzLCBzb3J0VmFsdWU6IEZsaWdodFNvcnRUeXBlcyk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudEZpbHRlcnMgPSBmaWx0ZXJzO1xuICAgIHRoaXMuY3VycmVudFNvcnQgPSBzb3J0VmFsdWU7XG4gICAgLy8gY29uc29sZS5sb2coJysrKyBBcHBseWluZyBGaWx0ZXJzIHRvIGZsaWdodHM6ICcsIGZpbHRlcnMsICcgKysrJyk7XG4gICAgaWYgKHRoaXMuZnVsbFJlc3VsdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnJlc3VsdHMubmV4dChbXSk7XG4gICAgfVxuXG4gICAgLy8gY29uc3QgZmlsdGVyU2VsZWN0ZWRGbGlnaHRzOiAoXG4gICAgLy8gICBncm91cHNUb1Nob3c6IG51bWJlcltdLFxuICAgIC8vICAgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtXG4gICAgLy8gKSA9PiAoZjogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuID0gdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0XG4gICAgLy8gICA/IHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodC5pbmJvdW5kRmxpZ2h0cz8ubGVuZ3RoXG4gICAgLy8gICAgID8gKGdyb3Vwc1RvU2hvdzogbnVtYmVyW10sIGRpcmVjdGlvbjogRmxpZ2h0RGlyZWN0aW9uRW51bSkgPT4ge1xuICAgIC8vICAgICAgICAgcmV0dXJuIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xuICAgIC8vICAgICAgICAgICByZXR1cm4gKFxuICAgIC8vICAgICAgICAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5EdWFsU2luZ2xlSW5ib3VuZCB8fFxuICAgIC8vICAgICAgICAgICAgIGdyb3Vwc1RvU2hvdy5pbmNsdWRlcyhmbGlnaHRJdGluZXJhcnkudWlkKVxuICAgIC8vICAgICAgICAgICApO1xuICAgIC8vICAgICAgICAgfTtcbiAgICAvLyAgICAgICB9XG4gICAgLy8gICAgIDogKGdyb3Vwc1RvU2hvdzogbnVtYmVyW10sIGRpcmVjdGlvbjogRmxpZ2h0RGlyZWN0aW9uRW51bSkgPT4ge1xuICAgIC8vICAgICAgICAgcmV0dXJuIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xuICAgIC8vICAgICAgICAgICByZXR1cm4gKFxuICAgIC8vICAgICAgICAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5EdWFsU2luZ2xlSW5ib3VuZCB8fFxuICAgIC8vICAgICAgICAgICAgIGdyb3Vwc1RvU2hvdy5pbmNsdWRlcyhmbGlnaHRJdGluZXJhcnkudWlkKVxuICAgIC8vICAgICAgICAgICApO1xuICAgIC8vICAgICAgICAgfTtcbiAgICAvLyAgICAgICB9XG4gICAgLy8gICA6IChfZ3JvdXBzVG9TaG93OiBudW1iZXJbXSkgPT4ge1xuICAgIC8vICAgICAgIHJldHVybiAoX2ZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogYm9vbGVhbiA9PiB7XG4gICAgLy8gICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAvLyAgICAgICB9O1xuICAgIC8vICAgICB9O1xuXG4gICAgY29uc3QgdGVzdGVyID0gKFxuICAgICAgZmlsdGVyc1RvdGVzdDogUmVjb3JkPG51bWJlciB8IHN0cmluZywgU2VsZWN0RmlsdGVyPixcbiAgICAgIHRlc3RGdW5jdGlvbjogKFxuICAgICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXksXG4gICAgICAgIHZhbHVlOiBzdHJpbmcgfCBudW1iZXJcbiAgICAgICkgPT4gYm9vbGVhblxuICAgICkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBPYmplY3QudmFsdWVzKGZpbHRlcnNUb3Rlc3QpLmZpbHRlcihcbiAgICAgICAgKGZpbHRlcjogU2VsZWN0RmlsdGVyKSA9PiBmaWx0ZXIuc2VsZWN0ZWRcbiAgICAgICk7XG4gICAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5KSA9PiB7XG4gICAgICAgICAgcmV0dXJuICEhc2VsZWN0ZWQuZmluZCgoZmlsdGVyOiBTZWxlY3RGaWx0ZXIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0ZXN0RnVuY3Rpb24oZmxpZ2h0SXRpbmVyYXJ5LCBmaWx0ZXIudmFsdWUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIChfZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHJlcGxhY2VGaWVsZHMgPSAoZmllbGQ6IHN0cmluZywgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpOiBzdHJpbmcgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkXG4gICAgICAgIC5yZXBsYWNlKCdPVVRCT1VORF9ERVBBUlRVUkUnLCAnb3V0Ym91bmRGbGlnaHRzLjAnKVxuICAgICAgICAucmVwbGFjZShcbiAgICAgICAgICAnT1VUQk9VTkRfQVJSSVZBTCcsXG4gICAgICAgICAgJ291dGJvdW5kRmxpZ2h0cy4nICsgKGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMSlcbiAgICAgICAgKVxuICAgICAgICAucmVwbGFjZSgnSU5CT1VORF9ERVBBUlRVUkUnLCAnaW5ib3VuZEZsaWdodHMuMCcpXG4gICAgICAgIC5yZXBsYWNlKFxuICAgICAgICAgICdJTkJPVU5EX0FSUklWQUwnLFxuICAgICAgICAgICdpbmJvdW5kRmxpZ2h0cy4nICsgKChmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHMgfHwgW10pLmxlbmd0aCAtIDEpXG4gICAgICAgICk7XG4gICAgfTtcbiAgICBjb25zdCBpc0JldHdlZW4gPSAoXG4gICAgICBtaW5tYXg6IE1pbk1heCxcbiAgICAgIGZpZWxkOiBzdHJpbmdcbiAgICApOiAoKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuKSA9PiB7XG4gICAgICByZXR1cm4gKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogYm9vbGVhbiA9PiB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuaGVscGVycy5mcm9tT2JqZWN0KFxuICAgICAgICAgIGZsaWdodEl0aW5lcmFyeSxcbiAgICAgICAgICAuLi5yZXBsYWNlRmllbGRzKGZpZWxkLCBmbGlnaHRJdGluZXJhcnkpLnNwbGl0KCcuJylcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHZhbCA+PSBtaW5tYXgubWluICYmIHZhbCA8PSBtaW5tYXgubWF4O1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNUaW1lQmV0d2VlbiA9IChcbiAgICAgIG1pbm1heDogTWluTWF4LFxuICAgICAgZmllbGQ6IHN0cmluZ1xuICAgICk6ICgoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW4pID0+IHtcbiAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpOiBib29sZWFuID0+IHtcbiAgICAgICAgY29uc3QgdmFsID0gbW9tZW50KFxuICAgICAgICAgIHRoaXMuaGVscGVycy5mcm9tT2JqZWN0KFxuICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5LFxuICAgICAgICAgICAgLi4ucmVwbGFjZUZpZWxkcyhmaWVsZCwgZmxpZ2h0SXRpbmVyYXJ5KS5zcGxpdCgnLicpXG4gICAgICAgICAgKVxuICAgICAgICApLmdldCgnaG91cicpO1xuXG4gICAgICAgIC8vIG5vdyBhdHRlbXB0IHRvIGdldCB0aGUgbWluIC0gbWF5IG5lZWQgdG8gbm9ybWFsaXNlIHRoaXNcbiAgICAgICAgY29uc3QgdmFsMiA9IG1vbWVudChcbiAgICAgICAgICB0aGlzLmhlbHBlcnMuZnJvbU9iamVjdChcbiAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeSxcbiAgICAgICAgICAgIC4uLnJlcGxhY2VGaWVsZHMoZmllbGQsIGZsaWdodEl0aW5lcmFyeSkuc3BsaXQoJy4nKVxuICAgICAgICAgIClcbiAgICAgICAgKS5nZXQoJ21pbnV0ZScpO1xuXG4gICAgICAgIGNvbnN0IHRvdGFsVGltZTogbnVtYmVyID0gTnVtYmVyKGAke3ZhbH0uJHt0aGlzLmhlbHBlcnMubm9ybWFsaXNlTWludXRlVG9CYXNlMTAodmFsMil9YCk7XG4gICAgICAgIHJldHVybiB0b3RhbFRpbWUgPj0gbWlubWF4Lm1pbiAmJiB0b3RhbFRpbWUgPD0gbWlubWF4Lm1heDtcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGZpZWxkSGFzVmFsdWUgPSAoXG4gICAgICBmaWVsZDoga2V5b2YgRmxpZ2h0Sm91cm5leVxuICAgICk6ICgoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSA9PiBib29sZWFuKSA9PiB7XG4gICAgICByZXR1cm4gKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgdmFsdWU6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4gZmxpZ2h0W2ZpZWxkXSA9PT0gdmFsdWU7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBvdXRJdGluZXJhcnlUZXN0ZXJzOiAoKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuKVtdID0gW107XG4gICAgY29uc3QgaW5JdGluZXJhcnlUZXN0ZXJzOiAoKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuKVtdID0gW107XG5cbiAgICBjb25zdCBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzOiAoKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuKVtdID0gW107XG5cbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICBpc1RpbWVCZXR3ZWVuKGZpbHRlcnMuYXJyaXZhbFRpbWUsICdPVVRCT1VORF9BUlJJVkFMLmRhdGVUaW1lQXJyaXZpbmcnKVxuICAgICk7XG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxuICAgICAgaXNUaW1lQmV0d2VlbihmaWx0ZXJzLmRlcGFydHVyZVRpbWUsICdPVVRCT1VORF9ERVBBUlRVUkUuZGF0ZVRpbWVEZXBhcnRpbmcnKVxuICAgICk7XG5cbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goaXNCZXR3ZWVuKGZpbHRlcnMucmV0dXJuRHVyYXRpb24sICdvdXRib3VuZFRvdGFsRHVyYXRpb24nKSk7XG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKGlzQmV0d2VlbihmaWx0ZXJzLmR1cmF0aW9uLCAnb3V0Ym91bmRUb3RhbER1cmF0aW9uJykpO1xuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChpc0JldHdlZW4oZmlsdGVycy5wcmljZSwgJ3RvdGFsLnByaWNlJykpO1xuXG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxuICAgICAgdGVzdGVyKGZpbHRlcnMuc3RvcHMsIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAodmFsdWUgPiAxKSB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoID09PSB2YWx1ZSB8fFxuICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzPy5sZW5ndGggPT09IHZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggPT09IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcbiAgICAgIHRlc3RlcihmaWx0ZXJzLnRvdGFsU3RvcHMsIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBvdXRTdG9wcyA9IGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoO1xuICAgICAgICBjb25zdCBpblN0b3BzID0gZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgdG90YWxTdG9wcyA9IG91dFN0b3BzID4gaW5TdG9wcyA/IG91dFN0b3BzIDogaW5TdG9wcztcbiAgICAgICAgcmV0dXJuIHRvdGFsU3RvcHMgPT09IHZhbHVlO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxuICAgICAgdGVzdGVyKGZpbHRlcnMudG90YWxTdG9wcywgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCA9PT0gdmFsdWU7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICB0ZXN0ZXIoXG4gICAgICAgIGZpbHRlcnMudHJhdmVsUG9saWN5LFxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucywgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlcXVpcmVzUmVhc29uID0gZmxpZ2h0SXRpbmVyYXJ5LnVuYXZhaWxhYmxlXG4gICAgICAgICAgICA/IFRyYXZlbFBvbGljaWVzLlVOQVZBSUxBQkxFXG4gICAgICAgICAgICA6IGZsaWdodEl0aW5lcmFyeS5yZXF1aXJlc1JlYXNvbktleXNcbiAgICAgICAgICAgID8gVHJhdmVsUG9saWNpZXMuQUxMT1dfV0lUSF9SRUFTT05cbiAgICAgICAgICAgIDogVHJhdmVsUG9saWNpZXMuSU5fUE9MSUNZO1xuICAgICAgICAgIHJldHVybiByZXF1aXJlc1JlYXNvbiA9PT0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIClcbiAgICApO1xuXG4gICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxuICAgICAgdGVzdGVyKFxuICAgICAgICBmaWx0ZXJzLnRyYXZlbFBvbGljeSxcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBjb25zdCByZXF1aXJlc1JlYXNvbiA9IGZsaWdodEl0aW5lcmFyeS51bmF2YWlsYWJsZVxuICAgICAgICAgICAgPyBUcmF2ZWxQb2xpY2llcy5VTkFWQUlMQUJMRVxuICAgICAgICAgICAgOiBmbGlnaHRJdGluZXJhcnkucmVxdWlyZXNSZWFzb25LZXlzXG4gICAgICAgICAgICA/IFRyYXZlbFBvbGljaWVzLkFMTE9XX1dJVEhfUkVBU09OXG4gICAgICAgICAgICA6IFRyYXZlbFBvbGljaWVzLklOX1BPTElDWTtcbiAgICAgICAgICByZXR1cm4gcmVxdWlyZXNSZWFzb24gPT09IHZhbHVlO1xuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcblxuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChcbiAgICAgIHRlc3RlcihmaWx0ZXJzLmJhZ2dhZ2UsIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBiYWdnYWdlQXJyYXk6IG51bWJlcltdID0gZmxpZ2h0SXRpbmVyYXJ5LmJhZ2dhZ2VBbGxvd2FuY2VcbiAgICAgICAgICA/LmZpbHRlcihhID0+IGE/LnR5cGUgPT09ICdDaGVja0luJylcbiAgICAgICAgICAubWFwKGEgPT4gYT8ucXR5KSBhcyBudW1iZXJbXTtcbiAgICAgICAgY29uc3QgYmFnZ2FnZTogbnVtYmVyID0gYmFnZ2FnZUFycmF5Lmxlbmd0aCA/IE1hdGgubWluKC4uLmJhZ2dhZ2VBcnJheSkgOiAwO1xuICAgICAgICByZXR1cm4gYmFnZ2FnZSA9PT0gdmFsdWU7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICB0ZXN0ZXIoZmlsdGVycy5kZXBhdHVyZUFpcnBvcnQsIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0c1swXT8ub3JpZ2luQWlycG9ydCA9PT0gdmFsdWU7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICB0ZXN0ZXIoZmlsdGVycy5hcnJpdmFsQWlycG9ydCwgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0c1tmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICA/LmRlc3RpbmF0aW9uQWlycG9ydCA9PT0gdmFsdWVcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKGlzQmV0d2VlbihmaWx0ZXJzLmR1cmF0aW9uLCAnb3V0Ym91bmRUb3RhbER1cmF0aW9uJykpO1xuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKGlzQmV0d2VlbihmaWx0ZXJzLnByaWNlLCAndG90YWwucHJpY2UnKSk7XG4gICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5wdXNoKGlzQmV0d2VlbihmaWx0ZXJzLnByaWNlLCAndG90YWwucHJpY2UnKSk7XG5cbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcbiAgICAgIGlzVGltZUJldHdlZW4oZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZSwgJ0lOQk9VTkRfQVJSSVZBTC5kYXRlVGltZUFycml2aW5nJylcbiAgICApO1xuXG4gICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxuICAgICAgaXNUaW1lQmV0d2VlbihmaWx0ZXJzLnJldHVybkFycml2YWxUaW1lLCAnT1VUQk9VTkRfQVJSSVZBTC5kYXRlVGltZUFycml2aW5nJylcbiAgICApO1xuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxuICAgICAgaXNUaW1lQmV0d2VlbihmaWx0ZXJzLnJldHVybkRlcGFydHVyZVRpbWUsICdJTkJPVU5EX0RFUEFSVFVSRS5kYXRlVGltZURlcGFydGluZycpXG4gICAgKTtcblxuICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucHVzaChcbiAgICAgIGlzVGltZUJldHdlZW4oZmlsdGVycy5yZXR1cm5EZXBhcnR1cmVUaW1lLCAnT1VUQk9VTkRfREVQQVJUVVJFLmRhdGVUaW1lRGVwYXJ0aW5nJylcbiAgICApO1xuXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goaXNCZXR3ZWVuKGZpbHRlcnMucmV0dXJuRHVyYXRpb24sICdpbmJvdW5kVG90YWxEdXJhdGlvbicpKTtcblxuICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucHVzaChpc0JldHdlZW4oZmlsdGVycy5yZXR1cm5EdXJhdGlvbiwgJ291dGJvdW5kVG90YWxEdXJhdGlvbicpKTtcblxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxuICAgICAgdGVzdGVyKGZpbHRlcnMuc3RvcHMsIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAodmFsdWUgPiAxKSB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cy5sZW5ndGggPT09IHZhbHVlIHx8XG4gICAgICAgICAgICBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzPy5sZW5ndGggPT09IHZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzLmxlbmd0aCA9PT0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucHVzaChcbiAgICAgIHRlc3RlcihmaWx0ZXJzLnN0b3BzLCAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoID09PSB2YWx1ZTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxuICAgICAgdGVzdGVyKGZpbHRlcnMuYmFnZ2FnZSwgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGJhZ2dhZ2VBcnJheTogbnVtYmVyW10gPSBmbGlnaHRJdGluZXJhcnkuYmFnZ2FnZUFsbG93YW5jZVxuICAgICAgICAgID8uZmlsdGVyKGEgPT4gYT8udHlwZSA9PT0gJ0NoZWNrSW4nKVxuICAgICAgICAgIC5tYXAoKGJhZ2dhZ2VBbGxvd2FuY2U6IEJhZ2dhZ2VBbGxvd2FuY2UpID0+IGJhZ2dhZ2VBbGxvd2FuY2UucXR5KTtcbiAgICAgICAgY29uc3QgYmFnZ2FnZTogbnVtYmVyID0gYmFnZ2FnZUFycmF5Lmxlbmd0aCA/IE1hdGgubWluKC4uLmJhZ2dhZ2VBcnJheSkgOiAwO1xuICAgICAgICByZXR1cm4gYmFnZ2FnZSA9PT0gdmFsdWU7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICB0ZXN0ZXIoZmlsdGVycy5iYWdnYWdlLCAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBudW1iZXIpID0+IHtcbiAgICAgICAgY29uc3QgYmFnZ2FnZUFycmF5OiBudW1iZXJbXSA9IGZsaWdodEl0aW5lcmFyeS5iYWdnYWdlQWxsb3dhbmNlXG4gICAgICAgICAgPy5maWx0ZXIoYSA9PiBhPy50eXBlID09PSAnQ2hlY2tJbicpXG4gICAgICAgICAgLm1hcCgoYmFnZ2FnZUFsbG93YW5jZTogQmFnZ2FnZUFsbG93YW5jZSkgPT4gYmFnZ2FnZUFsbG93YW5jZS5xdHkpO1xuICAgICAgICBjb25zdCBiYWdnYWdlOiBudW1iZXIgPSBiYWdnYWdlQXJyYXkubGVuZ3RoID8gTWF0aC5taW4oLi4uYmFnZ2FnZUFycmF5KSA6IDA7XG4gICAgICAgIHJldHVybiBiYWdnYWdlID09PSB2YWx1ZTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxuICAgICAgdGVzdGVyKGZpbHRlcnMuZGVwYXR1cmVSZXR1cm5BaXJwb3J0LCAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIGZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0c1swXT8ub3JpZ2luQWlycG9ydCA9PT0gdmFsdWU7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICB0ZXN0ZXIoZmlsdGVycy5kZXBhdHVyZVJldHVybkFpcnBvcnQsIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0c1swXT8ub3JpZ2luQWlycG9ydCA9PT0gdmFsdWU7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcbiAgICAgIHRlc3RlcihmaWx0ZXJzLmFycml2YWxSZXR1cm5BaXJwb3J0LCAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHNbZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICA/LmRlc3RpbmF0aW9uQWlycG9ydCA9PT0gdmFsdWVcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucHVzaChcbiAgICAgIHRlc3RlcihmaWx0ZXJzLmFycml2YWxSZXR1cm5BaXJwb3J0LCAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzW2ZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgID8uZGVzdGluYXRpb25BaXJwb3J0ID09PSB2YWx1ZVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3Qgb3V0Sm91cm5leVRlc3RlcnM6ICgoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5KSA9PiBib29sZWFuKVtdID0gW107XG4gICAgb3V0Sm91cm5leVRlc3RlcnMucHVzaCh0ZXN0ZXIoZmlsdGVycy5jbGFzc2VzLCBmaWVsZEhhc1ZhbHVlKCdjYWJpbkNsYXNzJykpKTtcbiAgICBvdXRKb3VybmV5VGVzdGVycy5wdXNoKHRlc3RlcihmaWx0ZXJzLmFpcmxpbmVzLCBmaWVsZEhhc1ZhbHVlKCdtYXJrZXRpbmdDYXJyaWVyJykpKTtcbiAgICBvdXRKb3VybmV5VGVzdGVycy5wdXNoKFxuICAgICAgdGVzdGVyKGZpbHRlcnMucHJpdmF0ZUZhcmVzLCAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRKb3VybmV5LCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiBmbGlnaHRJdGluZXJhcnkuZmFyZUluZm8udGl0bGUgPT09IHZhbHVlO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgaW5Kb3VybmV5VGVzdGVyczogKChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXkpID0+IGJvb2xlYW4pW10gPSBbXTtcbiAgICBpbkpvdXJuZXlUZXN0ZXJzLnB1c2godGVzdGVyKGZpbHRlcnMuY2xhc3NlcywgZmllbGRIYXNWYWx1ZSgnY2FiaW5DbGFzcycpKSk7XG4gICAgaW5Kb3VybmV5VGVzdGVycy5wdXNoKHRlc3RlcihmaWx0ZXJzLmFpcmxpbmVzLCBmaWVsZEhhc1ZhbHVlKCdtYXJrZXRpbmdDYXJyaWVyJykpKTtcbiAgICBpbkpvdXJuZXlUZXN0ZXJzLnB1c2goXG4gICAgICB0ZXN0ZXIoZmlsdGVycy5wcml2YXRlRmFyZXMsIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEpvdXJuZXksIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIGZsaWdodEl0aW5lcmFyeS5mYXJlSW5mby50aXRsZSA9PT0gdmFsdWU7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBvdXRKb3VybmV5VGVzdGVycy5wdXNoKFxuICAgICAgdGVzdGVyKGZpbHRlcnMudmlhcywgZmllbGRIYXNWYWx1ZSgnb3JpZ2luQWlycG9ydCcpKSB8fFxuICAgICAgICB0ZXN0ZXIoZmlsdGVycy52aWFzLCBmaWVsZEhhc1ZhbHVlKCdkZXN0aW5hdGlvbkFpcnBvcnQnKSlcbiAgICApO1xuICAgIGluSm91cm5leVRlc3RlcnMucHVzaChcbiAgICAgIHRlc3RlcihmaWx0ZXJzLnZpYXMsIGZpZWxkSGFzVmFsdWUoJ29yaWdpbkFpcnBvcnQnKSkgfHxcbiAgICAgICAgdGVzdGVyKGZpbHRlcnMudmlhcywgZmllbGRIYXNWYWx1ZSgnZGVzdGluYXRpb25BaXJwb3J0JykpXG4gICAgKTtcblxuICAgIGNvbnN0IG91dEZpbHRlckl0aW5lcmFyaWVzID0gKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogYm9vbGVhbiA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnJlZHVjZShcbiAgICAgICAgICAoYWNjOiBib29sZWFuLCB0ZXN0ZXIxOiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgIGFjYyA9IGFjYyAmJiB0ZXN0ZXIxKGZsaWdodEl0aW5lcmFyeSk7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApICYmXG4gICAgICAgICghZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cyB8fFxuICAgICAgICAgICEhKGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMgfHwgW10pLmZpbmQoXG4gICAgICAgICAgICAoZmxpZ2h0Sm91cm5leTogRmxpZ2h0Sm91cm5leSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gISFvdXRKb3VybmV5VGVzdGVycy5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgYWNjOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgdGVzdGVyMjogKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leSkgPT4gYm9vbGVhblxuICAgICAgICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYyAmJiB0ZXN0ZXIyKGZsaWdodEpvdXJuZXkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICkpXG4gICAgICApO1xuICAgIH07XG4gICAgY29uc3QgaW5GaWx0ZXJJdGluZXJhcmllcyA9IChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgaW5JdGluZXJhcnlUZXN0ZXJzLnJlZHVjZShcbiAgICAgICAgICAoYWNjOiBib29sZWFuLCB0ZXN0ZXIxOiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhY2MgJiYgdGVzdGVyMShmbGlnaHRJdGluZXJhcnkpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApICYmXG4gICAgICAgICghZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzPy5sZW5ndGggfHxcbiAgICAgICAgICAhIShmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHMgfHwgW10pLmZpbmQoKGZsaWdodEpvdXJuZXk6IEZsaWdodEpvdXJuZXkpOiBib29sZWFuID0+IHtcbiAgICAgICAgICAgIHJldHVybiAhIWluSm91cm5leVRlc3RlcnMucmVkdWNlKFxuICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgYWNjOiBib29sZWFuLFxuICAgICAgICAgICAgICAgIHRlc3RlcjI6IChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXkpID0+IGJvb2xlYW5cbiAgICAgICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYyAmJiB0ZXN0ZXIyKGZsaWdodEpvdXJuZXkpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pKVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaW5EdWFsRmlsdGVySXRpbmVyYXJpZXMgPSAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpOiBib29sZWFuID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucmVkdWNlKFxuICAgICAgICAgIChhY2M6IGJvb2xlYW4sIHRlc3RlcjE6IChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFjYyAmJiB0ZXN0ZXIxKGZsaWdodEl0aW5lcmFyeSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0cnVlXG4gICAgICAgICkgJiZcbiAgICAgICAgKCFmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzPy5sZW5ndGggfHxcbiAgICAgICAgICAhIShmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzIHx8IFtdKS5maW5kKFxuICAgICAgICAgICAgKGZsaWdodEpvdXJuZXk6IEZsaWdodEpvdXJuZXkpOiBib29sZWFuID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuICEhaW5Kb3VybmV5VGVzdGVycy5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgYWNjOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgdGVzdGVyMjogKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leSkgPT4gYm9vbGVhblxuICAgICAgICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYyAmJiB0ZXN0ZXIyKGZsaWdodEpvdXJuZXkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICkpXG4gICAgICApO1xuICAgIH07XG5cblxuICAgIGNvbnN0IHNldFNlbGVjdGVkID0gKGZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMpID0+IHtcbiAgICAgIGZsaWdodC5zZWxlY3RlZCA9IGZsaWdodC51aWQgPT09IHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodD8udWlkO1xuICAgICAgZmxpZ2h0LnByZWZlcnJlZCA9IHRoaXMuaGVscGVycy5wcmVmZXJyZWREdWFsU2luZ2xlKFxuICAgICAgICBmbGlnaHQsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRVSWQsXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5XG4gICAgICApO1xuICAgICAgZmxpZ2h0LnByZWZlcnJlZE1lc3NhZ2VzID0gdGhpcy5oZWxwZXJzLnByZWZlcnJlZE1lc3NhZ2VzRHVhbFNpbmdsZShcbiAgICAgICAgZmxpZ2h0LFxuICAgICAgICB0aGlzLnNlbGVjdGVkVUlkLFxuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeVxuICAgICAgKTtcbiAgICAgIGZsaWdodC5wcmVmZXJlbmNlTGV2ZWwgPSB0aGlzLmhlbHBlcnMucHJlZmVyZW5jZUxldmVsRHVhbFNpbmdsZShcbiAgICAgICAgZmxpZ2h0LFxuICAgICAgICB0aGlzLnNlbGVjdGVkVUlkLFxuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeVxuICAgICAgKTtcbiAgICAgIGZsaWdodC51bmF2YWlsYWJsZSA9IHRoaXMuaGVscGVycy51bmF2YWlsYWJsZUR1YWxTaW5nbGUoXG4gICAgICAgIGZsaWdodCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZFVJZCxcbiAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnlcbiAgICAgICk7XG4gICAgICBmbGlnaHQucmVxdWlyZXNSZWFzb25LZXlzID0gdGhpcy5oZWxwZXJzLnJlcXVpcmVzUmVhc29uRHVhbFNpbmdsZShcbiAgICAgICAgZmxpZ2h0LFxuICAgICAgICB0aGlzLnNlbGVjdGVkVUlkLFxuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeVxuICAgICAgKTtcbiAgICAgIGZsaWdodC5yZXF1aXJlc1JlYXNvbk1lc3NhZ2VLZXlzID0gdGhpcy5oZWxwZXJzLnJlcXVpcmVzUmVhc29uTWVzc2FnZUR1YWxTaW5nbGUoXG4gICAgICAgIGZsaWdodCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZFVJZCxcbiAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnlcbiAgICAgICk7XG4gICAgICBmbGlnaHQudW5hdmFpbGFibGVNZXNzYWdlID0gdGhpcy5oZWxwZXJzLnVuYXZhaWxhYmxlTWVzc2FnZUR1YWxTaW5nbGUoXG4gICAgICAgIGZsaWdodCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZFVJZCxcbiAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnlcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmxpZ2h0O1xuICAgIH07XG4gICAgdGhpcy5yZXN1bHRzLm5leHQoXG4gICAgICBPYmplY3QuZnJlZXplKFxuICAgICAgICB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5mdWxsUmVzdWx0cykubWFwKChyZXN1bHQ0OiBGbGlnaHRBbGxRdW90ZVJlc3VsdCkgPT4ge1xuICAgICAgICAgIGxldCBuZXdKb3VybmV5czogYW55ID0gdGhpcy5ieVNjaGVkdWxlXG4gICAgICAgICAgICA/IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHQ0LnNlYXJjaEJ5U2NoZWR1bGVbdGhpcy5zZWxlY3RlZFNlZ21lbnRdKVxuICAgICAgICAgICAgOiB0aGlzLmhlbHBlcnMuY2xvbmUocmVzdWx0NC5qb3VybmV5cyk7XG4gICAgICAgICAgaWYgKGZpbHRlcnMuZmxpZ2h0TnVtYmVyKSB7XG4gICAgICAgICAgICBuZXdKb3VybmV5cyA9IG5ld0pvdXJuZXlzLmZpbHRlcigoZmxpZ2h0SXRlbTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG91dGJvdW5kRmxpZ2h0cyA9IGZsaWdodEl0ZW0ub3V0Ym91bmRGbGlnaHRzLmZpbmQob3V0RmxpZ2h0ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBudW1iZXIgPSBvdXRGbGlnaHQubWFya2V0aW5nQ2FycmllciArIG91dEZsaWdodC5tYXJrZXRpbmdGbGlnaHROdW1iZXI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlci50b0xvd2VyQ2FzZSgpID09PSBmaWx0ZXJzLmZsaWdodE51bWJlci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWYgKG91dGJvdW5kRmxpZ2h0cykgcmV0dXJuIGZsaWdodEl0ZW07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGZpbHRlcnMuaW5ib3VuZEZsaWdodE51bWJlcikge1xuICAgICAgICAgICAgbmV3Sm91cm5leXMgPSBuZXdKb3VybmV5cy5maWx0ZXIoKGZsaWdodEl0ZW06IEZsaWdodEl0aW5lcmFyeSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBpbmJvdW5kRmxpZ2h0cyA9IGZsaWdodEl0ZW0uaW5ib3VuZEZsaWdodHMuZmluZChpbkZsaWdodCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbnVtYmVyID0gaW5GbGlnaHQubWFya2V0aW5nQ2FycmllciArIGluRmxpZ2h0Lm1hcmtldGluZ0ZsaWdodE51bWJlcjtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyLnRvTG93ZXJDYXNlKCkgPT09IGZpbHRlcnMuaW5ib3VuZEZsaWdodE51bWJlci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWYgKGluYm91bmRGbGlnaHRzKSByZXR1cm4gZmxpZ2h0SXRlbTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG5ld0pvdXJuZXlzID0gbmV3Sm91cm5leXMuZmlsdGVyKG91dEZpbHRlckl0aW5lcmFyaWVzKTtcbiAgICAgICAgICBsZXQgbmV3RHVhbFNpbmdsZTogSXRpbmVyYXJ5U3VtbWFyeVtdID0gcmVzdWx0NC5tdWx0aSBhcyBJdGluZXJhcnlTdW1tYXJ5W107XG4gICAgICAgICAgaWYgKHRoaXMuaXNSZXR1cm4gJiYgIXRoaXMuYnlTY2hlZHVsZSkge1xuICAgICAgICAgICAgbGV0IG5ld0luSm91cm5leXM6IGFueSA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHQ0LmpvdXJuZXlzKTtcbiAgICAgICAgICAgIG5ld0luSm91cm5leXMgPSBuZXdJbkpvdXJuZXlzLmZpbHRlcihpbkZpbHRlckl0aW5lcmFyaWVzKTtcbiAgICAgICAgICAgIG5ld0pvdXJuZXlzID0gdGhpcy5tZXJnZU91dEluQm91bmQobmV3Sm91cm5leXMsIG5ld0luSm91cm5leXMpO1xuXG4gICAgICAgICAgICAvLyBEVUFMIFNJTkdMRVxuICAgICAgICAgICAgbGV0IGR1YWxTaW5nbGVKb3VybmV5c091dDogYW55W10gPSBbXTtcbiAgICAgICAgICAgIGxldCBkdWFsU2luZ2xlSm91cm5leXNJbjogYW55W10gPSBbXTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGR1YWxTaW5nbGVKb3VybmV5c091dCA9IHRoaXMuc2VsZWN0ZWRGbGlnaHQudmFsdWVcbiAgICAgICAgICAgICAgICA/IHRoaXMuaGVscGVyc1xuICAgICAgICAgICAgICAgICAgICAuY2xvbmUocmVzdWx0NC5tdWx0aVswXT8ucmVzdWx0cylcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAoaXRlbTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMpID0+IGl0ZW0uam91cm5leUhhc2ggPT09IHRoaXMuc2VsZWN0ZWRVSWRcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogdGhpcy5oZWxwZXJzXG4gICAgICAgICAgICAgICAgICAgIC5jbG9uZShyZXN1bHQ0Lm11bHRpWzBdPy5yZXN1bHRzKVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKG91dEZpbHRlckl0aW5lcmFyaWVzKVxuICAgICAgICAgICAgICAgICAgICAuc29ydCh0aGlzLl9zb3J0SXRpbmFyeVJvdXRpbmVzW3NvcnRWYWx1ZV0pO1xuXG4gICAgICAgICAgICAgIGR1YWxTaW5nbGVKb3VybmV5c0luID0gdGhpcy5zZWxlY3RlZEZsaWdodC52YWx1ZVxuICAgICAgICAgICAgICAgID8gdGhpcy5oZWxwZXJzXG4gICAgICAgICAgICAgICAgICAgIC5jbG9uZShyZXN1bHQ0Lm11bHRpWzFdPy5yZXN1bHRzKVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGluRHVhbEZpbHRlckl0aW5lcmFyaWVzKVxuICAgICAgICAgICAgICAgICAgICAubWFwKHNldFNlbGVjdGVkKVxuICAgICAgICAgICAgICAgICAgICAuc29ydCh0aGlzLl9zb3J0SXRpbmFyeVJvdXRpbmVzW3NvcnRWYWx1ZV0pXG4gICAgICAgICAgICAgICAgOiB0aGlzLmhlbHBlcnNcbiAgICAgICAgICAgICAgICAgICAgLmNsb25lKHJlc3VsdDQubXVsdGlbMV0/LnJlc3VsdHMpXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoaW5EdWFsRmlsdGVySXRpbmVyYXJpZXMpXG4gICAgICAgICAgICAgICAgICAgIC5zb3J0KHRoaXMuX3NvcnRJdGluYXJ5Um91dGluZXNbc29ydFZhbHVlXSk7XG5cbiAgICAgICAgICAgICAgaWYgKGZpbHRlcnMuZmxpZ2h0TnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlzT3V0ID0gZHVhbFNpbmdsZUpvdXJuZXlzT3V0LmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIChmbGlnaHRJdGVtOiBGbGlnaHRJdGluZXJhcnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3V0Ym91bmRGbGlnaHRzID0gZmxpZ2h0SXRlbS5vdXRib3VuZEZsaWdodHMuZmluZChvdXRGbGlnaHQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlciA9IG91dEZsaWdodC5tYXJrZXRpbmdDYXJyaWVyICsgb3V0RmxpZ2h0Lm1hcmtldGluZ0ZsaWdodE51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyLnRvTG93ZXJDYXNlKCkgPT09IGZpbHRlcnMuZmxpZ2h0TnVtYmVyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAob3V0Ym91bmRGbGlnaHRzKSByZXR1cm4gZmxpZ2h0SXRlbTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChmaWx0ZXJzLmluYm91bmRGbGlnaHROdW1iZXIpIHtcbiAgICAgICAgICAgICAgICBkdWFsU2luZ2xlSm91cm5leXNJbiA9IGR1YWxTaW5nbGVKb3VybmV5c0luLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIChmbGlnaHRJdGVtOiBGbGlnaHRJdGluZXJhcnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5ib3VuZEZsaWdodHMgPSBmbGlnaHRJdGVtLm91dGJvdW5kRmxpZ2h0cy5maW5kKGluRmxpZ2h0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBudW1iZXIgPSBpbkZsaWdodC5tYXJrZXRpbmdDYXJyaWVyICsgaW5GbGlnaHQubWFya2V0aW5nRmxpZ2h0TnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIudG9Mb3dlckNhc2UoKSA9PT0gZmlsdGVycy5pbmJvdW5kRmxpZ2h0TnVtYmVyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5ib3VuZEZsaWdodHMpIHJldHVybiBmbGlnaHRJdGVtO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYCsrKyBFcnJvciBzb3J0aW5nIGR1YWwgc2luZ2xlczogJHtlcnJvcn0gKysrYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChuZXdEdWFsU2luZ2xlWzBdKSB7XG4gICAgICAgICAgICAgIG5ld0R1YWxTaW5nbGVbMF0ucmVzdWx0cyA9IGR1YWxTaW5nbGVKb3VybmV5c091dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZXdEdWFsU2luZ2xlWzFdKSB7XG4gICAgICAgICAgICAgIG5ld0R1YWxTaW5nbGVbMV0ucmVzdWx0cyA9IGR1YWxTaW5nbGVKb3VybmV5c0luO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBuZXdKb3VybmV5cy5zb3J0KHRoaXMuX3NvcnRJdGluYXJ5Um91dGluZXNbc29ydFZhbHVlXSk7XG4gICAgICAgICAgbGV0IGZpbHRlcmVkeVNjaGVkdWxlOiBGbGlnaHRJdGluZXJhcnlbXVtdID0gW107XG4gICAgICAgICAgcmVzdWx0NC5zZWFyY2hCeVNjaGVkdWxlW3RoaXMuc2VsZWN0ZWRTZWdtZW50XSA9IG5ld0pvdXJuZXlzO1xuICAgICAgICAgIGZpbHRlcmVkeVNjaGVkdWxlID0gcmVzdWx0NC5zZWFyY2hCeVNjaGVkdWxlO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnRmxpZ2h0QWxsUXVvdGVSZXN1bHQnLFxuICAgICAgICAgICAgam91cm5leXM6ICF0aGlzLmJ5U2NoZWR1bGVcbiAgICAgICAgICAgICAgPyA8RmxpZ2h0SXRpbmVyYXJ5W10+bmV3Sm91cm5leXNcbiAgICAgICAgICAgICAgOiA8RmxpZ2h0SXRpbmVyYXJ5W10+cmVzdWx0NC5qb3VybmV5cyxcbiAgICAgICAgICAgIG11bHRpOiBuZXdEdWFsU2luZ2xlLFxuICAgICAgICAgICAgc2VhcmNoQnlTY2hlZHVsZTogdGhpcy5ieVNjaGVkdWxlXG4gICAgICAgICAgICAgID8gPEZsaWdodEl0aW5lcmFyeVtdW10+ZmlsdGVyZWR5U2NoZWR1bGVcbiAgICAgICAgICAgICAgOiA8RmxpZ2h0SXRpbmVyYXJ5W11bXT5yZXN1bHQ0LnNlYXJjaEJ5U2NoZWR1bGVcbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgKSBhcyB1bmtub3duIGFzIEZsaWdodFF1b3RlUmVzdWx0QXJyYXlcbiAgICApO1xuICAgIC8vIH1cbiAgfVxuXG4gIG1lcmdlT3V0SW5Cb3VuZChvdXRib3VuZDogRmxpZ2h0SXRpbmVyYXJ5W10sIGluYm91bmQ6IEZsaWdodEl0aW5lcmFyeVtdKTogRmxpZ2h0SXRpbmVyYXJ5W10ge1xuICAgIGxldCBmbGlnaHRzOiBGbGlnaHRJdGluZXJhcnlbXSA9IFtdO1xuICAgIG91dGJvdW5kLmZvckVhY2gob3V0RmxpZ2h0ID0+IHtcbiAgICAgIGlmIChpbmJvdW5kLmZpbmQoYSA9PiBhLnVpZCA9PSBvdXRGbGlnaHQudWlkKSkgZmxpZ2h0c1tvdXRGbGlnaHQudWlkXSA9IG91dEZsaWdodDtcbiAgICB9KTtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhmbGlnaHRzKTtcbiAgfVxuXG4gIHVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHM6IEZsaWdodFF1b3RlUmVzdWx0QXJyYXkpOiBJQ2hlYXBlc3RQcmljZSB7XG4gICAgaWYgKCFyZXN1bHRzLmxlbmd0aCB8fCB0aGlzLnNlYXJjaFNlcnZpY2UuaXNGbGlnaHRzR3JvdXBlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgam91cm5leXMgPSAocmVzdWx0c1swXSBhcyBGbGlnaHRBbGxRdW90ZVJlc3VsdCkuam91cm5leXM7XG4gICAgaWYgKCFqb3VybmV5cy5sZW5ndGgpIHJldHVybjtcblxuICAgIGNvbnN0IGN1cnJlbmN5ID0gam91cm5leXNbMF0udG90YWwuY3VycmVuY3k7XG4gICAgcmV0dXJuIGpvdXJuZXlzLnJlZHVjZShcbiAgICAgIChjaGVhcGVzdFByaWNlOiBJQ2hlYXBlc3RQcmljZSwgcmVzdWx0OiBGbGlnaHRJdGluZXJhcnkpID0+IHtcbiAgICAgICAgY29uc3QgcHJpY2UgPSByZXN1bHQudG90YWwucHJpY2U7XG4gICAgICAgIGlmIChjaGVhcGVzdFByaWNlLmFtb3VudCA+IHByaWNlKSBjaGVhcGVzdFByaWNlLmFtb3VudCA9IHByaWNlO1xuICAgICAgICByZXR1cm4gY2hlYXBlc3RQcmljZTtcbiAgICAgIH0sXG4gICAgICB7IGFtb3VudDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsIGN1cnJlbmN5Q29kZTogY3VycmVuY3kgfVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0ZWREdWFsU2luZ2xlKHNlbGVjdGVkRmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyk6IHZvaWQge1xuICAgIHRoaXMuZmV0Y2hpbmdSdWxlcyA9IHRydWU7XG4gICAgdGhpcy5zZWxlY3RlZEZsaWdodC5uZXh0KHNlbGVjdGVkRmxpZ2h0KTtcbiAgICB0aGlzLnNlbGVjdGVkVUlkID0gc2VsZWN0ZWRGbGlnaHQuam91cm5leUhhc2g7XG4gICAgY29uc3QgYXBwbHlSdWxlc09ic2VydmFibGVzID0gdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMuZnVsbFJlc3VsdHMpLm1hcCgocmVzdWx0NDogYW55KSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBseUZsaWdodFJ1bGVzXG4gICAgICAgIC5mZXRjaE9uZSh7XG4gICAgICAgICAgc2VsZWN0ZWRPdXRib3VuZEZsaWdodDogc2VsZWN0ZWRGbGlnaHQsXG4gICAgICAgICAgYXZhaWxhYmxlSW5ib3VuZEZsaWdodHM6IHJlc3VsdDQubXVsdGlbMV0/LnJlc3VsdHMsXG4gICAgICAgICAgc2VhcmNoSWQ6IHRoaXMucmF3UmVzdWx0cy5zZWFyY2hJZFxuICAgICAgICB9KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgIG1hcCgocnVsZXM6IFJ1bGVBY3Rpb25TdW1tYXJ5SW50ZXJmYWNlKSA9PiB7XG4gICAgICAgICAgICBpZiAocnVsZXM/LmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWRbdGhpcy5zZWxlY3RlZFVJZF0pIHtcbiAgICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkgPSB0aGlzLmhlbHBlcnMubWVyZ2VPYmplY3RzKHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LCBydWxlcyk7XG4gICAgICAgICAgICAgIHJlc3VsdDQubXVsdGlbMV0/LnJlc3VsdHMubWFwKChmbGlnaHRJdGVtOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucykgPT4ge1xuICAgICAgICAgICAgICAgIGZsaWdodEl0ZW0ucmVtb3ZlUmVzdWx0ID0gdGhpcy5oZWxwZXJzLnJlbW92ZVJlc3VsdHNEdWFsU2luZ2xlKFxuICAgICAgICAgICAgICAgICAgZmxpZ2h0SXRlbSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVSWQsXG4gICAgICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZmxpZ2h0SXRlbS5wcmVmZXJyZWQgPSB0aGlzLmhlbHBlcnMucHJlZmVycmVkRHVhbFNpbmdsZShcbiAgICAgICAgICAgICAgICAgIGZsaWdodEl0ZW0sXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVUlkLFxuICAgICAgICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGZsaWdodEl0ZW0ucHJlZmVycmVkTWVzc2FnZXMgPSB0aGlzLmhlbHBlcnMucHJlZmVycmVkTWVzc2FnZXNEdWFsU2luZ2xlKFxuICAgICAgICAgICAgICAgICAgZmxpZ2h0SXRlbSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVSWQsXG4gICAgICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZmxpZ2h0SXRlbS5wcmVmZXJlbmNlTGV2ZWwgPSB0aGlzLmhlbHBlcnMucHJlZmVyZW5jZUxldmVsRHVhbFNpbmdsZShcbiAgICAgICAgICAgICAgICAgIGZsaWdodEl0ZW0sXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVUlkLFxuICAgICAgICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGZsaWdodEl0ZW0ucmVxdWlyZXNSZWFzb25LZXlzID0gdGhpcy5oZWxwZXJzLnJlcXVpcmVzUmVhc29uRHVhbFNpbmdsZShcbiAgICAgICAgICAgICAgICAgIGZsaWdodEl0ZW0sXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVUlkLFxuICAgICAgICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGZsaWdodEl0ZW0ucmVxdWlyZXNSZWFzb25NZXNzYWdlS2V5cyA9IHRoaXMuaGVscGVycy5yZXF1aXJlc1JlYXNvbk1lc3NhZ2VEdWFsU2luZ2xlKFxuICAgICAgICAgICAgICAgICAgZmxpZ2h0SXRlbSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVSWQsXG4gICAgICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZmxpZ2h0SXRlbS51bmF2YWlsYWJsZSA9IHRoaXMuaGVscGVycy51bmF2YWlsYWJsZUR1YWxTaW5nbGUoXG4gICAgICAgICAgICAgICAgICBmbGlnaHRJdGVtLFxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVJZCxcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBmbGlnaHRJdGVtLnVuYXZhaWxhYmxlTWVzc2FnZSA9IHRoaXMuaGVscGVycy51bmF2YWlsYWJsZU1lc3NhZ2VEdWFsU2luZ2xlKFxuICAgICAgICAgICAgICAgICAgZmxpZ2h0SXRlbSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVSWQsXG4gICAgICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpZiAocmVzdWx0NC5tdWx0aVsxXT8ucmVzdWx0cykge1xuICAgICAgICAgICAgICAgIHJlc3VsdDQubXVsdGlbMV0ucmVzdWx0cyA9IHJlc3VsdDQubXVsdGlbMV0ucmVzdWx0cy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAoZmxpZ2h0SXRlbTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMpID0+ICFmbGlnaHRJdGVtLnJlbW92ZVJlc3VsdFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBuZXdEdWFsU2luZ2xlOiBJdGluZXJhcnlTdW1tYXJ5W10gPSByZXN1bHQ0Lm11bHRpO1xuICAgICAgICAgICAgbGV0IGR1YWxTaW5nbGVKb3VybmV5c091dDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNbXSA9IFtcbiAgICAgICAgICAgICAgdGhpcy5oZWxwZXJzLmNsb25lKHNlbGVjdGVkRmxpZ2h0KVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIC8vIC5maWx0ZXIoKGl0ZW06IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSA9PiBpdGVtLnVpZCA9PT0gc2VsZWN0ZWRGbGlnaHQudWlkKTtcblxuICAgICAgICAgICAgaWYgKG5ld0R1YWxTaW5nbGVbMF0pIHtcbiAgICAgICAgICAgICAgbmV3RHVhbFNpbmdsZVswXS5yZXN1bHRzID0gZHVhbFNpbmdsZUpvdXJuZXlzT3V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5mZXRjaGluZ1J1bGVzID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIF90eXBlOiAnRmxpZ2h0QWxsUXVvdGVSZXN1bHQnLFxuICAgICAgICAgICAgICBqb3VybmV5czogPEZsaWdodEl0aW5lcmFyeVtdPnJlc3VsdDQuam91cm5leXMsXG4gICAgICAgICAgICAgIG11bHRpOiBuZXdEdWFsU2luZ2xlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBmb3JrSm9pbihhcHBseVJ1bGVzT2JzZXJ2YWJsZXMpLnN1YnNjcmliZSgocmVzdWx0czogYW55KSA9PiB7XG4gICAgICB0aGlzLnJlc3VsdHMubmV4dChPYmplY3QuZnJlZXplKHJlc3VsdHMpIGFzIEZsaWdodFF1b3RlUmVzdWx0QXJyYXkpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVzZXRTZWxlY3RlZER1YWxTaW5nbGUoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEZsaWdodC5uZXh0KG51bGwpO1xuICAgIHRoaXMuYXBwbHlGaWx0ZXJzKHRoaXMuY3VycmVudEZpbHRlcnMsIHRoaXMuY3VycmVudFNvcnQpO1xuICB9XG5cblxuICBhc3luYyBzZWxlY3RHcm91cGVkRmxpZ2h0KFxuICAgIHNlbGVjdGVkRmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcbiAgICBkaXJlY3Rpb246IEZsaWdodERpcmVjdGlvbkVudW0sXG4gICAgZ3JvdXBJZDogbnVtYmVyLFxuICAgIGlzTGlnaHRuaW5nOiBib29sZWFuID0gZmFsc2UgLy8gdGVtcCBhcmcgYXMgc2VhdG1hcHMgb24gb24gbHVcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9IGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xuICAgIGNvbnN0IGlzVEZYID0gc2VsZWN0ZWRGbGlnaHQuc291cmNlID09PSBTZXJ2aWNlUHJvdmlkZXIuVHJhdmVsZnVzaW9uO1xuXG5cbiAgICBpZiAoXG4gICAgICAoYmFza2V0ICYmIHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUub25lV2F5KSB8fFxuICAgICAgKHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUubXVsdGlDaXR5ICYmXG4gICAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5PdXRib3VuZClcbiAgICApIHtcbiAgICAgIC8vIHRlbXAgc3RhdGVtZW50IGFzIHNlYXRtYXBzIG9uIG9uIGx1LCBhbHNvIG9ubHkgZm9yIFRGWCBmb3IgdGhlIG1vbWVudFxuICAgICAgaWYgKGlzTGlnaHRuaW5nICYmIHRoaXMuY2hlY2tTZWF0bWFwRXh0cmFzRW5hYmxlZChzZWxlY3RlZEZsaWdodCkpIHtcbiAgICAgICAgY29uc3QgZGV0YWlsRXh0cmFzID0gYXdhaXQgdGhpcy5nZXRGbGlnaHREZXRhaWxFeHRyYXMoc2VsZWN0ZWRGbGlnaHQsIGRpcmVjdGlvbik7XG4gICAgICAgIGlmIChkZXRhaWxFeHRyYXM/LnZhbGlkKSB7XG4gICAgICAgICAgc2VsZWN0ZWRGbGlnaHQub3V0Ym91bmRGbGlnaHRzID0gdGhpcy5hcHBseUV4dHJhRGV0YWlsc1RvRmxpZ2h0cyhcbiAgICAgICAgICAgIHNlbGVjdGVkRmxpZ2h0Lm91dGJvdW5kRmxpZ2h0cyxcbiAgICAgICAgICAgIGRldGFpbEV4dHJhcyxcbiAgICAgICAgICAgIGlzVEZYXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmJvb2tTaW5nbGVGbGlnaHQoaW50QmFza2V0LCBzZWxlY3RlZEZsaWdodCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYm9va1NpbmdsZUZsaWdodChpbnRCYXNrZXQsIHNlbGVjdGVkRmxpZ2h0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBiYXNrZXQgJiZcbiAgICAgIHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuICYmXG4gICAgICAoZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kIHx8XG4gICAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5EdWFsU2luZ2xlT3V0Ym91bmQpXG4gICAgKSB7XG4gICAgICB0aGlzLm91dGJvdW5kQ2FiaW5DbGFzcyA9IHNlbGVjdGVkRmxpZ2h0Lm91dGJvdW5kRmxpZ2h0c1swXS5jYWJpbkNsYXNzO1xuICAgICAgaWYgKHNlbGVjdGVkRmxpZ2h0LnNlbGVjdGVkKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodCA9IG51bGw7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkID0gLTE7XG4gICAgICAgIHRoaXMub3V0Ym91bmRDYWJpbkNsYXNzID0gJyc7IC8vIHJlc2V0IG91dGJvdW5kQ2FiaW5DbGFzc1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycyh0aGlzLmN1cnJlbnRGaWx0ZXJzLCB0aGlzLmN1cnJlbnRTb3J0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodCA9IHNlbGVjdGVkRmxpZ2h0O1xuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBJZCA9IGdyb3VwSWQ7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKHRoaXMuY3VycmVudEZpbHRlcnMsIHRoaXMuY3VycmVudFNvcnQpO1xuICAgICAgICB0aGlzLl91cGRhdGVUcmF2ZWxQb2xpY2llcygpO1xuICAgICAgfVxuICAgICAgc2VsZWN0ZWRGbGlnaHQuc2VsZWN0ZWQgPSAhc2VsZWN0ZWRGbGlnaHQuc2VsZWN0ZWQ7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGJhc2tldCAmJlxuICAgICAgdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2guY2hvc2VuU2VhcmNoVHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm4gJiZcbiAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5JbmJvdW5kICYmXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHRcbiAgICApIHtcbiAgICAgIC8vIHRlbXAgc3RhdGVtZW50IGFzIHNlYXRtYXBzIG9uIG9uIGx1XG4gICAgICBpZiAoaXNMaWdodG5pbmcgJiYgdGhpcy5jaGVja1NlYXRtYXBFeHRyYXNFbmFibGVkKHNlbGVjdGVkRmxpZ2h0KSkge1xuICAgICAgICBjb25zdCBkZXRhaWxFeHRyYXMgPSBhd2FpdCB0aGlzLmdldEZsaWdodERldGFpbEV4dHJhcyhzZWxlY3RlZEZsaWdodCwgZGlyZWN0aW9uKTtcbiAgICAgICAgaWYgKGRldGFpbEV4dHJhcz8udmFsaWQpIHtcbiAgICAgICAgICBzZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHMgPSB0aGlzLmFwcGx5RXh0cmFEZXRhaWxzVG9GbGlnaHRzKFxuICAgICAgICAgICAgc2VsZWN0ZWRGbGlnaHQub3V0Ym91bmRGbGlnaHRzLFxuICAgICAgICAgICAgZGV0YWlsRXh0cmFzLFxuICAgICAgICAgICAgaXNURlhcbiAgICAgICAgICApO1xuICAgICAgICAgIHNlbGVjdGVkRmxpZ2h0LmluYm91bmRGbGlnaHRzID0gdGhpcy5hcHBseUV4dHJhRGV0YWlsc1RvRmxpZ2h0cyhcbiAgICAgICAgICAgIHNlbGVjdGVkRmxpZ2h0LmluYm91bmRGbGlnaHRzLFxuICAgICAgICAgICAgZGV0YWlsRXh0cmFzLFxuICAgICAgICAgICAgaXNURlhcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMub3V0Ym91bmRDYWJpbkNsYXNzID0gJyc7IC8vIHJlc2V0IG91dGJvdW5kQ2FiaW5DbGFzc1xuICAgICAgICAgIGNvbnN0IHNjaGVtYURldGFpbHMgPSB0aGlzLmNyZWF0ZVNjaGVtYURldGFpbHMoXG4gICAgICAgICAgICBzZWxlY3RlZEZsaWdodCxcbiAgICAgICAgICAgIEZsaWdodEpvdXJuZXlUeXBlLlJvdW5kdHJpcFxuICAgICAgICAgICk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5kb0Jvb2tpbmcoXG4gICAgICAgICAgICBpbnRCYXNrZXQsXG4gICAgICAgICAgICBzZWxlY3RlZEZsaWdodCxcbiAgICAgICAgICAgIHNjaGVtYURldGFpbHMsXG4gICAgICAgICAgICBzZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmdVVEMsXG4gICAgICAgICAgICBzZWxlY3RlZEZsaWdodC5pbmJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZ1VUQ1xuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0LnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0ID0gbnVsbDtcbiAgICAgICAgICB0aGlzLmFwcGx5RmlsdGVycyh0aGlzLmN1cnJlbnRGaWx0ZXJzLCB0aGlzLmN1cnJlbnRTb3J0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vdXRib3VuZENhYmluQ2xhc3MgPSAnJzsgLy8gcmVzZXQgb3V0Ym91bmRDYWJpbkNsYXNzXG4gICAgICAgIGNvbnN0IHNjaGVtYURldGFpbHMgPSB0aGlzLmNyZWF0ZVNjaGVtYURldGFpbHMoc2VsZWN0ZWRGbGlnaHQsIEZsaWdodEpvdXJuZXlUeXBlLlJvdW5kdHJpcCk7XG4gICAgICAgIGF3YWl0IHRoaXMuZG9Cb29raW5nKFxuICAgICAgICAgIGludEJhc2tldCxcbiAgICAgICAgICBzZWxlY3RlZEZsaWdodCxcbiAgICAgICAgICBzY2hlbWFEZXRhaWxzLFxuICAgICAgICAgIHNlbGVjdGVkRmxpZ2h0Lm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZ1VUQyxcbiAgICAgICAgICBzZWxlY3RlZEZsaWdodC5pbmJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZ1VUQ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnModGhpcy5jdXJyZW50RmlsdGVycywgdGhpcy5jdXJyZW50U29ydCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgYmFza2V0ICYmXG4gICAgICB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaC5jaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLnJldHVybiAmJlxuICAgICAgZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkR1YWxTaW5nbGVJbmJvdW5kICYmXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHRcbiAgICApIHtcbiAgICAgIC8vIHRlbXAgc3RhdGVtZW50IGFzIHNlYXRtYXBzIG9uIG9uIGx1XG4gICAgICBpZiAoaXNMaWdodG5pbmcgJiYgdGhpcy5jaGVja1NlYXRtYXBFeHRyYXNFbmFibGVkKHNlbGVjdGVkRmxpZ2h0KSkge1xuICAgICAgICBjb25zdCBkZXRhaWxFeHRyYXNPdXQgPSBhd2FpdCB0aGlzLmdldEZsaWdodERldGFpbEV4dHJhcyhzZWxlY3RlZEZsaWdodCwgZGlyZWN0aW9uKTtcbiAgICAgICAgaWYgKGRldGFpbEV4dHJhc091dD8udmFsaWQpIHtcbiAgICAgICAgICBzZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHMgPSB0aGlzLmFwcGx5RXh0cmFEZXRhaWxzVG9GbGlnaHRzKFxuICAgICAgICAgICAgc2VsZWN0ZWRGbGlnaHQub3V0Ym91bmRGbGlnaHRzLFxuICAgICAgICAgICAgZGV0YWlsRXh0cmFzT3V0LFxuICAgICAgICAgICAgaXNURlhcbiAgICAgICAgICApO1xuICAgICAgICAgIHNlbGVjdGVkRmxpZ2h0LmluYm91bmRGbGlnaHRzID0gdGhpcy5hcHBseUV4dHJhRGV0YWlsc1RvRmxpZ2h0cyhcbiAgICAgICAgICAgIHNlbGVjdGVkRmxpZ2h0LmluYm91bmRGbGlnaHRzLFxuICAgICAgICAgICAgZGV0YWlsRXh0cmFzT3V0LFxuICAgICAgICAgICAgaXNURlhcbiAgICAgICAgICApO1xuICAgICAgICAgIGF3YWl0IHRoaXMuYm9va1NpbmdsZUZsaWdodChcbiAgICAgICAgICAgIGludEJhc2tldCxcbiAgICAgICAgICAgIHNlbGVjdGVkRmxpZ2h0LFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICBkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZUluYm91bmRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRldGFpbEV4dHJhc0luID0gYXdhaXQgdGhpcy5nZXRGbGlnaHREZXRhaWxFeHRyYXMoc2VsZWN0ZWRGbGlnaHQsIGRpcmVjdGlvbik7XG4gICAgICAgIGlmIChkZXRhaWxFeHRyYXNJbj8udmFsaWQpIHtcbiAgICAgICAgICBzZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHMgPSB0aGlzLmFwcGx5RXh0cmFEZXRhaWxzVG9GbGlnaHRzKFxuICAgICAgICAgICAgc2VsZWN0ZWRGbGlnaHQub3V0Ym91bmRGbGlnaHRzLFxuICAgICAgICAgICAgZGV0YWlsRXh0cmFzSW4sXG4gICAgICAgICAgICBpc1RGWFxuICAgICAgICAgICk7XG4gICAgICAgICAgc2VsZWN0ZWRGbGlnaHQuaW5ib3VuZEZsaWdodHMgPSB0aGlzLmFwcGx5RXh0cmFEZXRhaWxzVG9GbGlnaHRzKFxuICAgICAgICAgICAgc2VsZWN0ZWRGbGlnaHQuaW5ib3VuZEZsaWdodHMsXG4gICAgICAgICAgICBkZXRhaWxFeHRyYXNJbixcbiAgICAgICAgICAgIGlzVEZYXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmJvb2tTaW5nbGVGbGlnaHQoXG4gICAgICAgICAgICBpbnRCYXNrZXQsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQsXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIGRpcmVjdGlvbiAhPT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5EdWFsU2luZ2xlSW5ib3VuZFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0LnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodCA9IG51bGw7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKHRoaXMuY3VycmVudEZpbHRlcnMsIHRoaXMuY3VycmVudFNvcnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYm9va1NpbmdsZUZsaWdodChcbiAgICAgICAgICBpbnRCYXNrZXQsXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0LFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIGRpcmVjdGlvbiAhPT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5EdWFsU2luZ2xlSW5ib3VuZFxuICAgICAgICApO1xuICAgICAgICBhd2FpdCB0aGlzLmJvb2tTaW5nbGVGbGlnaHQoXG4gICAgICAgICAgaW50QmFza2V0LFxuICAgICAgICAgIHNlbGVjdGVkRmxpZ2h0LFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5EdWFsU2luZ2xlSW5ib3VuZFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHNlbGVjdEZsaWdodFNlYXRNYXBDaGVjayhcbiAgICBmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxuICAgIGRpcmVjdGlvbjogRmxpZ2h0RGlyZWN0aW9uRW51bSA9IG51bGwsXG4gICAgZ210OiBib29sZWFuID0gZmFsc2VcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgLy9mb3IgU2Npb24gYW5kIEdvMiBmbGlnaHRcbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID0gYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcbiAgICBpZiAoZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkR1YWxTaW5nbGVJbmJvdW5kKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5kdWFsU2luZ2xlU2VhdENoZWNrKGZsaWdodCwgaW50QmFza2V0LCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2hlY2tGb3JTZWF0TWFwKGZsaWdodCwgaW50QmFza2V0LCBmYWxzZSwgZ210KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjaGVja0ZvclNlYXRNYXAoXG4gICAgZmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcbiAgICBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlLFxuICAgIGR1YWxJbmJvdW5kOiBib29sZWFuLFxuICAgIGdtdDogYm9vbGVhbiA9IGZhbHNlXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmNoZWNrU2VhdG1hcEV4dHJhc0VuYWJsZWQoZmxpZ2h0KSkge1xuICAgICAgY29uc3QgaXNURlggPSBmbGlnaHQuc291cmNlID09PSBTZXJ2aWNlUHJvdmlkZXIuVHJhdmVsZnVzaW9uO1xuICAgICAgY29uc3QgZGV0YWlsRXh0cmFzID0gYXdhaXQgdGhpcy5nZXRGbGlnaHREZXRhaWxFeHRyYXMoXG4gICAgICAgIGZsaWdodCxcbiAgICAgICAgRmxpZ2h0RGlyZWN0aW9uRW51bS5EdWFsU2luZ2xlT3V0Ym91bmQsXG4gICAgICAgIGdtdFxuICAgICAgKTtcbiAgICAgIGlmIChkZXRhaWxFeHRyYXM/LnZhbGlkKSB7XG4gICAgICAgIGZsaWdodC5vdXRib3VuZEZsaWdodHMgPSB0aGlzLmFwcGx5RXh0cmFEZXRhaWxzVG9GbGlnaHRzKFxuICAgICAgICAgIGZsaWdodC5vdXRib3VuZEZsaWdodHMsXG4gICAgICAgICAgZGV0YWlsRXh0cmFzLFxuICAgICAgICAgIGlzVEZYXG4gICAgICAgICk7XG4gICAgICAgIGZsaWdodC5pbmJvdW5kRmxpZ2h0cyA9IHRoaXMuYXBwbHlFeHRyYURldGFpbHNUb0ZsaWdodHMoXG4gICAgICAgICAgZmxpZ2h0LmluYm91bmRGbGlnaHRzLFxuICAgICAgICAgIGRldGFpbEV4dHJhcyxcbiAgICAgICAgICBpc1RGWFxuICAgICAgICApO1xuICAgICAgICBhd2FpdCB0aGlzLmFkZEZsaWdodEpvdXJuZXlzVG9CYXNrZXQoZmxpZ2h0LCBpbnRCYXNrZXQsIGZhbHNlLCBkdWFsSW5ib3VuZCwgZ210KTtcbiAgICAgICAgcmV0dXJuIGRldGFpbEV4dHJhcy5pc0Jvb2tpbmc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRkRmxpZ2h0Sm91cm5leXNUb0Jhc2tldChmbGlnaHQsIGludEJhc2tldCwgZmFsc2UsIGR1YWxJbmJvdW5kLCBnbXQpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG4gIGFzeW5jIGR1YWxTaW5nbGVTZWF0Q2hlY2soXG4gICAgZmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcbiAgICBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlLFxuICAgIGR1YWxJbmJvdW5kOiBib29sZWFuXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHNlbGVjdGVkb3V0Ym91bmREUyA9IHRoaXMuc2VsZWN0ZWRGbGlnaHQudmFsdWU7XG4gICAgY29uc3Qgb3V0cnVsZXMgPSB0aGlzLmdldEZhcmVSdWxlcyhzZWxlY3RlZG91dGJvdW5kRFM/LmpvdXJuZXlIYXNoKTtcbiAgICBjb25zdCBvdXRmbGlnaHRDb3B5ID0gPEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zPnRoaXMuaGVscGVycy5jbG9uZShzZWxlY3RlZG91dGJvdW5kRFMpO1xuICAgIGlmIChvdXRydWxlcy5qb3VybmV5V2hlblNlbGVjdGVkPy5yZXF1aXJlc1JlYXNvbikge1xuICAgICAgb3V0ZmxpZ2h0Q29weS5yZXF1aXJlc1JlYXNvbktleXMgPSBvdXRydWxlcy5qb3VybmV5V2hlblNlbGVjdGVkPy5yZXF1aXJlc1JlYXNvbktleXM7XG4gICAgICBvdXRmbGlnaHRDb3B5LnJlcXVpcmVzUmVhc29uTWVzc2FnZXMgPSBvdXRydWxlcy5qb3VybmV5V2hlblNlbGVjdGVkPy5yZXF1aXJlc1JlYXNvbk1lc3NhZ2VzO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmNoZWNrRm9yU2VhdE1hcChvdXRmbGlnaHRDb3B5LCBpbnRCYXNrZXQsIGZhbHNlKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jaGVja0ZvclNlYXRNYXAoZmxpZ2h0LCBpbnRCYXNrZXQsIGR1YWxJbmJvdW5kKTtcbiAgfVxuXG4gIGNoZWNrU2VhdG1hcEV4dHJhc0VuYWJsZWQoc2VsZWN0ZWRGbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2VhdE1hcENvbmZpZ3MgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJGYXZvcml0ZU9iamVjdDx7XG4gICAgICBHRFM6IHsgc2hvd1NlYXRNYXBzOiBib29sZWFuIH07XG4gICAgICBMQ0M6IHsgc2hvd1NlYXRNYXBzOiBib29sZWFuOyBzaG93RXh0cmFzOiBib29sZWFuIH07XG4gICAgICBOREM6IHsgc2hvd1NlYXRNYXBzOiBib29sZWFuIH07XG4gICAgfT4oVXNlckZhdm9ydXJpdGUuRmxpZ2h0UmVzdWx0c0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgY29uc3QgYWxsb3dBZ2VudFRvVmlld1NlYXRNYXBzID0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRmF2b3JpdGVPYmplY3Q8e1xuICAgICAgR0RTOiB7IHNob3dTZWF0TWFwczogYm9vbGVhbiB9O1xuICAgICAgTENDOiB7IHNob3dTZWF0TWFwczogYm9vbGVhbiB9O1xuICAgICAgTkRDOiB7IHNob3dTZWF0TWFwczogYm9vbGVhbiB9O1xuICAgIH0+KFVzZXJGYXZvcnVyaXRlLkFsbG93QWdlbnRUb1ZpZXdTZWF0TWFwcyk7XG5cbiAgICBjb25zdCBwZXJtaXR0ZWRTZXJ2aWNlc0xDQzogc3RyaW5nW10gPSBbU2VydmljZVByb3ZpZGVyLlRyYXZlbGZ1c2lvbl07XG4gICAgY29uc3QgcGVybWl0dGVkU2VydmljZXNHRFM6IHN0cmluZ1tdID0gW1xuICAgICAgU2VydmljZVByb3ZpZGVyLlNhYnJlRmxpZ2h0LFxuICAgICAgU2VydmljZVByb3ZpZGVyLlRyYXZlbHBvcnRGbGlnaHQsXG4gICAgICBTZXJ2aWNlUHJvdmlkZXIuQW1hZGV1c0ZsaWdodFxuICAgIF07XG5cbiAgICBjb25zdCBwZXJtaXR0ZWRTZXJ2aWNlc05EQzogc3RyaW5nW10gPSBbU2VydmljZVByb3ZpZGVyLlNhYnJlTkRDXTtcbiAgICBjb25zdCB7IHNvdXJjZSB9ID0gc2VsZWN0ZWRGbGlnaHQ7XG5cbiAgICBpZiAocGVybWl0dGVkU2VydmljZXNMQ0MuaW5jbHVkZXMoc291cmNlKSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgc2VhdE1hcENvbmZpZ3M/LkxDQz8uc2hvd1NlYXRNYXBzIHx8XG4gICAgICAgIHNlYXRNYXBDb25maWdzPy5MQ0M/LnNob3dFeHRyYXMgfHxcbiAgICAgICAgKHRoaXMudXNlclNlcnZpY2UudXNlcklzQWdlbnQoKSAmJiBhbGxvd0FnZW50VG9WaWV3U2VhdE1hcHM/LkxDQz8uc2hvd1NlYXRNYXBzKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocGVybWl0dGVkU2VydmljZXNHRFMuaW5jbHVkZXMoc291cmNlKSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgc2VhdE1hcENvbmZpZ3M/LkdEUz8uc2hvd1NlYXRNYXBzIHx8XG4gICAgICAgICh0aGlzLnVzZXJTZXJ2aWNlLnVzZXJJc0FnZW50KCkgJiYgYWxsb3dBZ2VudFRvVmlld1NlYXRNYXBzPy5HRFM/LnNob3dTZWF0TWFwcylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHBlcm1pdHRlZFNlcnZpY2VzTkRDLmluY2x1ZGVzKHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHNlYXRNYXBDb25maWdzPy5OREM/LnNob3dTZWF0TWFwcyB8fFxuICAgICAgICAodGhpcy51c2VyU2VydmljZS51c2VySXNBZ2VudCgpICYmIGFsbG93QWdlbnRUb1ZpZXdTZWF0TWFwcz8uTkRDPy5zaG93U2VhdE1hcHMpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGFwcGx5RXh0cmFEZXRhaWxzVG9GbGlnaHRzKFxuICAgIGZsaWdodHM6IEZsaWdodEpvdXJuZXlbXSxcbiAgICBkZXRhaWxFeHRyYXM6IERldGFpbEV4dHJhcyxcbiAgICBpc1RGWDpib29sZWFuID0gZmFsc2VcbiAgKTogRmxpZ2h0Sm91cm5leVtdIHtcbiAgICByZXR1cm4gZmxpZ2h0cy5tYXAoZmxpZ2h0ID0+IHtcbiAgICAgIGNvbnN0IGlkOiBzdHJpbmcgPSBmbGlnaHQuaWQ7XG4gICAgICBjb25zdCBzZWF0OiBGbGlnaHRTZWF0TWFwU2VhdHMgPSBkZXRhaWxFeHRyYXMuc2VhdHNbaWRdO1xuICAgICAgY29uc3QgbG95YWx0eTogc3RyaW5nW10gPSBkZXRhaWxFeHRyYXMubG95YWx0eVtpZF07XG5cbiAgICAgIGlmIChzZWF0KSB7XG4gICAgICAgIGRlbGV0ZSBzZWF0Ll9fdHlwZW5hbWU7XG4gICAgICAgIGZsaWdodC5hZGRpdGlvbmFsLnNlYXQgPSBzZWF0O1xuICAgICAgfVxuXG4gICAgICBpZiAobG95YWx0eSkge1xuICAgICAgICBmbGlnaHQuYWRkaXRpb25hbC5sb3lhbHR5ID0gbG95YWx0eTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWRkaXRpb25hbERldGFpbHMgPSBkZXRhaWxFeHRyYXMuYWRkaXRpb25hbERldGFpbHNbaWRdO1xuICAgICAgLy8gaGVyZSBpdCdzIG9ubHkgVEZYXG4gICAgICBpZiAoYWRkaXRpb25hbERldGFpbHMgJiYgaXNURlgpIHtcbiAgICAgICAgY29uc3QgYWRkaXRpb25hbERldGFpbHNLZXlzOiBBZGRpdGlvbmFsRGV0YWlsc1tdID0gT2JqZWN0LmtleXMoXG4gICAgICAgICAgYWRkaXRpb25hbERldGFpbHNcbiAgICAgICAgKSBhcyBBZGRpdGlvbmFsRGV0YWlsc1tdO1xuICAgICAgICBpZiAoYWRkaXRpb25hbERldGFpbHNLZXlzLmxlbmd0aCkge1xuICAgICAgICAgIGFkZGl0aW9uYWxEZXRhaWxzS2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBmbGlnaHQuYWRkaXRpb25hbFtrZXldID0gYWRkaXRpb25hbERldGFpbHNba2V5XTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZsaWdodDtcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIF91cGRhdGVUcmF2ZWxQb2xpY2llcygpIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0IHx8XG4gICAgICAodGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuZHVhbFNpbmdsZVdoZW5TZWxlY3RlZCAmJlxuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5kdWFsU2luZ2xlV2hlblNlbGVjdGVkW3RoaXMuc2VsZWN0ZWRHcm91cEZsaWdodC5qb3VybmV5SGFzaF0pIHx8XG4gICAgICAhdGhpcy5tdWx0aSB8fFxuICAgICAgdGhpcy5tdWx0aS5sZW5ndGggPT09IDBcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbXVsdGlJbmJvdW5kcyA9ICh0aGlzLm11bHRpIHx8IFtdKS5yZWR1Y2UoKGFjYzogRmxpZ2h0SXRpbmVyYXJ5W10sIGl0ZW06IEZsaWdodE11bHRpKSA9PiB7XG4gICAgICBpZiAoaXRlbS5vcmRlciA9PT0gMSAmJiBpdGVtLnJlc3VsdHMgJiYgaXRlbS5yZXN1bHRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYWNjID0gYWNjLmNvbmNhdChpdGVtLnJlc3VsdHMgYXMgRmxpZ2h0SXRpbmVyYXJ5W10pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSk7XG4gICAgaWYgKG11bHRpSW5ib3VuZHMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKCF0aGlzLnJhd1Jlc3VsdHMpIHtcbiAgICAgICAgdGhpcy5yYXdSZXN1bHRzID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbSh0aGlzLnJlc3VsdHNTZXNzaW9uTmFtZSArICdfcmF3Jyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZmV0Y2hpbmdSdWxlcyA9IHRydWU7XG5cbiAgICAgIGNvbnNvbGUubG9nKHRoaXMucmF3UmVzdWx0cyk7XG4gICAgICB0aGlzLmFwcGx5RmxpZ2h0UnVsZXNcbiAgICAgICAgLmZldGNoT25lKHtcbiAgICAgICAgICBzZWxlY3RlZE91dGJvdW5kRmxpZ2h0OiB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQsXG4gICAgICAgICAgYXZhaWxhYmxlSW5ib3VuZEZsaWdodHM6IG11bHRpSW5ib3VuZHMsXG4gICAgICAgICAgc2VhcmNoSWQ6IHRoaXMucmF3UmVzdWx0cy5zZWFyY2hJZFxuICAgICAgICB9KVxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgIChydWxlczogUnVsZUFjdGlvblN1bW1hcnlJbnRlcmZhY2UpID0+IHtcbiAgICAgICAgICAgIGlmIChydWxlcykge1xuICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeSA9IHRoaXMuaGVscGVycy5tZXJnZU9iamVjdHModGhpcy5fcnVsZUFjdGlvblN1bW1hcnksIHJ1bGVzKTtcbiAgICAgICAgICAgICAgdGhpcy5fYXBwbHlGaWx0ZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHt9LFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hpbmdSdWxlcyA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJvb2tTaW5nbGVGbGlnaHQoXG4gICAgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSxcbiAgICBzZWxlY3RlZEZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgaW5nb3JlSW52b2tlZDogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGR1YWxJbmJvdW5kOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgY29uc3Qgc2NoZW1hRGV0YWlscyA9IHRoaXMuY3JlYXRlU2NoZW1hRGV0YWlscyhzZWxlY3RlZEZsaWdodCwgRmxpZ2h0Sm91cm5leVR5cGUuU2luZ2xlKTtcbiAgICBhd2FpdCB0aGlzLmRvQm9va2luZyhcbiAgICAgIGludEJhc2tldCxcbiAgICAgIHNlbGVjdGVkRmxpZ2h0LFxuICAgICAgc2NoZW1hRGV0YWlscyxcbiAgICAgIHNlbGVjdGVkRmxpZ2h0Lm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZyxcbiAgICAgICcnLFxuICAgICAgaW5nb3JlSW52b2tlZCxcbiAgICAgIGR1YWxJbmJvdW5kXG4gICAgKTtcbiAgfVxuXG4gIGNyZWF0ZVNjaGVtYURldGFpbHMoZmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucywgam91cm5leVR5cGU6IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKGpvdXJuZXlUeXBlID09PSBGbGlnaHRKb3VybmV5VHlwZS5TaW5nbGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG91dGJvdW5kRmxpZ2h0czogZmxpZ2h0Lm91dGJvdW5kRmxpZ2h0cy5tYXAoXG4gICAgICAgICAgKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgc2VnbWVudEluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1ha2VTY2hlbWFGbGlnaHRzKGZsaWdodCwgJ291dGJvdW5kJywgMCwgc2VnbWVudEluZGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIGluYm91bmRGbGlnaHRzOiBbXSxcbiAgICAgICAgam91cm5leVR5cGU6IEZsaWdodEpvdXJuZXlUeXBlLlNpbmdsZSxcbiAgICAgICAgdGF4ZXM6IGZsaWdodC50YXhlcy5tYXAoKHRheDogRmxpZ2h0QW1vdW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0YXguZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBjdXJyZW5jeTogdGF4LmN1cnJlbmN5LFxuICAgICAgICAgICAgYW1vdW50OiB0YXguYW1vdW50XG4gICAgICAgICAgfTtcbiAgICAgICAgfSksXG4gICAgICAgIGZhcmVDb25kaXRpb25zOiBmbGlnaHQuZmFyZUNvbmRpdGlvbnNcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG91dGJvdW5kRmxpZ2h0czogW1xuICAgICAgICAgIC4uLmZsaWdodC5vdXRib3VuZEZsaWdodHMubWFwKChmbGlnaHQ6IEZsaWdodEpvdXJuZXksIHNlZ21lbnRJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYWtlU2NoZW1hRmxpZ2h0cyhmbGlnaHQsICdvdXRib3VuZCcsIDAsIHNlZ21lbnRJbmRleCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgXSxcbiAgICAgICAgaW5ib3VuZEZsaWdodHM6IFtcbiAgICAgICAgICAuLi5mbGlnaHQuaW5ib3VuZEZsaWdodHMubWFwKChmbGlnaHQ6IEZsaWdodEpvdXJuZXksIHNlZ21lbnRJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYWtlU2NoZW1hRmxpZ2h0cyhmbGlnaHQsICdpbmJvdW5kJywgMCwgc2VnbWVudEluZGV4KTtcbiAgICAgICAgICB9KVxuICAgICAgICBdLFxuICAgICAgICBqb3VybmV5VHlwZTogRmxpZ2h0Sm91cm5leVR5cGUuUm91bmR0cmlwLFxuICAgICAgICB0YXhlczogKGZsaWdodC50YXhlcyA/IGZsaWdodC50YXhlcyA6IFtdKS5tYXAoKHRheDogRmxpZ2h0QW1vdW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0YXguZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBjdXJyZW5jeTogdGF4LmN1cnJlbmN5LFxuICAgICAgICAgICAgYW1vdW50OiB0YXguYW1vdW50XG4gICAgICAgICAgfTtcbiAgICAgICAgfSksXG4gICAgICAgIGZhcmVDb25kaXRpb25zOiBmbGlnaHQuZmFyZUNvbmRpdGlvbnNcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlQm9va2luZ0Jhc2tldE9iamVjdChcbiAgICBpZDogc3RyaW5nLFxuICAgIGZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgam91cm5leVR5cGU6IHN0cmluZ1xuICApOiBBZGRJdGVtVG9CYXNrZXRNdXRhdGlvblZhcmlhYmxlcyB7XG4gICAgY29uc3Qgc2NoZW1hRGV0YWlscyA9IHRoaXMuY3JlYXRlU2NoZW1hRGV0YWlscyhmbGlnaHQsIGpvdXJuZXlUeXBlKTtcbiAgICBjb25zdCBib29raW5nOiBBZGRJdGVtVG9CYXNrZXRNdXRhdGlvblZhcmlhYmxlcyA9IHtcbiAgICAgIGFkdWx0czogdGhpcy5hZHVsdHMsXG4gICAgICBiYXNrZXQ6IGlkLFxuICAgICAgY2hpbGRyZW46IHRoaXMuY2hpbGRyZW4sXG4gICAgICBjbzJQZXJJdGVtOiBmbGlnaHQuY28yUGVySXRlbSxcbiAgICAgIGNvMlBlclBhc3NlbmdlcjogZmxpZ2h0LmNvMlBlclBhc3NlbmdlcixcbiAgICAgIGN1cnJlbmN5OiBmbGlnaHQudG90YWwuY3VycmVuY3kgYXMgQ3VycmVuY3lDb2RlLFxuICAgICAgZGV0YWlsOiBzY2hlbWFEZXRhaWxzLFxuICAgICAgcHJpY2U6ICtmbGlnaHQudG90YWwucHJpY2UudG9GaXhlZCgyKSxcbiAgICAgIHNlYXJjaFF1ZXJ5OiB0aGlzLnJlc3VsdFF1ZXJ5LFxuICAgICAgc2VydmljZTogZmxpZ2h0LnNvdXJjZUlkLnRvU3RyaW5nKCksXG4gICAgICBvdXRib3VuZERhdGU6IGZsaWdodC5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmdVVENcbiAgICB9O1xuICAgIGxldCBpbmJvdW5kRGF0ZSA9IGZsaWdodD8uaW5ib3VuZEZsaWdodHM/LlswXT8uZGF0ZVRpbWVEZXBhcnRpbmdVVEM7XG4gICAgaWYgKGluYm91bmREYXRlKSB7XG4gICAgICBib29raW5nLmluYm91bmREYXRlID0gaW5ib3VuZERhdGU7XG4gICAgfVxuICAgIHJldHVybiBib29raW5nO1xuICB9XG5cbiAgY3JlYXRlTG93ZXN0Qm9va2luZyhcbiAgICBpZDogc3RyaW5nLFxuICAgIGR1YWxJbmJvdW5kOiBib29sZWFuLFxuICAgIHNlbGVjdGVkRmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9uc1xuICApOiBhbnkge1xuICAgIGlmIChcbiAgICAgICF0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3Q/LnJldHVybnMgfHxcbiAgICAgICh0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3Q/LmR1YWxJbmJvdW5kPy5hbW91bnQgK1xuICAgICAgICB0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3Q/LmR1YWxPdXRib3VuZD8uYW1vdW50IDxcbiAgICAgICAgdGhpcy5jaGVhcGVzdFByaWNlT2JqZWN0Py5yZXR1cm5zPy5hbW91bnQgJiZcbiAgICAgICAgdGhpcy5jaGVhcGVzdFByaWNlT2JqZWN0Py5kdWFsSW5ib3VuZD8uY3VycmVuY3lDb2RlID09XG4gICAgICAgICAgdGhpcy5jaGVhcGVzdFByaWNlT2JqZWN0Py5kdWFsT3V0Ym91bmQ/LmN1cnJlbmN5Q29kZSlcbiAgICApIHtcbiAgICAgIGlmIChzZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHMubGVuZ3RoICYmICFzZWxlY3RlZEZsaWdodC5pbmJvdW5kRmxpZ2h0cy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKCFkdWFsSW5ib3VuZCkge1xuICAgICAgICAgIC8vIGR1YWwgb3V0XG4gICAgICAgICAgY29uc3QgY2hlYXBGbGlnaHREdWFsT3V0Ym91bmQgPSB0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3QuZHVhbE91dGJvdW5kLmZsaWdodDtcbiAgICAgICAgICBjb25zdCBkdWFsT3V0Ym91bmRCb29raW5nID0gdGhpcy5jcmVhdGVCb29raW5nQmFza2V0T2JqZWN0KFxuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICBjaGVhcEZsaWdodER1YWxPdXRib3VuZCxcbiAgICAgICAgICAgIEZsaWdodEpvdXJuZXlUeXBlLlNpbmdsZVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCBmdWxsUHJpY2UgPSBkdWFsT3V0Ym91bmRCb29raW5nLnByaWNlO1xuICAgICAgICAgIHJldHVybiB7IGxvd2VzdFByaWNlQm9va2luZzogZHVhbE91dGJvdW5kQm9va2luZywgbG93ZXN0RnVsbFRvdGFsOiBmdWxsUHJpY2UgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBkdWFsIGluXG4gICAgICAgICAgY29uc3QgY2hlYXBGbGlnaHREdWFsSW5ib3VuZCA9IHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdC5kdWFsSW5ib3VuZC5mbGlnaHQ7XG4gICAgICAgICAgY29uc3QgZHVhbEluYm91bmRCb29raW5nID0gdGhpcy5jcmVhdGVCb29raW5nQmFza2V0T2JqZWN0KFxuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICBjaGVhcEZsaWdodER1YWxJbmJvdW5kLFxuICAgICAgICAgICAgRmxpZ2h0Sm91cm5leVR5cGUuU2luZ2xlXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IGZ1bGxQcmljZSA9IGR1YWxJbmJvdW5kQm9va2luZy5wcmljZTtcbiAgICAgICAgICByZXR1cm4geyBsb3dlc3RQcmljZUJvb2tpbmc6IGR1YWxJbmJvdW5kQm9va2luZywgbG93ZXN0RnVsbFRvdGFsOiBmdWxsUHJpY2UgfTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gcmV0dXJuIGZsaWdodFxuICAgICAgICBsZXQgY2hlYXBGbGlnaHREdWFsT3V0Ym91bmQgPSB0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3QuZHVhbE91dGJvdW5kLmZsaWdodDtcbiAgICAgICAgY2hlYXBGbGlnaHREdWFsT3V0Ym91bmQuaW5ib3VuZEZsaWdodHMgPVxuICAgICAgICAgIHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdC5kdWFsSW5ib3VuZC5mbGlnaHQub3V0Ym91bmRGbGlnaHRzO1xuICAgICAgICBsZXQgZHVhbE91dGJvdW5kQm9va2luZyA9IHRoaXMuY3JlYXRlQm9va2luZ0Jhc2tldE9iamVjdChcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBjaGVhcEZsaWdodER1YWxPdXRib3VuZCxcbiAgICAgICAgICBGbGlnaHRKb3VybmV5VHlwZS5Sb3VuZHRyaXBcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBjaGVhcEZsaWdodER1YWxJbmJvdW5kID0gdGhpcy5jaGVhcGVzdFByaWNlT2JqZWN0LmR1YWxJbmJvdW5kLmZsaWdodDtcbiAgICAgICAgY29uc3QgZHVhbEluYm91bmRCb29raW5nID0gdGhpcy5jcmVhdGVCb29raW5nQmFza2V0T2JqZWN0KFxuICAgICAgICAgIGlkLFxuICAgICAgICAgIGNoZWFwRmxpZ2h0RHVhbEluYm91bmQsXG4gICAgICAgICAgRmxpZ2h0Sm91cm5leVR5cGUuU2luZ2xlXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgZnVsbFByaWNlID0gZHVhbE91dGJvdW5kQm9va2luZy5wcmljZSArIGR1YWxJbmJvdW5kQm9va2luZy5wcmljZTtcbiAgICAgICAgZHVhbE91dGJvdW5kQm9va2luZy5wcmljZSA9ICtmdWxsUHJpY2UudG9GaXhlZCgyKTtcbiAgICAgICAgcmV0dXJuIHsgbG93ZXN0UHJpY2VCb29raW5nOiBkdWFsT3V0Ym91bmRCb29raW5nLCBsb3dlc3RGdWxsVG90YWw6IGZ1bGxQcmljZSB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjaGVhcEZsaWdodCA9IHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdC5yZXR1cm5zLmZsaWdodDtcbiAgICAgIGNvbnN0IGpvdXJuZXlUeXBlID0gdGhpcy5pc1JldHVybiA/IEZsaWdodEpvdXJuZXlUeXBlLlJvdW5kdHJpcCA6IEZsaWdodEpvdXJuZXlUeXBlLlNpbmdsZTtcbiAgICAgIGNvbnN0IGxvd2VzdEZ1bGxGbGlnaHQgPSBjaGVhcEZsaWdodCA/IHRoaXMuY3JlYXRlQm9va2luZ0Jhc2tldE9iamVjdChpZCwgY2hlYXBGbGlnaHQsIGpvdXJuZXlUeXBlKTpudWxsO1xuICAgICAgcmV0dXJuIHsgbG93ZXN0UHJpY2VCb29raW5nOiBsb3dlc3RGdWxsRmxpZ2h0LCBsb3dlc3RGdWxsVG90YWw6IGxvd2VzdEZ1bGxGbGlnaHQucHJpY2UgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkb0Jvb2tpbmcoXG4gICAgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSxcbiAgICBzZWxlY3RlZEZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgc2NoZW1hRGV0YWlsczogYW55LFxuICAgIG91dGJvdW5kRGF0ZTogc3RyaW5nLFxuICAgIGluYm91bmREYXRlPzogc3RyaW5nLFxuICAgIGluZ29yZUludm9rZWQgPSBmYWxzZSxcbiAgICBkdWFsSW5ib3VuZCA9IGZhbHNlXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xuICAgIGNvbnN0IHsgc291cmNlSWQsIGNvMlBlckl0ZW0sIGNvMlBlclBhc3NlbmdlciwgdG90YWwsIHJlcXVpcmVzUmVhc29uS2V5cyB9ID0gc2VsZWN0ZWRGbGlnaHQ7XG4gICAgY29uc3QgeyBsb3dlc3RQcmljZUJvb2tpbmcsIGxvd2VzdEZ1bGxUb3RhbCB9ID0gdGhpcy5jcmVhdGVMb3dlc3RCb29raW5nKFxuICAgICAgaW50QmFza2V0LmlkLFxuICAgICAgZHVhbEluYm91bmQsXG4gICAgICBzZWxlY3RlZEZsaWdodFxuICAgICk7XG4gICAgc2NoZW1hRGV0YWlscy5obXVwID0gdG90YWwuaG11cDtcbiAgICB0aGlzLnJlc3VsdFF1ZXJ5LmFzU2luZ2xlcyA9IGR1YWxJbmJvdW5kO1xuICAgIGNvbnN0IGJvb2tpbmc6IEFkZEl0ZW1Ub0Jhc2tldE11dGF0aW9uVmFyaWFibGVzID0ge1xuICAgICAgYWR1bHRzOiB0aGlzLmFkdWx0cyxcbiAgICAgIGJhc2tldDogaW50QmFza2V0LmlkLFxuICAgICAgY2hpbGRyZW46IHRoaXMuY2hpbGRyZW4sXG4gICAgICBjbzJQZXJJdGVtLFxuICAgICAgY28yUGVyUGFzc2VuZ2VyLFxuICAgICAgY3VycmVuY3k6IHRvdGFsLmN1cnJlbmN5IGFzIEN1cnJlbmN5Q29kZSxcbiAgICAgIGRldGFpbDogc2NoZW1hRGV0YWlscyxcbiAgICAgIHByaWNlOiArdG90YWwucHJpY2UudG9GaXhlZCgyKSxcbiAgICAgIHNlYXJjaFF1ZXJ5OiB0aGlzLnJlc3VsdFF1ZXJ5LFxuICAgICAgc2VydmljZTogc291cmNlSWQudG9TdHJpbmcoKSxcbiAgICAgIG91dGJvdW5kRGF0ZSxcbiAgICAgIGxvd2VzdFByaWNlQ3VycmVuY3k6XG4gICAgICAgIHRoaXMuYWJzb2x1dGVDaGVhcGVzdFByaWNlLmFtb3VudCB8fFxuICAgICAgICB0aGlzLmFic29sdXRlQ2hlYXBlc3RQcmljZS5jdXJyZW5jeUNvZGUgIT09IHRvdGFsLmN1cnJlbmN5XG4gICAgICAgICAgPyA8Q3VycmVuY3lDb2RlPnRoaXMuYWJzb2x1dGVDaGVhcGVzdFByaWNlLmN1cnJlbmN5Q29kZVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIGxvd2VzdFByaWNlOiBsb3dlc3RGdWxsVG90YWwsXG4gICAgICBsb3dlc3RQcmljZURldGFpbDogbG93ZXN0UHJpY2VCb29raW5nLFxuICAgICAgcmVhc29uS2V5czogcmVxdWlyZXNSZWFzb25LZXlzXG4gICAgfTtcbiAgICBpZiAoaW5ib3VuZERhdGUpIHtcbiAgICAgIGJvb2tpbmcuaW5ib3VuZERhdGUgPSBpbmJvdW5kRGF0ZTtcbiAgICB9XG4gICAgLy8gYm9va2luZy5kZXRhaWwubWFya3VwID0gW3thbW91bnQ6IDAsIGNvc3Q6MH1dO1xuICAgIGNvbnN0IHdoYXRIYXBwZW5lZCA9IGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcbiAgICAgIGJvb2tpbmcsXG4gICAgICBpbnRCYXNrZXQsXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXG4gICAgICB0aGlzLnRyYXZlbGxlcnMsXG4gICAgICBzZWxlY3RlZEZsaWdodC5yZXF1aXJlc1JlYXNvbktleXMsXG4gICAgICBmYWxzZSxcbiAgICAgIGluZ29yZUludm9rZWRcbiAgICApO1xuICAgIGlmICh3aGF0SGFwcGVuZWQgPT09IERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMucmVzZWFyY2gpIHtcbiAgICAgIHRoaXMucmVzZWFyY2hXaXRoTmV3VXNlcigpO1xuICAgIH1cbiAgICByZXR1cm4gd2hhdEhhcHBlbmVkO1xuICB9XG5cbiAgYXN5bmMgZ2V0RmxpZ2h0RGV0YWlsRXh0cmFzKFxuICAgIHNlbGVjdGVkRmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyB8IEZsaWdodEl0aW5lcmFyeSxcbiAgICBkaXJlY3Rpb246IEZsaWdodERpcmVjdGlvbkVudW0sXG4gICAgZ210OiBib29sZWFuID0gZmFsc2UsXG4gICAgdXNlcnM/OlRyYXZlbGxlcltdXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgLy8gb25seSBURlggZm9yIG5vdywgcmVtb3ZlIGlmIHN0YXRlbWVudCB3aGVuIHdlIGRvIHRoZSByZXN0XG4gICAgY29uc3Qgc2VhdHMgPSBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxuICAgICAgTW9kYWxUeXBlcy5GbGlnaHRFeHRyYXNEaWFsb2dDb21wb25lbnQsXG4gICAgICB7IGNlbnRlcmVkOiB0cnVlLCB3aW5kb3dDbGFzczogJ21vZGFsLWZsaWdodC1leHRyYXMnLCBiYWNrZHJvcDogJ3N0YXRpYycgfSxcbiAgICAgIHsgZmxpZ2h0OiBzZWxlY3RlZEZsaWdodCwgZGlyZWN0aW9uLCBnbXQsIHVzZXJzIH1cbiAgICApO1xuICAgIGlmIChzZWF0cykge1xuICAgICAgcmV0dXJuIHNlYXRzO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZygncmV0aGluZyBsaWZlIGNob2ljZXMnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldCBhYnNvbHV0ZUNoZWFwZXN0UHJpY2UoKTogSUNoZWFwZXN0UHJpY2UgfCBJQ2hlYXBlc3RQcmljZURldGFpbHMge1xuICAgIGlmICh0aGlzLmNoZWFwZXN0UHJpY2UpIHJldHVybiB0aGlzLmNoZWFwZXN0UHJpY2U7XG4gICAgbGV0IHByaWNlOiBJQ2hlYXBlc3RQcmljZURldGFpbHMgPSB7IGFtb3VudDogbnVsbCwgY3VycmVuY3lDb2RlOiBudWxsLCBmbGlnaHQ6IG51bGwgfTtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5jaGVhcGVzdFByaWNlT2JqZWN0LnJldHVybnMgfHxcbiAgICAgICh0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3QuZHVhbEluYm91bmQuYW1vdW50ICsgdGhpcy5jaGVhcGVzdFByaWNlT2JqZWN0LmR1YWxPdXRib3VuZC5hbW91bnQgPFxuICAgICAgICB0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3QucmV0dXJucz8uYW1vdW50ICYmXG4gICAgICAgIHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdC5kdWFsSW5ib3VuZC5jdXJyZW5jeUNvZGUgPT1cbiAgICAgICAgICB0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3QuZHVhbE91dGJvdW5kLmN1cnJlbmN5Q29kZSlcbiAgICApIHtcbiAgICAgIHByaWNlLmFtb3VudCA9XG4gICAgICAgIHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdC5kdWFsSW5ib3VuZC5hbW91bnQgKyB0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3QuZHVhbE91dGJvdW5kLmFtb3VudDtcbiAgICAgIHByaWNlLmN1cnJlbmN5Q29kZSA9IHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdC5kdWFsSW5ib3VuZC5jdXJyZW5jeUNvZGU7XG4gICAgfSBlbHNlIHByaWNlID0gdGhpcy5jaGVhcGVzdFByaWNlT2JqZWN0LnJldHVybnM7XG4gICAgcmV0dXJuIHByaWNlO1xuICB9XG5cbiAgcHJpdmF0ZSBtYWtlU2NoZW1hRmxpZ2h0cyhcbiAgICBzZWxlY3RlZEZsaWdodDogRmxpZ2h0Sm91cm5leSxcbiAgICBmbGlnaHRHcm91cDogJ291dGJvdW5kJyB8ICdpbmJvdW5kJyxcbiAgICBncm91cEluZGV4OiBudW1iZXIsXG4gICAgc2VnbWVudEluZGV4OiBudW1iZXJcbiAgKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc2VsZWN0ZWRGbGlnaHQsXG4gICAgICBqb3VybmV5SW5mbzoge1xuICAgICAgICBmbGlnaHRHcm91cCxcbiAgICAgICAgZ3JvdXBJbmRleCxcbiAgICAgICAgc2VnbWVudEluZGV4XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQmFnc0FsbG93YW5jZVRvRmxpZ2h0c1NjaGVtYShcbiAgICBzZWxlY3RlZEZsaWdodDogRmxpZ2h0Sm91cm5leSxcbiAgICBmbGlnaHRRdW90ZTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgaXNJbiA9IGZhbHNlXG4gICk6IGFueSB7XG4gICAgc2VsZWN0ZWRGbGlnaHQuYWRkaXRpb25hbFsnYmFnZ2FnZUFsbG93YW5jZUFtb3VudCddID0gMDtcbiAgICBsZXQgaG9sZEJhZ0Ftb3VudCA9IFswXTtcbiAgICBpZiAoIWlzSW4pIHtcbiAgICAgIGhvbGRCYWdBbW91bnQgPSBmbGlnaHRRdW90ZS5vdXRib3VuZEZsaWdodHMucmVkdWNlKChhY2MsZmxpZ2h0KT0+e1xuICAgICAgICBjb25zdCBiYWdzID1mbGlnaHQuYWRkaXRpb25hbC5iYWdnYWdlQWxsb3dhbmNlLmZpbHRlcigoYmFnOiBCYWdnYWdlQWxsb3dhbmNlKT0+YmFnLnR5cGUgPT09ICdDaGVja0luJyApO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBiYWdzLm1hcCgoYmFnOkJhZ2dhZ2VBbGxvd2FuY2UpPT5iYWcucXR5KTtcbiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGgpIHtcbiAgICAgICAgICBhY2MucHVzaChNYXRoLm1pbiguLi5yZXN1bHQpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LFtdKVxuICAgIH0gZWxzZSB7XG4gICAgICBob2xkQmFnQW1vdW50ID0gZmxpZ2h0UXVvdGUuaW5ib3VuZEZsaWdodHMucmVkdWNlKChhY2MsZmxpZ2h0KT0+e1xuICAgICAgICBjb25zdCBiYWdzID1mbGlnaHQuYWRkaXRpb25hbC5iYWdnYWdlQWxsb3dhbmNlLmZpbHRlcigoYmFnOiBCYWdnYWdlQWxsb3dhbmNlKT0+YmFnLnR5cGUgPT09ICdDaGVja0luJyApO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBiYWdzLm1hcCgoYmFnOkJhZ2dhZ2VBbGxvd2FuY2UpPT5iYWcucXR5KTtcbiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGgpIHtcbiAgICAgICAgICBhY2MucHVzaChNYXRoLm1pbiguLi5yZXN1bHQpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LFtdKVxuICAgIH1cblxuICAgIHNlbGVjdGVkRmxpZ2h0LmFkZGl0aW9uYWxbJ2JhZ2dhZ2VBbGxvd2FuY2VBbW91bnQnXSA9IGhvbGRCYWdBbW91bnQubGVuZ3RoXG4gICAgICAgID8gTWF0aC5taW4oLi4uaG9sZEJhZ0Ftb3VudClcbiAgICAgICAgOiAwO1xuXG4gICAgc2VsZWN0ZWRGbGlnaHQuYWRkaXRpb25hbFsnaXNIYW5kQmFnZ2FnZSddID0gISFmbGlnaHRRdW90ZT8uYmFnZ2FnZUFsbG93YW5jZT8uZmlsdGVyKFxuICAgICAgKGJhZzogQmFnZ2FnZUFsbG93YW5jZSkgPT4gYmFnLnR5cGUgPT09IEJhZ2dhZ2VUeXBlLkhhbmRDYXJyeVxuICAgICk7XG5cbiAgICByZXR1cm4gc2VsZWN0ZWRGbGlnaHQ7XG4gIH1cblxuICBhc3luYyBhZGRGbGlnaHRKb3VybmV5c1RvQmFza2V0KFxuICAgIGZsaWdodFF1b3RlOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcbiAgICBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlLFxuICAgIGlnbm9yZUludm9rZTogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGR1YWxJbmJvdW5kOiBib29sZWFuID0gZmFsc2UsXG4gICAgZ210OiBib29sZWFuID0gZmFsc2VcbiAgKTogUHJvbWlzZTxEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zPiB7XG4gICAgbGV0IHJlcXVpcmVzT3ZlcnJpZGVSZWFzb24gPSBmYWxzZTtcblxuICAgIGlmICgoZmxpZ2h0UXVvdGUgYXMgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMpLnVuYXZhaWxhYmxlICYmICF0aGlzLnVzZXJTZXJ2aWNlLmJvYm8pIHtcbiAgICAgIC8vIGNoZWNrIGhlcmUgaWYgd2UgYXJlIGFuIGFnZW50IHVzZXIgaW52b2tpbmdcbiAgICAgIGNvbnNvbGUud2FybignKysrIEZsaWdodCBpcyBvdXQgb2YgcG9saWN5IC0gYmFja2luZyBvdXQgKysrJyk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgKGZsaWdodFF1b3RlIGFzIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKS51bmF2YWlsYWJsZSAmJlxuICAgICAgdGhpcy51c2VyU2VydmljZS5ib2JvXG4gICAgKSB7XG4gICAgICByZXF1aXJlc092ZXJyaWRlUmVhc29uID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xuICAgIGlmIChiYXNrZXQpIHtcbiAgICAgIHRoaXMuYmFza2V0U2VydmljZS50b2dnbGVNZW51KCk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5hZGRKb3VybmV5VG9CYXNrZXQoXG4gICAgICAgIGZsaWdodFF1b3RlLFxuICAgICAgICBpZ25vcmVJbnZva2UsXG4gICAgICAgIGludEJhc2tldCxcbiAgICAgICAgZHVhbEluYm91bmQsXG4gICAgICAgIHJlcXVpcmVzT3ZlcnJpZGVSZWFzb24sXG4gICAgICAgIGdtdFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNhbmNlbCk7IC8vIFRPRE8gc2hvdWxkIHRoaXMgdGhyb3cgYW4gZXJyb3I/XG4gIH1cblxuICBhc3luYyBhZGRKb3VybmV5VG9CYXNrZXQoXG4gICAgZmxpZ2h0UXVvdGU6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxuICAgIGlnbm9yZUludm9rZTogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UsXG4gICAgZHVhbEluYm91bmQ6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICByZXF1aXJlc092ZXJyaWRlUmVhc29uPzogYm9vbGVhbixcbiAgICBnbXQ6IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgICBjb25zdCB7IHNvdXJjZUlkLCBjbzJQZXJJdGVtLCBjbzJQZXJQYXNzZW5nZXIsIHRvdGFsIH0gPSBmbGlnaHRRdW90ZTtcblxuICAgIGxldCBsb3dlc3RQcmljZUJvb2tpbmcgPSBudWxsO1xuICAgIGxldCBsb3dlc3RGdWxsVG90YWwgPSBudWxsO1xuXG4gICAgY29uc3Qgb3V0Ym91bmREYXRlOiBhbnkgPSBtb21lbnQoZmxpZ2h0UXVvdGUub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKTtcbiAgICBjb25zdCBpbmJvdW5kRGF0ZTogYW55ID0gZmxpZ2h0UXVvdGUuaW5ib3VuZEZsaWdodHMubGVuZ3RoXG4gICAgICA/IG1vbWVudChmbGlnaHRRdW90ZS5pbmJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZylcbiAgICAgIDogbnVsbDtcblxuICAgIGlmICghZ210KSB7XG4gICAgICBjb25zdCB7IGxvd2VzdFByaWNlQm9va2luZzogbHAsIGxvd2VzdEZ1bGxUb3RhbDogbGZ0IH0gPSB0aGlzLmNyZWF0ZUxvd2VzdEJvb2tpbmcoXG4gICAgICAgIGludEJhc2tldC5pZCxcbiAgICAgICAgZHVhbEluYm91bmQsXG4gICAgICAgIGZsaWdodFF1b3RlXG4gICAgICApO1xuICAgICAgbG93ZXN0UHJpY2VCb29raW5nID0gbHA7XG4gICAgICBsb3dlc3RGdWxsVG90YWwgPSBsZnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVzdWx0UXVlcnkgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICB7XG4gICAgICAgICAgZmFyZVR5cGU6IEZhcmVUeXBlLkZsZXhpYmxlLFxuICAgICAgICAgIHBhc3NlbmdlcnM6IFt7IHR5cGU6IEZsaWdodFBhc3NlbmdlclR5cGUuQWR1bHQgfV0sXG4gICAgICAgICAgb3JpZ2luQWlycG9ydDogZmxpZ2h0UXVvdGUub3V0Ym91bmRGbGlnaHRzWzBdLm9yaWdpbkFpcnBvcnQsXG4gICAgICAgICAgZGVzdGluYXRpb25BaXJwb3J0OlxuICAgICAgICAgICAgZmxpZ2h0UXVvdGUub3V0Ym91bmRGbGlnaHRzW2ZsaWdodFF1b3RlLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXS5kZXN0aW5hdGlvbkFpcnBvcnQsXG4gICAgICAgICAgcmV0dXJuVHJpcDogaW5ib3VuZERhdGUgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgb3V0Ym91bmREYXRlOiB0aGlzLmhlbHBlcnMuZm9ybWF0SXNvRGF0ZShvdXRib3VuZERhdGUpLFxuICAgICAgICAgIG91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvdzogdGhpcy5oZWxwZXJzLm1ha2VUaW1lV2luZG93KG91dGJvdW5kRGF0ZSwgLTIsIDIpXG4gICAgICAgIH0sXG4gICAgICAgIGluYm91bmREYXRlXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHJldHVybkRhdGU6IHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlKGluYm91bmREYXRlKSxcbiAgICAgICAgICAgICAgcmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvdzogdGhpcy5oZWxwZXJzLm1ha2VUaW1lV2luZG93KGluYm91bmREYXRlLCAtMiwgMilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHt9XG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBoYXNTcGFuaXNoRGlzY291bnQgPSBmbGlnaHRRdW90ZS50b3RhbC5kaXNjb3VudDtcbiAgICBjb25zdCB0ZXJtc0FuZENvbmRpdGlvbnMgPSB0aGlzLmdldFRlcm1zQW5kQ29uZCgpO1xuICAgIGNvbnN0IHNjaGVtYURldGFpbHMgPSB7XG4gICAgICBvdXRib3VuZEZsaWdodHM6IFtcbiAgICAgICAgLi4uZmxpZ2h0UXVvdGUub3V0Ym91bmRGbGlnaHRzLm1hcCgoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCBfc2VnbWVudEluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICBpZiAoIWhhc1NwYW5pc2hEaXNjb3VudCkge1xuICAgICAgICAgICAgZGVsZXRlIGZsaWdodC5hZGRpdGlvbmFsLnNwYW5pc2hSZXNpZGVuY3lBaXJwb3J0O1xuICAgICAgICAgICAgZGVsZXRlIGZsaWdodC5hZGRpdGlvbmFsLnNwYW5pc2hSZXNpZGVuY3lHcm91cDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYWRkQmFnc0FsbG93YW5jZVRvRmxpZ2h0c1NjaGVtYShmbGlnaHQsIGZsaWdodFF1b3RlKTtcbiAgICAgICAgfSlcbiAgICAgIF0sXG4gICAgICBpbmJvdW5kRmxpZ2h0czogW1xuICAgICAgICAuLi5mbGlnaHRRdW90ZS5pbmJvdW5kRmxpZ2h0cy5tYXAoKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgX3NlZ21lbnRJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgaWYgKCFoYXNTcGFuaXNoRGlzY291bnQpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBmbGlnaHQuYWRkaXRpb25hbC5zcGFuaXNoUmVzaWRlbmN5QWlycG9ydDtcbiAgICAgICAgICAgIGRlbGV0ZSBmbGlnaHQuYWRkaXRpb25hbC5zcGFuaXNoUmVzaWRlbmN5R3JvdXA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLmFkZEJhZ3NBbGxvd2FuY2VUb0ZsaWdodHNTY2hlbWEoZmxpZ2h0LCBmbGlnaHRRdW90ZSx0cnVlKTtcbiAgICAgICAgfSlcbiAgICAgIF0sXG4gICAgICB0ZXJtc0FuZENvbmQ6IHRlcm1zQW5kQ29uZGl0aW9ucyxcbiAgICAgIGpvdXJuZXlUeXBlOiBGbGlnaHRKb3VybmV5VHlwZS5TaW5nbGUsXG4gICAgICB0YXhlczogZmxpZ2h0UXVvdGUudGF4ZXMubWFwKCh0YXg6IEZsaWdodEFtb3VudCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiB0YXguZGVzY3JpcHRpb24sXG4gICAgICAgICAgY3VycmVuY3k6IHRheC5jdXJyZW5jeSxcbiAgICAgICAgICBhbW91bnQ6IHRheC5hbW91bnRcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICAgZmFyZUNvbmRpdGlvbnM6IGZsaWdodFF1b3RlLmZhcmVDb25kaXRpb25zLFxuXG4gICAgICAvLyBTYWJyZSBOREMgZmllbGRzIG9ubHlcbiAgICAgIG9mZmVySWQ6IGZsaWdodFF1b3RlLm9mZmVySWQsXG4gICAgICBvZmZlckl0ZW1JZDogZmxpZ2h0UXVvdGUub2ZmZXJJdGVtSWQsXG4gICAgICBvZmZlclRUTDogZmxpZ2h0UXVvdGUub2ZmZXJUVEwsXG4gICAgICBvZmZlclRpbWVTdGFtcDogZmxpZ2h0UXVvdGUub2ZmZXJUaW1lU3RhbXAsXG4gICAgICBobXVwOiBmbGlnaHRRdW90ZS50b3RhbC5obXVwXG4gICAgfTtcbiAgICBjb25zdCBib29raW5nOiBBZGRJdGVtVG9CYXNrZXRNdXRhdGlvblZhcmlhYmxlcyA9IHtcbiAgICAgIGFkdWx0czogdGhpcy5hZHVsdHMsXG4gICAgICBiYXNrZXQ6IGludEJhc2tldC5pZCxcbiAgICAgIGNoaWxkcmVuOiB0aGlzLmNoaWxkcmVuLFxuICAgICAgY28yUGVySXRlbSxcbiAgICAgIGNvMlBlclBhc3NlbmdlcixcbiAgICAgIGN1cnJlbmN5OiB0b3RhbC5jdXJyZW5jeSBhcyBDdXJyZW5jeUNvZGUsXG4gICAgICBkZXRhaWw6IHNjaGVtYURldGFpbHMsXG4gICAgICBwcmljZTogK3RvdGFsLnByaWNlLnRvRml4ZWQoMiksXG4gICAgICBzZWFyY2hRdWVyeTogdGhpcy5yZXN1bHRRdWVyeSxcbiAgICAgIHNlcnZpY2U6IHNvdXJjZUlkLnRvU3RyaW5nKCksXG4gICAgICBvdXRib3VuZERhdGU6IG91dGJvdW5kRGF0ZS5mb3JtYXQoKSxcbiAgICAgIGxvd2VzdFByaWNlQ3VycmVuY3k6XG4gICAgICAgIHRoaXMuYWJzb2x1dGVDaGVhcGVzdFByaWNlLmFtb3VudCB8fFxuICAgICAgICB0aGlzLmFic29sdXRlQ2hlYXBlc3RQcmljZS5jdXJyZW5jeUNvZGUgIT09IHRvdGFsLmN1cnJlbmN5XG4gICAgICAgICAgPyA8Q3VycmVuY3lDb2RlPnRoaXMuYWJzb2x1dGVDaGVhcGVzdFByaWNlLmN1cnJlbmN5Q29kZVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIGxvd2VzdFByaWNlOiBsb3dlc3RGdWxsVG90YWwsXG4gICAgICBsb3dlc3RQcmljZURldGFpbDogbG93ZXN0UHJpY2VCb29raW5nLFxuICAgICAgcmVhc29uS2V5czogZmxpZ2h0UXVvdGUucmVxdWlyZXNSZWFzb25LZXlzLFxuICAgICAgYWdlbnRPdmVycm9kZVVuYXZhaWxhYmxlOiBmbGlnaHRRdW90ZS51bmF2YWlsYWJsZVxuICAgIH07XG4gICAgY29uc29sZS5sb2coYm9va2luZyk7XG4gICAgaWYgKGluYm91bmREYXRlKSB7XG4gICAgICBib29raW5nLmluYm91bmREYXRlID0gaW5ib3VuZERhdGUuZm9ybWF0KCk7XG4gICAgICBzY2hlbWFEZXRhaWxzLmpvdXJuZXlUeXBlID0gRmxpZ2h0Sm91cm5leVR5cGUuUm91bmR0cmlwO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXG4gICAgICBib29raW5nLFxuICAgICAgaW50QmFza2V0LFxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxuICAgICAgdGhpcy50cmF2ZWxsZXJzLFxuICAgICAgZmxpZ2h0UXVvdGUucmVxdWlyZXNSZWFzb25LZXlzLFxuICAgICAgZmFsc2UsXG4gICAgICBpZ25vcmVJbnZva2VcbiAgICApO1xuICB9XG5cbiAgc2V0RmxpZ2h0RGlzcGxheVR5cGUoZGlzcGxheVR5cGU6IEZsaWdodERpc3BsYXlUeXBlcyk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodCA9IG51bGw7XG4gICAgdGhpcy5jaG9vc2VuRGlzcGxheVR5cGUubmV4dChkaXNwbGF5VHlwZSk7XG4gIH1cblxuICBfYXBwbHlGaWx0ZXIoKSB7XG4gICAgdGhpcy5hcHBseUZpbHRlcnModGhpcy5jdXJyZW50RmlsdGVycywgdGhpcy5jdXJyZW50U29ydCk7XG4gIH1cblxuICBvcGVuRmxpZ2h0RmFyZVJ1bGVzKFxuICAgIHJ1bGVzOiBGYXJlQ29uZGl0aW9ucyxcbiAgICBmbGlnaHRzOiBGbGlnaHRKb3VybmV5W10sXG4gICAgaWQ6IG51bWJlcixcbiAgICBvcHRpb25zOiBhbnkgPSBudWxsLFxuICAgIGZsaWdodDogRmxpZ2h0Sm91cm5leSA9IG51bGwsXG4gICAgZmxpZ2h0RGV0YWlsOiBGbGlnaHRJdGluZXJhcnkgPSBudWxsLFxuICAgIGluYm91bmRSdWxlczogRmFyZUNvbmRpdGlvbnMgPSBudWxsLFxuICAgIGluYm91bmRGbGlnaHRzOiBGbGlnaHRKb3VybmV5W10gPSBudWxsXG4gICk6IHZvaWQge1xuICAgIC8vIGZpcnN0IGNoZWNrIGlmIHRoZXJlIGFyZSBydWxlc1xuICAgIGNvbnN0IGRvQ2FsbCA9ICFPYmplY3QudmFsdWVzKHJ1bGVzKS5maW5kKChydWxlOiBGYXJlQ29uZGl0aW9uRW50cnlbXSk6IG51bWJlciA9PiBydWxlLmxlbmd0aCk7XG4gICAgaWYgKGRvQ2FsbCkge1xuICAgICAgbGV0IGZsaWdodHNDbG9uZSA9IF8uY2xvbmVEZWVwKGZsaWdodHMpO1xuXG4gICAgICBpZiAoZmxpZ2h0c0Nsb25lLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZmxpZ2h0c0Nsb25lWzBdLmRlc3RpbmF0aW9uQWlycG9ydCA9IGZsaWdodHNDbG9uZVtmbGlnaHRzLmxlbmd0aCAtIDFdLmRlc3RpbmF0aW9uQWlycG9ydDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcnVsZXNGcm9tQ2FsbCA9IHRoaXMuc2VhcmNoU2VydmljZS5nZXRGbGlnaHRGYXJlUnVsZXMoZmxpZ2h0c0Nsb25lWzBdLCBpZCk7XG4gICAgICBpZiAoaW5ib3VuZEZsaWdodHMpIHtcbiAgICAgICAgbGV0IGluYm91bmRGbGlnaHRzQ2xvbmUgPSBfLmNsb25lRGVlcChpbmJvdW5kRmxpZ2h0cyk7XG5cbiAgICAgICAgaWYgKGluYm91bmRGbGlnaHRzQ2xvbmUubGVuZ3RoID4gMSkge1xuICAgICAgICAgIGluYm91bmRGbGlnaHRzQ2xvbmVbMF0uZGVzdGluYXRpb25BaXJwb3J0ID1cbiAgICAgICAgICAgIGluYm91bmRGbGlnaHRzQ2xvbmVbZmxpZ2h0cy5sZW5ndGggLSAxXS5kZXN0aW5hdGlvbkFpcnBvcnQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5ib3VuZEZsaWdodHNDbG9uZVswXS5oYXNPd25Qcm9wZXJ0eSgnYmFnZ2FnZUFsbG93YW5jZUFtb3VudCcpKSB7XG4gICAgICAgICAgZGVsZXRlIChpbmJvdW5kRmxpZ2h0c0Nsb25lWzBdIGFzIGFueSkuYmFnZ2FnZUFsbG93YW5jZUFtb3VudDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmJvdW5kUnVsZXNGcm9tQ2FsbCA9IHRoaXMuc2VhcmNoU2VydmljZS5nZXRGbGlnaHRGYXJlUnVsZXMoXG4gICAgICAgICAgaW5ib3VuZEZsaWdodHNDbG9uZVswXSxcbiAgICAgICAgICBpZFxuICAgICAgICApO1xuICAgICAgICBydWxlc0Zyb21DYWxsLnN1YnNjcmliZShcbiAgICAgICAgICBkYXRhID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZhcmVSdWxlc0tleSA9IHRoaXMuY2hlY2tGYXJlUnVsZShkYXRhLnJlc3VsdHNbMF0pO1xuICAgICAgICAgICAgaW5ib3VuZFJ1bGVzRnJvbUNhbGwuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICBpbmJvdW5kRGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihNb2RhbFR5cGVzLk1vZGFsRmxpZ2h0RmFyZUNvbXBvbmVudCwgb3B0aW9ucywge1xuICAgICAgICAgICAgICAgICAgcnVsZXM6IGRhdGEucmVzdWx0c1swXSxcbiAgICAgICAgICAgICAgICAgIGZyb206IGZsaWdodD8ub3JpZ2luQWlycG9ydCB8fCBmbGlnaHRzQ2xvbmVbMF0ub3JpZ2luQWlycG9ydCxcbiAgICAgICAgICAgICAgICAgIHRvOlxuICAgICAgICAgICAgICAgICAgICBmbGlnaHQ/LmRlc3RpbmF0aW9uQWlycG9ydCB8fFxuICAgICAgICAgICAgICAgICAgICBmbGlnaHRzQ2xvbmVbZmxpZ2h0cy5sZW5ndGggLSAxXS5kZXN0aW5hdGlvbkFpcnBvcnQsXG4gICAgICAgICAgICAgICAgICBmbGlnaHQ6IGZsaWdodERldGFpbCxcbiAgICAgICAgICAgICAgICAgIHNvdXJjZUlkOiBpZCxcbiAgICAgICAgICAgICAgICAgIGluYm91bmRSdWxlczogaW5ib3VuZERhdGEucmVzdWx0c1swXSxcbiAgICAgICAgICAgICAgICAgIGZhcmVSdWxlc0tleTogZmFyZVJ1bGVzS2V5XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJ1bGVzRnJvbUNhbGwuc3Vic2NyaWJlKFxuICAgICAgICAgIGRhdGEgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmFyZVJ1bGVzS2V5ID0gdGhpcy5jaGVja0ZhcmVSdWxlKGRhdGEucmVzdWx0c1swXSk7XG4gICAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKE1vZGFsVHlwZXMuTW9kYWxGbGlnaHRGYXJlQ29tcG9uZW50LCBvcHRpb25zLCB7XG4gICAgICAgICAgICAgIHJ1bGVzOiBkYXRhLnJlc3VsdHNbMF0sXG4gICAgICAgICAgICAgIGZyb206IGZsaWdodD8ub3JpZ2luQWlycG9ydCB8fCBmbGlnaHRzQ2xvbmVbMF0ub3JpZ2luQWlycG9ydCxcbiAgICAgICAgICAgICAgdG86IGZsaWdodD8uZGVzdGluYXRpb25BaXJwb3J0IHx8IGZsaWdodHNDbG9uZVtmbGlnaHRzLmxlbmd0aCAtIDFdLmRlc3RpbmF0aW9uQWlycG9ydCxcbiAgICAgICAgICAgICAgZmxpZ2h0OiBmbGlnaHREZXRhaWwsXG4gICAgICAgICAgICAgIHNvdXJjZUlkOiBpZCxcbiAgICAgICAgICAgICAgZmFyZVJ1bGVzS2V5OiBmYXJlUnVsZXNLZXlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmYXJlUnVsZXNLZXkgPSB0aGlzLmNoZWNrRmFyZVJ1bGUocnVsZXMpO1xuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihNb2RhbFR5cGVzLk1vZGFsRmxpZ2h0RmFyZUNvbXBvbmVudCwgb3B0aW9ucywge1xuICAgICAgICBydWxlcyxcbiAgICAgICAgZnJvbTogZmxpZ2h0Py5vcmlnaW5BaXJwb3J0IHx8IGZsaWdodHNbMF0ub3JpZ2luQWlycG9ydCxcbiAgICAgICAgdG86IGZsaWdodD8uZGVzdGluYXRpb25BaXJwb3J0IHx8IGZsaWdodHNbZmxpZ2h0cy5sZW5ndGggLSAxXS5kZXN0aW5hdGlvbkFpcnBvcnQsXG4gICAgICAgIGZsaWdodDogZmxpZ2h0RGV0YWlsLFxuICAgICAgICBzb3VyY2VJZDogaWQsXG4gICAgICAgIGluYm91bmRSdWxlczogaW5ib3VuZFJ1bGVzLFxuICAgICAgICBmYXJlUnVsZXNLZXk6IGZhcmVSdWxlc0tleVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tGYXJlUnVsZShydWxlczogRmxpZ2h0RmFyZVJ1bGVzUmVzcG9uc2UgfCBGYXJlQ29uZGl0aW9ucyk6IElGYXJlUnVsZXNLZXkge1xuICAgIGNvbnN0IHJ1bGVDb250ZW50ID0gT2JqZWN0LnZhbHVlcyhydWxlcyB8fCB7fSlcbiAgICAgIC5tYXAoKHJ1bGU6IEZhcmVDb25kaXRpb25FbnRyeVtdKSA9PlxuICAgICAgICBydWxlPy5sZW5ndGggJiYgQXJyYXkuaXNBcnJheShydWxlKSA/IHJ1bGUubWFwKHIgPT4gci5yZW1hcmspIDogW11cbiAgICAgIClcbiAgICAgIC5mbGF0KCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQ0hBOiB0aGlzLmNoZWNrRmFyZVJ1bGVLZXkocnVsZUNvbnRlbnQsICdDSEEnKSxcbiAgICAgIGlzSU5DOiB0aGlzLmNoZWNrRmFyZVJ1bGVLZXkocnVsZUNvbnRlbnQsICdJTkMnKSxcbiAgICAgIGlzTk9GOiB0aGlzLmNoZWNrRmFyZVJ1bGVLZXkocnVsZUNvbnRlbnQsICdOT0YnKVxuICAgIH07XG4gIH1cblxuICBjaGVja0ZhcmVSdWxlS2V5KHJ1bGVDb250ZW50OiBzdHJpbmdbXSwga2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoYFxcXFxiJHtrZXl9XFxcXGJgLCAnZ2knKTtcbiAgICByZXR1cm4gISFydWxlQ29udGVudC5maW5kKHJ1bGUgPT4gcmVnZXgudGVzdChydWxlKSk7XG4gIH1cblxuICAvLyBUT0RPIHdhaXRpbmcgZm9yIGRhdGFcbiAgZ2V0VGVybXNBbmRDb25kKCkge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdQZW5hbHRpZXMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdFbGlnaWJpbGl0eScsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgICxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0RheS90aW1lJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnU2Vhc29uYWxpdHknLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdGbGlnaHTCoEFwcGxpY2F0aW9uJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnQWR2YW5jZcKgUmVzZXJ2YXRpb25zL3RpY2tldGluZycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ01heGltdW3CoFN0YXknLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdNaW5pbXVtwqBTdGF5JyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnU3RvcG92ZXJzJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnVHJhbnNmZXJzJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnQ29tYmluYXRpb25zJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnQmxhY2tvdXTCoERhdGVzJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnU3VyY2hhcmdlcycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0FjY29tcGFuaWVkwqBUcmF2ZWwnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdUcmF2ZWzCoFJlc3RyaWN0aW9ucycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1NhbGVzwqBSZXN0cmljdGlvbnMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdIaXAvbWlsZWFnZcKgRXhjZXB0aW9ucycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1RpY2tldMKgRW5kb3JzZW1lbnRzJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnQ2hpbGRyZW7CoERpc2NvdW50cycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1RvdXLCoENvbmR1Y3RvcsKgRGlzY291bnRzJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnQWdlbnTCoERpc2NvdW50cycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0FsbMKgT3RoZXLCoERpc2NvdW50cycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ01pc2NlbGxhbmVvdXPCoFByb3Zpc2lvbnMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdGYXJlwqBCecKgUnVsZScsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0dyb3VwcycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1RvdXJzJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnVmlzaXTCoEFub3RoZXLCoENvdW50cnknLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdEZXBvc2l0cycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1ZvbHVudGFyecKgQ2hhbmdlcycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1ZvbHVudGFyecKgUmVmdW5kcycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ05lZ290aWF0ZWTCoEZhcmVzJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnUnVsZcKgQXBwbGljYXRpb27CoEFuZMKgT3RoZXLCoENvbmRpdGlvbnMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH1cbiAgICBdO1xuICB9XG5cbiAgc2F2ZVNlYXJjaCgpOiBPYnNlcnZhYmxlPFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHQ+IHtcbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XG4gICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcbiAgICAgIGNvbnN0IGZhdm91cml0ZVNlYXJjaFF1ZXJ5OiBJRmxpZ2h0U2VhcmNoQXJncyA9IHRoaXMudXBkYXRlU2VyY2hRdWVyeShxdWVyeSk7XG5cbiAgICAgIGNvbnN0IHNlYXJjaEluZm8gPSB7XG4gICAgICAgIG5hbWU6IGAke21vbWVudCgpfWAsXG4gICAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5GbGlnaHQsXG4gICAgICAgIHNlYXJjaEFyZ3M6IGZhdm91cml0ZVNlYXJjaFF1ZXJ5XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlRmF2b3VyaXRlU2VhcmNoKHNlYXJjaEluZm8pO1xuICAgIH1cbiAgfVxuICBhc3luYyBhcHBseUZhdm91cml0ZShmYXY6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuY2hvc2VuU2VhcmNoVHlwZSA9IGZhdi5tdWx0aURlc3RpbmF0aW9uXG4gICAgICA/IEZsaWdodFNlYXJjaFR5cGUubXVsdGlDaXR5XG4gICAgICA6IGZhdi5yZXR1cm5UcmlwXG4gICAgICA/IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuXG4gICAgICA6IEZsaWdodFNlYXJjaFR5cGUub25lV2F5O1xuICAgIGlmICh0aGlzLmNob3NlblNlYXJjaFR5cGUgPT0gRmxpZ2h0U2VhcmNoVHlwZS5tdWx0aUNpdHkpIHtcbiAgICAgIGNvbnN0IG11bHRpID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIGZhdi5tdWx0aURlc3RpbmF0aW9uLm1hcChcbiAgICAgICAgICBhc3luYyAoYToge1xuICAgICAgICAgICAgZGF0ZTogc3RyaW5nO1xuICAgICAgICAgICAgZGVzdDogc3RyaW5nO1xuICAgICAgICAgICAgb3JpZzogc3RyaW5nO1xuICAgICAgICAgICAgb3JpZ2luQWlycG9ydEZ1bGw6IGFueTtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uQWlycG9ydEZ1bGw6IGFueTtcbiAgICAgICAgICB9KSA9PiB7XG4gICAgICAgICAgICBsZXQgZGVzdGluYXRpb246IHtcbiAgICAgICAgICAgICAgZGF0ZTogbW9tZW50Lk1vbWVudDtcbiAgICAgICAgICAgICAgZGVzdDogYW55O1xuICAgICAgICAgICAgICBvcmlnOiBhbnk7XG4gICAgICAgICAgICAgIG9yaWdpbkFpcnBvcnRGdWxsOiBhbnk7XG4gICAgICAgICAgICAgIGRlc3RpbmF0aW9uQWlycG9ydEZ1bGw6IGFueTtcbiAgICAgICAgICAgIH0gPSB7XG4gICAgICAgICAgICAgIGRhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgZGVzdDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBvcmlnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIG9yaWdpbkFpcnBvcnRGdWxsOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIGRlc3RpbmF0aW9uQWlycG9ydEZ1bGw6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLm9yaWcgPSBhd2FpdCB0aGlzLnNlYXJjaFNlcnZpY2VcbiAgICAgICAgICAgICAgLmdldEFpcnBvcnRzTGlzdChhLm9yaWcpXG4gICAgICAgICAgICAgIC50b1Byb21pc2UoKVxuICAgICAgICAgICAgICAudGhlbihvcmlnUmVzdWx0cyA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChvcmlnUmVzdWx0cyBhcyBhbnlbXSkuZmluZChiID0+IGIuZ2F0ZXdheSA9PSBhLm9yaWcpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLmRlc3QgPSBhd2FpdCB0aGlzLnNlYXJjaFNlcnZpY2VcbiAgICAgICAgICAgICAgLmdldEFpcnBvcnRzTGlzdChhLmRlc3QpXG4gICAgICAgICAgICAgIC50b1Byb21pc2UoKVxuICAgICAgICAgICAgICAudGhlbihkZXN0UmVzdWx0cyA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChkZXN0UmVzdWx0cyBhcyBhbnlbXSkuZmluZChiID0+IGIuZ2F0ZXdheSA9PSBhLmRlc3QpO1xuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGVzdGluYXRpb24ub3JpZ2luQWlycG9ydEZ1bGwgPSBhd2FpdCB0aGlzLnNlYXJjaFNlcnZpY2VcbiAgICAgICAgICAgICAgLmdldEFpcnBvcnRzTGlzdChhLmRlc3QpXG4gICAgICAgICAgICAgIC50b1Byb21pc2UoKVxuICAgICAgICAgICAgICAudGhlbihkZXN0UmVzdWx0cyA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChkZXN0UmVzdWx0cyBhcyBhbnlbXSkuZmluZChiID0+IGIuZGVzdGluYXRpb24gPT0gYS5vcmlnaW5BaXJwb3J0RnVsbCk7XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkZXN0aW5hdGlvbi5kZXN0aW5hdGlvbkFpcnBvcnRGdWxsID0gYXdhaXQgdGhpcy5zZWFyY2hTZXJ2aWNlXG4gICAgICAgICAgICAgIC5nZXRBaXJwb3J0c0xpc3QoYS5kZXN0KVxuICAgICAgICAgICAgICAudG9Qcm9taXNlKClcbiAgICAgICAgICAgICAgLnRoZW4oZGVzdFJlc3VsdHMgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAoZGVzdFJlc3VsdHMgYXMgYW55W10pLmZpbmQoYiA9PiBiLmRlc3RpbmF0aW9uID09IGEuZGVzdGluYXRpb25BaXJwb3J0RnVsbCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHRoaXMubXVsdGlEZXN0aW5hdGlvbiA9IG11bHRpIGFzIGFueTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEFpcnBvcnRzTGlzdChmYXYub3JpZ2luQWlycG9ydCkuc3Vic2NyaWJlKHJlc3VsdHMgPT4ge1xuICAgICAgICB0aGlzLmRlcGFydExvY2F0aW9uID0gKHJlc3VsdHMgYXMgYW55W10pLmZpbmQoYSA9PiBhLmdhdGV3YXkgPT0gZmF2Lm9yaWdpbkFpcnBvcnQpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0QWlycG9ydHNMaXN0KGZhdi5kZXN0aW5hdGlvbkFpcnBvcnQpLnN1YnNjcmliZShyZXN1bHRzID0+IHtcbiAgICAgICAgdGhpcy5hcnJpdmVMb2NhdGlvbiA9IChyZXN1bHRzIGFzIGFueVtdKS5maW5kKGEgPT4gYS5nYXRld2F5ID09IGZhdi5kZXN0aW5hdGlvbkFpcnBvcnQpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuY2FiaW5DbGFzcyA9IGZhdi5vdXRib3VuZENhYmluQ2xhc3NbMF07XG4gICAgdGhpcy5yZXR1cm5DYWJpbkNsYXNzID1cbiAgICAgIHRoaXMuY2hvc2VuU2VhcmNoVHlwZSAhPSBGbGlnaHRTZWFyY2hUeXBlLnJldHVybiA/IG51bGwgOiBmYXYucmV0dXJuQ2FiaW5DbGFzc1swXTtcbiAgICB0aGlzLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA9IGZhdi5pbmNsdWRlTmVhcmJ5QWlycG9ydHM7XG4gICAgdGhpcy5hZHVsdHMgPSBmYXYucGFzc2VuZ2Vycy5maWx0ZXIoKGE6IGFueSkgPT4gYS50eXBlID09ICdBRFVMVCcpLmxlbmd0aDtcbiAgICB0aGlzLmNoaWxkcmVuID0gZmF2LnBhc3NlbmdlcnMuZmlsdGVyKChhOiBhbnkpID0+IGEudHlwZSA9PSAnQ0hJTEQnKS5sZW5ndGg7XG4gICAgLy8gdGhpcy5wcmVmZXJyZWRDYXJyaWVycyA9IGZhdi5wcmVmZXJyZWRDYXJyaWVycy5tYXAoKGE6IGFueSkgPT4ge1xuXG4gICAgLy8gfSlcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VyY2hRdWVyeShxdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMpOiBJRmxpZ2h0U2VhcmNoQXJncyB7XG4gICAgY29uc3Qgc2VhcmNoUXVlcnk6IElGbGlnaHRTZWFyY2hBcmdzID0gcXVlcnk7XG4gICAgc3dpdGNoICh0aGlzLmNob3NlblNlYXJjaFR5cGUpIHtcbiAgICAgIGNhc2UgRmxpZ2h0U2VhcmNoVHlwZS5tdWx0aUNpdHk6XG4gICAgICAgIHNlYXJjaFF1ZXJ5Lm11bHRpRGVzdGluYXRpb25EZXRhaWwgPSB0aGlzLm11bHRpRGVzdGluYXRpb247XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBGbGlnaHRTZWFyY2hUeXBlLnJldHVybjpcbiAgICAgIGNhc2UgRmxpZ2h0U2VhcmNoVHlwZS5vbmVXYXk6XG4gICAgICAgIHNlYXJjaFF1ZXJ5LmRlcGFydExvY2F0aW9uRGV0YWlsID0gdGhpcy5kZXBhcnRMb2NhdGlvbjtcbiAgICAgICAgc2VhcmNoUXVlcnkuYXJyaXZlTG9jYXRpb25EZXRhaWwgPSB0aGlzLmFycml2ZUxvY2F0aW9uO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gc2VhcmNoUXVlcnk7XG4gIH1cblxuICBjYW5CZUV1cm9TZWFyY2hlZChcbiAgICBkZXBhcnRMb2NhdGlvbjogc3RyaW5nID0gKHRoaXMuZGVwYXJ0TG9jYXRpb24gYXMgT0JUQWlycG9ydERldGFpbHMpPy5nYXRld2F5LFxuICAgIGFycml2ZUxvY2F0aW9uOiBzdHJpbmcgPSAodGhpcy5hcnJpdmVMb2NhdGlvbiBhcyBPQlRBaXJwb3J0RGV0YWlscyk/LmdhdGV3YXksXG4gICAgY2hvc2VuU2VhcmNoVHlwZTogRmxpZ2h0U2VhcmNoVHlwZSA9IHRoaXMuY2hvc2VuU2VhcmNoVHlwZVxuICApOiBib29sZWFuIHtcbiAgICBpZiAoY2hvc2VuU2VhcmNoVHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5tdWx0aUNpdHkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKEFpclRvRXVyb1tkZXBhcnRMb2NhdGlvbl0gJiYgQWlyVG9FdXJvW2Fycml2ZUxvY2F0aW9uXSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgY2FuQmVSYWlsU2VhcmNoZWQoXG4gICAgY2hvc2VuU2VhcmNoVHlwZTogRmxpZ2h0U2VhcmNoVHlwZSA9IHRoaXMuY2hvc2VuU2VhcmNoVHlwZSxcbiAgICB0cmFpbmxpbmVDb25maWc6IHN0cmluZ1xuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zb2xlLmxvZygnKysrIENoZWNraW5nIGlmIGZsaWdodCBqb3VybmV5IGNhbiBiZSBzZWVhcmNoZWQgYnkgcmFpbCArKysnKTtcblxuICAgIGlmIChjaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0cmFpbmxpbmVDb25maWcpIHtcbiAgICAgIC8vIGF0dGVtcHQgdG8gbG9va3VwIHRoZSBzdGF0aW9ucyAtIHdvdWxkIGJlIHRvIG1hbnkgdG8gbWFwIHByb3Blcmx5XG4gICAgICBjb25zb2xlLmxvZygnKysrIFRyYWlubGluZSBlbmFibGVkIC0gYXR0ZW1wdCB0byBsb29rdXAgdGhlIHN0YXRpb25zICsrKycpO1xuICAgICAgY29uc3Qgc3BsaXQgPSAodGhpcy5kZXBhcnRMb2NhdGlvbiBhcyBPQlRBaXJwb3J0RGV0YWlscyk/LmRlc3RpbmF0aW9uLnNwbGl0KCcsJylbMF07XG4gICAgICBjb25zb2xlLmxvZyh0aGlzLmRlcGFydExvY2F0aW9uKTtcbiAgICAgIGNvbnN0IHRyYWlubGluZU91dGJvdW5kU3RhdGlvbnM6IGFueSA9IGF3YWl0IHRoaXMuc2VhcmNoU2VydmljZVxuICAgICAgICAuZ2V0U3RhdGlvbkxvY2F0aW9ucyhzcGxpdCwgdW5kZWZpbmVkLCBmYWxzZSwgZmFsc2UsIGZhbHNlKVxuICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgICBjb25zb2xlLmxvZyh0cmFpbmxpbmVPdXRib3VuZFN0YXRpb25zKTtcblxuICAgICAgY29uc3QgaW5TcGxpdCA9ICh0aGlzLmFycml2ZUxvY2F0aW9uIGFzIE9CVEFpcnBvcnREZXRhaWxzKT8uZGVzdGluYXRpb24uc3BsaXQoJywnKVswXTtcblxuICAgICAgY29uc3QgdHJhaW5saW5lSW5ib3VuZFN0YXRpb25zOiBhbnkgPSBhd2FpdCB0aGlzLnNlYXJjaFNlcnZpY2VcbiAgICAgICAgLmdldFN0YXRpb25Mb2NhdGlvbnMoaW5TcGxpdCwgdW5kZWZpbmVkLCBmYWxzZSwgZmFsc2UsIGZhbHNlKVxuICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgICBjb25zb2xlLmxvZyh0cmFpbmxpbmVJbmJvdW5kU3RhdGlvbnMpO1xuXG4gICAgICBpZiAodHJhaW5saW5lT3V0Ym91bmRTdGF0aW9ucy5sZW5ndGggJiYgdHJhaW5saW5lSW5ib3VuZFN0YXRpb25zLmxlbmd0aCkge1xuICAgICAgICB0aGlzLm91dGJvdW5kU2FtZVNlYXJjaFRyYWlubGluZVN0YXRpb25zID0gdHJhaW5saW5lT3V0Ym91bmRTdGF0aW9ucztcbiAgICAgICAgdGhpcy5pbmJvdW5kU2FtZVNlYXJjaFRyYWlubGluZVN0YXRpb25zID0gdHJhaW5saW5lSW5ib3VuZFN0YXRpb25zO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCcrKysgSGF2ZSBib3RoIHRyYWlubGluZSBpbmJvdW5kIGFuZCBvdXRib3VuZCBzdGF0aW9ucyArKysnKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgQUlSVG9SYWlsVUtbKHRoaXMuZGVwYXJ0TG9jYXRpb24gYXMgT0JUQWlycG9ydERldGFpbHMpPy5nYXRld2F5XSAmJlxuICAgICAgICBBSVJUb1JhaWxVS1sodGhpcy5hcnJpdmVMb2NhdGlvbiBhcyBPQlRBaXJwb3J0RGV0YWlscyk/LmdhdGV3YXldXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGdldEZhcmVSdWxlcyhqb3VybmV5SGFzaDogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgd2hlblNlbGVjdGVkQWxvbmU6IHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXSxcbiAgICAgIGpvdXJuZXlXaGVuU2VsZWN0ZWQ6IHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZXF1aXJlc1JlYXNvbihqb3VybmV5SGFzaDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICEhdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF0/LnJlcXVpcmVzUmVhc29uS2V5cz8ubGVuZ3RoIHx8XG4gICAgICAhIXRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXT8ucmVxdWlyZXNSZWFzb25LZXlzPy5sZW5ndGhcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldFJlcXVpcmVzUmVhc29uTWVzc2FnZShqb3VybmV5SGFzaDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF0/LnJlcXVpcmVzUmVhc29uTWVzc2FnZXMuam9pbignLCAnKSB8fFxuICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdPy5yZXF1aXJlc1JlYXNvbk1lc3NhZ2VzLmpvaW4oJywgJykgfHxcbiAgICAgICcnXG4gICAgKTtcbiAgfVxuXG4gIG1lc3NhZ2VDb25maWdDaGVjayhjb25maWc6IGFueSwgaXNDaGVja1Bhc3M6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICBjb25zdCBkZXBhcnRMb2NhdGlvbiA9IHRoaXMuZGVwYXJ0TG9jYXRpb24gYXMgT0JUQWlycG9ydERldGFpbHM7XG4gICAgY29uc3QgYXJyaXZlTG9jYXRpb24gPSB0aGlzLmFycml2ZUxvY2F0aW9uIGFzIE9CVEFpcnBvcnREZXRhaWxzO1xuICAgIGNvbnN0IGRlcGFydERldGFpbCA9IGRlcGFydExvY2F0aW9uPy5kZXN0aW5hdGlvbj8udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBhcnJpdmVEZXRhaWwgPSBhcnJpdmVMb2NhdGlvbj8uZGVzdGluYXRpb24/LnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGNvbmZpZy5hcnJpdmFsQWlycG9ydCkge1xuICAgICAgaXNDaGVja1Bhc3MgPSBhcnJpdmVEZXRhaWwgPT09IGNvbmZpZy5hcnJpdmFsQWlycG9ydDtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmRlcGFydHVyZUFpcnBvcnQpIHtcbiAgICAgIGlzQ2hlY2tQYXNzID0gZGVwYXJ0RGV0YWlsID09PSBjb25maWcuZGVwYXJ0dXJlQWlycG9ydDtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5jaXR5KSB7XG4gICAgICBjb25zdCBjaXR5ID0gY29uZmlnLmNpdHkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IG1hdGNoID0gISF0aGlzLm11bHRpRGVzdGluYXRpb24uZmluZChcbiAgICAgICAgbXVsID0+XG4gICAgICAgICAgbXVsLmRlc3Q/LmRlc3RpbmF0aW9uPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGNpdHkpIHx8XG4gICAgICAgICAgbXVsLm9yaWc/LmRlc3RpbmF0aW9uPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGNpdHkpXG4gICAgICApO1xuICAgICAgaXNDaGVja1Bhc3MgPSBkZXBhcnREZXRhaWw/LmluY2x1ZGVzKGNpdHkpIHx8IGFycml2ZURldGFpbD8uaW5jbHVkZXMoY2l0eSkgfHwgbWF0Y2g7XG4gICAgfVxuICAgIGlmIChjb25maWcuY291bnRyeSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSAhIXRoaXMubXVsdGlEZXN0aW5hdGlvbi5maW5kKFxuICAgICAgICBtdWwgPT4gbXVsLmRlc3Q/LmNvdW50cnlDb2RlID09PSBjb25maWcuY291bnRyeSB8fCBtdWwub3JpZz8uY291bnRyeUNvZGUgPT09IGNvbmZpZy5jb3VudHJ5XG4gICAgICApO1xuICAgICAgaXNDaGVja1Bhc3MgPVxuICAgICAgICBkZXBhcnRMb2NhdGlvbj8uY291bnRyeSA9PT0gY29uZmlnLmNvdW50cnkgfHxcbiAgICAgICAgYXJyaXZlTG9jYXRpb24/LmNvdW50cnkgPT09IGNvbmZpZy5jb3VudHJ5IHx8XG4gICAgICAgIG1hdGNoO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmNhcnJpZXIpIHtcbiAgICAgIGlzQ2hlY2tQYXNzID0gISF0aGlzLnByZWZlcnJlZENhcnJpZXJzLmZpbmQoY2FycmllciA9PlxuICAgICAgICBjYXJyaWVyICE9PSBudWxsXG4gICAgICAgICAgPyBjYXJyaWVyLmNvZGUgPT09IGNvbmZpZy5jYXJyaWVyIHx8IGNhcnJpZXIubmFtZSA9PT0gY29uZmlnLmNhcnJpZXJcbiAgICAgICAgICA6IGZhbHNlXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBpc0NoZWNrUGFzcztcbiAgfVxuXG4gIC8vICAgcHVibGljIGdldEZsaWdodEV4dHJhcyhmbGlnaHQ6IElucHV0RmxpZ2h0Sm91cm5leSwpIHtcbiAgLy8gICByZXR1cm4gdGhpcy5nZXRGbGlnaHRFeHRyYXNPcHRpb25zLmZldGNoTGlzdCh7ZmxpZ2h0fSlcbiAgLy8gfVxuXG4gIHB1YmxpYyBnZXRGbGlnaHRFeHRyYXMoXG4gICAgZmxpZ2h0czogSW5wdXRGbGlnaHRKb3VybmV5W10sXG4gICAgc3VwcGxpZXI6IHN0cmluZyxcbiAgICBsb3lhbHR5Q29kZT86IHN0cmluZyxcbiAgICB1c2VySWQ/OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxGbGlnaHRPcHRpb25zW10+IHtcbiAgICAvLyBHZXQgc2VhcmNoIHF1ZXJ5XG4gICAgbGV0IHNlYXJjaFF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xuXG4gICAgc2VhcmNoUXVlcnkucGFzc2VuZ2VycyA9IHRoaXMudHJhdmVsbGVycy5tYXAoXG4gICAgICAoeCk6IEZsaWdodFBhc3Nlbmdlck9iamVjdCA9PiAoe1xuICAgICAgICB0eXBlOiBGbGlnaHRQYXNzZW5nZXJUeXBlLkFkdWx0LFxuICAgICAgICBkb2I6IHguZG9iID8gbmV3IERhdGUoTnVtYmVyKHguZG9iKSkudG9Mb2NhbGVEYXRlU3RyaW5nKCkgOiBudWxsLFxuICAgICAgICBmaXJzdE5hbWU6IHguZm9yZW5hbWUsXG4gICAgICAgIHN1cm5hbWU6IHguc3VybmFtZVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0RmxpZ2h0RXh0cmFzT3B0aW9uc1xuICAgICAgLmZldGNoTGlzdCh7IGZsaWdodHMsIHN1cHBsaWVyLCBzZWFyY2hRdWVyeSwgbG95YWx0eUNvZGUsIHVzZXJJZCB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoZGF0YTogRmxpZ2h0T3B0aW9uc1tdKSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVzZXRTZWxlY3RlZEZsaWdodCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQgPSBudWxsO1xuICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkID0gLTE7XG4gICAgdGhpcy5vdXRib3VuZENhYmluQ2xhc3MgPSAnJzsgLy8gcmVzZXQgb3V0Ym91bmRDYWJpbkNsYXNzXG4gIH1cblxuICBjcmVhdGVDaGVhcGVzdFByaWNlT2JqZWN0KGZsaWdodHNHcm91cFR5cGU6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFtdKTogSUNoZWFwZXN0UHJpY2VEZXRhaWxzIHtcbiAgICByZXR1cm4gZmxpZ2h0c0dyb3VwVHlwZS5yZWR1Y2UoXG4gICAgICAoY2hlYXBlc3RQcmljZTogSUNoZWFwZXN0UHJpY2VEZXRhaWxzLCByZXN1bHQ6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCkgPT4ge1xuICAgICAgICBjb25zdCBwcmljZSA9IHJlc3VsdC5taW5QcmljZTtcbiAgICAgICAgaWYgKGNoZWFwZXN0UHJpY2UuYW1vdW50ID4gcHJpY2UpIHtcbiAgICAgICAgICBjaGVhcGVzdFByaWNlLmFtb3VudCA9IHByaWNlO1xuICAgICAgICAgIGNvbnN0IGNoZWFwRmxpZ2h0Q2xhc3MgPSBPYmplY3QudmFsdWVzKHJlc3VsdC5jbGFzc2VzKVxuICAgICAgICAgICAgLmZpbHRlcihmbGlnaHRDbGFzcyA9PiBmbGlnaHRDbGFzcyAhPT0gbnVsbClcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBhLm1pbnByaWNlIC0gYi5taW5wcmljZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChjaGVhcEZsaWdodENsYXNzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2hlYXBlc3RQcmljZS5mbGlnaHQgPSBjaGVhcEZsaWdodENsYXNzWzBdLmZsaWdodHNbMF07XG4gICAgICAgICAgICBjaGVhcGVzdFByaWNlLmN1cnJlbmN5Q29kZSA9IGNoZWFwRmxpZ2h0Q2xhc3NbMF0uY3VycmVuY3k7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGVhcGVzdFByaWNlO1xuICAgICAgfSxcbiAgICAgIHsgYW1vdW50OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgY3VycmVuY3lDb2RlOiAnR0JQJywgZmxpZ2h0OiBudWxsIH1cbiAgICApO1xuICB9XG5cbiAgY3JlYXRlQ2hlYXBlc3RQcmljZShqb3VybmV5czogRmxpZ2h0SXRpbmVyYXJ5W10pOiBJQ2hlYXBlc3RQcmljZURldGFpbHMge1xuICAgIGlmICgham91cm5leXM/Lmxlbmd0aCkgcmV0dXJuO1xuICAgIGNvbnN0IGN1cnJlbmN5ID0gam91cm5leXNbMF0udG90YWwuY3VycmVuY3k7XG4gICAgcmV0dXJuIGpvdXJuZXlzLnJlZHVjZShcbiAgICAgIChjaGVhcGVzdFByaWNlOiBJQ2hlYXBlc3RQcmljZURldGFpbHMsIHJlc3VsdDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMpID0+IHtcbiAgICAgICAgY29uc3QgcHJpY2UgPSByZXN1bHQudG90YWwucHJpY2U7XG4gICAgICAgIGNvbnN0IGN1cnJlbmN5ID0gcmVzdWx0LnRvdGFsLmN1cnJlbmN5O1xuICAgICAgICBjb25zdCBmbGlnaHQgPSByZXN1bHQ7XG4gICAgICAgIGlmIChjaGVhcGVzdFByaWNlLmFtb3VudCA+IHByaWNlKSB7XG4gICAgICAgICAgY2hlYXBlc3RQcmljZS5hbW91bnQgPSBwcmljZTtcbiAgICAgICAgICBjaGVhcGVzdFByaWNlLmN1cnJlbmN5Q29kZSA9IGN1cnJlbmN5O1xuICAgICAgICAgIGNoZWFwZXN0UHJpY2UuZmxpZ2h0ID0gZmxpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGVhcGVzdFByaWNlO1xuICAgICAgfSxcbiAgICAgIHsgYW1vdW50OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgY3VycmVuY3lDb2RlOiBjdXJyZW5jeSwgZmxpZ2h0OiBudWxsIH1cbiAgICApO1xuICB9XG5cbiAgcHVibGljIHNhbml0aXNlRGF0ZVRpbWUoZGF0ZVRpbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5pdGlzZURhdGVUaW1lKGRhdGVUaW1lKTtcbiAgfVxuXG4gIGFzeW5jIHNldFF1ZXJ5RnJvbUJhc2tldEl0ZW0oYmFza2V0SXRlbTogQmFza2V0SXRlbSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlY2VudFNlYXJjaEFyZ3MgPSBiYXNrZXRJdGVtLnNlYXJjaFF1ZXJ5O1xuXG4gICAgdGhpcy5mYXJlVHlwZSA9IHJlY2VudFNlYXJjaEFyZ3MuZmFyZVR5cGU7XG4gICAgdGhpcy5tYXhDb25uZWN0aW9ucyA9IHJlY2VudFNlYXJjaEFyZ3MubWF4Q29ubmVjdGlvbnM7XG5cbiAgICBpZiAocmVjZW50U2VhcmNoQXJncy5vdXRib3VuZENhYmluQ2xhc3MpIHtcbiAgICAgIHRoaXMuY2FiaW5DbGFzcyA9IHJlY2VudFNlYXJjaEFyZ3Mub3V0Ym91bmRDYWJpbkNsYXNzWzBdO1xuICAgIH1cbiAgICBpZiAocmVjZW50U2VhcmNoQXJncy5yZXR1cm5DYWJpbkNsYXNzKSB7XG4gICAgICB0aGlzLnJldHVybkNhYmluQ2xhc3MgPSByZWNlbnRTZWFyY2hBcmdzLnJldHVybkNhYmluQ2xhc3NbMF07XG4gICAgfVxuXG4gICAgdGhpcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHMgPSByZWNlbnRTZWFyY2hBcmdzLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA/IHRydWUgOiBmYWxzZTtcblxuICAgIHRoaXMuY2hvc2VuU2VhcmNoVHlwZSA9IHJlY2VudFNlYXJjaEFyZ3M/Lm11bHRpRGVzdGluYXRpb24/Lmxlbmd0aFxuICAgICAgPyBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eVxuICAgICAgOiByZWNlbnRTZWFyY2hBcmdzLnJldHVyblRyaXBcbiAgICAgID8gRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm5cbiAgICAgIDogRmxpZ2h0U2VhcmNoVHlwZS5vbmVXYXk7XG5cbiAgICBpZiAocmVjZW50U2VhcmNoQXJncy52aWEpIHtcbiAgICAgIHRoaXMudmlhID0gcmVjZW50U2VhcmNoQXJncy52aWE7XG4gICAgfVxuXG4gICAgaWYgKCFyZWNlbnRTZWFyY2hBcmdzPy5tdWx0aURlc3RpbmF0aW9uPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGRlcGFydExvY2F0aW9uID0gYXdhaXQgdGhpcy5zZWFyY2hTZXJ2aWNlXG4gICAgICAgIC5nZXRBaXJwb3J0QnlDb2RlKHJlY2VudFNlYXJjaEFyZ3Mub3JpZ2luQWlycG9ydCwgbnVsbCkgLy8gcGFzcyBpbiBudWxsIG90aGVyd2lzZSBnZW5lcmljIGFpcnBvcnRzIChlLmcuIExPTikgZG8gbm90IGdldCBleGFjdCBpYXRhIG1hdGNoZXMgYmFja1xuICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgICBjb25zdCBhcnJpdmVMb2NhdGlvbiA9IGF3YWl0IHRoaXMuc2VhcmNoU2VydmljZVxuICAgICAgICAuZ2V0QWlycG9ydEJ5Q29kZShyZWNlbnRTZWFyY2hBcmdzLmRlc3RpbmF0aW9uQWlycG9ydCwgbnVsbClcbiAgICAgICAgLnRvUHJvbWlzZSgpO1xuICAgICAgaWYgKGRlcGFydExvY2F0aW9uICYmIGFycml2ZUxvY2F0aW9uKSB7XG4gICAgICAgIHRoaXMuZGVwYXJ0TG9jYXRpb24gPSB7XG4gICAgICAgICAgZGVzdGluYXRpb246IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaC5uYW1lLFxuICAgICAgICAgIGdhdGV3YXk6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaC5pYXRhLFxuICAgICAgICAgIHRlcm1pbmFsczogdGhpcy5zZWFyY2hTZXJ2aWNlLnByb2Nlc3NUZXJtaW5hbHMoZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLnRlcm1pbmFscyksXG4gICAgICAgICAgY291bnRyeTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnksXG4gICAgICAgICAgcG9zdGNvZGU6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5wb3N0Y29kZSxcbiAgICAgICAgICBjb3VudHJ5Q29kZTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuYXJyaXZlTG9jYXRpb24gPSB7XG4gICAgICAgICAgZGVzdGluYXRpb246IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC5uYW1lLFxuICAgICAgICAgIGdhdGV3YXk6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC5pYXRhLFxuICAgICAgICAgIHRlcm1pbmFsczogdGhpcy5zZWFyY2hTZXJ2aWNlLnByb2Nlc3NUZXJtaW5hbHMoYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLnRlcm1pbmFscyksXG4gICAgICAgICAgY291bnRyeTogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnksXG4gICAgICAgICAgcG9zdGNvZGU6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5wb3N0Y29kZSxcbiAgICAgICAgICBjb3VudHJ5Q29kZTogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHJlY2VudFNlYXJjaEFyZ3MucHJlZmVycmVkQ2FycmllcnMpIHtcbiAgICAgICAgICBjb25zdCBwcmVmZXJyZWRDYXJyaWVyczogT0JUQWlybGluZXNEZXRhaWxzW10gPSBbXTtcbiAgICAgICAgICBmb3IgKGxldCBwcmVmZXJyZWRDYXJyeSBvZiByZWNlbnRTZWFyY2hBcmdzLnByZWZlcnJlZENhcnJpZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtczogYW55ID0gYXdhaXQgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEFpcmxpbmVzTGlzdChwcmVmZXJyZWRDYXJyeSkudG9Qcm9taXNlKCk7XG4gICAgICAgICAgICBpdGVtcy5mb3JFYWNoKChpdGVtOiBPQlRBaXJsaW5lc0RldGFpbHMpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGl0ZW0uY29kZSA9PT0gcHJlZmVycmVkQ2FycnkpIHtcbiAgICAgICAgICAgICAgICBwcmVmZXJyZWRDYXJyaWVycy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucHJlZmVycmVkQ2FycmllcnMgPSBwcmVmZXJyZWRDYXJyaWVycztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVNdWx0aURlc3RpbmF0aW9uKHJlY2VudFNlYXJjaEFyZ3MpO1xuICAgICAgdGhpcy5kZXBhcnRMb2NhdGlvbiA9IHRoaXMubXVsdGlEZXN0aW5hdGlvblswXS5vcmlnO1xuICAgICAgdGhpcy5hcnJpdmVMb2NhdGlvbiA9IHRoaXMubXVsdGlEZXN0aW5hdGlvblswXS5kZXN0O1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBtYWtlUmV0dXJuT3V0Ym91bmQoY28yUGVyUGFzc2VuZ2VyOiBudW1iZXIpOiBHcmVlbmVyQ2hvaWNlIHtcbiAgICByZXR1cm4gdGhpcy5ncmVlbmVyQ2hvaWNlLm1ha2VSZXR1cm5PdXRib3VuZChjbzJQZXJQYXNzZW5nZXIpO1xuICB9XG5cbiAgcHVibGljIG1ha2VNdWx0aShvcmRlcjogbnVtYmVyLCBjbzJQZXJQYXNzZW5nZXI6IG51bWJlcik6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ3JlZW5lckNob2ljZS5tYWtlTXVsdGkob3JkZXIsIGNvMlBlclBhc3Nlbmdlcik7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q3VzdG9tQ1NTKGpvdXJuZXlIYXNoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXT8uY3VzdG9tQ1NTIHx8XG4gICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF0/LmN1c3RvbUNTUyB8fFxuICAgICAgJydcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgcmVwcmljZUZsaWdodChmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKTogUHJvbWlzZTxGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucz4ge1xuICAgIGNvbnNvbGUubG9nKCcrKysgQXR0ZW1wdGluZyB0byByZXByaWNlOiAnLCBmbGlnaHQsICcgKysrJyk7XG4gICAgLy8gdGhpcy5zZWFyY2hTZXJ2aWNlLmdldHRpbmdGbGlnaHRDbGFzc2VzLm5leHQodHJ1ZSk7XG4gICAgdHJ5IHtcbiAgICAgIC8vIG5vdyBhY3R1YWxseSBkbyB0aGUgcmVwcmljZSBjYWxsIC0gaWYgd2Ugd2FudCB0aGF0XG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UucmVwcmljaW5nRmxpZ2h0Lm5leHQodHJ1ZSk7XG4gICAgICBjb25zdCBuZXdGbGlnaHQgPSBhd2FpdCBcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEZsaWdodEF0TmV3Q2xhc3MoXG4gICAgICAgICAgdGhpcy5nZXRTZWFyY2hRdWVyeSgpLFxuICAgICAgICAgIGZsaWdodCxcbiAgICAgICAgICB0aGlzLmFkdWx0cyxcbiAgICAgICAgICB0aGlzLmNoaWxkcmVuXG4gICAgICAgICkudG9Qcm9taXNlKCk7XG4gICAgICAgIFxuICAgICAgZmxpZ2h0LnRvdGFsID0gbmV3RmxpZ2h0LmZsaWdodHNbMF0udG90YWw7XG4gICAgICAvLyB0aGlzIGJpdCBmb3IgbmV3IHBvbGljeSBFTlQtOTc3MlxuICAgICAgY29uc3QgeyBqb3VybmV5V2hlblNlbGVjdGVkLCB3aGVuU2VsZWN0ZWRBbG9uZSB9ID0gbmV3RmxpZ2h0LnJ1bGVBY3Rpb25TdW1tYXJ5O1xuICAgICAgLy8gdXBkYXRlIGluIG9idHNcbiAgICAgIHRoaXMudXBkYXRlRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMoZmxpZ2h0LCBuZXdGbGlnaHQucnVsZUFjdGlvblN1bW1hcnkpO1xuICAgICAgZmxpZ2h0LnJlcXVpcmVzUmVhc29uS2V5cyA9XG4gICAgICAgIGpvdXJuZXlXaGVuU2VsZWN0ZWRbZmxpZ2h0LmpvdXJuZXlIYXNoXT8ucmVxdWlyZXNSZWFzb25LZXlzIHx8XG4gICAgICAgIHdoZW5TZWxlY3RlZEFsb25lW2ZsaWdodC5qb3VybmV5SGFzaF0/LnJlcXVpcmVzUmVhc29uS2V5cztcbiAgICAgIGZsaWdodC5yZXF1aXJlc1JlYXNvbk1lc3NhZ2VzID1cbiAgICAgICAgam91cm5leVdoZW5TZWxlY3RlZFtmbGlnaHQuam91cm5leUhhc2hdPy5yZXF1aXJlc1JlYXNvbk1lc3NhZ2VzIHx8XG4gICAgICAgIHdoZW5TZWxlY3RlZEFsb25lW2ZsaWdodC5qb3VybmV5SGFzaF0/LnJlcXVpcmVzUmVhc29uTWVzc2FnZXMgfHxcbiAgICAgICAgW107XG5cbiAgICAgIGZsaWdodC51bmF2YWlsYWJsZSA9XG4gICAgICAgIGpvdXJuZXlXaGVuU2VsZWN0ZWRbZmxpZ2h0LmpvdXJuZXlIYXNoXT8udW5hdmFpbGFibGUgfHxcbiAgICAgICAgd2hlblNlbGVjdGVkQWxvbmVbZmxpZ2h0LmpvdXJuZXlIYXNoXT8udW5hdmFpbGFibGU7XG4gICAgICBmbGlnaHQudW5hdmFpbGFibGVNZXNzYWdlID1cbiAgICAgICAgam91cm5leVdoZW5TZWxlY3RlZFtmbGlnaHQuam91cm5leUhhc2hdPy51bmF2YWlsYWJsZU1lc3NhZ2UgfHxcbiAgICAgICAgd2hlblNlbGVjdGVkQWxvbmVbZmxpZ2h0LmpvdXJuZXlIYXNoXT8udW5hdmFpbGFibGVNZXNzYWdlIHx8XG4gICAgICAgICcnO1xuICAgICAgLy8gd2Ugd2VyZSB1cGRhdGluZyB0aGUgd2hvbGUsIGFsbCB3ZSBuZWVkIHRvIGRvIGlzIHVwZGF0ZSB0aGUgdG90YWwsIHRoaXMgY29udGFpbnMgZGlzY291bnQgaW5mb1xuICAgICAgLy8gYW5kIGFsc28gdW9kYXRlIHBvbGljeVxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnJlcHJpY2luZ0ZsaWdodC5uZXh0KGZhbHNlKTtcbiAgICAgIHJldHVybiBmbGlnaHRcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldHRpbmdGbGlnaHRDbGFzc2VzLm5leHQoZmFsc2UpO1xuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnJlcHJpY2luZ0ZsaWdodC5uZXh0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVGbGlnaHRTZWF0TWFwKHVzZXI6c3RyaW5nLCBmbGlnaHRJZDpzdHJpbmcsZmxpZ2h0SGFzaDpzdHJpbmcsc2VhdHM6YW55KTpPYnNlcnZhYmxlPEJhc2tldERldGFpbHM+IHtcbiAgICByZXR1cm4gdGhpcy51cGRhdGVGbGlnaHRTZWF0TWFwVXBkYXRlci51cGRhdGVPbmUoe3VzZXIsIGJhc2tldEl0ZW1JZDpmbGlnaHRJZCxmbGlnaHREZXRhaWxIYXNoOmZsaWdodEhhc2gsIHNlYXQ6c2VhdHN9KVxuICB9XG5cbiAgc2hvd01peGVkQ2FiaW4oZmxpZ2h0czogRmxpZ2h0Sm91cm5leVtdKTogYm9vbGVhbntcbiAgICByZXR1cm4gZmxpZ2h0cy5sZW5ndGggPiAwICYmIFxuICAgICAgZmxpZ2h0cy5zb21lKGZsaWdodCA9PiBmbGlnaHQ/LmNhYmluQ29kZSAhPT0gZmxpZ2h0c1swXT8uY2FiaW5Db2RlKSAmJiBcbiAgICAgIGZsaWdodHMuc29tZShmbGlnaHQgPT4gZmxpZ2h0LmNhYmluQ29kZSA9PT0gXCJZXCIgJiYgZmxpZ2h0LmNhYmluQ2xhc3MgPT09IFwiUHJlbWl1bVwiKTtcbiAgfVxufVxuXG4iXX0=
|