@sabstravtech/obtservices 0.0.26051001 → 0.1.6161600
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/angular/fetchers.d.ts +2 -0
- package/angular/lib/vendor/fetchers/get-office.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-user-default-mi-value.fetcher.d.ts +7 -0
- package/angular/lib/vendor/services/enterprise-basket.service.d.ts +4 -4
- package/angular/lib/vendor/services/logon.service.d.ts +2 -2
- package/angular/lib/vendor/services/user.service.d.ts +5 -3
- package/angular/lib/vendor/types/graphql.angular.types.d.ts +389 -508
- package/angular/sabstravtech-obtservices-angular.metadata.json +1 -1
- package/base/fetchers.d.ts +2 -0
- package/base/lib/vendor/classes/base-enterprise.d.ts +3 -1
- package/base/lib/vendor/classes/cabhire-enterprise-search.d.ts +5 -1
- package/base/lib/vendor/classes/carhire-enterprise-search.d.ts +8 -1
- package/base/lib/vendor/classes/eurostar-enterprise-search.d.ts +11 -4
- package/base/lib/vendor/classes/fast-track-enterprise-search.d.ts +2 -1
- package/base/lib/vendor/classes/flight-enterprise-search.d.ts +11 -0
- package/base/lib/vendor/classes/hotel-enterprise-search.d.ts +4 -0
- package/base/lib/vendor/classes/irl-enterprise-search.d.ts +9 -4
- package/base/lib/vendor/classes/lounges-enterprise-search.d.ts +2 -1
- package/base/lib/vendor/classes/management-info-and-valid.d.ts +2 -2
- package/base/lib/vendor/classes/parking-enterprise-search.d.ts +2 -1
- package/base/lib/vendor/classes/rail-enterprise-search.d.ts +1 -1
- package/base/lib/vendor/classes/user-favourite.enum.d.ts +1 -0
- package/base/lib/vendor/fetchers/eurostar-quote.fetcher.d.ts +3 -1
- package/base/lib/vendor/fetchers/flight-quote.fetcher.d.ts +1 -0
- package/base/lib/vendor/fetchers/get-office.fetcher.d.ts +20 -0
- package/base/lib/vendor/fetchers/get-user-default-mi-value.fetcher.d.ts +21 -0
- package/base/lib/vendor/fetchers/search-users-can-book-for-fetcher.d.ts +2 -2
- package/base/lib/vendor/interfaces/Icabhire-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Icarhire-enterprise-search.d.ts +2 -0
- package/base/lib/vendor/interfaces/Ienterprise-basket.service.d.ts +3 -2
- package/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +6 -0
- package/base/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +3 -0
- package/base/lib/vendor/interfaces/Iirl-enterprise-search.d.ts +4 -4
- package/base/lib/vendor/interfaces/Imybookings.service.d.ts +3 -2
- package/base/lib/vendor/interfaces/Isearch.service.d.ts +1 -0
- package/base/lib/vendor/interfaces/Iuser.service.d.ts +10 -3
- package/base/lib/vendor/interfaces/rail-basket-item.interface.d.ts +2 -0
- package/base/lib/vendor/interfaces/summary-interface.d.ts +4 -0
- package/base/lib/vendor/models/traveller.object.d.ts +11 -1
- package/base/lib/vendor/services/enterprise-basket.service.d.ts +9 -7
- package/base/lib/vendor/services/logon.service.d.ts +3 -3
- package/base/lib/vendor/services/my-bookings.service.d.ts +3 -2
- package/base/lib/vendor/services/search.service.d.ts +3 -2
- package/base/lib/vendor/services/user.service.d.ts +18 -3
- package/base/lib/vendor/services/webtoken.service.d.ts +6 -4
- package/base/lib/vendor/types/graphql.types.d.ts +379 -508
- package/base/lib/vendor/types/types.d.ts +35 -7
- package/base/sabstravtech-obtservices-base.metadata.json +1 -1
- package/bundles/sabstravtech-obtservices-angular.umd.js +300 -201
- package/bundles/sabstravtech-obtservices-angular.umd.js.map +1 -1
- package/bundles/sabstravtech-obtservices-angular.umd.min.js +1 -1
- package/bundles/sabstravtech-obtservices-angular.umd.min.js.map +1 -1
- package/bundles/sabstravtech-obtservices-base.umd.js +2143 -597
- package/bundles/sabstravtech-obtservices-base.umd.js.map +1 -1
- package/bundles/sabstravtech-obtservices-base.umd.min.js +2 -2
- package/bundles/sabstravtech-obtservices-base.umd.min.js.map +1 -1
- package/esm2015/angular/fetchers.js +3 -1
- package/esm2015/angular/lib/vendor/fetchers/get-office.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-user-default-mi-value.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/services/enterprise-basket.service.js +25 -25
- package/esm2015/angular/lib/vendor/services/logon.service.js +7 -7
- package/esm2015/angular/lib/vendor/services/ticket-queue.service.js +4 -1
- package/esm2015/angular/lib/vendor/services/user.service.js +13 -7
- package/esm2015/angular/lib/vendor/services/webtoken.service.js +2 -2
- package/esm2015/angular/lib/vendor/types/graphql.angular.types.js +808 -1231
- package/esm2015/base/fetchers.js +3 -1
- package/esm2015/base/lib/vendor/classes/base-enterprise.js +6 -3
- package/esm2015/base/lib/vendor/classes/bookable-basket.js +1 -3
- package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +155 -9
- package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +129 -8
- package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +351 -20
- package/esm2015/base/lib/vendor/classes/fast-track-enterprise-search.js +8 -5
- package/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +94 -14
- package/esm2015/base/lib/vendor/classes/helpers.js +15 -2
- package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +86 -21
- package/esm2015/base/lib/vendor/classes/irl-enterprise-search.js +123 -18
- package/esm2015/base/lib/vendor/classes/lounges-enterprise-search.js +63 -8
- package/esm2015/base/lib/vendor/classes/management-info-and-valid.js +56 -33
- package/esm2015/base/lib/vendor/classes/parking-enterprise-search.js +109 -6
- package/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +81 -7
- package/esm2015/base/lib/vendor/classes/supplementary-booking-info-impl.js +17 -1
- package/esm2015/base/lib/vendor/classes/user-favourite.enum.js +2 -1
- package/esm2015/base/lib/vendor/data/countries.json +484 -242
- package/esm2015/base/lib/vendor/fetchers/eurostar-quote.fetcher.js +3 -3
- package/esm2015/base/lib/vendor/fetchers/flight-quote.fetcher.js +3 -3
- package/esm2015/base/lib/vendor/fetchers/get-office.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-user-default-mi-value.fetcher.js +10 -0
- package/esm2015/base/lib/vendor/fetchers/search-users-can-book-for-fetcher.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Icabhire-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Icarhire-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ienterprise-basket.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ihotel-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iirl-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Imybookings.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Isearch.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iuser.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/rail-basket-item.interface.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/summary-interface.js +1 -1
- package/esm2015/base/lib/vendor/models/traveller.object.js +21 -3
- package/esm2015/base/lib/vendor/services/enterprise-basket.service.js +42 -19
- package/esm2015/base/lib/vendor/services/logon.service.js +8 -5
- package/esm2015/base/lib/vendor/services/my-bookings.service.js +3 -2
- package/esm2015/base/lib/vendor/services/search.service.js +32 -24
- package/esm2015/base/lib/vendor/services/user.service.js +47 -3
- package/esm2015/base/lib/vendor/services/webtoken.service.js +12 -6
- package/esm2015/base/lib/vendor/types/graphql.types.js +15 -1
- package/esm2015/base/lib/vendor/types/types.js +4 -3
- package/fesm2015/sabstravtech-obtservices-angular.js +948 -1334
- package/fesm2015/sabstravtech-obtservices-angular.js.map +1 -1
- package/fesm2015/sabstravtech-obtservices-base.js +1984 -472
- package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
- package/package.json +1 -1
|
@@ -7,6 +7,7 @@ import { FlightDirectionEnum, DifferentInvokdedUserReasons } from '../types/type
|
|
|
7
7
|
import { EurostarSearchType } from './eurostar-search-type.enum';
|
|
8
8
|
import { TimeWindow } from './flight-enterprise-search';
|
|
9
9
|
import { ModalTypes } from './modal-types.enum';
|
|
10
|
+
import { take } from 'rxjs/operators';
|
|
10
11
|
const DEFAULT_FILTERS = Object.freeze({
|
|
11
12
|
stops: {},
|
|
12
13
|
totalStops: {},
|
|
@@ -62,11 +63,12 @@ export var SortMethod;
|
|
|
62
63
|
SortMethod["sortByDate"] = "sortByDate";
|
|
63
64
|
})(SortMethod || (SortMethod = {}));
|
|
64
65
|
export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
65
|
-
constructor(eurostarFetcher, helpers, userService, basketService, storageService, searchService, modalService) {
|
|
66
|
-
super(storageService, helpers, searchService);
|
|
66
|
+
constructor(eurostarFetcher, helpers, userService, basketService, storageService, searchService, modalService, applyFlightRules) {
|
|
67
|
+
super(storageService, helpers, searchService, userService);
|
|
67
68
|
this.eurostarFetcher = eurostarFetcher;
|
|
68
69
|
this.basketService = basketService;
|
|
69
70
|
this.modalService = modalService;
|
|
71
|
+
this.applyFlightRules = applyFlightRules;
|
|
70
72
|
this.type = ServiceType.Eurostar;
|
|
71
73
|
this.avaliableClasses = new BehaviorSubject([]);
|
|
72
74
|
this.timeCriteriaOptions = new BehaviorSubject([]);
|
|
@@ -476,12 +478,18 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
476
478
|
}
|
|
477
479
|
processResults(results1) {
|
|
478
480
|
this.resultQuery = this.getSearchQuery();
|
|
479
|
-
|
|
481
|
+
this.multi = results1.multi;
|
|
482
|
+
// delete this.resultQuery['withGrouped'];
|
|
480
483
|
this.filters.next(this.helpers.createFlightFilters(results1.journeys, DEFAULT_FILTERS));
|
|
481
484
|
if (results1 && this.searchService.isFlightsGrouped()) {
|
|
485
|
+
this._ruleActionSummary = Object.assign({}, {
|
|
486
|
+
journeyWhenSelected: {},
|
|
487
|
+
dualSingleWhenSelected: {},
|
|
488
|
+
whenSelectedAlone: {}
|
|
489
|
+
}, results1.ruleActionSummary || {});
|
|
482
490
|
const returndata = (results1.journeys || []).reduce((acc, result, index) => {
|
|
483
491
|
if (result.outboundFlights.length) {
|
|
484
|
-
const euroResult = this.formatEurostarResults(result.outboundFlights, result.total, index);
|
|
492
|
+
const euroResult = this.formatEurostarResults(result.outboundFlights, result.total, result.journeyHash, index);
|
|
485
493
|
euroResult.co2PerPassenger = result.co2PerPassenger;
|
|
486
494
|
euroResult.co2PerItem = result.co2PerItem;
|
|
487
495
|
euroResult.sourceId = result.sourceId;
|
|
@@ -494,7 +502,7 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
494
502
|
}
|
|
495
503
|
}
|
|
496
504
|
if (result.inboundFlights.length) {
|
|
497
|
-
const euroResult = this.formatEurostarResults(result.inboundFlights, result.total, index);
|
|
505
|
+
const euroResult = this.formatEurostarResults(result.inboundFlights, result.total, result.journeyHash, index);
|
|
498
506
|
euroResult.co2PerPassenger = result.co2PerPassenger;
|
|
499
507
|
euroResult.co2PerItem = result.co2PerItem;
|
|
500
508
|
euroResult.sourceId = result.sourceId;
|
|
@@ -542,8 +550,8 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
542
550
|
}
|
|
543
551
|
return acc;
|
|
544
552
|
}
|
|
545
|
-
formatEurostarResults(results, total, index) {
|
|
546
|
-
|
|
553
|
+
formatEurostarResults(results, total, journeyHash, index) {
|
|
554
|
+
let returnObject = {
|
|
547
555
|
dateArrival: null,
|
|
548
556
|
dateDeparture: null,
|
|
549
557
|
duration: null,
|
|
@@ -561,7 +569,21 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
561
569
|
isDisabled: true,
|
|
562
570
|
price: NaN,
|
|
563
571
|
currency: 'GBP',
|
|
564
|
-
selected: false
|
|
572
|
+
selected: false,
|
|
573
|
+
requiresReason: false,
|
|
574
|
+
preferred: false,
|
|
575
|
+
preferredMessages: '',
|
|
576
|
+
companyPreferred: false,
|
|
577
|
+
companyPreferredMessage: '',
|
|
578
|
+
officePreferred: false,
|
|
579
|
+
officePreferredMessage: '',
|
|
580
|
+
tmcPreferred: false,
|
|
581
|
+
tmcPreferredMessage: '',
|
|
582
|
+
unavailable: false,
|
|
583
|
+
unavailableMessage: '',
|
|
584
|
+
requiresReasonMessage: '',
|
|
585
|
+
canSelect: false,
|
|
586
|
+
journeyHash: ''
|
|
565
587
|
},
|
|
566
588
|
standardFare: {
|
|
567
589
|
class: null,
|
|
@@ -569,7 +591,21 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
569
591
|
isDisabled: true,
|
|
570
592
|
price: NaN,
|
|
571
593
|
currency: 'GBP',
|
|
572
|
-
selected: false
|
|
594
|
+
selected: false,
|
|
595
|
+
requiresReason: false,
|
|
596
|
+
preferred: false,
|
|
597
|
+
preferredMessages: '',
|
|
598
|
+
companyPreferred: false,
|
|
599
|
+
companyPreferredMessage: '',
|
|
600
|
+
officePreferred: false,
|
|
601
|
+
officePreferredMessage: '',
|
|
602
|
+
tmcPreferred: false,
|
|
603
|
+
tmcPreferredMessage: '',
|
|
604
|
+
unavailable: false,
|
|
605
|
+
unavailableMessage: '',
|
|
606
|
+
requiresReasonMessage: '',
|
|
607
|
+
canSelect: false,
|
|
608
|
+
journeyHash: ''
|
|
573
609
|
},
|
|
574
610
|
standardPremierFare: {
|
|
575
611
|
class: null,
|
|
@@ -577,9 +613,22 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
577
613
|
isDisabled: true,
|
|
578
614
|
price: NaN,
|
|
579
615
|
currency: 'GBP',
|
|
580
|
-
selected: false
|
|
581
|
-
|
|
582
|
-
|
|
616
|
+
selected: false,
|
|
617
|
+
requiresReason: false,
|
|
618
|
+
preferred: false,
|
|
619
|
+
preferredMessages: '',
|
|
620
|
+
companyPreferred: false,
|
|
621
|
+
companyPreferredMessage: '',
|
|
622
|
+
officePreferred: false,
|
|
623
|
+
officePreferredMessage: '',
|
|
624
|
+
tmcPreferred: false,
|
|
625
|
+
tmcPreferredMessage: '',
|
|
626
|
+
unavailable: false,
|
|
627
|
+
unavailableMessage: '',
|
|
628
|
+
requiresReasonMessage: '',
|
|
629
|
+
canSelect: false,
|
|
630
|
+
journeyHash: ''
|
|
631
|
+
}
|
|
583
632
|
};
|
|
584
633
|
// returnObject.duration = results.outboundTotalDuration;
|
|
585
634
|
results.forEach((flight) => {
|
|
@@ -605,6 +654,8 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
605
654
|
returnObject.standardFare.currency = total.currency;
|
|
606
655
|
returnObject.standardFare.class = flight.cabinClass;
|
|
607
656
|
returnObject.standardFare.selected = false;
|
|
657
|
+
returnObject.standardFare.journeyHash = journeyHash;
|
|
658
|
+
returnObject = this.updateRules(returnObject, journeyHash, 'standardFare');
|
|
608
659
|
break;
|
|
609
660
|
case 'Premium':
|
|
610
661
|
returnObject.standardPremierFare.isDisabled = false;
|
|
@@ -613,6 +664,8 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
613
664
|
returnObject.standardPremierFare.currency = total.currency;
|
|
614
665
|
returnObject.standardPremierFare.class = flight.cabinClass;
|
|
615
666
|
returnObject.standardPremierFare.selected = false;
|
|
667
|
+
returnObject.standardPremierFare.journeyHash = journeyHash;
|
|
668
|
+
returnObject = this.updateRules(returnObject, journeyHash, 'standardPremierFare');
|
|
616
669
|
break;
|
|
617
670
|
case FlightCabinClass.Business:
|
|
618
671
|
returnObject.businessPremierFare.isDisabled = false;
|
|
@@ -621,6 +674,8 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
621
674
|
returnObject.businessPremierFare.currency = total.currency;
|
|
622
675
|
returnObject.businessPremierFare.class = flight.cabinClass;
|
|
623
676
|
returnObject.businessPremierFare.selected = false;
|
|
677
|
+
returnObject.businessPremierFare.journeyHash = journeyHash;
|
|
678
|
+
returnObject = this.updateRules(returnObject, journeyHash, 'businessPremierFare');
|
|
624
679
|
break;
|
|
625
680
|
default:
|
|
626
681
|
console.warn('new class to be implemented: ', flight.cabinClass);
|
|
@@ -628,6 +683,108 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
628
683
|
});
|
|
629
684
|
return returnObject;
|
|
630
685
|
}
|
|
686
|
+
updateRules(returnObject, journeyHash, fareType) {
|
|
687
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33;
|
|
688
|
+
const selectedRuleSummary = this._ruleActionSummary.dualSingleWhenSelected[(_a = this.selectedGroupFlight) === null || _a === void 0 ? void 0 : _a.journeyHash] || {};
|
|
689
|
+
const hasField = (journeyHash, field, def) => {
|
|
690
|
+
return (this.helpers.fieldFromObject(this._ruleActionSummary, [
|
|
691
|
+
'journeyWhenSelected',
|
|
692
|
+
journeyHash,
|
|
693
|
+
field
|
|
694
|
+
]) ||
|
|
695
|
+
this.helpers.fieldFromObject(this._ruleActionSummary, [
|
|
696
|
+
'whenSelectedAlone',
|
|
697
|
+
journeyHash,
|
|
698
|
+
field
|
|
699
|
+
]) ||
|
|
700
|
+
this.helpers.fieldFromObject(selectedRuleSummary, [
|
|
701
|
+
journeyHash,
|
|
702
|
+
field
|
|
703
|
+
]) ||
|
|
704
|
+
def);
|
|
705
|
+
};
|
|
706
|
+
switch (fareType) {
|
|
707
|
+
case 'standardFare':
|
|
708
|
+
returnObject.standardFare.companyPreferred =
|
|
709
|
+
((_b = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _b === void 0 ? void 0 : _b.companyPreferred) || ((_c = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _c === void 0 ? void 0 : _c.companyPreferred) ||
|
|
710
|
+
false;
|
|
711
|
+
returnObject.standardFare.companyPreferredMessage =
|
|
712
|
+
((_d = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _d === void 0 ? void 0 : _d.companyPreferredMessage) || ((_e = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _e === void 0 ? void 0 : _e.companyPreferredMessage) ||
|
|
713
|
+
'';
|
|
714
|
+
returnObject.standardFare.officePreferred =
|
|
715
|
+
((_f = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _f === void 0 ? void 0 : _f.officePreferred) || ((_g = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _g === void 0 ? void 0 : _g.officePreferred) ||
|
|
716
|
+
false;
|
|
717
|
+
returnObject.standardFare.officePreferredMessage =
|
|
718
|
+
((_h = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _h === void 0 ? void 0 : _h.officePreferredMessage) || ((_j = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _j === void 0 ? void 0 : _j.officePreferredMessage) ||
|
|
719
|
+
'';
|
|
720
|
+
returnObject.standardFare.tmcPreferred =
|
|
721
|
+
((_k = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _k === void 0 ? void 0 : _k.tmcPreferred) || ((_l = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _l === void 0 ? void 0 : _l.tmcPreferred) ||
|
|
722
|
+
false;
|
|
723
|
+
returnObject.standardFare.tmcPreferredMessage =
|
|
724
|
+
((_m = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _m === void 0 ? void 0 : _m.tmcPreferredMessage) || ((_o = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _o === void 0 ? void 0 : _o.tmcPreferredMessage) ||
|
|
725
|
+
'';
|
|
726
|
+
returnObject.standardFare.preferred =
|
|
727
|
+
((_p = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _p === void 0 ? void 0 : _p.companyPreferred) || ((_q = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _q === void 0 ? void 0 : _q.companyPreferred) || ((_r = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _r === void 0 ? void 0 : _r.officePreferred) || ((_s = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _s === void 0 ? void 0 : _s.officePreferred) || ((_t = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _t === void 0 ? void 0 : _t.tmcPreferred) || ((_u = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _u === void 0 ? void 0 : _u.tmcPreferred);
|
|
728
|
+
returnObject.standardFare.selected = returnObject.uid === ((_v = this.selectedGroupFlight) === null || _v === void 0 ? void 0 : _v.uid);
|
|
729
|
+
returnObject.standardFare.unavailable = hasField(journeyHash, 'unavailable', false);
|
|
730
|
+
returnObject.standardFare.unavailableMessage = hasField(journeyHash, 'unavailableMessage', '');
|
|
731
|
+
returnObject.standardFare.requiresReason = hasField(journeyHash, 'requiresReason', false);
|
|
732
|
+
returnObject.standardFare.requiresReasonMessage = hasField(journeyHash, 'requiresReasonMessage', '');
|
|
733
|
+
case 'standardPremierFare':
|
|
734
|
+
returnObject.standardPremierFare.companyPreferred =
|
|
735
|
+
((_w = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _w === void 0 ? void 0 : _w.companyPreferred) || ((_x = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _x === void 0 ? void 0 : _x.companyPreferred) ||
|
|
736
|
+
false;
|
|
737
|
+
returnObject.standardPremierFare.companyPreferredMessage =
|
|
738
|
+
((_y = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _y === void 0 ? void 0 : _y.companyPreferredMessage) || ((_z = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _z === void 0 ? void 0 : _z.companyPreferredMessage) ||
|
|
739
|
+
'';
|
|
740
|
+
returnObject.standardPremierFare.officePreferred =
|
|
741
|
+
((_0 = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _0 === void 0 ? void 0 : _0.officePreferred) || ((_1 = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _1 === void 0 ? void 0 : _1.officePreferred) ||
|
|
742
|
+
false;
|
|
743
|
+
returnObject.standardPremierFare.officePreferredMessage =
|
|
744
|
+
((_2 = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _2 === void 0 ? void 0 : _2.officePreferredMessage) || ((_3 = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _3 === void 0 ? void 0 : _3.officePreferredMessage) ||
|
|
745
|
+
'';
|
|
746
|
+
returnObject.standardPremierFare.tmcPreferred =
|
|
747
|
+
((_4 = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _4 === void 0 ? void 0 : _4.tmcPreferred) || ((_5 = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _5 === void 0 ? void 0 : _5.tmcPreferred) ||
|
|
748
|
+
false;
|
|
749
|
+
returnObject.standardPremierFare.tmcPreferredMessage =
|
|
750
|
+
((_6 = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _6 === void 0 ? void 0 : _6.tmcPreferredMessage) || ((_7 = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _7 === void 0 ? void 0 : _7.tmcPreferredMessage) ||
|
|
751
|
+
'';
|
|
752
|
+
returnObject.standardPremierFare.preferred =
|
|
753
|
+
((_8 = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _8 === void 0 ? void 0 : _8.companyPreferred) || ((_9 = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _9 === void 0 ? void 0 : _9.companyPreferred) || ((_10 = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _10 === void 0 ? void 0 : _10.officePreferred) || ((_11 = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _11 === void 0 ? void 0 : _11.officePreferred) || ((_12 = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _12 === void 0 ? void 0 : _12.tmcPreferred) || ((_13 = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _13 === void 0 ? void 0 : _13.tmcPreferred);
|
|
754
|
+
returnObject.standardPremierFare.selected = returnObject.uid === ((_14 = this.selectedGroupFlight) === null || _14 === void 0 ? void 0 : _14.uid);
|
|
755
|
+
returnObject.standardPremierFare.unavailable = hasField(journeyHash, 'unavailable', false);
|
|
756
|
+
returnObject.standardPremierFare.unavailableMessage = hasField(journeyHash, 'unavailableMessage', '');
|
|
757
|
+
returnObject.standardPremierFare.requiresReason = hasField(journeyHash, 'requiresReason', false);
|
|
758
|
+
returnObject.standardPremierFare.requiresReasonMessage = hasField(journeyHash, 'requiresReasonMessage', '');
|
|
759
|
+
case 'businessPremierFare':
|
|
760
|
+
returnObject.businessPremierFare.companyPreferred =
|
|
761
|
+
((_15 = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _15 === void 0 ? void 0 : _15.companyPreferred) || ((_16 = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _16 === void 0 ? void 0 : _16.companyPreferred) ||
|
|
762
|
+
false;
|
|
763
|
+
returnObject.businessPremierFare.companyPreferredMessage =
|
|
764
|
+
((_17 = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _17 === void 0 ? void 0 : _17.companyPreferredMessage) || ((_18 = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _18 === void 0 ? void 0 : _18.companyPreferredMessage) ||
|
|
765
|
+
'';
|
|
766
|
+
returnObject.businessPremierFare.officePreferred =
|
|
767
|
+
((_19 = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _19 === void 0 ? void 0 : _19.officePreferred) || ((_20 = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _20 === void 0 ? void 0 : _20.officePreferred) ||
|
|
768
|
+
false;
|
|
769
|
+
returnObject.businessPremierFare.officePreferredMessage =
|
|
770
|
+
((_21 = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _21 === void 0 ? void 0 : _21.officePreferredMessage) || ((_22 = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _22 === void 0 ? void 0 : _22.officePreferredMessage) ||
|
|
771
|
+
'';
|
|
772
|
+
returnObject.businessPremierFare.tmcPreferred =
|
|
773
|
+
((_23 = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _23 === void 0 ? void 0 : _23.tmcPreferred) || ((_24 = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _24 === void 0 ? void 0 : _24.tmcPreferred) ||
|
|
774
|
+
false;
|
|
775
|
+
returnObject.businessPremierFare.tmcPreferredMessage =
|
|
776
|
+
((_25 = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _25 === void 0 ? void 0 : _25.tmcPreferredMessage) || ((_26 = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _26 === void 0 ? void 0 : _26.tmcPreferredMessage) ||
|
|
777
|
+
'';
|
|
778
|
+
returnObject.businessPremierFare.preferred =
|
|
779
|
+
((_27 = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _27 === void 0 ? void 0 : _27.companyPreferred) || ((_28 = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _28 === void 0 ? void 0 : _28.companyPreferred) || ((_29 = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _29 === void 0 ? void 0 : _29.officePreferred) || ((_30 = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _30 === void 0 ? void 0 : _30.officePreferred) || ((_31 = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _31 === void 0 ? void 0 : _31.tmcPreferred) || ((_32 = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _32 === void 0 ? void 0 : _32.tmcPreferred);
|
|
780
|
+
returnObject.businessPremierFare.selected = returnObject.uid === ((_33 = this.selectedGroupFlight) === null || _33 === void 0 ? void 0 : _33.uid);
|
|
781
|
+
returnObject.businessPremierFare.unavailable = hasField(journeyHash, 'unavailable', false);
|
|
782
|
+
returnObject.businessPremierFare.unavailableMessage = hasField(journeyHash, 'unavailableMessage', '');
|
|
783
|
+
returnObject.businessPremierFare.requiresReason = hasField(journeyHash, 'requiresReason', false);
|
|
784
|
+
returnObject.businessPremierFare.requiresReasonMessage = hasField(journeyHash, 'requiresReasonMessage', '');
|
|
785
|
+
}
|
|
786
|
+
return returnObject;
|
|
787
|
+
}
|
|
631
788
|
resetQuery(checkIsValid = true) {
|
|
632
789
|
this.updateTempParams(this.searchService.makeEurostarQuery());
|
|
633
790
|
if (checkIsValid) {
|
|
@@ -1054,10 +1211,118 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1054
1211
|
}
|
|
1055
1212
|
}
|
|
1056
1213
|
updateFromPreviousSearches(previousItems) {
|
|
1057
|
-
var _a;
|
|
1214
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
1058
1215
|
const flightItem = (_a = previousItems[ServiceType.Flight]) === null || _a === void 0 ? void 0 : _a.searchQuery;
|
|
1216
|
+
const railItem = (_b = previousItems[ServiceType.Rail]) === null || _b === void 0 ? void 0 : _b.searchQuery;
|
|
1217
|
+
const irlItem = (_c = previousItems[ServiceType.InternationalRail]) === null || _c === void 0 ? void 0 : _c.searchQuery;
|
|
1218
|
+
const hotelItem = (_d = previousItems[ServiceType.Rail]) === null || _d === void 0 ? void 0 : _d.searchQuery;
|
|
1219
|
+
const carItem = (_e = previousItems[ServiceType.Car]) === null || _e === void 0 ? void 0 : _e.searchQuery;
|
|
1220
|
+
const loungeItem = (_f = previousItems[ServiceType.Lounge]) === null || _f === void 0 ? void 0 : _f.searchQuery;
|
|
1221
|
+
const parkingItem = (_g = previousItems[ServiceType.Parking]) === null || _g === void 0 ? void 0 : _g.searchQuery;
|
|
1059
1222
|
if (flightItem) {
|
|
1060
|
-
|
|
1223
|
+
try {
|
|
1224
|
+
this.outBoundDate = moment(previousItems.FLIGHT.outboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
|
|
1225
|
+
if (this.outBoundDate.minutes() % 30)
|
|
1226
|
+
this.outBoundDate = this.outBoundDate.subtract(this.outBoundDate.minutes() % 30, "minutes");
|
|
1227
|
+
if (previousItems.FLIGHT.inboundDate) {
|
|
1228
|
+
this.inboundDate = moment(previousItems.FLIGHT.inboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
|
|
1229
|
+
if (this.inboundDate.minutes() % 30)
|
|
1230
|
+
this.inboundDate = this.inboundDate.subtract(this.inboundDate.minutes() % 30, "minutes");
|
|
1231
|
+
}
|
|
1232
|
+
}
|
|
1233
|
+
catch (_h) {
|
|
1234
|
+
console.error('Error trying to prepopulate eurostar from flight item');
|
|
1235
|
+
}
|
|
1236
|
+
}
|
|
1237
|
+
else if (railItem) {
|
|
1238
|
+
try {
|
|
1239
|
+
this.outBoundDate = moment(previousItems.RAIL.outboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
|
|
1240
|
+
if (this.outBoundDate.minutes() % 30)
|
|
1241
|
+
this.outBoundDate = this.outBoundDate.subtract(this.outBoundDate.minutes() % 30, "minutes");
|
|
1242
|
+
if (previousItems.RAIL.inboundDate) {
|
|
1243
|
+
this.inboundDate = moment(previousItems.RAIL.inboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
|
|
1244
|
+
if (this.inboundDate.minutes() % 30)
|
|
1245
|
+
this.inboundDate = this.inboundDate.subtract(this.inboundDate.minutes() % 30, "minutes");
|
|
1246
|
+
}
|
|
1247
|
+
}
|
|
1248
|
+
catch (_j) {
|
|
1249
|
+
console.error('Error trying to prepopulate eurostar from rail item');
|
|
1250
|
+
}
|
|
1251
|
+
}
|
|
1252
|
+
else if (irlItem) {
|
|
1253
|
+
try {
|
|
1254
|
+
this.outBoundDate = moment(previousItems.INTERNATIONAL_RAIL.outboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
|
|
1255
|
+
if (this.outBoundDate.minutes() % 30)
|
|
1256
|
+
this.outBoundDate = this.outBoundDate.subtract(this.outBoundDate.minutes() % 30, "minutes");
|
|
1257
|
+
if (previousItems.INTERNATIONAL_RAIL.inboundDate) {
|
|
1258
|
+
this.inboundDate = moment(previousItems.INTERNATIONAL_RAIL.inboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
|
|
1259
|
+
if (this.inboundDate.minutes() % 30)
|
|
1260
|
+
this.inboundDate = this.inboundDate.subtract(this.inboundDate.minutes() % 30, "minutes");
|
|
1261
|
+
}
|
|
1262
|
+
}
|
|
1263
|
+
catch (_k) {
|
|
1264
|
+
console.error('Error trying to prepopulate eurostar from international rail item');
|
|
1265
|
+
}
|
|
1266
|
+
}
|
|
1267
|
+
else if (hotelItem) {
|
|
1268
|
+
try {
|
|
1269
|
+
this.outBoundDate = moment(previousItems.HOTEL.outboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
|
|
1270
|
+
if (this.outBoundDate.minutes() % 30)
|
|
1271
|
+
this.outBoundDate = this.outBoundDate.subtract(this.outBoundDate.minutes() % 30, "minutes");
|
|
1272
|
+
if (previousItems.HOTEL.inboundDate) {
|
|
1273
|
+
this.inboundDate = moment(previousItems.HOTEL.inboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
|
|
1274
|
+
if (this.inboundDate.minutes() % 30)
|
|
1275
|
+
this.inboundDate = this.inboundDate.subtract(this.inboundDate.minutes() % 30, "minutes");
|
|
1276
|
+
}
|
|
1277
|
+
}
|
|
1278
|
+
catch (_l) {
|
|
1279
|
+
console.error('Error trying to prepopulate eurostar from hotel item');
|
|
1280
|
+
}
|
|
1281
|
+
}
|
|
1282
|
+
else if (carItem) {
|
|
1283
|
+
try {
|
|
1284
|
+
this.outBoundDate = moment(previousItems.CAR.outboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
|
|
1285
|
+
if (this.outBoundDate.minutes() % 30)
|
|
1286
|
+
this.outBoundDate = this.outBoundDate.subtract(this.outBoundDate.minutes() % 30, "minutes");
|
|
1287
|
+
if (previousItems.CAR.inboundDate) {
|
|
1288
|
+
this.inboundDate = moment(previousItems.CAR.inboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
|
|
1289
|
+
if (this.inboundDate.minutes() % 30)
|
|
1290
|
+
this.inboundDate = this.inboundDate.subtract(this.inboundDate.minutes() % 30, "minutes");
|
|
1291
|
+
}
|
|
1292
|
+
}
|
|
1293
|
+
catch (_m) {
|
|
1294
|
+
console.error('Error trying to prepopulate eurostar from car item');
|
|
1295
|
+
}
|
|
1296
|
+
}
|
|
1297
|
+
else if (loungeItem) {
|
|
1298
|
+
try {
|
|
1299
|
+
this.outBoundDate = moment(previousItems.LOUNGE.outboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
|
|
1300
|
+
if (this.outBoundDate.minutes() % 30)
|
|
1301
|
+
this.outBoundDate = this.outBoundDate.subtract(this.outBoundDate.minutes() % 30, "minutes");
|
|
1302
|
+
if (previousItems.LOUNGE.inboundDate) {
|
|
1303
|
+
this.inboundDate = moment(previousItems.LOUNGE.inboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
|
|
1304
|
+
if (this.inboundDate.minutes() % 30)
|
|
1305
|
+
this.inboundDate = this.inboundDate.subtract(this.inboundDate.minutes() % 30, "minutes");
|
|
1306
|
+
}
|
|
1307
|
+
}
|
|
1308
|
+
catch (_o) {
|
|
1309
|
+
console.error('Error trying to prepopulate eurostar from lounge item');
|
|
1310
|
+
}
|
|
1311
|
+
}
|
|
1312
|
+
else if (parkingItem) {
|
|
1313
|
+
try {
|
|
1314
|
+
this.outBoundDate = moment(previousItems.PARKING.outboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
|
|
1315
|
+
if (this.outBoundDate.minutes() % 30)
|
|
1316
|
+
this.outBoundDate = this.outBoundDate.subtract(this.outBoundDate.minutes() % 30, "minutes");
|
|
1317
|
+
if (previousItems.PARKING.inboundDate) {
|
|
1318
|
+
this.inboundDate = moment(previousItems.PARKING.inboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
|
|
1319
|
+
if (this.inboundDate.minutes() % 30)
|
|
1320
|
+
this.inboundDate = this.inboundDate.subtract(this.inboundDate.minutes() % 30, "minutes");
|
|
1321
|
+
}
|
|
1322
|
+
}
|
|
1323
|
+
catch (_p) {
|
|
1324
|
+
console.error('Error trying to prepopulate eurostar from parking item');
|
|
1325
|
+
}
|
|
1061
1326
|
}
|
|
1062
1327
|
}
|
|
1063
1328
|
getTotalBaggage(result) {
|
|
@@ -1219,7 +1484,7 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1219
1484
|
outboundFlights: [this.makeSchemaFlights(fare.fare, 'outbound', 0)],
|
|
1220
1485
|
inboundFlights: [],
|
|
1221
1486
|
journeyType: 'single'
|
|
1222
|
-
}, selectedEurostar.dateDeparture, null, fare.price,
|
|
1487
|
+
}, selectedEurostar.dateDeparture, null, fare.price, fare.requiresReason);
|
|
1223
1488
|
return;
|
|
1224
1489
|
}
|
|
1225
1490
|
// return logic needs updating - either accept outbound or return and somehow distiguish them
|
|
@@ -1241,7 +1506,7 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1241
1506
|
this.makeSchemaFlights(fare.fare, 'outbound', 0)
|
|
1242
1507
|
],
|
|
1243
1508
|
journeyType: 'roundtrip'
|
|
1244
|
-
}, selectedEurostar.dateDeparture, this.selectedGroupEurostar.item.dateArrival, price,
|
|
1509
|
+
}, selectedEurostar.dateDeparture, this.selectedGroupEurostar.item.dateArrival, price, fare.requiresReason);
|
|
1245
1510
|
this.resetSelectedFares();
|
|
1246
1511
|
this.basketService.toggleMenu();
|
|
1247
1512
|
this.results.next(this.fullResults.map(this.removeSelectedFlags));
|
|
@@ -1281,7 +1546,7 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1281
1546
|
],
|
|
1282
1547
|
inboundFlights: [this.makeSchemaFlights(fare.fare, 'inbound', 0)],
|
|
1283
1548
|
journeyType: 'roundtrip'
|
|
1284
|
-
}, selectedEurostar.dateDeparture, this.selectedGroupEurostar.item.dateArrival, price,
|
|
1549
|
+
}, selectedEurostar.dateDeparture, this.selectedGroupEurostar.item.dateArrival, price, fare.requiresReason);
|
|
1285
1550
|
this.resetSelectedFares();
|
|
1286
1551
|
this.basketService.toggleMenu();
|
|
1287
1552
|
this.results.next(this.fullResults.map(this.removeSelectedFlags));
|
|
@@ -1305,11 +1570,44 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1305
1570
|
const inbound = result.inbound.filter((item) => index === item.uid);
|
|
1306
1571
|
return { inbound, outbound: result.outbound };
|
|
1307
1572
|
}));
|
|
1573
|
+
this._updateTravelPolicies();
|
|
1308
1574
|
}
|
|
1309
1575
|
}
|
|
1310
1576
|
}
|
|
1311
1577
|
});
|
|
1312
1578
|
}
|
|
1579
|
+
_updateTravelPolicies() {
|
|
1580
|
+
if (!this.selectedGroupEurostar ||
|
|
1581
|
+
this._ruleActionSummary.dualSingleWhenSelected[this._selectedEurostarFare.item.journeyHash] ||
|
|
1582
|
+
!this.multi ||
|
|
1583
|
+
this.multi.length === 0) {
|
|
1584
|
+
return;
|
|
1585
|
+
}
|
|
1586
|
+
const multiInbounds = (this.multi || []).reduce((acc, item) => {
|
|
1587
|
+
if (item.order === 1 && item.results && item.results.length > 0) {
|
|
1588
|
+
acc = acc.concat(item.results);
|
|
1589
|
+
}
|
|
1590
|
+
return acc;
|
|
1591
|
+
}, []);
|
|
1592
|
+
if (multiInbounds.length > 0) {
|
|
1593
|
+
if (!this.rawResults) {
|
|
1594
|
+
this.rawResults = this.storageService.getSessionItem(this.resultsSessionName + '_raw');
|
|
1595
|
+
}
|
|
1596
|
+
console.log(this.rawResults);
|
|
1597
|
+
this.applyFlightRules
|
|
1598
|
+
.fetchOne({
|
|
1599
|
+
selectedOutboundFlight: this.selectedGroupFlight,
|
|
1600
|
+
availableInboundFlights: multiInbounds,
|
|
1601
|
+
searchId: this.rawResults.searchId
|
|
1602
|
+
})
|
|
1603
|
+
.pipe(take(1))
|
|
1604
|
+
.subscribe((rules) => {
|
|
1605
|
+
if (rules) {
|
|
1606
|
+
this._ruleActionSummary = this.helpers.mergeObjects(this._ruleActionSummary, rules);
|
|
1607
|
+
}
|
|
1608
|
+
});
|
|
1609
|
+
}
|
|
1610
|
+
}
|
|
1313
1611
|
resetSelectedFares() {
|
|
1314
1612
|
this.selectedGroupEurostar = {
|
|
1315
1613
|
direction: null,
|
|
@@ -1337,7 +1635,7 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1337
1635
|
}
|
|
1338
1636
|
updateLowestPrice(results) {
|
|
1339
1637
|
if (!results.length || this.searchService.isFlightsGrouped())
|
|
1340
|
-
return;
|
|
1638
|
+
return; //
|
|
1341
1639
|
const result = results[0];
|
|
1342
1640
|
const journeys = result.journeys;
|
|
1343
1641
|
if (!journeys.length)
|
|
@@ -1351,6 +1649,7 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1351
1649
|
}, { amount: Number.MAX_SAFE_INTEGER, currencyCode: currency });
|
|
1352
1650
|
}
|
|
1353
1651
|
doBooking(intBasket, selectedFlight, schemaDetails, outboundDate, inboundDate, price, requiresReason) {
|
|
1652
|
+
var _a, _b;
|
|
1354
1653
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1355
1654
|
const { sourceId, co2PerItem, co2PerPassenger, total } = selectedFlight;
|
|
1356
1655
|
const booking = {
|
|
@@ -1364,7 +1663,9 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1364
1663
|
price,
|
|
1365
1664
|
searchQuery: this.resultQuery,
|
|
1366
1665
|
service: sourceId.toString(),
|
|
1367
|
-
outboundDate
|
|
1666
|
+
outboundDate,
|
|
1667
|
+
lowestPrice: (_a = this.lowestPrice) === null || _a === void 0 ? void 0 : _a.amount,
|
|
1668
|
+
lowestPriceCurrency: (_b = this.lowestPrice) === null || _b === void 0 ? void 0 : _b.currencyCode
|
|
1368
1669
|
};
|
|
1369
1670
|
if (inboundDate) {
|
|
1370
1671
|
booking.inboundDate = inboundDate;
|
|
@@ -1376,6 +1677,36 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1376
1677
|
return whatHappened;
|
|
1377
1678
|
});
|
|
1378
1679
|
}
|
|
1680
|
+
get lowestPrice() {
|
|
1681
|
+
if (this.cheapestPrice)
|
|
1682
|
+
return this.cheapestPrice;
|
|
1683
|
+
const outbound = this.fullResults[0].outbound;
|
|
1684
|
+
const currency = outbound[0].standardFare.currency;
|
|
1685
|
+
let cheapestOutbound;
|
|
1686
|
+
outbound.forEach(a => {
|
|
1687
|
+
if (!cheapestOutbound || a.standardFare.price < cheapestOutbound)
|
|
1688
|
+
cheapestOutbound = a.standardFare.price;
|
|
1689
|
+
if (a.standardPremierFare.price < cheapestOutbound)
|
|
1690
|
+
cheapestOutbound = a.standardPremierFare.price;
|
|
1691
|
+
if (a.businessPremierFare.price < cheapestOutbound)
|
|
1692
|
+
cheapestOutbound = a.businessPremierFare.price;
|
|
1693
|
+
});
|
|
1694
|
+
const inbound = this.fullResults[0].inbound;
|
|
1695
|
+
let cheapestinbound;
|
|
1696
|
+
if (inbound) {
|
|
1697
|
+
inbound.forEach(a => {
|
|
1698
|
+
if (!cheapestinbound || a.standardFare.price < cheapestinbound)
|
|
1699
|
+
cheapestinbound = a.standardFare.price;
|
|
1700
|
+
if (a.standardPremierFare.price < cheapestinbound)
|
|
1701
|
+
cheapestinbound = a.standardPremierFare.price;
|
|
1702
|
+
if (a.businessPremierFare.price < cheapestinbound)
|
|
1703
|
+
cheapestinbound = a.businessPremierFare.price;
|
|
1704
|
+
});
|
|
1705
|
+
}
|
|
1706
|
+
else
|
|
1707
|
+
cheapestinbound = 0;
|
|
1708
|
+
return { amount: cheapestOutbound + cheapestinbound, currencyCode: currency };
|
|
1709
|
+
}
|
|
1379
1710
|
makeSchemaFlights(selectedFlight, flightGroup, groupIndex, segmentIndex) {
|
|
1380
1711
|
return Object.assign(Object.assign({}, selectedFlight), { journeyInfo: {
|
|
1381
1712
|
flightGroup,
|
|
@@ -1684,4 +2015,4 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1684
2015
|
}
|
|
1685
2016
|
EurostarEnterpriseSearch.STORAGE_SESSION_PARAMS = 'search_eurostar';
|
|
1686
2017
|
EurostarEnterpriseSearch.STORAGE_SESSION_RESULTS = 'results_eurostar';
|
|
1687
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVyb3N0YXItZW50ZXJwcmlzZS1zZWFyY2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vYnRzZXJ2aWNlcy9iYXNlL3NyYy9saWIvdmVuZG9yL2NsYXNzZXMvZXVyb3N0YXItZW50ZXJwcmlzZS1zZWFyY2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUl6RCxPQUFPLEVBQUUsZUFBZSxFQUE2QixNQUFNLE1BQU0sQ0FBQztBQUlsRSxPQUFPLEVBS0wsUUFBUSxFQUNSLGdCQUFnQixFQUtoQixtQkFBbUIsRUFFbkIsV0FBVyxFQUlaLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUtMLG1CQUFtQixFQWNuQiw0QkFBNEIsRUFDN0IsTUFBTSxnQkFBZ0IsQ0FBQztBQU94QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQWNqRSxPQUFPLEVBSUwsVUFBVSxFQUNYLE1BQU0sNEJBQTRCLENBQUM7QUFHcEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWhELE1BQU0sZUFBZSxHQUFrQixNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ25ELEtBQUssRUFBRSxFQUFFO0lBQ1QsVUFBVSxFQUFFLEVBQUU7SUFDZCxXQUFXLEVBQUUsRUFBRTtJQUNmLE9BQU8sRUFBRSxFQUFFO0lBQ1gsUUFBUSxFQUFFLEVBQUU7SUFDWixZQUFZLEVBQUUsRUFBRTtJQUNoQixlQUFlLEVBQUUsRUFBRTtJQUNuQixxQkFBcUIsRUFBRSxFQUFFO0lBQ3pCLGNBQWMsRUFBRSxFQUFFO0lBQ2xCLG9CQUFvQixFQUFFLEVBQUU7SUFDeEIsT0FBTyxFQUFFLEVBQUU7SUFDWCxTQUFTLEVBQUUsRUFBRTtJQUNiLEtBQUssRUFBRTtR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QUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztRQUM5QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUN6RCxPQUFPLENBQUMsQ0FBQyxDQUF1QixDQUNqQyxDQUFDO1FBQ0YsYUFBYSxDQUFDLFNBQVMsQ0FDckIsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNQLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLEVBQUU7Z0JBQ2hFLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDdEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhO2dCQUM5QixFQUFFLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsa0JBQWtCO2FBQ25ELENBQUMsQ0FBQztRQUNMLENBQUMsRUFDRCxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQixDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7O0FBenJFZSwrQ0FBc0IsR0FBRyxpQkFBaUIsQ0FBQztBQUMzQyxnREFBdUIsR0FBRyxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgQmFzZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuL2Jhc2UtZW50ZXJwcmlzZSc7XHJcbmltcG9ydCB7IEJhc2VTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VIZWxwZXJSb3V0aW5lcyB9IGZyb20gJy4vaGVscGVycyc7XHJcbmltcG9ydCB7IFRyYXZlbGxlciB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFZhbHVlRGlzcGxheSB9IGZyb20gJy4uL2ludGVyZmFjZXMvdmFsdWUtZGlzcGxheSc7XHJcbmltcG9ydCB7IEZsaWdodEZpbHRlcnMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2ZsaWdodC1maWx0ZXJzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFNlbGVjdEZpbHRlciB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2VsZWN0LWZpbHRlci5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1xyXG4gIEFkZEl0ZW1Ub0Jhc2tldE11dGF0aW9uVmFyaWFibGVzLFxyXG4gIEJhc2tldEl0ZW0sXHJcbiAgQ3VycmVuY3lDb2RlLFxyXG4gIERlc3RpbmF0aW9uRW50cnksXHJcbiAgRmFyZVR5cGUsXHJcbiAgRmxpZ2h0Q2FiaW5DbGFzcyxcclxuICBGbGlnaHRGYXJlVG90YWwsXHJcbiAgRmxpZ2h0SXRpbmVyYXJ5LFxyXG4gIEZsaWdodEpvdXJuZXksXHJcbiAgRmxpZ2h0UGFzc2VuZ2VyT2JqZWN0LFxyXG4gIEZsaWdodFBhc3NlbmdlclR5cGUsXHJcbiAgU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMsXHJcbiAgU2VydmljZVR5cGUsXHJcbiAgU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzLFxyXG4gIElucHV0RmxpZ2h0Sm91cm5leSxcclxuICBTZWFyY2hFdXJvc3RhclF1ZXJ5VmFyaWFibGVzXHJcbn0gZnJvbSAnLi4vdHlwZXMvZ3JhcGhxbC50eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgRXVyb3N0YXJRdW90ZVJlc3VsdCxcclxuICBOZ2JEYXRlU3RydWN0LFxyXG4gIE9CVEFpcnBvcnREZXRhaWxzLFxyXG4gIE9CVEFpcmxpbmVzRGV0YWlscyxcclxuICBGbGlnaHREaXJlY3Rpb25FbnVtLFxyXG4gIEdyb3VwZWRGbGlnaHRzLFxyXG4gIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxyXG4gIFJlY2VudFNlYXJjaCxcclxuICBFdXJvc3Rhckdyb3VwZWRRdW90ZVJlc3VsdCxcclxuICBFdXJvc3RhclJlc3VsdHMsXHJcbiAgRXVyb3N0YXJJdGVtLFxyXG4gIEV1cm9zdGFyRmFyZSxcclxuICBFdXJvc3RhckNsYXNzRW51bSxcclxuICBFdXJvc3RhclF1b3RlUmVzdWx0QXJyYXksXHJcbiAgTWluTWF4LFxyXG4gIEZsaWdodEFsbFF1b3RlUmVzdWx0LFxyXG4gIEZsaWdodFF1b3RlUmVzdWx0QXJyYXksXHJcbiAgU2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdCxcclxuICBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zXHJcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEZ1bGxVc2VyRGV0YWlscyxcclxuICBVc2VyU2VydmljZUludGVyZmFjZVxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSXVzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJQ2hlYXBlc3RQcmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hlYXBlc3QtcHJpY2UnO1xyXG5pbXBvcnQgeyBFdXJvc3RhclNlYXJjaFR5cGUgfSBmcm9tICcuL2V1cm9zdGFyLXNlYXJjaC10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBJTXVsdGlEZXN0aW5hdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvZmxpZ2h0LW11bHRpLWRlc3RpbmF0aW9uLmludGVyZmFjZSc7XHJcbmltcG9ydCB7XHJcbiAgRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2VcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0llbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBCYXNlRXVyb3N0YXJRdW90ZUZldGNoZXIsXHJcbiAgRXVyb3N0YXJRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZXVyb3N0YXItcXVvdGUuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgRXVyb3N0YXJFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlLFxyXG4gIEV1cm9zdGFyVGVtcFBhcmFtc1xyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWV1cm9zdGFyLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHtcclxuICBBbGxvd2VkQ2xhc3NlcyxcclxuICBGbGlnaHRPcGVyYXRvcixcclxuICBGbGlnaHRTb3J0VHlwZXMsXHJcbiAgVGltZVdpbmRvd1xyXG59IGZyb20gJy4vZmxpZ2h0LWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgSUV1cm9zdGFyU2VhcmNoQXJncyB9IGZyb20gJy4uL2ludGVyZmFjZXMvZXVyb3N0YXItc2VhcmNoLWFyZy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBCYXNlTW9kYWxPcGVuZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kYWwtb3BlbmVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNb2RhbFR5cGVzIH0gZnJvbSAnLi9tb2RhbC10eXBlcy5lbnVtJztcclxuXHJcbmNvbnN0IERFRkFVTFRfRklMVEVSUzogRmxpZ2h0RmlsdGVycyA9IE9iamVjdC5mcmVlemUoe1xyXG4gIHN0b3BzOiB7fSxcclxuICB0b3RhbFN0b3BzOiB7fSxcclxuICBtdXN0SW5jbHVkZToge30sXHJcbiAgY2xhc3Nlczoge30sXHJcbiAgYWlybGluZXM6IHt9LFxyXG4gIHRyYXZlbFBvbGljeToge30sXHJcbiAgZGVwYXR1cmVBaXJwb3J0OiB7fSxcclxuICBkZXBhdHVyZVJldHVybkFpcnBvcnQ6IHt9LFxyXG4gIGFycml2YWxBaXJwb3J0OiB7fSxcclxuICBhcnJpdmFsUmV0dXJuQWlycG9ydDoge30sXHJcbiAgYmFnZ2FnZToge30sXHJcbiAgZmFyZVR5cGVzOiB7fSxcclxuICBwcmljZToge1xyXG4gICAgbWluOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcclxuICAgIG1heDogTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVJcclxuICB9LFxyXG4gIGR1cmF0aW9uOiB7XHJcbiAgICBtaW46IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLFxyXG4gICAgbWF4OiBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUlxyXG4gIH0sXHJcbiAgcmV0dXJuRHVyYXRpb246IHtcclxuICAgIG1pbjogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXHJcbiAgICBtYXg6IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSXHJcbiAgfSxcclxuICBkZXBhcnR1cmVUaW1lOiB7XHJcbiAgICBtaW46IDAsXHJcbiAgICBtYXg6IDIzNTlcclxuICB9LFxyXG4gIGFycml2YWxUaW1lOiB7XHJcbiAgICBtaW46IDAsXHJcbiAgICBtYXg6IDIzNTlcclxuICB9LFxyXG4gIHJldHVybkRlcGFydHVyZVRpbWU6IHtcclxuICAgIG1pbjogMCxcclxuICAgIG1heDogMjM1OVxyXG4gIH0sXHJcbiAgcmV0dXJuQXJyaXZhbFRpbWU6IHtcclxuICAgIG1pbjogMCxcclxuICAgIG1heDogMjM1OVxyXG4gIH0sXHJcblxyXG4gIGZsaWdodE51bWJlcjogJydcclxufSkgYXMgRmxpZ2h0RmlsdGVycztcclxuXHJcbmV4cG9ydCB0eXBlIEV1cm9zdGFyU3RhdGlvbiA9IHtcclxuICBnYXRld2F5OiBzdHJpbmc7XHJcbiAgZGVzdGluYXRpb246IHN0cmluZztcclxufTtcclxuXHJcbmV4cG9ydCBlbnVtIFNvcnRUeXBlc0V1cm9zdGFyIHtcclxuICBDaGVhcGVzdEZpcnN0ID0gJ0MnLFxyXG4gIEVhcmxpZXN0Rmlyc3QgPSAnRScsXHJcbiAgTGF0ZXN0Rmlyc3QgPSAnTCdcclxufVxyXG5cclxuZXhwb3J0IGVudW0gU29ydE1ldGhvZCB7XHJcbiAgc29ydEJ5UHJpY2UgPSAnc29ydEJ5UHJpY2UnLFxyXG4gIHNvcnRCeURhdGUgPSAnc29ydEJ5RGF0ZSdcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTb3J0VHlwZUV1cm9zdGFyIHtcclxuICAvKiogVGl0bGUgZGlzcGxheWVkIG9uIGRyb3Bkb3duICovXHJcbiAgdGl0bGU6IHN0cmluZztcclxuICAvKiogTWV0aG9kIG5hbWUgdXNlZCBieSBjb21wb25lbnQgdG8gc29ydCByZXN1bHRzICovXHJcbiAgbWV0aG9kOiBTb3J0TWV0aG9kO1xyXG4gIC8qKiBJY29uIGRpc3BsYXllZCBvbiBkcm9wIGRvd24gKi9cclxuICBpY29uOiBzdHJpbmc7XHJcbiAgLyoqIFNvcnRpbmcgZGlyZWN0aW9uIHRydWUgZm9yIGFzYywgZmFsc2UgZm9yIGRzYyAqL1xyXG4gIGRpcjogYm9vbGVhbjtcclxuICAvLyB0aGlzIGlzIHdoYXQgd2Ugd2lsbCB1c2UgdG8gc29ydFxyXG4gIGNvZGU6IFNvcnRUeXBlc0V1cm9zdGFyO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBFdXJvc3Rhckdyb3VwcyA9ICdTdGFuZGFyZCcgfCAnU3RhbmRhcmRQcmVtaWVyJyB8ICdCdXNpbmVzc1ByZW1pZXInO1xyXG5cclxuaW50ZXJmYWNlIEV1cm9zdGFyU2Vzc2lvblR5cGUge1xyXG4gIHJlc3VsdHM6IEV1cm9zdGFyUXVvdGVSZXN1bHRBcnJheTtcclxuICBncm91cERhdGE6IHsgW2tleTogbnVtYmVyXTogbnVtYmVyW10gfTtcclxuICBncm91cGVkOiBHcm91cGVkRmxpZ2h0cztcclxuICBxdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXM7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBFdXJvc3RhckVudGVycHJpc2VTZWFyY2g8U0VfUSBleHRlbmRzIEV1cm9zdGFyUXVvdGVGZXRjaGVyVHlwZT5cclxuICBleHRlbmRzIEJhc2VFbnRlcnByaXNlU2VhcmNoPFxyXG4gICAgRXVyb3N0YXJUZW1wUGFyYW1zLFxyXG4gICAgRXVyb3N0YXJRdW90ZVJlc3VsdCxcclxuICAgIEV1cm9zdGFyUXVvdGVSZXN1bHRBcnJheVxyXG4gID5cclxuICBpbXBsZW1lbnRzIEV1cm9zdGFyRW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZVxyXG57XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9QQVJBTVMgPSAnc2VhcmNoX2V1cm9zdGFyJztcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFMgPSAncmVzdWx0c19ldXJvc3Rhcic7XHJcblxyXG4gIHB1YmxpYyB0eXBlOiBTZXJ2aWNlVHlwZSA9IFNlcnZpY2VUeXBlLkV1cm9zdGFyO1xyXG5cclxuICBhdmFsaWFibGVDbGFzc2VzOiBCZWhhdmlvclN1YmplY3Q8QWxsb3dlZENsYXNzZXM+ID1cclxuICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8QWxsb3dlZENsYXNzZXM+KFtdKTtcclxuICB0aW1lQ3JpdGVyaWFPcHRpb25zOiBCZWhhdmlvclN1YmplY3Q8VGltZVdpbmRvd1tdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XHJcbiAgICBUaW1lV2luZG93W11cclxuICA+KFtdKTtcclxuICBmbGlnaHRPcGVyYXRvcnM6IEJlaGF2aW9yU3ViamVjdDxGbGlnaHRPcGVyYXRvcltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XHJcbiAgICBGbGlnaHRPcGVyYXRvcltdXHJcbiAgPihbXSk7XHJcblxyXG4gIHByaXZhdGUgX25lZ290aWF0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9uZWFyYnlfYWlycG9ydHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfdGltZUFycmF5OiBWYWx1ZURpc3BsYXlbXTtcclxuICBwcml2YXRlIF9zb3J0QXJyYXk6IFNvcnRUeXBlRXVyb3N0YXJbXSA9IFtcclxuICAgIHtcclxuICAgICAgdGl0bGU6ICdQcmljZScsXHJcbiAgICAgIG1ldGhvZDogU29ydE1ldGhvZC5zb3J0QnlQcmljZSxcclxuICAgICAgaWNvbjogJ2ljby1kb2xsYXInLFxyXG4gICAgICBkaXI6IHRydWUsXHJcbiAgICAgIGNvZGU6IFNvcnRUeXBlc0V1cm9zdGFyLkNoZWFwZXN0Rmlyc3RcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHRpdGxlOiAnVGltZScsXHJcbiAgICAgIG1ldGhvZDogU29ydE1ldGhvZC5zb3J0QnlEYXRlLFxyXG4gICAgICBpY29uOiAnaWNvLWNhbGVuZGFyJyxcclxuICAgICAgZGlyOiB0cnVlLFxyXG4gICAgICBjb2RlOiBTb3J0VHlwZXNFdXJvc3Rhci5FYXJsaWVzdEZpcnN0XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0aXRsZTogJ1RpbWUgKERlc2NlbmRpbmcpJyxcclxuICAgICAgbWV0aG9kOiBTb3J0TWV0aG9kLnNvcnRCeURhdGUsXHJcbiAgICAgIGljb246ICdpY28tY2FsZW5kYXInLFxyXG4gICAgICBkaXI6IHRydWUsXHJcbiAgICAgIGNvZGU6IFNvcnRUeXBlc0V1cm9zdGFyLkxhdGVzdEZpcnN0XHJcbiAgICB9XHJcbiAgXTtcclxuXHJcbiAgcHJpdmF0ZSBfc29ydEFycmF5THU6IFNvcnRUeXBlRXVyb3N0YXJbXSA9IFtcclxuICAgIHtcclxuICAgICAgdGl0bGU6ICdQcmljZScsXHJcbiAgICAgIG1ldGhvZDogU29ydE1ldGhvZC5zb3J0QnlQcmljZSxcclxuICAgICAgaWNvbjogJ2ljby1kb2xsYXInLFxyXG4gICAgICBkaXI6IHRydWUsXHJcbiAgICAgIGNvZGU6IFNvcnRUeXBlc0V1cm9zdGFyLkNoZWFwZXN0Rmlyc3RcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHRpdGxlOiAnVGltZScsXHJcbiAgICAgIG1ldGhvZDogU29ydE1ldGhvZC5zb3J0QnlEYXRlLFxyXG4gICAgICBpY29uOiAnaWNvLWNhbGVuZGFyJyxcclxuICAgICAgZGlyOiB0cnVlLFxyXG4gICAgICBjb2RlOiBTb3J0VHlwZXNFdXJvc3Rhci5FYXJsaWVzdEZpcnN0XHJcbiAgICB9XHJcbiAgXTtcclxuXHJcbiAgcHJpdmF0ZSBfZmFyZVR5cGVBcnJheTogVmFsdWVEaXNwbGF5W10gPSBbXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5GbGV4aWJsZSwgZGlzcGxheTogJ0ZsZXhpYmxlJyB9LFxyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuTGVpc3VyZSwgZGlzcGxheTogJ0xlaXN1cmUnIH0sXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5Mb3dlc3QsIGRpc3BsYXk6ICdMb3dlc3QnIH0sXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5OZWdvdGlhdGVkLCBkaXNwbGF5OiAnTmVnb3RpYXRlZCcgfSxcclxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLk5vbk5lZ290aWF0ZWQsIGRpc3BsYXk6ICdOb24tTmVnb3RpYXRlZCcgfSxcclxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLlJlcXVlc3RGYXJlUnVsZXMsIGRpc3BsYXk6ICdSZXF1ZXN0IEZhcmUgUnVsZXMnIH0sXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5TZWxlY3RBbmRQcm8sIGRpc3BsYXk6ICdTZWxlY3QgJiBQcm8nIH1cclxuICBdO1xyXG5cclxuICBwdWJsaWMgbWluaW11bU91dEJvdW5kRGF0ZSA9IHtcclxuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKSxcclxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcclxuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpXHJcbiAgfTtcclxuXHJcbiAgcHVibGljIG1pbmltdW1JbkJvdW5kRGF0ZSA9IHtcclxuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKSxcclxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcclxuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpXHJcbiAgfTtcclxuXHJcbiAgcHVibGljIHNlYXJjaFR5cGVzOiBWYWx1ZURpc3BsYXlbXSA9IFtcclxuICAgIHsgdmFsdWU6IEV1cm9zdGFyU2VhcmNoVHlwZS5yZXR1cm4sIGRpc3BsYXk6ICdSZXR1cm4nIH0sXHJcbiAgICB7IHZhbHVlOiBFdXJvc3RhclNlYXJjaFR5cGUub25lV2F5LCBkaXNwbGF5OiAnT25lLXdheScgfVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgX291dERhdGU6IE5nYkRhdGVTdHJ1Y3Q7XHJcbiAgcHJpdmF0ZSBfb3V0VGltZTogc3RyaW5nO1xyXG4gIHByaXZhdGUgX2luRGF0ZTogTmdiRGF0ZVN0cnVjdDtcclxuICBwcml2YXRlIF9pblRpbWU6IHN0cmluZztcclxuICBwcml2YXRlIF9kZXN0aW5hdGlvbkFpcnBvcnQ6IGFueTtcclxuICBwcml2YXRlIF9vcmlnaW5BaXJwb3J0OiBhbnk7XHJcbiAgcHJpdmF0ZSBfcGFzc2VuZ2VyczogYW55O1xyXG4gIHByaXZhdGUgZ3JvdXBlZE9iamVjdDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNbXTtcclxuICBwcm90ZWN0ZWQgZmxpZ2h0c1RvR3JvdXA6IHsgW2tleTogbnVtYmVyXTogbnVtYmVyW10gfSA9IHt9O1xyXG4gIHByb3RlY3RlZCByZXN1bHRRdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXM7XHJcbiAgcHJvdGVjdGVkIGdyb3VwZWQ6IEdyb3VwZWRGbGlnaHRzID0gbnVsbDtcclxuICB0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSA9IG51bGw7XHJcbiAgcHJvdGVjdGVkIHJlc3VsdHNTZXNzaW9uTmFtZSA9XHJcbiAgICBFdXJvc3RhckVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XHJcbiAgcHJvdGVjdGVkIG11bHRpUmVzdWx0c1Nlc3Npb25OYW1lID1cclxuICAgIEV1cm9zdGFyRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuXHJcbiAgc2VsZWN0ZWRHcm91cEZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnM7XHJcbiAgcHJpdmF0ZSBfZGlzcGxheUFkZEhvdGVsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZmlsdGVyczogQmVoYXZpb3JTdWJqZWN0PEZsaWdodEZpbHRlcnM+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChcclxuICAgIERFRkFVTFRfRklMVEVSU1xyXG4gICk7XHJcblxyXG4gIHB1YmxpYyBnZXQgZGlzcGxheUFkZEhvdGVsKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlBZGRIb3RlbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZGlzcGxheUFkZEhvdGVsKG5ld1ZhbDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZGlzcGxheUFkZEhvdGVsID0gbmV3VmFsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZWxlY3RlZEdyb3VwRXVyb3N0YXI6IHtcclxuICAgIGl0ZW06IEV1cm9zdGFySXRlbTtcclxuICAgIGRpcmVjdGlvbjogRmxpZ2h0RGlyZWN0aW9uRW51bTtcclxuICB9ID0ge1xyXG4gICAgaXRlbTogbnVsbCxcclxuICAgIGRpcmVjdGlvbjogbnVsbFxyXG4gIH07XHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRFdXJvc3RhckZhcmU6IHtcclxuICAgIGl0ZW06IEV1cm9zdGFyRmFyZTtcclxuICAgIGRpcmVjdGlvbjogRmxpZ2h0RGlyZWN0aW9uRW51bTtcclxuICB9ID0ge1xyXG4gICAgaXRlbTogbnVsbCxcclxuICAgIGRpcmVjdGlvbjogbnVsbFxyXG4gIH07XHJcblxyXG4gIGdldCBzZWxlY3RlZEV1cm9zdGFyRmFyZSgpOiBFdXJvc3RhckZhcmUge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkRXVyb3N0YXJGYXJlLml0ZW07XHJcbiAgfVxyXG4gIGdldCBzZWxlY3RlZEZhcmVDbGFzcygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkRXVyb3N0YXJGYXJlPy5pdGVtPy5jbGFzcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdGltZUFycmF5KCkge1xyXG4gICAgdGhpcy5fdGltZUFycmF5ID1cclxuICAgICAgdGhpcy5fdGltZUFycmF5IHx8XHJcbiAgICAgIEFycmF5KDk2KVxyXG4gICAgICAgIC5maWxsKDApXHJcbiAgICAgICAgLm1hcCgoXywgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmFsdWU6XHJcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcihpbmRleCAvIDQpXHJcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgLnBhZFN0YXJ0KDIsICcwJykgK1xyXG4gICAgICAgICAgICAgICc6JyArXHJcbiAgICAgICAgICAgICAgKChpbmRleCAlIDQpICogMTUpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSxcclxuICAgICAgICAgICAgZGlzcGxheTpcclxuICAgICAgICAgICAgICBNYXRoLmZsb29yKGluZGV4IC8gNClcclxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAucGFkU3RhcnQoMiwgJzAnKSArXHJcbiAgICAgICAgICAgICAgJzonICtcclxuICAgICAgICAgICAgICAoKGluZGV4ICUgNCkgKiAxNSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgcmV0dXJuIHRoaXMuX3RpbWVBcnJheTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcHJlZmVycmVkQ2FycmllcnMoKTogT0JUQWlybGluZXNEZXRhaWxzW10ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVycztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgcHJlZmVycmVkQ2FycmllcnModmFsdWU6IE9CVEFpcmxpbmVzRGV0YWlsc1tdKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnMgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgb3BlcmF0b3IxKCk6IE9CVEFpcmxpbmVzRGV0YWlscyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzBdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBvcGVyYXRvcjEodmFsdWU6IE9CVEFpcmxpbmVzRGV0YWlscykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzBdID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgb3BlcmF0b3IyKCk6IE9CVEFpcmxpbmVzRGV0YWlscyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzFdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBvcGVyYXRvcjIodmFsdWU6IE9CVEFpcmxpbmVzRGV0YWlscykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzFdID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgb3BlcmF0b3IzKCk6IE9CVEFpcmxpbmVzRGV0YWlscyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzJdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBvcGVyYXRvcjModmFsdWU6IE9CVEFpcmxpbmVzRGV0YWlscykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzJdID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgb3BlcmF0b3I0KCk6IE9CVEFpcmxpbmVzRGV0YWlscyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzNdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBvcGVyYXRvcjQodmFsdWU6IE9CVEFpcmxpbmVzRGV0YWlscykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzNdID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9taW5EYXRlOiBOZ2JEYXRlU3RydWN0O1xyXG4gIHB1YmxpYyBnZXQgbWluRGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHRoaXMuX21pbkRhdGUgPSB0aGlzLl9taW5EYXRlIHx8IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZShtb21lbnQoKSk7XHJcbiAgICByZXR1cm4gdGhpcy5fbWluRGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYWR1bHRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFkdWx0cztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgYWR1bHRzKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5hZHVsdHMgPSBOdW1iZXIodmFsdWUpO1xyXG4gICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNoaWxkcmVuKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBjaGlsZHJlbih2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPSBOdW1iZXIodmFsdWUpO1xyXG4gICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRlcGFydExvY2F0aW9uKCk6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZGVwYXJ0TG9jYXRpb247XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGRlcGFydExvY2F0aW9uKHZhbHVlOiBzdHJpbmcgfCBPQlRBaXJwb3J0RGV0YWlscykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmRlcGFydExvY2F0aW9uID0gdmFsdWU7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICB0aGlzLl9vcmlnaW5BaXJwb3J0ID0gJyc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlICYmIHZhbHVlLmdhdGV3YXkpIHtcclxuICAgICAgdGhpcy5fb3JpZ2luQWlycG9ydCA9IHZhbHVlLmdhdGV3YXk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9vcmlnaW5BaXJwb3J0ID0gbnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcXVlcnlPcmlnaW5BaXBvcnQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9vcmlnaW5BaXJwb3J0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBxdWVyeURlc3RpbmF0aW9uQWlwb3J0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBkZXBhcnREYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dERhdGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGRlcGFydERhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcclxuICAgIHRoaXMuX291dERhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMub3V0Qm91bmREYXRlID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KFxyXG4gICAgICB0aGlzLl9vdXREYXRlLFxyXG4gICAgICB0aGlzLl9vdXRUaW1lXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBkZXBhcnRUaW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0VGltZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZGVwYXJ0VGltZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9vdXRUaW1lID0gdmFsdWU7XHJcbiAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgdGhpcy5fb3V0RGF0ZSxcclxuICAgICAgdGhpcy5fb3V0VGltZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgb3V0Qm91bmREYXRlKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG91dEJvdW5kRGF0ZSh2YWx1ZTogbW9tZW50Lk1vbWVudCkge1xyXG4gICAgdmFsdWUgPSBtb21lbnQodmFsdWUpO1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZSA9IHZhbHVlLmlzVmFsaWQoKSA/IHZhbHVlIDogbnVsbDtcclxuICAgIHRoaXMubWluaW11bUluQm91bmREYXRlID0ge1xyXG4gICAgICB5ZWFyOiB2YWx1ZS55ZWFyKCksXHJcbiAgICAgIG1vbnRoOiB2YWx1ZS5tb250aCgpICsgMSxcclxuICAgICAgZGF5OiB2YWx1ZS5kYXRlKClcclxuICAgIH07XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlICYmXHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSAmJlxyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlLmlzQWZ0ZXIodGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuaW5ib3VuZERhdGUgPSBtb21lbnQodGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZSkuYWRkKDEsICdkYXknKTtcclxuICAgIH1cclxuICAgIHRoaXMuX291dERhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUodmFsdWUpO1xyXG4gICAgdGhpcy5fb3V0VGltZSA9IHRoaXMuaGVscGVycy5mb3JtYXRUaW1lQ29sb24odmFsdWUpO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCByZXR1cm5EYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX2luRGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgcmV0dXJuRGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5faW5EYXRlID0gdmFsdWU7XHJcbiAgICB0aGlzLmluYm91bmREYXRlID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KHRoaXMuX2luRGF0ZSwgdGhpcy5faW5UaW1lKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYXJyaXZlVGltZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2luVGltZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgYXJyaXZlVGltZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9pblRpbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQodGhpcy5faW5EYXRlLCB0aGlzLl9pblRpbWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBpbmJvdW5kRGF0ZSgpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGluYm91bmREYXRlKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB2YWx1ZSA9IG1vbWVudCh2YWx1ZSk7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGUgPSB2YWx1ZS5pc1ZhbGlkKCkgPyB2YWx1ZSA6IG51bGw7XHJcbiAgICB0aGlzLl9pbkRhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUodmFsdWUpO1xyXG4gICAgdGhpcy5faW5UaW1lID0gdGhpcy5oZWxwZXJzLmZvcm1hdFRpbWVDb2xvbih2YWx1ZSk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFycml2ZUxvY2F0aW9uKCk6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYXJyaXZlTG9jYXRpb247XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGFycml2ZUxvY2F0aW9uKHZhbHVlOiBzdHJpbmcgfCBPQlRBaXJwb3J0RGV0YWlscykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFycml2ZUxvY2F0aW9uID0gdmFsdWU7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQgPSAnJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgdmFsdWUuZ2F0ZXdheSkge1xyXG4gICAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQgPSB2YWx1ZS5nYXRld2F5O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0ID0gbnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBjYWJpbkNsYXNzKCk6IEZsaWdodENhYmluQ2xhc3MgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzcztcclxuICB9XHJcblxyXG4gIHNldCBjYWJpbkNsYXNzKHZhbHVlOiBGbGlnaHRDYWJpbkNsYXNzIHwgbnVsbCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNhYmluQ2xhc3MgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCByZXR1cm5DYWJpbkNsYXNzKCk6IEZsaWdodENhYmluQ2xhc3MgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzcztcclxuICB9XHJcblxyXG4gIHNldCByZXR1cm5DYWJpbkNsYXNzKHZhbHVlOiBGbGlnaHRDYWJpbkNsYXNzIHwgbnVsbCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnJldHVybkNhYmluQ2xhc3MgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBjaG9zZW5TZWFyY2hUeXBlKCk6IEV1cm9zdGFyU2VhcmNoVHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGU7XHJcbiAgfVxyXG5cclxuICBzZXQgY2hvc2VuU2VhcmNoVHlwZSh0eXBlOiBFdXJvc3RhclNlYXJjaFR5cGUpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID0gdHlwZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBpc1JldHVybigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9PT0gRXVyb3N0YXJTZWFyY2hUeXBlLnJldHVybjtcclxuICB9XHJcblxyXG4gIGdldCBvdXRUaW1lQ3JpdGVyaWEoKTogVGltZVdpbmRvdyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm91dFRpbWVDcml0ZXJpYTtcclxuICB9XHJcblxyXG4gIHNldCBvdXRUaW1lQ3JpdGVyaWEodmFsdWU6IFRpbWVXaW5kb3cpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lQ3JpdGVyaWEgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBpblRpbWVDcml0ZXJpYSgpOiBUaW1lV2luZG93IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaW5UaW1lQ3JpdGVyaWE7XHJcbiAgfVxyXG5cclxuICBzZXQgaW5UaW1lQ3JpdGVyaWEodmFsdWU6IFRpbWVXaW5kb3cpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYSA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuICBnZXQgbWF4Q29ubmVjdGlvbnMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMubWF4Q29ubmVjdGlvbnM7XHJcbiAgfVxyXG5cclxuICBzZXQgbWF4Q29ubmVjdGlvbnModmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm1heENvbm5lY3Rpb25zID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9tdWx0aURlc3RpbmF0aW9uOiBEZXN0aW5hdGlvbkVudHJ5W10gPSBbXTtcclxuICBnZXQgbXVsdGlEZXN0aW5hdGlvbigpOiBJTXVsdGlEZXN0aW5hdGlvbltdIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMubXVsdGlEZXN0aW5hdGlvbjtcclxuICB9XHJcblxyXG4gIHNldCBtdWx0aURlc3RpbmF0aW9uKHZhbHVlQXJyYXk6IElNdWx0aURlc3RpbmF0aW9uW10pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uID0gdmFsdWVBcnJheTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHNldE11bHRpRGVzdGluYXRpb25RdWVyeShtdWx0aURlc3RpbmF0aW9uOiBJTXVsdGlEZXN0aW5hdGlvbltdKSB7XHJcbiAgICBjb25zdCBuZXdNdWx0aURlc3RpbmF0aW9uID0gdGhpcy5oZWxwZXJzLmNsb25lKG11bHRpRGVzdGluYXRpb24pO1xyXG4gICAgcmV0dXJuIG5ld011bHRpRGVzdGluYXRpb24ucmVkdWNlKFxyXG4gICAgICAoZGVzdGluYXRpb25BcnJheTogRGVzdGluYXRpb25FbnRyeVtdLCBpdGVtOiBJTXVsdGlEZXN0aW5hdGlvbikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uT2JqZWN0ID0ge30gYXMgRGVzdGluYXRpb25FbnRyeTtcclxuICAgICAgICBkZXN0aW5hdGlvbk9iamVjdC5vcmlnID0gaXRlbS5vcmlnLmdhdGV3YXk7XHJcbiAgICAgICAgZGVzdGluYXRpb25PYmplY3QuZGVzdCA9IGl0ZW0uZGVzdC5nYXRld2F5O1xyXG4gICAgICAgIGRlc3RpbmF0aW9uT2JqZWN0LmRhdGUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0SXNvRGF0ZShpdGVtLmRhdGUpO1xyXG4gICAgICAgIGRlc3RpbmF0aW9uQXJyYXkucHVzaChkZXN0aW5hdGlvbk9iamVjdCk7XHJcbiAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uQXJyYXk7XHJcbiAgICAgIH0sXHJcbiAgICAgIFtdIGFzIERlc3RpbmF0aW9uRW50cnlbXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIGdldCBvbmx5XHJcbiAgZ2V0IHNvcnREcm9wZG93blZhbHVlcygpOiBTb3J0VHlwZUV1cm9zdGFyW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NvcnRBcnJheTtcclxuICB9XHJcblxyXG4gIGdldCBzb3J0RHJvcGRvd25WYWx1ZXNMdSgpOiBTb3J0VHlwZUV1cm9zdGFyW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NvcnRBcnJheUx1O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZhcmVUeXBlc1ZhbHVlcygpOiBWYWx1ZURpc3BsYXlbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmFyZVR5cGVBcnJheTtcclxuICB9XHJcblxyXG4gIGdldCBmYXJlVHlwZSgpOiBGYXJlVHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmZhcmVUeXBlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGZhcmVUeXBlKHZhbHVlOiBGYXJlVHlwZSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmZhcmVUeXBlID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgbmVnb3RpYXRlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9uZWdvdGlhdGVkO1xyXG4gIH1cclxuXHJcbiAgc2V0IG5lZ290aWF0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX25lZ290aWF0ZWQgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBpbmNsdWRlTmVhcmJ5QWlycG9ydHMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmluY2x1ZGVOZWFyYnlBaXJwb3J0cztcclxuICB9XHJcblxyXG4gIHNldCBpbmNsdWRlTmVhcmJ5QWlycG9ydHModmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHMgPSB2YWx1ZTtcclxuICB9XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGV1cm9zdGFyRmV0Y2hlcjogQmFzZUV1cm9zdGFyUXVvdGVGZXRjaGVyPFNFX1E+LFxyXG4gICAgaGVscGVyczogQmFzZUhlbHBlclJvdXRpbmVzLFxyXG4gICAgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gICAgcHJpdmF0ZSBiYXNrZXRTZXJ2aWNlOiBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcclxuICAgIHN0b3JhZ2VTZXJ2aWNlOiBCYXNlU3RvcmFnZVNlcnZpY2UsXHJcbiAgICBzZWFyY2hTZXJ2aWNlOiBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSxcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCYXNlTW9kYWxPcGVuZXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihzdG9yYWdlU2VydmljZSwgaGVscGVycywgc2VhcmNoU2VydmljZSk7XHJcblxyXG4gICAgY29uc3QgZGF0YToge1xyXG4gICAgICB0ZW1wUGFyYW1zOiBFdXJvc3RhclRlbXBQYXJhbXM7XHJcbiAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogRXVyb3N0YXJUZW1wUGFyYW1zO1xyXG4gICAgfSA9IHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtKFxyXG4gICAgICBFdXJvc3RhckVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNU1xyXG4gICAgKSB8fCB7XHJcbiAgICAgIHRlbXBQYXJhbXM6IHt9IGFzIEV1cm9zdGFyVGVtcFBhcmFtcyxcclxuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB7fSBhcyBFdXJvc3RhclRlbXBQYXJhbXNcclxuICAgIH07XHJcbiAgICAvLyBkYXRhLnRlbXBQYXJhbXMuYWR1bHRzID0gMTtcclxuICAgIC8vIGRhdGEudGVtcFBhcmFtcy5jYWJpbkNsYXNzID0gW0ZsaWdodENhYmluQ2xhc3MuRWNvbm9teV07XHJcbiAgICBjb25zdCBxdWVyeSA9IHNlYXJjaFNlcnZpY2UubWFrZUV1cm9zdGFyUXVlcnkoZGF0YS50ZW1wUGFyYW1zKTtcclxuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyhxdWVyeSk7XHJcbiAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBkYXRhLm9yaWdpbmFsVXNlclNlYXJjaDtcclxuICAgIGlmIChzZWFyY2hTZXJ2aWNlLnNob3VsZEFkZFRyYXZlbGxlclN1YnNjcmlwdGlvbigpKSB7XHJcbiAgICAgIHNlYXJjaFNlcnZpY2UudHJhdmVsbGVySW5mb3JtYXRpb24uc3Vic2NyaWJlKFxyXG4gICAgICAgICh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsZXJzID0gdHJhdmVsbGVycztcclxuICAgICAgICAgIGNvbnN0IHNwbGl0VHJhdmVsbGVycyA9IHRoaXMuaGVscGVycy5zZWxlY3RlZFRyYXZlbGxlcnMoXHJcbiAgICAgICAgICAgIHRyYXZlbGxlcnMsXHJcbiAgICAgICAgICAgIFNlcnZpY2VUeXBlLkV1cm9zdGFyXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IHNwbGl0VHJhdmVsbGVycy5hZHVsdHMubGVuZ3RoO1xyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuID0gc3BsaXRUcmF2ZWxsZXJzLmNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICAgIC8vIHRoaXMudGVtcFBhcmFtcy5pbmZhbnRzID0gc3BsaXRUcmF2ZWxsZXJzLmluZmFudHMubGVuZ3RoO1xyXG5cclxuICAgICAgICAgIHRoaXMudXBkYXRlVHJhdmVsbGVycygpO1xyXG4gICAgICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB1c2VyU2VydmljZS5jaGFuZ2VVc2VyLnN1YnNjcmliZSgodXNlcjogRnVsbFVzZXJEZXRhaWxzKSA9PiB7XHJcbiAgICAgIHRoaXMudGltZUNyaXRlcmlhT3B0aW9ucy5uZXh0KFtcclxuICAgICAgICBUaW1lV2luZG93LkFueXRpbWUsXHJcbiAgICAgICAgVGltZVdpbmRvdy5BcnJpdmUsXHJcbiAgICAgICAgVGltZVdpbmRvdy5EZXBhcnRcclxuICAgICAgXSk7IC8vIFRPRE8gdXBkYXRlIHdpdGggYW55IFVGc1xyXG4gICAgICB0aGlzLnVwZGF0ZUF2YWxpYWJsZUNsYXNzZXMoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMudXBkYXRlVHJhdmVsbGVycygpO1xyXG4gICAgY29uc3QgcmVzdWx0czogRXVyb3N0YXJTZXNzaW9uVHlwZSA9IHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtKFxyXG4gICAgICB0aGlzLnJlc3VsdHNTZXNzaW9uTmFtZVxyXG4gICAgKSB8fCB7XHJcbiAgICAgIHJlc3VsdHM6IFtdLFxyXG4gICAgICBncm91cERhdGE6IHt9LFxyXG4gICAgICBncm91cGVkOiBbXSxcclxuICAgICAgcXVlcnk6IHt9IGFzIFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzXHJcbiAgICB9O1xyXG4gICAgdGhpcy5mdWxsUmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHRzLnJlc3VsdHMpO1xyXG4gICAgdGhpcy5mbGlnaHRzVG9Hcm91cCA9IHJlc3VsdHMuZ3JvdXBEYXRhIHx8IHt9O1xyXG4gICAgdGhpcy5yZXN1bHRRdWVyeSA9IHJlc3VsdHMucXVlcnk7XHJcbiAgICBjb25zdCBpc0ZsaWdodHNHcm91cGVkID0gdGhpcy5zZWFyY2hTZXJ2aWNlLmlzRmxpZ2h0c0dyb3VwZWQoKTtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KChyZXN1bHRzLnJlc3VsdHMgfHwgW10pIGFzIEV1cm9zdGFyUXVvdGVSZXN1bHRBcnJheSk7XHJcblxyXG4gICAgY29uc3QgcmVzdWx0c0Nsb25lOiBhbnkgPSB0aGlzLmhlbHBlcnMuY2xvbmUocmVzdWx0cy5yZXN1bHRzKTtcclxuICAgIC8vIGdldCBhcm91bmQgdGhlIGFubm95aW5nIHR5cGUgcmVzdHJpY3Rpb25zIC0gSSBLTk9XIEpPVVJORVlTIElTIFRIRVJFIEkgQ0FOIFNFRSBJVCBTVE9QIFRFTExJTkcgTUUgSVQgSVNOJ1QgVFlQRVNDUklQVCFcclxuICAgIGlmIChyZXN1bHRzQ2xvbmUubGVuZ3RoKVxyXG4gICAgICB0aGlzLmZpbHRlcnMubmV4dChcclxuICAgICAgICB0aGlzLmhlbHBlcnMuY3JlYXRlRmxpZ2h0RmlsdGVycyhcclxuICAgICAgICAgIHJlc3VsdHNDbG9uZVswXS5qb3VybmV5cyxcclxuICAgICAgICAgIERFRkFVTFRfRklMVEVSU1xyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICB0aGlzLm5lZ290aWF0ZWQgPVxyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMuZmFyZVR5cGUgPT09IEZhcmVUeXBlLk5lZ290aWF0ZWQgPyB0cnVlIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcHJvY2Vzc1Jlc3VsdHMoXHJcbiAgICByZXN1bHRzMTogRXVyb3N0YXJRdW90ZVJlc3VsdFxyXG4gICk6IEV1cm9zdGFyUXVvdGVSZXN1bHRBcnJheSB7XHJcbiAgICB0aGlzLnJlc3VsdFF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xyXG4gICAgZGVsZXRlIHRoaXMucmVzdWx0UXVlcnkud2l0aEdyb3VwZWQ7XHJcbiAgICB0aGlzLmZpbHRlcnMubmV4dChcclxuICAgICAgdGhpcy5oZWxwZXJzLmNyZWF0ZUZsaWdodEZpbHRlcnMocmVzdWx0czEuam91cm5leXMsIERFRkFVTFRfRklMVEVSUylcclxuICAgICk7XHJcbiAgICBpZiAocmVzdWx0czEgJiYgdGhpcy5zZWFyY2hTZXJ2aWNlLmlzRmxpZ2h0c0dyb3VwZWQoKSkge1xyXG4gICAgICBjb25zdCByZXR1cm5kYXRhID0gKHJlc3VsdHMxLmpvdXJuZXlzIHx8IFtdKS5yZWR1Y2UoXHJcbiAgICAgICAgKFxyXG4gICAgICAgICAgYWNjOiBFdXJvc3RhclJlc3VsdHMsXHJcbiAgICAgICAgICByZXN1bHQ6IEZsaWdodEl0aW5lcmFyeSxcclxuICAgICAgICAgIGluZGV4OiBudW1iZXJcclxuICAgICAgICApOiBFdXJvc3RhclJlc3VsdHMgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdC5vdXRib3VuZEZsaWdodHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGV1cm9SZXN1bHQgPSB0aGlzLmZvcm1hdEV1cm9zdGFyUmVzdWx0cyhcclxuICAgICAgICAgICAgICByZXN1bHQub3V0Ym91bmRGbGlnaHRzLFxyXG4gICAgICAgICAgICAgIHJlc3VsdC50b3RhbCxcclxuICAgICAgICAgICAgICBpbmRleFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBldXJvUmVzdWx0LmNvMlBlclBhc3NlbmdlciA9IHJlc3VsdC5jbzJQZXJQYXNzZW5nZXI7XHJcbiAgICAgICAgICAgIGV1cm9SZXN1bHQuY28yUGVySXRlbSA9IHJlc3VsdC5jbzJQZXJJdGVtO1xyXG4gICAgICAgICAgICBldXJvUmVzdWx0LnNvdXJjZUlkID0gcmVzdWx0LnNvdXJjZUlkO1xyXG4gICAgICAgICAgICBldXJvUmVzdWx0LnRvdGFsID0gcmVzdWx0LnRvdGFsO1xyXG4gICAgICAgICAgICBldXJvUmVzdWx0LmR1cmF0aW9uID0gdGhpcy5taW5Ub0hvdXIocmVzdWx0Lm91dGJvdW5kVG90YWxEdXJhdGlvbik7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGV1cm9SZXN1bHQuY2FiaW5DbGFzcyk7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAhYWNjLm91dGJvdW5kLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAoaXRlbTogRXVyb3N0YXJJdGVtKSA9PlxyXG4gICAgICAgICAgICAgICAgICBpdGVtLmRhdGVEZXBhcnR1cmUgPT09IGV1cm9SZXN1bHQuZGF0ZURlcGFydHVyZSAmJlxyXG4gICAgICAgICAgICAgICAgICBpdGVtLmNhYmluQ2xhc3MgPT09IGV1cm9SZXN1bHQuY2FiaW5DbGFzc1xyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgYWNjLm91dGJvdW5kLnB1c2goZXVyb1Jlc3VsdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAocmVzdWx0LmluYm91bmRGbGlnaHRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBldXJvUmVzdWx0ID0gdGhpcy5mb3JtYXRFdXJvc3RhclJlc3VsdHMoXHJcbiAgICAgICAgICAgICAgcmVzdWx0LmluYm91bmRGbGlnaHRzLFxyXG4gICAgICAgICAgICAgIHJlc3VsdC50b3RhbCxcclxuICAgICAgICAgICAgICBpbmRleFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBldXJvUmVzdWx0LmNvMlBlclBhc3NlbmdlciA9IHJlc3VsdC5jbzJQZXJQYXNzZW5nZXI7XHJcbiAgICAgICAgICAgIGV1cm9SZXN1bHQuY28yUGVySXRlbSA9IHJlc3VsdC5jbzJQZXJJdGVtO1xyXG4gICAgICAgICAgICBldXJvUmVzdWx0LnNvdXJjZUlkID0gcmVzdWx0LnNvdXJjZUlkO1xyXG4gICAgICAgICAgICBldXJvUmVzdWx0LnRvdGFsID0gcmVzdWx0LnRvdGFsO1xyXG4gICAgICAgICAgICBldXJvUmVzdWx0LmR1cmF0aW9uID0gdGhpcy5taW5Ub0hvdXIocmVzdWx0LmluYm91bmRUb3RhbER1cmF0aW9uKTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZXVyb1Jlc3VsdC5jYWJpbkNsYXNzKTtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICFhY2MuaW5ib3VuZC5maW5kKFxyXG4gICAgICAgICAgICAgICAgKGl0ZW06IEV1cm9zdGFySXRlbSkgPT5cclxuICAgICAgICAgICAgICAgICAgaXRlbS5kYXRlRGVwYXJ0dXJlID09PSBldXJvUmVzdWx0LmRhdGVEZXBhcnR1cmUgJiZcclxuICAgICAgICAgICAgICAgICAgaXRlbS5jYWJpbkNsYXNzID09PSBldXJvUmVzdWx0LmNhYmluQ2xhc3NcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIGFjYy5pbmJvdW5kLnB1c2goZXVyb1Jlc3VsdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB7IG91dGJvdW5kOiBbXSwgaW5ib3VuZDogW10gfSBhcyBFdXJvc3RhclJlc3VsdHNcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuZGF0YS5vdXRib3VuZCA9IHJldHVybmRhdGEub3V0Ym91bmQucmVkdWNlKFxyXG4gICAgICAgIHRoaXMubWF0Y2hGYXJlcy5iaW5kKHRoaXMpLFxyXG4gICAgICAgIFtdXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybmRhdGEuaW5ib3VuZCA9IHJldHVybmRhdGEuaW5ib3VuZC5yZWR1Y2UoXHJcbiAgICAgICAgdGhpcy5tYXRjaEZhcmVzLmJpbmQodGhpcyksXHJcbiAgICAgICAgW11cclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIFtyZXR1cm5kYXRhXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiByZXN1bHRzMSA/IFtyZXN1bHRzMV0gOiBbXTtcclxuICAgIH1cclxuICB9XHJcbiAgbWF0Y2hGYXJlcyhhY2M6IEV1cm9zdGFySXRlbVtdLCBvdXQ6IEV1cm9zdGFySXRlbSk6IEV1cm9zdGFySXRlbVtdIHtcclxuICAgIGNvbnN0IG1hdGNoaW5nRXVyb3N0YXIgPSBhY2MuZmluZChcclxuICAgICAgKGl0ZW0pID0+IGl0ZW0uZGF0ZURlcGFydHVyZSA9PT0gb3V0LmRhdGVEZXBhcnR1cmVcclxuICAgICk7XHJcbiAgICBpZiAoIW1hdGNoaW5nRXVyb3N0YXIpIHtcclxuICAgICAgYWNjLnB1c2gob3V0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGNoZWNrIHdoYXQgbmVlZHMgYWRkaW5nIGFuZCBhZGQgaXRcclxuICAgICAgc3dpdGNoIChvdXQuY2FiaW5DbGFzcykge1xyXG4gICAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215OlxyXG4gICAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215Tm9CYWdzOlxyXG4gICAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZDpcclxuICAgICAgICAgIG1hdGNoaW5nRXVyb3N0YXIuc3RhbmRhcmRGYXJlID0gb3V0LnN0YW5kYXJkRmFyZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1ByZW1pdW0nOlxyXG4gICAgICAgICAgbWF0Y2hpbmdFdXJvc3Rhci5zdGFuZGFyZFByZW1pZXJGYXJlID0gb3V0LnN0YW5kYXJkUHJlbWllckZhcmU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3M6XHJcbiAgICAgICAgICBtYXRjaGluZ0V1cm9zdGFyLmJ1c2luZXNzUHJlbWllckZhcmUgPSBvdXQuYnVzaW5lc3NQcmVtaWVyRmFyZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnaG93IGRpZCBJIGdldCBoZXJlJywgb3V0LmNhYmluQ2xhc3MpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhY2M7XHJcbiAgfVxyXG5cclxuICBmb3JtYXRFdXJvc3RhclJlc3VsdHMoXHJcbiAgICByZXN1bHRzOiBGbGlnaHRKb3VybmV5W10sXHJcbiAgICB0b3RhbDogRmxpZ2h0RmFyZVRvdGFsLFxyXG4gICAgaW5kZXg6IG51bWJlclxyXG4gICk6IEV1cm9zdGFySXRlbSB7XHJcbiAgICBjb25zdCByZXR1cm5PYmplY3Q6IEV1cm9zdGFySXRlbSA9IHtcclxuICAgICAgZGF0ZUFycml2YWw6IG51bGwsXHJcbiAgICAgIGRhdGVEZXBhcnR1cmU6IG51bGwsXHJcbiAgICAgIGR1cmF0aW9uOiBudWxsLFxyXG4gICAgICB0aW1lQXJyaXZhbDogbnVsbCxcclxuICAgICAgdGltZURlcGFydHVyZTogbnVsbCxcclxuICAgICAgY28yUGVySXRlbTogMCxcclxuICAgICAgY28yUGVyUGFzc2VuZ2VyOiAwLFxyXG4gICAgICBzb3VyY2VJZDogbnVsbCxcclxuICAgICAgdG90YWw6IG51bGwsXHJcbiAgICAgIHVpZDogbnVsbCxcclxuICAgICAgY2FiaW5DbGFzczogbnVsbCxcclxuICAgICAgYnVzaW5lc3NQcmVtaWVyRmFyZToge1xyXG4gICAgICAgIGNsYXNzOiBudWxsLFxyXG4gICAgICAgIGZhcmU6IG51bGwsXHJcbiAgICAgICAgaXNEaXNhYmxlZDogdHJ1ZSxcclxuICAgICAgICBwcmljZTogTmFOLFxyXG4gICAgICAgIGN1cnJlbmN5OiAnR0JQJyxcclxuICAgICAgICBzZWxlY3RlZDogZmFsc2VcclxuICAgICAgfSxcclxuICAgICAgc3RhbmRhcmRGYXJlOiB7XHJcbiAgICAgICAgY2xhc3M6IG51bGwsXHJcbiAgICAgICAgZmFyZTogbnVsbCxcclxuICAgICAgICBpc0Rpc2FibGVkOiB0cnVlLFxyXG4gICAgICAgIHByaWNlOiBOYU4sXHJcbiAgICAgICAgY3VycmVuY3k6ICdHQlAnLFxyXG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZVxyXG4gICAgICB9LFxyXG4gICAgICBzdGFuZGFyZFByZW1pZXJGYXJlOiB7XHJcbiAgICAgICAgY2xhc3M6IG51bGwsXHJcbiAgICAgICAgZmFyZTogbnVsbCxcclxuICAgICAgICBpc0Rpc2FibGVkOiB0cnVlLFxyXG4gICAgICAgIHByaWNlOiBOYU4sXHJcbiAgICAgICAgY3VycmVuY3k6ICdHQlAnLFxyXG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZVxyXG4gICAgICB9LFxyXG4gICAgICByZXF1aXJlc1JlYXNvbjogZmFsc2VcclxuICAgIH07XHJcbiAgICAvLyByZXR1cm5PYmplY3QuZHVyYXRpb24gPSByZXN1bHRzLm91dGJvdW5kVG90YWxEdXJhdGlvbjtcclxuICAgIHJlc3VsdHMuZm9yRWFjaCgoZmxpZ2h0OiBGbGlnaHRKb3VybmV5KSA9PiB7XHJcbiAgICAgIHJldHVybk9iamVjdC5kYXRlQXJyaXZhbCA9IGZsaWdodC5kYXRlVGltZUFycml2aW5nO1xyXG4gICAgICByZXR1cm5PYmplY3QuZGF0ZURlcGFydHVyZSA9IGZsaWdodC5kYXRlVGltZURlcGFydGluZztcclxuICAgICAgcmV0dXJuT2JqZWN0LmR1cmF0aW9uID0gdGhpcy5taW5Ub0hvdXIoZmxpZ2h0LnRvdGFsRHVyYXRpb24pO1xyXG4gICAgICByZXR1cm5PYmplY3QudGltZUFycml2YWwgPSBtb21lbnQoZmxpZ2h0LmRhdGVUaW1lQXJyaXZpbmcpLmZvcm1hdChcclxuICAgICAgICAnSEg6bW0nXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybk9iamVjdC50aW1lRGVwYXJ0dXJlID0gbW9tZW50KGZsaWdodC5kYXRlVGltZURlcGFydGluZykuZm9ybWF0KFxyXG4gICAgICAgICdISDptbSdcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuT2JqZWN0LmNhYmluQ2xhc3MgPSBmbGlnaHQuY2FiaW5DbGFzcztcclxuICAgICAgcmV0dXJuT2JqZWN0LnVpZCA9IGluZGV4O1xyXG4gICAgICAvLyBbMTQ6NDFdIEJyZW5kYW4gVmVuaW5nYVxyXG4gICAgICAvLyBFY29ub215IChhbmQgdGhlaXIgdmFyaWFudHMpIHdvdWxkIGJlIFN0YW5kYXJkXHJcbiAgICAgIC8vIFByZW1pdW0gd291bGQgYmUgU3RhbmRhcmQgUHJlbWl1bVxyXG4gICAgICAvLyBCdXNpbmVzcyB3b3VsZCBiZSBCdXNpbmVzcyBQcmVtaXVtXHJcbiAgICAgIHN3aXRjaCAoZmxpZ2h0LmNhYmluQ2xhc3MpIHtcclxuICAgICAgICBjYXNlIEZsaWdodENhYmluQ2xhc3MuRWNvbm9teUZsZXhpOlxyXG4gICAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215Tm9CYWdzOlxyXG4gICAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZDpcclxuICAgICAgICBjYXNlIEZsaWdodENhYmluQ2xhc3MuRWNvbm9teTpcclxuICAgICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZEZhcmUuaXNEaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS5mYXJlID0gZmxpZ2h0O1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS5wcmljZSA9IHRvdGFsLnByaWNlO1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS5jdXJyZW5jeSA9IHRvdGFsLmN1cnJlbmN5O1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS5jbGFzcyA9IGZsaWdodC5jYWJpbkNsYXNzO1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnUHJlbWl1bSc6XHJcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS5pc0Rpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS5mYXJlID0gZmxpZ2h0O1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUucHJpY2UgPSB0b3RhbC5wcmljZTtcclxuICAgICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZFByZW1pZXJGYXJlLmN1cnJlbmN5ID0gdG90YWwuY3VycmVuY3k7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS5jbGFzcyA9IGZsaWdodC5jYWJpbkNsYXNzO1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzczpcclxuICAgICAgICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLmlzRGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLmZhcmUgPSBmbGlnaHQ7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3QuYnVzaW5lc3NQcmVtaWVyRmFyZS5wcmljZSA9IHRvdGFsLnByaWNlO1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LmJ1c2luZXNzUHJlbWllckZhcmUuY3VycmVuY3kgPSB0b3RhbC5jdXJyZW5jeTtcclxuICAgICAgICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLmNsYXNzID0gZmxpZ2h0LmNhYmluQ2xhc3M7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3QuYnVzaW5lc3NQcmVtaWVyRmFyZS5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGNvbnNvbGUud2FybignbmV3IGNsYXNzIHRvIGJlIGltcGxlbWVudGVkOiAnLCBmbGlnaHQuY2FiaW5DbGFzcyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJldHVybk9iamVjdDtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCByZXNldFF1ZXJ5KGNoZWNrSXNWYWxpZDogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcclxuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyh0aGlzLnNlYXJjaFNlcnZpY2UubWFrZUV1cm9zdGFyUXVlcnkoKSk7XHJcbiAgICBpZiAoY2hlY2tJc1ZhbGlkKSB7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldFBhcmFtcygpOiB2b2lkIHtcclxuICAgIHRoaXMucmVzZXQoKTtcclxuICAgIHRoaXMucmVzZXRRdWVyeSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNWYWxpZCgpIHtcclxuICAgIGlmICghdGhpcy5kb0NoZWNrcykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBFdXJvc3RhckVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyxcclxuICAgICAge1xyXG4gICAgICAgIHRlbXBQYXJhbXM6IHRoaXMudGVtcFBhcmFtcyxcclxuICAgICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMgPSBbXTtcclxuICAgIGlmICghdGhpcy5fb3JpZ2luQWlycG9ydCkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2UgYWRkIGluIGEgZGVwYXJ0dXJlIGxvY2F0aW9uJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2UgYWRkIGluIGEgYXJyaXZhbCBkZXN0aW5hdGlvbicpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlLmlzQWZ0ZXIobW9tZW50KCkpKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ0RlcGFydHVyZSBkYXRlIGNhbiBub3QgYmUgaW4gdGhlIHBhc3QnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuX29yaWdpbkFpcnBvcnQgJiZcclxuICAgICAgdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0ICYmXHJcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9PT0gdGhpcy5fb3JpZ2luQWlycG9ydFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgJ09yaWdpbiBhbmQgZGVzdGluYXRpb24gc3RhdGlvbiBjYW5ub3QgYmUgdGhlIHNhbWUnXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc1JldHVybikge1xyXG4gICAgICAvLyBUT0RPIGNoZWNrIHRoYXQgcmV0dXJuIGRldGFpbHMgYXJlIHNldFxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZS5pc1NhbWVPckFmdGVyKFxyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmluVGltZUNyaXRlcmlhXHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICAgJ1JldHVybiBkYXRlIG11c3QgYmUgYWZ0ZXIgdGhlIGRlcGFydHVyZSBkYXRlJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gdGhpcyBpcyBzdHVmZiBmb3IgbWF0Y2hpbmcgY2FiaW4gY2xhc3Nlc1xyXG4gICAgICBpZiAoIXRoaXMuY2hlY2tDYWJpbk1hdGNoaXNWYWxpZCgpKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAgICdUaGUgdHlwZXMgb2YgY2FiaW4gY2xhc3NlcyBzZWxlY3RlZCBhcmUgbm90IGNvbXBhdGlibGUuIEV4YW1wbGVzIG9mIGNvbXBhdGlibGUgY2FiaW4gY2xhc3NlczsgQW55IC0gQW55OyBTdGFuZGFyZCAtIFN0YW5kYXJkOyBCdXNpbmVzcyAtIEJ1c2luZXNzJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuaXNWYWxpZC5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMCk7XHJcbiAgICB0aGlzLm1lc3NhZ2VzLm5leHQodGhpcy52YWxpZGF0aW9uTWVzc2FnZXMpO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tDYWJpbk1hdGNoaXNWYWxpZCgpOiBib29sZWFuIHtcclxuICAgIHN3aXRjaCAodGhpcy50ZW1wUGFyYW1zLmNhYmluQ2xhc3MpIHtcclxuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkFueTpcclxuICAgICAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnJldHVybkNhYmluQ2xhc3MgPT09IEZsaWdodENhYmluQ2xhc3MuQW55O1xyXG4gICAgICBjYXNlIEZsaWdodENhYmluQ2xhc3MuRWNvbm9teTpcclxuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215OlxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzcyAhPT0gRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzcyAmJlxyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLnJldHVybkNhYmluQ2xhc3MgIT09IEZsaWdodENhYmluQ2xhc3MuQW55XHJcbiAgICAgICAgKTtcclxuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzOlxyXG4gICAgICAgIHJldHVybiAhKFxyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLnJldHVybkNhYmluQ2xhc3MgPT09IEZsaWdodENhYmluQ2xhc3MuRWNvbm9teSB8fFxyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLnJldHVybkNhYmluQ2xhc3MgPT09XHJcbiAgICAgICAgICAgIEZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXkgfHxcclxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzID09PSBGbGlnaHRDYWJpbkNsYXNzLkFueVxyXG4gICAgICAgICk7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGFydFNlYXJjaCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX29yaWdpbmFsVXNlclNlYXJjaCA9IE9iamVjdC5mcmVlemUoXHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMudGVtcFBhcmFtcylcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgICBFdXJvc3RhckVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXHJcbiAgICAgICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVSZWNlbnRTZWFyY2godGhpcy5nZXRSZWNlbnRTZWFyY2hRdWVyeShxdWVyeSkpO1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0U2VhcmNoKFxyXG4gICAgICAgIHRoaXMuZXVyb3N0YXJGZXRjaGVyLmZldGNoTGlzdCh0aGlzLmdldFNlYXJjaFF1ZXJ5KCkpXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFJlY2VudFNlYXJjaFF1ZXJ5KFxyXG4gICAgcXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzXHJcbiAgKTogU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzIHtcclxuICAgIGNvbnN0IHJlY2VudFNlYXJjaFF1ZXJ5OiBJRXVyb3N0YXJTZWFyY2hBcmdzID0gdGhpcy51cGRhdGVTZXJjaFF1ZXJ5KHF1ZXJ5KTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzZXJ2aWNlVHlwZTogU2VydmljZVR5cGUuRXVyb3N0YXIsXHJcbiAgICAgIHNlYXJjaEFyZ3M6IHJlY2VudFNlYXJjaFF1ZXJ5LFxyXG4gICAgICB0cmF2ZWxEYXRlOiB0aGlzLm91dEJvdW5kRGF0ZS5mb3JtYXQoKSxcclxuICAgICAgdHJhdmVsbGVyczogdGhpcy5oZWxwZXJzLmdldFRyYXZlbGxlcnNJZCh0aGlzLnRyYXZlbGxlcnMpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTZXJjaFF1ZXJ5KFxyXG4gICAgcXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzXHJcbiAgKTogSUV1cm9zdGFyU2VhcmNoQXJncyB7XHJcbiAgICBjb25zdCBzZWFyY2hRdWVyeTogSUV1cm9zdGFyU2VhcmNoQXJncyA9IHF1ZXJ5O1xyXG4gICAgaWYgKHRoaXMuZGVwYXJ0TG9jYXRpb24pIHtcclxuICAgICAgc2VhcmNoUXVlcnkuZGVwYXJ0TG9jYXRpb24gPSB0aGlzLmRlcGFydExvY2F0aW9uO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYXJyaXZlTG9jYXRpb24pIHtcclxuICAgICAgc2VhcmNoUXVlcnkuYXJyaXZlTG9jYXRpb24gPSB0aGlzLmFycml2ZUxvY2F0aW9uO1xyXG4gICAgfVxyXG4gICAgc2VhcmNoUXVlcnkub3V0Ym91bmRDYWJpbkNsYXNzTmFtZSA9IHRoaXMudHVybkNhYmluVHlwZVRvTmFtZShcclxuICAgICAgdGhpcy50ZW1wUGFyYW1zLmNhYmluQ2xhc3NcclxuICAgICk7XHJcbiAgICBpZiAodGhpcy5pc1JldHVybikge1xyXG4gICAgICBzZWFyY2hRdWVyeS5yZXR1cm5DYWJpbkNsYXNzTmFtZSA9XHJcbiAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmNhYmluQ2xhc3MgPT09IHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzXHJcbiAgICAgICAgICA/IHNlYXJjaFF1ZXJ5Lm91dGJvdW5kQ2FiaW5DbGFzc05hbWVcclxuICAgICAgICAgIDogdGhpcy50dXJuQ2FiaW5UeXBlVG9OYW1lKHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzZWFyY2hRdWVyeTtcclxuICB9XHJcblxyXG4gIHR1cm5DYWJpblR5cGVUb05hbWUoY2xhc3NUeXBlOiBGbGlnaHRDYWJpbkNsYXNzKSB7XHJcbiAgICBjb25zdCBjbGFzc2VzID0gdGhpcy5hdmFsaWFibGVDbGFzc2VzLnZhbHVlO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRDYWxzc05hbWUgPSBjbGFzc2VzLmZpbmQoXHJcbiAgICAgIChjbGFzc0l0ZW0pID0+IGNsYXNzSXRlbS50eXBlID09PSBjbGFzc1R5cGVcclxuICAgICkubmFtZTtcclxuICAgIHJldHVybiBbc2VsZWN0ZWRDYWxzc05hbWVdO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRSZWNlbnRTZWFyY2gocmVjZW50U2VhcmNoOiBSZWNlbnRTZWFyY2gpOiB2b2lkIHtcclxuICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZERhdGUpIHtcclxuICAgICAgbGV0IG91dGJvdW5kVGltZVdpbmRvdyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzXHJcbiAgICAgICAgLm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvd1xyXG4gICAgICAgID8gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZEFycml2YWxUaW1lV2luZG93O1xyXG4gICAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IHRoaXMuY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKFxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGF0ZSxcclxuICAgICAgICBvdXRib3VuZFRpbWVXaW5kb3dcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuRGF0ZSkge1xyXG4gICAgICBsZXQgcmV0dXJuVGltZVdpbmRvdyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRlcGFydHVyZVRpbWVXaW5kb3dcclxuICAgICAgICA/IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRlcGFydHVyZVRpbWVXaW5kb3dcclxuICAgICAgICA6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkFycml2YWxUaW1lV2luZG93O1xyXG4gICAgICB0aGlzLmluYm91bmREYXRlID0gdGhpcy5jb252ZXJ0UmVjZW50U2VhcmNoRGF0ZVRpbWUoXHJcbiAgICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuRGF0ZSxcclxuICAgICAgICByZXR1cm5UaW1lV2luZG93XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mYXJlVHlwZSA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmZhcmVUeXBlO1xyXG4gICAgdGhpcy5tYXhDb25uZWN0aW9ucyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm1heENvbm5lY3Rpb25zO1xyXG5cclxuICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZENhYmluQ2xhc3MpIHtcclxuICAgICAgdGhpcy5jYWJpbkNsYXNzID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmRDYWJpbkNsYXNzWzBdO1xyXG4gICAgfVxyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkNhYmluQ2xhc3MpIHtcclxuICAgICAgdGhpcy5yZXR1cm5DYWJpbkNsYXNzID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuQ2FiaW5DbGFzc1swXTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmluY2x1ZGVOZWFyYnlBaXJwb3J0cztcclxuXHJcbiAgICB0aGlzLmNob3NlblNlYXJjaFR5cGUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5UcmlwXHJcbiAgICAgID8gRXVyb3N0YXJTZWFyY2hUeXBlLnJldHVyblxyXG4gICAgICA6IEV1cm9zdGFyU2VhcmNoVHlwZS5vbmVXYXk7XHJcblxyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvdykge1xyXG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuRGVwYXJ0O1xyXG4gICAgfSBlbHNlIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZEFycml2YWxUaW1lV2luZG93KSB7XHJcbiAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5BcnJpdmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQW55dGltZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvdykge1xyXG4gICAgICB0aGlzLmluVGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5EZXBhcnQ7XHJcbiAgICB9IGVsc2UgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkFycml2YWxUaW1lV2luZG93KSB7XHJcbiAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFycml2ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFueXRpbWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9vcmlnaW5BaXJwb3J0ID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3JpZ2luQWlycG9ydDtcclxuICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlc3RpbmF0aW9uQWlycG9ydDtcclxuICAgIHRoaXMuYXJyaXZlTG9jYXRpb24gPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5hcnJpdmVMb2NhdGlvbjtcclxuICAgIHRoaXMuZGVwYXJ0TG9jYXRpb24gPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXBhcnRMb2NhdGlvbjtcclxuICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1ha2VEZXBhcnR1cmVUaW1lV2luZG93KFxyXG4gICAgZGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQsXHJcbiAgICB3aW5kb3c6IFRpbWVXaW5kb3dcclxuICApOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHdpbmRvdyA9PT0gVGltZVdpbmRvdy5EZXBhcnRcclxuICAgICAgPyB0aGlzLmhlbHBlcnMubWFrZVRpbWVXaW5kb3coZGF0ZVRpbWUsIC0yLCAyKVxyXG4gICAgICA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1ha2VBcnJpdmFsVGltZVdpbmRvdyhcclxuICAgIGRhdGVUaW1lOiBtb21lbnQuTW9tZW50LFxyXG4gICAgd2luZG93OiBUaW1lV2luZG93XHJcbiAgKTogc3RyaW5nIHtcclxuICAgIGlmICh3aW5kb3cgIT09IFRpbWVXaW5kb3cuQXJyaXZlKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMubWFrZVRpbWVXaW5kb3coZGF0ZVRpbWUsIC0yLCAyKTtcclxuICB9XHJcblxyXG4gIGNvbnZlcnRSZWNlbnRTZWFyY2hEYXRlVGltZShcclxuICAgIGRhdGU6IHN0cmluZyxcclxuICAgIHRpbWVXaW5kb3c/OiBzdHJpbmdcclxuICApOiBtb21lbnQuTW9tZW50IHtcclxuICAgIGlmICh0aW1lV2luZG93KSB7XHJcbiAgICAgIGNvbnN0IGZsaWdodFRpbWUgPSB0aW1lV2luZG93LnNwbGl0KCctJyk7XHJcbiAgICAgIGxldCB0aW1lQW5kRGF0ZSA9IG1vbWVudChkYXRlKS5hZGQoXHJcbiAgICAgICAgbW9tZW50LmR1cmF0aW9uKHRoaXMuaGVscGVycy5oaG1tVG9UaW1lKGZsaWdodFRpbWVbMF0pKVxyXG4gICAgICApO1xyXG4gICAgICAvLyBhZGQgMiBob3VyXHJcbiAgICAgIHJldHVybiB0aW1lQW5kRGF0ZS5jbG9uZSgpLmFkZCgyLCAnaG91cicpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG1vbWVudChkYXRlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFNlYXJjaFF1ZXJ5KCk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzIHtcclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8U2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXM+KFxyXG4gICAgICBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgIHt9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG9yaWdpbkFpcnBvcnQ6IHRoaXMuX29yaWdpbkFpcnBvcnQsXHJcbiAgICAgICAgICBkZXN0aW5hdGlvbkFpcnBvcnQ6IHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCxcclxuICAgICAgICAgIG91dGJvdW5kRGF0ZTogdGhpcy5oZWxwZXJzLmZvcm1hdElzb0RhdGUoXHJcbiAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGVcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBvdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3c6IHRoaXMubWFrZURlcGFydHVyZVRpbWVXaW5kb3coXHJcbiAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUsXHJcbiAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lQ3JpdGVyaWFcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBvdXRib3VuZEFycml2YWxUaW1lV2luZG93OiB0aGlzLm1ha2VBcnJpdmFsVGltZVdpbmRvdyhcclxuICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZSxcclxuICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dFRpbWVDcml0ZXJpYVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgcGFzc2VuZ2VyczogdGhpcy5fcGFzc2VuZ2VycyxcclxuICAgICAgICAgIHJldHVyblRyaXA6IHRoaXMuaXNSZXR1cm4sXHJcbiAgICAgICAgICBvdXRib3VuZENhYmluQ2xhc3M6IHRoaXMudGVtcFBhcmFtcy5jYWJpbkNsYXNzXHJcbiAgICAgICAgICAgID8gW3RoaXMudGVtcFBhcmFtcy5jYWJpbkNsYXNzXVxyXG4gICAgICAgICAgICA6IG51bGwsXHJcbiAgICAgICAgICByZXF1aXJlRnJlZUJhZzogbnVsbCxcclxuICAgICAgICAgIG1heENvbm5lY3Rpb25zOiB0aGlzLnRlbXBQYXJhbXMubWF4Q29ubmVjdGlvbnMsXHJcbiAgICAgICAgICBpbmNsdWRlTmVhcmJ5QWlycG9ydHM6IHRoaXMudGVtcFBhcmFtcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHMsXHJcbiAgICAgICAgICBwcmVmZXJyZWRDYXJyaWVyczogdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzLm1hcChcclxuICAgICAgICAgICAgKGNhcnJpZXI6IE9CVEFpcmxpbmVzRGV0YWlscykgPT5cclxuICAgICAgICAgICAgICBjYXJyaWVyPy5jb2RlID8gY2Fycmllci5jb2RlIDogbnVsbFxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGZhcmVUeXBlOiB0aGlzLnRlbXBQYXJhbXMuZmFyZVR5cGUsXHJcbiAgICAgICAgICB3aXRoR3JvdXBlZDogbnVsbFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGhpcy5pc1JldHVyblxyXG4gICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuRGF0ZTogdGhpcy5oZWxwZXJzLmZvcm1hdElzb0RhdGUoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGVcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIHJldHVybkRlcGFydHVyZVRpbWVXaW5kb3c6IHRoaXMubWFrZURlcGFydHVyZVRpbWVXaW5kb3coXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGUsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuaW5UaW1lQ3JpdGVyaWFcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIHJldHVybkFycml2YWxUaW1lV2luZG93OiB0aGlzLm1ha2VBcnJpdmFsVGltZVdpbmRvdyhcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSxcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYVxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgcmV0dXJuQ2FiaW5DbGFzczogdGhpcy50ZW1wUGFyYW1zLnJldHVybkNhYmluQ2xhc3NcclxuICAgICAgICAgICAgICAgID8gW3RoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzXVxyXG4gICAgICAgICAgICAgICAgOiBudWxsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDoge31cclxuICAgICAgKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlVHJhdmVsbGVycygpIHtcclxuICAgIGNvbnN0IHRyYXZlbGxlcnM6IEZsaWdodFBhc3Nlbmdlck9iamVjdFtdID0gW107XHJcbiAgICBmb3IgKGxldCBsb29wID0gMDsgbG9vcCA8IHRoaXMudGVtcFBhcmFtcy5hZHVsdHM7IGxvb3AgKz0gMSkge1xyXG4gICAgICB0cmF2ZWxsZXJzLnB1c2goeyB0eXBlOiBGbGlnaHRQYXNzZW5nZXJUeXBlLkFkdWx0IH0pO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgbG9vcCA9IDA7IGxvb3AgPCB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW47IGxvb3AgKz0gMSkge1xyXG4gICAgICB0cmF2ZWxsZXJzLnB1c2goeyB0eXBlOiBGbGlnaHRQYXNzZW5nZXJUeXBlLkNoaWxkIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3Bhc3NlbmdlcnMgPSB0cmF2ZWxsZXJzO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVBdmFsaWFibGVDbGFzc2VzKCkge1xyXG4gICAgdGhpcy5hdmFsaWFibGVDbGFzc2VzLm5leHQoW1xyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0FueScsXHJcbiAgICAgICAgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcy5BbnlcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdTdGFuZGFyZCAoc2VtaSBmbGV4aWJsZSknLFxyXG4gICAgICAgIHR5cGU6IEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1N0YW5kYXJkIHByZW1pZXIgKHNlbWkgZmxleGlibGUpJyxcclxuICAgICAgICB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQnVzaW5lc3MgcHJlbWllciAoZnVsbHkgZmxleGlibGUpJyxcclxuICAgICAgICB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzXHJcbiAgICAgIH1cclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gc29ydCB0aGUgZmxpZ2h0IHJlc3VsdHNcclxuICAgKiBAdG9kbyAtIEZpbGwgb3V0IFByZWZlcnJlZCBhbmQgQ28yIHNvcnRpbmcgd2hlbiB3ZSBoYXZlIHRoYXQgZGF0YVxyXG4gICAqL1xyXG4gIHB1YmxpYyBzb3J0UmVzdWx0cyhcclxuICAgIHNvcnRNZXRob2RWYWx1ZTogU29ydFR5cGVzRXVyb3N0YXIsXHJcbiAgICBkaXI6IGJvb2xlYW4sXHJcbiAgICBnaXZlblJlc3VsdHM/OiBFdXJvc3RhclJlc3VsdHNbXVxyXG4gICk6IHZvaWQge1xyXG4gICAgbGV0IHJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUoXHJcbiAgICAgIGdpdmVuUmVzdWx0c1xyXG4gICAgICAgID8gZ2l2ZW5SZXN1bHRzXHJcbiAgICAgICAgOiA8RXVyb3N0YXJSZXN1bHRzW10+KDx1bmtub3duPnRoaXMuZnVsbFJlc3VsdHMpXHJcbiAgICApO1xyXG5cclxuICAgIHN3aXRjaCAoc29ydE1ldGhvZFZhbHVlKSB7XHJcbiAgICAgIGNhc2UgU29ydFR5cGVzRXVyb3N0YXIuQ2hlYXBlc3RGaXJzdDpcclxuICAgICAgICByZXN1bHRzID0gdGhpcy5zb3J0QnlQcmljZShyZXN1bHRzLCBkaXIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFNvcnRUeXBlc0V1cm9zdGFyLkVhcmxpZXN0Rmlyc3Q6XHJcbiAgICAgICAgcmVzdWx0cyA9IHRoaXMuc29ydEJ5RGF0ZShyZXN1bHRzLCBkaXIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYCsrKyBVbmtub3duIHNvcnRpbmcgbWV0aG9kOiAke3NvcnRNZXRob2RWYWx1ZX0gKysrYCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQocmVzdWx0cyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc29ydFJlc3VsdHNGbGlnaHRKb3VybmV5cyhcclxuICAgIHNvcnRNZXRob2RWYWx1ZTogU29ydFR5cGVzRXVyb3N0YXIsXHJcbiAgICBpbmJvdW5kOiBib29sZWFuID0gZmFsc2UsXHJcbiAgICBnaXZlblJlc3VsdHM/OiBGbGlnaHRJdGluZXJhcnlbXVxyXG4gICk6IEZsaWdodEl0aW5lcmFyeVtdIHtcclxuICAgIGxldCByZXN1bHRzID0gdGhpcy5oZWxwZXJzLmNsb25lKGdpdmVuUmVzdWx0cyk7XHJcblxyXG4gICAgc3dpdGNoIChzb3J0TWV0aG9kVmFsdWUpIHtcclxuICAgICAgY2FzZSBTb3J0VHlwZXNFdXJvc3Rhci5DaGVhcGVzdEZpcnN0OlxyXG4gICAgICAgIHJlc3VsdHMgPSB0aGlzLnNvcnRCeVByaWNlRmxpZ2h0KHJlc3VsdHMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFNvcnRUeXBlc0V1cm9zdGFyLkVhcmxpZXN0Rmlyc3Q6XHJcbiAgICAgICAgcmVzdWx0cyA9IHRoaXMuc29ydEJ5RGF0ZUZsaWdodChyZXN1bHRzLCBpbmJvdW5kKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBTb3J0VHlwZXNFdXJvc3Rhci5MYXRlc3RGaXJzdDpcclxuICAgICAgICByZXN1bHRzID0gdGhpcy5zb3J0QnlEYXRlRmxpZ2h0RGVjZW5kaW5nKHJlc3VsdHMsIGluYm91bmQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYCsrKyBVbmtub3duIHNvcnRpbmcgbWV0aG9kOiAke3NvcnRNZXRob2RWYWx1ZX0gKysrYCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgfVxyXG5cclxuICBzb3J0QnlQcmljZUZsaWdodChyZXN1bHRzOiBGbGlnaHRJdGluZXJhcnlbXSk6IEZsaWdodEl0aW5lcmFyeVtdIHtcclxuICAgIHJldHVybiByZXN1bHRzLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgcmV0dXJuIE51bWJlcihhLnRvdGFsLnByaWNlKSAtIE51bWJlcihiLnRvdGFsLnByaWNlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc29ydEJ5RGF0ZUZsaWdodChcclxuICAgIHJlc3VsdHM6IEZsaWdodEl0aW5lcmFyeVtdLFxyXG4gICAgaW5ib3VuZDogYm9vbGVhblxyXG4gICk6IEZsaWdodEl0aW5lcmFyeVtdIHtcclxuICAgIHJldHVybiByZXN1bHRzLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgaWYgKGluYm91bmQpIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgbW9tZW50KGEuaW5ib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpLnVuaXgoKSAtXHJcbiAgICAgICAgICBtb21lbnQoYi5pbmJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZykudW5peCgpXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgbW9tZW50KGEub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKS51bml4KCkgLVxyXG4gICAgICAgICAgbW9tZW50KGIub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKS51bml4KClcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNvcnRCeURhdGVGbGlnaHREZWNlbmRpbmcoXHJcbiAgICByZXN1bHRzOiBGbGlnaHRJdGluZXJhcnlbXSxcclxuICAgIGluYm91bmQ6IGJvb2xlYW5cclxuICApOiBGbGlnaHRJdGluZXJhcnlbXSB7XHJcbiAgICByZXR1cm4gcmVzdWx0cy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIGlmIChpbmJvdW5kKSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIG1vbWVudChiLmluYm91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKS51bml4KCkgLVxyXG4gICAgICAgICAgbW9tZW50KGEuaW5ib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpLnVuaXgoKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIG1vbWVudChiLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZykudW5peCgpIC1cclxuICAgICAgICAgIG1vbWVudChhLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZykudW5peCgpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTb3J0IHJlc3VsdHMgYnkgZGVwYXJ0dXJlIHRpbWVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RXVyb3N0YXJSZXN1bHRzW119IHJlc3VsdHNcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqIEBtZW1iZXJvZiBFdXJvc3RhckluZm9cclxuICAgKi9cclxuICBzb3J0QnlEYXRlKHJlc3VsdHM6IEV1cm9zdGFyUmVzdWx0c1tdLCBkaXI/OiBib29sZWFuKTogRXVyb3N0YXJSZXN1bHRzW10ge1xyXG4gICAgY29uc3QgYnlEYXRlID0gKGE6IEV1cm9zdGFySXRlbSwgYjogRXVyb3N0YXJJdGVtKSA9PiB7XHJcbiAgICAgIGlmIChkaXIpIHtcclxuICAgICAgICByZXR1cm4gbW9tZW50KGEuZGF0ZURlcGFydHVyZSkudW5peCgpIC0gbW9tZW50KGIuZGF0ZURlcGFydHVyZSkudW5peCgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBtb21lbnQoYi5kYXRlRGVwYXJ0dXJlKS51bml4KCkgLSBtb21lbnQoYS5kYXRlRGVwYXJ0dXJlKS51bml4KCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc29ydGVkUmVzdWx0cyA9IHtcclxuICAgICAgb3V0Ym91bmQ6IHJlc3VsdHNbMF0ub3V0Ym91bmQuc29ydChieURhdGUpLFxyXG4gICAgICBpbmJvdW5kOiByZXN1bHRzWzBdLmluYm91bmQuc29ydChieURhdGUpXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIFtzb3J0ZWRSZXN1bHRzXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNvcnQgcmVzdWx0cyBieSBwcmljZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtFdXJvc3RhclJlc3VsdHNbXX0gcmVzdWx0c1xyXG4gICAqIEByZXR1cm5zXHJcbiAgICogQG1lbWJlcm9mIEV1cm9zdGFySW5mb1xyXG4gICAqL1xyXG4gIHNvcnRCeVByaWNlKHJlc3VsdHM6IEV1cm9zdGFyUmVzdWx0c1tdLCBkaXI/OiBib29sZWFuKTogRXVyb3N0YXJSZXN1bHRzW10ge1xyXG4gICAgY29uc3QgYnlQcmljZSA9IChhOiBFdXJvc3Rhckl0ZW0sIGI6IEV1cm9zdGFySXRlbSkgPT4ge1xyXG4gICAgICBjb25zdCBhUHJpY2UgPVxyXG4gICAgICAgICthLnN0YW5kYXJkRmFyZS5wcmljZSB8fFxyXG4gICAgICAgICthLnN0YW5kYXJkUHJlbWllckZhcmUucHJpY2UgfHxcclxuICAgICAgICArYS5idXNpbmVzc1ByZW1pZXJGYXJlLnByaWNlO1xyXG4gICAgICBjb25zdCBiUHJpY2UgPVxyXG4gICAgICAgICtiLnN0YW5kYXJkRmFyZS5wcmljZSB8fFxyXG4gICAgICAgICtiLnN0YW5kYXJkUHJlbWllckZhcmUucHJpY2UgfHxcclxuICAgICAgICArYi5idXNpbmVzc1ByZW1pZXJGYXJlLnByaWNlO1xyXG4gICAgICBpZiAoZGlyKSB7XHJcbiAgICAgICAgcmV0dXJuIGFQcmljZSAtIGJQcmljZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYlByaWNlIC0gYVByaWNlO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBzb3J0ZWRSZXN1bHRzID0ge1xyXG4gICAgICBvdXRib3VuZDogcmVzdWx0c1swXS5vdXRib3VuZC5zb3J0KGJ5UHJpY2UpLFxyXG4gICAgICBpbmJvdW5kOiByZXN1bHRzWzBdLmluYm91bmQuc29ydChieVByaWNlKVxyXG4gICAgfTtcclxuICAgIHJldHVybiBbc29ydGVkUmVzdWx0c107XHJcbiAgfVxyXG5cclxuICB1cGRhdGVTZWFyY2hGcm9tRXhwaXJlZEJhc2tldEl0ZW0oYmFza2V0SXRlbTogQmFza2V0SXRlbSk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2VhcmNoRXVyb1N0YXJRdWVyeTogU2VhcmNoRXVyb3N0YXJRdWVyeVZhcmlhYmxlcyA9XHJcbiAgICAgIGJhc2tldEl0ZW0uc2VhcmNoUXVlcnk7XHJcbiAgICBpZiAoc2VhcmNoRXVyb1N0YXJRdWVyeS5vdXRib3VuZERhdGUpIHtcclxuICAgICAgbGV0IG91dGJvdW5kVGltZVdpbmRvdyA9IHNlYXJjaEV1cm9TdGFyUXVlcnkub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgPyBzZWFyY2hFdXJvU3RhclF1ZXJ5Lm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvd1xyXG4gICAgICAgIDogc2VhcmNoRXVyb1N0YXJRdWVyeS5vdXRib3VuZEFycml2YWxUaW1lV2luZG93O1xyXG4gICAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IHRoaXMuY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKFxyXG4gICAgICAgIHNlYXJjaEV1cm9TdGFyUXVlcnkub3V0Ym91bmREYXRlLFxyXG4gICAgICAgIG91dGJvdW5kVGltZVdpbmRvd1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzZWFyY2hFdXJvU3RhclF1ZXJ5LnJldHVybkRhdGUpIHtcclxuICAgICAgbGV0IHJldHVyblRpbWVXaW5kb3cgPSBzZWFyY2hFdXJvU3RhclF1ZXJ5LnJldHVybkRlcGFydHVyZVRpbWVXaW5kb3dcclxuICAgICAgICA/IHNlYXJjaEV1cm9TdGFyUXVlcnkucmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvd1xyXG4gICAgICAgIDogc2VhcmNoRXVyb1N0YXJRdWVyeS5yZXR1cm5BcnJpdmFsVGltZVdpbmRvdztcclxuICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKFxyXG4gICAgICAgIHNlYXJjaEV1cm9TdGFyUXVlcnkucmV0dXJuRGF0ZSxcclxuICAgICAgICByZXR1cm5UaW1lV2luZG93XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mYXJlVHlwZSA9IHNlYXJjaEV1cm9TdGFyUXVlcnkuZmFyZVR5cGU7XHJcbiAgICB0aGlzLm1heENvbm5lY3Rpb25zID0gc2VhcmNoRXVyb1N0YXJRdWVyeS5tYXhDb25uZWN0aW9ucztcclxuXHJcbiAgICBpZiAoc2VhcmNoRXVyb1N0YXJRdWVyeS5vdXRib3VuZENhYmluQ2xhc3MpIHtcclxuICAgICAgdGhpcy5jYWJpbkNsYXNzID0gc2VhcmNoRXVyb1N0YXJRdWVyeVxyXG4gICAgICAgIC5vdXRib3VuZENhYmluQ2xhc3NbMF0gYXMgRmxpZ2h0Q2FiaW5DbGFzcztcclxuICAgIH1cclxuICAgIGlmIChzZWFyY2hFdXJvU3RhclF1ZXJ5LnJldHVybkNhYmluQ2xhc3MpIHtcclxuICAgICAgdGhpcy5yZXR1cm5DYWJpbkNsYXNzID0gc2VhcmNoRXVyb1N0YXJRdWVyeVxyXG4gICAgICAgIC5yZXR1cm5DYWJpbkNsYXNzWzBdIGFzIEZsaWdodENhYmluQ2xhc3M7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHMgPSBzZWFyY2hFdXJvU3RhclF1ZXJ5LmluY2x1ZGVOZWFyYnlBaXJwb3J0cztcclxuXHJcbiAgICB0aGlzLmNob3NlblNlYXJjaFR5cGUgPSBzZWFyY2hFdXJvU3RhclF1ZXJ5LnJldHVyblRyaXBcclxuICAgICAgPyBFdXJvc3RhclNlYXJjaFR5cGUucmV0dXJuXHJcbiAgICAgIDogRXVyb3N0YXJTZWFyY2hUeXBlLm9uZVdheTtcclxuXHJcbiAgICBpZiAoc2VhcmNoRXVyb1N0YXJRdWVyeS5vdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3cpIHtcclxuICAgICAgdGhpcy5vdXRUaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkRlcGFydDtcclxuICAgIH0gZWxzZSBpZiAoc2VhcmNoRXVyb1N0YXJRdWVyeS5vdXRib3VuZEFycml2YWxUaW1lV2luZG93KSB7XHJcbiAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5BcnJpdmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQW55dGltZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VhcmNoRXVyb1N0YXJRdWVyeS5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93KSB7XHJcbiAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkRlcGFydDtcclxuICAgIH0gZWxzZSBpZiAoc2VhcmNoRXVyb1N0YXJRdWVyeS5yZXR1cm5BcnJpdmFsVGltZVdpbmRvdykge1xyXG4gICAgICB0aGlzLmluVGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5BcnJpdmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmluVGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5Bbnl0aW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzZWFyY2hFdXJvU3RhclF1ZXJ5Lm9yaWdpbkFpcnBvcnQpIHtcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlXHJcbiAgICAgICAgLmxvb2t1cEV1cm9zdGFyU3RhdGlvbnMoc2VhcmNoRXVyb1N0YXJRdWVyeS5vcmlnaW5BaXJwb3J0KVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHN0YXRpb25zOiBFdXJvc3RhclN0YXRpb25bXSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kZXBhcnRMb2NhdGlvbiA9IHN0YXRpb25zWzBdIGFzIE9CVEFpcnBvcnREZXRhaWxzO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzZWFyY2hFdXJvU3RhclF1ZXJ5LmRlc3RpbmF0aW9uQWlycG9ydCkge1xyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgICAubG9va3VwRXVyb3N0YXJTdGF0aW9ucyhzZWFyY2hFdXJvU3RhclF1ZXJ5LmRlc3RpbmF0aW9uQWlycG9ydClcclxuICAgICAgICAuc3Vic2NyaWJlKChzdGF0aW9uczogRXVyb3N0YXJTdGF0aW9uW10pID0+IHtcclxuICAgICAgICAgIHRoaXMuYXJyaXZlTG9jYXRpb24gPSBzdGF0aW9uc1swXSBhcyBPQlRBaXJwb3J0RGV0YWlscztcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBhZGQgVHJhdmVsbGVyc1xyXG4gICAgaWYgKGJhc2tldEl0ZW0udXNlcnMpIHtcclxuICAgICAgYmFza2V0SXRlbS51c2Vycy5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuYWRkVHJhdmVsbGVyKHVzZXIpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUZyb21QcmV2aW91c1NlYXJjaGVzKFxyXG4gICAgcHJldmlvdXNJdGVtczogUmVjb3JkPFNlcnZpY2VUeXBlLCBCYXNrZXRJdGVtPlxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgZmxpZ2h0SXRlbTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMgPVxyXG4gICAgICBwcmV2aW91c0l0ZW1zW1NlcnZpY2VUeXBlLkZsaWdodF0/LnNlYXJjaFF1ZXJ5O1xyXG4gICAgaWYgKGZsaWdodEl0ZW0pIHtcclxuICAgICAgLy8gVE9ETyBmbGlnaHRzIGhhdmVuJ3QgYmVlbiBkb25lIHlldC5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFRvdGFsQmFnZ2FnZShyZXN1bHQ6IEZsaWdodEl0aW5lcmFyeSk6IG51bWJlciB7XHJcbiAgICBsZXQgdG90YWwgPSAwO1xyXG5cclxuICAgIGNvbnN0IHBhcnNlZEFkZGl0aW9uYWwgPSBKU09OLnBhcnNlKHJlc3VsdC5hZGRpdGlvbmFsKTtcclxuICAgIGlmIChwYXJzZWRBZGRpdGlvbmFsICYmIHBhcnNlZEFkZGl0aW9uYWwub3V0Ym91bmRGbGlnaHRzKSB7XHJcbiAgICAgIHBhcnNlZEFkZGl0aW9uYWwub3V0Ym91bmRGbGlnaHRzLmZvckVhY2goKGZsaWdodDogYW55KSA9PiB7XHJcbiAgICAgICAgZmxpZ2h0LmJhZ2dhZ2UuZm9yRWFjaCgoYmFnOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChiYWcuYWxsb3dhbmNlICYmIGJhZy5hbGxvd2FuY2UgPiB0b3RhbCkge1xyXG4gICAgICAgICAgICB0b3RhbCA9IGJhZy5hbGxvd2FuY2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChwYXJzZWRBZGRpdGlvbmFsICYmIHBhcnNlZEFkZGl0aW9uYWwuYmFnZ2FnZUFsbG93YW5jZSkge1xyXG4gICAgICBwYXJzZWRBZGRpdGlvbmFsLmJhZ2dhZ2VBbGxvd2FuY2UuZm9yRWFjaCgoYmFnZ2FnZUFsbG93OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBiYWdnYWdlQWxsb3cuYmFnZ2FnZS5xdHkgJiZcclxuICAgICAgICAgIE51bWJlcihiYWdnYWdlQWxsb3cuYmFnZ2FnZS5xdHkpID4gdG90YWxcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRvdGFsID0gTnVtYmVyKGJhZ2dhZ2VBbGxvdy5iYWdnYWdlLnF0eSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdG90YWw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBnaXZlIHRoZSBjb3JyZWN0IGZvcm1hdCBmb3IgdHJhbnNmZXJpbmcgbWludWV0ZXMgb24gdGhlIHNsaWRlcnNcclxuICAgKiBAcGFyYW0gbWluIC0gdGhlIG1pbiBpbiAxMDB0aCdzIHRvIHRyYW5zZm9ybSBvbnRvIDYwdGgnc1xyXG4gICAqL1xyXG4gIHRyYW5zZm9ybU1pbihtaW46IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgbnVtID0gKE51bWJlcihtaW4pICogNjApIC8gMTAwO1xyXG4gICAgLy8gY29uc29sZS5sb2coJysrKyBOdW0gQ29weTogJywgXy5jbG9uZShudW0pLCAnICsrKycpO1xyXG4gICAgaWYgKG51bSAlIDEgPCAwLjUpIHtcclxuICAgICAgbnVtID0gTWF0aC5mbG9vcihudW0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbnVtID0gTWF0aC5jZWlsKG51bSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBhcHBseSBhbGwgZmlsdGVycyB0byByZXN1bHRzXHJcbiAgICogQHBhcmFtIGZpbHRlcnNcclxuICAgKiBAcGFyYW0gaW5ib3VuZFxyXG4gICAqIEBwYXJhbSByZXN1bHRzXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBhcHBseUZpbHRlcnMoZmlsdGVyczogRmxpZ2h0RmlsdGVycyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZnVsbFJlc3VsdHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBuZWVkIHRvIGZpbHRlciBvdmVyIHRoZSB0aW1lcywgc3RvcHMgYW5kIHByaWNlLCB0aG91Z2ggcHJpY2UgYW5kIHN0b3BzIGFsd2F5cyBzZWVtIHRvIGJlIHRoZSBzYW1lXHJcblxyXG4gICAgLy8gISAtIFZBUklPVVMgRlVOQ1RJT05TIFRPIFBBU1MgSU4gVE8gRE8gVEhFIEFDVFVBTCBGSUxURVJJTkdcclxuXHJcbiAgICBjb25zdCB0ZXN0ZXIgPSAoXHJcbiAgICAgIGZpbHRlcnNUb3Rlc3Q6IFJlY29yZDxudW1iZXIgfCBzdHJpbmcsIFNlbGVjdEZpbHRlcj4sXHJcbiAgICAgIHRlc3RGdW5jdGlvbjogKFxyXG4gICAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leSxcclxuICAgICAgICB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyXHJcbiAgICAgICkgPT4gYm9vbGVhblxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gT2JqZWN0LnZhbHVlcyhmaWx0ZXJzVG90ZXN0KS5maWx0ZXIoXHJcbiAgICAgICAgKGZpbHRlcjogU2VsZWN0RmlsdGVyKSA9PiBmaWx0ZXIuc2VsZWN0ZWRcclxuICAgICAgKTtcclxuICAgICAgaWYgKHNlbGVjdGVkLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gISFzZWxlY3RlZC5maW5kKChmaWx0ZXI6IFNlbGVjdEZpbHRlcikgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGVzdEZ1bmN0aW9uKGZsaWdodEl0aW5lcmFyeSwgZmlsdGVyLnZhbHVlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIChfZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGlzVGltZUJldHdlZW4gPSAoXHJcbiAgICAgIG1pbm1heDogTWluTWF4LFxyXG4gICAgICBmaWVsZDogc3RyaW5nXHJcbiAgICApOiAoKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuKSA9PiB7XHJcbiAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpOiBib29sZWFuID0+IHtcclxuICAgICAgICBjb25zdCB2YWwgPSBtb21lbnQoXHJcbiAgICAgICAgICB0aGlzLmhlbHBlcnMuZnJvbU9iamVjdChcclxuICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5LFxyXG4gICAgICAgICAgICAuLi5yZXBsYWNlRmllbGRzKGZpZWxkLCBmbGlnaHRJdGluZXJhcnkpLnNwbGl0KCcuJylcclxuICAgICAgICAgIClcclxuICAgICAgICApLmdldCgnaG91cicpO1xyXG5cclxuICAgICAgICAvLyBub3cgYXR0ZW1wdCB0byBnZXQgdGhlIG1pbiAtIG1heSBuZWVkIHRvIG5vcm1hbGlzZSB0aGlzXHJcbiAgICAgICAgY29uc3QgdmFsMiA9IG1vbWVudChcclxuICAgICAgICAgIHRoaXMuaGVscGVycy5mcm9tT2JqZWN0KFxyXG4gICAgICAgICAgICBmbGlnaHRJdGluZXJhcnksXHJcbiAgICAgICAgICAgIC4uLnJlcGxhY2VGaWVsZHMoZmllbGQsIGZsaWdodEl0aW5lcmFyeSkuc3BsaXQoJy4nKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICkuZ2V0KCdtaW51dGUnKTtcclxuXHJcbiAgICAgICAgY29uc3QgdG90YWxUaW1lOiBudW1iZXIgPSBOdW1iZXIoXHJcbiAgICAgICAgICBgJHt2YWwudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfSR7dmFsMlxyXG4gICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAucGFkU3RhcnQoMiwgJzAnKX1gXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gdG90YWxUaW1lID49IG1pbm1heC5taW4gJiYgdG90YWxUaW1lIDw9IG1pbm1heC5tYXg7XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHJlcGxhY2VGaWVsZHMgPSAoXHJcbiAgICAgIGZpZWxkOiBzdHJpbmcsXHJcbiAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5XHJcbiAgICApOiBzdHJpbmcgPT4ge1xyXG4gICAgICByZXR1cm4gZmllbGRcclxuICAgICAgICAucmVwbGFjZSgnT1VUQk9VTkRfREVQQVJUVVJFJywgJ291dGJvdW5kRmxpZ2h0cy4wJylcclxuICAgICAgICAucmVwbGFjZShcclxuICAgICAgICAgICdPVVRCT1VORF9BUlJJVkFMJyxcclxuICAgICAgICAgICdvdXRib3VuZEZsaWdodHMuJyArIChmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDEpXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5yZXBsYWNlKCdJTkJPVU5EX0RFUEFSVFVSRScsICdpbmJvdW5kRmxpZ2h0cy4wJylcclxuICAgICAgICAucmVwbGFjZShcclxuICAgICAgICAgICdJTkJPVU5EX0FSUklWQUwnLFxyXG4gICAgICAgICAgJ2luYm91bmRGbGlnaHRzLicgK1xyXG4gICAgICAgICAgICAoKGZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cyB8fCBbXSkubGVuZ3RoIC0gMSlcclxuICAgICAgICApO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBpc0JldHdlZW4gPSAoXHJcbiAgICAgIG1pbm1heDogTWluTWF4LFxyXG4gICAgICBmaWVsZDogc3RyaW5nXHJcbiAgICApOiAoKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuKSA9PiB7XHJcbiAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpOiBib29sZWFuID0+IHtcclxuICAgICAgICBjb25zdCB2YWwgPSB0aGlzLmhlbHBlcnMuZnJvbU9iamVjdChcclxuICAgICAgICAgIGZsaWdodEl0aW5lcmFyeSxcclxuICAgICAgICAgIC4uLnJlcGxhY2VGaWVsZHMoZmllbGQsIGZsaWdodEl0aW5lcmFyeSkuc3BsaXQoJy4nKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIHZhbCA+PSBtaW5tYXgubWluICYmIHZhbCA8PSBtaW5tYXgubWF4O1xyXG4gICAgICB9O1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBmaWVsZEhhc1ZhbHVlID0gKFxyXG4gICAgICBmaWVsZDoga2V5b2YgRmxpZ2h0Sm91cm5leVxyXG4gICAgKTogKChmbGlnaHQ6IEZsaWdodEpvdXJuZXksIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpID0+IGJvb2xlYW4pID0+IHtcclxuICAgICAgcmV0dXJuIChmbGlnaHQ6IEZsaWdodEpvdXJuZXksIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcclxuICAgICAgICByZXR1cm4gZmxpZ2h0W2ZpZWxkXSA9PT0gdmFsdWU7XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIC8vICEgLSBPdXRib3VuZCBhbmQgSW5ib3VuZCBGaWx0ZXJzXHJcblxyXG4gICAgY29uc3Qgb3V0SXRpbmVyYXJ5VGVzdGVyczogKChcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnlcclxuICAgICkgPT4gYm9vbGVhbilbXSA9IFtdO1xyXG4gICAgY29uc3QgaW5JdGluZXJhcnlUZXN0ZXJzOiAoKFxyXG4gICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeVxyXG4gICAgKSA9PiBib29sZWFuKVtdID0gW107XHJcblxyXG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICBpc1RpbWVCZXR3ZWVuKGZpbHRlcnMuYXJyaXZhbFRpbWUsICdPVVRCT1VORF9BUlJJVkFMLmRhdGVUaW1lQXJyaXZpbmcnKVxyXG4gICAgKTtcclxuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgaXNUaW1lQmV0d2VlbihcclxuICAgICAgICBmaWx0ZXJzLmRlcGFydHVyZVRpbWUsXHJcbiAgICAgICAgJ09VVEJPVU5EX0RFUEFSVFVSRS5kYXRlVGltZURlcGFydGluZydcclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goaXNCZXR3ZWVuKGZpbHRlcnMucHJpY2UsICd0b3RhbC5wcmljZScpKTtcclxuXHJcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgaXNUaW1lQmV0d2VlbihcclxuICAgICAgICBmaWx0ZXJzLnJldHVybkFycml2YWxUaW1lLFxyXG4gICAgICAgICdJTkJPVU5EX0FSUklWQUwuZGF0ZVRpbWVBcnJpdmluZydcclxuICAgICAgKVxyXG4gICAgKTtcclxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICBpc1RpbWVCZXR3ZWVuKFxyXG4gICAgICAgIGZpbHRlcnMucmV0dXJuRGVwYXJ0dXJlVGltZSxcclxuICAgICAgICAnSU5CT1VORF9ERVBBUlRVUkUuZGF0ZVRpbWVEZXBhcnRpbmcnXHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgLy8gISAtIFRlc3RlcnNcclxuICAgIGNvbnN0IG91dEpvdXJuZXlUZXN0ZXJzOiAoKFxyXG4gICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXlcclxuICAgICkgPT4gYm9vbGVhbilbXSA9IFtdO1xyXG5cclxuICAgIG91dEpvdXJuZXlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihmaWx0ZXJzLmNsYXNzZXMsIGZpZWxkSGFzVmFsdWUoJ2NhYmluQ2xhc3MnKSlcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgaW5Kb3VybmV5VGVzdGVyczogKChcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5XHJcbiAgICApID0+IGJvb2xlYW4pW10gPSBbXTtcclxuXHJcbiAgICBpbkpvdXJuZXlUZXN0ZXJzLnB1c2godGVzdGVyKGZpbHRlcnMuY2xhc3NlcywgZmllbGRIYXNWYWx1ZSgnY2FiaW5DbGFzcycpKSk7XHJcblxyXG4gICAgLy8gIS0gSXRpbmVyYXJpZXNcclxuICAgIGNvbnN0IG91dEZpbHRlckl0aW5lcmFyaWVzID0gKFxyXG4gICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSxcclxuICAgICAgZ3JvdXBJbmRleDogbnVtYmVyXHJcbiAgICApOiBib29sZWFuID0+IHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnJlZHVjZShcclxuICAgICAgICAgIChcclxuICAgICAgICAgICAgYWNjOiBib29sZWFuLFxyXG4gICAgICAgICAgICB0ZXN0ZXIxOiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW5cclxuICAgICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICBhY2MgPSBhY2MgJiYgdGVzdGVyMShmbGlnaHRJdGluZXJhcnkpO1xyXG4gICAgICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApICYmXHJcbiAgICAgICAgKCFmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzIHx8XHJcbiAgICAgICAgICAhIShmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzIHx8IFtdKS5maW5kKFxyXG4gICAgICAgICAgICAoZmxpZ2h0Sm91cm5leTogRmxpZ2h0Sm91cm5leSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiAhIW91dEpvdXJuZXlUZXN0ZXJzLnJlZHVjZShcclxuICAgICAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgICAgYWNjOiBib29sZWFuLFxyXG4gICAgICAgICAgICAgICAgICB0ZXN0ZXIyOiAoXHJcbiAgICAgICAgICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5XHJcbiAgICAgICAgICAgICAgICAgICkgPT4gYm9vbGVhblxyXG4gICAgICAgICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBhY2MgJiYgdGVzdGVyMihmbGlnaHRKb3VybmV5KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSlcclxuICAgICAgKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaW5GaWx0ZXJJdGluZXJhcmllcyA9IChcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksXHJcbiAgICAgIGdyb3VwSW5kZXg6IG51bWJlclxyXG4gICAgKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgaW5JdGluZXJhcnlUZXN0ZXJzLnJlZHVjZShcclxuICAgICAgICAgIChcclxuICAgICAgICAgICAgYWNjOiBib29sZWFuLFxyXG4gICAgICAgICAgICB0ZXN0ZXIxOiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW5cclxuICAgICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gYWNjICYmIHRlc3RlcjEoZmxpZ2h0SXRpbmVyYXJ5KTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB0cnVlXHJcbiAgICAgICAgKSAmJlxyXG4gICAgICAgICghZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzPy5sZW5ndGggfHxcclxuICAgICAgICAgICEhKGZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cyB8fCBbXSkuZmluZChcclxuICAgICAgICAgICAgKGZsaWdodEpvdXJuZXk6IEZsaWdodEpvdXJuZXkpOiBib29sZWFuID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gISFpbkpvdXJuZXlUZXN0ZXJzLnJlZHVjZShcclxuICAgICAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgICAgYWNjOiBib29sZWFuLFxyXG4gICAgICAgICAgICAgICAgICB0ZXN0ZXIyOiAoXHJcbiAgICAgICAgICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5XHJcbiAgICAgICAgICAgICAgICAgICkgPT4gYm9vbGVhblxyXG4gICAgICAgICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBhY2MgJiYgdGVzdGVyMihmbGlnaHRKb3VybmV5KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSlcclxuICAgICAgKTtcclxuICAgIH07XHJcblxyXG4gICAgLy8gbm93IGZpbmFsbHkgcGVyZm9ybSB0aGUgZmlsdGVyaW5nIGFuZCBnbyBvdmVyIHRoZSByZXN1bHRzXHJcbiAgICAvLyBUT0RPIC0gYWRkIHRoZSBhZGRpdGlvbmFsIHN0dWZmIG5lZWRlZCBmb3IgR3JvdXBlZEZsaWdodHMgKExpZ2h0bmluZylcclxuXHJcbiAgICBjb25zdCBmdWxsUmVzdWx0c0Nsb25lID0gPGFueT50aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5mdWxsUmVzdWx0cyk7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmdWxsUmVzdWx0c0Nsb25lLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGZ1bGxSZXN1bHQgPSBmdWxsUmVzdWx0c0Nsb25lW2ldO1xyXG4gICAgICBmdWxsUmVzdWx0LmpvdXJuZXlzID0gZnVsbFJlc3VsdC5qb3VybmV5cy5maWx0ZXIob3V0RmlsdGVySXRpbmVyYXJpZXMpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXNSZXR1cm4pIHtcclxuICAgICAgICBmdWxsUmVzdWx0LmpvdXJuZXlzID0gZnVsbFJlc3VsdC5qb3VybmV5cy5maWx0ZXIoaW5GaWx0ZXJJdGluZXJhcmllcyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZ1bGxSZXN1bHQuam91cm5leXMgPSBmdWxsUmVzdWx0LmpvdXJuZXlzO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KGZ1bGxSZXN1bHRzQ2xvbmUpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2VsZWN0R3JvdXBlZEV1cm9zdGFyKFxyXG4gICAgc2VsZWN0ZWRFdXJvc3RhcjogRXVyb3N0YXJJdGVtLFxyXG4gICAgZmFyZTogRXVyb3N0YXJGYXJlLFxyXG4gICAgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtXHJcbiAgKSB7XHJcbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID1cclxuICAgICAgYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcclxuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcclxuICAgIC8vIG9uZSB3YXkgZWFzeVxyXG4gICAgaWYgKFxyXG4gICAgICBiYXNrZXQgJiZcclxuICAgICAgdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2guY2hvc2VuU2VhcmNoVHlwZSA9PT0gRXVyb3N0YXJTZWFyY2hUeXBlLm9uZVdheSAmJlxyXG4gICAgICBkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmRcclxuICAgICkge1xyXG4gICAgICB0aGlzLmRvQm9va2luZyhcclxuICAgICAgICBpbnRCYXNrZXQsXHJcbiAgICAgICAgc2VsZWN0ZWRFdXJvc3RhcixcclxuICAgICAgICB7XHJcbiAgICAgICAgICBvdXRib3VuZEZsaWdodHM6IFt0aGlzLm1ha2VTY2hlbWFGbGlnaHRzKGZhcmUuZmFyZSwgJ291dGJvdW5kJywgMCldLFxyXG4gICAgICAgICAgaW5ib3VuZEZsaWdodHM6IFtdLFxyXG4gICAgICAgICAgam91cm5leVR5cGU6ICdzaW5nbGUnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZWxlY3RlZEV1cm9zdGFyLmRhdGVEZXBhcnR1cmUsXHJcbiAgICAgICAgbnVsbCxcclxuICAgICAgICBmYXJlLnByaWNlLFxyXG4gICAgICAgIHNlbGVjdGVkRXVyb3N0YXIucmVxdWlyZXNSZWFzb25cclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gcmV0dXJuIGxvZ2ljIG5lZWRzIHVwZGF0aW5nIC0gZWl0aGVyIGFjY2VwdCBvdXRib3VuZCBvciByZXR1cm4gYW5kIHNvbWVob3cgZGlzdGlndWlzaCB0aGVtXHJcbiAgICBpZiAoXHJcbiAgICAgIGJhc2tldCAmJlxyXG4gICAgICB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaC5jaG9zZW5TZWFyY2hUeXBlID09PSBFdXJvc3RhclNlYXJjaFR5cGUucmV0dXJuXHJcbiAgICApIHtcclxuICAgICAgLy8gY2xpY2tlZCBvbiBhbiBvdXRib3VuZCBldXJvc3RhclxyXG4gICAgICBpZiAoZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kKSB7XHJcbiAgICAgICAgLy8gZ2l2ZW4gdGhlIG91dGJvdW5kIGJ1dCB3ZSBhbHJlYWR5IGhhdmUgaW5ib3VuZCBzZWxlY3RlZFxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEV1cm9zdGFyPy5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uSW5ib3VuZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgLy8gTFUgbG9naWMgc2hvd3MgdGhlIGJpZ2dlc3QgcHJpY2UgYWNyb3NzIG91dGJvdW5kIGFuZCByZXR1cm5cclxuICAgICAgICAgIGNvbnN0IHByaWNlID1cclxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRFdXJvc3RhckZhcmUuaXRlbS5wcmljZSA+IGZhcmUucHJpY2VcclxuICAgICAgICAgICAgICA/IHRoaXMuX3NlbGVjdGVkRXVyb3N0YXJGYXJlLml0ZW0ucHJpY2VcclxuICAgICAgICAgICAgICA6IGZhcmUucHJpY2U7XHJcbiAgICAgICAgICB0aGlzLmRvQm9va2luZyhcclxuICAgICAgICAgICAgaW50QmFza2V0LFxyXG4gICAgICAgICAgICBzZWxlY3RlZEV1cm9zdGFyLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgaW5ib3VuZEZsaWdodHM6IFtcclxuICAgICAgICAgICAgICAgIHRoaXMubWFrZVNjaGVtYUZsaWdodHMoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkRXVyb3N0YXJGYXJlLml0ZW0uZmFyZSxcclxuICAgICAgICAgICAgICAgICAgJ2luYm91bmQnLFxyXG4gICAgICAgICAgICAgICAgICAwXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICBvdXRib3VuZEZsaWdodHM6IFtcclxuICAgICAgICAgICAgICAgIHRoaXMubWFrZVNjaGVtYUZsaWdodHMoZmFyZS5mYXJlLCAnb3V0Ym91bmQnLCAwKVxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgam91cm5leVR5cGU6ICdyb3VuZHRyaXAnXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNlbGVjdGVkRXVyb3N0YXIuZGF0ZURlcGFydHVyZSxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRXVyb3N0YXIuaXRlbS5kYXRlQXJyaXZhbCxcclxuICAgICAgICAgICAgcHJpY2UsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkRXVyb3N0YXIucmVxdWlyZXNSZWFzb25cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0ZWRGYXJlcygpO1xyXG4gICAgICAgICAgdGhpcy5iYXNrZXRTZXJ2aWNlLnRvZ2dsZU1lbnUoKTtcclxuICAgICAgICAgIHRoaXMucmVzdWx0cy5uZXh0KFxyXG4gICAgICAgICAgICAodGhpcy5mdWxsUmVzdWx0cyBhcyBFdXJvc3RhclJlc3VsdHNbXSkubWFwKFxyXG4gICAgICAgICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWRGbGFnc1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBFdXJvc3Rhcj8uZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0ZWRGYXJlcygpO1xyXG4gICAgICAgICAgLy8gd2UgaGF2ZSBhbiBvdXRib3VuZCBhbHJlYWR5IHNlbGVjdGVkIC0gZGVzZWxlY3QgaXRcclxuICAgICAgICAgIHRoaXMucmVzdWx0cy5uZXh0KHRoaXMuZnVsbFJlc3VsdHMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyB3ZSBkb250IGhhdmUgYW4gaW5ib3VuZCBzZWxlY3RlZFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRXVyb3N0YXIgPSB7XHJcbiAgICAgICAgICAgIGl0ZW06IHNlbGVjdGVkRXVyb3N0YXIsXHJcbiAgICAgICAgICAgIGRpcmVjdGlvblxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuX3NlbGVjdGVkRXVyb3N0YXJGYXJlID0ge1xyXG4gICAgICAgICAgICBpdGVtOiBmYXJlLFxyXG4gICAgICAgICAgICBkaXJlY3Rpb25cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHNlbGVjdGVkRXVyb3N0YXIudWlkO1xyXG4gICAgICAgICAgLy8gZmlsdGVyIG9uIG91dGJvdW5kcyBhcyB3ZSBoYXZlIHNlbGVjdGVkIGFuZCBhZGRlZCBhbiBvdXRib3VuZFxyXG4gICAgICAgICAgdGhpcy5yZXN1bHRzLm5leHQoXHJcbiAgICAgICAgICAgICh0aGlzLmZ1bGxSZXN1bHRzIGFzIEV1cm9zdGFyUmVzdWx0c1tdKS5tYXAoXHJcbiAgICAgICAgICAgICAgKHJlc3VsdDogRXVyb3N0YXJSZXN1bHRzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvdXRib3VuZCA9IHJlc3VsdC5vdXRib3VuZC5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgIChpdGVtOiBFdXJvc3Rhckl0ZW0pID0+IGluZGV4ID09PSBpdGVtLnVpZFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGluYm91bmQ6IHJlc3VsdC5pbmJvdW5kLCBvdXRib3VuZCB9O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkluYm91bmQpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBFdXJvc3Rhcj8uZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAvLyBlc3NlbnRpYWxseSBhZGQgYXMgd2UgZGlkIGJlZm9yZVxyXG4gICAgICAgICAgY29uc3QgcHJpY2UgPVxyXG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEV1cm9zdGFyRmFyZS5pdGVtLnByaWNlID4gZmFyZS5wcmljZVxyXG4gICAgICAgICAgICAgID8gdGhpcy5fc2VsZWN0ZWRFdXJvc3RhckZhcmUuaXRlbS5wcmljZVxyXG4gICAgICAgICAgICAgIDogZmFyZS5wcmljZTtcclxuICAgICAgICAgIHRoaXMuZG9Cb29raW5nKFxyXG4gICAgICAgICAgICBpbnRCYXNrZXQsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkRXVyb3N0YXIsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBvdXRib3VuZEZsaWdodHM6IFtcclxuICAgICAgICAgICAgICAgIHRoaXMubWFrZVNjaGVtYUZsaWdodHMoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkRXVyb3N0YXJGYXJlLml0ZW0uZmFyZSxcclxuICAgICAgICAgICAgICAgICAgJ291dGJvdW5kJyxcclxuICAgICAgICAgICAgICAgICAgMFxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgaW5ib3VuZEZsaWdodHM6IFt0aGlzLm1ha2VTY2hlbWFGbGlnaHRzKGZhcmUuZmFyZSwgJ2luYm91bmQnLCAwKV0sXHJcbiAgICAgICAgICAgICAgam91cm5leVR5cGU6ICdyb3VuZHRyaXAnXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNlbGVjdGVkRXVyb3N0YXIuZGF0ZURlcGFydHVyZSxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRXVyb3N0YXIuaXRlbS5kYXRlQXJyaXZhbCxcclxuICAgICAgICAgICAgcHJpY2UsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkRXVyb3N0YXIucmVxdWlyZXNSZWFzb25cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0ZWRGYXJlcygpO1xyXG4gICAgICAgICAgdGhpcy5iYXNrZXRTZXJ2aWNlLnRvZ2dsZU1lbnUoKTtcclxuICAgICAgICAgIHRoaXMucmVzdWx0cy5uZXh0KFxyXG4gICAgICAgICAgICAodGhpcy5mdWxsUmVzdWx0cyBhcyBFdXJvc3RhclJlc3VsdHNbXSkubWFwKFxyXG4gICAgICAgICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWRGbGFnc1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBFdXJvc3Rhcj8uZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkluYm91bmRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3RlZEZhcmVzKCk7XHJcblxyXG4gICAgICAgICAgdGhpcy5yZXN1bHRzLm5leHQodGhpcy5mdWxsUmVzdWx0cyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEV1cm9zdGFyID0ge1xyXG4gICAgICAgICAgICBpdGVtOiBzZWxlY3RlZEV1cm9zdGFyLFxyXG4gICAgICAgICAgICBkaXJlY3Rpb25cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLl9zZWxlY3RlZEV1cm9zdGFyRmFyZSA9IHtcclxuICAgICAgICAgICAgaXRlbTogZmFyZSxcclxuICAgICAgICAgICAgZGlyZWN0aW9uXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSBzZWxlY3RlZEV1cm9zdGFyLnVpZDtcclxuICAgICAgICAgIC8vIGZpbHRlciBvbiBvdXRib3VuZHMgYXMgd2UgaGF2ZSBzZWxlY3RlZCBhbmQgYWRkZWQgYW4gb3V0Ym91bmRcclxuICAgICAgICAgIHRoaXMucmVzdWx0cy5uZXh0KFxyXG4gICAgICAgICAgICAodGhpcy5mdWxsUmVzdWx0cyBhcyBFdXJvc3RhclJlc3VsdHNbXSkubWFwKFxyXG4gICAgICAgICAgICAgIChyZXN1bHQ6IEV1cm9zdGFyUmVzdWx0cykgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5ib3VuZCA9IHJlc3VsdC5pbmJvdW5kLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgKGl0ZW06IEV1cm9zdGFySXRlbSkgPT4gaW5kZXggPT09IGl0ZW0udWlkXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgaW5ib3VuZCwgb3V0Ym91bmQ6IHJlc3VsdC5vdXRib3VuZCB9O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcmVzZXRTZWxlY3RlZEZhcmVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwRXVyb3N0YXIgPSB7XHJcbiAgICAgIGRpcmVjdGlvbjogbnVsbCxcclxuICAgICAgaXRlbTogbnVsbFxyXG4gICAgfTtcclxuICAgIHRoaXMuX3NlbGVjdGVkRXVyb3N0YXJGYXJlID0ge1xyXG4gICAgICBkaXJlY3Rpb246IG51bGwsXHJcbiAgICAgIGl0ZW06IG51bGxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICByZW1vdmVTZWxlY3RlZEZsYWdzKHJlc3VsdDogRXVyb3N0YXJSZXN1bHRzKTogRXVyb3N0YXJSZXN1bHRzIHtcclxuICAgIGNvbnN0IGluYm91bmQgPSByZXN1bHQuaW5ib3VuZC5tYXAoKGl0ZW06IEV1cm9zdGFySXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnN0YW5kYXJkUHJlbWllckZhcmUuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgaXRlbS5zdGFuZGFyZEZhcmUuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgaXRlbS5idXNpbmVzc1ByZW1pZXJGYXJlLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBvdXRib3VuZCA9IHJlc3VsdC5vdXRib3VuZC5tYXAoKGl0ZW06IEV1cm9zdGFySXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnN0YW5kYXJkUHJlbWllckZhcmUuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgaXRlbS5zdGFuZGFyZEZhcmUuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgaXRlbS5idXNpbmVzc1ByZW1pZXJGYXJlLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4geyBpbmJvdW5kLCBvdXRib3VuZCB9O1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0czogRXVyb3N0YXJRdW90ZVJlc3VsdEFycmF5KTogSUNoZWFwZXN0UHJpY2Uge1xyXG4gICAgaWYgKCFyZXN1bHRzLmxlbmd0aCB8fCB0aGlzLnNlYXJjaFNlcnZpY2UuaXNGbGlnaHRzR3JvdXBlZCgpKSByZXR1cm47XHJcbiAgICBjb25zdCByZXN1bHQgPSByZXN1bHRzWzBdIGFzIEV1cm9zdGFyUXVvdGVSZXN1bHQ7XHJcbiAgICBjb25zdCBqb3VybmV5cyA9IHJlc3VsdC5qb3VybmV5cztcclxuICAgIGlmICgham91cm5leXMubGVuZ3RoKSByZXR1cm47XHJcbiAgICBjb25zdCBjdXJyZW5jeSA9IGpvdXJuZXlzWzBdLnRvdGFsLmN1cnJlbmN5O1xyXG4gICAgcmV0dXJuIGpvdXJuZXlzLnJlZHVjZShcclxuICAgICAgKGNoZWFwZXN0UHJpY2U6IElDaGVhcGVzdFByaWNlLCByZXN1bHQ6IEZsaWdodEl0aW5lcmFyeSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHByaWNlID0gcmVzdWx0LnRvdGFsLnByaWNlO1xyXG4gICAgICAgIGlmIChjaGVhcGVzdFByaWNlLmFtb3VudCA+IHByaWNlKSBjaGVhcGVzdFByaWNlLmFtb3VudCA9IHByaWNlO1xyXG4gICAgICAgIHJldHVybiBjaGVhcGVzdFByaWNlO1xyXG4gICAgICB9LFxyXG4gICAgICB7IGFtb3VudDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsIGN1cnJlbmN5Q29kZTogY3VycmVuY3kgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRvQm9va2luZyhcclxuICAgIGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UsXHJcbiAgICBzZWxlY3RlZEZsaWdodDogRXVyb3N0YXJJdGVtLFxyXG4gICAgc2NoZW1hRGV0YWlsczogYW55LFxyXG4gICAgb3V0Ym91bmREYXRlOiBzdHJpbmcsXHJcbiAgICBpbmJvdW5kRGF0ZTogc3RyaW5nLFxyXG4gICAgcHJpY2U6IG51bWJlcixcclxuICAgIHJlcXVpcmVzUmVhc29uOiBib29sZWFuXHJcbiAgKTogUHJvbWlzZTxEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zPiB7XHJcbiAgICBjb25zdCB7IHNvdXJjZUlkLCBjbzJQZXJJdGVtLCBjbzJQZXJQYXNzZW5nZXIsIHRvdGFsIH0gPSBzZWxlY3RlZEZsaWdodDtcclxuICAgIGNvbnN0IGJvb2tpbmc6IEFkZEl0ZW1Ub0Jhc2tldE11dGF0aW9uVmFyaWFibGVzID0ge1xyXG4gICAgICBhZHVsdHM6IHRoaXMuYWR1bHRzLFxyXG4gICAgICBiYXNrZXQ6IGludEJhc2tldC5pZCxcclxuICAgICAgY2hpbGRyZW46IHRoaXMuY2hpbGRyZW4sXHJcbiAgICAgIGNvMlBlckl0ZW0sXHJcbiAgICAgIGNvMlBlclBhc3NlbmdlcixcclxuICAgICAgY3VycmVuY3k6IHRvdGFsLmN1cnJlbmN5IGFzIEN1cnJlbmN5Q29kZSxcclxuICAgICAgZGV0YWlsOiBzY2hlbWFEZXRhaWxzLFxyXG4gICAgICBwcmljZSxcclxuICAgICAgc2VhcmNoUXVlcnk6IHRoaXMucmVzdWx0UXVlcnksXHJcbiAgICAgIHNlcnZpY2U6IHNvdXJjZUlkLnRvU3RyaW5nKCksXHJcbiAgICAgIG91dGJvdW5kRGF0ZVxyXG4gICAgfTtcclxuICAgIGlmIChpbmJvdW5kRGF0ZSkge1xyXG4gICAgICBib29raW5nLmluYm91bmREYXRlID0gaW5ib3VuZERhdGU7XHJcbiAgICB9XHJcbiAgICBjb25zdCB3aGF0SGFwcGVuZWQgPSBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgIGJvb2tpbmcsXHJcbiAgICAgIGludEJhc2tldCxcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxyXG4gICAgICB0aGlzLnRyYXZlbGxlcnMsXHJcbiAgICAgIHJlcXVpcmVzUmVhc29uXHJcbiAgICApO1xyXG4gICAgaWYgKHdoYXRIYXBwZW5lZCA9PT0gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5yZXNlYXJjaCkge1xyXG4gICAgICB0aGlzLnBlcmZvcm1TZWFyY2goKTtcclxuICAgIH1cclxuICAgIHJldHVybiB3aGF0SGFwcGVuZWQ7XHJcbiAgfVxyXG5cclxuICBtYWtlU2NoZW1hRmxpZ2h0cyhcclxuICAgIHNlbGVjdGVkRmxpZ2h0OiBGbGlnaHRKb3VybmV5LFxyXG4gICAgZmxpZ2h0R3JvdXA6ICdvdXRib3VuZCcgfCAnaW5ib3VuZCcsXHJcbiAgICBncm91cEluZGV4OiBudW1iZXIsXHJcbiAgICBzZWdtZW50SW5kZXg/OiBudW1iZXJcclxuICApOiBhbnkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgLi4uc2VsZWN0ZWRGbGlnaHQsXHJcbiAgICAgIGpvdXJuZXlJbmZvOiB7XHJcbiAgICAgICAgZmxpZ2h0R3JvdXAsXHJcbiAgICAgICAgZ3JvdXBJbmRleCxcclxuICAgICAgICBzZWdtZW50SW5kZXhcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlR3JvdXBlZEl0ZW0oXHJcbiAgICByZXR1cm5PYmplY3Q6IEV1cm9zdGFyR3JvdXBlZFF1b3RlUmVzdWx0LFxyXG4gICAgc291cmNlOiBzdHJpbmcsXHJcbiAgICBvdXRib3VuZEZsaWdodHM6IEZsaWdodEpvdXJuZXlbXSxcclxuICAgIG91dGJvdW5kVG90YWxEdXJhdGlvbjogbnVtYmVyLFxyXG4gICAgaW5ib3VuZEZsaWdodHM6IEZsaWdodEpvdXJuZXlbXSxcclxuICAgIGluYm91bmRUb3RhbER1cmF0aW9uOiBudW1iZXJcclxuICApIHtcclxuICAgIGlmIChvdXRib3VuZEZsaWdodHM/Lmxlbmd0aCAmJiAhcmV0dXJuT2JqZWN0LmRlcGFydERhdGVUaW1lKSB7XHJcbiAgICAgIGNvbnN0IGZpcnN0ID0gb3V0Ym91bmRGbGlnaHRzWzBdO1xyXG4gICAgICBjb25zdCBsYXN0ID0gb3V0Ym91bmRGbGlnaHRzW291dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXTtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm9yaWdpbkFpcnBvcnQgPSBmaXJzdC5vcmlnaW5BaXJwb3J0O1xyXG4gICAgICByZXR1cm5PYmplY3Qub3JpZ2luQWlycG9ydE5hbWUgPSBmaXJzdC5vcmlnaW5BaXJwb3J0TmFtZTtcclxuICAgICAgcmV0dXJuT2JqZWN0LmRlc3RpbmF0aW9uQWlycG9ydCA9IGxhc3QuZGVzdGluYXRpb25BaXJwb3J0O1xyXG4gICAgICByZXR1cm5PYmplY3QuZGVzdGluYXRpb25BaXJwb3J0TmFtZSA9IGxhc3QuZGVzdGluYXRpb25BaXJwb3J0TmFtZTtcclxuICAgICAgcmV0dXJuT2JqZWN0LmRlcGFydERhdGVUaW1lID0gZmlyc3QuZGF0ZVRpbWVEZXBhcnRpbmc7XHJcbiAgICAgIHJldHVybk9iamVjdC5hcnJpdmFsRGF0ZVRpbWUgPSBsYXN0LmRhdGVUaW1lQXJyaXZpbmc7XHJcbiAgICAgIHJldHVybk9iamVjdC5vdXRib3VuZFRvdGFsRHVyYXRpb24gPSBvdXRib3VuZFRvdGFsRHVyYXRpb247XHJcbiAgICAgIHJldHVybk9iamVjdC5kYXRhU291cmNlID0gc291cmNlO1xyXG4gICAgICByZXR1cm5PYmplY3Qub3BlcmF0b3IgPSBmaXJzdC5vcGVyYXRpbmdDYXJyaWVyO1xyXG4gICAgICByZXR1cm5PYmplY3Qub3BlcmF0b3JGdWxsID0gZmlyc3Qub3BlcmF0aW5nQ2Fycmllck5hbWU7XHJcbiAgICAgIHJldHVybk9iamVjdC5vdXRsZWdzQ291bnQgPSBvdXRib3VuZEZsaWdodHMubGVuZ3RoO1xyXG4gICAgICByZXR1cm5PYmplY3Qub3V0bGVncyA9IG91dGJvdW5kRmxpZ2h0cztcclxuICAgICAgcmV0dXJuT2JqZWN0Lm91dGJvdW5kRmxpZ2h0TnVtYmVyID1cclxuICAgICAgICB0aGlzLmhlbHBlcnMuam9pbkZyb21BdHRyaWJ1dGU8RmxpZ2h0Sm91cm5leT4oXHJcbiAgICAgICAgICAnLScsXHJcbiAgICAgICAgICAnb3BlcmF0aW5nRmxpZ2h0TnVtYmVyJyxcclxuICAgICAgICAgIG91dGJvdW5kRmxpZ2h0c1xyXG4gICAgICAgICk7XHJcblxyXG4gICAgICByZXR1cm5PYmplY3QuaXNSZXR1cm4gPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5ib3VuZEZsaWdodHM/Lmxlbmd0aCAmJiAhcmV0dXJuT2JqZWN0LmluYm91bmRUb3RhbER1cmF0aW9uKSB7XHJcbiAgICAgIHJldHVybk9iamVjdC5pbmJvdW5kVG90YWxEdXJhdGlvbiA9IGluYm91bmRUb3RhbER1cmF0aW9uO1xyXG4gICAgICByZXR1cm5PYmplY3QuaW5sZWdzQ291bnQgPSBpbmJvdW5kRmxpZ2h0cy5sZW5ndGg7XHJcbiAgICAgIHJldHVybk9iamVjdC5pbmxlZ3MgPSBpbmJvdW5kRmxpZ2h0cztcclxuICAgICAgcmV0dXJuT2JqZWN0LmluYm91bmRGbGlnaHROdW1iZXIgPVxyXG4gICAgICAgIHRoaXMuaGVscGVycy5qb2luRnJvbUF0dHJpYnV0ZTxGbGlnaHRKb3VybmV5PihcclxuICAgICAgICAgICctJyxcclxuICAgICAgICAgICdvcGVyYXRpbmdGbGlnaHROdW1iZXInLFxyXG4gICAgICAgICAgaW5ib3VuZEZsaWdodHNcclxuICAgICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuT2JqZWN0LmlzUmV0dXJuID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBtYWtlU2Vzc2lvblJlc3VsdHMoXHJcbiAgICBkYXRhOiBFdXJvc3RhclF1b3RlUmVzdWx0QXJyYXlcclxuICApOiBFdXJvc3RhclNlc3Npb25UeXBlIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlc3VsdHM6IFtdLFxyXG4gICAgICBncm91cERhdGE6IFtdLFxyXG4gICAgICBncm91cGVkOiBbXSxcclxuICAgICAgcXVlcnk6IHRoaXMucmVzdWx0UXVlcnlcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXRNaW5GbGlnaHRQcmljZUZvckJyYW5kKG1hdGNoaW5nQnJhbmRGbGlnaHRzOiBGbGlnaHRJdGluZXJhcnlbXSk6IG51bWJlciB7XHJcbiAgICBsZXQgbWluID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XHJcbiAgICBtYXRjaGluZ0JyYW5kRmxpZ2h0cy5mb3JFYWNoKChmbGlnaHQpID0+IHtcclxuICAgICAgaWYgKG1pbiA+IGZsaWdodD8udG90YWw/LnByaWNlKSB7XHJcbiAgICAgICAgbWluID0gZmxpZ2h0LnRvdGFsLnByaWNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBtaW47XHJcbiAgfVxyXG5cclxuICBnZXRNYXhGbGlnaHRQcmljZUZvckJyYW5kKG1hdGNoaW5nQnJhbmRGbGlnaHRzOiBGbGlnaHRJdGluZXJhcnlbXSk6IG51bWJlciB7XHJcbiAgICBsZXQgbWF4ID0gMDtcclxuICAgIG1hdGNoaW5nQnJhbmRGbGlnaHRzLmZvckVhY2goKGZsaWdodCkgPT4ge1xyXG4gICAgICBpZiAobWF4IDwgZmxpZ2h0Py50b3RhbD8ucHJpY2UpIHtcclxuICAgICAgICBtYXggPSBmbGlnaHQudG90YWwucHJpY2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG1heDtcclxuICB9XHJcblxyXG4gIGlzT3Zlck5pZ2h0KCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qgb3V0d2FyZERheSA9IHRoaXMub3V0Qm91bmREYXRlLmRhdGUoKTtcclxuICAgIGNvbnN0IHJldHVybkRheSA9IHRoaXMuaW5ib3VuZERhdGUuZGF0ZSgpO1xyXG4gICAgaWYgKHJldHVybkRheSAtIG91dHdhcmREYXkgPj0gMSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIG1pblRvSG91ciA9IChkdXI6IG51bWJlcik6IHN0cmluZyA9PiBgJHtNYXRoLmZsb29yKGR1ciAvIDYwKX1oICR7ZHVyICUgNjB9bWA7XHJcblxyXG4gIGFzeW5jIGFkZEV1cm9zdGFySm91cm5leXNUb0Jhc2tldChcclxuICAgIGV1cm9zdGFyUXVvdGU6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zXHJcbiAgKTogUHJvbWlzZTxEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zPiB7XHJcbiAgICBpZiAoZXVyb3N0YXJRdW90ZS51bmF2YWlsYWJsZSkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPVxyXG4gICAgICBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xyXG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xyXG4gICAgaWYgKGJhc2tldCkge1xyXG4gICAgICBjb25zdCB7IHNvdXJjZUlkLCBjbzJQZXJJdGVtLCBjbzJQZXJQYXNzZW5nZXIsIHRvdGFsIH0gPSBldXJvc3RhclF1b3RlO1xyXG4gICAgICBjb25zdCBvdXRib3VuZERhdGU6IGFueSA9IG1vbWVudChcclxuICAgICAgICBldXJvc3RhclF1b3RlLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZ1xyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBpbmJvdW5kRGF0ZTogYW55ID0gZXVyb3N0YXJRdW90ZS5pbmJvdW5kRmxpZ2h0cy5sZW5ndGhcclxuICAgICAgICA/IG1vbWVudChldXJvc3RhclF1b3RlLmluYm91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKVxyXG4gICAgICAgIDogbnVsbDtcclxuICAgICAgY29uc3QgdGVybXNBbmRDb25kaXRpb25zID0gdGhpcy5nZXRUZXJtc0FuZENvbmQoZXVyb3N0YXJRdW90ZSk7XHJcbiAgICAgIGNvbnN0IHNjaGVtYURldGFpbHMgPSB7XHJcbiAgICAgICAgb3V0Ym91bmRGbGlnaHRzOiBbXHJcbiAgICAgICAgICAuLi5ldXJvc3RhclF1b3RlLm91dGJvdW5kRmxpZ2h0cy5tYXAoXHJcbiAgICAgICAgICAgIChmbGlnaHQ6IEZsaWdodEpvdXJuZXksIHNlZ21lbnRJbmRleDogbnVtYmVyKSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMubWFrZVNjaGVtYUZsaWdodHMoZmxpZ2h0LCAnb3V0Ym91bmQnLCAwLCBzZWdtZW50SW5kZXgpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgXSxcclxuICAgICAgICBpbmJvdW5kRmxpZ2h0czogW1xyXG4gICAgICAgICAgLi4uZXVyb3N0YXJRdW90ZS5pbmJvdW5kRmxpZ2h0cy5tYXAoXHJcbiAgICAgICAgICAgIChmbGlnaHQ6IEZsaWdodEpvdXJuZXksIHNlZ21lbnRJbmRleDogbnVtYmVyKSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMubWFrZVNjaGVtYUZsaWdodHMoZmxpZ2h0LCAnaW5ib3VuZCcsIDAsIHNlZ21lbnRJbmRleClcclxuICAgICAgICAgIClcclxuICAgICAgICBdLFxyXG4gICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zLFxyXG4gICAgICAgIGpvdXJuZXlUeXBlOiAnc2luZ2xlJ1xyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBib29raW5nOiBBZGRJdGVtVG9CYXNrZXRNdXRhdGlvblZhcmlhYmxlcyA9IHtcclxuICAgICAgICBhZHVsdHM6IHRoaXMuYWR1bHRzLFxyXG4gICAgICAgIGJhc2tldDogaW50QmFza2V0LmlkLFxyXG4gICAgICAgIGNoaWxkcmVuOiB0aGlzLmNoaWxkcmVuLFxyXG4gICAgICAgIGNvMlBlckl0ZW0sXHJcbiAgICAgICAgY28yUGVyUGFzc2VuZ2VyLFxyXG4gICAgICAgIGN1cnJlbmN5OiB0b3RhbC5jdXJyZW5jeSBhcyBDdXJyZW5jeUNvZGUsXHJcbiAgICAgICAgZGV0YWlsOiBzY2hlbWFEZXRhaWxzLFxyXG4gICAgICAgIHByaWNlOiB0b3RhbC5wcmljZSxcclxuICAgICAgICBzZWFyY2hRdWVyeTogdGhpcy5yZXN1bHRRdWVyeSxcclxuICAgICAgICBzZXJ2aWNlOiBzb3VyY2VJZC50b1N0cmluZygpLFxyXG4gICAgICAgIG91dGJvdW5kRGF0ZTogb3V0Ym91bmREYXRlLmZvcm1hdCgpXHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChpbmJvdW5kRGF0ZSkge1xyXG4gICAgICAgIGJvb2tpbmcuaW5ib3VuZERhdGUgPSBpbmJvdW5kRGF0ZS5mb3JtYXQoKTtcclxuICAgICAgICBzY2hlbWFEZXRhaWxzLmpvdXJuZXlUeXBlID0gJ3JvdW5kdHJpcCc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHdoYXRIYXBwZW5lZCA9IGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcclxuICAgICAgICBib29raW5nLFxyXG4gICAgICAgIGludEJhc2tldCxcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXHJcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzLFxyXG4gICAgICAgIGV1cm9zdGFyUXVvdGUucmVxdWlyZXNSZWFzb25cclxuICAgICAgKTtcclxuICAgICAgaWYgKHdoYXRIYXBwZW5lZCA9PT0gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5yZXNlYXJjaCkge1xyXG4gICAgICAgIHRoaXMucGVyZm9ybVNlYXJjaCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB3aGF0SGFwcGVuZWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsKTtcclxuICB9XHJcblxyXG4gIC8vIFRPRE8gd2FpdGluZyBmb3IgZGF0YVxyXG4gIGdldFRlcm1zQW5kQ29uZChldXJvc3RhclF1b3RlOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucykge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdQZW5hbHRpZXMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0VsaWdpYmlsaXR5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAgLFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0RheS90aW1lJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdTZWFzb25hbGl0eScsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRmxpZ2h0wqBBcHBsaWNhdGlvbicsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQWR2YW5jZcKgUmVzZXJ2YXRpb25zL3RpY2tldGluZycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnTWF4aW11bcKgU3RheScsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnTWluaW11bcKgU3RheScsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnU3RvcG92ZXJzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUcmFuc2ZlcnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0NvbWJpbmF0aW9ucycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQmxhY2tvdXTCoERhdGVzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdTdXJjaGFyZ2VzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdBY2NvbXBhbmllZMKgVHJhdmVsJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUcmF2ZWzCoFJlc3RyaWN0aW9ucycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnU2FsZXPCoFJlc3RyaWN0aW9ucycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnSGlwL21pbGVhZ2XCoEV4Y2VwdGlvbnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RpY2tldMKgRW5kb3JzZW1lbnRzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdDaGlsZHJlbsKgRGlzY291bnRzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUb3VywqBDb25kdWN0b3LCoERpc2NvdW50cycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQWdlbnTCoERpc2NvdW50cycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQWxswqBPdGhlcsKgRGlzY291bnRzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdNaXNjZWxsYW5lb3VzwqBQcm92aXNpb25zJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdGYXJlwqBCecKgUnVsZScsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnR3JvdXBzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUb3VycycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVmlzaXTCoEFub3RoZXLCoENvdW50cnknLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0RlcG9zaXRzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdWb2x1bnRhcnnCoENoYW5nZXMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1ZvbHVudGFyecKgUmVmdW5kcycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnTmVnb3RpYXRlZMKgRmFyZXMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1J1bGXCoEFwcGxpY2F0aW9uwqBBbmTCoE90aGVywqBDb25kaXRpb25zJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfVxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIHNhdmVTZWFyY2goKTogT2JzZXJ2YWJsZTxTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0PiB7XHJcbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XHJcbiAgICAgIGNvbnN0IHF1ZXJ5OiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcclxuICAgICAgY29uc3QgZmF2b3VyaXRlU2VhcmNoUXVlcnk6IElFdXJvc3RhclNlYXJjaEFyZ3MgPVxyXG4gICAgICAgIHRoaXMudXBkYXRlU2VyY2hRdWVyeShxdWVyeSk7XHJcbiAgICAgIGNvbnN0IHNlYXJjaEluZm8gPSB7XHJcbiAgICAgICAgbmFtZTogYCR7bW9tZW50KCl9YCxcclxuICAgICAgICBzZXJ2aWNlVHlwZTogU2VydmljZVR5cGUuRXVyb3N0YXIsXHJcbiAgICAgICAgc2VhcmNoQXJnczogZmF2b3VyaXRlU2VhcmNoUXVlcnlcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlRmF2b3VyaXRlU2VhcmNoKHNlYXJjaEluZm8pO1xyXG4gICAgfVxyXG4gIH1cclxuICBhc3luYyBhcHBseUZhdm91cml0ZShmYXY6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5mYXJlVHlwZSA9IGZhdi5mYXJlVHlwZTtcclxuICAgIHRoaXMuaW5jbHVkZU5lYXJieUFpcnBvcnRzID0gZmF2LmluY2x1ZGVOZWFyYnlBaXJwb3J0cztcclxuICAgIHRoaXMuY2hvc2VuU2VhcmNoVHlwZSA9IGZhdi5yZXR1cm5UcmlwXHJcbiAgICAgID8gRXVyb3N0YXJTZWFyY2hUeXBlLnJldHVyblxyXG4gICAgICA6IEV1cm9zdGFyU2VhcmNoVHlwZS5vbmVXYXk7XHJcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgLmdldEFpcnBvcnRzTGlzdChmYXYub3JpZ2luQWlycG9ydClcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0cykgPT4ge1xyXG4gICAgICAgIHRoaXMuZGVwYXJ0TG9jYXRpb24gPSAocmVzdWx0cyBhcyBPQlRBaXJwb3J0RGV0YWlsc1tdKS5maW5kKFxyXG4gICAgICAgICAgKGEpID0+IGEuZ2F0ZXdheSA9PSBmYXYub3JpZ2luQWlycG9ydFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlXHJcbiAgICAgIC5nZXRBaXJwb3J0c0xpc3QoZmF2LmRlc3RpbmF0aW9uQWlycG9ydClcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0cykgPT4ge1xyXG4gICAgICAgIHRoaXMuYXJyaXZlTG9jYXRpb24gPSAocmVzdWx0cyBhcyBPQlRBaXJwb3J0RGV0YWlsc1tdKS5maW5kKFxyXG4gICAgICAgICAgKGEpID0+IGEuZ2F0ZXdheSA9PSBmYXYuZGVzdGluYXRpb25BaXJwb3J0XHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLl9wYXNzZW5nZXJzID0gZmF2LnBhc3NlbmdlcnM7XHJcbiAgICB0aGlzLmFkdWx0cyA9IGZhdi5wYXNzZW5nZXJzLmZpbHRlcigoYTogYW55KSA9PiBhLnR5cGUgPT0gJ0FEVUxUJykubGVuZ3RoO1xyXG4gICAgdGhpcy5jaGlsZHJlbiA9IGZhdi5wYXNzZW5nZXJzLmZpbHRlcigoYTogYW55KSA9PiBhLnR5cGUgPT0gJ0NISUxEJykubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgb3BlbkV1cm9zdGFyRmFyZVJ1bGVzKGJhc2tldEl0ZW06IEJhc2tldEl0ZW0pOiB2b2lkIHtcclxuICAgIGNvbnN0IGZsaWdodHMgPSBbLi4uYmFza2V0SXRlbS5kZXRhaWwub3V0Ym91bmRGbGlnaHRzXTtcclxuICAgIGZsaWdodHNbMF0uZmFyZUluZm8gPSBmbGlnaHRzWzBdLmpvdXJuZXlJbmZvO1xyXG4gICAgZGVsZXRlIGZsaWdodHNbMF0uam91cm5leUluZm87XHJcbiAgICBjb25zdCBydWxlc0Zyb21DYWxsID0gdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEZsaWdodEZhcmVSdWxlcyhcclxuICAgICAgZmxpZ2h0c1swXSBhcyBJbnB1dEZsaWdodEpvdXJuZXlcclxuICAgICk7XHJcbiAgICBydWxlc0Zyb21DYWxsLnN1YnNjcmliZShcclxuICAgICAgKGRhdGEpID0+IHtcclxuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKE1vZGFsVHlwZXMuTW9kYWxGbGlnaHRGYXJlQ29tcG9uZW50LCBudWxsLCB7XHJcbiAgICAgICAgICBydWxlczogZGF0YS5yZXN1bHRzWzBdLFxyXG4gICAgICAgICAgZnJvbTogZmxpZ2h0c1swXS5vcmlnaW5BaXJwb3J0LFxyXG4gICAgICAgICAgdG86IGZsaWdodHNbZmxpZ2h0cy5sZW5ndGggLSAxXS5kZXN0aW5hdGlvbkFpcnBvcnRcclxuICAgICAgICB9KTtcclxuICAgICAgfSxcclxuICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
2018
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVyb3N0YXItZW50ZXJwcmlzZS1zZWFyY2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vYnRzZXJ2aWNlcy9iYXNlL3NyYy9saWIvdmVuZG9yL2NsYXNzZXMvZXVyb3N0YXItZW50ZXJwcmlzZS1zZWFyY2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUl6RCxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBSW5ELE9BQU8sRUFLTCxRQUFRLEVBQ1IsZ0JBQWdCLEVBS2hCLG1CQUFtQixFQUVuQixXQUFXLEVBVVosTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBS0wsbUJBQW1CLEVBV25CLDRCQUE0QixFQUk3QixNQUFNLGdCQUFnQixDQUFDO0FBT3hCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBa0JqRSxPQUFPLEVBR0wsVUFBVSxFQUNYLE1BQU0sNEJBQTRCLENBQUM7QUFHcEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0QyxNQUFNLGVBQWUsR0FBa0IsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNuRCxLQUFLLEVBQUUsRUFBRTtJQUNULFVBQVUsRUFBRSxFQUFFO0lBQ2QsV0FBVyxFQUFFLEVBQUU7SUFDZixPQUFPLEVBQUUsRUFBRTtJQUNYLFFBQVEsRUFBRSxFQUFFO0lBQ1osWUFBWSxFQUFFLEVBQUU7SUFDaEIsZUFBZSxFQUFFLEVBQUU7SUFDbkIscUJBQXFCLEVBQUUsRUFBRTtJQUN6QixjQUFjLEVBQUUsRUFBRTtJQUNsQixvQkFBb0IsRUFBRSxFQUFFO0lBQ3hCLE9BQU8sRUFB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QUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYTtnQkFDOUIsRUFBRSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLGtCQUFrQjthQUNuRCxDQUFDLENBQUM7UUFDTCxDQUFDLEVBQ0QsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkIsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDOztBQTFuRmUsK0NBQXNCLEdBQUcsaUJBQWlCLENBQUM7QUFDM0MsZ0RBQXVCLEdBQUcsa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IEJhc2VFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi9iYXNlLWVudGVycHJpc2UnO1xyXG5pbXBvcnQgeyBCYXNlU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlSGVscGVyUm91dGluZXMgfSBmcm9tICcuL2hlbHBlcnMnO1xyXG5pbXBvcnQgeyBUcmF2ZWxsZXIgfSBmcm9tICcuLi9tb2RlbHMvdHJhdmVsbGVyLm9iamVjdCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBWYWx1ZURpc3BsYXkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3ZhbHVlLWRpc3BsYXknO1xyXG5pbXBvcnQgeyBGbGlnaHRGaWx0ZXJzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mbGlnaHQtZmlsdGVycy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBTZWxlY3RGaWx0ZXIgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NlbGVjdC1maWx0ZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBBZGRJdGVtVG9CYXNrZXRNdXRhdGlvblZhcmlhYmxlcyxcclxuICBCYXNrZXRJdGVtLFxyXG4gIEN1cnJlbmN5Q29kZSxcclxuICBEZXN0aW5hdGlvbkVudHJ5LFxyXG4gIEZhcmVUeXBlLFxyXG4gIEZsaWdodENhYmluQ2xhc3MsXHJcbiAgRmxpZ2h0RmFyZVRvdGFsLFxyXG4gIEZsaWdodEl0aW5lcmFyeSxcclxuICBGbGlnaHRKb3VybmV5LFxyXG4gIEZsaWdodFBhc3Nlbmdlck9iamVjdCxcclxuICBGbGlnaHRQYXNzZW5nZXJUeXBlLFxyXG4gIFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlcnZpY2VUeXBlLFxyXG4gIFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyxcclxuICBJbnB1dEZsaWdodEpvdXJuZXksXHJcbiAgU2VhcmNoRXVyb3N0YXJRdWVyeVZhcmlhYmxlcyxcclxuICBTZWFyY2hQYXJraW5nUXVlcnlWYXJpYWJsZXMsXHJcbiAgU2VhcmNoTG91bmdlc1F1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlYXJjaENhckhpcmVRdWVyeVZhcmlhYmxlcyxcclxuICBTZWFyY2hIb3RlbHNRdWVyeVZhcmlhYmxlcyxcclxuICBTZWFyY2hJcmxRdWVyeVZhcmlhYmxlcyxcclxuICBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXNcclxufSBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcclxuaW1wb3J0IHtcclxuICBFdXJvc3RhclF1b3RlUmVzdWx0LFxyXG4gIE5nYkRhdGVTdHJ1Y3QsXHJcbiAgT0JUQWlycG9ydERldGFpbHMsXHJcbiAgT0JUQWlybGluZXNEZXRhaWxzLFxyXG4gIEZsaWdodERpcmVjdGlvbkVudW0sXHJcbiAgR3JvdXBlZEZsaWdodHMsXHJcbiAgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXHJcbiAgUmVjZW50U2VhcmNoLFxyXG4gIEV1cm9zdGFyR3JvdXBlZFF1b3RlUmVzdWx0LFxyXG4gIEV1cm9zdGFyUmVzdWx0cyxcclxuICBFdXJvc3Rhckl0ZW0sXHJcbiAgRXVyb3N0YXJGYXJlLFxyXG4gIEV1cm9zdGFyUXVvdGVSZXN1bHRBcnJheSxcclxuICBNaW5NYXgsXHJcbiAgU2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdCxcclxuICBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLFxyXG4gIFJ1bGVBY3Rpb25TdW1tYXJ5SW50ZXJmYWNlLFxyXG4gIFJlY29yZFJ1bGVBY3Rpb24sXHJcbiAgRXVyb3N0YXJNdWx0aVxyXG59IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcclxuaW1wb3J0IHtcclxuICBGdWxsVXNlckRldGFpbHMsXHJcbiAgVXNlclNlcnZpY2VJbnRlcmZhY2VcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0l1c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXNlYXJjaC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSUNoZWFwZXN0UHJpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NoZWFwZXN0LXByaWNlJztcclxuaW1wb3J0IHsgRXVyb3N0YXJTZWFyY2hUeXBlIH0gZnJvbSAnLi9ldXJvc3Rhci1zZWFyY2gtdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgSU11bHRpRGVzdGluYXRpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL2ZsaWdodC1tdWx0aS1kZXN0aW5hdGlvbi5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1xyXG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gIEludGVybmFsQmFza2V0SW50ZXJmYWNlXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUV1cm9zdGFyUXVvdGVGZXRjaGVyLFxyXG4gIEV1cm9zdGFyUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2V1cm9zdGFyLXF1b3RlLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEV1cm9zdGFyRW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZSxcclxuICBFdXJvc3RhclRlbXBQYXJhbXNcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0lldXJvc3Rhci1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7XHJcbiAgQXBwbHlKaXRGbGlnaHRSdWxlc1R5cGUsXHJcbiAgQmFzZUFwcGx5Sml0RmxpZ2h0UnVsZXNGZXRjaGVyXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvYXBwbHktaml0LWZsaWdodC1ydWxlcyc7XHJcbmltcG9ydCB7XHJcbiAgQWxsb3dlZENsYXNzZXMsXHJcbiAgRmxpZ2h0T3BlcmF0b3IsXHJcbiAgVGltZVdpbmRvd1xyXG59IGZyb20gJy4vZmxpZ2h0LWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgSUV1cm9zdGFyU2VhcmNoQXJncyB9IGZyb20gJy4uL2ludGVyZmFjZXMvZXVyb3N0YXItc2VhcmNoLWFyZy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBCYXNlTW9kYWxPcGVuZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kYWwtb3BlbmVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNb2RhbFR5cGVzIH0gZnJvbSAnLi9tb2RhbC10eXBlcy5lbnVtJztcclxuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmNvbnN0IERFRkFVTFRfRklMVEVSUzogRmxpZ2h0RmlsdGVycyA9IE9iamVjdC5mcmVlemUoe1xyXG4gIHN0b3BzOiB7fSxcclxuICB0b3RhbFN0b3BzOiB7fSxcclxuICBtdXN0SW5jbHVkZToge30sXHJcbiAgY2xhc3Nlczoge30sXHJcbiAgYWlybGluZXM6IHt9LFxyXG4gIHRyYXZlbFBvbGljeToge30sXHJcbiAgZGVwYXR1cmVBaXJwb3J0OiB7fSxcclxuICBkZXBhdHVyZVJldHVybkFpcnBvcnQ6IHt9LFxyXG4gIGFycml2YWxBaXJwb3J0OiB7fSxcclxuICBhcnJpdmFsUmV0dXJuQWlycG9ydDoge30sXHJcbiAgYmFnZ2FnZToge30sXHJcbiAgZmFyZVR5cGVzOiB7fSxcclxuICBwcmljZToge1xyXG4gICAgbWluOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcclxuICAgIG1heDogTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVJcclxuICB9LFxyXG4gIGR1cmF0aW9uOiB7XHJcbiAgICBtaW46IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLFxyXG4gICAgbWF4OiBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUlxyXG4gIH0sXHJcbiAgcmV0dXJuRHVyYXRpb246IHtcclxuICAgIG1pbjogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXHJcbiAgICBtYXg6IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSXHJcbiAgfSxcclxuICBkZXBhcnR1cmVUaW1lOiB7XHJcbiAgICBtaW46IDAsXHJcbiAgICBtYXg6IDIzNTlcclxuICB9LFxyXG4gIGFycml2YWxUaW1lOiB7XHJcbiAgICBtaW46IDAsXHJcbiAgICBtYXg6IDIzNTlcclxuICB9LFxyXG4gIHJldHVybkRlcGFydHVyZVRpbWU6IHtcclxuICAgIG1pbjogMCxcclxuICAgIG1heDogMjM1OVxyXG4gIH0sXHJcbiAgcmV0dXJuQXJyaXZhbFRpbWU6IHtcclxuICAgIG1pbjogMCxcclxuICAgIG1heDogMjM1OVxyXG4gIH0sXHJcblxyXG4gIGZsaWdodE51bWJlcjogJydcclxufSkgYXMgRmxpZ2h0RmlsdGVycztcclxuXHJcbmV4cG9ydCB0eXBlIEV1cm9zdGFyU3RhdGlvbiA9IHtcclxuICBnYXRld2F5OiBzdHJpbmc7XHJcbiAgZGVzdGluYXRpb246IHN0cmluZztcclxufTtcclxuXHJcbmV4cG9ydCBlbnVtIFNvcnRUeXBlc0V1cm9zdGFyIHtcclxuICBDaGVhcGVzdEZpcnN0ID0gJ0MnLFxyXG4gIEVhcmxpZXN0Rmlyc3QgPSAnRScsXHJcbiAgTGF0ZXN0Rmlyc3QgPSAnTCdcclxufVxyXG5cclxuZXhwb3J0IGVudW0gU29ydE1ldGhvZCB7XHJcbiAgc29ydEJ5UHJpY2UgPSAnc29ydEJ5UHJpY2UnLFxyXG4gIHNvcnRCeURhdGUgPSAnc29ydEJ5RGF0ZSdcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTb3J0VHlwZUV1cm9zdGFyIHtcclxuICAvKiogVGl0bGUgZGlzcGxheWVkIG9uIGRyb3Bkb3duICovXHJcbiAgdGl0bGU6IHN0cmluZztcclxuICAvKiogTWV0aG9kIG5hbWUgdXNlZCBieSBjb21wb25lbnQgdG8gc29ydCByZXN1bHRzICovXHJcbiAgbWV0aG9kOiBTb3J0TWV0aG9kO1xyXG4gIC8qKiBJY29uIGRpc3BsYXllZCBvbiBkcm9wIGRvd24gKi9cclxuICBpY29uOiBzdHJpbmc7XHJcbiAgLyoqIFNvcnRpbmcgZGlyZWN0aW9uIHRydWUgZm9yIGFzYywgZmFsc2UgZm9yIGRzYyAqL1xyXG4gIGRpcjogYm9vbGVhbjtcclxuICAvLyB0aGlzIGlzIHdoYXQgd2Ugd2lsbCB1c2UgdG8gc29ydFxyXG4gIGNvZGU6IFNvcnRUeXBlc0V1cm9zdGFyO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBFdXJvc3Rhckdyb3VwcyA9ICdTdGFuZGFyZCcgfCAnU3RhbmRhcmRQcmVtaWVyJyB8ICdCdXNpbmVzc1ByZW1pZXInO1xyXG5cclxuaW50ZXJmYWNlIEV1cm9zdGFyU2Vzc2lvblR5cGUge1xyXG4gIHJlc3VsdHM6IEV1cm9zdGFyUXVvdGVSZXN1bHRBcnJheTtcclxuICBncm91cERhdGE6IHsgW2tleTogbnVtYmVyXTogbnVtYmVyW10gfTtcclxuICBncm91cGVkOiBHcm91cGVkRmxpZ2h0cztcclxuICBxdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXM7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBFdXJvc3RhckVudGVycHJpc2VTZWFyY2g8U0VfUSBleHRlbmRzIEV1cm9zdGFyUXVvdGVGZXRjaGVyVHlwZSwgQUpGX1EgZXh0ZW5kcyBBcHBseUppdEZsaWdodFJ1bGVzVHlwZT5cclxuICBleHRlbmRzIEJhc2VFbnRlcnByaXNlU2VhcmNoPFxyXG4gICAgRXVyb3N0YXJUZW1wUGFyYW1zLFxyXG4gICAgRXVyb3N0YXJRdW90ZVJlc3VsdCxcclxuICAgIEV1cm9zdGFyUXVvdGVSZXN1bHRBcnJheVxyXG4gID5cclxuICBpbXBsZW1lbnRzIEV1cm9zdGFyRW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZVxyXG57XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9QQVJBTVMgPSAnc2VhcmNoX2V1cm9zdGFyJztcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFMgPSAncmVzdWx0c19ldXJvc3Rhcic7XHJcblxyXG4gIHB1YmxpYyB0eXBlOiBTZXJ2aWNlVHlwZSA9IFNlcnZpY2VUeXBlLkV1cm9zdGFyO1xyXG5cclxuICBhdmFsaWFibGVDbGFzc2VzOiBCZWhhdmlvclN1YmplY3Q8QWxsb3dlZENsYXNzZXM+ID1cclxuICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8QWxsb3dlZENsYXNzZXM+KFtdKTtcclxuICB0aW1lQ3JpdGVyaWFPcHRpb25zOiBCZWhhdmlvclN1YmplY3Q8VGltZVdpbmRvd1tdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XHJcbiAgICBUaW1lV2luZG93W11cclxuICA+KFtdKTtcclxuICBmbGlnaHRPcGVyYXRvcnM6IEJlaGF2aW9yU3ViamVjdDxGbGlnaHRPcGVyYXRvcltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XHJcbiAgICBGbGlnaHRPcGVyYXRvcltdXHJcbiAgPihbXSk7XHJcblxyXG4gIHByaXZhdGUgX25lZ290aWF0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9uZWFyYnlfYWlycG9ydHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfdGltZUFycmF5OiBWYWx1ZURpc3BsYXlbXTtcclxuICBwcml2YXRlIF9zb3J0QXJyYXk6IFNvcnRUeXBlRXVyb3N0YXJbXSA9IFtcclxuICAgIHtcclxuICAgICAgdGl0bGU6ICdQcmljZScsXHJcbiAgICAgIG1ldGhvZDogU29ydE1ldGhvZC5zb3J0QnlQcmljZSxcclxuICAgICAgaWNvbjogJ2ljby1kb2xsYXInLFxyXG4gICAgICBkaXI6IHRydWUsXHJcbiAgICAgIGNvZGU6IFNvcnRUeXBlc0V1cm9zdGFyLkNoZWFwZXN0Rmlyc3RcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHRpdGxlOiAnVGltZScsXHJcbiAgICAgIG1ldGhvZDogU29ydE1ldGhvZC5zb3J0QnlEYXRlLFxyXG4gICAgICBpY29uOiAnaWNvLWNhbGVuZGFyJyxcclxuICAgICAgZGlyOiB0cnVlLFxyXG4gICAgICBjb2RlOiBTb3J0VHlwZXNFdXJvc3Rhci5FYXJsaWVzdEZpcnN0XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0aXRsZTogJ1RpbWUgKERlc2NlbmRpbmcpJyxcclxuICAgICAgbWV0aG9kOiBTb3J0TWV0aG9kLnNvcnRCeURhdGUsXHJcbiAgICAgIGljb246ICdpY28tY2FsZW5kYXInLFxyXG4gICAgICBkaXI6IHRydWUsXHJcbiAgICAgIGNvZGU6IFNvcnRUeXBlc0V1cm9zdGFyLkxhdGVzdEZpcnN0XHJcbiAgICB9XHJcbiAgXTtcclxuXHJcbiAgcHJpdmF0ZSBfc29ydEFycmF5THU6IFNvcnRUeXBlRXVyb3N0YXJbXSA9IFtcclxuICAgIHtcclxuICAgICAgdGl0bGU6ICdQcmljZScsXHJcbiAgICAgIG1ldGhvZDogU29ydE1ldGhvZC5zb3J0QnlQcmljZSxcclxuICAgICAgaWNvbjogJ2ljby1kb2xsYXInLFxyXG4gICAgICBkaXI6IHRydWUsXHJcbiAgICAgIGNvZGU6IFNvcnRUeXBlc0V1cm9zdGFyLkNoZWFwZXN0Rmlyc3RcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHRpdGxlOiAnVGltZScsXHJcbiAgICAgIG1ldGhvZDogU29ydE1ldGhvZC5zb3J0QnlEYXRlLFxyXG4gICAgICBpY29uOiAnaWNvLWNhbGVuZGFyJyxcclxuICAgICAgZGlyOiB0cnVlLFxyXG4gICAgICBjb2RlOiBTb3J0VHlwZXNFdXJvc3Rhci5FYXJsaWVzdEZpcnN0XHJcbiAgICB9XHJcbiAgXTtcclxuXHJcbiAgcHJpdmF0ZSBfZmFyZVR5cGVBcnJheTogVmFsdWVEaXNwbGF5W10gPSBbXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5GbGV4aWJsZSwgZGlzcGxheTogJ0ZsZXhpYmxlJyB9LFxyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuTGVpc3VyZSwgZGlzcGxheTogJ0xlaXN1cmUnIH0sXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5Mb3dlc3QsIGRpc3BsYXk6ICdMb3dlc3QnIH0sXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5OZWdvdGlhdGVkLCBkaXNwbGF5OiAnTmVnb3RpYXRlZCcgfSxcclxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLk5vbk5lZ290aWF0ZWQsIGRpc3BsYXk6ICdOb24tTmVnb3RpYXRlZCcgfSxcclxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLlJlcXVlc3RGYXJlUnVsZXMsIGRpc3BsYXk6ICdSZXF1ZXN0IEZhcmUgUnVsZXMnIH0sXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5TZWxlY3RBbmRQcm8sIGRpc3BsYXk6ICdTZWxlY3QgJiBQcm8nIH1cclxuICBdO1xyXG5cclxuICBwdWJsaWMgbWluaW11bU91dEJvdW5kRGF0ZSA9IHtcclxuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKSxcclxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcclxuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpXHJcbiAgfTtcclxuXHJcbiAgcHVibGljIG1pbmltdW1JbkJvdW5kRGF0ZSA9IHtcclxuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKSxcclxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcclxuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpXHJcbiAgfTtcclxuXHJcbiAgcHVibGljIHNlYXJjaFR5cGVzOiBWYWx1ZURpc3BsYXlbXSA9IFtcclxuICAgIHsgdmFsdWU6IEV1cm9zdGFyU2VhcmNoVHlwZS5yZXR1cm4sIGRpc3BsYXk6ICdSZXR1cm4nIH0sXHJcbiAgICB7IHZhbHVlOiBFdXJvc3RhclNlYXJjaFR5cGUub25lV2F5LCBkaXNwbGF5OiAnT25lLXdheScgfVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgX291dERhdGU6IE5nYkRhdGVTdHJ1Y3Q7XHJcbiAgcHJpdmF0ZSBfb3V0VGltZTogc3RyaW5nO1xyXG4gIHByaXZhdGUgX2luRGF0ZTogTmdiRGF0ZVN0cnVjdDtcclxuICBwcml2YXRlIF9pblRpbWU6IHN0cmluZztcclxuICBwcml2YXRlIF9kZXN0aW5hdGlvbkFpcnBvcnQ6IGFueTtcclxuICBwcml2YXRlIF9vcmlnaW5BaXJwb3J0OiBhbnk7XHJcbiAgcHJpdmF0ZSBfcGFzc2VuZ2VyczogYW55O1xyXG4gIHByaXZhdGUgZ3JvdXBlZE9iamVjdDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNbXTtcclxuICBwcm90ZWN0ZWQgZmxpZ2h0c1RvR3JvdXA6IHsgW2tleTogbnVtYmVyXTogbnVtYmVyW10gfSA9IHt9O1xyXG4gIHByb3RlY3RlZCByZXN1bHRRdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXM7XHJcbiAgcHJvdGVjdGVkIGdyb3VwZWQ6IEdyb3VwZWRGbGlnaHRzID0gbnVsbDtcclxuICB0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSA9IG51bGw7XHJcbiAgcHJvdGVjdGVkIHJlc3VsdHNTZXNzaW9uTmFtZSA9XHJcbiAgICBFdXJvc3RhckVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XHJcbiAgcHJvdGVjdGVkIG11bHRpUmVzdWx0c1Nlc3Npb25OYW1lID1cclxuICAgIEV1cm9zdGFyRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuXHJcbiAgc2VsZWN0ZWRHcm91cEZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnM7XHJcbiAgcHJpdmF0ZSBfZGlzcGxheUFkZEhvdGVsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfcnVsZUFjdGlvblN1bW1hcnk6IFJ1bGVBY3Rpb25TdW1tYXJ5SW50ZXJmYWNlO1xyXG4gIG11bHRpOiBFdXJvc3Rhck11bHRpW107XHJcbiAgZmlsdGVyczogQmVoYXZpb3JTdWJqZWN0PEZsaWdodEZpbHRlcnM+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChcclxuICAgIERFRkFVTFRfRklMVEVSU1xyXG4gICk7XHJcblxyXG4gIHB1YmxpYyBnZXQgZGlzcGxheUFkZEhvdGVsKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlBZGRIb3RlbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZGlzcGxheUFkZEhvdGVsKG5ld1ZhbDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZGlzcGxheUFkZEhvdGVsID0gbmV3VmFsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZWxlY3RlZEdyb3VwRXVyb3N0YXI6IHtcclxuICAgIGl0ZW06IEV1cm9zdGFySXRlbTtcclxuICAgIGRpcmVjdGlvbjogRmxpZ2h0RGlyZWN0aW9uRW51bTtcclxuICB9ID0ge1xyXG4gICAgaXRlbTogbnVsbCxcclxuICAgIGRpcmVjdGlvbjogbnVsbFxyXG4gIH07XHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRFdXJvc3RhckZhcmU6IHtcclxuICAgIGl0ZW06IEV1cm9zdGFyRmFyZTtcclxuICAgIGRpcmVjdGlvbjogRmxpZ2h0RGlyZWN0aW9uRW51bTtcclxuICB9ID0ge1xyXG4gICAgaXRlbTogbnVsbCxcclxuICAgIGRpcmVjdGlvbjogbnVsbFxyXG4gIH07XHJcblxyXG4gIGdldCBzZWxlY3RlZEV1cm9zdGFyRmFyZSgpOiBFdXJvc3RhckZhcmUge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkRXVyb3N0YXJGYXJlLml0ZW07XHJcbiAgfVxyXG4gIGdldCBzZWxlY3RlZEZhcmVDbGFzcygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkRXVyb3N0YXJGYXJlPy5pdGVtPy5jbGFzcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdGltZUFycmF5KCkge1xyXG4gICAgdGhpcy5fdGltZUFycmF5ID1cclxuICAgICAgdGhpcy5fdGltZUFycmF5IHx8XHJcbiAgICAgIEFycmF5KDk2KVxyXG4gICAgICAgIC5maWxsKDApXHJcbiAgICAgICAgLm1hcCgoXywgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmFsdWU6XHJcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcihpbmRleCAvIDQpXHJcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgLnBhZFN0YXJ0KDIsICcwJykgK1xyXG4gICAgICAgICAgICAgICc6JyArXHJcbiAgICAgICAgICAgICAgKChpbmRleCAlIDQpICogMTUpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSxcclxuICAgICAgICAgICAgZGlzcGxheTpcclxuICAgICAgICAgICAgICBNYXRoLmZsb29yKGluZGV4IC8gNClcclxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAucGFkU3RhcnQoMiwgJzAnKSArXHJcbiAgICAgICAgICAgICAgJzonICtcclxuICAgICAgICAgICAgICAoKGluZGV4ICUgNCkgKiAxNSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgcmV0dXJuIHRoaXMuX3RpbWVBcnJheTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcHJlZmVycmVkQ2FycmllcnMoKTogT0JUQWlybGluZXNEZXRhaWxzW10ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVycztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgcHJlZmVycmVkQ2FycmllcnModmFsdWU6IE9CVEFpcmxpbmVzRGV0YWlsc1tdKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnMgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgb3BlcmF0b3IxKCk6IE9CVEFpcmxpbmVzRGV0YWlscyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzBdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBvcGVyYXRvcjEodmFsdWU6IE9CVEFpcmxpbmVzRGV0YWlscykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzBdID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgb3BlcmF0b3IyKCk6IE9CVEFpcmxpbmVzRGV0YWlscyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzFdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBvcGVyYXRvcjIodmFsdWU6IE9CVEFpcmxpbmVzRGV0YWlscykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzFdID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgb3BlcmF0b3IzKCk6IE9CVEFpcmxpbmVzRGV0YWlscyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzJdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBvcGVyYXRvcjModmFsdWU6IE9CVEFpcmxpbmVzRGV0YWlscykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzJdID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgb3BlcmF0b3I0KCk6IE9CVEFpcmxpbmVzRGV0YWlscyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzNdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBvcGVyYXRvcjQodmFsdWU6IE9CVEFpcmxpbmVzRGV0YWlscykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzNdID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9taW5EYXRlOiBOZ2JEYXRlU3RydWN0O1xyXG4gIHB1YmxpYyBnZXQgbWluRGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHRoaXMuX21pbkRhdGUgPSB0aGlzLl9taW5EYXRlIHx8IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZShtb21lbnQoKSk7XHJcbiAgICByZXR1cm4gdGhpcy5fbWluRGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYWR1bHRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFkdWx0cztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgYWR1bHRzKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5hZHVsdHMgPSBOdW1iZXIodmFsdWUpO1xyXG4gICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNoaWxkcmVuKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBjaGlsZHJlbih2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPSBOdW1iZXIodmFsdWUpO1xyXG4gICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRlcGFydExvY2F0aW9uKCk6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZGVwYXJ0TG9jYXRpb247XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGRlcGFydExvY2F0aW9uKHZhbHVlOiBzdHJpbmcgfCBPQlRBaXJwb3J0RGV0YWlscykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmRlcGFydExvY2F0aW9uID0gdmFsdWU7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICB0aGlzLl9vcmlnaW5BaXJwb3J0ID0gJyc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlICYmIHZhbHVlLmdhdGV3YXkpIHtcclxuICAgICAgdGhpcy5fb3JpZ2luQWlycG9ydCA9IHZhbHVlLmdhdGV3YXk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9vcmlnaW5BaXJwb3J0ID0gbnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcXVlcnlPcmlnaW5BaXBvcnQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9vcmlnaW5BaXJwb3J0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBxdWVyeURlc3RpbmF0aW9uQWlwb3J0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBkZXBhcnREYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dERhdGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGRlcGFydERhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcclxuICAgIHRoaXMuX291dERhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMub3V0Qm91bmREYXRlID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KFxyXG4gICAgICB0aGlzLl9vdXREYXRlLFxyXG4gICAgICB0aGlzLl9vdXRUaW1lXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBkZXBhcnRUaW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0VGltZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZGVwYXJ0VGltZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9vdXRUaW1lID0gdmFsdWU7XHJcbiAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgdGhpcy5fb3V0RGF0ZSxcclxuICAgICAgdGhpcy5fb3V0VGltZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgb3V0Qm91bmREYXRlKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG91dEJvdW5kRGF0ZSh2YWx1ZTogbW9tZW50Lk1vbWVudCkge1xyXG4gICAgdmFsdWUgPSBtb21lbnQodmFsdWUpO1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZSA9IHZhbHVlLmlzVmFsaWQoKSA/IHZhbHVlIDogbnVsbDtcclxuICAgIHRoaXMubWluaW11bUluQm91bmREYXRlID0ge1xyXG4gICAgICB5ZWFyOiB2YWx1ZS55ZWFyKCksXHJcbiAgICAgIG1vbnRoOiB2YWx1ZS5tb250aCgpICsgMSxcclxuICAgICAgZGF5OiB2YWx1ZS5kYXRlKClcclxuICAgIH07XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlICYmXHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSAmJlxyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlLmlzQWZ0ZXIodGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuaW5ib3VuZERhdGUgPSBtb21lbnQodGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZSkuYWRkKDEsICdkYXknKTtcclxuICAgIH1cclxuICAgIHRoaXMuX291dERhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUodmFsdWUpO1xyXG4gICAgdGhpcy5fb3V0VGltZSA9IHRoaXMuaGVscGVycy5mb3JtYXRUaW1lQ29sb24odmFsdWUpO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCByZXR1cm5EYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX2luRGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgcmV0dXJuRGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5faW5EYXRlID0gdmFsdWU7XHJcbiAgICB0aGlzLmluYm91bmREYXRlID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KHRoaXMuX2luRGF0ZSwgdGhpcy5faW5UaW1lKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYXJyaXZlVGltZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2luVGltZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgYXJyaXZlVGltZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9pblRpbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQodGhpcy5faW5EYXRlLCB0aGlzLl9pblRpbWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBpbmJvdW5kRGF0ZSgpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGluYm91bmREYXRlKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB2YWx1ZSA9IG1vbWVudCh2YWx1ZSk7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGUgPSB2YWx1ZS5pc1ZhbGlkKCkgPyB2YWx1ZSA6IG51bGw7XHJcbiAgICB0aGlzLl9pbkRhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUodmFsdWUpO1xyXG4gICAgdGhpcy5faW5UaW1lID0gdGhpcy5oZWxwZXJzLmZvcm1hdFRpbWVDb2xvbih2YWx1ZSk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFycml2ZUxvY2F0aW9uKCk6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYXJyaXZlTG9jYXRpb247XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGFycml2ZUxvY2F0aW9uKHZhbHVlOiBzdHJpbmcgfCBPQlRBaXJwb3J0RGV0YWlscykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFycml2ZUxvY2F0aW9uID0gdmFsdWU7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQgPSAnJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgdmFsdWUuZ2F0ZXdheSkge1xyXG4gICAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQgPSB2YWx1ZS5nYXRld2F5O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0ID0gbnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBjYWJpbkNsYXNzKCk6IEZsaWdodENhYmluQ2xhc3MgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzcztcclxuICB9XHJcblxyXG4gIHNldCBjYWJpbkNsYXNzKHZhbHVlOiBGbGlnaHRDYWJpbkNsYXNzIHwgbnVsbCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNhYmluQ2xhc3MgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCByZXR1cm5DYWJpbkNsYXNzKCk6IEZsaWdodENhYmluQ2xhc3MgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzcztcclxuICB9XHJcblxyXG4gIHNldCByZXR1cm5DYWJpbkNsYXNzKHZhbHVlOiBGbGlnaHRDYWJpbkNsYXNzIHwgbnVsbCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnJldHVybkNhYmluQ2xhc3MgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBjaG9zZW5TZWFyY2hUeXBlKCk6IEV1cm9zdGFyU2VhcmNoVHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGU7XHJcbiAgfVxyXG5cclxuICBzZXQgY2hvc2VuU2VhcmNoVHlwZSh0eXBlOiBFdXJvc3RhclNlYXJjaFR5cGUpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID0gdHlwZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBpc1JldHVybigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9PT0gRXVyb3N0YXJTZWFyY2hUeXBlLnJldHVybjtcclxuICB9XHJcblxyXG4gIGdldCBvdXRUaW1lQ3JpdGVyaWEoKTogVGltZVdpbmRvdyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm91dFRpbWVDcml0ZXJpYTtcclxuICB9XHJcblxyXG4gIHNldCBvdXRUaW1lQ3JpdGVyaWEodmFsdWU6IFRpbWVXaW5kb3cpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lQ3JpdGVyaWEgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBpblRpbWVDcml0ZXJpYSgpOiBUaW1lV2luZG93IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaW5UaW1lQ3JpdGVyaWE7XHJcbiAgfVxyXG5cclxuICBzZXQgaW5UaW1lQ3JpdGVyaWEodmFsdWU6IFRpbWVXaW5kb3cpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYSA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuICBnZXQgbWF4Q29ubmVjdGlvbnMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMubWF4Q29ubmVjdGlvbnM7XHJcbiAgfVxyXG5cclxuICBzZXQgbWF4Q29ubmVjdGlvbnModmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm1heENvbm5lY3Rpb25zID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9tdWx0aURlc3RpbmF0aW9uOiBEZXN0aW5hdGlvbkVudHJ5W10gPSBbXTtcclxuICBnZXQgbXVsdGlEZXN0aW5hdGlvbigpOiBJTXVsdGlEZXN0aW5hdGlvbltdIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMubXVsdGlEZXN0aW5hdGlvbjtcclxuICB9XHJcblxyXG4gIHNldCBtdWx0aURlc3RpbmF0aW9uKHZhbHVlQXJyYXk6IElNdWx0aURlc3RpbmF0aW9uW10pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uID0gdmFsdWVBcnJheTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHNldE11bHRpRGVzdGluYXRpb25RdWVyeShtdWx0aURlc3RpbmF0aW9uOiBJTXVsdGlEZXN0aW5hdGlvbltdKSB7XHJcbiAgICBjb25zdCBuZXdNdWx0aURlc3RpbmF0aW9uID0gdGhpcy5oZWxwZXJzLmNsb25lKG11bHRpRGVzdGluYXRpb24pO1xyXG4gICAgcmV0dXJuIG5ld011bHRpRGVzdGluYXRpb24ucmVkdWNlKFxyXG4gICAgICAoZGVzdGluYXRpb25BcnJheTogRGVzdGluYXRpb25FbnRyeVtdLCBpdGVtOiBJTXVsdGlEZXN0aW5hdGlvbikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uT2JqZWN0ID0ge30gYXMgRGVzdGluYXRpb25FbnRyeTtcclxuICAgICAgICBkZXN0aW5hdGlvbk9iamVjdC5vcmlnID0gaXRlbS5vcmlnLmdhdGV3YXk7XHJcbiAgICAgICAgZGVzdGluYXRpb25PYmplY3QuZGVzdCA9IGl0ZW0uZGVzdC5nYXRld2F5O1xyXG4gICAgICAgIGRlc3RpbmF0aW9uT2JqZWN0LmRhdGUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0SXNvRGF0ZShpdGVtLmRhdGUpO1xyXG4gICAgICAgIGRlc3RpbmF0aW9uQXJyYXkucHVzaChkZXN0aW5hdGlvbk9iamVjdCk7XHJcbiAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uQXJyYXk7XHJcbiAgICAgIH0sXHJcbiAgICAgIFtdIGFzIERlc3RpbmF0aW9uRW50cnlbXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIGdldCBvbmx5XHJcbiAgZ2V0IHNvcnREcm9wZG93blZhbHVlcygpOiBTb3J0VHlwZUV1cm9zdGFyW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NvcnRBcnJheTtcclxuICB9XHJcblxyXG4gIGdldCBzb3J0RHJvcGRvd25WYWx1ZXNMdSgpOiBTb3J0VHlwZUV1cm9zdGFyW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NvcnRBcnJheUx1O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZhcmVUeXBlc1ZhbHVlcygpOiBWYWx1ZURpc3BsYXlbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmFyZVR5cGVBcnJheTtcclxuICB9XHJcblxyXG4gIGdldCBmYXJlVHlwZSgpOiBGYXJlVHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmZhcmVUeXBlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGZhcmVUeXBlKHZhbHVlOiBGYXJlVHlwZSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmZhcmVUeXBlID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgbmVnb3RpYXRlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9uZWdvdGlhdGVkO1xyXG4gIH1cclxuXHJcbiAgc2V0IG5lZ290aWF0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX25lZ290aWF0ZWQgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBpbmNsdWRlTmVhcmJ5QWlycG9ydHMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmluY2x1ZGVOZWFyYnlBaXJwb3J0cztcclxuICB9XHJcblxyXG4gIHNldCBpbmNsdWRlTmVhcmJ5QWlycG9ydHModmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHMgPSB2YWx1ZTtcclxuICB9XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGV1cm9zdGFyRmV0Y2hlcjogQmFzZUV1cm9zdGFyUXVvdGVGZXRjaGVyPFNFX1E+LFxyXG4gICAgaGVscGVyczogQmFzZUhlbHBlclJvdXRpbmVzLFxyXG4gICAgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gICAgcHJpdmF0ZSBiYXNrZXRTZXJ2aWNlOiBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcclxuICAgIHN0b3JhZ2VTZXJ2aWNlOiBCYXNlU3RvcmFnZVNlcnZpY2UsXHJcbiAgICBzZWFyY2hTZXJ2aWNlOiBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSxcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCYXNlTW9kYWxPcGVuZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhcHBseUZsaWdodFJ1bGVzOiBCYXNlQXBwbHlKaXRGbGlnaHRSdWxlc0ZldGNoZXI8QUpGX1E+LFxyXG4gICkge1xyXG4gICAgc3VwZXIoc3RvcmFnZVNlcnZpY2UsIGhlbHBlcnMsIHNlYXJjaFNlcnZpY2UsIHVzZXJTZXJ2aWNlKTtcclxuXHJcbiAgICBjb25zdCBkYXRhOiB7XHJcbiAgICAgIHRlbXBQYXJhbXM6IEV1cm9zdGFyVGVtcFBhcmFtcztcclxuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiBFdXJvc3RhclRlbXBQYXJhbXM7XHJcbiAgICB9ID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIEV1cm9zdGFyRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TXHJcbiAgICApIHx8IHtcclxuICAgICAgdGVtcFBhcmFtczoge30gYXMgRXVyb3N0YXJUZW1wUGFyYW1zLFxyXG4gICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHt9IGFzIEV1cm9zdGFyVGVtcFBhcmFtc1xyXG4gICAgfTtcclxuICAgIC8vIGRhdGEudGVtcFBhcmFtcy5hZHVsdHMgPSAxO1xyXG4gICAgLy8gZGF0YS50ZW1wUGFyYW1zLmNhYmluQ2xhc3MgPSBbRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215XTtcclxuICAgIGNvbnN0IHF1ZXJ5ID0gc2VhcmNoU2VydmljZS5tYWtlRXVyb3N0YXJRdWVyeShkYXRhLnRlbXBQYXJhbXMpO1xyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHF1ZXJ5KTtcclxuICAgIHRoaXMuX29yaWdpbmFsVXNlclNlYXJjaCA9IGRhdGEub3JpZ2luYWxVc2VyU2VhcmNoO1xyXG4gICAgaWYgKHNlYXJjaFNlcnZpY2Uuc2hvdWxkQWRkVHJhdmVsbGVyU3Vic2NyaXB0aW9uKCkpIHtcclxuICAgICAgc2VhcmNoU2VydmljZS50cmF2ZWxsZXJJbmZvcm1hdGlvbi5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlcnMgPSB0cmF2ZWxsZXJzO1xyXG4gICAgICAgICAgY29uc3Qgc3BsaXRUcmF2ZWxsZXJzID0gdGhpcy5oZWxwZXJzLnNlbGVjdGVkVHJhdmVsbGVycyhcclxuICAgICAgICAgICAgdHJhdmVsbGVycyxcclxuICAgICAgICAgICAgU2VydmljZVR5cGUuRXVyb3N0YXJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gc3BsaXRUcmF2ZWxsZXJzLmFkdWx0cy5sZW5ndGg7XHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPSBzcGxpdFRyYXZlbGxlcnMuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgICAgLy8gdGhpcy50ZW1wUGFyYW1zLmluZmFudHMgPSBzcGxpdFRyYXZlbGxlcnMuaW5mYW50cy5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJzKCk7XHJcbiAgICAgICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHVzZXJTZXJ2aWNlLmNoYW5nZVVzZXIuc3Vic2NyaWJlKCh1c2VyOiBGdWxsVXNlckRldGFpbHMpID0+IHtcclxuICAgICAgdGhpcy50aW1lQ3JpdGVyaWFPcHRpb25zLm5leHQoW1xyXG4gICAgICAgIFRpbWVXaW5kb3cuQW55dGltZSxcclxuICAgICAgICBUaW1lV2luZG93LkFycml2ZSxcclxuICAgICAgICBUaW1lV2luZG93LkRlcGFydFxyXG4gICAgICBdKTsgLy8gVE9ETyB1cGRhdGUgd2l0aCBhbnkgVUZzXHJcbiAgICAgIHRoaXMudXBkYXRlQXZhbGlhYmxlQ2xhc3NlcygpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJzKCk7XHJcbiAgICBjb25zdCByZXN1bHRzOiBFdXJvc3RhclNlc3Npb25UeXBlID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIHRoaXMucmVzdWx0c1Nlc3Npb25OYW1lXHJcbiAgICApIHx8IHtcclxuICAgICAgcmVzdWx0czogW10sXHJcbiAgICAgIGdyb3VwRGF0YToge30sXHJcbiAgICAgIGdyb3VwZWQ6IFtdLFxyXG4gICAgICBxdWVyeToge30gYXMgU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXNcclxuICAgIH07XHJcbiAgICB0aGlzLmZ1bGxSZXN1bHRzID0gdGhpcy5oZWxwZXJzLmNsb25lKHJlc3VsdHMucmVzdWx0cyk7XHJcbiAgICB0aGlzLmZsaWdodHNUb0dyb3VwID0gcmVzdWx0cy5ncm91cERhdGEgfHwge307XHJcbiAgICB0aGlzLnJlc3VsdFF1ZXJ5ID0gcmVzdWx0cy5xdWVyeTtcclxuICAgIGNvbnN0IGlzRmxpZ2h0c0dyb3VwZWQgPSB0aGlzLnNlYXJjaFNlcnZpY2UuaXNGbGlnaHRzR3JvdXBlZCgpO1xyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQoKHJlc3VsdHMucmVzdWx0cyB8fCBbXSkgYXMgRXVyb3N0YXJRdW90ZVJlc3VsdEFycmF5KTtcclxuXHJcbiAgICBjb25zdCByZXN1bHRzQ2xvbmU6IGFueSA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHRzLnJlc3VsdHMpO1xyXG4gICAgLy8gZ2V0IGFyb3VuZCB0aGUgYW5ub3lpbmcgdHlwZSByZXN0cmljdGlvbnMgLSBJIEtOT1cgSk9VUk5FWVMgSVMgVEhFUkUgSSBDQU4gU0VFIElUIFNUT1AgVEVMTElORyBNRSBJVCBJU04nVCBUWVBFU0NSSVBUIVxyXG4gICAgaWYgKHJlc3VsdHNDbG9uZS5sZW5ndGgpXHJcbiAgICAgIHRoaXMuZmlsdGVycy5uZXh0KFxyXG4gICAgICAgIHRoaXMuaGVscGVycy5jcmVhdGVGbGlnaHRGaWx0ZXJzKFxyXG4gICAgICAgICAgcmVzdWx0c0Nsb25lWzBdLmpvdXJuZXlzLFxyXG4gICAgICAgICAgREVGQVVMVF9GSUxURVJTXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG5cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIHRoaXMubmVnb3RpYXRlZCA9XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5mYXJlVHlwZSA9PT0gRmFyZVR5cGUuTmVnb3RpYXRlZCA/IHRydWUgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBwcm9jZXNzUmVzdWx0cyhcclxuICAgIHJlc3VsdHMxOiBFdXJvc3RhclF1b3RlUmVzdWx0XHJcbiAgKTogRXVyb3N0YXJRdW90ZVJlc3VsdEFycmF5IHtcclxuICAgIHRoaXMucmVzdWx0UXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcblxyXG4gICAgdGhpcy5tdWx0aSA9IHJlc3VsdHMxLm11bHRpO1xyXG4gICAgLy8gZGVsZXRlIHRoaXMucmVzdWx0UXVlcnlbJ3dpdGhHcm91cGVkJ107XHJcbiAgICB0aGlzLmZpbHRlcnMubmV4dChcclxuICAgICAgdGhpcy5oZWxwZXJzLmNyZWF0ZUZsaWdodEZpbHRlcnMocmVzdWx0czEuam91cm5leXMsIERFRkFVTFRfRklMVEVSUylcclxuICAgICk7XHJcbiAgICBpZiAocmVzdWx0czEgJiYgdGhpcy5zZWFyY2hTZXJ2aWNlLmlzRmxpZ2h0c0dyb3VwZWQoKSkge1xyXG4gICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeSA9IE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAge30sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgam91cm5leVdoZW5TZWxlY3RlZDoge30sXHJcbiAgICAgICAgICBkdWFsU2luZ2xlV2hlblNlbGVjdGVkOiB7fSxcclxuICAgICAgICAgIHdoZW5TZWxlY3RlZEFsb25lOiB7fVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVzdWx0czEucnVsZUFjdGlvblN1bW1hcnkgfHwge31cclxuICAgICAgKTtcclxuICAgICAgY29uc3QgcmV0dXJuZGF0YSA9IChyZXN1bHRzMS5qb3VybmV5cyB8fCBbXSkucmVkdWNlKFxyXG4gICAgICAgIChcclxuICAgICAgICAgIGFjYzogRXVyb3N0YXJSZXN1bHRzLFxyXG4gICAgICAgICAgcmVzdWx0OiBGbGlnaHRJdGluZXJhcnksXHJcbiAgICAgICAgICBpbmRleDogbnVtYmVyXHJcbiAgICAgICAgKTogRXVyb3N0YXJSZXN1bHRzID0+IHtcclxuICAgICAgICAgIGlmIChyZXN1bHQub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBldXJvUmVzdWx0ID0gdGhpcy5mb3JtYXRFdXJvc3RhclJlc3VsdHMoXHJcbiAgICAgICAgICAgICAgcmVzdWx0Lm91dGJvdW5kRmxpZ2h0cyxcclxuICAgICAgICAgICAgICByZXN1bHQudG90YWwsXHJcbiAgICAgICAgICAgICAgcmVzdWx0LmpvdXJuZXlIYXNoLFxyXG4gICAgICAgICAgICAgIGluZGV4XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGV1cm9SZXN1bHQuY28yUGVyUGFzc2VuZ2VyID0gcmVzdWx0LmNvMlBlclBhc3NlbmdlcjtcclxuICAgICAgICAgICAgZXVyb1Jlc3VsdC5jbzJQZXJJdGVtID0gcmVzdWx0LmNvMlBlckl0ZW07XHJcbiAgICAgICAgICAgIGV1cm9SZXN1bHQuc291cmNlSWQgPSByZXN1bHQuc291cmNlSWQ7XHJcbiAgICAgICAgICAgIGV1cm9SZXN1bHQudG90YWwgPSByZXN1bHQudG90YWw7XHJcbiAgICAgICAgICAgIGV1cm9SZXN1bHQuZHVyYXRpb24gPSB0aGlzLm1pblRvSG91cihyZXN1bHQub3V0Ym91bmRUb3RhbER1cmF0aW9uKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGV1cm9SZXN1bHQuY2FiaW5DbGFzcyk7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAhYWNjLm91dGJvdW5kLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAoaXRlbTogRXVyb3N0YXJJdGVtKSA9PlxyXG4gICAgICAgICAgICAgICAgICBpdGVtLmRhdGVEZXBhcnR1cmUgPT09IGV1cm9SZXN1bHQuZGF0ZURlcGFydHVyZSAmJlxyXG4gICAgICAgICAgICAgICAgICBpdGVtLmNhYmluQ2xhc3MgPT09IGV1cm9SZXN1bHQuY2FiaW5DbGFzc1xyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgYWNjLm91dGJvdW5kLnB1c2goZXVyb1Jlc3VsdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAocmVzdWx0LmluYm91bmRGbGlnaHRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBldXJvUmVzdWx0ID0gdGhpcy5mb3JtYXRFdXJvc3RhclJlc3VsdHMoXHJcbiAgICAgICAgICAgICAgcmVzdWx0LmluYm91bmRGbGlnaHRzLFxyXG4gICAgICAgICAgICAgIHJlc3VsdC50b3RhbCxcclxuICAgICAgICAgICAgICByZXN1bHQuam91cm5leUhhc2gsXHJcbiAgICAgICAgICAgICAgaW5kZXhcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgZXVyb1Jlc3VsdC5jbzJQZXJQYXNzZW5nZXIgPSByZXN1bHQuY28yUGVyUGFzc2VuZ2VyO1xyXG4gICAgICAgICAgICBldXJvUmVzdWx0LmNvMlBlckl0ZW0gPSByZXN1bHQuY28yUGVySXRlbTtcclxuICAgICAgICAgICAgZXVyb1Jlc3VsdC5zb3VyY2VJZCA9IHJlc3VsdC5zb3VyY2VJZDtcclxuICAgICAgICAgICAgZXVyb1Jlc3VsdC50b3RhbCA9IHJlc3VsdC50b3RhbDtcclxuICAgICAgICAgICAgZXVyb1Jlc3VsdC5kdXJhdGlvbiA9IHRoaXMubWluVG9Ib3VyKHJlc3VsdC5pbmJvdW5kVG90YWxEdXJhdGlvbik7XHJcblxyXG5cclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZXVyb1Jlc3VsdC5jYWJpbkNsYXNzKTtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICFhY2MuaW5ib3VuZC5maW5kKFxyXG4gICAgICAgICAgICAgICAgKGl0ZW06IEV1cm9zdGFySXRlbSkgPT5cclxuICAgICAgICAgICAgICAgICAgaXRlbS5kYXRlRGVwYXJ0dXJlID09PSBldXJvUmVzdWx0LmRhdGVEZXBhcnR1cmUgJiZcclxuICAgICAgICAgICAgICAgICAgaXRlbS5jYWJpbkNsYXNzID09PSBldXJvUmVzdWx0LmNhYmluQ2xhc3NcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIGFjYy5pbmJvdW5kLnB1c2goZXVyb1Jlc3VsdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB7IG91dGJvdW5kOiBbXSwgaW5ib3VuZDogW10gfSBhcyBFdXJvc3RhclJlc3VsdHNcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuZGF0YS5vdXRib3VuZCA9IHJldHVybmRhdGEub3V0Ym91bmQucmVkdWNlKFxyXG4gICAgICAgIHRoaXMubWF0Y2hGYXJlcy5iaW5kKHRoaXMpLFxyXG4gICAgICAgIFtdXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybmRhdGEuaW5ib3VuZCA9IHJldHVybmRhdGEuaW5ib3VuZC5yZWR1Y2UoXHJcbiAgICAgICAgdGhpcy5tYXRjaEZhcmVzLmJpbmQodGhpcyksXHJcbiAgICAgICAgW11cclxuICAgICAgKTtcclxuXHJcblxyXG4gICAgICByZXR1cm4gW3JldHVybmRhdGFdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHJlc3VsdHMxID8gW3Jlc3VsdHMxXSA6IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuICBtYXRjaEZhcmVzKGFjYzogRXVyb3N0YXJJdGVtW10sIG91dDogRXVyb3N0YXJJdGVtKTogRXVyb3N0YXJJdGVtW10ge1xyXG4gICAgY29uc3QgbWF0Y2hpbmdFdXJvc3RhciA9IGFjYy5maW5kKFxyXG4gICAgICAoaXRlbSkgPT4gaXRlbS5kYXRlRGVwYXJ0dXJlID09PSBvdXQuZGF0ZURlcGFydHVyZVxyXG4gICAgKTtcclxuICAgIGlmICghbWF0Y2hpbmdFdXJvc3Rhcikge1xyXG4gICAgICBhY2MucHVzaChvdXQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gY2hlY2sgd2hhdCBuZWVkcyBhZGRpbmcgYW5kIGFkZCBpdFxyXG4gICAgICBzd2l0Y2ggKG91dC5jYWJpbkNsYXNzKSB7XHJcbiAgICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXk6XHJcbiAgICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3M6XHJcbiAgICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkOlxyXG4gICAgICAgICAgbWF0Y2hpbmdFdXJvc3Rhci5zdGFuZGFyZEZhcmUgPSBvdXQuc3RhbmRhcmRGYXJlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnUHJlbWl1bSc6XHJcbiAgICAgICAgICBtYXRjaGluZ0V1cm9zdGFyLnN0YW5kYXJkUHJlbWllckZhcmUgPSBvdXQuc3RhbmRhcmRQcmVtaWVyRmFyZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzczpcclxuICAgICAgICAgIG1hdGNoaW5nRXVyb3N0YXIuYnVzaW5lc3NQcmVtaWVyRmFyZSA9IG91dC5idXNpbmVzc1ByZW1pZXJGYXJlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdob3cgZGlkIEkgZ2V0IGhlcmUnLCBvdXQuY2FiaW5DbGFzcyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFjYztcclxuICB9XHJcblxyXG4gIGZvcm1hdEV1cm9zdGFyUmVzdWx0cyhcclxuICAgIHJlc3VsdHM6IEZsaWdodEpvdXJuZXlbXSxcclxuICAgIHRvdGFsOiBGbGlnaHRGYXJlVG90YWwsXHJcbiAgICBqb3VybmV5SGFzaDogc3RyaW5nLFxyXG4gICAgaW5kZXg6IG51bWJlclxyXG4gICk6IEV1cm9zdGFySXRlbSB7XHJcbiAgICBsZXQgcmV0dXJuT2JqZWN0OiBFdXJvc3Rhckl0ZW0gPSB7XHJcbiAgICAgIGRhdGVBcnJpdmFsOiBudWxsLFxyXG4gICAgICBkYXRlRGVwYXJ0dXJlOiBudWxsLFxyXG4gICAgICBkdXJhdGlvbjogbnVsbCxcclxuICAgICAgdGltZUFycml2YWw6IG51bGwsXHJcbiAgICAgIHRpbWVEZXBhcnR1cmU6IG51bGwsXHJcbiAgICAgIGNvMlBlckl0ZW06IDAsXHJcbiAgICAgIGNvMlBlclBhc3NlbmdlcjogMCxcclxuICAgICAgc291cmNlSWQ6IG51bGwsXHJcbiAgICAgIHRvdGFsOiBudWxsLFxyXG4gICAgICB1aWQ6IG51bGwsXHJcbiAgICAgIGNhYmluQ2xhc3M6IG51bGwsXHJcbiAgICAgIGJ1c2luZXNzUHJlbWllckZhcmU6IHtcclxuICAgICAgICBjbGFzczogbnVsbCxcclxuICAgICAgICBmYXJlOiBudWxsLFxyXG4gICAgICAgIGlzRGlzYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgcHJpY2U6IE5hTixcclxuICAgICAgICBjdXJyZW5jeTogJ0dCUCcsXHJcbiAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgIHJlcXVpcmVzUmVhc29uOiBmYWxzZSxcclxuICAgICAgICBwcmVmZXJyZWQ6IGZhbHNlLFxyXG4gICAgICAgIHByZWZlcnJlZE1lc3NhZ2VzOiAnJyxcclxuICAgICAgICBjb21wYW55UHJlZmVycmVkOiBmYWxzZSxcclxuICAgICAgICBjb21wYW55UHJlZmVycmVkTWVzc2FnZTogJycsXHJcbiAgICAgICAgb2ZmaWNlUHJlZmVycmVkOiBmYWxzZSxcclxuICAgICAgICBvZmZpY2VQcmVmZXJyZWRNZXNzYWdlOiAnJyxcclxuICAgICAgICB0bWNQcmVmZXJyZWQ6IGZhbHNlLFxyXG4gICAgICAgIHRtY1ByZWZlcnJlZE1lc3NhZ2U6ICcnLFxyXG4gICAgICAgIHVuYXZhaWxhYmxlOiBmYWxzZSxcclxuICAgICAgICB1bmF2YWlsYWJsZU1lc3NhZ2U6ICcnLFxyXG4gICAgICAgIHJlcXVpcmVzUmVhc29uTWVzc2FnZTogJycsXHJcbiAgICAgICAgY2FuU2VsZWN0OiBmYWxzZSxcclxuICAgICAgICBqb3VybmV5SGFzaDogJydcclxuICAgICAgfSxcclxuICAgICAgc3RhbmRhcmRGYXJlOiB7XHJcbiAgICAgICAgY2xhc3M6IG51bGwsXHJcbiAgICAgICAgZmFyZTogbnVsbCxcclxuICAgICAgICBpc0Rpc2FibGVkOiB0cnVlLFxyXG4gICAgICAgIHByaWNlOiBOYU4sXHJcbiAgICAgICAgY3VycmVuY3k6ICdHQlAnLFxyXG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICByZXF1aXJlc1JlYXNvbjogZmFsc2UsXHJcbiAgICAgICAgcHJlZmVycmVkOiBmYWxzZSxcclxuICAgICAgICBwcmVmZXJyZWRNZXNzYWdlczogJycsXHJcbiAgICAgICAgY29tcGFueVByZWZlcnJlZDogZmFsc2UsXHJcbiAgICAgICAgY29tcGFueVByZWZlcnJlZE1lc3NhZ2U6ICcnLFxyXG4gICAgICAgIG9mZmljZVByZWZlcnJlZDogZmFsc2UsXHJcbiAgICAgICAgb2ZmaWNlUHJlZmVycmVkTWVzc2FnZTogJycsXHJcbiAgICAgICAgdG1jUHJlZmVycmVkOiBmYWxzZSxcclxuICAgICAgICB0bWNQcmVmZXJyZWRNZXNzYWdlOiAnJyxcclxuICAgICAgICB1bmF2YWlsYWJsZTogZmFsc2UsXHJcbiAgICAgICAgdW5hdmFpbGFibGVNZXNzYWdlOiAnJyxcclxuICAgICAgICByZXF1aXJlc1JlYXNvbk1lc3NhZ2U6ICcnLFxyXG4gICAgICAgIGNhblNlbGVjdDogZmFsc2UsXHJcbiAgICAgICAgam91cm5leUhhc2g6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHN0YW5kYXJkUHJlbWllckZhcmU6IHtcclxuICAgICAgICBjbGFzczogbnVsbCxcclxuICAgICAgICBmYXJlOiBudWxsLFxyXG4gICAgICAgIGlzRGlzYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgcHJpY2U6IE5hTixcclxuICAgICAgICBjdXJyZW5jeTogJ0dCUCcsXHJcbiAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgIHJlcXVpcmVzUmVhc29uOiBmYWxzZSxcclxuICAgICAgICBwcmVmZXJyZWQ6IGZhbHNlLFxyXG4gICAgICAgIHByZWZlcnJlZE1lc3NhZ2VzOiAnJyxcclxuICAgICAgICBjb21wYW55UHJlZmVycmVkOiBmYWxzZSxcclxuICAgICAgICBjb21wYW55UHJlZmVycmVkTWVzc2FnZTogJycsXHJcbiAgICAgICAgb2ZmaWNlUHJlZmVycmVkOiBmYWxzZSxcclxuICAgICAgICBvZmZpY2VQcmVmZXJyZWRNZXNzYWdlOiAnJyxcclxuICAgICAgICB0bWNQcmVmZXJyZWQ6IGZhbHNlLFxyXG4gICAgICAgIHRtY1ByZWZlcnJlZE1lc3NhZ2U6ICcnLFxyXG4gICAgICAgIHVuYXZhaWxhYmxlOiBmYWxzZSxcclxuICAgICAgICB1bmF2YWlsYWJsZU1lc3NhZ2U6ICcnLFxyXG4gICAgICAgIHJlcXVpcmVzUmVhc29uTWVzc2FnZTogJycsXHJcbiAgICAgICAgY2FuU2VsZWN0OiBmYWxzZSxcclxuICAgICAgICBqb3VybmV5SGFzaDogJydcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8vIHJldHVybk9iamVjdC5kdXJhdGlvbiA9IHJlc3VsdHMub3V0Ym91bmRUb3RhbER1cmF0aW9uO1xyXG4gICAgcmVzdWx0cy5mb3JFYWNoKChmbGlnaHQ6IEZsaWdodEpvdXJuZXkpID0+IHtcclxuICAgICAgcmV0dXJuT2JqZWN0LmRhdGVBcnJpdmFsID0gZmxpZ2h0LmRhdGVUaW1lQXJyaXZpbmc7XHJcbiAgICAgIHJldHVybk9iamVjdC5kYXRlRGVwYXJ0dXJlID0gZmxpZ2h0LmRhdGVUaW1lRGVwYXJ0aW5nO1xyXG4gICAgICByZXR1cm5PYmplY3QuZHVyYXRpb24gPSB0aGlzLm1pblRvSG91cihmbGlnaHQudG90YWxEdXJhdGlvbik7XHJcbiAgICAgIHJldHVybk9iamVjdC50aW1lQXJyaXZhbCA9IG1vbWVudChmbGlnaHQuZGF0ZVRpbWVBcnJpdmluZykuZm9ybWF0KFxyXG4gICAgICAgICdISDptbSdcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuT2JqZWN0LnRpbWVEZXBhcnR1cmUgPSBtb21lbnQoZmxpZ2h0LmRhdGVUaW1lRGVwYXJ0aW5nKS5mb3JtYXQoXHJcbiAgICAgICAgJ0hIOm1tJ1xyXG4gICAgICApO1xyXG4gICAgICByZXR1cm5PYmplY3QuY2FiaW5DbGFzcyA9IGZsaWdodC5jYWJpbkNsYXNzO1xyXG4gICAgICByZXR1cm5PYmplY3QudWlkID0gaW5kZXg7XHJcbiAgICAgIC8vIFsxNDo0MV0gQnJlbmRhbiBWZW5pbmdhXHJcbiAgICAgIC8vIEVjb25vbXkgKGFuZCB0aGVpciB2YXJpYW50cykgd291bGQgYmUgU3RhbmRhcmRcclxuICAgICAgLy8gUHJlbWl1bSB3b3VsZCBiZSBTdGFuZGFyZCBQcmVtaXVtXHJcbiAgICAgIC8vIEJ1c2luZXNzIHdvdWxkIGJlIEJ1c2luZXNzIFByZW1pdW1cclxuICAgICAgc3dpdGNoIChmbGlnaHQuY2FiaW5DbGFzcykge1xyXG4gICAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215RmxleGk6XHJcbiAgICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3M6XHJcbiAgICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkOlxyXG4gICAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215OlxyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS5pc0Rpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLmZhcmUgPSBmbGlnaHQ7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLnByaWNlID0gdG90YWwucHJpY2U7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLmN1cnJlbmN5ID0gdG90YWwuY3VycmVuY3k7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLmNsYXNzID0gZmxpZ2h0LmNhYmluQ2xhc3M7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLmpvdXJuZXlIYXNoID0gam91cm5leUhhc2g7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3QgPSB0aGlzLnVwZGF0ZVJ1bGVzKHJldHVybk9iamVjdCwgam91cm5leUhhc2gsICdzdGFuZGFyZEZhcmUnKVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnUHJlbWl1bSc6XHJcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS5pc0Rpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS5mYXJlID0gZmxpZ2h0O1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUucHJpY2UgPSB0b3RhbC5wcmljZTtcclxuICAgICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZFByZW1pZXJGYXJlLmN1cnJlbmN5ID0gdG90YWwuY3VycmVuY3k7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS5jbGFzcyA9IGZsaWdodC5jYWJpbkNsYXNzO1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZFByZW1pZXJGYXJlLmpvdXJuZXlIYXNoID0gam91cm5leUhhc2g7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3QgPSB0aGlzLnVwZGF0ZVJ1bGVzKHJldHVybk9iamVjdCwgam91cm5leUhhc2gsICdzdGFuZGFyZFByZW1pZXJGYXJlJylcclxuXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3M6XHJcbiAgICAgICAgICByZXR1cm5PYmplY3QuYnVzaW5lc3NQcmVtaWVyRmFyZS5pc0Rpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3QuYnVzaW5lc3NQcmVtaWVyRmFyZS5mYXJlID0gZmxpZ2h0O1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LmJ1c2luZXNzUHJlbWllckZhcmUucHJpY2UgPSB0b3RhbC5wcmljZTtcclxuICAgICAgICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLmN1cnJlbmN5ID0gdG90YWwuY3VycmVuY3k7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3QuYnVzaW5lc3NQcmVtaWVyRmFyZS5jbGFzcyA9IGZsaWdodC5jYWJpbkNsYXNzO1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LmJ1c2luZXNzUHJlbWllckZhcmUuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLmpvdXJuZXlIYXNoID0gam91cm5leUhhc2g7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3QgPSB0aGlzLnVwZGF0ZVJ1bGVzKHJldHVybk9iamVjdCwgam91cm5leUhhc2gsICdidXNpbmVzc1ByZW1pZXJGYXJlJylcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ25ldyBjbGFzcyB0byBiZSBpbXBsZW1lbnRlZDogJywgZmxpZ2h0LmNhYmluQ2xhc3MpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXR1cm5PYmplY3Q7XHJcbiAgfVxyXG4gIHByaXZhdGUgdXBkYXRlUnVsZXMocmV0dXJuT2JqZWN0OiBFdXJvc3Rhckl0ZW0sIGpvdXJuZXlIYXNoOiBzdHJpbmcsIGZhcmVUeXBlOiBzdHJpbmcpOiBFdXJvc3Rhckl0ZW17XHJcbiAgICBjb25zdCBzZWxlY3RlZFJ1bGVTdW1tYXJ5OiBSZWNvcmRSdWxlQWN0aW9uID1cclxuICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWRbXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodD8uam91cm5leUhhc2hcclxuICAgIF0gfHwge307XHJcblxyXG4gIGNvbnN0IGhhc0ZpZWxkID0gPFQ+KFxyXG4gICAgam91cm5leUhhc2g6IHN0cmluZyxcclxuICAgIGZpZWxkOiBzdHJpbmcsXHJcbiAgICBkZWY6IFRcclxuICApOiBUID0+IHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuaGVscGVycy5maWVsZEZyb21PYmplY3QodGhpcy5fcnVsZUFjdGlvblN1bW1hcnksIFtcclxuICAgICAgICAnam91cm5leVdoZW5TZWxlY3RlZCcsXHJcbiAgICAgICAgam91cm5leUhhc2gsXHJcbiAgICAgICAgZmllbGRcclxuICAgICAgXSkgfHxcclxuICAgICAgdGhpcy5oZWxwZXJzLmZpZWxkRnJvbU9iamVjdCh0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeSwgW1xyXG4gICAgICAgICd3aGVuU2VsZWN0ZWRBbG9uZScsXHJcbiAgICAgICAgam91cm5leUhhc2gsXHJcbiAgICAgICAgZmllbGRcclxuICAgICAgXSkgfHxcclxuICAgICAgdGhpcy5oZWxwZXJzLmZpZWxkRnJvbU9iamVjdChzZWxlY3RlZFJ1bGVTdW1tYXJ5LCBbXHJcbiAgICAgICAgam91cm5leUhhc2gsXHJcbiAgICAgICAgZmllbGRcclxuICAgICAgXSkgfHxcclxuICAgICAgZGVmXHJcbiAgICApO1xyXG4gIH07XHJcbiAgc3dpdGNoIChmYXJlVHlwZSkge1xyXG4gICAgY2FzZSAnc3RhbmRhcmRGYXJlJzpcclxuICAgIHJldHVybk9iamVjdC5zdGFuZGFyZEZhcmUuY29tcGFueVByZWZlcnJlZCA9XHJcbiAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXVxyXG4gICAgICA/LmNvbXBhbnlQcmVmZXJyZWQgfHxcclxuICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXVxyXG4gICAgICA/LmNvbXBhbnlQcmVmZXJyZWQgfHxcclxuICAgIGZhbHNlO1xyXG5cclxuICAgIHJldHVybk9iamVjdC5zdGFuZGFyZEZhcmUuY29tcGFueVByZWZlcnJlZE1lc3NhZ2UgPVxyXG4gICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF1cclxuICAgICAgPy5jb21wYW55UHJlZmVycmVkTWVzc2FnZSB8fFxyXG4gICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdXHJcbiAgICAgID8uY29tcGFueVByZWZlcnJlZE1lc3NhZ2UgfHxcclxuICAgICcnO1xyXG4gICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS5vZmZpY2VQcmVmZXJyZWQgPVxyXG4gICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF1cclxuICAgICAgPy5vZmZpY2VQcmVmZXJyZWQgfHxcclxuICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXVxyXG4gICAgICA/Lm9mZmljZVByZWZlcnJlZCB8fFxyXG4gICAgZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS5vZmZpY2VQcmVmZXJyZWRNZXNzYWdlID1cclxuICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdXHJcbiAgICAgID8ub2ZmaWNlUHJlZmVycmVkTWVzc2FnZSB8fFxyXG4gICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdXHJcbiAgICAgID8ub2ZmaWNlUHJlZmVycmVkTWVzc2FnZSB8fFxyXG4gICAgJyc7XHJcbiAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLnRtY1ByZWZlcnJlZCA9XHJcbiAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXVxyXG4gICAgICA/LnRtY1ByZWZlcnJlZCB8fFxyXG4gICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdXHJcbiAgICAgID8udG1jUHJlZmVycmVkIHx8XHJcbiAgICBmYWxzZTtcclxuXHJcbiAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLnRtY1ByZWZlcnJlZE1lc3NhZ2UgPVxyXG4gICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF1cclxuICAgICAgPy50bWNQcmVmZXJyZWRNZXNzYWdlIHx8XHJcbiAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF1cclxuICAgICAgPy50bWNQcmVmZXJyZWRNZXNzYWdlIHx8XHJcbiAgICAnJztcclxuICAgIHJldHVybk9iamVjdC5zdGFuZGFyZEZhcmUucHJlZmVycmVkID1cclxuICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdXHJcbiAgICAgID8uY29tcGFueVByZWZlcnJlZCB8fFxyXG4gICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdXHJcbiAgICAgID8uY29tcGFueVByZWZlcnJlZCB8fFxyXG4gICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF1cclxuICAgICAgPy5vZmZpY2VQcmVmZXJyZWQgfHxcclxuICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXVxyXG4gICAgICA/Lm9mZmljZVByZWZlcnJlZCB8fFxyXG4gICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF1cclxuICAgICAgPy50bWNQcmVmZXJyZWQgfHxcclxuICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXVxyXG4gICAgICA/LnRtY1ByZWZlcnJlZDtcclxuXHJcbiAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZEZhcmUuc2VsZWN0ZWQgPSByZXR1cm5PYmplY3QudWlkID09PSB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQ/LnVpZDtcclxuICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS51bmF2YWlsYWJsZSA9IGhhc0ZpZWxkKGpvdXJuZXlIYXNoLCAndW5hdmFpbGFibGUnLCBmYWxzZSk7XHJcblxyXG4gICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLnVuYXZhaWxhYmxlTWVzc2FnZSA9IGhhc0ZpZWxkKGpvdXJuZXlIYXNoLCAndW5hdmFpbGFibGVNZXNzYWdlJywgJycpO1xyXG4gICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLnJlcXVpcmVzUmVhc29uID0gaGFzRmllbGQoam91cm5leUhhc2gsICdyZXF1aXJlc1JlYXNvbicsIGZhbHNlKTtcclxuICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS5yZXF1aXJlc1JlYXNvbk1lc3NhZ2UgPSBoYXNGaWVsZChqb3VybmV5SGFzaCwgJ3JlcXVpcmVzUmVhc29uTWVzc2FnZScsICcnKTtcclxuXHJcbiAgICAgIGNhc2UgJ3N0YW5kYXJkUHJlbWllckZhcmUnOlxyXG4gICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZFByZW1pZXJGYXJlLmNvbXBhbnlQcmVmZXJyZWQgPVxyXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdXHJcbiAgICAgICAgICA/LmNvbXBhbnlQcmVmZXJyZWQgfHxcclxuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF1cclxuICAgICAgICAgID8uY29tcGFueVByZWZlcnJlZCB8fFxyXG4gICAgICAgIGZhbHNlO1xyXG5cclxuICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS5jb21wYW55UHJlZmVycmVkTWVzc2FnZSA9XHJcbiAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF1cclxuICAgICAgICAgID8uY29tcGFueVByZWZlcnJlZE1lc3NhZ2UgfHxcclxuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF1cclxuICAgICAgICAgID8uY29tcGFueVByZWZlcnJlZE1lc3NhZ2UgfHxcclxuICAgICAgICAnJztcclxuICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS5vZmZpY2VQcmVmZXJyZWQgPVxyXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdXHJcbiAgICAgICAgICA/Lm9mZmljZVByZWZlcnJlZCB8fFxyXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXVxyXG4gICAgICAgICAgPy5vZmZpY2VQcmVmZXJyZWQgfHxcclxuICAgICAgICBmYWxzZTtcclxuXHJcbiAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUub2ZmaWNlUHJlZmVycmVkTWVzc2FnZSA9XHJcbiAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF1cclxuICAgICAgICAgID8ub2ZmaWNlUHJlZmVycmVkTWVzc2FnZSB8fFxyXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXVxyXG4gICAgICAgICAgPy5vZmZpY2VQcmVmZXJyZWRNZXNzYWdlIHx8XHJcbiAgICAgICAgJyc7XHJcbiAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUudG1jUHJlZmVycmVkID1cclxuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXVxyXG4gICAgICAgICAgPy50bWNQcmVmZXJyZWQgfHxcclxuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF1cclxuICAgICAgICAgID8udG1jUHJlZmVycmVkIHx8XHJcbiAgICAgICAgZmFsc2U7XHJcblxyXG4gICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZFByZW1pZXJGYXJlLnRtY1ByZWZlcnJlZE1lc3NhZ2UgPVxyXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdXHJcbiAgICAgICAgICA/LnRtY1ByZWZlcnJlZE1lc3NhZ2UgfHxcclxuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF1cclxuICAgICAgICAgID8udG1jUHJlZmVycmVkTWVzc2FnZSB8fFxyXG4gICAgICAgICcnO1xyXG4gICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZFByZW1pZXJGYXJlLnByZWZlcnJlZCA9XHJcbiAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF1cclxuICAgICAgICAgID8uY29tcGFueVByZWZlcnJlZCB8fFxyXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXVxyXG4gICAgICAgICAgPy5jb21wYW55UHJlZmVycmVkIHx8XHJcbiAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF1cclxuICAgICAgICAgID8ub2ZmaWNlUHJlZmVycmVkIHx8XHJcbiAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdXHJcbiAgICAgICAgICA/Lm9mZmljZVByZWZlcnJlZCB8fFxyXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdXHJcbiAgICAgICAgICA/LnRtY1ByZWZlcnJlZCB8fFxyXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXVxyXG4gICAgICAgICAgPy50bWNQcmVmZXJyZWQ7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS5zZWxlY3RlZCA9IHJldHVybk9iamVjdC51aWQgPT09IHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodD8udWlkO1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUudW5hdmFpbGFibGUgPSBoYXNGaWVsZChqb3VybmV5SGFzaCwgJ3VuYXZhaWxhYmxlJywgZmFsc2UpO1xyXG5cclxuICAgICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZFByZW1pZXJGYXJlLnVuYXZhaWxhYmxlTWVzc2FnZSA9IGhhc0ZpZWxkKGpvdXJuZXlIYXNoLCAndW5hdmFpbGFibGVNZXNzYWdlJywgJycpO1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUucmVxdWlyZXNSZWFzb24gPSBoYXNGaWVsZChqb3VybmV5SGFzaCwgJ3JlcXVpcmVzUmVhc29uJywgZmFsc2UpO1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUucmVxdWlyZXNSZWFzb25NZXNzYWdlID0gaGFzRmllbGQoam91cm5leUhhc2gsICdyZXF1aXJlc1JlYXNvbk1lc3NhZ2UnLCAnJyk7XHJcbiBjYXNlICdidXNpbmVzc1ByZW1pZXJGYXJlJzpcclxuICByZXR1cm5PYmplY3QuYnVzaW5lc3NQcmVtaWVyRmFyZS5jb21wYW55UHJlZmVycmVkID1cclxuICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXVxyXG4gICAgPy5jb21wYW55UHJlZmVycmVkIHx8XHJcbiAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdXHJcbiAgICA/LmNvbXBhbnlQcmVmZXJyZWQgfHxcclxuICBmYWxzZTtcclxuXHJcbiAgcmV0dXJuT2JqZWN0LmJ1c2luZXNzUHJlbWllckZhcmUuY29tcGFueVByZWZlcnJlZE1lc3NhZ2UgPVxyXG4gIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdXHJcbiAgICA/LmNvbXBhbnlQcmVmZXJyZWRNZXNzYWdlIHx8XHJcbiAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdXHJcbiAgICA/LmNvbXBhbnlQcmVmZXJyZWRNZXNzYWdlIHx8XHJcbiAgJyc7XHJcbiAgcmV0dXJuT2JqZWN0LmJ1c2luZXNzUHJlbWllckZhcmUub2ZmaWNlUHJlZmVycmVkID1cclxuICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXVxyXG4gICAgPy5vZmZpY2VQcmVmZXJyZWQgfHxcclxuICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF1cclxuICAgID8ub2ZmaWNlUHJlZmVycmVkIHx8XHJcbiAgZmFsc2U7XHJcblxyXG4gIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLm9mZmljZVByZWZlcnJlZE1lc3NhZ2UgPVxyXG4gIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdXHJcbiAgICA/Lm9mZmljZVByZWZlcnJlZE1lc3NhZ2UgfHxcclxuICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF1cclxuICAgID8ub2ZmaWNlUHJlZmVycmVkTWVzc2FnZSB8fFxyXG4gICcnO1xyXG4gIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLnRtY1ByZWZlcnJlZCA9XHJcbiAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF1cclxuICAgID8udG1jUHJlZmVycmVkIHx8XHJcbiAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdXHJcbiAgICA/LnRtY1ByZWZlcnJlZCB8fFxyXG4gIGZhbHNlO1xyXG5cclxuICByZXR1cm5PYmplY3QuYnVzaW5lc3NQcmVtaWVyRmFyZS50bWNQcmVmZXJyZWRNZXNzYWdlID1cclxuICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXVxyXG4gICAgPy50bWNQcmVmZXJyZWRNZXNzYWdlIHx8XHJcbiAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdXHJcbiAgICA/LnRtY1ByZWZlcnJlZE1lc3NhZ2UgfHxcclxuICAnJztcclxuICByZXR1cm5PYmplY3QuYnVzaW5lc3NQcmVtaWVyRmFyZS5wcmVmZXJyZWQgPVxyXG4gIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdXHJcbiAgICA/LmNvbXBhbnlQcmVmZXJyZWQgfHxcclxuICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF1cclxuICAgID8uY29tcGFueVByZWZlcnJlZCB8fFxyXG4gIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdXHJcbiAgICA/Lm9mZmljZVByZWZlcnJlZCB8fFxyXG4gIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXVxyXG4gICAgPy5vZmZpY2VQcmVmZXJyZWQgfHxcclxuICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXVxyXG4gICAgPy50bWNQcmVmZXJyZWQgfHxcclxuICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF1cclxuICAgID8udG1jUHJlZmVycmVkO1xyXG4gICAgcmV0dXJuT2JqZWN0LmJ1c2luZXNzUHJlbWllckZhcmUuc2VsZWN0ZWQgPSByZXR1cm5PYmplY3QudWlkID09PSB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQ/LnVpZDtcclxuICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLnVuYXZhaWxhYmxlID0gaGFzRmllbGQoam91cm5leUhhc2gsICd1bmF2YWlsYWJsZScsIGZhbHNlKTtcclxuXHJcbiAgICByZXR1cm5PYmplY3QuYnVzaW5lc3NQcmVtaWVyRmFyZS51bmF2YWlsYWJsZU1lc3NhZ2UgPSBoYXNGaWVsZChqb3VybmV5SGFzaCwgJ3VuYXZhaWxhYmxlTWVzc2FnZScsICcnKTtcclxuICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLnJlcXVpcmVzUmVhc29uID0gaGFzRmllbGQoam91cm5leUhhc2gsICdyZXF1aXJlc1JlYXNvbicsIGZhbHNlKTtcclxuICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLnJlcXVpcmVzUmVhc29uTWVzc2FnZSA9IGhhc0ZpZWxkKGpvdXJuZXlIYXNoLCAncmVxdWlyZXNSZWFzb25NZXNzYWdlJywgJycpO1xyXG4gICAgICAgIH1cclxuICByZXR1cm4gcmV0dXJuT2JqZWN0XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcmVzZXRRdWVyeShjaGVja0lzVmFsaWQ6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXModGhpcy5zZWFyY2hTZXJ2aWNlLm1ha2VFdXJvc3RhclF1ZXJ5KCkpO1xyXG4gICAgaWYgKGNoZWNrSXNWYWxpZCkge1xyXG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzZXRQYXJhbXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlc2V0KCk7XHJcbiAgICB0aGlzLnJlc2V0UXVlcnkoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzVmFsaWQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZG9DaGVja3MpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgRXVyb3N0YXJFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgIHtcclxuICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXHJcbiAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzID0gW107XHJcbiAgICBpZiAoIXRoaXMuX29yaWdpbkFpcnBvcnQpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIGFkZCBpbiBhIGRlcGFydHVyZSBsb2NhdGlvbicpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIGFkZCBpbiBhIGFycml2YWwgZGVzdGluYXRpb24nKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZS5pc0FmdGVyKG1vbWVudCgpKSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdEZXBhcnR1cmUgZGF0ZSBjYW4gbm90IGJlIGluIHRoZSBwYXN0Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLl9vcmlnaW5BaXJwb3J0ICYmXHJcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCAmJlxyXG4gICAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQgPT09IHRoaXMuX29yaWdpbkFpcnBvcnRcclxuICAgICkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICdPcmlnaW4gYW5kIGRlc3RpbmF0aW9uIHN0YXRpb24gY2Fubm90IGJlIHRoZSBzYW1lJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaXNSZXR1cm4pIHtcclxuICAgICAgLy8gVE9ETyBjaGVjayB0aGF0IHJldHVybiBkZXRhaWxzIGFyZSBzZXRcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUuaXNTYW1lT3JBZnRlcihcclxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYVxyXG4gICAgICAgIClcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAgICdSZXR1cm4gZGF0ZSBtdXN0IGJlIGFmdGVyIHRoZSBkZXBhcnR1cmUgZGF0ZSdcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIHRoaXMgaXMgc3R1ZmYgZm9yIG1hdGNoaW5nIGNhYmluIGNsYXNzZXNcclxuICAgICAgaWYgKCF0aGlzLmNoZWNrQ2FiaW5NYXRjaGlzVmFsaWQoKSkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgICAnVGhlIHR5cGVzIG9mIGNhYmluIGNsYXNzZXMgc2VsZWN0ZWQgYXJlIG5vdCBjb21wYXRpYmxlLiBFeGFtcGxlcyBvZiBjb21wYXRpYmxlIGNhYmluIGNsYXNzZXM7IEFueSAtIEFueTsgU3RhbmRhcmQgLSBTdGFuZGFyZDsgQnVzaW5lc3MgLSBCdXNpbmVzcydcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzVmFsaWQubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5sZW5ndGggPT09IDApO1xyXG4gICAgdGhpcy5tZXNzYWdlcy5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzKTtcclxuICB9XHJcblxyXG4gIGNoZWNrQ2FiaW5NYXRjaGlzVmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICBzd2l0Y2ggKHRoaXMudGVtcFBhcmFtcy5jYWJpbkNsYXNzKSB7XHJcbiAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5Bbnk6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzID09PSBGbGlnaHRDYWJpbkNsYXNzLkFueTtcclxuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXk6XHJcbiAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teTpcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLnJldHVybkNhYmluQ2xhc3MgIT09IEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3MgJiZcclxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzICE9PSBGbGlnaHRDYWJpbkNsYXNzLkFueVxyXG4gICAgICAgICk7XHJcbiAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzczpcclxuICAgICAgICByZXR1cm4gIShcclxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzID09PSBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXkgfHxcclxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzID09PVxyXG4gICAgICAgICAgICBGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215IHx8XHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzcyA9PT0gRmxpZ2h0Q2FiaW5DbGFzcy5BbnlcclxuICAgICAgICApO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhcnRTZWFyY2goKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChbXSk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xyXG4gICAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBPYmplY3QuZnJlZXplKFxyXG4gICAgICAgIHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLnRlbXBQYXJhbXMpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgICAgRXVyb3N0YXJFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxyXG4gICAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlUmVjZW50U2VhcmNoKHRoaXMuZ2V0UmVjZW50U2VhcmNoUXVlcnkocXVlcnkpKTtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLl9zdGFydFNlYXJjaChcclxuICAgICAgICB0aGlzLmV1cm9zdGFyRmV0Y2hlci5mZXRjaExpc3QodGhpcy5nZXRTZWFyY2hRdWVyeSgpKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRSZWNlbnRTZWFyY2hRdWVyeShcclxuICAgIHF1ZXJ5OiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlc1xyXG4gICk6IFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyB7XHJcbiAgICBjb25zdCByZWNlbnRTZWFyY2hRdWVyeTogSUV1cm9zdGFyU2VhcmNoQXJncyA9IHRoaXMudXBkYXRlU2VyY2hRdWVyeShxdWVyeSk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLkV1cm9zdGFyLFxyXG4gICAgICBzZWFyY2hBcmdzOiByZWNlbnRTZWFyY2hRdWVyeSxcclxuICAgICAgdHJhdmVsRGF0ZTogdGhpcy5vdXRCb3VuZERhdGUuZm9ybWF0KCksXHJcbiAgICAgIHRyYXZlbGxlcnM6IHRoaXMuaGVscGVycy5nZXRUcmF2ZWxsZXJzSWQodGhpcy50cmF2ZWxsZXJzKVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlU2VyY2hRdWVyeShcclxuICAgIHF1ZXJ5OiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlc1xyXG4gICk6IElFdXJvc3RhclNlYXJjaEFyZ3Mge1xyXG4gICAgY29uc3Qgc2VhcmNoUXVlcnk6IElFdXJvc3RhclNlYXJjaEFyZ3MgPSBxdWVyeTtcclxuICAgIGlmICh0aGlzLmRlcGFydExvY2F0aW9uKSB7XHJcbiAgICAgIHNlYXJjaFF1ZXJ5LmRlcGFydExvY2F0aW9uID0gdGhpcy5kZXBhcnRMb2NhdGlvbjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFycml2ZUxvY2F0aW9uKSB7XHJcbiAgICAgIHNlYXJjaFF1ZXJ5LmFycml2ZUxvY2F0aW9uID0gdGhpcy5hcnJpdmVMb2NhdGlvbjtcclxuICAgIH1cclxuICAgIHNlYXJjaFF1ZXJ5Lm91dGJvdW5kQ2FiaW5DbGFzc05hbWUgPSB0aGlzLnR1cm5DYWJpblR5cGVUb05hbWUoXHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5jYWJpbkNsYXNzXHJcbiAgICApO1xyXG4gICAgaWYgKHRoaXMuaXNSZXR1cm4pIHtcclxuICAgICAgc2VhcmNoUXVlcnkucmV0dXJuQ2FiaW5DbGFzc05hbWUgPVxyXG4gICAgICAgIHRoaXMudGVtcFBhcmFtcy5jYWJpbkNsYXNzID09PSB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzc1xyXG4gICAgICAgICAgPyBzZWFyY2hRdWVyeS5vdXRib3VuZENhYmluQ2xhc3NOYW1lXHJcbiAgICAgICAgICA6IHRoaXMudHVybkNhYmluVHlwZVRvTmFtZSh0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzcyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2VhcmNoUXVlcnk7XHJcbiAgfVxyXG5cclxuICB0dXJuQ2FiaW5UeXBlVG9OYW1lKGNsYXNzVHlwZTogRmxpZ2h0Q2FiaW5DbGFzcykge1xyXG4gICAgY29uc3QgY2xhc3NlcyA9IHRoaXMuYXZhbGlhYmxlQ2xhc3Nlcy52YWx1ZTtcclxuICAgIGNvbnN0IHNlbGVjdGVkQ2Fsc3NOYW1lID0gY2xhc3Nlcy5maW5kKFxyXG4gICAgICAoY2xhc3NJdGVtKSA9PiBjbGFzc0l0ZW0udHlwZSA9PT0gY2xhc3NUeXBlXHJcbiAgICApLm5hbWU7XHJcbiAgICByZXR1cm4gW3NlbGVjdGVkQ2Fsc3NOYW1lXTtcclxuICB9XHJcblxyXG4gIHN0YXJ0UmVjZW50U2VhcmNoKHJlY2VudFNlYXJjaDogUmVjZW50U2VhcmNoKTogdm9pZCB7XHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmREYXRlKSB7XHJcbiAgICAgIGxldCBvdXRib3VuZFRpbWVXaW5kb3cgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJnc1xyXG4gICAgICAgIC5vdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3dcclxuICAgICAgICA/IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvd1xyXG4gICAgICAgIDogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdztcclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmNvbnZlcnRSZWNlbnRTZWFyY2hEYXRlVGltZShcclxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZERhdGUsXHJcbiAgICAgICAgb3V0Ym91bmRUaW1lV2luZG93XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRhdGUpIHtcclxuICAgICAgbGV0IHJldHVyblRpbWVXaW5kb3cgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgPyByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5BcnJpdmFsVGltZVdpbmRvdztcclxuICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKFxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRhdGUsXHJcbiAgICAgICAgcmV0dXJuVGltZVdpbmRvd1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmFyZVR5cGUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5mYXJlVHlwZTtcclxuICAgIHRoaXMubWF4Q29ubmVjdGlvbnMgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5tYXhDb25uZWN0aW9ucztcclxuXHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmRDYWJpbkNsYXNzKSB7XHJcbiAgICAgIHRoaXMuY2FiaW5DbGFzcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kQ2FiaW5DbGFzc1swXTtcclxuICAgIH1cclxuICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5DYWJpbkNsYXNzKSB7XHJcbiAgICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkNhYmluQ2xhc3NbMF07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHMgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5pbmNsdWRlTmVhcmJ5QWlycG9ydHM7XHJcblxyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuVHJpcFxyXG4gICAgICA/IEV1cm9zdGFyU2VhcmNoVHlwZS5yZXR1cm5cclxuICAgICAgOiBFdXJvc3RhclNlYXJjaFR5cGUub25lV2F5O1xyXG5cclxuICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3cpIHtcclxuICAgICAgdGhpcy5vdXRUaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkRlcGFydDtcclxuICAgIH0gZWxzZSBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdykge1xyXG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQXJyaXZlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vdXRUaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFueXRpbWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRlcGFydHVyZVRpbWVXaW5kb3cpIHtcclxuICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuRGVwYXJ0O1xyXG4gICAgfSBlbHNlIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5BcnJpdmFsVGltZVdpbmRvdykge1xyXG4gICAgICB0aGlzLmluVGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5BcnJpdmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmluVGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5Bbnl0aW1lO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fb3JpZ2luQWlycG9ydCA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm9yaWdpbkFpcnBvcnQ7XHJcbiAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXN0aW5hdGlvbkFpcnBvcnQ7XHJcbiAgICB0aGlzLmFycml2ZUxvY2F0aW9uID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuYXJyaXZlTG9jYXRpb247XHJcbiAgICB0aGlzLmRlcGFydExvY2F0aW9uID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwYXJ0TG9jYXRpb247XHJcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYWtlRGVwYXJ0dXJlVGltZVdpbmRvdyhcclxuICAgIGRhdGVUaW1lOiBtb21lbnQuTW9tZW50LFxyXG4gICAgd2luZG93OiBUaW1lV2luZG93XHJcbiAgKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB3aW5kb3cgPT09IFRpbWVXaW5kb3cuRGVwYXJ0XHJcbiAgICAgID8gdGhpcy5oZWxwZXJzLm1ha2VUaW1lV2luZG93KGRhdGVUaW1lLCAtMiwgMilcclxuICAgICAgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYWtlQXJyaXZhbFRpbWVXaW5kb3coXHJcbiAgICBkYXRlVGltZTogbW9tZW50Lk1vbWVudCxcclxuICAgIHdpbmRvdzogVGltZVdpbmRvd1xyXG4gICk6IHN0cmluZyB7XHJcbiAgICBpZiAod2luZG93ICE9PSBUaW1lV2luZG93LkFycml2ZSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLm1ha2VUaW1lV2luZG93KGRhdGVUaW1lLCAtMiwgMik7XHJcbiAgfVxyXG5cclxuICBjb252ZXJ0UmVjZW50U2VhcmNoRGF0ZVRpbWUoXHJcbiAgICBkYXRlOiBzdHJpbmcsXHJcbiAgICB0aW1lV2luZG93Pzogc3RyaW5nXHJcbiAgKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICBpZiAodGltZVdpbmRvdykge1xyXG4gICAgICBjb25zdCBmbGlnaHRUaW1lID0gdGltZVdpbmRvdy5zcGxpdCgnLScpO1xyXG4gICAgICBsZXQgdGltZUFuZERhdGUgPSBtb21lbnQoZGF0ZSkuYWRkKFxyXG4gICAgICAgIG1vbWVudC5kdXJhdGlvbih0aGlzLmhlbHBlcnMuaGhtbVRvVGltZShmbGlnaHRUaW1lWzBdKSlcclxuICAgICAgKTtcclxuICAgICAgLy8gYWRkIDIgaG91clxyXG4gICAgICByZXR1cm4gdGltZUFuZERhdGUuY2xvbmUoKS5hZGQoMiwgJ2hvdXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBtb21lbnQoZGF0ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTZWFyY2hRdWVyeSgpOiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyB7XHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzPihcclxuICAgICAgT2JqZWN0LmFzc2lnbihcclxuICAgICAgICB7fSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBvcmlnaW5BaXJwb3J0OiB0aGlzLl9vcmlnaW5BaXJwb3J0LFxyXG4gICAgICAgICAgZGVzdGluYXRpb25BaXJwb3J0OiB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQsXHJcbiAgICAgICAgICBvdXRib3VuZERhdGU6IHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlKFxyXG4gICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgb3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93OiB0aGlzLm1ha2VEZXBhcnR1cmVUaW1lV2luZG93KFxyXG4gICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlLFxyXG4gICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUNyaXRlcmlhXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgb3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdzogdGhpcy5tYWtlQXJyaXZhbFRpbWVXaW5kb3coXHJcbiAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUsXHJcbiAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lQ3JpdGVyaWFcclxuICAgICAgICAgIClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHBhc3NlbmdlcnM6IHRoaXMuX3Bhc3NlbmdlcnMsXHJcbiAgICAgICAgICByZXR1cm5UcmlwOiB0aGlzLmlzUmV0dXJuLFxyXG4gICAgICAgICAgb3V0Ym91bmRDYWJpbkNsYXNzOiB0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzc1xyXG4gICAgICAgICAgICA/IFt0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzc11cclxuICAgICAgICAgICAgOiBudWxsLFxyXG4gICAgICAgICAgcmVxdWlyZUZyZWVCYWc6IG51bGwsXHJcbiAgICAgICAgICBtYXhDb25uZWN0aW9uczogdGhpcy50ZW1wUGFyYW1zLm1heENvbm5lY3Rpb25zLFxyXG4gICAgICAgICAgaW5jbHVkZU5lYXJieUFpcnBvcnRzOiB0aGlzLnRlbXBQYXJhbXMuaW5jbHVkZU5lYXJieUFpcnBvcnRzLFxyXG4gICAgICAgICAgcHJlZmVycmVkQ2FycmllcnM6IHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVycy5tYXAoXHJcbiAgICAgICAgICAgIChjYXJyaWVyOiBPQlRBaXJsaW5lc0RldGFpbHMpID0+XHJcbiAgICAgICAgICAgICAgY2Fycmllcj8uY29kZSA/IGNhcnJpZXIuY29kZSA6IG51bGxcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBmYXJlVHlwZTogdGhpcy50ZW1wUGFyYW1zLmZhcmVUeXBlLFxyXG4gICAgICAgICAgd2l0aEdyb3VwZWQ6IG51bGxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRoaXMuaXNSZXR1cm5cclxuICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgIHJldHVybkRhdGU6IHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlKFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlXHJcbiAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICByZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93OiB0aGlzLm1ha2VEZXBhcnR1cmVUaW1lV2luZG93KFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlLFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmluVGltZUNyaXRlcmlhXHJcbiAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICByZXR1cm5BcnJpdmFsVGltZVdpbmRvdzogdGhpcy5tYWtlQXJyaXZhbFRpbWVXaW5kb3coXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGUsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuaW5UaW1lQ3JpdGVyaWFcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIHJldHVybkNhYmluQ2xhc3M6IHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzXHJcbiAgICAgICAgICAgICAgICA/IFt0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzc11cclxuICAgICAgICAgICAgICAgIDogbnVsbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA6IHt9XHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVRyYXZlbGxlcnMoKSB7XHJcbiAgICBjb25zdCB0cmF2ZWxsZXJzOiBGbGlnaHRQYXNzZW5nZXJPYmplY3RbXSA9IFtdO1xyXG4gICAgZm9yIChsZXQgbG9vcCA9IDA7IGxvb3AgPCB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzOyBsb29wICs9IDEpIHtcclxuICAgICAgdHJhdmVsbGVycy5wdXNoKHsgdHlwZTogRmxpZ2h0UGFzc2VuZ2VyVHlwZS5BZHVsdCB9KTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IGxvb3AgPSAwOyBsb29wIDwgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuOyBsb29wICs9IDEpIHtcclxuICAgICAgdHJhdmVsbGVycy5wdXNoKHsgdHlwZTogRmxpZ2h0UGFzc2VuZ2VyVHlwZS5DaGlsZCB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9wYXNzZW5nZXJzID0gdHJhdmVsbGVycztcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlQXZhbGlhYmxlQ2xhc3NlcygpIHtcclxuICAgIHRoaXMuYXZhbGlhYmxlQ2xhc3Nlcy5uZXh0KFtcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdBbnknLFxyXG4gICAgICAgIHR5cGU6IEZsaWdodENhYmluQ2xhc3MuQW55XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnU3RhbmRhcmQgKHNlbWkgZmxleGlibGUpJyxcclxuICAgICAgICB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdTdGFuZGFyZCBwcmVtaWVyIChzZW1pIGZsZXhpYmxlKScsXHJcbiAgICAgICAgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0J1c2luZXNzIHByZW1pZXIgKGZ1bGx5IGZsZXhpYmxlKScsXHJcbiAgICAgICAgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzc1xyXG4gICAgICB9XHJcbiAgICBdKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIHNvcnQgdGhlIGZsaWdodCByZXN1bHRzXHJcbiAgICogQHRvZG8gLSBGaWxsIG91dCBQcmVmZXJyZWQgYW5kIENvMiBzb3J0aW5nIHdoZW4gd2UgaGF2ZSB0aGF0IGRhdGFcclxuICAgKi9cclxuICBwdWJsaWMgc29ydFJlc3VsdHMoXHJcbiAgICBzb3J0TWV0aG9kVmFsdWU6IFNvcnRUeXBlc0V1cm9zdGFyLFxyXG4gICAgZGlyOiBib29sZWFuLFxyXG4gICAgZ2l2ZW5SZXN1bHRzPzogRXVyb3N0YXJSZXN1bHRzW11cclxuICApOiB2b2lkIHtcclxuICAgIGxldCByZXN1bHRzID0gdGhpcy5oZWxwZXJzLmNsb25lKFxyXG4gICAgICBnaXZlblJlc3VsdHNcclxuICAgICAgICA/IGdpdmVuUmVzdWx0c1xyXG4gICAgICAgIDogPEV1cm9zdGFyUmVzdWx0c1tdPig8dW5rbm93bj50aGlzLmZ1bGxSZXN1bHRzKVxyXG4gICAgKTtcclxuXHJcbiAgICBzd2l0Y2ggKHNvcnRNZXRob2RWYWx1ZSkge1xyXG4gICAgICBjYXNlIFNvcnRUeXBlc0V1cm9zdGFyLkNoZWFwZXN0Rmlyc3Q6XHJcbiAgICAgICAgcmVzdWx0cyA9IHRoaXMuc29ydEJ5UHJpY2UocmVzdWx0cywgZGlyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBTb3J0VHlwZXNFdXJvc3Rhci5FYXJsaWVzdEZpcnN0OlxyXG4gICAgICAgIHJlc3VsdHMgPSB0aGlzLnNvcnRCeURhdGUocmVzdWx0cywgZGlyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zb2xlLmVycm9yKGArKysgVW5rbm93biBzb3J0aW5nIG1ldGhvZDogJHtzb3J0TWV0aG9kVmFsdWV9ICsrK2ApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNvcnRSZXN1bHRzRmxpZ2h0Sm91cm5leXMoXHJcbiAgICBzb3J0TWV0aG9kVmFsdWU6IFNvcnRUeXBlc0V1cm9zdGFyLFxyXG4gICAgaW5ib3VuZDogYm9vbGVhbiA9IGZhbHNlLFxyXG4gICAgZ2l2ZW5SZXN1bHRzPzogRmxpZ2h0SXRpbmVyYXJ5W11cclxuICApOiBGbGlnaHRJdGluZXJhcnlbXSB7XHJcbiAgICBsZXQgcmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZShnaXZlblJlc3VsdHMpO1xyXG5cclxuICAgIHN3aXRjaCAoc29ydE1ldGhvZFZhbHVlKSB7XHJcbiAgICAgIGNhc2UgU29ydFR5cGVzRXVyb3N0YXIuQ2hlYXBlc3RGaXJzdDpcclxuICAgICAgICByZXN1bHRzID0gdGhpcy5zb3J0QnlQcmljZUZsaWdodChyZXN1bHRzKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBTb3J0VHlwZXNFdXJvc3Rhci5FYXJsaWVzdEZpcnN0OlxyXG4gICAgICAgIHJlc3VsdHMgPSB0aGlzLnNvcnRCeURhdGVGbGlnaHQocmVzdWx0cywgaW5ib3VuZCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgU29ydFR5cGVzRXVyb3N0YXIuTGF0ZXN0Rmlyc3Q6XHJcbiAgICAgICAgcmVzdWx0cyA9IHRoaXMuc29ydEJ5RGF0ZUZsaWdodERlY2VuZGluZyhyZXN1bHRzLCBpbmJvdW5kKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zb2xlLmVycm9yKGArKysgVW5rbm93biBzb3J0aW5nIG1ldGhvZDogJHtzb3J0TWV0aG9kVmFsdWV9ICsrK2ApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgc29ydEJ5UHJpY2VGbGlnaHQocmVzdWx0czogRmxpZ2h0SXRpbmVyYXJ5W10pOiBGbGlnaHRJdGluZXJhcnlbXSB7XHJcbiAgICByZXR1cm4gcmVzdWx0cy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIHJldHVybiBOdW1iZXIoYS50b3RhbC5wcmljZSkgLSBOdW1iZXIoYi50b3RhbC5wcmljZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNvcnRCeURhdGVGbGlnaHQoXHJcbiAgICByZXN1bHRzOiBGbGlnaHRJdGluZXJhcnlbXSxcclxuICAgIGluYm91bmQ6IGJvb2xlYW5cclxuICApOiBGbGlnaHRJdGluZXJhcnlbXSB7XHJcbiAgICByZXR1cm4gcmVzdWx0cy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIGlmIChpbmJvdW5kKSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIG1vbWVudChhLmluYm91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKS51bml4KCkgLVxyXG4gICAgICAgICAgbW9tZW50KGIuaW5ib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpLnVuaXgoKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIG1vbWVudChhLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZykudW5peCgpIC1cclxuICAgICAgICAgIG1vbWVudChiLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZykudW5peCgpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzb3J0QnlEYXRlRmxpZ2h0RGVjZW5kaW5nKFxyXG4gICAgcmVzdWx0czogRmxpZ2h0SXRpbmVyYXJ5W10sXHJcbiAgICBpbmJvdW5kOiBib29sZWFuXHJcbiAgKTogRmxpZ2h0SXRpbmVyYXJ5W10ge1xyXG4gICAgcmV0dXJuIHJlc3VsdHMuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICBpZiAoaW5ib3VuZCkge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICBtb21lbnQoYi5pbmJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZykudW5peCgpIC1cclxuICAgICAgICAgIG1vbWVudChhLmluYm91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKS51bml4KClcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICBtb21lbnQoYi5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpLnVuaXgoKSAtXHJcbiAgICAgICAgICBtb21lbnQoYS5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpLnVuaXgoKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU29ydCByZXN1bHRzIGJ5IGRlcGFydHVyZSB0aW1lXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0V1cm9zdGFyUmVzdWx0c1tdfSByZXN1bHRzXHJcbiAgICogQHJldHVybnNcclxuICAgKiBAbWVtYmVyb2YgRXVyb3N0YXJJbmZvXHJcbiAgICovXHJcbiAgc29ydEJ5RGF0ZShyZXN1bHRzOiBFdXJvc3RhclJlc3VsdHNbXSwgZGlyPzogYm9vbGVhbik6IEV1cm9zdGFyUmVzdWx0c1tdIHtcclxuICAgIGNvbnN0IGJ5RGF0ZSA9IChhOiBFdXJvc3Rhckl0ZW0sIGI6IEV1cm9zdGFySXRlbSkgPT4ge1xyXG4gICAgICBpZiAoZGlyKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vbWVudChhLmRhdGVEZXBhcnR1cmUpLnVuaXgoKSAtIG1vbWVudChiLmRhdGVEZXBhcnR1cmUpLnVuaXgoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbW9tZW50KGIuZGF0ZURlcGFydHVyZSkudW5peCgpIC0gbW9tZW50KGEuZGF0ZURlcGFydHVyZSkudW5peCgpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHNvcnRlZFJlc3VsdHMgPSB7XHJcbiAgICAgIG91dGJvdW5kOiByZXN1bHRzWzBdLm91dGJvdW5kLnNvcnQoYnlEYXRlKSxcclxuICAgICAgaW5ib3VuZDogcmVzdWx0c1swXS5pbmJvdW5kLnNvcnQoYnlEYXRlKVxyXG4gICAgfTtcclxuICAgIHJldHVybiBbc29ydGVkUmVzdWx0c107XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTb3J0IHJlc3VsdHMgYnkgcHJpY2VcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RXVyb3N0YXJSZXN1bHRzW119IHJlc3VsdHNcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqIEBtZW1iZXJvZiBFdXJvc3RhckluZm9cclxuICAgKi9cclxuICBzb3J0QnlQcmljZShyZXN1bHRzOiBFdXJvc3RhclJlc3VsdHNbXSwgZGlyPzogYm9vbGVhbik6IEV1cm9zdGFyUmVzdWx0c1tdIHtcclxuICAgIGNvbnN0IGJ5UHJpY2UgPSAoYTogRXVyb3N0YXJJdGVtLCBiOiBFdXJvc3Rhckl0ZW0pID0+IHtcclxuICAgICAgY29uc3QgYVByaWNlID1cclxuICAgICAgICArYS5zdGFuZGFyZEZhcmUucHJpY2UgfHxcclxuICAgICAgICArYS5zdGFuZGFyZFByZW1pZXJGYXJlLnByaWNlIHx8XHJcbiAgICAgICAgK2EuYnVzaW5lc3NQcmVtaWVyRmFyZS5wcmljZTtcclxuICAgICAgY29uc3QgYlByaWNlID1cclxuICAgICAgICArYi5zdGFuZGFyZEZhcmUucHJpY2UgfHxcclxuICAgICAgICArYi5zdGFuZGFyZFByZW1pZXJGYXJlLnByaWNlIHx8XHJcbiAgICAgICAgK2IuYnVzaW5lc3NQcmVtaWVyRmFyZS5wcmljZTtcclxuICAgICAgaWYgKGRpcikge1xyXG4gICAgICAgIHJldHVybiBhUHJpY2UgLSBiUHJpY2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGJQcmljZSAtIGFQcmljZTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc29ydGVkUmVzdWx0cyA9IHtcclxuICAgICAgb3V0Ym91bmQ6IHJlc3VsdHNbMF0ub3V0Ym91bmQuc29ydChieVByaWNlKSxcclxuICAgICAgaW5ib3VuZDogcmVzdWx0c1swXS5pbmJvdW5kLnNvcnQoYnlQcmljZSlcclxuICAgIH07XHJcbiAgICByZXR1cm4gW3NvcnRlZFJlc3VsdHNdO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlU2VhcmNoRnJvbUV4cGlyZWRCYXNrZXRJdGVtKGJhc2tldEl0ZW06IEJhc2tldEl0ZW0pOiB2b2lkIHtcclxuICAgIGNvbnN0IHNlYXJjaEV1cm9TdGFyUXVlcnk6IFNlYXJjaEV1cm9zdGFyUXVlcnlWYXJpYWJsZXMgPVxyXG4gICAgICBiYXNrZXRJdGVtLnNlYXJjaFF1ZXJ5O1xyXG4gICAgaWYgKHNlYXJjaEV1cm9TdGFyUXVlcnkub3V0Ym91bmREYXRlKSB7XHJcbiAgICAgIGxldCBvdXRib3VuZFRpbWVXaW5kb3cgPSBzZWFyY2hFdXJvU3RhclF1ZXJ5Lm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvd1xyXG4gICAgICAgID8gc2VhcmNoRXVyb1N0YXJRdWVyeS5vdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3dcclxuICAgICAgICA6IHNlYXJjaEV1cm9TdGFyUXVlcnkub3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdztcclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmNvbnZlcnRSZWNlbnRTZWFyY2hEYXRlVGltZShcclxuICAgICAgICBzZWFyY2hFdXJvU3RhclF1ZXJ5Lm91dGJvdW5kRGF0ZSxcclxuICAgICAgICBvdXRib3VuZFRpbWVXaW5kb3dcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VhcmNoRXVyb1N0YXJRdWVyeS5yZXR1cm5EYXRlKSB7XHJcbiAgICAgIGxldCByZXR1cm5UaW1lV2luZG93ID0gc2VhcmNoRXVyb1N0YXJRdWVyeS5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgPyBzZWFyY2hFdXJvU3RhclF1ZXJ5LnJldHVybkRlcGFydHVyZVRpbWVXaW5kb3dcclxuICAgICAgICA6IHNlYXJjaEV1cm9TdGFyUXVlcnkucmV0dXJuQXJyaXZhbFRpbWVXaW5kb3c7XHJcbiAgICAgIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmNvbnZlcnRSZWNlbnRTZWFyY2hEYXRlVGltZShcclxuICAgICAgICBzZWFyY2hFdXJvU3RhclF1ZXJ5LnJldHVybkRhdGUsXHJcbiAgICAgICAgcmV0dXJuVGltZVdpbmRvd1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmFyZVR5cGUgPSBzZWFyY2hFdXJvU3RhclF1ZXJ5LmZhcmVUeXBlO1xyXG4gICAgdGhpcy5tYXhDb25uZWN0aW9ucyA9IHNlYXJjaEV1cm9TdGFyUXVlcnkubWF4Q29ubmVjdGlvbnM7XHJcblxyXG4gICAgaWYgKHNlYXJjaEV1cm9TdGFyUXVlcnkub3V0Ym91bmRDYWJpbkNsYXNzKSB7XHJcbiAgICAgIHRoaXMuY2FiaW5DbGFzcyA9IHNlYXJjaEV1cm9TdGFyUXVlcnlcclxuICAgICAgICAub3V0Ym91bmRDYWJpbkNsYXNzWzBdIGFzIEZsaWdodENhYmluQ2xhc3M7XHJcbiAgICB9XHJcbiAgICBpZiAoc2VhcmNoRXVyb1N0YXJRdWVyeS5yZXR1cm5DYWJpbkNsYXNzKSB7XHJcbiAgICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9IHNlYXJjaEV1cm9TdGFyUXVlcnlcclxuICAgICAgICAucmV0dXJuQ2FiaW5DbGFzc1swXSBhcyBGbGlnaHRDYWJpbkNsYXNzO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5jbHVkZU5lYXJieUFpcnBvcnRzID0gc2VhcmNoRXVyb1N0YXJRdWVyeS5pbmNsdWRlTmVhcmJ5QWlycG9ydHM7XHJcblxyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gc2VhcmNoRXVyb1N0YXJRdWVyeS5yZXR1cm5UcmlwXHJcbiAgICAgID8gRXVyb3N0YXJTZWFyY2hUeXBlLnJldHVyblxyXG4gICAgICA6IEV1cm9zdGFyU2VhcmNoVHlwZS5vbmVXYXk7XHJcblxyXG4gICAgaWYgKHNlYXJjaEV1cm9TdGFyUXVlcnkub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93KSB7XHJcbiAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5EZXBhcnQ7XHJcbiAgICB9IGVsc2UgaWYgKHNlYXJjaEV1cm9TdGFyUXVlcnkub3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdykge1xyXG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQXJyaXZlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vdXRUaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFueXRpbWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNlYXJjaEV1cm9TdGFyUXVlcnkucmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvdykge1xyXG4gICAgICB0aGlzLmluVGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5EZXBhcnQ7XHJcbiAgICB9IGVsc2UgaWYgKHNlYXJjaEV1cm9TdGFyUXVlcnkucmV0dXJuQXJyaXZhbFRpbWVXaW5kb3cpIHtcclxuICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQXJyaXZlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQW55dGltZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VhcmNoRXVyb1N0YXJRdWVyeS5vcmlnaW5BaXJwb3J0KSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZVxyXG4gICAgICAgIC5sb29rdXBFdXJvc3RhclN0YXRpb25zKHNlYXJjaEV1cm9TdGFyUXVlcnkub3JpZ2luQWlycG9ydClcclxuICAgICAgICAuc3Vic2NyaWJlKChzdGF0aW9uczogRXVyb3N0YXJTdGF0aW9uW10pID0+IHtcclxuICAgICAgICAgIHRoaXMuZGVwYXJ0TG9jYXRpb24gPSBzdGF0aW9uc1swXSBhcyBPQlRBaXJwb3J0RGV0YWlscztcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VhcmNoRXVyb1N0YXJRdWVyeS5kZXN0aW5hdGlvbkFpcnBvcnQpIHtcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlXHJcbiAgICAgICAgLmxvb2t1cEV1cm9zdGFyU3RhdGlvbnMoc2VhcmNoRXVyb1N0YXJRdWVyeS5kZXN0aW5hdGlvbkFpcnBvcnQpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoc3RhdGlvbnM6IEV1cm9zdGFyU3RhdGlvbltdKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmFycml2ZUxvY2F0aW9uID0gc3RhdGlvbnNbMF0gYXMgT0JUQWlycG9ydERldGFpbHM7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYWRkIFRyYXZlbGxlcnNcclxuICAgIGlmIChiYXNrZXRJdGVtLnVzZXJzKSB7XHJcbiAgICAgIGJhc2tldEl0ZW0udXNlcnMuZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmFkZFRyYXZlbGxlcih1c2VyKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVGcm9tUHJldmlvdXNTZWFyY2hlcyhcclxuICAgIHByZXZpb3VzSXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT5cclxuICApOiB2b2lkIHtcclxuICAgIGNvbnN0IGZsaWdodEl0ZW06IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzID1cclxuICAgICAgcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5GbGlnaHRdPy5zZWFyY2hRdWVyeTtcclxuICAgIGNvbnN0IHJhaWxJdGVtOiBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXMgPVxyXG4gICAgICBwcmV2aW91c0l0ZW1zW1NlcnZpY2VUeXBlLlJhaWxdPy5zZWFyY2hRdWVyeTtcclxuICAgIGNvbnN0IGlybEl0ZW06IFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzID0gXHJcbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWxdPy5zZWFyY2hRdWVyeVxyXG4gICAgY29uc3QgaG90ZWxJdGVtOiBTZWFyY2hIb3RlbHNRdWVyeVZhcmlhYmxlcyA9XHJcbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuUmFpbF0/LnNlYXJjaFF1ZXJ5O1xyXG4gICAgY29uc3QgY2FySXRlbTogU2VhcmNoQ2FySGlyZVF1ZXJ5VmFyaWFibGVzID0gXHJcbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuQ2FyXT8uc2VhcmNoUXVlcnlcclxuICAgIGNvbnN0IGxvdW5nZUl0ZW06IFNlYXJjaExvdW5nZXNRdWVyeVZhcmlhYmxlcyA9IFxyXG4gICAgICBwcmV2aW91c0l0ZW1zW1NlcnZpY2VUeXBlLkxvdW5nZV0/LnNlYXJjaFF1ZXJ5XHJcbiAgICBjb25zdCBwYXJraW5nSXRlbTogU2VhcmNoUGFya2luZ1F1ZXJ5VmFyaWFibGVzID0gXHJcbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuUGFya2luZ10/LnNlYXJjaFF1ZXJ5XHJcbiAgICBpZiAoZmxpZ2h0SXRlbSkge1xyXG4gICAgICB0cnl7XHJcbiAgICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSBtb21lbnQoKHByZXZpb3VzSXRlbXMuRkxJR0hULm91dGJvdW5kRGF0ZSBhcyBzdHJpbmcpLnJlcGxhY2UoXCJUXCIsIFwiXCIpLnNwbGl0KFwiLlwiKVswXSwgXCJZWVlZLU1NLUREaGg6bW06c3NcIilcclxuICAgICAgICBpZiAodGhpcy5vdXRCb3VuZERhdGUubWludXRlcygpICUgMzApIHRoaXMub3V0Qm91bmREYXRlID0gdGhpcy5vdXRCb3VuZERhdGUuc3VidHJhY3QodGhpcy5vdXRCb3VuZERhdGUubWludXRlcygpICUgMzAsIFwibWludXRlc1wiKVxyXG4gICAgICAgIGlmIChwcmV2aW91c0l0ZW1zLkZMSUdIVC5pbmJvdW5kRGF0ZSkge1xyXG4gICAgICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IG1vbWVudCgocHJldmlvdXNJdGVtcy5GTElHSFQuaW5ib3VuZERhdGUgYXMgc3RyaW5nKS5yZXBsYWNlKFwiVFwiLCBcIlwiKS5zcGxpdChcIi5cIilbMF0sIFwiWVlZWS1NTS1ERGhoOm1tOnNzXCIpXHJcbiAgICAgICAgICBpZiAodGhpcy5pbmJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMCkgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuaW5ib3VuZERhdGUuc3VidHJhY3QodGhpcy5pbmJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMCwgXCJtaW51dGVzXCIpXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgZXVyb3N0YXIgZnJvbSBmbGlnaHQgaXRlbScpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChyYWlsSXRlbSkge1xyXG4gICAgICB0cnl7XHJcbiAgICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSBtb21lbnQoKHByZXZpb3VzSXRlbXMuUkFJTC5vdXRib3VuZERhdGUgYXMgc3RyaW5nKS5yZXBsYWNlKFwiVFwiLCBcIlwiKS5zcGxpdChcIi5cIilbMF0sIFwiWVlZWS1NTS1ERGhoOm1tOnNzXCIpXHJcbiAgICAgICAgaWYgKHRoaXMub3V0Qm91bmREYXRlLm1pbnV0ZXMoKSAlIDMwKSB0aGlzLm91dEJvdW5kRGF0ZSA9IHRoaXMub3V0Qm91bmREYXRlLnN1YnRyYWN0KHRoaXMub3V0Qm91bmREYXRlLm1pbnV0ZXMoKSAlIDMwLCBcIm1pbnV0ZXNcIilcclxuICAgICAgICBpZiAocHJldmlvdXNJdGVtcy5SQUlMLmluYm91bmREYXRlKSB7XHJcbiAgICAgICAgICB0aGlzLmluYm91bmREYXRlID0gbW9tZW50KChwcmV2aW91c0l0ZW1zLlJBSUwuaW5ib3VuZERhdGUgYXMgc3RyaW5nKS5yZXBsYWNlKFwiVFwiLCBcIlwiKS5zcGxpdChcIi5cIilbMF0sIFwiWVlZWS1NTS1ERGhoOm1tOnNzXCIpXHJcbiAgICAgICAgICBpZiAodGhpcy5pbmJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMCkgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuaW5ib3VuZERhdGUuc3VidHJhY3QodGhpcy5pbmJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMCwgXCJtaW51dGVzXCIpXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgZXVyb3N0YXIgZnJvbSByYWlsIGl0ZW0nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXJsSXRlbSkge1xyXG4gICAgICB0cnl7XHJcbiAgICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSBtb21lbnQoKHByZXZpb3VzSXRlbXMuSU5URVJOQVRJT05BTF9SQUlMLm91dGJvdW5kRGF0ZSBhcyBzdHJpbmcpLnJlcGxhY2UoXCJUXCIsIFwiXCIpLnNwbGl0KFwiLlwiKVswXSwgXCJZWVlZLU1NLUREaGg6bW06c3NcIilcclxuICAgICAgICBpZiAodGhpcy5vdXRCb3VuZERhdGUubWludXRlcygpICUgMzApIHRoaXMub3V0Qm91bmREYXRlID0gdGhpcy5vdXRCb3VuZERhdGUuc3VidHJhY3QodGhpcy5vdXRCb3VuZERhdGUubWludXRlcygpICUgMzAsIFwibWludXRlc1wiKVxyXG4gICAgICAgIGlmIChwcmV2aW91c0l0ZW1zLklOVEVSTkFUSU9OQUxfUkFJTC5pbmJvdW5kRGF0ZSkge1xyXG4gICAgICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IG1vbWVudCgocHJldmlvdXNJdGVtcy5JTlRFUk5BVElPTkFMX1JBSUwuaW5ib3VuZERhdGUgYXMgc3RyaW5nKS5yZXBsYWNlKFwiVFwiLCBcIlwiKS5zcGxpdChcIi5cIilbMF0sIFwiWVlZWS1NTS1ERGhoOm1tOnNzXCIpXHJcbiAgICAgICAgICBpZiAodGhpcy5pbmJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMCkgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuaW5ib3VuZERhdGUuc3VidHJhY3QodGhpcy5pbmJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMCwgXCJtaW51dGVzXCIpXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgZXVyb3N0YXIgZnJvbSBpbnRlcm5hdGlvbmFsIHJhaWwgaXRlbScpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChob3RlbEl0ZW0pIHtcclxuICAgICAgdHJ5e1xyXG4gICAgICAgIHRoaXMub3V0Qm91bmREYXRlID0gbW9tZW50KChwcmV2aW91c0l0ZW1zLkhPVEVMLm91dGJvdW5kRGF0ZSBhcyBzdHJpbmcpLnJlcGxhY2UoXCJUXCIsIFwiXCIpLnNwbGl0KFwiLlwiKVswXSwgXCJZWVlZLU1NLUREaGg6bW06c3NcIilcclxuICAgICAgICBpZiAodGhpcy5vdXRCb3VuZERhdGUubWludXRlcygpICUgMzApIHRoaXMub3V0Qm91bmREYXRlID0gdGhpcy5vdXRCb3VuZERhdGUuc3VidHJhY3QodGhpcy5vdXRCb3VuZERhdGUubWludXRlcygpICUgMzAsIFwibWludXRlc1wiKVxyXG4gICAgICAgIGlmIChwcmV2aW91c0l0ZW1zLkhPVEVMLmluYm91bmREYXRlKSB7XHJcbiAgICAgICAgICB0aGlzLmluYm91bmREYXRlID0gbW9tZW50KChwcmV2aW91c0l0ZW1zLkhPVEVMLmluYm91bmREYXRlIGFzIHN0cmluZykucmVwbGFjZShcIlRcIiwgXCJcIikuc3BsaXQoXCIuXCIpWzBdLCBcIllZWVktTU0tRERoaDptbTpzc1wiKVxyXG4gICAgICAgICAgaWYgKHRoaXMuaW5ib3VuZERhdGUubWludXRlcygpICUgMzApIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmluYm91bmREYXRlLnN1YnRyYWN0KHRoaXMuaW5ib3VuZERhdGUubWludXRlcygpICUgMzAsIFwibWludXRlc1wiKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGV1cm9zdGFyIGZyb20gaG90ZWwgaXRlbScpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjYXJJdGVtKSB7XHJcbiAgICAgIHRyeXtcclxuICAgICAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IG1vbWVudCgocHJldmlvdXNJdGVtcy5DQVIub3V0Ym91bmREYXRlIGFzIHN0cmluZykucmVwbGFjZShcIlRcIiwgXCJcIikuc3BsaXQoXCIuXCIpWzBdLCBcIllZWVktTU0tRERoaDptbTpzc1wiKVxyXG4gICAgICAgIGlmICh0aGlzLm91dEJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMCkgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLm91dEJvdW5kRGF0ZS5zdWJ0cmFjdCh0aGlzLm91dEJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMCwgXCJtaW51dGVzXCIpXHJcbiAgICAgICAgaWYgKHByZXZpb3VzSXRlbXMuQ0FSLmluYm91bmREYXRlKSB7XHJcbiAgICAgICAgICB0aGlzLmluYm91bmREYXRlID0gbW9tZW50KChwcmV2aW91c0l0ZW1zLkNBUi5pbmJvdW5kRGF0ZSBhcyBzdHJpbmcpLnJlcGxhY2UoXCJUXCIsIFwiXCIpLnNwbGl0KFwiLlwiKVswXSwgXCJZWVlZLU1NLUREaGg6bW06c3NcIilcclxuICAgICAgICAgIGlmICh0aGlzLmluYm91bmREYXRlLm1pbnV0ZXMoKSAlIDMwKSB0aGlzLmluYm91bmREYXRlID0gdGhpcy5pbmJvdW5kRGF0ZS5zdWJ0cmFjdCh0aGlzLmluYm91bmREYXRlLm1pbnV0ZXMoKSAlIDMwLCBcIm1pbnV0ZXNcIilcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwcmVwb3B1bGF0ZSBldXJvc3RhciBmcm9tIGNhciBpdGVtJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGxvdW5nZUl0ZW0pIHtcclxuICAgICAgdHJ5e1xyXG4gICAgICAgIHRoaXMub3V0Qm91bmREYXRlID0gbW9tZW50KChwcmV2aW91c0l0ZW1zLkxPVU5HRS5vdXRib3VuZERhdGUgYXMgc3RyaW5nKS5yZXBsYWNlKFwiVFwiLCBcIlwiKS5zcGxpdChcIi5cIilbMF0sIFwiWVlZWS1NTS1ERGhoOm1tOnNzXCIpXHJcbiAgICAgICAgaWYgKHRoaXMub3V0Qm91bmREYXRlLm1pbnV0ZXMoKSAlIDMwKSB0aGlzLm91dEJvdW5kRGF0ZSA9IHRoaXMub3V0Qm91bmREYXRlLnN1YnRyYWN0KHRoaXMub3V0Qm91bmREYXRlLm1pbnV0ZXMoKSAlIDMwLCBcIm1pbnV0ZXNcIilcclxuICAgICAgICBpZiAocHJldmlvdXNJdGVtcy5MT1VOR0UuaW5ib3VuZERhdGUpIHtcclxuICAgICAgICAgIHRoaXMuaW5ib3VuZERhdGUgPSBtb21lbnQoKHByZXZpb3VzSXRlbXMuTE9VTkdFLmluYm91bmREYXRlIGFzIHN0cmluZykucmVwbGFjZShcIlRcIiwgXCJcIikuc3BsaXQoXCIuXCIpWzBdLCBcIllZWVktTU0tRERoaDptbTpzc1wiKVxyXG4gICAgICAgICAgaWYgKHRoaXMuaW5ib3VuZERhdGUubWludXRlcygpICUgMzApIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmluYm91bmREYXRlLnN1YnRyYWN0KHRoaXMuaW5ib3VuZERhdGUubWludXRlcygpICUgMzAsIFwibWludXRlc1wiKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGV1cm9zdGFyIGZyb20gbG91bmdlIGl0ZW0nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAocGFya2luZ0l0ZW0pIHtcclxuICAgICAgdHJ5e1xyXG4gICAgICAgIHRoaXMub3V0Qm91bmREYXRlID0gbW9tZW50KChwcmV2aW91c0l0ZW1zLlBBUktJTkcub3V0Ym91bmREYXRlIGFzIHN0cmluZykucmVwbGFjZShcIlRcIiwgXCJcIikuc3BsaXQoXCIuXCIpWzBdLCBcIllZWVktTU0tRERoaDptbTpzc1wiKVxyXG4gICAgICAgIGlmICh0aGlzLm91dEJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMCkgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLm91dEJvdW5kRGF0ZS5zdWJ0cmFjdCh0aGlzLm91dEJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMCwgXCJtaW51dGVzXCIpXHJcbiAgICAgICAgaWYgKHByZXZpb3VzSXRlbXMuUEFSS0lORy5pbmJvdW5kRGF0ZSkge1xyXG4gICAgICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IG1vbWVudCgocHJldmlvdXNJdGVtcy5QQVJLSU5HLmluYm91bmREYXRlIGFzIHN0cmluZykucmVwbGFjZShcIlRcIiwgXCJcIikuc3BsaXQoXCIuXCIpWzBdLCBcIllZWVktTU0tRERoaDptbTpzc1wiKVxyXG4gICAgICAgICAgaWYgKHRoaXMuaW5ib3VuZERhdGUubWludXRlcygpICUgMzApIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmluYm91bmREYXRlLnN1YnRyYWN0KHRoaXMuaW5ib3VuZERhdGUubWludXRlcygpICUgMzAsIFwibWludXRlc1wiKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGV1cm9zdGFyIGZyb20gcGFya2luZyBpdGVtJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFRvdGFsQmFnZ2FnZShyZXN1bHQ6IEZsaWdodEl0aW5lcmFyeSk6IG51bWJlciB7XHJcbiAgICBsZXQgdG90YWwgPSAwO1xyXG5cclxuICAgIGNvbnN0IHBhcnNlZEFkZGl0aW9uYWwgPSBKU09OLnBhcnNlKHJlc3VsdC5hZGRpdGlvbmFsKTtcclxuICAgIGlmIChwYXJzZWRBZGRpdGlvbmFsICYmIHBhcnNlZEFkZGl0aW9uYWwub3V0Ym91bmRGbGlnaHRzKSB7XHJcbiAgICAgIHBhcnNlZEFkZGl0aW9uYWwub3V0Ym91bmRGbGlnaHRzLmZvckVhY2goKGZsaWdodDogYW55KSA9PiB7XHJcbiAgICAgICAgZmxpZ2h0LmJhZ2dhZ2UuZm9yRWFjaCgoYmFnOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChiYWcuYWxsb3dhbmNlICYmIGJhZy5hbGxvd2FuY2UgPiB0b3RhbCkge1xyXG4gICAgICAgICAgICB0b3RhbCA9IGJhZy5hbGxvd2FuY2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChwYXJzZWRBZGRpdGlvbmFsICYmIHBhcnNlZEFkZGl0aW9uYWwuYmFnZ2FnZUFsbG93YW5jZSkge1xyXG4gICAgICBwYXJzZWRBZGRpdGlvbmFsLmJhZ2dhZ2VBbGxvd2FuY2UuZm9yRWFjaCgoYmFnZ2FnZUFsbG93OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBiYWdnYWdlQWxsb3cuYmFnZ2FnZS5xdHkgJiZcclxuICAgICAgICAgIE51bWJlcihiYWdnYWdlQWxsb3cuYmFnZ2FnZS5xdHkpID4gdG90YWxcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRvdGFsID0gTnVtYmVyKGJhZ2dhZ2VBbGxvdy5iYWdnYWdlLnF0eSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdG90YWw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBnaXZlIHRoZSBjb3JyZWN0IGZvcm1hdCBmb3IgdHJhbnNmZXJpbmcgbWludWV0ZXMgb24gdGhlIHNsaWRlcnNcclxuICAgKiBAcGFyYW0gbWluIC0gdGhlIG1pbiBpbiAxMDB0aCdzIHRvIHRyYW5zZm9ybSBvbnRvIDYwdGgnc1xyXG4gICAqL1xyXG4gIHRyYW5zZm9ybU1pbihtaW46IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgbnVtID0gKE51bWJlcihtaW4pICogNjApIC8gMTAwO1xyXG4gICAgLy8gY29uc29sZS5sb2coJysrKyBOdW0gQ29weTogJywgXy5jbG9uZShudW0pLCAnICsrKycpO1xyXG4gICAgaWYgKG51bSAlIDEgPCAwLjUpIHtcclxuICAgICAgbnVtID0gTWF0aC5mbG9vcihudW0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbnVtID0gTWF0aC5jZWlsKG51bSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBhcHBseSBhbGwgZmlsdGVycyB0byByZXN1bHRzXHJcbiAgICogQHBhcmFtIGZpbHRlcnNcclxuICAgKiBAcGFyYW0gaW5ib3VuZFxyXG4gICAqIEBwYXJhbSByZXN1bHRzXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBhcHBseUZpbHRlcnMoZmlsdGVyczogRmxpZ2h0RmlsdGVycyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZnVsbFJlc3VsdHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBuZWVkIHRvIGZpbHRlciBvdmVyIHRoZSB0aW1lcywgc3RvcHMgYW5kIHByaWNlLCB0aG91Z2ggcHJpY2UgYW5kIHN0b3BzIGFsd2F5cyBzZWVtIHRvIGJlIHRoZSBzYW1lXHJcblxyXG4gICAgLy8gISAtIFZBUklPVVMgRlVOQ1RJT05TIFRPIFBBU1MgSU4gVE8gRE8gVEhFIEFDVFVBTCBGSUxURVJJTkdcclxuXHJcbiAgICBjb25zdCB0ZXN0ZXIgPSAoXHJcbiAgICAgIGZpbHRlcnNUb3Rlc3Q6IFJlY29yZDxudW1iZXIgfCBzdHJpbmcsIFNlbGVjdEZpbHRlcj4sXHJcbiAgICAgIHRlc3RGdW5jdGlvbjogKFxyXG4gICAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leSxcclxuICAgICAgICB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyXHJcbiAgICAgICkgPT4gYm9vbGVhblxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gT2JqZWN0LnZhbHVlcyhmaWx0ZXJzVG90ZXN0KS5maWx0ZXIoXHJcbiAgICAgICAgKGZpbHRlcjogU2VsZWN0RmlsdGVyKSA9PiBmaWx0ZXIuc2VsZWN0ZWRcclxuICAgICAgKTtcclxuICAgICAgaWYgKHNlbGVjdGVkLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gISFzZWxlY3RlZC5maW5kKChmaWx0ZXI6IFNlbGVjdEZpbHRlcikgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGVzdEZ1bmN0aW9uKGZsaWdodEl0aW5lcmFyeSwgZmlsdGVyLnZhbHVlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIChfZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGlzVGltZUJldHdlZW4gPSAoXHJcbiAgICAgIG1pbm1heDogTWluTWF4LFxyXG4gICAgICBmaWVsZDogc3RyaW5nXHJcbiAgICApOiAoKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuKSA9PiB7XHJcbiAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpOiBib29sZWFuID0+IHtcclxuICAgICAgICBjb25zdCB2YWwgPSBtb21lbnQoXHJcbiAgICAgICAgICB0aGlzLmhlbHBlcnMuZnJvbU9iamVjdChcclxuICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5LFxyXG4gICAgICAgICAgICAuLi5yZXBsYWNlRmllbGRzKGZpZWxkLCBmbGlnaHRJdGluZXJhcnkpLnNwbGl0KCcuJylcclxuICAgICAgICAgIClcclxuICAgICAgICApLmdldCgnaG91cicpO1xyXG5cclxuICAgICAgICAvLyBub3cgYXR0ZW1wdCB0byBnZXQgdGhlIG1pbiAtIG1heSBuZWVkIHRvIG5vcm1hbGlzZSB0aGlzXHJcbiAgICAgICAgY29uc3QgdmFsMiA9IG1vbWVudChcclxuICAgICAgICAgIHRoaXMuaGVscGVycy5mcm9tT2JqZWN0KFxyXG4gICAgICAgICAgICBmbGlnaHRJdGluZXJhcnksXHJcbiAgICAgICAgICAgIC4uLnJlcGxhY2VGaWVsZHMoZmllbGQsIGZsaWdodEl0aW5lcmFyeSkuc3BsaXQoJy4nKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICkuZ2V0KCdtaW51dGUnKTtcclxuXHJcbiAgICAgICAgY29uc3QgdG90YWxUaW1lOiBudW1iZXIgPSBOdW1iZXIoXHJcbiAgICAgICAgICBgJHt2YWwudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfSR7dmFsMlxyXG4gICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAucGFkU3RhcnQoMiwgJzAnKX1gXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gdG90YWxUaW1lID49IG1pbm1heC5taW4gJiYgdG90YWxUaW1lIDw9IG1pbm1heC5tYXg7XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHJlcGxhY2VGaWVsZHMgPSAoXHJcbiAgICAgIGZpZWxkOiBzdHJpbmcsXHJcbiAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5XHJcbiAgICApOiBzdHJpbmcgPT4ge1xyXG4gICAgICByZXR1cm4gZmllbGRcclxuICAgICAgICAucmVwbGFjZSgnT1VUQk9VTkRfREVQQVJUVVJFJywgJ291dGJvdW5kRmxpZ2h0cy4wJylcclxuICAgICAgICAucmVwbGFjZShcclxuICAgICAgICAgICdPVVRCT1VORF9BUlJJVkFMJyxcclxuICAgICAgICAgICdvdXRib3VuZEZsaWdodHMuJyArIChmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDEpXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5yZXBsYWNlKCdJTkJPVU5EX0RFUEFSVFVSRScsICdpbmJvdW5kRmxpZ2h0cy4wJylcclxuICAgICAgICAucmVwbGFjZShcclxuICAgICAgICAgICdJTkJPVU5EX0FSUklWQUwnLFxyXG4gICAgICAgICAgJ2luYm91bmRGbGlnaHRzLicgK1xyXG4gICAgICAgICAgICAoKGZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cyB8fCBbXSkubGVuZ3RoIC0gMSlcclxuICAgICAgICApO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBpc0JldHdlZW4gPSAoXHJcbiAgICAgIG1pbm1heDogTWluTWF4LFxyXG4gICAgICBmaWVsZDogc3RyaW5nXHJcbiAgICApOiAoKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuKSA9PiB7XHJcbiAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpOiBib29sZWFuID0+IHtcclxuICAgICAgICBjb25zdCB2YWwgPSB0aGlzLmhlbHBlcnMuZnJvbU9iamVjdChcclxuICAgICAgICAgIGZsaWdodEl0aW5lcmFyeSxcclxuICAgICAgICAgIC4uLnJlcGxhY2VGaWVsZHMoZmllbGQsIGZsaWdodEl0aW5lcmFyeSkuc3BsaXQoJy4nKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIHZhbCA+PSBtaW5tYXgubWluICYmIHZhbCA8PSBtaW5tYXgubWF4O1xyXG4gICAgICB9O1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBmaWVsZEhhc1ZhbHVlID0gKFxyXG4gICAgICBmaWVsZDoga2V5b2YgRmxpZ2h0Sm91cm5leVxyXG4gICAgKTogKChmbGlnaHQ6IEZsaWdodEpvdXJuZXksIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpID0+IGJvb2xlYW4pID0+IHtcclxuICAgICAgcmV0dXJuIChmbGlnaHQ6IEZsaWdodEpvdXJuZXksIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcclxuICAgICAgICByZXR1cm4gZmxpZ2h0W2ZpZWxkXSA9PT0gdmFsdWU7XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIC8vICEgLSBPdXRib3VuZCBhbmQgSW5ib3VuZCBGaWx0ZXJzXHJcblxyXG4gICAgY29uc3Qgb3V0SXRpbmVyYXJ5VGVzdGVyczogKChcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnlcclxuICAgICkgPT4gYm9vbGVhbilbXSA9IFtdO1xyXG4gICAgY29uc3QgaW5JdGluZXJhcnlUZXN0ZXJzOiAoKFxyXG4gICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeVxyXG4gICAgKSA9PiBib29sZWFuKVtdID0gW107XHJcblxyXG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICBpc1RpbWVCZXR3ZWVuKGZpbHRlcnMuYXJyaXZhbFRpbWUsICdPVVRCT1VORF9BUlJJVkFMLmRhdGVUaW1lQXJyaXZpbmcnKVxyXG4gICAgKTtcclxuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgaXNUaW1lQmV0d2VlbihcclxuICAgICAgICBmaWx0ZXJzLmRlcGFydHVyZVRpbWUsXHJcbiAgICAgICAgJ09VVEJPVU5EX0RFUEFSVFVSRS5kYXRlVGltZURlcGFydGluZydcclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goaXNCZXR3ZWVuKGZpbHRlcnMucHJpY2UsICd0b3RhbC5wcmljZScpKTtcclxuXHJcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgaXNUaW1lQmV0d2VlbihcclxuICAgICAgICBmaWx0ZXJzLnJldHVybkFycml2YWxUaW1lLFxyXG4gICAgICAgICdJTkJPVU5EX0FSUklWQUwuZGF0ZVRpbWVBcnJpdmluZydcclxuICAgICAgKVxyXG4gICAgKTtcclxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICBpc1RpbWVCZXR3ZWVuKFxyXG4gICAgICAgIGZpbHRlcnMucmV0dXJuRGVwYXJ0dXJlVGltZSxcclxuICAgICAgICAnSU5CT1VORF9ERVBBUlRVUkUuZGF0ZVRpbWVEZXBhcnRpbmcnXHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgLy8gISAtIFRlc3RlcnNcclxuICAgIGNvbnN0IG91dEpvdXJuZXlUZXN0ZXJzOiAoKFxyXG4gICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXlcclxuICAgICkgPT4gYm9vbGVhbilbXSA9IFtdO1xyXG5cclxuICAgIG91dEpvdXJuZXlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihmaWx0ZXJzLmNsYXNzZXMsIGZpZWxkSGFzVmFsdWUoJ2NhYmluQ2xhc3MnKSlcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgaW5Kb3VybmV5VGVzdGVyczogKChcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5XHJcbiAgICApID0+IGJvb2xlYW4pW10gPSBbXTtcclxuXHJcbiAgICBpbkpvdXJuZXlUZXN0ZXJzLnB1c2godGVzdGVyKGZpbHRlcnMuY2xhc3NlcywgZmllbGRIYXNWYWx1ZSgnY2FiaW5DbGFzcycpKSk7XHJcblxyXG4gICAgLy8gIS0gSXRpbmVyYXJpZXNcclxuICAgIGNvbnN0IG91dEZpbHRlckl0aW5lcmFyaWVzID0gKFxyXG4gICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSxcclxuICAgICAgZ3JvdXBJbmRleDogbnVtYmVyXHJcbiAgICApOiBib29sZWFuID0+IHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnJlZHVjZShcclxuICAgICAgICAgIChcclxuICAgICAgICAgICAgYWNjOiBib29sZWFuLFxyXG4gICAgICAgICAgICB0ZXN0ZXIxOiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW5cclxuICAgICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICBhY2MgPSBhY2MgJiYgdGVzdGVyMShmbGlnaHRJdGluZXJhcnkpO1xyXG4gICAgICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApICYmXHJcbiAgICAgICAgKCFmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzIHx8XHJcbiAgICAgICAgICAhIShmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzIHx8IFtdKS5maW5kKFxyXG4gICAgICAgICAgICAoZmxpZ2h0Sm91cm5leTogRmxpZ2h0Sm91cm5leSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiAhIW91dEpvdXJuZXlUZXN0ZXJzLnJlZHVjZShcclxuICAgICAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgICAgYWNjOiBib29sZWFuLFxyXG4gICAgICAgICAgICAgICAgICB0ZXN0ZXIyOiAoXHJcbiAgICAgICAgICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5XHJcbiAgICAgICAgICAgICAgICAgICkgPT4gYm9vbGVhblxyXG4gICAgICAgICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBhY2MgJiYgdGVzdGVyMihmbGlnaHRKb3VybmV5KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSlcclxuICAgICAgKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaW5GaWx0ZXJJdGluZXJhcmllcyA9IChcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksXHJcbiAgICAgIGdyb3VwSW5kZXg6IG51bWJlclxyXG4gICAgKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgaW5JdGluZXJhcnlUZXN0ZXJzLnJlZHVjZShcclxuICAgICAgICAgIChcclxuICAgICAgICAgICAgYWNjOiBib29sZWFuLFxyXG4gICAgICAgICAgICB0ZXN0ZXIxOiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW5cclxuICAgICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gYWNjICYmIHRlc3RlcjEoZmxpZ2h0SXRpbmVyYXJ5KTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB0cnVlXHJcbiAgICAgICAgKSAmJlxyXG4gICAgICAgICghZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzPy5sZW5ndGggfHxcclxuICAgICAgICAgICEhKGZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cyB8fCBbXSkuZmluZChcclxuICAgICAgICAgICAgKGZsaWdodEpvdXJuZXk6IEZsaWdodEpvdXJuZXkpOiBib29sZWFuID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gISFpbkpvdXJuZXlUZXN0ZXJzLnJlZHVjZShcclxuICAgICAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgICAgYWNjOiBib29sZWFuLFxyXG4gICAgICAgICAgICAgICAgICB0ZXN0ZXIyOiAoXHJcbiAgICAgICAgICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5XHJcbiAgICAgICAgICAgICAgICAgICkgPT4gYm9vbGVhblxyXG4gICAgICAgICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBhY2MgJiYgdGVzdGVyMihmbGlnaHRKb3VybmV5KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSlcclxuICAgICAgKTtcclxuICAgIH07XHJcblxyXG4gICAgLy8gbm93IGZpbmFsbHkgcGVyZm9ybSB0aGUgZmlsdGVyaW5nIGFuZCBnbyBvdmVyIHRoZSByZXN1bHRzXHJcbiAgICAvLyBUT0RPIC0gYWRkIHRoZSBhZGRpdGlvbmFsIHN0dWZmIG5lZWRlZCBmb3IgR3JvdXBlZEZsaWdodHMgKExpZ2h0bmluZylcclxuXHJcbiAgICBjb25zdCBmdWxsUmVzdWx0c0Nsb25lID0gPGFueT50aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5mdWxsUmVzdWx0cyk7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmdWxsUmVzdWx0c0Nsb25lLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGZ1bGxSZXN1bHQgPSBmdWxsUmVzdWx0c0Nsb25lW2ldO1xyXG4gICAgICBmdWxsUmVzdWx0LmpvdXJuZXlzID0gZnVsbFJlc3VsdC5qb3VybmV5cy5maWx0ZXIob3V0RmlsdGVySXRpbmVyYXJpZXMpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXNSZXR1cm4pIHtcclxuICAgICAgICBmdWxsUmVzdWx0LmpvdXJuZXlzID0gZnVsbFJlc3VsdC5qb3VybmV5cy5maWx0ZXIoaW5GaWx0ZXJJdGluZXJhcmllcyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZ1bGxSZXN1bHQuam91cm5leXMgPSBmdWxsUmVzdWx0LmpvdXJuZXlzO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KGZ1bGxSZXN1bHRzQ2xvbmUpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2VsZWN0R3JvdXBlZEV1cm9zdGFyKFxyXG4gICAgc2VsZWN0ZWRFdXJvc3RhcjogRXVyb3N0YXJJdGVtLFxyXG4gICAgZmFyZTogRXVyb3N0YXJGYXJlLFxyXG4gICAgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtXHJcbiAgKSB7XHJcbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID1cclxuICAgICAgYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcclxuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcclxuICAgIC8vIG9uZSB3YXkgZWFzeVxyXG4gICAgaWYgKFxyXG4gICAgICBiYXNrZXQgJiZcclxuICAgICAgdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2guY2hvc2VuU2VhcmNoVHlwZSA9PT0gRXVyb3N0YXJTZWFyY2hUeXBlLm9uZVdheSAmJlxyXG4gICAgICBkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmRcclxuICAgICkge1xyXG4gICAgICB0aGlzLmRvQm9va2luZyhcclxuICAgICAgICBpbnRCYXNrZXQsXHJcbiAgICAgICAgc2VsZWN0ZWRFdXJvc3RhcixcclxuICAgICAgICB7XHJcbiAgICAgICAgICBvdXRib3VuZEZsaWdodHM6IFt0aGlzLm1ha2VTY2hlbWFGbGlnaHRzKGZhcmUuZmFyZSwgJ291dGJvdW5kJywgMCldLFxyXG4gICAgICAgICAgaW5ib3VuZEZsaWdodHM6IFtdLFxyXG4gICAgICAgICAgam91cm5leVR5cGU6ICdzaW5nbGUnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZWxlY3RlZEV1cm9zdGFyLmRhdGVEZXBhcnR1cmUsXHJcbiAgICAgICAgbnVsbCxcclxuICAgICAgICBmYXJlLnByaWNlLFxyXG4gICAgICAgIGZhcmUucmVxdWlyZXNSZWFzb25cclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gcmV0dXJuIGxvZ2ljIG5lZWRzIHVwZGF0aW5nIC0gZWl0aGVyIGFjY2VwdCBvdXRib3VuZCBvciByZXR1cm4gYW5kIHNvbWVob3cgZGlzdGlndWlzaCB0aGVtXHJcbiAgICBpZiAoXHJcbiAgICAgIGJhc2tldCAmJlxyXG4gICAgICB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaC5jaG9zZW5TZWFyY2hUeXBlID09PSBFdXJvc3RhclNlYXJjaFR5cGUucmV0dXJuXHJcbiAgICApIHtcclxuICAgICAgLy8gY2xpY2tlZCBvbiBhbiBvdXRib3VuZCBldXJvc3RhclxyXG4gICAgICBpZiAoZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kKSB7XHJcbiAgICAgICAgLy8gZ2l2ZW4gdGhlIG91dGJvdW5kIGJ1dCB3ZSBhbHJlYWR5IGhhdmUgaW5ib3VuZCBzZWxlY3RlZFxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEV1cm9zdGFyPy5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uSW5ib3VuZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgLy8gTFUgbG9naWMgc2hvd3MgdGhlIGJpZ2dlc3QgcHJpY2UgYWNyb3NzIG91dGJvdW5kIGFuZCByZXR1cm5cclxuICAgICAgICAgIGNvbnN0IHByaWNlID1cclxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRFdXJvc3RhckZhcmUuaXRlbS5wcmljZSA+IGZhcmUucHJpY2VcclxuICAgICAgICAgICAgICA/IHRoaXMuX3NlbGVjdGVkRXVyb3N0YXJGYXJlLml0ZW0ucHJpY2VcclxuICAgICAgICAgICAgICA6IGZhcmUucHJpY2U7XHJcbiAgICAgICAgICB0aGlzLmRvQm9va2luZyhcclxuICAgICAgICAgICAgaW50QmFza2V0LFxyXG4gICAgICAgICAgICBzZWxlY3RlZEV1cm9zdGFyLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgaW5ib3VuZEZsaWdodHM6IFtcclxuICAgICAgICAgICAgICAgIHRoaXMubWFrZVNjaGVtYUZsaWdodHMoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkRXVyb3N0YXJGYXJlLml0ZW0uZmFyZSxcclxuICAgICAgICAgICAgICAgICAgJ2luYm91bmQnLFxyXG4gICAgICAgICAgICAgICAgICAwXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICBvdXRib3VuZEZsaWdodHM6IFtcclxuICAgICAgICAgICAgICAgIHRoaXMubWFrZVNjaGVtYUZsaWdodHMoZmFyZS5mYXJlLCAnb3V0Ym91bmQnLCAwKVxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgam91cm5leVR5cGU6ICdyb3VuZHRyaXAnXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNlbGVjdGVkRXVyb3N0YXIuZGF0ZURlcGFydHVyZSxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRXVyb3N0YXIuaXRlbS5kYXRlQXJyaXZhbCxcclxuICAgICAgICAgICAgcHJpY2UsXHJcbiAgICAgICAgICAgIGZhcmUucmVxdWlyZXNSZWFzb25cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0ZWRGYXJlcygpO1xyXG4gICAgICAgICAgdGhpcy5iYXNrZXRTZXJ2aWNlLnRvZ2dsZU1lbnUoKTtcclxuICAgICAgICAgIHRoaXMucmVzdWx0cy5uZXh0KFxyXG4gICAgICAgICAgICAodGhpcy5mdWxsUmVzdWx0cyBhcyBFdXJvc3RhclJlc3VsdHNbXSkubWFwKFxyXG4gICAgICAgICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWRGbGFnc1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBFdXJvc3Rhcj8uZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0ZWRGYXJlcygpO1xyXG4gICAgICAgICAgLy8gd2UgaGF2ZSBhbiBvdXRib3VuZCBhbHJlYWR5IHNlbGVjdGVkIC0gZGVzZWxlY3QgaXRcclxuICAgICAgICAgIHRoaXMucmVzdWx0cy5uZXh0KHRoaXMuZnVsbFJlc3VsdHMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyB3ZSBkb250IGhhdmUgYW4gaW5ib3VuZCBzZWxlY3RlZFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRXVyb3N0YXIgPSB7XHJcbiAgICAgICAgICAgIGl0ZW06IHNlbGVjdGVkRXVyb3N0YXIsXHJcbiAgICAgICAgICAgIGRpcmVjdGlvblxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuX3NlbGVjdGVkRXVyb3N0YXJGYXJlID0ge1xyXG4gICAgICAgICAgICBpdGVtOiBmYXJlLFxyXG4gICAgICAgICAgICBkaXJlY3Rpb25cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHNlbGVjdGVkRXVyb3N0YXIudWlkO1xyXG4gICAgICAgICAgLy8gZmlsdGVyIG9uIG91dGJvdW5kcyBhcyB3ZSBoYXZlIHNlbGVjdGVkIGFuZCBhZGRlZCBhbiBvdXRib3VuZFxyXG4gICAgICAgICAgdGhpcy5yZXN1bHRzLm5leHQoXHJcbiAgICAgICAgICAgICh0aGlzLmZ1bGxSZXN1bHRzIGFzIEV1cm9zdGFyUmVzdWx0c1tdKS5tYXAoXHJcbiAgICAgICAgICAgICAgKHJlc3VsdDogRXVyb3N0YXJSZXN1bHRzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvdXRib3VuZCA9IHJlc3VsdC5vdXRib3VuZC5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgIChpdGVtOiBFdXJvc3Rhckl0ZW0pID0+IGluZGV4ID09PSBpdGVtLnVpZFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGluYm91bmQ6IHJlc3VsdC5pbmJvdW5kLCBvdXRib3VuZCB9O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkluYm91bmQpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBFdXJvc3Rhcj8uZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAvLyBlc3NlbnRpYWxseSBhZGQgYXMgd2UgZGlkIGJlZm9yZVxyXG4gICAgICAgICAgY29uc3QgcHJpY2UgPVxyXG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEV1cm9zdGFyRmFyZS5pdGVtLnByaWNlID4gZmFyZS5wcmljZVxyXG4gICAgICAgICAgICAgID8gdGhpcy5fc2VsZWN0ZWRFdXJvc3RhckZhcmUuaXRlbS5wcmljZVxyXG4gICAgICAgICAgICAgIDogZmFyZS5wcmljZTtcclxuICAgICAgICAgIHRoaXMuZG9Cb29raW5nKFxyXG4gICAgICAgICAgICBpbnRCYXNrZXQsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkRXVyb3N0YXIsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBvdXRib3VuZEZsaWdodHM6IFtcclxuICAgICAgICAgICAgICAgIHRoaXMubWFrZVNjaGVtYUZsaWdodHMoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkRXVyb3N0YXJGYXJlLml0ZW0uZmFyZSxcclxuICAgICAgICAgICAgICAgICAgJ291dGJvdW5kJyxcclxuICAgICAgICAgICAgICAgICAgMFxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgaW5ib3VuZEZsaWdodHM6IFt0aGlzLm1ha2VTY2hlbWFGbGlnaHRzKGZhcmUuZmFyZSwgJ2luYm91bmQnLCAwKV0sXHJcbiAgICAgICAgICAgICAgam91cm5leVR5cGU6ICdyb3VuZHRyaXAnXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNlbGVjdGVkRXVyb3N0YXIuZGF0ZURlcGFydHVyZSxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRXVyb3N0YXIuaXRlbS5kYXRlQXJyaXZhbCxcclxuICAgICAgICAgICAgcHJpY2UsXHJcbiAgICAgICAgICAgIGZhcmUucmVxdWlyZXNSZWFzb25cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0ZWRGYXJlcygpO1xyXG4gICAgICAgICAgdGhpcy5iYXNrZXRTZXJ2aWNlLnRvZ2dsZU1lbnUoKTtcclxuICAgICAgICAgIHRoaXMucmVzdWx0cy5uZXh0KFxyXG4gICAgICAgICAgICAodGhpcy5mdWxsUmVzdWx0cyBhcyBFdXJvc3RhclJlc3VsdHNbXSkubWFwKFxyXG4gICAgICAgICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWRGbGFnc1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBFdXJvc3Rhcj8uZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkluYm91bmRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3RlZEZhcmVzKCk7XHJcblxyXG4gICAgICAgICAgdGhpcy5yZXN1bHRzLm5leHQodGhpcy5mdWxsUmVzdWx0cyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEV1cm9zdGFyID0ge1xyXG4gICAgICAgICAgICBpdGVtOiBzZWxlY3RlZEV1cm9zdGFyLFxyXG4gICAgICAgICAgICBkaXJlY3Rpb25cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLl9zZWxlY3RlZEV1cm9zdGFyRmFyZSA9IHtcclxuICAgICAgICAgICAgaXRlbTogZmFyZSxcclxuICAgICAgICAgICAgZGlyZWN0aW9uXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSBzZWxlY3RlZEV1cm9zdGFyLnVpZDtcclxuICAgICAgICAgIC8vIGZpbHRlciBvbiBvdXRib3VuZHMgYXMgd2UgaGF2ZSBzZWxlY3RlZCBhbmQgYWRkZWQgYW4gb3V0Ym91bmRcclxuICAgICAgICAgIHRoaXMucmVzdWx0cy5uZXh0KFxyXG4gICAgICAgICAgICAodGhpcy5mdWxsUmVzdWx0cyBhcyBFdXJvc3RhclJlc3VsdHNbXSkubWFwKFxyXG4gICAgICAgICAgICAgIChyZXN1bHQ6IEV1cm9zdGFyUmVzdWx0cykgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5ib3VuZCA9IHJlc3VsdC5pbmJvdW5kLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgKGl0ZW06IEV1cm9zdGFySXRlbSkgPT4gaW5kZXggPT09IGl0ZW0udWlkXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgaW5ib3VuZCwgb3V0Ym91bmQ6IHJlc3VsdC5vdXRib3VuZCB9O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuX3VwZGF0ZVRyYXZlbFBvbGljaWVzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVUcmF2ZWxQb2xpY2llcygpIHtcclxuICAgIGlmIChcclxuICAgICAgIXRoaXMuc2VsZWN0ZWRHcm91cEV1cm9zdGFyIHx8XHJcbiAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWRbXHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRFdXJvc3RhckZhcmUuaXRlbS5qb3VybmV5SGFzaFxyXG4gICAgICBdIHx8XHJcbiAgICAgICF0aGlzLm11bHRpIHx8XHJcbiAgICAgIHRoaXMubXVsdGkubGVuZ3RoID09PSAwXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbXVsdGlJbmJvdW5kcyA9ICh0aGlzLm11bHRpIHx8IFtdKS5yZWR1Y2UoXHJcbiAgICAgIChhY2M6IEZsaWdodEl0aW5lcmFyeVtdLCBpdGVtOiBFdXJvc3Rhck11bHRpKSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0ub3JkZXIgPT09IDEgJiYgaXRlbS5yZXN1bHRzICYmIGl0ZW0ucmVzdWx0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBhY2MgPSBhY2MuY29uY2F0KGl0ZW0ucmVzdWx0cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgIH0sXHJcbiAgICAgIFtdXHJcbiAgICApO1xyXG4gICAgaWYgKG11bHRpSW5ib3VuZHMubGVuZ3RoID4gMCkge1xyXG5cclxuICAgICAgaWYgKCF0aGlzLnJhd1Jlc3VsdHMpIHtcclxuICAgICAgICB0aGlzLnJhd1Jlc3VsdHMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtKFxyXG4gICAgICAgICAgdGhpcy5yZXN1bHRzU2Vzc2lvbk5hbWUgKyAnX3JhdydcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLnJhd1Jlc3VsdHMpO1xyXG4gICAgICB0aGlzLmFwcGx5RmxpZ2h0UnVsZXNcclxuICAgICAgICAuZmV0Y2hPbmUoe1xyXG4gICAgICAgICAgc2VsZWN0ZWRPdXRib3VuZEZsaWdodDogdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0LFxyXG4gICAgICAgICAgYXZhaWxhYmxlSW5ib3VuZEZsaWdodHM6IG11bHRpSW5ib3VuZHMsXHJcbiAgICAgICAgICBzZWFyY2hJZDogdGhpcy5yYXdSZXN1bHRzLnNlYXJjaElkXHJcbiAgICAgICAgfSlcclxuICAgICAgICAucGlwZSh0YWtlKDEpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHJ1bGVzOiBSdWxlQWN0aW9uU3VtbWFyeUludGVyZmFjZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJ1bGVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5ID0gdGhpcy5oZWxwZXJzLm1lcmdlT2JqZWN0cyhcclxuICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeSxcclxuICAgICAgICAgICAgICBydWxlc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXRTZWxlY3RlZEZhcmVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwRXVyb3N0YXIgPSB7XHJcbiAgICAgIGRpcmVjdGlvbjogbnVsbCxcclxuICAgICAgaXRlbTogbnVsbFxyXG4gICAgfTtcclxuICAgIHRoaXMuX3NlbGVjdGVkRXVyb3N0YXJGYXJlID0ge1xyXG4gICAgICBkaXJlY3Rpb246IG51bGwsXHJcbiAgICAgIGl0ZW06IG51bGxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICByZW1vdmVTZWxlY3RlZEZsYWdzKHJlc3VsdDogRXVyb3N0YXJSZXN1bHRzKTogRXVyb3N0YXJSZXN1bHRzIHtcclxuICAgIGNvbnN0IGluYm91bmQgPSByZXN1bHQuaW5ib3VuZC5tYXAoKGl0ZW06IEV1cm9zdGFySXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnN0YW5kYXJkUHJlbWllckZhcmUuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgaXRlbS5zdGFuZGFyZEZhcmUuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgaXRlbS5idXNpbmVzc1ByZW1pZXJGYXJlLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBvdXRib3VuZCA9IHJlc3VsdC5vdXRib3VuZC5tYXAoKGl0ZW06IEV1cm9zdGFySXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnN0YW5kYXJkUHJlbWllckZhcmUuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgaXRlbS5zdGFuZGFyZEZhcmUuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgaXRlbS5idXNpbmVzc1ByZW1pZXJGYXJlLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4geyBpbmJvdW5kLCBvdXRib3VuZCB9O1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0czogRXVyb3N0YXJRdW90ZVJlc3VsdEFycmF5KTogSUNoZWFwZXN0UHJpY2Uge1xyXG4gICAgaWYgKCFyZXN1bHRzLmxlbmd0aCB8fCB0aGlzLnNlYXJjaFNlcnZpY2UuaXNGbGlnaHRzR3JvdXBlZCgpKSByZXR1cm47Ly9cclxuICAgIGNvbnN0IHJlc3VsdCA9IHJlc3VsdHNbMF0gYXMgRXVyb3N0YXJRdW90ZVJlc3VsdDtcclxuICAgIGNvbnN0IGpvdXJuZXlzID0gcmVzdWx0LmpvdXJuZXlzO1xyXG4gICAgaWYgKCFqb3VybmV5cy5sZW5ndGgpIHJldHVybjtcclxuICAgIGNvbnN0IGN1cnJlbmN5ID0gam91cm5leXNbMF0udG90YWwuY3VycmVuY3k7XHJcbiAgICByZXR1cm4gam91cm5leXMucmVkdWNlKFxyXG4gICAgICAoY2hlYXBlc3RQcmljZTogSUNoZWFwZXN0UHJpY2UsIHJlc3VsdDogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XHJcbiAgICAgICAgY29uc3QgcHJpY2UgPSByZXN1bHQudG90YWwucHJpY2U7XHJcbiAgICAgICAgaWYgKGNoZWFwZXN0UHJpY2UuYW1vdW50ID4gcHJpY2UpIGNoZWFwZXN0UHJpY2UuYW1vdW50ID0gcHJpY2U7XHJcbiAgICAgICAgcmV0dXJuIGNoZWFwZXN0UHJpY2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgYW1vdW50OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgY3VycmVuY3lDb2RlOiBjdXJyZW5jeSB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZG9Cb29raW5nKFxyXG4gICAgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSxcclxuICAgIHNlbGVjdGVkRmxpZ2h0OiBFdXJvc3Rhckl0ZW0sXHJcbiAgICBzY2hlbWFEZXRhaWxzOiBhbnksXHJcbiAgICBvdXRib3VuZERhdGU6IHN0cmluZyxcclxuICAgIGluYm91bmREYXRlOiBzdHJpbmcsXHJcbiAgICBwcmljZTogbnVtYmVyLFxyXG4gICAgcmVxdWlyZXNSZWFzb246IGJvb2xlYW5cclxuICApOiBQcm9taXNlPERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnM+IHtcclxuICAgIGNvbnN0IHsgc291cmNlSWQsIGNvMlBlckl0ZW0sIGNvMlBlclBhc3NlbmdlciwgdG90YWwgfSA9IHNlbGVjdGVkRmxpZ2h0O1xyXG4gICAgY29uc3QgYm9va2luZzogQWRkSXRlbVRvQmFza2V0TXV0YXRpb25WYXJpYWJsZXMgPSB7XHJcbiAgICAgIGFkdWx0czogdGhpcy5hZHVsdHMsXHJcbiAgICAgIGJhc2tldDogaW50QmFza2V0LmlkLFxyXG4gICAgICBjaGlsZHJlbjogdGhpcy5jaGlsZHJlbixcclxuICAgICAgY28yUGVySXRlbSxcclxuICAgICAgY28yUGVyUGFzc2VuZ2VyLFxyXG4gICAgICBjdXJyZW5jeTogdG90YWwuY3VycmVuY3kgYXMgQ3VycmVuY3lDb2RlLFxyXG4gICAgICBkZXRhaWw6IHNjaGVtYURldGFpbHMsXHJcbiAgICAgIHByaWNlLFxyXG4gICAgICBzZWFyY2hRdWVyeTogdGhpcy5yZXN1bHRRdWVyeSxcclxuICAgICAgc2VydmljZTogc291cmNlSWQudG9TdHJpbmcoKSxcclxuICAgICAgb3V0Ym91bmREYXRlLFxyXG4gICAgICBsb3dlc3RQcmljZTogdGhpcy5sb3dlc3RQcmljZT8uYW1vdW50LFxyXG4gICAgICBsb3dlc3RQcmljZUN1cnJlbmN5OiA8Q3VycmVuY3lDb2RlPnRoaXMubG93ZXN0UHJpY2U/LmN1cnJlbmN5Q29kZVxyXG4gICAgfTtcclxuICAgIGlmIChpbmJvdW5kRGF0ZSkge1xyXG4gICAgICBib29raW5nLmluYm91bmREYXRlID0gaW5ib3VuZERhdGU7XHJcbiAgICB9XHJcbiAgICBjb25zdCB3aGF0SGFwcGVuZWQgPSBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgIGJvb2tpbmcsXHJcbiAgICAgIGludEJhc2tldCxcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxyXG4gICAgICB0aGlzLnRyYXZlbGxlcnMsXHJcbiAgICAgIHJlcXVpcmVzUmVhc29uXHJcbiAgICApO1xyXG4gICAgaWYgKHdoYXRIYXBwZW5lZCA9PT0gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5yZXNlYXJjaCkge1xyXG4gICAgICB0aGlzLnBlcmZvcm1TZWFyY2goKTtcclxuICAgIH1cclxuICAgIHJldHVybiB3aGF0SGFwcGVuZWQ7XHJcbiAgfVxyXG5cclxuICBnZXQgbG93ZXN0UHJpY2UoKTogSUNoZWFwZXN0UHJpY2V7XHJcbiAgICBpZiAodGhpcy5jaGVhcGVzdFByaWNlKSByZXR1cm4gdGhpcy5jaGVhcGVzdFByaWNlXHJcbiAgICBjb25zdCBvdXRib3VuZCA9ICh0aGlzLmZ1bGxSZXN1bHRzWzBdIGFzIGFueSkub3V0Ym91bmQgYXMgRXVyb3N0YXJJdGVtW11cclxuICAgIGNvbnN0IGN1cnJlbmN5ID0gb3V0Ym91bmRbMF0uc3RhbmRhcmRGYXJlLmN1cnJlbmN5XHJcbiAgICBsZXQgY2hlYXBlc3RPdXRib3VuZDogbnVtYmVyXHJcbiAgICBvdXRib3VuZC5mb3JFYWNoKGEgPT4ge1xyXG4gICAgICBpZiAoIWNoZWFwZXN0T3V0Ym91bmQgfHwgYS5zdGFuZGFyZEZhcmUucHJpY2UgPCBjaGVhcGVzdE91dGJvdW5kKSBjaGVhcGVzdE91dGJvdW5kID0gYS5zdGFuZGFyZEZhcmUucHJpY2VcclxuICAgICAgaWYgKGEuc3RhbmRhcmRQcmVtaWVyRmFyZS5wcmljZSA8IGNoZWFwZXN0T3V0Ym91bmQpIGNoZWFwZXN0T3V0Ym91bmQgPSBhLnN0YW5kYXJkUHJlbWllckZhcmUucHJpY2VcclxuICAgICAgaWYgKGEuYnVzaW5lc3NQcmVtaWVyRmFyZS5wcmljZSA8IGNoZWFwZXN0T3V0Ym91bmQpIGNoZWFwZXN0T3V0Ym91bmQgPSBhLmJ1c2luZXNzUHJlbWllckZhcmUucHJpY2VcclxuICAgIH0pXHJcbiAgICBjb25zdCBpbmJvdW5kID0gKHRoaXMuZnVsbFJlc3VsdHNbMF0gYXMgYW55KS5pbmJvdW5kIGFzIEV1cm9zdGFySXRlbVtdXHJcbiAgICBsZXQgY2hlYXBlc3RpbmJvdW5kOiBudW1iZXJcclxuICAgIGlmIChpbmJvdW5kKXtcclxuICAgICAgaW5ib3VuZC5mb3JFYWNoKGEgPT4ge1xyXG4gICAgICAgIGlmICghY2hlYXBlc3RpbmJvdW5kIHx8IGEuc3RhbmRhcmRGYXJlLnByaWNlIDwgY2hlYXBlc3RpbmJvdW5kKSBjaGVhcGVzdGluYm91bmQgPSBhLnN0YW5kYXJkRmFyZS5wcmljZVxyXG4gICAgICAgIGlmIChhLnN0YW5kYXJkUHJlbWllckZhcmUucHJpY2UgPCBjaGVhcGVzdGluYm91bmQpIGNoZWFwZXN0aW5ib3VuZCA9IGEuc3RhbmRhcmRQcmVtaWVyRmFyZS5wcmljZVxyXG4gICAgICAgIGlmIChhLmJ1c2luZXNzUHJlbWllckZhcmUucHJpY2UgPCBjaGVhcGVzdGluYm91bmQpIGNoZWFwZXN0aW5ib3VuZCA9IGEuYnVzaW5lc3NQcmVtaWVyRmFyZS5wcmljZVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSBjaGVhcGVzdGluYm91bmQgPSAwXHJcbiAgICByZXR1cm4ge2Ftb3VudDogY2hlYXBlc3RPdXRib3VuZCArIGNoZWFwZXN0aW5ib3VuZCwgY3VycmVuY3lDb2RlOiBjdXJyZW5jeX1cclxuICB9XHJcblxyXG4gIG1ha2VTY2hlbWFGbGlnaHRzKFxyXG4gICAgc2VsZWN0ZWRGbGlnaHQ6IEZsaWdodEpvdXJuZXksXHJcbiAgICBmbGlnaHRHcm91cDogJ291dGJvdW5kJyB8ICdpbmJvdW5kJyxcclxuICAgIGdyb3VwSW5kZXg6IG51bWJlcixcclxuICAgIHNlZ21lbnRJbmRleD86IG51bWJlclxyXG4gICk6IGFueSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAuLi5zZWxlY3RlZEZsaWdodCxcclxuICAgICAgam91cm5leUluZm86IHtcclxuICAgICAgICBmbGlnaHRHcm91cCxcclxuICAgICAgICBncm91cEluZGV4LFxyXG4gICAgICAgIHNlZ21lbnRJbmRleFxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVHcm91cGVkSXRlbShcclxuICAgIHJldHVybk9iamVjdDogRXVyb3N0YXJHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICBzb3VyY2U6IHN0cmluZyxcclxuICAgIG91dGJvdW5kRmxpZ2h0czogRmxpZ2h0Sm91cm5leVtdLFxyXG4gICAgb3V0Ym91bmRUb3RhbER1cmF0aW9uOiBudW1iZXIsXHJcbiAgICBpbmJvdW5kRmxpZ2h0czogRmxpZ2h0Sm91cm5leVtdLFxyXG4gICAgaW5ib3VuZFRvdGFsRHVyYXRpb246IG51bWJlclxyXG4gICkge1xyXG4gICAgaWYgKG91dGJvdW5kRmxpZ2h0cz8ubGVuZ3RoICYmICFyZXR1cm5PYmplY3QuZGVwYXJ0RGF0ZVRpbWUpIHtcclxuICAgICAgY29uc3QgZmlyc3QgPSBvdXRib3VuZEZsaWdodHNbMF07XHJcbiAgICAgIGNvbnN0IGxhc3QgPSBvdXRib3VuZEZsaWdodHNbb3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFdO1xyXG4gICAgICByZXR1cm5PYmplY3Qub3JpZ2luQWlycG9ydCA9IGZpcnN0Lm9yaWdpbkFpcnBvcnQ7XHJcbiAgICAgIHJldHVybk9iamVjdC5vcmlnaW5BaXJwb3J0TmFtZSA9IGZpcnN0Lm9yaWdpbkFpcnBvcnROYW1lO1xyXG4gICAgICByZXR1cm5PYmplY3QuZGVzdGluYXRpb25BaXJwb3J0ID0gbGFzdC5kZXN0aW5hdGlvbkFpcnBvcnQ7XHJcbiAgICAgIHJldHVybk9iamVjdC5kZXN0aW5hdGlvbkFpcnBvcnROYW1lID0gbGFzdC5kZXN0aW5hdGlvbkFpcnBvcnROYW1lO1xyXG4gICAgICByZXR1cm5PYmplY3QuZGVwYXJ0RGF0ZVRpbWUgPSBmaXJzdC5kYXRlVGltZURlcGFydGluZztcclxuICAgICAgcmV0dXJuT2JqZWN0LmFycml2YWxEYXRlVGltZSA9IGxhc3QuZGF0ZVRpbWVBcnJpdmluZztcclxuICAgICAgcmV0dXJuT2JqZWN0Lm91dGJvdW5kVG90YWxEdXJhdGlvbiA9IG91dGJvdW5kVG90YWxEdXJhdGlvbjtcclxuICAgICAgcmV0dXJuT2JqZWN0LmRhdGFTb3VyY2UgPSBzb3VyY2U7XHJcbiAgICAgIHJldHVybk9iamVjdC5vcGVyYXRvciA9IGZpcnN0Lm9wZXJhdGluZ0NhcnJpZXI7XHJcbiAgICAgIHJldHVybk9iamVjdC5vcGVyYXRvckZ1bGwgPSBmaXJzdC5vcGVyYXRpbmdDYXJyaWVyTmFtZTtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm91dGxlZ3NDb3VudCA9IG91dGJvdW5kRmxpZ2h0cy5sZW5ndGg7XHJcbiAgICAgIHJldHVybk9iamVjdC5vdXRsZWdzID0gb3V0Ym91bmRGbGlnaHRzO1xyXG4gICAgICByZXR1cm5PYmplY3Qub3V0Ym91bmRGbGlnaHROdW1iZXIgPVxyXG4gICAgICAgIHRoaXMuaGVscGVycy5qb2luRnJvbUF0dHJpYnV0ZTxGbGlnaHRKb3VybmV5PihcclxuICAgICAgICAgICctJyxcclxuICAgICAgICAgICdvcGVyYXRpbmdGbGlnaHROdW1iZXInLFxyXG4gICAgICAgICAgb3V0Ym91bmRGbGlnaHRzXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgIHJldHVybk9iamVjdC5pc1JldHVybiA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpbmJvdW5kRmxpZ2h0cz8ubGVuZ3RoICYmICFyZXR1cm5PYmplY3QuaW5ib3VuZFRvdGFsRHVyYXRpb24pIHtcclxuICAgICAgcmV0dXJuT2JqZWN0LmluYm91bmRUb3RhbER1cmF0aW9uID0gaW5ib3VuZFRvdGFsRHVyYXRpb247XHJcbiAgICAgIHJldHVybk9iamVjdC5pbmxlZ3NDb3VudCA9IGluYm91bmRGbGlnaHRzLmxlbmd0aDtcclxuICAgICAgcmV0dXJuT2JqZWN0LmlubGVncyA9IGluYm91bmRGbGlnaHRzO1xyXG4gICAgICByZXR1cm5PYmplY3QuaW5ib3VuZEZsaWdodE51bWJlciA9XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmpvaW5Gcm9tQXR0cmlidXRlPEZsaWdodEpvdXJuZXk+KFxyXG4gICAgICAgICAgJy0nLFxyXG4gICAgICAgICAgJ29wZXJhdGluZ0ZsaWdodE51bWJlcicsXHJcbiAgICAgICAgICBpbmJvdW5kRmxpZ2h0c1xyXG4gICAgICAgICk7XHJcblxyXG4gICAgICByZXR1cm5PYmplY3QuaXNSZXR1cm4gPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG1ha2VTZXNzaW9uUmVzdWx0cyhcclxuICAgIGRhdGE6IEV1cm9zdGFyUXVvdGVSZXN1bHRBcnJheVxyXG4gICk6IEV1cm9zdGFyU2Vzc2lvblR5cGUge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVzdWx0czogW10sXHJcbiAgICAgIGdyb3VwRGF0YTogW10sXHJcbiAgICAgIGdyb3VwZWQ6IFtdLFxyXG4gICAgICBxdWVyeTogdGhpcy5yZXN1bHRRdWVyeVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGdldE1pbkZsaWdodFByaWNlRm9yQnJhbmQobWF0Y2hpbmdCcmFuZEZsaWdodHM6IEZsaWdodEl0aW5lcmFyeVtdKTogbnVtYmVyIHtcclxuICAgIGxldCBtaW4gPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcclxuICAgIG1hdGNoaW5nQnJhbmRGbGlnaHRzLmZvckVhY2goKGZsaWdodCkgPT4ge1xyXG4gICAgICBpZiAobWluID4gZmxpZ2h0Py50b3RhbD8ucHJpY2UpIHtcclxuICAgICAgICBtaW4gPSBmbGlnaHQudG90YWwucHJpY2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG1pbjtcclxuICB9XHJcblxyXG4gIGdldE1heEZsaWdodFByaWNlRm9yQnJhbmQobWF0Y2hpbmdCcmFuZEZsaWdodHM6IEZsaWdodEl0aW5lcmFyeVtdKTogbnVtYmVyIHtcclxuICAgIGxldCBtYXggPSAwO1xyXG4gICAgbWF0Y2hpbmdCcmFuZEZsaWdodHMuZm9yRWFjaCgoZmxpZ2h0KSA9PiB7XHJcbiAgICAgIGlmIChtYXggPCBmbGlnaHQ/LnRvdGFsPy5wcmljZSkge1xyXG4gICAgICAgIG1heCA9IGZsaWdodC50b3RhbC5wcmljZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbWF4O1xyXG4gIH1cclxuXHJcbiAgaXNPdmVyTmlnaHQoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBvdXR3YXJkRGF5ID0gdGhpcy5vdXRCb3VuZERhdGUuZGF0ZSgpO1xyXG4gICAgY29uc3QgcmV0dXJuRGF5ID0gdGhpcy5pbmJvdW5kRGF0ZS5kYXRlKCk7XHJcbiAgICBpZiAocmV0dXJuRGF5IC0gb3V0d2FyZERheSA+PSAxKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbWluVG9Ib3VyID0gKGR1cjogbnVtYmVyKTogc3RyaW5nID0+IGAke01hdGguZmxvb3IoZHVyIC8gNjApfWggJHtkdXIgJSA2MH1tYDtcclxuXHJcbiAgYXN5bmMgYWRkRXVyb3N0YXJKb3VybmV5c1RvQmFza2V0KFxyXG4gICAgZXVyb3N0YXJRdW90ZTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcclxuICApOiBQcm9taXNlPERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnM+IHtcclxuICAgIGlmIChldXJvc3RhclF1b3RlLnVuYXZhaWxhYmxlKSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jYW5jZWwpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9XHJcbiAgICAgIGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XHJcbiAgICBjb25zdCBiYXNrZXQgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWU7XHJcbiAgICBpZiAoYmFza2V0KSB7XHJcbiAgICAgIGNvbnN0IHsgc291cmNlSWQsIGNvMlBlckl0ZW0sIGNvMlBlclBhc3NlbmdlciwgdG90YWwgfSA9IGV1cm9zdGFyUXVvdGU7XHJcbiAgICAgIGNvbnN0IG91dGJvdW5kRGF0ZTogYW55ID0gbW9tZW50KFxyXG4gICAgICAgIGV1cm9zdGFyUXVvdGUub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGluYm91bmREYXRlOiBhbnkgPSBldXJvc3RhclF1b3RlLmluYm91bmRGbGlnaHRzLmxlbmd0aFxyXG4gICAgICAgID8gbW9tZW50KGV1cm9zdGFyUXVvdGUuaW5ib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgICBjb25zdCB0ZXJtc0FuZENvbmRpdGlvbnMgPSB0aGlzLmdldFRlcm1zQW5kQ29uZChldXJvc3RhclF1b3RlKTtcclxuICAgICAgY29uc3Qgc2NoZW1hRGV0YWlscyA9IHtcclxuICAgICAgICBvdXRib3VuZEZsaWdodHM6IFtcclxuICAgICAgICAgIC4uLmV1cm9zdGFyUXVvdGUub3V0Ym91bmRGbGlnaHRzLm1hcChcclxuICAgICAgICAgICAgKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgc2VnbWVudEluZGV4OiBudW1iZXIpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5tYWtlU2NoZW1hRmxpZ2h0cyhmbGlnaHQsICdvdXRib3VuZCcsIDAsIHNlZ21lbnRJbmRleClcclxuICAgICAgICAgIClcclxuICAgICAgICBdLFxyXG4gICAgICAgIGluYm91bmRGbGlnaHRzOiBbXHJcbiAgICAgICAgICAuLi5ldXJvc3RhclF1b3RlLmluYm91bmRGbGlnaHRzLm1hcChcclxuICAgICAgICAgICAgKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgc2VnbWVudEluZGV4OiBudW1iZXIpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5tYWtlU2NoZW1hRmxpZ2h0cyhmbGlnaHQsICdpbmJvdW5kJywgMCwgc2VnbWVudEluZGV4KVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgdGVybXNBbmRDb25kOiB0ZXJtc0FuZENvbmRpdGlvbnMsXHJcbiAgICAgICAgam91cm5leVR5cGU6ICdzaW5nbGUnXHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnN0IGJvb2tpbmc6IEFkZEl0ZW1Ub0Jhc2tldE11dGF0aW9uVmFyaWFibGVzID0ge1xyXG4gICAgICAgIGFkdWx0czogdGhpcy5hZHVsdHMsXHJcbiAgICAgICAgYmFza2V0OiBpbnRCYXNrZXQuaWQsXHJcbiAgICAgICAgY2hpbGRyZW46IHRoaXMuY2hpbGRyZW4sXHJcbiAgICAgICAgY28yUGVySXRlbSxcclxuICAgICAgICBjbzJQZXJQYXNzZW5nZXIsXHJcbiAgICAgICAgY3VycmVuY3k6IHRvdGFsLmN1cnJlbmN5IGFzIEN1cnJlbmN5Q29kZSxcclxuICAgICAgICBkZXRhaWw6IHNjaGVtYURldGFpbHMsXHJcbiAgICAgICAgcHJpY2U6IHRvdGFsLnByaWNlLFxyXG4gICAgICAgIHNlYXJjaFF1ZXJ5OiB0aGlzLnJlc3VsdFF1ZXJ5LFxyXG4gICAgICAgIHNlcnZpY2U6IHNvdXJjZUlkLnRvU3RyaW5nKCksXHJcbiAgICAgICAgb3V0Ym91bmREYXRlOiBvdXRib3VuZERhdGUuZm9ybWF0KClcclxuICAgICAgfTtcclxuICAgICAgaWYgKGluYm91bmREYXRlKSB7XHJcbiAgICAgICAgYm9va2luZy5pbmJvdW5kRGF0ZSA9IGluYm91bmREYXRlLmZvcm1hdCgpO1xyXG4gICAgICAgIHNjaGVtYURldGFpbHMuam91cm5leVR5cGUgPSAncm91bmR0cmlwJztcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3Qgd2hhdEhhcHBlbmVkID0gYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmFkZFRvQmFza2V0KFxyXG4gICAgICAgIGJvb2tpbmcsXHJcbiAgICAgICAgaW50QmFza2V0LFxyXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZSxcclxuICAgICAgICB0aGlzLnRyYXZlbGxlcnMsXHJcbiAgICAgICAgZXVyb3N0YXJRdW90ZS5yZXF1aXJlc1JlYXNvblxyXG4gICAgICApO1xyXG4gICAgICBpZiAod2hhdEhhcHBlbmVkID09PSBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLnJlc2VhcmNoKSB7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtU2VhcmNoKCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHdoYXRIYXBwZW5lZDtcclxuICAgIH1cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jYW5jZWwpO1xyXG4gIH1cclxuXHJcbiAgLy8gVE9ETyB3YWl0aW5nIGZvciBkYXRhXHJcbiAgZ2V0VGVybXNBbmRDb25kKGV1cm9zdGFyUXVvdGU6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1BlbmFsdGllcycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRWxpZ2liaWxpdHknLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICAsXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRGF5L3RpbWUnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1NlYXNvbmFsaXR5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdGbGlnaHTCoEFwcGxpY2F0aW9uJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdBZHZhbmNlwqBSZXNlcnZhdGlvbnMvdGlja2V0aW5nJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdNYXhpbXVtwqBTdGF5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdNaW5pbXVtwqBTdGF5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdTdG9wb3ZlcnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RyYW5zZmVycycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQ29tYmluYXRpb25zJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdCbGFja291dMKgRGF0ZXMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1N1cmNoYXJnZXMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0FjY29tcGFuaWVkwqBUcmF2ZWwnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RyYXZlbMKgUmVzdHJpY3Rpb25zJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdTYWxlc8KgUmVzdHJpY3Rpb25zJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdIaXAvbWlsZWFnZcKgRXhjZXB0aW9ucycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVGlja2V0wqBFbmRvcnNlbWVudHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0NoaWxkcmVuwqBEaXNjb3VudHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RvdXLCoENvbmR1Y3RvcsKgRGlzY291bnRzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdBZ2VudMKgRGlzY291bnRzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdBbGzCoE90aGVywqBEaXNjb3VudHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ01pc2NlbGxhbmVvdXPCoFByb3Zpc2lvbnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0ZhcmXCoEJ5wqBSdWxlJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdHcm91cHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RvdXJzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdWaXNpdMKgQW5vdGhlcsKgQ291bnRyeScsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRGVwb3NpdHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1ZvbHVudGFyecKgQ2hhbmdlcycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVm9sdW50YXJ5wqBSZWZ1bmRzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdOZWdvdGlhdGVkwqBGYXJlcycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnUnVsZcKgQXBwbGljYXRpb27CoEFuZMKgT3RoZXLCoENvbmRpdGlvbnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9XHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVNlYXJjaCgpOiBPYnNlcnZhYmxlPFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHQ+IHtcclxuICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcclxuICAgICAgY29uc3QgcXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xyXG4gICAgICBjb25zdCBmYXZvdXJpdGVTZWFyY2hRdWVyeTogSUV1cm9zdGFyU2VhcmNoQXJncyA9XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZXJjaFF1ZXJ5KHF1ZXJ5KTtcclxuICAgICAgY29uc3Qgc2VhcmNoSW5mbyA9IHtcclxuICAgICAgICBuYW1lOiBgJHttb21lbnQoKX1gLFxyXG4gICAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5FdXJvc3RhcixcclxuICAgICAgICBzZWFyY2hBcmdzOiBmYXZvdXJpdGVTZWFyY2hRdWVyeVxyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVGYXZvdXJpdGVTZWFyY2goc2VhcmNoSW5mbyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGFzeW5jIGFwcGx5RmF2b3VyaXRlKGZhdjogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmZhcmVUeXBlID0gZmF2LmZhcmVUeXBlO1xyXG4gICAgdGhpcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHMgPSBmYXYuaW5jbHVkZU5lYXJieUFpcnBvcnRzO1xyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gZmF2LnJldHVyblRyaXBcclxuICAgICAgPyBFdXJvc3RhclNlYXJjaFR5cGUucmV0dXJuXHJcbiAgICAgIDogRXVyb3N0YXJTZWFyY2hUeXBlLm9uZVdheTtcclxuICAgIHRoaXMuc2VhcmNoU2VydmljZVxyXG4gICAgICAuZ2V0QWlycG9ydHNMaXN0KGZhdi5vcmlnaW5BaXJwb3J0KVxyXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHRzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kZXBhcnRMb2NhdGlvbiA9IChyZXN1bHRzIGFzIE9CVEFpcnBvcnREZXRhaWxzW10pLmZpbmQoXHJcbiAgICAgICAgICAoYSkgPT4gYS5nYXRld2F5ID09IGZhdi5vcmlnaW5BaXJwb3J0XHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgLmdldEFpcnBvcnRzTGlzdChmYXYuZGVzdGluYXRpb25BaXJwb3J0KVxyXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHRzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hcnJpdmVMb2NhdGlvbiA9IChyZXN1bHRzIGFzIE9CVEFpcnBvcnREZXRhaWxzW10pLmZpbmQoXHJcbiAgICAgICAgICAoYSkgPT4gYS5nYXRld2F5ID09IGZhdi5kZXN0aW5hdGlvbkFpcnBvcnRcclxuICAgICAgICApO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuX3Bhc3NlbmdlcnMgPSBmYXYucGFzc2VuZ2VycztcclxuICAgIHRoaXMuYWR1bHRzID0gZmF2LnBhc3NlbmdlcnMuZmlsdGVyKChhOiBhbnkpID0+IGEudHlwZSA9PSAnQURVTFQnKS5sZW5ndGg7XHJcbiAgICB0aGlzLmNoaWxkcmVuID0gZmF2LnBhc3NlbmdlcnMuZmlsdGVyKChhOiBhbnkpID0+IGEudHlwZSA9PSAnQ0hJTEQnKS5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBvcGVuRXVyb3N0YXJGYXJlUnVsZXMoYmFza2V0SXRlbTogQmFza2V0SXRlbSk6IHZvaWQge1xyXG4gICAgY29uc3QgZmxpZ2h0cyA9IFsuLi5iYXNrZXRJdGVtLmRldGFpbC5vdXRib3VuZEZsaWdodHNdO1xyXG4gICAgZmxpZ2h0c1swXS5mYXJlSW5mbyA9IGZsaWdodHNbMF0uam91cm5leUluZm87XHJcbiAgICBkZWxldGUgZmxpZ2h0c1swXS5qb3VybmV5SW5mbztcclxuICAgIGNvbnN0IHJ1bGVzRnJvbUNhbGwgPSB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0RmxpZ2h0RmFyZVJ1bGVzKFxyXG4gICAgICBmbGlnaHRzWzBdIGFzIElucHV0RmxpZ2h0Sm91cm5leVxyXG4gICAgKTtcclxuICAgIHJ1bGVzRnJvbUNhbGwuc3Vic2NyaWJlKFxyXG4gICAgICAoZGF0YSkgPT4ge1xyXG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oTW9kYWxUeXBlcy5Nb2RhbEZsaWdodEZhcmVDb21wb25lbnQsIG51bGwsIHtcclxuICAgICAgICAgIHJ1bGVzOiBkYXRhLnJlc3VsdHNbMF0sXHJcbiAgICAgICAgICBmcm9tOiBmbGlnaHRzWzBdLm9yaWdpbkFpcnBvcnQsXHJcbiAgICAgICAgICB0bzogZmxpZ2h0c1tmbGlnaHRzLmxlbmd0aCAtIDFdLmRlc3RpbmF0aW9uQWlycG9ydFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9LFxyXG4gICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIl19
|