@sabstravtech/obtservices 0.0.26051001 → 0.2.2206161600

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.
Files changed (113) hide show
  1. package/angular/fetchers.d.ts +2 -0
  2. package/angular/lib/vendor/fetchers/get-office.fetcher.d.ts +7 -0
  3. package/angular/lib/vendor/fetchers/get-user-default-mi-value.fetcher.d.ts +7 -0
  4. package/angular/lib/vendor/services/enterprise-basket.service.d.ts +4 -4
  5. package/angular/lib/vendor/services/logon.service.d.ts +2 -2
  6. package/angular/lib/vendor/services/user.service.d.ts +5 -3
  7. package/angular/lib/vendor/types/graphql.angular.types.d.ts +389 -508
  8. package/angular/sabstravtech-obtservices-angular.metadata.json +1 -1
  9. package/base/fetchers.d.ts +2 -0
  10. package/base/lib/vendor/classes/base-enterprise.d.ts +3 -1
  11. package/base/lib/vendor/classes/cabhire-enterprise-search.d.ts +5 -1
  12. package/base/lib/vendor/classes/carhire-enterprise-search.d.ts +8 -1
  13. package/base/lib/vendor/classes/eurostar-enterprise-search.d.ts +11 -4
  14. package/base/lib/vendor/classes/fast-track-enterprise-search.d.ts +2 -1
  15. package/base/lib/vendor/classes/flight-enterprise-search.d.ts +11 -0
  16. package/base/lib/vendor/classes/hotel-enterprise-search.d.ts +4 -0
  17. package/base/lib/vendor/classes/irl-enterprise-search.d.ts +9 -4
  18. package/base/lib/vendor/classes/lounges-enterprise-search.d.ts +2 -1
  19. package/base/lib/vendor/classes/management-info-and-valid.d.ts +2 -2
  20. package/base/lib/vendor/classes/parking-enterprise-search.d.ts +2 -1
  21. package/base/lib/vendor/classes/rail-enterprise-search.d.ts +1 -1
  22. package/base/lib/vendor/classes/user-favourite.enum.d.ts +1 -0
  23. package/base/lib/vendor/fetchers/eurostar-quote.fetcher.d.ts +3 -1
  24. package/base/lib/vendor/fetchers/flight-quote.fetcher.d.ts +1 -0
  25. package/base/lib/vendor/fetchers/get-office.fetcher.d.ts +20 -0
  26. package/base/lib/vendor/fetchers/get-user-default-mi-value.fetcher.d.ts +21 -0
  27. package/base/lib/vendor/fetchers/search-users-can-book-for-fetcher.d.ts +2 -2
  28. package/base/lib/vendor/interfaces/Icabhire-enterprise-search.d.ts +1 -0
  29. package/base/lib/vendor/interfaces/Icarhire-enterprise-search.d.ts +2 -0
  30. package/base/lib/vendor/interfaces/Ienterprise-basket.service.d.ts +3 -2
  31. package/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +6 -0
  32. package/base/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +3 -0
  33. package/base/lib/vendor/interfaces/Iirl-enterprise-search.d.ts +4 -4
  34. package/base/lib/vendor/interfaces/Imybookings.service.d.ts +3 -2
  35. package/base/lib/vendor/interfaces/Isearch.service.d.ts +1 -0
  36. package/base/lib/vendor/interfaces/Iuser.service.d.ts +10 -3
  37. package/base/lib/vendor/interfaces/rail-basket-item.interface.d.ts +2 -0
  38. package/base/lib/vendor/interfaces/summary-interface.d.ts +4 -0
  39. package/base/lib/vendor/models/traveller.object.d.ts +11 -1
  40. package/base/lib/vendor/services/enterprise-basket.service.d.ts +9 -7
  41. package/base/lib/vendor/services/logon.service.d.ts +3 -3
  42. package/base/lib/vendor/services/my-bookings.service.d.ts +3 -2
  43. package/base/lib/vendor/services/search.service.d.ts +3 -2
  44. package/base/lib/vendor/services/user.service.d.ts +18 -3
  45. package/base/lib/vendor/services/webtoken.service.d.ts +6 -4
  46. package/base/lib/vendor/types/graphql.types.d.ts +379 -508
  47. package/base/lib/vendor/types/types.d.ts +35 -7
  48. package/base/sabstravtech-obtservices-base.metadata.json +1 -1
  49. package/bundles/sabstravtech-obtservices-angular.umd.js +300 -201
  50. package/bundles/sabstravtech-obtservices-angular.umd.js.map +1 -1
  51. package/bundles/sabstravtech-obtservices-angular.umd.min.js +1 -1
  52. package/bundles/sabstravtech-obtservices-angular.umd.min.js.map +1 -1
  53. package/bundles/sabstravtech-obtservices-base.umd.js +2143 -597
  54. package/bundles/sabstravtech-obtservices-base.umd.js.map +1 -1
  55. package/bundles/sabstravtech-obtservices-base.umd.min.js +2 -2
  56. package/bundles/sabstravtech-obtservices-base.umd.min.js.map +1 -1
  57. package/esm2015/angular/fetchers.js +3 -1
  58. package/esm2015/angular/lib/vendor/fetchers/get-office.fetcher.js +25 -0
  59. package/esm2015/angular/lib/vendor/fetchers/get-user-default-mi-value.fetcher.js +25 -0
  60. package/esm2015/angular/lib/vendor/services/enterprise-basket.service.js +25 -25
  61. package/esm2015/angular/lib/vendor/services/logon.service.js +7 -7
  62. package/esm2015/angular/lib/vendor/services/ticket-queue.service.js +4 -1
  63. package/esm2015/angular/lib/vendor/services/user.service.js +13 -7
  64. package/esm2015/angular/lib/vendor/services/webtoken.service.js +2 -2
  65. package/esm2015/angular/lib/vendor/types/graphql.angular.types.js +808 -1231
  66. package/esm2015/base/fetchers.js +3 -1
  67. package/esm2015/base/lib/vendor/classes/base-enterprise.js +6 -3
  68. package/esm2015/base/lib/vendor/classes/bookable-basket.js +1 -3
  69. package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +155 -9
  70. package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +129 -8
  71. package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +351 -20
  72. package/esm2015/base/lib/vendor/classes/fast-track-enterprise-search.js +8 -5
  73. package/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +94 -14
  74. package/esm2015/base/lib/vendor/classes/helpers.js +15 -2
  75. package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +86 -21
  76. package/esm2015/base/lib/vendor/classes/irl-enterprise-search.js +123 -18
  77. package/esm2015/base/lib/vendor/classes/lounges-enterprise-search.js +63 -8
  78. package/esm2015/base/lib/vendor/classes/management-info-and-valid.js +56 -33
  79. package/esm2015/base/lib/vendor/classes/parking-enterprise-search.js +109 -6
  80. package/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +81 -7
  81. package/esm2015/base/lib/vendor/classes/supplementary-booking-info-impl.js +17 -1
  82. package/esm2015/base/lib/vendor/classes/user-favourite.enum.js +2 -1
  83. package/esm2015/base/lib/vendor/data/countries.json +484 -242
  84. package/esm2015/base/lib/vendor/fetchers/eurostar-quote.fetcher.js +3 -3
  85. package/esm2015/base/lib/vendor/fetchers/flight-quote.fetcher.js +3 -3
  86. package/esm2015/base/lib/vendor/fetchers/get-office.fetcher.js +11 -0
  87. package/esm2015/base/lib/vendor/fetchers/get-user-default-mi-value.fetcher.js +10 -0
  88. package/esm2015/base/lib/vendor/fetchers/search-users-can-book-for-fetcher.js +1 -1
  89. package/esm2015/base/lib/vendor/interfaces/Icabhire-enterprise-search.js +1 -1
  90. package/esm2015/base/lib/vendor/interfaces/Icarhire-enterprise-search.js +1 -1
  91. package/esm2015/base/lib/vendor/interfaces/Ienterprise-basket.service.js +1 -1
  92. package/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +1 -1
  93. package/esm2015/base/lib/vendor/interfaces/Ihotel-enterprise-search.js +1 -1
  94. package/esm2015/base/lib/vendor/interfaces/Iirl-enterprise-search.js +1 -1
  95. package/esm2015/base/lib/vendor/interfaces/Imybookings.service.js +1 -1
  96. package/esm2015/base/lib/vendor/interfaces/Isearch.service.js +1 -1
  97. package/esm2015/base/lib/vendor/interfaces/Iuser.service.js +1 -1
  98. package/esm2015/base/lib/vendor/interfaces/rail-basket-item.interface.js +1 -1
  99. package/esm2015/base/lib/vendor/interfaces/summary-interface.js +1 -1
  100. package/esm2015/base/lib/vendor/models/traveller.object.js +21 -3
  101. package/esm2015/base/lib/vendor/services/enterprise-basket.service.js +42 -19
  102. package/esm2015/base/lib/vendor/services/logon.service.js +8 -5
  103. package/esm2015/base/lib/vendor/services/my-bookings.service.js +3 -2
  104. package/esm2015/base/lib/vendor/services/search.service.js +32 -24
  105. package/esm2015/base/lib/vendor/services/user.service.js +47 -3
  106. package/esm2015/base/lib/vendor/services/webtoken.service.js +12 -6
  107. package/esm2015/base/lib/vendor/types/graphql.types.js +15 -1
  108. package/esm2015/base/lib/vendor/types/types.js +4 -3
  109. package/fesm2015/sabstravtech-obtservices-angular.js +948 -1334
  110. package/fesm2015/sabstravtech-obtservices-angular.js.map +1 -1
  111. package/fesm2015/sabstravtech-obtservices-base.js +1984 -472
  112. package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
  113. package/package.json +1 -1
@@ -30,7 +30,7 @@ export var FlightSortTypes;
30
30
  })(FlightSortTypes || (FlightSortTypes = {}));
31
31
  export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
32
32
  constructor(flightfetcher, helpers, userService, basketService, storageService, searchService, applyFlightRules, modalService) {
33
- super(storageService, helpers, searchService);
33
+ super(storageService, helpers, searchService, userService);
34
34
  this.flightfetcher = flightfetcher;
35
35
  this.userService = userService;
36
36
  this.basketService = basketService;
@@ -128,7 +128,7 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
128
128
  if (a.direction !== b.direction) {
129
129
  return a.direction - b.direction;
130
130
  }
131
- return (a.preferred ? 1 : 0) - (b.preferred ? 1 : 0);
131
+ return (b.preferred ? 1 : 0) - (a.preferred ? 1 : 0);
132
132
  },
133
133
  [FlightSortTypes.LowestEmissions]: (a, b) => {
134
134
  if (a.direction !== b.direction) {
@@ -204,6 +204,20 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
204
204
  this.filters = new BehaviorSubject(DEFAULT_FLIGHT_FILTERS);
205
205
  this.duralSingleFilter = new BehaviorSubject(DEFAULT_FLIGHT_FILTERS);
206
206
  this.choosenDisplayType = new BehaviorSubject(FlightDisplayTypes.returns);
207
+ this._cheapestPriceObject = {
208
+ dualOutbound: {
209
+ amount: Number.MAX_SAFE_INTEGER,
210
+ currencyCode: 'GBP'
211
+ },
212
+ dualInbound: {
213
+ amount: Number.MAX_SAFE_INTEGER,
214
+ currencyCode: 'GBP'
215
+ },
216
+ returns: {
217
+ amount: Number.MAX_SAFE_INTEGER,
218
+ currencyCode: 'GBP'
219
+ }
220
+ };
207
221
  this._multiDestination = [];
208
222
  const data = storageService.getSessionItem(FlightEnterpriseSearch.STORAGE_SESSION_PARAMS) || {
209
223
  tempParams: {},
@@ -236,6 +250,9 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
236
250
  this.negotiated =
237
251
  this.tempParams.fareType === FareType.Negotiated ? true : false;
238
252
  }
253
+ get cheapestPriceObject() {
254
+ return this._cheapestPriceObject;
255
+ }
239
256
  get timeArray() {
240
257
  this._timeArray =
241
258
  this._timeArray ||
@@ -515,13 +532,13 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
515
532
  journeyWhenSelected: {},
516
533
  dualSingleWhenSelected: {},
517
534
  whenSelectedAlone: {}
518
- }, results.ruleActionSummary);
535
+ }, results.ruleActionSummary || {});
519
536
  this.resultQuery = this.getSearchQuery();
520
537
  this.multi = results.multi;
521
538
  this.setFlightDisplayType(FlightDisplayTypes.returns);
522
539
  this.currentFilters = this.helpers.createFlightFilters(results.journeys, DEFAULT_FLIGHT_FILTERS);
523
540
  this.filters.next(this.currentFilters);
524
- delete this.resultQuery.withGrouped;
541
+ // delete this.resultQuery['withGrouped'];
525
542
  const dualSingles = results.multi.reduce((previousItems, nextItem) => {
526
543
  previousItems[nextItem.order === OUTBOUND ? 'outbound' : 'inbound'] =
527
544
  nextItem.results.reduce((accum, flight) => {
@@ -535,7 +552,7 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
535
552
  }, { outbound: {}, inbound: {} });
536
553
  // console.log(dualSingles);
537
554
  const dualInboundFilters = this.helpers.createFlightFilters(Object.values(dualSingles.inbound), DEFAULT_FLIGHT_FILTERS);
538
- this.duralSingleFilter.next(this.helpers.createFlightFilters(Object.values(dualSingles.outbound), Object.assign(Object.assign({}, DEFAULT_FLIGHT_FILTERS), { arrivalReturnAirport: dualInboundFilters.arrivalAirport, depatureReturnAirport: dualInboundFilters.depatureAirport, returnArrivalTime: dualInboundFilters.arrivalTime, returnDuration: dualInboundFilters.duration, returnDepartureTime: dualInboundFilters.departureTime })));
555
+ this.duralSingleFilter.next(this.helpers.createFlightFilters(Object.values(dualSingles.outbound), Object.assign(Object.assign({}, DEFAULT_FLIGHT_FILTERS), { price: dualInboundFilters.price, arrivalReturnAirport: dualInboundFilters.arrivalAirport, depatureReturnAirport: dualInboundFilters.depatureAirport, returnArrivalTime: dualInboundFilters.arrivalTime, returnDuration: dualInboundFilters.duration, returnDepartureTime: dualInboundFilters.departureTime })));
539
556
  if (results && this.searchService.isFlightsGrouped()) {
540
557
  const returns = (results.journeys || []).reduce((accum, flight) => {
541
558
  accum[flight.uid] = Object.assign({
@@ -557,6 +574,28 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
557
574
  result1.direction = FlightDirectionEnum.DualSingleInbound;
558
575
  return result1;
559
576
  });
577
+ // gonna grab cheapest flights here
578
+ this._cheapestPriceObject.returns = returnData.reduce((cheapestPrice, result) => {
579
+ const price = result.minPrice;
580
+ if (cheapestPrice.amount > price) {
581
+ cheapestPrice.amount = price;
582
+ }
583
+ return cheapestPrice;
584
+ }, { amount: Number.MAX_SAFE_INTEGER, currencyCode: 'GBP' });
585
+ this._cheapestPriceObject.dualOutbound = dualDataOutbound.reduce((cheapestPrice, result) => {
586
+ const price = result.minPrice;
587
+ if (cheapestPrice.amount > price) {
588
+ cheapestPrice.amount = price;
589
+ }
590
+ return cheapestPrice;
591
+ }, { amount: Number.MAX_SAFE_INTEGER, currencyCode: 'GBP' });
592
+ this._cheapestPriceObject.dualInbound = dualDataInbound.reduce((cheapestPrice, result) => {
593
+ const price = result.minPrice;
594
+ if (cheapestPrice.amount > price) {
595
+ cheapestPrice.amount = price;
596
+ }
597
+ return cheapestPrice;
598
+ }, { amount: Number.MAX_SAFE_INTEGER, currencyCode: 'GBP' });
560
599
  const data2 = [...returnData, ...dualDataOutbound, ...dualDataInbound];
561
600
  console.log('Processed Grouped data', data2);
562
601
  return data2;
@@ -599,7 +638,12 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
599
638
  inlegsCount: 0,
600
639
  dataSource: '',
601
640
  preferred: false,
602
- preferredMessage: '',
641
+ companyPreferred: false,
642
+ companyPreferredMessage: '',
643
+ officePreferred: false,
644
+ officePreferredMessage: '',
645
+ tmcPreferred: false,
646
+ tmcPreferredMessage: '',
603
647
  outboundFlightNumber: '',
604
648
  operator: '',
605
649
  operatorFull: '',
@@ -620,7 +664,7 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
620
664
  }
621
665
  // ! using a reduce because not all flights actually exist and we were seeing undefined in the flight list
622
666
  brands[brand].forEach((flightNum) => {
623
- var _a, _b, _c, _d, _e, _f;
667
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
624
668
  const flight = groupedObject[flightNum];
625
669
  if (flight) {
626
670
  if (isOutBound || treatOutboundsAsOutbounds) {
@@ -640,13 +684,28 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
640
684
  returnObject.maxPrice > maxprice
641
685
  ? returnObject.maxPrice
642
686
  : maxprice;
643
- returnObject.preferred =
687
+ returnObject.companyPreferred =
644
688
  ((_a = this._ruleActionSummary.journeyWhenSelected[flight.journeyHash]) === null || _a === void 0 ? void 0 : _a.companyPreferred) || ((_b = this._ruleActionSummary.whenSelectedAlone[flight.journeyHash]) === null || _b === void 0 ? void 0 : _b.companyPreferred) ||
645
689
  false;
646
- returnObject.preferredMessage =
690
+ returnObject.companyPreferredMessage =
647
691
  ((_c = this._ruleActionSummary.journeyWhenSelected[flight.journeyHash]) === null || _c === void 0 ? void 0 : _c.companyPreferredMessage) || ((_d = this._ruleActionSummary.whenSelectedAlone[flight.journeyHash]) === null || _d === void 0 ? void 0 : _d.companyPreferredMessage) ||
648
692
  '';
649
- if ((_f = (_e = returnObject.classes[correctBrand]) === null || _e === void 0 ? void 0 : _e.flights) === null || _f === void 0 ? void 0 : _f.length) {
693
+ returnObject.officePreferred =
694
+ ((_e = this._ruleActionSummary.journeyWhenSelected[flight.journeyHash]) === null || _e === void 0 ? void 0 : _e.officePreferred) || ((_f = this._ruleActionSummary.whenSelectedAlone[flight.journeyHash]) === null || _f === void 0 ? void 0 : _f.officePreferred) ||
695
+ false;
696
+ returnObject.officePreferredMessage =
697
+ ((_g = this._ruleActionSummary.journeyWhenSelected[flight.journeyHash]) === null || _g === void 0 ? void 0 : _g.officePreferredMessage) || ((_h = this._ruleActionSummary.whenSelectedAlone[flight.journeyHash]) === null || _h === void 0 ? void 0 : _h.officePreferredMessage) ||
698
+ '';
699
+ returnObject.tmcPreferred =
700
+ ((_j = this._ruleActionSummary.journeyWhenSelected[flight.journeyHash]) === null || _j === void 0 ? void 0 : _j.tmcPreferred) || ((_k = this._ruleActionSummary.whenSelectedAlone[flight.journeyHash]) === null || _k === void 0 ? void 0 : _k.tmcPreferred) ||
701
+ false;
702
+ returnObject.tmcPreferredMessage =
703
+ ((_l = this._ruleActionSummary.journeyWhenSelected[flight.journeyHash]) === null || _l === void 0 ? void 0 : _l.tmcPreferredMessage) || ((_m = this._ruleActionSummary.whenSelectedAlone[flight.journeyHash]) === null || _m === void 0 ? void 0 : _m.tmcPreferredMessage) ||
704
+ '';
705
+ returnObject.preferred =
706
+ ((_o = this._ruleActionSummary.journeyWhenSelected[flight.journeyHash]) === null || _o === void 0 ? void 0 : _o.companyPreferred) || ((_p = this._ruleActionSummary.whenSelectedAlone[flight.journeyHash]) === null || _p === void 0 ? void 0 : _p.companyPreferred) || ((_q = this._ruleActionSummary.journeyWhenSelected[flight.journeyHash]) === null || _q === void 0 ? void 0 : _q.officePreferred) || ((_r = this._ruleActionSummary.whenSelectedAlone[flight.journeyHash]) === null || _r === void 0 ? void 0 : _r.officePreferred) || ((_s = this._ruleActionSummary.journeyWhenSelected[flight.journeyHash]) === null || _s === void 0 ? void 0 : _s.tmcPreferred) || ((_t = this._ruleActionSummary.whenSelectedAlone[flight.journeyHash]) === null || _t === void 0 ? void 0 : _t.tmcPreferred);
707
+ false;
708
+ if ((_v = (_u = returnObject.classes[correctBrand]) === null || _u === void 0 ? void 0 : _u.flights) === null || _v === void 0 ? void 0 : _v.length) {
650
709
  returnObject.classes[correctBrand].flights.push(flight);
651
710
  returnObject.classes[correctBrand].minprice = Math.min(returnObject.classes[correctBrand].minprice, minprice);
652
711
  returnObject.classes[correctBrand].maxprice = Math.max(returnObject.classes[correctBrand].maxprice, maxprice);
@@ -976,7 +1035,6 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
976
1035
  includeNearbyAirports: this.tempParams.includeNearbyAirports,
977
1036
  preferredCarriers: this.tempParams.preferredCarriers.map((carrier) => (carrier === null || carrier === void 0 ? void 0 : carrier.code) ? carrier.code : null),
978
1037
  fareType: this.tempParams.fareType,
979
- withGrouped: isFlightsGrouped
980
1038
  }, this.isReturn
981
1039
  ? {
982
1040
  returnDate: this.helpers.formatIsoDate(this.tempParams.inboundDate),
@@ -1569,10 +1627,15 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
1569
1627
  return acc;
1570
1628
  }, []);
1571
1629
  if (multiInbounds.length > 0) {
1630
+ if (!this.rawResults) {
1631
+ this.rawResults = this.storageService.getSessionItem(this.resultsSessionName + '_raw');
1632
+ }
1633
+ console.log(this.rawResults);
1572
1634
  this.applyFlightRules
1573
1635
  .fetchOne({
1574
1636
  selectedOutboundFlight: this.selectedGroupFlight,
1575
- availableInboundFlights: multiInbounds
1637
+ availableInboundFlights: multiInbounds,
1638
+ searchId: this.rawResults.searchId
1576
1639
  })
1577
1640
  .pipe(take(1))
1578
1641
  .subscribe((rules) => {
@@ -1606,7 +1669,11 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
1606
1669
  price: total.price,
1607
1670
  searchQuery: this.resultQuery,
1608
1671
  service: sourceId.toString(),
1609
- outboundDate
1672
+ outboundDate,
1673
+ lowestPrice: (this.absoluteCheapestPrice.amount != Math.floor(total.price) || this.absoluteCheapestPrice.currencyCode != total.currency) ?
1674
+ this.absoluteCheapestPrice.amount : null,
1675
+ lowestPriceCurrency: (this.absoluteCheapestPrice.amount != Math.floor(total.price) || this.absoluteCheapestPrice.currencyCode != total.currency) ?
1676
+ this.absoluteCheapestPrice.currencyCode : null
1610
1677
  };
1611
1678
  if (inboundDate) {
1612
1679
  booking.inboundDate = inboundDate;
@@ -1618,6 +1685,19 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
1618
1685
  return whatHappened;
1619
1686
  });
1620
1687
  }
1688
+ get absoluteCheapestPrice() {
1689
+ if (this.cheapestPrice)
1690
+ return this.cheapestPrice;
1691
+ let price = { amount: null, currencyCode: null };
1692
+ if (this.cheapestPriceObject.dualInbound.amount + this.cheapestPriceObject.dualOutbound.amount <
1693
+ this.cheapestPriceObject.returns.amount && this.cheapestPriceObject.dualInbound.currencyCode == this.cheapestPriceObject.dualOutbound.currencyCode) {
1694
+ price.amount = this.cheapestPriceObject.dualInbound.amount + this.cheapestPriceObject.dualOutbound.amount;
1695
+ price.currencyCode = this.cheapestPriceObject.dualInbound.currencyCode;
1696
+ }
1697
+ else
1698
+ price = this.cheapestPriceObject.returns;
1699
+ return price;
1700
+ }
1621
1701
  makeSchemaFlights(selectedFlight, flightGroup, groupIndex, segmentIndex) {
1622
1702
  return Object.assign(Object.assign({}, selectedFlight), { journeyInfo: {
1623
1703
  flightGroup,
@@ -1924,4 +2004,4 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
1924
2004
  }
1925
2005
  FlightEnterpriseSearch.STORAGE_SESSION_PARAMS = 'search_flight';
1926
2006
  FlightEnterpriseSearch.STORAGE_SESSION_RESULTS = 'results_flight';
1927
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxpZ2h0LWVudGVycHJpc2Utc2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2J0c2VydmljZXMvYmFzZS9zcmMvbGliL3ZlbmRvci9jbGFzc2VzL2ZsaWdodC1lbnRlcnByaXNlLXNlYXJjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBSXpELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBSWxFLE9BQU8sRUFRTCxRQUFRLEVBQ1IsZ0JBQWdCLEVBSWhCLG1CQUFtQixFQVFuQixXQUFXLEVBQ1osTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQ0wsNEJBQTRCLEVBRTVCLG1CQUFtQixFQVluQixtQkFBbUIsRUFNcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQVV4QixPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUduQixNQUFNLHlDQUF5QyxDQUFDO0FBRWpELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBTzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUt2RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBR2hELE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQztBQWFuQixNQUFNLENBQU4sSUFBWSxVQUlYO0FBSkQsV0FBWSxVQUFVO0lBQ3BCLGlDQUFtQixDQUFBO0lBQ25CLGtDQUFvQixDQUFBO0lBQ3BCLGtDQUFvQixDQUFBO0FBQ3RCLENBQUMsRUFKVyxVQUFVLEtBQVYsVUFBVSxRQUlyQjtBQUVELE1BQU0sQ0FBTixJQUFZLGVBVVg7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LGdCQUFnQixFQUFFO1lBQzdCLEtBQUssZ0JBQWdCLENBQUMsU0FBUztnQkFDN0IsV0FBVyxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDM0QsTUFBTTtZQUNSLEtBQUssZ0JBQWdCLENBQUMsTUFBTSxDQUFDO1lBQzdCLEtBQUssZ0JBQWdCLENBQUMsTUFBTTtnQkFDMUIsV0FBVyxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7Z0JBQ3ZELFdBQVcsQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO2dCQUN2RCxNQUFNO1NBQ1Q7UUFFRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDOztBQXJ3RmUsNkNBQXNCLEdBQUcsZUFBZSxDQUFDO0FBQ3pDLDhDQUF1QixHQUFHLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBCYXNlRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4vYmFzZS1lbnRlcnByaXNlJztcclxuaW1wb3J0IHsgQmFzZVN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZUhlbHBlclJvdXRpbmVzIH0gZnJvbSAnLi9oZWxwZXJzJztcclxuaW1wb3J0IHsgVHJhdmVsbGVyIH0gZnJvbSAnLi4vbW9kZWxzL3RyYXZlbGxlci5vYmplY3QnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVmFsdWVEaXNwbGF5IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy92YWx1ZS1kaXNwbGF5JztcclxuaW1wb3J0IHsgRmxpZ2h0RmlsdGVycyB9IGZyb20gJy4uL2ludGVyZmFjZXMvZmxpZ2h0LWZpbHRlcnMuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgU2VsZWN0RmlsdGVyIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zZWxlY3QtZmlsdGVyLmludGVyZmFjZSc7XHJcbmltcG9ydCB7XHJcbiAgQWRkSXRlbVRvQmFza2V0TXV0YXRpb25WYXJpYWJsZXMsXHJcbiAgQmFnZ2FnZUFsbG93YW5jZSxcclxuICBCYXNrZXRJdGVtLFxyXG4gIEN1cnJlbmN5Q29kZSxcclxuICBEZXN0aW5hdGlvbkVudHJ5LFxyXG4gIEZhcmVDb25kaXRpb25FbnRyeSxcclxuICBGYXJlQ29uZGl0aW9ucyxcclxuICBGYXJlVHlwZSxcclxuICBGbGlnaHRDYWJpbkNsYXNzLFxyXG4gIEZsaWdodEl0aW5lcmFyeSxcclxuICBGbGlnaHRKb3VybmV5LFxyXG4gIEZsaWdodFBhc3Nlbmdlck9iamVjdCxcclxuICBGbGlnaHRQYXNzZW5nZXJUeXBlLFxyXG4gIEdyb3VwZWRGaWVsZHNGcmFnbWVudCxcclxuICBHcm91cEZsaWdodHMsXHJcbiAgSW5wdXRGbGlnaHRKb3VybmV5LFxyXG4gIEl0aW5lcmFyeVN1bW1hcnksXHJcbiAgTWF0Y2hpbmdGbGlnaHRzLFxyXG4gIFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyxcclxuICBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyxcclxuICBTZXJ2aWNlVHlwZVxyXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMsXHJcbiAgRmxpZ2h0QWxsUXVvdGVSZXN1bHQsXHJcbiAgRmxpZ2h0RGlyZWN0aW9uRW51bSxcclxuICBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgRmxpZ2h0R3JvdXBzLFxyXG4gIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxyXG4gIEZsaWdodE11bHRpLFxyXG4gIEZsaWdodFF1b3RlUmVzdWx0QXJyYXksXHJcbiAgR3JvdXBlZEZsaWdodHMsXHJcbiAgTWluTWF4LFxyXG4gIE5nYkRhdGVTdHJ1Y3QsXHJcbiAgT0JUQWlybGluZXNEZXRhaWxzLFxyXG4gIE9CVEFpcnBvcnREZXRhaWxzLFxyXG4gIE9CVEZsaWdodENhYmluQ2xhc3MsXHJcbiAgUmVjZW50U2VhcmNoLFxyXG4gIFJlY29yZFJ1bGVBY3Rpb24sXHJcbiAgUnVsZUFjdGlvblN1bW1hcnlJbnRlcmZhY2UsXHJcbiAgUnVsZUxvb2t1cCxcclxuICBTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0XHJcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VGbGlnaHRRdW90ZUZldGNoZXIsXHJcbiAgRmxpZ2h0UXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2ZsaWdodC1xdW90ZS5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBGdWxsVXNlckRldGFpbHMsXHJcbiAgVXNlclNlcnZpY2VJbnRlcmZhY2VcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0l1c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXNlYXJjaC5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBERUZBVUxUX0ZMSUdIVF9GSUxURVJTLFxyXG4gIEZsaWdodERpc3BsYXlUeXBlcyxcclxuICBGbGlnaHRFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlLFxyXG4gIEZsaWdodFRlbXBQYXJhbXNcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0lmbGlnaHQtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBJQ2hlYXBlc3RQcmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hlYXBlc3QtcHJpY2UnO1xyXG5pbXBvcnQgeyBGbGlnaHRTZWFyY2hUeXBlIH0gZnJvbSAnLi9mbGlnaHQtc2VhcmNoLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IElNdWx0aURlc3RpbmF0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mbGlnaHQtbXVsdGktZGVzdGluYXRpb24uaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcclxuICBJbnRlcm5hbEJhc2tldEludGVyZmFjZVxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWVudGVycHJpc2UtYmFza2V0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyByZXN1bHQgfSBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBVc2VyRmF2b3J1cml0ZSB9IGZyb20gJy4vdXNlci1mYXZvdXJpdGUuZW51bSc7XHJcbmltcG9ydCB7XHJcbiAgQXBwbHlKaXRGbGlnaHRSdWxlc1R5cGUsXHJcbiAgQmFzZUFwcGx5Sml0RmxpZ2h0UnVsZXNGZXRjaGVyXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvYXBwbHktaml0LWZsaWdodC1ydWxlcyc7XHJcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEJhc2VNb2RhbE9wZW5lclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RhbC1vcGVuZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IE1vZGFsVHlwZXMgfSBmcm9tICcuL21vZGFsLXR5cGVzLmVudW0nO1xyXG5pbXBvcnQgeyBJRmxpZ2h0U2VhcmNoQXJncyB9IGZyb20gJy4uL2ludGVyZmFjZXMvZmxpZ2h0LXNlYXJjaC1hcmdzLmludGVyZmFjZSc7XHJcblxyXG5jb25zdCBPVVRCT1VORCA9IDA7XHJcbmV4cG9ydCBpbnRlcmZhY2UgQWxsb3dlZENsYXNzIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmxpZ2h0T3BlcmF0b3Ige1xyXG4gIGNvZGU6IHN0cmluZztcclxuICBuYW1lOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEFsbG93ZWRDbGFzc2VzID0gQWxsb3dlZENsYXNzW107XHJcblxyXG5leHBvcnQgZW51bSBUaW1lV2luZG93IHtcclxuICBBbnl0aW1lID0gJ0FueXRpbWUnLFxyXG4gIERlcGFydCA9ICdEZXBhcnQgQnknLFxyXG4gIEFycml2ZSA9ICdBcnJpdmUgQnknXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIEZsaWdodFNvcnRUeXBlcyB7XHJcbiAgQ2hlYXBlc3QgPSAnQ2hlYXBlc3QnLFxyXG4gIE1vc3RFeHBlbnNpdmUgPSAnTW9zdCBFeHBlbnNpdmUnLFxyXG4gIEZhc3Rlc3QgPSAnRmFzdGVzdCcsXHJcbiAgUHJlZmVycmVkID0gJ1ByZWZlcnJlZCcsXHJcbiAgTG93ZXN0RW1pc3Npb25zID0gJ0xvd2VzdCBFbWlzc2lvbnMnLFxyXG4gIERlcGFydHVyZVRpbWUgPSAnRGVwYXJ0dXJlIFRpbWUnLFxyXG4gIEFycml2YWxUaW1lID0gJ0Fycml2YWwgVGltZScsXHJcbiAgUXVpY2tlc3QgPSAnUXVpY2tlc3QnLFxyXG4gIE1vc3REaXJlY3QgPSAnTW9zdCBEaXJlY3QnXHJcbn1cclxuXHJcbmludGVyZmFjZSBGbGlnaHRTZXNzaW9uVHlwZSB7XHJcbiAgcmVzdWx0czogRmxpZ2h0UXVvdGVSZXN1bHRBcnJheTtcclxuICBncm91cGVkOiBHcm91cGVkRmxpZ2h0cztcclxuICBxdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXM7XHJcbn1cclxuXHJcbmludGVyZmFjZSBIaWRlRmxpZ2h0Q2FiaW5DbGFzc0ludGVyZmFjZSB7XHJcbiAgYW55OiBib29sZWFuO1xyXG4gIGJ1c2luZXNzOiBib29sZWFuO1xyXG4gIGVjb25vbXk6IGJvb2xlYW47XHJcbiAgcHJlbWl1bUVjb25vbXk6IGJvb2xlYW47XHJcbiAgZmlyc3Q6IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBGbGlnaHRFbnRlcnByaXNlU2VhcmNoPFxyXG4gICAgRlFfUSBleHRlbmRzIEZsaWdodFF1b3RlRmV0Y2hlclR5cGUsXHJcbiAgICBBSkZfUSBleHRlbmRzIEFwcGx5Sml0RmxpZ2h0UnVsZXNUeXBlXHJcbiAgPlxyXG4gIGV4dGVuZHMgQmFzZUVudGVycHJpc2VTZWFyY2g8XHJcbiAgICBGbGlnaHRUZW1wUGFyYW1zLFxyXG4gICAgRmxpZ2h0QWxsUXVvdGVSZXN1bHQsXHJcbiAgICBGbGlnaHRRdW90ZVJlc3VsdEFycmF5XHJcbiAgPlxyXG4gIGltcGxlbWVudHMgRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZVxyXG57XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9QQVJBTVMgPSAnc2VhcmNoX2ZsaWdodCc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTID0gJ3Jlc3VsdHNfZmxpZ2h0JztcclxuXHJcbiAgcHVibGljIHR5cGU6IFNlcnZpY2VUeXBlID0gU2VydmljZVR5cGUuRmxpZ2h0O1xyXG5cclxuICBhdmFsaWFibGVDbGFzc2VzOiBCZWhhdmlvclN1YmplY3Q8QWxsb3dlZENsYXNzZXM+ID1cclxuICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8QWxsb3dlZENsYXNzZXM+KFtdKTtcclxuICB0aW1lQ3JpdGVyaWFPcHRpb25zOiBCZWhhdmlvclN1YmplY3Q8VGltZVdpbmRvd1tdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XHJcbiAgICBUaW1lV2luZG93W11cclxuICA+KFtdKTtcclxuICBmbGlnaHRPcGVyYXRvcnM6IEJlaGF2aW9yU3ViamVjdDxGbGlnaHRPcGVyYXRvcltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XHJcbiAgICBGbGlnaHRPcGVyYXRvcltdXHJcbiAgPihbXSk7XHJcblxyXG4gIHByaXZhdGUgX25lZ290aWF0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9uZWFyYnlfYWlycG9ydHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfdGltZUFycmF5OiBWYWx1ZURpc3BsYXk8c3RyaW5nPltdO1xyXG4gIHByaXZhdGUgX3NvcnRBcnJheTogVmFsdWVEaXNwbGF5PEZsaWdodFNvcnRUeXBlcz5bXSA9IFtcclxuICAgIHsgZGlzcGxheTogJ0NoZWFwZXN0IEZpcnN0JywgdmFsdWU6IEZsaWdodFNvcnRUeXBlcy5DaGVhcGVzdCB9LFxyXG4gICAge1xyXG4gICAgICBkaXNwbGF5OiAnTW9zdCBFeHBlbnNpdmUgRmlyc3QnLFxyXG4gICAgICB2YWx1ZTogRmxpZ2h0U29ydFR5cGVzLk1vc3RFeHBlbnNpdmVcclxuICAgIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdGYXN0ZXN0IEZpcnN0JywgdmFsdWU6IEZsaWdodFNvcnRUeXBlcy5GYXN0ZXN0IH0sXHJcbiAgICB7IGRpc3BsYXk6ICdQcmVmZXJyZWQgRmFyZXMgRmlyc3QnLCB2YWx1ZTogRmxpZ2h0U29ydFR5cGVzLlByZWZlcnJlZCB9LFxyXG4gICAge1xyXG4gICAgICBkaXNwbGF5OiAnTG93ZXN0IENvMiBFbWlzc2lvbnMgRmlyc3QnLFxyXG4gICAgICB2YWx1ZTogRmxpZ2h0U29ydFR5cGVzLkxvd2VzdEVtaXNzaW9uc1xyXG4gICAgfVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgX3NvcnRJdGluYXJ5Um91dGluZXM6IFJlY29yZDxcclxuICAgIEZsaWdodFNvcnRUeXBlcyxcclxuICAgIChhOiBGbGlnaHRJdGluZXJhcnksIGI6IEZsaWdodEl0aW5lcmFyeSkgPT4gbnVtYmVyXHJcbiAgPiA9IHtcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuQ2hlYXBlc3RdOiAoYTogRmxpZ2h0SXRpbmVyYXJ5LCBiOiBGbGlnaHRJdGluZXJhcnkpID0+IHtcclxuICAgICAgcmV0dXJuIGEudG90YWwucHJpY2UgLSBiLnRvdGFsLnByaWNlO1xyXG4gICAgfSxcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuTW9zdEV4cGVuc2l2ZV06IChcclxuICAgICAgYTogRmxpZ2h0SXRpbmVyYXJ5LFxyXG4gICAgICBiOiBGbGlnaHRJdGluZXJhcnlcclxuICAgICkgPT4ge1xyXG4gICAgICByZXR1cm4gYi50b3RhbC5wcmljZSAtIGEudG90YWwucHJpY2U7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5GYXN0ZXN0XTogKGE6IEZsaWdodEl0aW5lcmFyeSwgYjogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgYS5vdXRib3VuZFRvdGFsRHVyYXRpb24gK1xyXG4gICAgICAgIChhLmluYm91bmRUb3RhbER1cmF0aW9uID8gYS5pbmJvdW5kVG90YWxEdXJhdGlvbiA6IDApIC1cclxuICAgICAgICAoYi5vdXRib3VuZFRvdGFsRHVyYXRpb24gK1xyXG4gICAgICAgICAgKGIuaW5ib3VuZFRvdGFsRHVyYXRpb24gPyBiLmluYm91bmRUb3RhbER1cmF0aW9uIDogMCkpXHJcbiAgICAgICk7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5QcmVmZXJyZWRdOiAoXHJcbiAgICAgIGE6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxyXG4gICAgICBiOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9uc1xyXG4gICAgKSA9PiB7XHJcbiAgICAgIHJldHVybiBhLnByZWZlcnJlZCAtIGIucHJlZmVycmVkO1xyXG4gICAgfSxcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuTG93ZXN0RW1pc3Npb25zXTogKFxyXG4gICAgICBhOiBGbGlnaHRJdGluZXJhcnksXHJcbiAgICAgIGI6IEZsaWdodEl0aW5lcmFyeVxyXG4gICAgKSA9PiB7XHJcbiAgICAgIHJldHVybiBhLmNvMlBlckl0ZW0gLSBiLmNvMlBlckl0ZW07XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5EZXBhcnR1cmVUaW1lXTogKFxyXG4gICAgICBhOiBGbGlnaHRJdGluZXJhcnksXHJcbiAgICAgIGI6IEZsaWdodEl0aW5lcmFyeVxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGNvbnN0IGFUaW1lID0gbW9tZW50KGEub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKTtcclxuICAgICAgY29uc3QgYlRpbWUgPSBtb21lbnQoYi5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpO1xyXG4gICAgICBpZiAoYVRpbWUuaXNCZWZvcmUoYlRpbWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhVGltZS5pc1NhbWUoYlRpbWUpID8gMCA6IDE7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5BcnJpdmFsVGltZV06IChhOiBGbGlnaHRJdGluZXJhcnksIGI6IEZsaWdodEl0aW5lcmFyeSkgPT4ge1xyXG4gICAgICBjb25zdCBhVGltZSA9IG1vbWVudChhLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZUFycml2aW5nKTtcclxuICAgICAgY29uc3QgYlRpbWUgPSBtb21lbnQoYi5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVBcnJpdmluZyk7XHJcbiAgICAgIGlmIChhVGltZS5pc0JlZm9yZShiVGltZSkpIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGFUaW1lLmlzU2FtZShiVGltZSkgPyAwIDogMTtcclxuICAgIH0sXHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLlF1aWNrZXN0XTogKGE6IEZsaWdodEl0aW5lcmFyeSwgYjogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgYS5vdXRib3VuZFRvdGFsRHVyYXRpb24gK1xyXG4gICAgICAgIChhLmluYm91bmRUb3RhbER1cmF0aW9uID8gYS5pbmJvdW5kVG90YWxEdXJhdGlvbiA6IDApIC1cclxuICAgICAgICAoYi5vdXRib3VuZFRvdGFsRHVyYXRpb24gK1xyXG4gICAgICAgICAgKGIuaW5ib3VuZFRvdGFsRHVyYXRpb24gPyBiLmluYm91bmRUb3RhbER1cmF0aW9uIDogMCkpXHJcbiAgICAgICk7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5Nb3N0RGlyZWN0XTogKGE6IEZsaWdodEl0aW5lcmFyeSwgYjogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgYS5vdXRib3VuZEZsaWdodHMubGVuZ3RoICtcclxuICAgICAgICAoYS5vdXRib3VuZEZsaWdodHMgPyBhLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggOiAwKSAtXHJcbiAgICAgICAgKGIub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCArXHJcbiAgICAgICAgICAoYi5vdXRib3VuZEZsaWdodHMgPyBiLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggOiAwKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBwcml2YXRlIF9zb3J0R3JvdXBlZFJvdXRpbmVzOiBSZWNvcmQ8XHJcbiAgICBGbGlnaHRTb3J0VHlwZXMsXHJcbiAgICAoYTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0LCBiOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQpID0+IG51bWJlclxyXG4gID4gPSB7XHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLkNoZWFwZXN0XTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYS5taW5QcmljZSAtIGIubWluUHJpY2U7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5Nb3N0RXhwZW5zaXZlXTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYi5taW5QcmljZSAtIGEubWF4UHJpY2U7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5GYXN0ZXN0XTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYS5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmRcclxuICAgICAgICA/IGEub3V0Ym91bmRUb3RhbER1cmF0aW9uIC0gYi5vdXRib3VuZFRvdGFsRHVyYXRpb25cclxuICAgICAgICA6IGEuaW5ib3VuZFRvdGFsRHVyYXRpb24gLSBiLmluYm91bmRUb3RhbER1cmF0aW9uO1xyXG4gICAgfSxcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuUHJlZmVycmVkXTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gKGEucHJlZmVycmVkID8gMSA6IDApIC0gKGIucHJlZmVycmVkID8gMSA6IDApO1xyXG4gICAgfSxcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuTG93ZXN0RW1pc3Npb25zXTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYS5jbzJQZXJJdGVtIC0gYi5jbzJQZXJJdGVtO1xyXG4gICAgfSxcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuRGVwYXJ0dXJlVGltZV06IChcclxuICAgICAgYTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0LFxyXG4gICAgICBiOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHRcclxuICAgICkgPT4ge1xyXG4gICAgICBpZiAoYS5kaXJlY3Rpb24gIT09IGIuZGlyZWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGEuZGlyZWN0aW9uIC0gYi5kaXJlY3Rpb247XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgYVRpbWUgPSBtb21lbnQoYS5kZXBhcnREYXRlVGltZSk7XHJcbiAgICAgIGNvbnN0IGJUaW1lID0gbW9tZW50KGIuZGVwYXJ0RGF0ZVRpbWUpO1xyXG4gICAgICBpZiAoYVRpbWUuaXNCZWZvcmUoYlRpbWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhVGltZS5pc1NhbWUoYlRpbWUpID8gMCA6IDE7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5BcnJpdmFsVGltZV06IChcclxuICAgICAgYTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0LFxyXG4gICAgICBiOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHRcclxuICAgICkgPT4ge1xyXG4gICAgICBpZiAoYS5kaXJlY3Rpb24gIT09IGIuZGlyZWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGEuZGlyZWN0aW9uIC0gYi5kaXJlY3Rpb247XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgYVRpbWUgPSBtb21lbnQoYS5hcnJpdmFsRGF0ZVRpbWUpO1xyXG4gICAgICBjb25zdCBiVGltZSA9IG1vbWVudChiLmFycml2YWxEYXRlVGltZSk7XHJcbiAgICAgIGlmIChhVGltZS5pc0JlZm9yZShiVGltZSkpIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGFUaW1lLmlzU2FtZShiVGltZSkgPyAwIDogMTtcclxuICAgIH0sXHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLlF1aWNrZXN0XTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYS5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmRcclxuICAgICAgICA/IGEub3V0Ym91bmRUb3RhbER1cmF0aW9uIC0gYi5vdXRib3VuZFRvdGFsRHVyYXRpb25cclxuICAgICAgICA6IChhLmluYm91bmRUb3RhbER1cmF0aW9uID8gYS5pbmJvdW5kVG90YWxEdXJhdGlvbiA6IDApIC1cclxuICAgICAgICAgICAgKGIuaW5ib3VuZFRvdGFsRHVyYXRpb24gPyBiLmluYm91bmRUb3RhbER1cmF0aW9uIDogMCk7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5Nb3N0RGlyZWN0XTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYS5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmRcclxuICAgICAgICA/IGEub3V0bGVncy5sZW5ndGggLSBiLm91dGxlZ3MubGVuZ3RoXHJcbiAgICAgICAgOiAoYS5pbmxlZ3MgfHwgW10pLmxlbmd0aCAtIChiLmlubGVncyB8fCBbXSkubGVuZ3RoO1xyXG4gICAgfVxyXG4gIH07XHJcbiAgcHJpdmF0ZSBfZmFyZVR5cGVBcnJheTogVmFsdWVEaXNwbGF5PEZhcmVUeXBlPltdID0gW1xyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuRmxleGlibGUsIGRpc3BsYXk6ICdGbGV4aWJsZScgfSxcclxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLkxlaXN1cmUsIGRpc3BsYXk6ICdMZWlzdXJlJyB9LFxyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuTG93ZXN0LCBkaXNwbGF5OiAnTG93ZXN0JyB9LFxyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuTmVnb3RpYXRlZCwgZGlzcGxheTogJ05lZ290aWF0ZWQnIH0sXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5Ob25OZWdvdGlhdGVkLCBkaXNwbGF5OiAnTm9uLU5lZ290aWF0ZWQnIH0sXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5SZXF1ZXN0RmFyZVJ1bGVzLCBkaXNwbGF5OiAnUmVxdWVzdCBGYXJlIFJ1bGVzJyB9LFxyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuU2VsZWN0QW5kUHJvLCBkaXNwbGF5OiAnU2VsZWN0ICYgUHJvJyB9XHJcbiAgXTtcclxuXHJcbiAgcHVibGljIG1pbmltdW1PdXRCb3VuZERhdGUgPSB7XHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXHJcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBtaW5pbXVtSW5Cb3VuZERhdGUgPSB7XHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXHJcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxyXG4gIH07XHJcbiAgcHJpdmF0ZSBfb3V0RGF0ZTogTmdiRGF0ZVN0cnVjdDtcclxuICBwcml2YXRlIF9vdXRUaW1lOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfaW5EYXRlOiBOZ2JEYXRlU3RydWN0O1xyXG4gIHByaXZhdGUgX2luVGltZTogc3RyaW5nO1xyXG4gIHByaXZhdGUgX2Rlc3RpbmF0aW9uQWlycG9ydDogYW55O1xyXG4gIHByaXZhdGUgX29yaWdpbkFpcnBvcnQ6IGFueTtcclxuICBwcml2YXRlIF9wYXNzZW5nZXJzOiBhbnk7XHJcbiAgLy8gcHJpdmF0ZSBncm91cGVkT2JqZWN0OiBGbGlnaHRJdGluZXJhcnlXaXRoU2VsZWN0ZWRbXTtcclxuICBwcm90ZWN0ZWQgcmVzdWx0UXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzO1xyXG4gIHByb3RlY3RlZCBfZ3JvdXBlZDogR3JvdXBlZEZsaWdodHMgPSBudWxsO1xyXG4gIHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdID0gbnVsbDtcclxuICBwcm90ZWN0ZWQgcmVzdWx0c1Nlc3Npb25OYW1lID0gRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuICBwcm90ZWN0ZWQgbXVsdGlSZXN1bHRzU2Vzc2lvbk5hbWUgPVxyXG4gICAgRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuICBzZWxlY3RlZEdyb3VwRmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucztcclxuICBwcml2YXRlIF9zaG93SG90ZWxGb3JtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfaG90ZWxTZWFyY2hSZXF1ZXN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBmaWx0ZXJzOiBCZWhhdmlvclN1YmplY3Q8RmxpZ2h0RmlsdGVycz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFxyXG4gICAgREVGQVVMVF9GTElHSFRfRklMVEVSU1xyXG4gICk7XHJcbiAgZHVyYWxTaW5nbGVGaWx0ZXI6IEJlaGF2aW9yU3ViamVjdDxGbGlnaHRGaWx0ZXJzPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoXHJcbiAgICBERUZBVUxUX0ZMSUdIVF9GSUxURVJTXHJcbiAgKTtcclxuXHJcbiAgY2hvb3NlbkRpc3BsYXlUeXBlOiBCZWhhdmlvclN1YmplY3Q8RmxpZ2h0RGlzcGxheVR5cGVzPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoXHJcbiAgICBGbGlnaHREaXNwbGF5VHlwZXMucmV0dXJuc1xyXG4gICk7XHJcbiAgY3VycmVudFNvcnQ6IEZsaWdodFNvcnRUeXBlcztcclxuICBjdXJyZW50RmlsdGVyczogRmxpZ2h0RmlsdGVycztcclxuICBzZWxlY3RlZEdyb3VwSWQ6IG51bWJlcjtcclxuICBwcml2YXRlIF9ydWxlQWN0aW9uU3VtbWFyeTogUnVsZUFjdGlvblN1bW1hcnlJbnRlcmZhY2U7XHJcbiAgbXVsdGk6IEZsaWdodE11bHRpW107XHJcbiAgcHVibGljIGdldCB0aW1lQXJyYXkoKSB7XHJcbiAgICB0aGlzLl90aW1lQXJyYXkgPVxyXG4gICAgICB0aGlzLl90aW1lQXJyYXkgfHxcclxuICAgICAgQXJyYXkoOTYpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2YWx1ZTpcclxuICAgICAgICAgICAgICBNYXRoLmZsb29yKGluZGV4IC8gNClcclxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAucGFkU3RhcnQoMiwgJzAnKSArXHJcbiAgICAgICAgICAgICAgJzonICtcclxuICAgICAgICAgICAgICAoKGluZGV4ICUgNCkgKiAxNSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpLFxyXG4gICAgICAgICAgICBkaXNwbGF5OlxyXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyA0KVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcclxuICAgICAgICAgICAgICAnOicgK1xyXG4gICAgICAgICAgICAgICgoaW5kZXggJSA0KSAqIDE1KS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5fdGltZUFycmF5O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBwcmVmZXJyZWRDYXJyaWVycygpOiBPQlRBaXJsaW5lc0RldGFpbHNbXSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBwcmVmZXJyZWRDYXJyaWVycyh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzW10pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVycyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBvcGVyYXRvcjEoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMF07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG9wZXJhdG9yMSh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMF0gPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBvcGVyYXRvcjIoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMV07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG9wZXJhdG9yMih2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMV0gPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBvcGVyYXRvcjMoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMl07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG9wZXJhdG9yMyh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMl0gPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBvcGVyYXRvcjQoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbM107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG9wZXJhdG9yNCh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbM10gPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX21pbkRhdGU6IE5nYkRhdGVTdHJ1Y3Q7XHJcbiAgcHVibGljIGdldCBtaW5EYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgdGhpcy5fbWluRGF0ZSA9IHRoaXMuX21pbkRhdGUgfHwgdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG1vbWVudCgpKTtcclxuICAgIHJldHVybiB0aGlzLl9taW5EYXRlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhZHVsdHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBhZHVsdHModmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IE51bWJlcih2YWx1ZSk7XHJcbiAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlcnMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2hpbGRyZW4oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGNoaWxkcmVuKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IE51bWJlcih2YWx1ZSk7XHJcbiAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlcnMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZGVwYXJ0TG9jYXRpb24oKTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5kZXBhcnRMb2NhdGlvbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZGVwYXJ0TG9jYXRpb24odmFsdWU6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZGVwYXJ0TG9jYXRpb24gPSB2YWx1ZTtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRoaXMuX29yaWdpbkFpcnBvcnQgPSAnJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgdmFsdWUuZ2F0ZXdheSkge1xyXG4gICAgICB0aGlzLl9vcmlnaW5BaXJwb3J0ID0gdmFsdWUuZ2F0ZXdheTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX29yaWdpbkFpcnBvcnQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBxdWVyeU9yaWdpbkFpcG9ydCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX29yaWdpbkFpcnBvcnQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHF1ZXJ5RGVzdGluYXRpb25BaXBvcnQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRlcGFydERhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0RGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZGVwYXJ0RGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fb3V0RGF0ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQoXHJcbiAgICAgIHRoaXMuX291dERhdGUsXHJcbiAgICAgIHRoaXMuX291dFRpbWVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRlcGFydFRpbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9vdXRUaW1lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBkZXBhcnRUaW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX291dFRpbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMub3V0Qm91bmREYXRlID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KFxyXG4gICAgICB0aGlzLl9vdXREYXRlLFxyXG4gICAgICB0aGlzLl9vdXRUaW1lXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBvdXRCb3VuZERhdGUoKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgb3V0Qm91bmREYXRlKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlID0gdmFsdWUuaXNWYWxpZCgpID8gdmFsdWUgOiBudWxsO1xyXG4gICAgdGhpcy5taW5pbXVtSW5Cb3VuZERhdGUgPSB7XHJcbiAgICAgIHllYXI6IHZhbHVlLnllYXIoKSxcclxuICAgICAgbW9udGg6IHZhbHVlLm1vbnRoKCkgKyAxLFxyXG4gICAgICBkYXk6IHZhbHVlLmRhdGUoKVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUgJiZcclxuICAgICAgdGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlICYmXHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUuaXNBZnRlcih0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGUpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IG1vbWVudCh0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlKS5hZGQoMSwgJ2RheScpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fb3V0RGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZSh2YWx1ZSk7XHJcbiAgICB0aGlzLl9vdXRUaW1lID0gdGhpcy5oZWxwZXJzLmZvcm1hdFRpbWVDb2xvbih2YWx1ZSk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHJldHVybkRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5EYXRlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCByZXR1cm5EYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XHJcbiAgICB0aGlzLl9pbkRhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQodGhpcy5faW5EYXRlLCB0aGlzLl9pblRpbWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhcnJpdmVUaW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5UaW1lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBhcnJpdmVUaW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2luVGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudCh0aGlzLl9pbkRhdGUsIHRoaXMuX2luVGltZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGluYm91bmREYXRlKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgaW5ib3VuZERhdGUodmFsdWU6IG1vbWVudC5Nb21lbnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSA9IHZhbHVlLmlzVmFsaWQoKSA/IHZhbHVlIDogbnVsbDtcclxuICAgIHRoaXMuX2luRGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZSh2YWx1ZSk7XHJcbiAgICB0aGlzLl9pblRpbWUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0VGltZUNvbG9uKHZhbHVlKTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYXJyaXZlTG9jYXRpb24oKTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5hcnJpdmVMb2NhdGlvbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgYXJyaXZlTG9jYXRpb24odmFsdWU6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuYXJyaXZlTG9jYXRpb24gPSB2YWx1ZTtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9ICcnO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB2YWx1ZS5nYXRld2F5KSB7XHJcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9IHZhbHVlLmdhdGV3YXk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNhYmluQ2xhc3MoKTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jYWJpbkNsYXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNhYmluQ2xhc3ModmFsdWU6IEZsaWdodENhYmluQ2xhc3MgfCBudWxsKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHJldHVybkNhYmluQ2xhc3MoKTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IHJldHVybkNhYmluQ2xhc3ModmFsdWU6IEZsaWdodENhYmluQ2xhc3MgfCBudWxsKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNob3NlblNlYXJjaFR5cGUoKTogRmxpZ2h0U2VhcmNoVHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGU7XHJcbiAgfVxyXG5cclxuICBzZXQgY2hvc2VuU2VhcmNoVHlwZSh0eXBlOiBGbGlnaHRTZWFyY2hUeXBlKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9IHR5cGU7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNSZXR1cm4oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG91dFRpbWVDcml0ZXJpYSgpOiBUaW1lV2luZG93IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUNyaXRlcmlhO1xyXG4gIH1cclxuXHJcbiAgc2V0IG91dFRpbWVDcml0ZXJpYSh2YWx1ZTogVGltZVdpbmRvdykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm91dFRpbWVDcml0ZXJpYSA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGluVGltZUNyaXRlcmlhKCk6IFRpbWVXaW5kb3cge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYTtcclxuICB9XHJcblxyXG4gIHNldCBpblRpbWVDcml0ZXJpYSh2YWx1ZTogVGltZVdpbmRvdykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmluVGltZUNyaXRlcmlhID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG4gIGdldCBtYXhDb25uZWN0aW9ucygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5tYXhDb25uZWN0aW9ucztcclxuICB9XHJcblxyXG4gIHNldCBtYXhDb25uZWN0aW9ucyh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMubWF4Q29ubmVjdGlvbnMgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX211bHRpRGVzdGluYXRpb246IERlc3RpbmF0aW9uRW50cnlbXSA9IFtdO1xyXG4gIGdldCBtdWx0aURlc3RpbmF0aW9uKCk6IElNdWx0aURlc3RpbmF0aW9uW10ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2V0IG11bHRpRGVzdGluYXRpb24odmFsdWVBcnJheTogSU11bHRpRGVzdGluYXRpb25bXSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm11bHRpRGVzdGluYXRpb24gPSB2YWx1ZUFycmF5O1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzaG93SG90ZWxGb3JtKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Nob3dIb3RlbEZvcm07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHNob3dIb3RlbEZvcm0obmV3VmFsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9zaG93SG90ZWxGb3JtID0gbmV3VmFsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBob3RlbFNlYXJjaFJlcXVlc3RlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9ob3RlbFNlYXJjaFJlcXVlc3RlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgaG90ZWxTZWFyY2hSZXF1ZXN0ZWQobmV3VmFsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9ob3RlbFNlYXJjaFJlcXVlc3RlZCA9IG5ld1ZhbDtcclxuICB9XHJcblxyXG4gIHNldE11bHRpRGVzdGluYXRpb25RdWVyeShtdWx0aURlc3RpbmF0aW9uOiBJTXVsdGlEZXN0aW5hdGlvbltdKSB7XHJcbiAgICBjb25zdCBuZXdNdWx0aURlc3RpbmF0aW9uID0gdGhpcy5oZWxwZXJzLmNsb25lKG11bHRpRGVzdGluYXRpb24pO1xyXG4gICAgcmV0dXJuIG5ld011bHRpRGVzdGluYXRpb24ucmVkdWNlKFxyXG4gICAgICAoZGVzdGluYXRpb25BcnJheTogRGVzdGluYXRpb25FbnRyeVtdLCBpdGVtOiBJTXVsdGlEZXN0aW5hdGlvbikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uT2JqZWN0ID0ge30gYXMgRGVzdGluYXRpb25FbnRyeTtcclxuICAgICAgICBkZXN0aW5hdGlvbk9iamVjdC5vcmlnID0gaXRlbS5vcmlnLmdhdGV3YXk7XHJcbiAgICAgICAgZGVzdGluYXRpb25PYmplY3QuZGVzdCA9IGl0ZW0uZGVzdC5nYXRld2F5O1xyXG4gICAgICAgIGRlc3RpbmF0aW9uT2JqZWN0LmRhdGUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0SXNvRGF0ZShpdGVtLmRhdGUpO1xyXG4gICAgICAgIGRlc3RpbmF0aW9uQXJyYXkucHVzaChkZXN0aW5hdGlvbk9iamVjdCk7XHJcbiAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uQXJyYXk7XHJcbiAgICAgIH0sXHJcbiAgICAgIFtdIGFzIERlc3RpbmF0aW9uRW50cnlbXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIGdldCBvbmx5XHJcbiAgZ2V0IHNvcnREcm9wZG93blZhbHVlcygpOiBWYWx1ZURpc3BsYXk8RmxpZ2h0U29ydFR5cGVzPltdIHtcclxuICAgIHJldHVybiB0aGlzLl9zb3J0QXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXQgZmFyZVR5cGVzVmFsdWVzKCk6IFZhbHVlRGlzcGxheTxGYXJlVHlwZT5bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmFyZVR5cGVBcnJheTtcclxuICB9XHJcblxyXG4gIGdldCBmYXJlVHlwZSgpOiBGYXJlVHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmZhcmVUeXBlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGZhcmVUeXBlKHZhbHVlOiBGYXJlVHlwZSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmZhcmVUeXBlID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgbmVnb3RpYXRlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9uZWdvdGlhdGVkO1xyXG4gIH1cclxuXHJcbiAgc2V0IG5lZ290aWF0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX25lZ290aWF0ZWQgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBpbmNsdWRlTmVhcmJ5QWlycG9ydHMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmluY2x1ZGVOZWFyYnlBaXJwb3J0cztcclxuICB9XHJcblxyXG4gIHNldCBpbmNsdWRlTmVhcmJ5QWlycG9ydHModmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHMgPSB2YWx1ZTtcclxuICB9XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGZsaWdodGZldGNoZXI6IEJhc2VGbGlnaHRRdW90ZUZldGNoZXI8RlFfUT4sXHJcbiAgICBoZWxwZXJzOiBCYXNlSGVscGVyUm91dGluZXMsXHJcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZUludGVyZmFjZSxcclxuICAgIHByaXZhdGUgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBzdG9yYWdlU2VydmljZTogQmFzZVN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgc2VhcmNoU2VydmljZTogRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBwcml2YXRlIGFwcGx5RmxpZ2h0UnVsZXM6IEJhc2VBcHBseUppdEZsaWdodFJ1bGVzRmV0Y2hlcjxBSkZfUT4sXHJcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogQmFzZU1vZGFsT3BlbmVyU2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoc3RvcmFnZVNlcnZpY2UsIGhlbHBlcnMsIHNlYXJjaFNlcnZpY2UpO1xyXG5cclxuICAgIGNvbnN0IGRhdGE6IHtcclxuICAgICAgdGVtcFBhcmFtczogRmxpZ2h0VGVtcFBhcmFtcztcclxuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiBGbGlnaHRUZW1wUGFyYW1zO1xyXG4gICAgfSA9IHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtKFxyXG4gICAgICBGbGlnaHRFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVNcclxuICAgICkgfHwge1xyXG4gICAgICB0ZW1wUGFyYW1zOiB7fSBhcyBGbGlnaHRUZW1wUGFyYW1zLFxyXG4gICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHt9IGFzIEZsaWdodFRlbXBQYXJhbXNcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgcXVlcnkgPSBzZWFyY2hTZXJ2aWNlLm1ha2VGbGlnaHRRdWVyeShkYXRhLnRlbXBQYXJhbXMpO1xyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHF1ZXJ5KTtcclxuICAgIHRoaXMuX29yaWdpbmFsVXNlclNlYXJjaCA9IGRhdGEub3JpZ2luYWxVc2VyU2VhcmNoO1xyXG4gICAgaWYgKHNlYXJjaFNlcnZpY2Uuc2hvdWxkQWRkVHJhdmVsbGVyU3Vic2NyaXB0aW9uKCkpIHtcclxuICAgICAgc2VhcmNoU2VydmljZS50cmF2ZWxsZXJJbmZvcm1hdGlvbi5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlcnMgPSB0cmF2ZWxsZXJzO1xyXG4gICAgICAgICAgY29uc3Qgc3BsaXRUcmF2ZWxsZXJzID0gdGhpcy5oZWxwZXJzLnNlbGVjdGVkVHJhdmVsbGVycyhcclxuICAgICAgICAgICAgdHJhdmVsbGVycyxcclxuICAgICAgICAgICAgU2VydmljZVR5cGUuRmxpZ2h0XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IHNwbGl0VHJhdmVsbGVycy5hZHVsdHMubGVuZ3RoO1xyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuID0gc3BsaXRUcmF2ZWxsZXJzLmNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICAgIC8vIHRoaXMudGVtcFBhcmFtcy5pbmZhbnRzID0gc3BsaXRUcmF2ZWxsZXJzLmluZmFudHMubGVuZ3RoO1xyXG5cclxuICAgICAgICAgIHRoaXMudXBkYXRlVHJhdmVsbGVycygpO1xyXG4gICAgICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB1c2VyU2VydmljZS5jaGFuZ2VVc2VyLnN1YnNjcmliZSgoX3VzZXI6IEZ1bGxVc2VyRGV0YWlscykgPT4ge1xyXG4gICAgICB0aGlzLnRpbWVDcml0ZXJpYU9wdGlvbnMubmV4dChbXHJcbiAgICAgICAgVGltZVdpbmRvdy5Bbnl0aW1lLFxyXG4gICAgICAgIFRpbWVXaW5kb3cuQXJyaXZlLFxyXG4gICAgICAgIFRpbWVXaW5kb3cuRGVwYXJ0XHJcbiAgICAgIF0pOyAvLyBUT0RPIHVwZGF0ZSB3aXRoIGFueSBVRnNcclxuICAgICAgdGhpcy5mbGlnaHRPcGVyYXRvcnMubmV4dChbeyBjb2RlOiAnQkEnLCBuYW1lOiAnQnJpdGlzaCBBaXJ3YXlzJyB9XSk7IC8vIEZldGNoIHRoZXNlIGZyb20gREJcclxuICAgICAgdGhpcy51cGRhdGVBdmFsaWFibGVDbGFzc2VzKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlcnMoKTtcclxuXHJcbiAgICB0aGlzLm5lZ290aWF0ZWQgPVxyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMuZmFyZVR5cGUgPT09IEZhcmVUeXBlLk5lZ290aWF0ZWQgPyB0cnVlIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcHJvY2Vzc1Jlc3VsdHMoXHJcbiAgICByZXN1bHRzOiBGbGlnaHRBbGxRdW90ZVJlc3VsdFxyXG4gICk6IEZsaWdodFF1b3RlUmVzdWx0QXJyYXkge1xyXG4gICAgaWYgKCFyZXN1bHRzKSB7XHJcbiAgICAgIHRoaXMuX2dyb3VwZWQgPSBbXTtcclxuICAgICAgdGhpcy5tdWx0aSA9IFtdO1xyXG4gICAgICB0aGlzLnJlc3VsdFF1ZXJ5ID0gbnVsbDtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZ3JvdXBlZCA9IHJlc3VsdHMuZ3JvdXBlZCB8fCBbXTtcclxuICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5ID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAge30sXHJcbiAgICAgIHtcclxuICAgICAgICBqb3VybmV5V2hlblNlbGVjdGVkOiB7fSxcclxuICAgICAgICBkdWFsU2luZ2xlV2hlblNlbGVjdGVkOiB7fSxcclxuICAgICAgICB3aGVuU2VsZWN0ZWRBbG9uZToge31cclxuICAgICAgfSxcclxuICAgICAgcmVzdWx0cy5ydWxlQWN0aW9uU3VtbWFyeVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnJlc3VsdFF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xyXG4gICAgdGhpcy5tdWx0aSA9IHJlc3VsdHMubXVsdGk7XHJcbiAgICB0aGlzLnNldEZsaWdodERpc3BsYXlUeXBlKEZsaWdodERpc3BsYXlUeXBlcy5yZXR1cm5zKTtcclxuICAgIHRoaXMuY3VycmVudEZpbHRlcnMgPSB0aGlzLmhlbHBlcnMuY3JlYXRlRmxpZ2h0RmlsdGVycyhcclxuICAgICAgcmVzdWx0cy5qb3VybmV5cyxcclxuICAgICAgREVGQVVMVF9GTElHSFRfRklMVEVSU1xyXG4gICAgKTtcclxuICAgIHRoaXMuZmlsdGVycy5uZXh0KHRoaXMuY3VycmVudEZpbHRlcnMpO1xyXG5cclxuICAgIGRlbGV0ZSB0aGlzLnJlc3VsdFF1ZXJ5LndpdGhHcm91cGVkO1xyXG4gICAgY29uc3QgZHVhbFNpbmdsZXMgPSByZXN1bHRzLm11bHRpLnJlZHVjZShcclxuICAgICAgKFxyXG4gICAgICAgIHByZXZpb3VzSXRlbXM6IHtcclxuICAgICAgICAgIG91dGJvdW5kOiBSZWNvcmQ8bnVtYmVyLCBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucz47XHJcbiAgICAgICAgICBpbmJvdW5kOiBSZWNvcmQ8bnVtYmVyLCBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucz47XHJcbiAgICAgICAgfSxcclxuICAgICAgICBuZXh0SXRlbTogSXRpbmVyYXJ5U3VtbWFyeVxyXG4gICAgICApID0+IHtcclxuICAgICAgICBwcmV2aW91c0l0ZW1zW25leHRJdGVtLm9yZGVyID09PSBPVVRCT1VORCA/ICdvdXRib3VuZCcgOiAnaW5ib3VuZCddID1cclxuICAgICAgICAgIG5leHRJdGVtLnJlc3VsdHMucmVkdWNlKFxyXG4gICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgYWNjdW06IFJlY29yZDxudW1iZXIsIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zPixcclxuICAgICAgICAgICAgICBmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zXHJcbiAgICAgICAgICAgICk6IFJlY29yZDxudW1iZXIsIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zPiA9PiB7XHJcbiAgICAgICAgICAgICAgYWNjdW1bZmxpZ2h0LnVpZF0gPSBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIGNhblNlbGVjdDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGZsaWdodFxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBwcmV2aW91c0l0ZW1zW25leHRJdGVtLm9yZGVyID09PSBPVVRCT1VORCA/ICdvdXRib3VuZCcgOiAnaW5ib3VuZCddXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBwcmV2aW91c0l0ZW1zO1xyXG4gICAgICB9LFxyXG4gICAgICB7IG91dGJvdW5kOiB7fSwgaW5ib3VuZDoge30gfVxyXG4gICAgKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKGR1YWxTaW5nbGVzKTtcclxuICAgIGNvbnN0IGR1YWxJbmJvdW5kRmlsdGVycyA9IHRoaXMuaGVscGVycy5jcmVhdGVGbGlnaHRGaWx0ZXJzKFxyXG4gICAgICBPYmplY3QudmFsdWVzKGR1YWxTaW5nbGVzLmluYm91bmQpLFxyXG4gICAgICBERUZBVUxUX0ZMSUdIVF9GSUxURVJTXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuZHVyYWxTaW5nbGVGaWx0ZXIubmV4dChcclxuICAgICAgdGhpcy5oZWxwZXJzLmNyZWF0ZUZsaWdodEZpbHRlcnMoT2JqZWN0LnZhbHVlcyhkdWFsU2luZ2xlcy5vdXRib3VuZCksIHtcclxuICAgICAgICAuLi5ERUZBVUxUX0ZMSUdIVF9GSUxURVJTLFxyXG4gICAgICAgIGFycml2YWxSZXR1cm5BaXJwb3J0OiBkdWFsSW5ib3VuZEZpbHRlcnMuYXJyaXZhbEFpcnBvcnQsXHJcbiAgICAgICAgZGVwYXR1cmVSZXR1cm5BaXJwb3J0OiBkdWFsSW5ib3VuZEZpbHRlcnMuZGVwYXR1cmVBaXJwb3J0LFxyXG4gICAgICAgIHJldHVybkFycml2YWxUaW1lOiBkdWFsSW5ib3VuZEZpbHRlcnMuYXJyaXZhbFRpbWUsXHJcbiAgICAgICAgcmV0dXJuRHVyYXRpb246IGR1YWxJbmJvdW5kRmlsdGVycy5kdXJhdGlvbixcclxuICAgICAgICByZXR1cm5EZXBhcnR1cmVUaW1lOiBkdWFsSW5ib3VuZEZpbHRlcnMuZGVwYXJ0dXJlVGltZVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIGlmIChyZXN1bHRzICYmIHRoaXMuc2VhcmNoU2VydmljZS5pc0ZsaWdodHNHcm91cGVkKCkpIHtcclxuICAgICAgY29uc3QgcmV0dXJucyA9IChcclxuICAgICAgICAocmVzdWx0cy5qb3VybmV5cyBhcyB1bmtub3duIGFzIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zW10pIHx8IFtdXHJcbiAgICAgICkucmVkdWNlKFxyXG4gICAgICAgIChcclxuICAgICAgICAgIGFjY3VtOiBSZWNvcmQ8bnVtYmVyLCBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucz4sXHJcbiAgICAgICAgICBmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zXHJcbiAgICAgICAgKTogUmVjb3JkPG51bWJlciwgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnM+ID0+IHtcclxuICAgICAgICAgIGFjY3VtW2ZsaWdodC51aWRdID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICBjYW5TZWxlY3Q6IHRydWVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZmxpZ2h0XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge31cclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IHJldHVybkRhdGEgPSAocmVzdWx0cy5ncm91cGVkIHx8IFtdKS5yZWR1Y2UoXHJcbiAgICAgICAgdGhpcy5tYWtlR3JvdXBlZE9iamVjdHMocmV0dXJucyksXHJcbiAgICAgICAgW11cclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IGR1YWxEYXRhT3V0Ym91bmQ6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFtdID0gKFxyXG4gICAgICAgIHJlc3VsdHMuZ3JvdXBlZCB8fCBbXVxyXG4gICAgICApXHJcbiAgICAgICAgLnJlZHVjZSh0aGlzLm1ha2VHcm91cGVkT2JqZWN0cyhkdWFsU2luZ2xlcy5vdXRib3VuZCksIFtdKVxyXG4gICAgICAgIC5tYXAoKHJlc3VsdDE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgcmVzdWx0MS5kaXJlY3Rpb24gPSBGbGlnaHREaXJlY3Rpb25FbnVtLkR1YWxTaW5nbGVPdXRib3VuZDtcclxuICAgICAgICAgIHJldHVybiByZXN1bHQxO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgZHVhbERhdGFJbmJvdW5kOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHRbXSA9IChcclxuICAgICAgICByZXN1bHRzLmdyb3VwZWQgfHwgW11cclxuICAgICAgKVxyXG4gICAgICAgIC5yZWR1Y2UodGhpcy5tYWtlR3JvdXBlZE9iamVjdHMoZHVhbFNpbmdsZXMuaW5ib3VuZCwgdHJ1ZSksIFtdKVxyXG4gICAgICAgIC5tYXAoKHJlc3VsdDE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgcmVzdWx0MS5kaXJlY3Rpb24gPSBGbGlnaHREaXJlY3Rpb25FbnVtLkR1YWxTaW5nbGVJbmJvdW5kO1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDE7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBkYXRhMiA9IFsuLi5yZXR1cm5EYXRhLCAuLi5kdWFsRGF0YU91dGJvdW5kLCAuLi5kdWFsRGF0YUluYm91bmRdO1xyXG4gICAgICBjb25zb2xlLmxvZygnUHJvY2Vzc2VkIEdyb3VwZWQgZGF0YScsIGRhdGEyKTtcclxuICAgICAgcmV0dXJuIGRhdGEyO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHJlc3VsdHMgPyBbcmVzdWx0c10gOiBbXTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBtYWtlR3JvdXBlZE9iamVjdHMoXHJcbiAgICBncm91cGVkT2JqZWN0OiBSZWNvcmQ8bnVtYmVyLCBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucz4sXHJcbiAgICB0cmVhdE91dGJvdW5kc0FzT3V0Ym91bmRzOiBib29sZWFuID0gZmFsc2VcclxuICApIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIGFjYzogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0W10sXHJcbiAgICAgIGl0ZW06IEdyb3VwZWRGaWVsZHNGcmFnbWVudFxyXG4gICAgKTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0W10gPT4ge1xyXG4gICAgICBjb25zdCBpc091dEJvdW5kID0gaXRlbS5ib3VuZEluZGljYXRvciA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5PdXRib3VuZDtcclxuICAgICAgY29uc3QgcmV0dXJuT2JqZWN0OiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQgPSB7XHJcbiAgICAgICAgdHlwZTogJ0ZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCcsXHJcbiAgICAgICAgZGlyZWN0aW9uOiBpdGVtLmJvdW5kSW5kaWNhdG9yLFxyXG4gICAgICAgIGNsYXNzZXM6IHtcclxuICAgICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzXTogbnVsbCBhcyBGbGlnaHRJdGluZXJhcnlDbGFzcyxcclxuICAgICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzQnJhbmRlZF06IG51bGwgYXMgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MsXHJcbiAgICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215RmxleGldOiBudWxsIGFzIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gICAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teUZsZXhpQnJhbmRlZF06XHJcbiAgICAgICAgICAgIG51bGwgYXMgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MsXHJcbiAgICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215Tm9CYWdzXTogbnVsbCBhcyBGbGlnaHRJdGluZXJhcnlDbGFzcyxcclxuICAgICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3NCcmFuZGVkXTpcclxuICAgICAgICAgICAgbnVsbCBhcyBGbGlnaHRJdGluZXJhcnlDbGFzcyxcclxuICAgICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkXTogbnVsbCBhcyBGbGlnaHRJdGluZXJhcnlDbGFzcyxcclxuICAgICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkQnJhbmRlZF06XHJcbiAgICAgICAgICAgIG51bGwgYXMgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MsXHJcbiAgICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdF06IG51bGwgYXMgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MsXHJcbiAgICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdEJyYW5kZWRdOiBudWxsIGFzIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gICAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXldOiBudWxsIGFzIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gICAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXlCcmFuZGVkXTpcclxuICAgICAgICAgICAgbnVsbCBhcyBGbGlnaHRJdGluZXJhcnlDbGFzc1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb3JpZ2luQWlycG9ydDogJycsXHJcbiAgICAgICAgb3JpZ2luQWlycG9ydE5hbWU6ICcnLFxyXG4gICAgICAgIGRlc3RpbmF0aW9uQWlycG9ydDogJycsXHJcbiAgICAgICAgZGVzdGluYXRpb25BaXJwb3J0TmFtZTogJycsXHJcbiAgICAgICAgZGVwYXJ0RGF0ZVRpbWU6ICcnLFxyXG4gICAgICAgIGFycml2YWxEYXRlVGltZTogJycsXHJcbiAgICAgICAgb3V0Ym91bmRUb3RhbER1cmF0aW9uOiAwLFxyXG4gICAgICAgIGluYm91bmRUb3RhbER1cmF0aW9uOiAwLFxyXG4gICAgICAgIG91dGxlZ3M6IG51bGwsXHJcbiAgICAgICAgaW5sZWdzOiBudWxsLFxyXG4gICAgICAgIG91dGxlZ3NDb3VudDogMCxcclxuICAgICAgICBpbmxlZ3NDb3VudDogMCxcclxuICAgICAgICBkYXRhU291cmNlOiAnJyxcclxuICAgICAgICBwcmVmZXJyZWQ6IGZhbHNlLFxyXG4gICAgICAgIHByZWZlcnJlZE1lc3NhZ2U6ICcnLFxyXG4gICAgICAgIG91dGJvdW5kRmxpZ2h0TnVtYmVyOiAnJyxcclxuICAgICAgICBvcGVyYXRvcjogJycsXHJcbiAgICAgICAgb3BlcmF0b3JGdWxsOiAnJyxcclxuICAgICAgICBpbmJvdW5kRmxpZ2h0TnVtYmVyOiAnJyxcclxuICAgICAgICBpc1JldHVybjogZmFsc2UsXHJcbiAgICAgICAgbWluUHJpY2U6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLFxyXG4gICAgICAgIG1heFByaWNlOiAwLFxyXG4gICAgICAgIGNvMlBlckl0ZW06IDAsXHJcbiAgICAgICAgY28yUGVyUGFzc2VuZ2VyOiAwLFxyXG4gICAgICAgIGdpZDogaXRlbS5yZWZlcmVuY2VJRFxyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBicmFuZHM6IE1hdGNoaW5nRmxpZ2h0cyA9IGl0ZW0uZmxpZ2h0cztcclxuXHJcbiAgICAgIE9iamVjdC5rZXlzKGJyYW5kcylcclxuICAgICAgICAuZmlsdGVyKChrZXk6IHN0cmluZykgPT4ga2V5WzBdICE9PSAnXycpXHJcbiAgICAgICAgLmZvckVhY2goKGJyYW5kOiBGbGlnaHRHcm91cHMpID0+IHtcclxuICAgICAgICAgIGlmICghYnJhbmRzW2JyYW5kXS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gISB1c2luZyBhIHJlZHVjZSBiZWNhdXNlIG5vdCBhbGwgZmxpZ2h0cyBhY3R1YWxseSBleGlzdCBhbmQgd2Ugd2VyZSBzZWVpbmcgdW5kZWZpbmVkIGluIHRoZSBmbGlnaHQgbGlzdFxyXG4gICAgICAgICAgYnJhbmRzW2JyYW5kXS5mb3JFYWNoKChmbGlnaHROdW06IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmbGlnaHQgPSBncm91cGVkT2JqZWN0W2ZsaWdodE51bV07XHJcblxyXG4gICAgICAgICAgICBpZiAoZmxpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgaWYgKGlzT3V0Qm91bmQgfHwgdHJlYXRPdXRib3VuZHNBc091dGJvdW5kcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVHcm91cGVkSXRlbShcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQuc291cmNlLFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQub3V0Ym91bmRGbGlnaHRzLFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQub3V0Ym91bmRUb3RhbER1cmF0aW9uLFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQuaW5ib3VuZEZsaWdodHMsXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5pbmJvdW5kVG90YWxEdXJhdGlvbixcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0LmNvMlBlckl0ZW0sXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5jbzJQZXJQYXNzZW5nZXJcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlR3JvdXBlZEl0ZW0oXHJcbiAgICAgICAgICAgICAgICAgIHJldHVybk9iamVjdCxcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0LnNvdXJjZSxcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0LmluYm91bmRGbGlnaHRzLFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQuaW5ib3VuZFRvdGFsRHVyYXRpb24sXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5vdXRib3VuZEZsaWdodHMsXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5vdXRib3VuZFRvdGFsRHVyYXRpb24sXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5jbzJQZXJJdGVtLFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQuY28yUGVyUGFzc2VuZ2VyXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBjb25zdCBjb3JyZWN0QnJhbmQ6IE9CVEZsaWdodENhYmluQ2xhc3MgPVxyXG4gICAgICAgICAgICAgICAgdGhpcy5oZWxwZXJzLkZsaWdodENhYmluQ2xhc3NUb0JyYW5kZWRPQlRGbGlnaHRDYWJpbkNsYXNzKFxyXG4gICAgICAgICAgICAgICAgICBicmFuZCxcclxuICAgICAgICAgICAgICAgICAgISFmbGlnaHQuYmFzZUZhcmVJZCAmJiBmbGlnaHQuYmFzZUZhcmVJZCAhPT0gZmxpZ2h0LnVpZFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBjb25zdCBtaW5wcmljZSA9IE1hdGguZmxvb3IoZmxpZ2h0LnRvdGFsLnByaWNlKTtcclxuICAgICAgICAgICAgICBjb25zdCBtYXhwcmljZSA9IE1hdGguY2VpbChmbGlnaHQudG90YWwucHJpY2UpO1xyXG4gICAgICAgICAgICAgIHJldHVybk9iamVjdC5taW5QcmljZSA9XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QubWluUHJpY2UgPCBtaW5wcmljZVxyXG4gICAgICAgICAgICAgICAgICA/IHJldHVybk9iamVjdC5taW5QcmljZVxyXG4gICAgICAgICAgICAgICAgICA6IG1pbnByaWNlO1xyXG5cclxuICAgICAgICAgICAgICByZXR1cm5PYmplY3QubWF4UHJpY2UgPVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0Lm1heFByaWNlID4gbWF4cHJpY2VcclxuICAgICAgICAgICAgICAgICAgPyByZXR1cm5PYmplY3QubWF4UHJpY2VcclxuICAgICAgICAgICAgICAgICAgOiBtYXhwcmljZTtcclxuXHJcbiAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0LnByZWZlcnJlZCA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2ZsaWdodC5qb3VybmV5SGFzaF0/LmNvbXBhbnlQcmVmZXJyZWQgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2ZsaWdodC5qb3VybmV5SGFzaF0/LmNvbXBhbnlQcmVmZXJyZWQgfHxcclxuICAgICAgICAgICAgICAgIGZhbHNlO1xyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIHJldHVybk9iamVjdC5wcmVmZXJyZWRNZXNzYWdlID1cclxuICAgICAgICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbZmxpZ2h0LmpvdXJuZXlIYXNoXT8uY29tcGFueVByZWZlcnJlZE1lc3NhZ2UgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2ZsaWdodC5qb3VybmV5SGFzaF0/LmNvbXBhbnlQcmVmZXJyZWRNZXNzYWdlIHx8XHJcbiAgICAgICAgICAgICAgICAnJztcclxuICAgICAgICAgICAgICBpZiAocmV0dXJuT2JqZWN0LmNsYXNzZXNbY29ycmVjdEJyYW5kXT8uZmxpZ2h0cz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuY2xhc3Nlc1tjb3JyZWN0QnJhbmRdLmZsaWdodHMucHVzaChmbGlnaHQpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybk9iamVjdC5jbGFzc2VzW2NvcnJlY3RCcmFuZF0ubWlucHJpY2UgPSBNYXRoLm1pbihcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0LmNsYXNzZXNbY29ycmVjdEJyYW5kXS5taW5wcmljZSxcclxuICAgICAgICAgICAgICAgICAgbWlucHJpY2VcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuY2xhc3Nlc1tjb3JyZWN0QnJhbmRdLm1heHByaWNlID0gTWF0aC5tYXgoXHJcbiAgICAgICAgICAgICAgICAgIHJldHVybk9iamVjdC5jbGFzc2VzW2NvcnJlY3RCcmFuZF0ubWF4cHJpY2UsXHJcbiAgICAgICAgICAgICAgICAgIG1heHByaWNlXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuY2xhc3Nlc1tjb3JyZWN0QnJhbmRdID0ge1xyXG4gICAgICAgICAgICAgICAgICBmbGlnaHRzOiBbZmxpZ2h0XSxcclxuICAgICAgICAgICAgICAgICAgbWlucHJpY2UsXHJcbiAgICAgICAgICAgICAgICAgIG1heHByaWNlLFxyXG4gICAgICAgICAgICAgICAgICBjdXJyZW5jeTogZmxpZ2h0LnRvdGFsLmN1cnJlbmN5XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAvLyBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAgIC8vICAgJ1VuYWJsZSB0byBmaW5kIGZsaWdodCB3aXRoIHVpZCAnICsgZmxpZ2h0TnVtXHJcbiAgICAgICAgICAgICAgLy8gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICByZXR1cm5PYmplY3QgJiZcclxuICAgICAgICAhIU9iamVjdC52YWx1ZXMocmV0dXJuT2JqZWN0LmNsYXNzZXMpLmZpbmQoXHJcbiAgICAgICAgICAoY2xhczogRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MpOiBib29sZWFuID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGNsYXM/LmZsaWdodHM/Lmxlbmd0aCA+IDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICBhY2MucHVzaChyZXR1cm5PYmplY3QpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhY2MuZmlsdGVyKChpdGVtMjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0KSA9PiAhIWl0ZW0yKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUdyb3VwZWRJdGVtKFxyXG4gICAgcmV0dXJuT2JqZWN0OiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICBzb3VyY2U6IHN0cmluZyxcclxuICAgIG91dGJvdW5kRmxpZ2h0czogRmxpZ2h0Sm91cm5leVtdLFxyXG4gICAgb3V0Ym91bmRUb3RhbER1cmF0aW9uOiBudW1iZXIsXHJcbiAgICBpbmJvdW5kRmxpZ2h0czogRmxpZ2h0Sm91cm5leVtdLFxyXG4gICAgaW5ib3VuZFRvdGFsRHVyYXRpb246IG51bWJlcixcclxuICAgIGNvMlBlckl0ZW06IG51bWJlcixcclxuICAgIGNvMlBlclBhc3NlbmdlcjogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICBpZiAob3V0Ym91bmRGbGlnaHRzPy5sZW5ndGggJiYgIXJldHVybk9iamVjdC5kZXBhcnREYXRlVGltZSkge1xyXG4gICAgICBjb25zdCBmaXJzdCA9IG91dGJvdW5kRmxpZ2h0c1swXTtcclxuICAgICAgY29uc3QgbGFzdCA9IG91dGJvdW5kRmxpZ2h0c1tvdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMV07XHJcbiAgICAgIHJldHVybk9iamVjdC5vcmlnaW5BaXJwb3J0ID0gZmlyc3Qub3JpZ2luQWlycG9ydDtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm9yaWdpbkFpcnBvcnROYW1lID0gZmlyc3Qub3JpZ2luQWlycG9ydE5hbWU7XHJcbiAgICAgIHJldHVybk9iamVjdC5kZXN0aW5hdGlvbkFpcnBvcnQgPSBsYXN0LmRlc3RpbmF0aW9uQWlycG9ydDtcclxuICAgICAgcmV0dXJuT2JqZWN0LmRlc3RpbmF0aW9uQWlycG9ydE5hbWUgPSBsYXN0LmRlc3RpbmF0aW9uQWlycG9ydE5hbWU7XHJcbiAgICAgIHJldHVybk9iamVjdC5kZXBhcnREYXRlVGltZSA9IGZpcnN0LmRhdGVUaW1lRGVwYXJ0aW5nO1xyXG4gICAgICByZXR1cm5PYmplY3QuYXJyaXZhbERhdGVUaW1lID0gbGFzdC5kYXRlVGltZUFycml2aW5nO1xyXG4gICAgICByZXR1cm5PYmplY3Qub3V0Ym91bmRUb3RhbER1cmF0aW9uID0gb3V0Ym91bmRUb3RhbER1cmF0aW9uO1xyXG4gICAgICByZXR1cm5PYmplY3QuZGF0YVNvdXJjZSA9IHNvdXJjZTtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm9wZXJhdG9yID0gZmlyc3QubWFya2V0aW5nQ2FycmllcjtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm9wZXJhdG9yRnVsbCA9IGZpcnN0Lm1hcmtldGluZ0NhcnJpZXJOYW1lO1xyXG4gICAgICByZXR1cm5PYmplY3Qub3V0bGVnc0NvdW50ID0gb3V0Ym91bmRGbGlnaHRzLmxlbmd0aDtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm91dGxlZ3MgPSBvdXRib3VuZEZsaWdodHM7XHJcbiAgICAgIHJldHVybk9iamVjdC5vdXRib3VuZEZsaWdodE51bWJlciA9XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmpvaW5Gcm9tQXR0cmlidXRlPEZsaWdodEpvdXJuZXk+KFxyXG4gICAgICAgICAgJy0nLFxyXG4gICAgICAgICAgJ21hcmtldGluZ0ZsaWdodE51bWJlcicsXHJcbiAgICAgICAgICBvdXRib3VuZEZsaWdodHNcclxuICAgICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuT2JqZWN0LmlzUmV0dXJuID0gZmFsc2U7XHJcbiAgICAgIHJldHVybk9iamVjdC5jbzJQZXJJdGVtID0gY28yUGVySXRlbTtcclxuICAgICAgcmV0dXJuT2JqZWN0LmNvMlBlclBhc3NlbmdlciA9IGNvMlBlclBhc3NlbmdlcjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5ib3VuZEZsaWdodHM/Lmxlbmd0aCAmJiAhcmV0dXJuT2JqZWN0LmluYm91bmRUb3RhbER1cmF0aW9uKSB7XHJcbiAgICAgIHJldHVybk9iamVjdC5pbmJvdW5kVG90YWxEdXJhdGlvbiA9IGluYm91bmRUb3RhbER1cmF0aW9uO1xyXG4gICAgICByZXR1cm5PYmplY3QuaW5sZWdzQ291bnQgPSBpbmJvdW5kRmxpZ2h0cy5sZW5ndGg7XHJcbiAgICAgIHJldHVybk9iamVjdC5pbmxlZ3MgPSBpbmJvdW5kRmxpZ2h0cztcclxuICAgICAgcmV0dXJuT2JqZWN0LmluYm91bmRGbGlnaHROdW1iZXIgPVxyXG4gICAgICAgIHRoaXMuaGVscGVycy5qb2luRnJvbUF0dHJpYnV0ZTxGbGlnaHRKb3VybmV5PihcclxuICAgICAgICAgICctJyxcclxuICAgICAgICAgICdvcGVyYXRpbmdGbGlnaHROdW1iZXInLFxyXG4gICAgICAgICAgaW5ib3VuZEZsaWdodHNcclxuICAgICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuT2JqZWN0LmlzUmV0dXJuID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBtYWtlU2Vzc2lvblJlc3VsdHMoXHJcbiAgICBkYXRhOiBGbGlnaHRRdW90ZVJlc3VsdEFycmF5XHJcbiAgKTogRmxpZ2h0U2Vzc2lvblR5cGUge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVzdWx0czogZGF0YSxcclxuICAgICAgZ3JvdXBlZDogdGhpcy5fZ3JvdXBlZCxcclxuICAgICAgcXVlcnk6IHRoaXMucmVzdWx0UXVlcnlcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXRNYXhGbGlnaHRQcmljZUZvckJyYW5kKG1hdGNoaW5nQnJhbmRGbGlnaHRzOiBGbGlnaHRJdGluZXJhcnlbXSk6IG51bWJlciB7XHJcbiAgICBsZXQgbWF4ID0gMDtcclxuICAgIG1hdGNoaW5nQnJhbmRGbGlnaHRzLmZvckVhY2goKGZsaWdodCkgPT4ge1xyXG4gICAgICBpZiAobWF4IDwgZmxpZ2h0Py50b3RhbD8ucHJpY2UpIHtcclxuICAgICAgICBtYXggPSBmbGlnaHQudG90YWwucHJpY2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG1heDtcclxuICB9XHJcbiAgZ2V0TWluRmxpZ2h0UHJpY2VGb3JCcmFuZChtYXRjaGluZ0JyYW5kRmxpZ2h0czogRmxpZ2h0SXRpbmVyYXJ5W10pOiBudW1iZXIge1xyXG4gICAgbGV0IG1pbiA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xyXG4gICAgbWF0Y2hpbmdCcmFuZEZsaWdodHMuZm9yRWFjaCgoZmxpZ2h0KSA9PiB7XHJcbiAgICAgIGlmIChtaW4gPiBmbGlnaHQ/LnRvdGFsPy5wcmljZSkge1xyXG4gICAgICAgIG1pbiA9IGZsaWdodC50b3RhbC5wcmljZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbWluO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHJlc2V0UXVlcnkoY2hlY2tJc1ZhbGlkOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHRoaXMuc2VhcmNoU2VydmljZS5tYWtlRmxpZ2h0UXVlcnkoKSk7XHJcbiAgICBpZiAoY2hlY2tJc1ZhbGlkKSB7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldFBhcmFtcygpOiB2b2lkIHtcclxuICAgIHRoaXMucmVzZXQoKTtcclxuICAgIHRoaXMucmVzZXRRdWVyeSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNWYWxpZCgpIHtcclxuICAgIGlmICghdGhpcy5kb0NoZWNrcykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBGbGlnaHRFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgIHtcclxuICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXHJcbiAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzID0gW107XHJcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUubXVsdGlDaXR5KSB7XHJcbiAgICAgIHRoaXMubXVsdGlDaXR5VmFsaWRhdGlvbigpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKCF0aGlzLl9vcmlnaW5BaXJwb3J0KSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIGFkZCBpbiBhIGRlcGFydHVyZSBsb2NhdGlvbicpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0KSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIGFkZCBpbiBhbiBhcnJpdmFsIGRlc3RpbmF0aW9uJyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlLmlzQWZ0ZXIobW9tZW50KCkpKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnRGVwYXJ0dXJlIGRhdGUgY2FuIG5vdCBiZSBpbiB0aGUgcGFzdCcpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5fb3JpZ2luQWlycG9ydCAmJlxyXG4gICAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCAmJlxyXG4gICAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9PT0gdGhpcy5fb3JpZ2luQWlycG9ydFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICAgJ09yaWdpbiBhbmQgZGVzdGluYXRpb24gYWlycG9ydCBjYW5ub3QgYmUgdGhlIHNhbWUnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pc1JldHVybikge1xyXG4gICAgICAgIC8vIFRPRE8gY2hlY2sgdGhhdCByZXR1cm4gZGV0YWlscyBhcmUgc2V0XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZS5pc1NhbWVPckFmdGVyKFxyXG4gICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuaW5UaW1lQ3JpdGVyaWFcclxuICAgICAgICAgIClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgICAgICdSZXR1cm4gZGF0ZSBtdXN0IGJlIGFmdGVyIHRoZSBkZXBhcnR1cmUgZGF0ZSdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaXNWYWxpZC5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMCk7XHJcbiAgICAgIHRoaXMubWVzc2FnZXMubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtdWx0aUNpdHlWYWxpZGF0aW9uKCkge1xyXG4gICAgbGV0IGlzZW1wdHlWYWx1ZSA9IGZhbHNlO1xyXG4gICAgbGV0IGlzZW1wdHlMYW5kaW5nID0gZmFsc2U7XHJcbiAgICBsZXQgaXNTYW1lVmFsdWUgPSBmYWxzZTtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uLm1hcCgoZWxlbWVudCwgaSkgPT4ge1xyXG4gICAgICBpZiAoIWVsZW1lbnQub3JpZykge1xyXG4gICAgICAgIGlzZW1wdHlWYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgaWYgKGkgPCAyKSB7XHJcbiAgICAgICAgICBpc2VtcHR5TGFuZGluZyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChlbGVtZW50Lm9yaWcgPT09IGVsZW1lbnQuZGVzdCkgaXNTYW1lVmFsdWUgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgICBpZiAoIW1vbWVudCh0aGlzLnRlbXBQYXJhbXMubXVsdGlEZXN0aW5hdGlvblswXS5kYXRlKS5pc0FmdGVyKG1vbWVudCgpKSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdEZXBhcnR1cmUgZGF0ZSBjYW4gbm90IGJlIGluIHRoZSBwYXN0Jyk7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNlbXB0eUxhbmRpbmcpXHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBzZWxlY3QgbGFuZGluZyBhaXJwb3J0KHMpJyk7XHJcbiAgICBpZiAoaXNlbXB0eVZhbHVlKVxyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2Ugc2VsZWN0IHRha2Ugb2ZmIGFpcnBvcnQocyknKTtcclxuICAgIGlmIChpc1NhbWVWYWx1ZSlcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAnVGFrZSBvZmYgYW5kIGxhbmRpbmcgbG9jYXRpb24ocykgY2Fubm90IGJlIHRoZSBzYW1lJ1xyXG4gICAgICApO1xyXG4gIH1cclxuICBzdGFydFNlYXJjaCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX29yaWdpbmFsVXNlclNlYXJjaCA9IE9iamVjdC5mcmVlemUoXHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMudGVtcFBhcmFtcylcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgICBGbGlnaHRFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxyXG4gICAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlUmVjZW50U2VhcmNoKHRoaXMuZ2V0UmVjZW50U2VhcmNoUXVlcnkocXVlcnkpKTtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLl9zdGFydFNlYXJjaCh0aGlzLmZsaWdodGZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFJlY2VudFNlYXJjaFF1ZXJ5KFxyXG4gICAgcXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzXHJcbiAgKTogU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5GbGlnaHQsXHJcbiAgICAgIHNlYXJjaEFyZ3M6IHF1ZXJ5LFxyXG4gICAgICB0cmF2ZWxEYXRlOiB0aGlzLm91dEJvdW5kRGF0ZS5mb3JtYXQoKSxcclxuICAgICAgdHJhdmVsbGVyczogdGhpcy5oZWxwZXJzLmdldFRyYXZlbGxlcnNJZCh0aGlzLnRyYXZlbGxlcnMpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXJ0UmVjZW50U2VhcmNoKHJlY2VudFNlYXJjaDogUmVjZW50U2VhcmNoKTogdm9pZCB7XHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmREYXRlKSB7XHJcbiAgICAgIGxldCBvdXRib3VuZFRpbWVXaW5kb3cgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJnc1xyXG4gICAgICAgIC5vdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3dcclxuICAgICAgICA/IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvd1xyXG4gICAgICAgIDogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdztcclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmNvbnZlcnRSZWNlbnRTZWFyY2hEYXRlVGltZShcclxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZERhdGUsXHJcbiAgICAgICAgb3V0Ym91bmRUaW1lV2luZG93XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRhdGUpIHtcclxuICAgICAgbGV0IHJldHVyblRpbWVXaW5kb3cgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgPyByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5BcnJpdmFsVGltZVdpbmRvdztcclxuICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKFxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRhdGUsXHJcbiAgICAgICAgcmV0dXJuVGltZVdpbmRvd1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmFyZVR5cGUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5mYXJlVHlwZTtcclxuICAgIHRoaXMubWF4Q29ubmVjdGlvbnMgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5tYXhDb25uZWN0aW9ucztcclxuXHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmRDYWJpbkNsYXNzKSB7XHJcbiAgICAgIHRoaXMuY2FiaW5DbGFzcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kQ2FiaW5DbGFzc1swXTtcclxuICAgIH1cclxuICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5DYWJpbkNsYXNzKSB7XHJcbiAgICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkNhYmluQ2xhc3NbMF07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHMgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5pbmNsdWRlTmVhcmJ5QWlycG9ydHNcclxuICAgICAgPyB0cnVlXHJcbiAgICAgIDogZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuVHJpcFxyXG4gICAgICA/IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuXHJcbiAgICAgIDogRmxpZ2h0U2VhcmNoVHlwZS5vbmVXYXk7XHJcblxyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvdykge1xyXG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuRGVwYXJ0O1xyXG4gICAgfSBlbHNlIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZEFycml2YWxUaW1lV2luZG93KSB7XHJcbiAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5BcnJpdmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQW55dGltZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvdykge1xyXG4gICAgICB0aGlzLmluVGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5EZXBhcnQ7XHJcbiAgICB9IGVsc2UgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkFycml2YWxUaW1lV2luZG93KSB7XHJcbiAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFycml2ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFueXRpbWU7XHJcbiAgICB9XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbXHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0QnlDb2RlKFxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm9yaWdpbkFpcnBvcnRcclxuICAgICAgKSxcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEFpcnBvcnRCeUNvZGUoXHJcbiAgICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVzdGluYXRpb25BaXJwb3J0XHJcbiAgICAgIClcclxuICAgIF0pLnN1YnNjcmliZSgoW2RlcGFydExvY2F0aW9uLCBhcnJpdmVMb2NhdGlvbl0pID0+IHtcclxuICAgICAgaWYgKGRlcGFydExvY2F0aW9uICYmIGFycml2ZUxvY2F0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5kZXBhcnRMb2NhdGlvbiA9IHtcclxuICAgICAgICAgIGRlc3RpbmF0aW9uOiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2gubmFtZSxcclxuICAgICAgICAgIGdhdGV3YXk6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaC5pYXRhLFxyXG4gICAgICAgICAgdGVybWluYWxzOiB0aGlzLnNlYXJjaFNlcnZpY2UucHJvY2Vzc1Rlcm1pbmFscyhcclxuICAgICAgICAgICAgZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLnRlcm1pbmFsc1xyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGNvdW50cnk6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5LFxyXG4gICAgICAgICAgcG9zdGNvZGU6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5wb3N0Y29kZSxcclxuICAgICAgICAgIGNvdW50cnlDb2RlOiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeUNvZGVcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuYXJyaXZlTG9jYXRpb24gPSB7XHJcbiAgICAgICAgICBkZXN0aW5hdGlvbjogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLm5hbWUsXHJcbiAgICAgICAgICBnYXRld2F5OiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2guaWF0YSxcclxuICAgICAgICAgIHRlcm1pbmFsczogdGhpcy5zZWFyY2hTZXJ2aWNlLnByb2Nlc3NUZXJtaW5hbHMoXHJcbiAgICAgICAgICAgIGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC50ZXJtaW5hbHNcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBjb3VudHJ5OiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeSxcclxuICAgICAgICAgIHBvc3Rjb2RlOiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8ucG9zdGNvZGUsXHJcbiAgICAgICAgICBjb3VudHJ5Q29kZTogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnByZWZlcnJlZENhcnJpZXJzKSB7XHJcbiAgICAgICAgICBjb25zdCBwcmVmZXJyZWRDYXJyaWVyczogT0JUQWlybGluZXNEZXRhaWxzW10gPSBbXTtcclxuICAgICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnByZWZlcnJlZENhcnJpZXJzLm1hcChcclxuICAgICAgICAgICAgKHByZWZlcnJlZENhcnJ5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgICAgICAgICAgIC5nZXRBaXJsaW5lc0xpc3QocHJlZmVycmVkQ2FycnkpXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChpdGVtczogT0JUQWlybGluZXNEZXRhaWxzW10pID0+IHtcclxuICAgICAgICAgICAgICAgICAgaXRlbXMubWFwKChpdGVtOiBPQlRBaXJsaW5lc0RldGFpbHMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5jb2RlID09PSBwcmVmZXJyZWRDYXJyeSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcHJlZmVycmVkQ2FycmllcnMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnByZWZlcnJlZENhcnJpZXJzID0gcHJlZmVycmVkQ2FycmllcnM7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYWtlRGVwYXJ0dXJlVGltZVdpbmRvdyhcclxuICAgIGRhdGVUaW1lOiBtb21lbnQuTW9tZW50LFxyXG4gICAgd2luZG93OiBUaW1lV2luZG93LFxyXG4gICAgaXNGbGlnaHRzR3JvdXBlZDogYm9vbGVhblxyXG4gICk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gd2luZG93ID09PSBUaW1lV2luZG93LkRlcGFydFxyXG4gICAgICA/IGlzRmxpZ2h0c0dyb3VwZWRcclxuICAgICAgICA/IHRoaXMuaGVscGVycy5tYWtlVGltZVdpbmRvdyhkYXRlVGltZSwgLTIsIDIpXHJcbiAgICAgICAgOiB0aGlzLmhlbHBlcnMubWFrZVRpbWVXaW5kb3coZGF0ZVRpbWUsIDAsIDQpXHJcbiAgICAgIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWFrZUFycml2YWxUaW1lV2luZG93KFxyXG4gICAgZGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQsXHJcbiAgICB3aW5kb3c6IFRpbWVXaW5kb3csXHJcbiAgICBpc0ZsaWdodHNHcm91cGVkOiBib29sZWFuXHJcbiAgKTogc3RyaW5nIHtcclxuICAgIGlmICh3aW5kb3cgIT09IFRpbWVXaW5kb3cuQXJyaXZlKSByZXR1cm4gbnVsbDtcclxuICAgIHJldHVybiBpc0ZsaWdodHNHcm91cGVkXHJcbiAgICAgID8gdGhpcy5oZWxwZXJzLm1ha2VUaW1lV2luZG93KGRhdGVUaW1lLCAtMiwgMilcclxuICAgICAgOiB0aGlzLmhlbHBlcnMubWFrZVRpbWVXaW5kb3coZGF0ZVRpbWUsIDAsIDQpO1xyXG4gIH1cclxuXHJcbiAgY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKFxyXG4gICAgZGF0ZTogc3RyaW5nLFxyXG4gICAgdGltZVdpbmRvdz86IHN0cmluZ1xyXG4gICk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgaWYgKHRpbWVXaW5kb3cpIHtcclxuICAgICAgY29uc3QgZmxpZ2h0VGltZSA9IHRpbWVXaW5kb3cuc3BsaXQoJy0nKTtcclxuICAgICAgY29uc3QgdGltZUFuZERhdGUgPSBtb21lbnQoZGF0ZSkuYWRkKFxyXG4gICAgICAgIG1vbWVudC5kdXJhdGlvbih0aGlzLmhlbHBlcnMuaGhtbVRvVGltZShmbGlnaHRUaW1lWzBdKSlcclxuICAgICAgKTtcclxuICAgICAgLy8gYWRkIDIgaG91clxyXG4gICAgICByZXR1cm4gdGltZUFuZERhdGUuY2xvbmUoKS5hZGQoMiwgJ2hvdXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBtb21lbnQoZGF0ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTZWFyY2hRdWVyeSgpOiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyB7XHJcbiAgICBjb25zdCBpc011bHRpQ2l0eUFjdGl2ZSA9XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eTtcclxuICAgIHRoaXMuX211bHRpRGVzdGluYXRpb24gPSBpc011bHRpQ2l0eUFjdGl2ZVxyXG4gICAgICA/IHRoaXMuc2V0TXVsdGlEZXN0aW5hdGlvblF1ZXJ5KHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uKVxyXG4gICAgICA6IG51bGw7XHJcblxyXG4gICAgdGhpcy5fbXVsdGlEZXN0aW5hdGlvbiA9XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eVxyXG4gICAgICAgID8gdGhpcy5zZXRNdWx0aURlc3RpbmF0aW9uUXVlcnkodGhpcy50ZW1wUGFyYW1zLm11bHRpRGVzdGluYXRpb24pXHJcbiAgICAgICAgOiBbXTtcclxuICAgIGNvbnN0IGlzRmxpZ2h0c0dyb3VwZWQgPSB0aGlzLnNlYXJjaFNlcnZpY2UuaXNGbGlnaHRzR3JvdXBlZCgpO1xyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcz4oXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAge30sXHJcbiAgICAgICAgaXNNdWx0aUNpdHlBY3RpdmVcclxuICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgIG11bHRpRGVzdGluYXRpb246IHRoaXMuX211bHRpRGVzdGluYXRpb25cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgb3JpZ2luQWlycG9ydDogdGhpcy5fb3JpZ2luQWlycG9ydCxcclxuICAgICAgICAgICAgICBkZXN0aW5hdGlvbkFpcnBvcnQ6IHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCxcclxuICAgICAgICAgICAgICBvdXRib3VuZERhdGU6IHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlKFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZVxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgb3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93OiB0aGlzLm1ha2VEZXBhcnR1cmVUaW1lV2luZG93KFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZSxcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lQ3JpdGVyaWEsXHJcbiAgICAgICAgICAgICAgICBpc0ZsaWdodHNHcm91cGVkXHJcbiAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICBvdXRib3VuZEFycml2YWxUaW1lV2luZG93OiB0aGlzLm1ha2VBcnJpdmFsVGltZVdpbmRvdyhcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUNyaXRlcmlhLFxyXG4gICAgICAgICAgICAgICAgaXNGbGlnaHRzR3JvdXBlZFxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBwYXNzZW5nZXJzOiB0aGlzLl9wYXNzZW5nZXJzLFxyXG4gICAgICAgICAgcmV0dXJuVHJpcDogdGhpcy5pc1JldHVybixcclxuICAgICAgICAgIG91dGJvdW5kQ2FiaW5DbGFzczogdGhpcy50ZW1wUGFyYW1zLmNhYmluQ2xhc3NcclxuICAgICAgICAgICAgPyBbdGhpcy50ZW1wUGFyYW1zLmNhYmluQ2xhc3NdXHJcbiAgICAgICAgICAgIDogbnVsbCxcclxuICAgICAgICAgIHJlcXVpcmVGcmVlQmFnOiBudWxsLFxyXG4gICAgICAgICAgbWF4Q29ubmVjdGlvbnM6IHRoaXMudGVtcFBhcmFtcy5tYXhDb25uZWN0aW9ucyxcclxuICAgICAgICAgIGluY2x1ZGVOZWFyYnlBaXJwb3J0czogdGhpcy50ZW1wUGFyYW1zLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyxcclxuICAgICAgICAgIHByZWZlcnJlZENhcnJpZXJzOiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnMubWFwKFxyXG4gICAgICAgICAgICAoY2FycmllcjogT0JUQWlybGluZXNEZXRhaWxzKSA9PlxyXG4gICAgICAgICAgICAgIGNhcnJpZXI/LmNvZGUgPyBjYXJyaWVyLmNvZGUgOiBudWxsXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgZmFyZVR5cGU6IHRoaXMudGVtcFBhcmFtcy5mYXJlVHlwZSxcclxuICAgICAgICAgIHdpdGhHcm91cGVkOiBpc0ZsaWdodHNHcm91cGVkXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0aGlzLmlzUmV0dXJuXHJcbiAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICByZXR1cm5EYXRlOiB0aGlzLmhlbHBlcnMuZm9ybWF0SXNvRGF0ZShcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZVxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgcmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvdzogdGhpcy5tYWtlRGVwYXJ0dXJlVGltZVdpbmRvdyhcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSxcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYSxcclxuICAgICAgICAgICAgICAgIGlzRmxpZ2h0c0dyb3VwZWRcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIHJldHVybkFycml2YWxUaW1lV2luZG93OiB0aGlzLm1ha2VBcnJpdmFsVGltZVdpbmRvdyhcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSxcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYSxcclxuICAgICAgICAgICAgICAgIGlzRmxpZ2h0c0dyb3VwZWRcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIHJldHVybkNhYmluQ2xhc3M6IHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzXHJcbiAgICAgICAgICAgICAgICA/IFt0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzc11cclxuICAgICAgICAgICAgICAgIDogbnVsbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA6IHt9XHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVRyYXZlbGxlcnMoKSB7XHJcbiAgICBjb25zdCB0cmF2ZWxsZXJzOiBGbGlnaHRQYXNzZW5nZXJPYmplY3RbXSA9IFtdO1xyXG4gICAgZm9yIChsZXQgbG9vcCA9IDA7IGxvb3AgPCB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzOyBsb29wICs9IDEpIHtcclxuICAgICAgdHJhdmVsbGVycy5wdXNoKHsgdHlwZTogRmxpZ2h0UGFzc2VuZ2VyVHlwZS5BZHVsdCB9KTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IGxvb3AgPSAwOyBsb29wIDwgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuOyBsb29wICs9IDEpIHtcclxuICAgICAgdHJhdmVsbGVycy5wdXNoKHsgdHlwZTogRmxpZ2h0UGFzc2VuZ2VyVHlwZS5DaGlsZCB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9wYXNzZW5nZXJzID0gdHJhdmVsbGVycztcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlQXZhbGlhYmxlQ2xhc3NlcygpIHtcclxuICAgIGNvbnN0IGhpZGVDbGFzc2VzID1cclxuICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRmF2b3JpdGVPYmplY3Q8SGlkZUZsaWdodENhYmluQ2xhc3NJbnRlcmZhY2U+KFxyXG4gICAgICAgIFVzZXJGYXZvcnVyaXRlLkhpZGVGbGlnaHRDYWJpbkNsYXNzZXNcclxuICAgICAgKSB8fCB7XHJcbiAgICAgICAgYW55OiBmYWxzZSxcclxuICAgICAgICBidXNpbmVzczogZmFsc2UsXHJcbiAgICAgICAgZWNvbm9teTogZmFsc2UsXHJcbiAgICAgICAgZmlyc3Q6IGZhbHNlLFxyXG4gICAgICAgIHByZW1pdW1FY29ub215OiBmYWxzZVxyXG4gICAgICB9O1xyXG5cclxuICAgIGNvbnN0IG9wdGlvbnM6IHsgbmFtZTogc3RyaW5nOyB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzIH1bXSA9IFtdO1xyXG4gICAgaWYgKCFoaWRlQ2xhc3Nlcy5hbnkpIHtcclxuICAgICAgb3B0aW9ucy5wdXNoKHsgbmFtZTogJ0FueScsIHR5cGU6IEZsaWdodENhYmluQ2xhc3MuQW55IH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKCFoaWRlQ2xhc3Nlcy5lY29ub215KSB7XHJcbiAgICAgIG9wdGlvbnMucHVzaCh7IG5hbWU6ICdFY29ub215JywgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaGlkZUNsYXNzZXMucHJlbWl1bUVjb25vbXkpIHtcclxuICAgICAgb3B0aW9ucy5wdXNoKHsgbmFtZTogJ1ByZW1pdW0nLCB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaGlkZUNsYXNzZXMuYnVzaW5lc3MpIHtcclxuICAgICAgb3B0aW9ucy5wdXNoKHsgbmFtZTogJ0J1c2luZXNzJywgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzcyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWhpZGVDbGFzc2VzLmZpcnN0KSB7XHJcbiAgICAgIG9wdGlvbnMucHVzaCh7IG5hbWU6ICdGaXJzdCcsIHR5cGU6IEZsaWdodENhYmluQ2xhc3MuRmlyc3QgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jYWJpbkNsYXNzID0gdGhpcy5nZXRVcGRhdGVkQ2FiaW5DbGFzcyhcclxuICAgICAgdGhpcy5jYWJpbkNsYXNzLFxyXG4gICAgICBoaWRlQ2xhc3NlcyxcclxuICAgICAgb3B0aW9uc1xyXG4gICAgKTtcclxuICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9IHRoaXMuZ2V0VXBkYXRlZENhYmluQ2xhc3MoXHJcbiAgICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyxcclxuICAgICAgaGlkZUNsYXNzZXMsXHJcbiAgICAgIG9wdGlvbnNcclxuICAgICk7XHJcbiAgICB0aGlzLmF2YWxpYWJsZUNsYXNzZXMubmV4dChvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VXBkYXRlZENhYmluQ2xhc3MoXHJcbiAgICBjYWJpbkNsYXNzOiBGbGlnaHRDYWJpbkNsYXNzLFxyXG4gICAgaGlkZUNsYXNzZXM6IEhpZGVGbGlnaHRDYWJpbkNsYXNzSW50ZXJmYWNlLFxyXG4gICAgb3B0aW9uczogeyBuYW1lOiBzdHJpbmc7IHR5cGU6IEZsaWdodENhYmluQ2xhc3MgfVtdXHJcbiAgKTogRmxpZ2h0Q2FiaW5DbGFzcyB7XHJcbiAgICBzd2l0Y2ggKGNhYmluQ2xhc3MpIHtcclxuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkFueTpcclxuICAgICAgICByZXR1cm4gaGlkZUNsYXNzZXMuYW55ID8gb3B0aW9uc1swXS50eXBlIDogY2FiaW5DbGFzcztcclxuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzOlxyXG4gICAgICAgIHJldHVybiBoaWRlQ2xhc3Nlcy5idXNpbmVzcyA/IG9wdGlvbnNbMF0udHlwZSA6IGNhYmluQ2xhc3M7XHJcbiAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215OlxyXG4gICAgICAgIHJldHVybiBoaWRlQ2xhc3Nlcy5lY29ub215ID8gb3B0aW9uc1swXS50eXBlIDogY2FiaW5DbGFzcztcclxuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkZpcnN0OlxyXG4gICAgICAgIHJldHVybiBoaWRlQ2xhc3Nlcy5maXJzdCA/IG9wdGlvbnNbMF0udHlwZSA6IGNhYmluQ2xhc3M7XHJcbiAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teTpcclxuICAgICAgICByZXR1cm4gaGlkZUNsYXNzZXMucHJlbWl1bUVjb25vbXkgPyBvcHRpb25zWzBdLnR5cGUgOiBjYWJpbkNsYXNzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNhYmluQ2xhc3M7XHJcbiAgfVxyXG4gIHVwZGF0ZUZyb21QcmV2aW91c1NlYXJjaGVzKFxyXG4gICAgX3ByZXZpb3VzSXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT5cclxuICApOiB2b2lkIHtcclxuICAgIC8vIEZsaWdodHMgY2FuIG5vdCBiZSBzZWFyY2ggYWZ0ZXIgb3RoZXIgcHJvZHVjdHMgc28gbm8gZGVmYXVsdHMgY2FuIGJlIHNldC5cclxuICB9XHJcblxyXG4gIHVwZGF0ZVNlYXJjaEZyb21FeHBpcmVkQmFza2V0SXRlbShiYXNrZXRJdGVtOiBCYXNrZXRJdGVtKTogdm9pZCB7XHJcbiAgICBjb25zdCBzZWFyY2hGbGlnaHRzUXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzID1cclxuICAgICAgYmFza2V0SXRlbS5zZWFyY2hRdWVyeTtcclxuICAgIGlmIChzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmREYXRlKSB7XHJcbiAgICAgIGxldCBvdXRib3VuZFRpbWVXaW5kb3cgPSBzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgPyBzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgOiBzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdztcclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmNvbnZlcnRSZWNlbnRTZWFyY2hEYXRlVGltZShcclxuICAgICAgICBzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmREYXRlLFxyXG4gICAgICAgIG91dGJvdW5kVGltZVdpbmRvd1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzZWFyY2hGbGlnaHRzUXVlcnkucmV0dXJuRGF0ZSkge1xyXG4gICAgICBsZXQgcmV0dXJuVGltZVdpbmRvdyA9IHNlYXJjaEZsaWdodHNRdWVyeS5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgPyBzZWFyY2hGbGlnaHRzUXVlcnkucmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvd1xyXG4gICAgICAgIDogc2VhcmNoRmxpZ2h0c1F1ZXJ5LnJldHVybkFycml2YWxUaW1lV2luZG93O1xyXG4gICAgICB0aGlzLmluYm91bmREYXRlID0gdGhpcy5jb252ZXJ0UmVjZW50U2VhcmNoRGF0ZVRpbWUoXHJcbiAgICAgICAgc2VhcmNoRmxpZ2h0c1F1ZXJ5LnJldHVybkRhdGUsXHJcbiAgICAgICAgcmV0dXJuVGltZVdpbmRvd1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmFyZVR5cGUgPSBzZWFyY2hGbGlnaHRzUXVlcnkuZmFyZVR5cGU7XHJcbiAgICB0aGlzLm1heENvbm5lY3Rpb25zID0gc2VhcmNoRmxpZ2h0c1F1ZXJ5Lm1heENvbm5lY3Rpb25zO1xyXG5cclxuICAgIGlmIChzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmRDYWJpbkNsYXNzKSB7XHJcbiAgICAgIHRoaXMuY2FiaW5DbGFzcyA9XHJcbiAgICAgICAgc2VhcmNoRmxpZ2h0c1F1ZXJ5Lm91dGJvdW5kQ2FiaW5DbGFzcyBhcyBGbGlnaHRDYWJpbkNsYXNzO1xyXG4gICAgfVxyXG4gICAgaWYgKHNlYXJjaEZsaWdodHNRdWVyeS5yZXR1cm5DYWJpbkNsYXNzKSB7XHJcbiAgICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9XHJcbiAgICAgICAgc2VhcmNoRmxpZ2h0c1F1ZXJ5LnJldHVybkNhYmluQ2xhc3MgYXMgRmxpZ2h0Q2FiaW5DbGFzcztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA9IHNlYXJjaEZsaWdodHNRdWVyeS5pbmNsdWRlTmVhcmJ5QWlycG9ydHNcclxuICAgICAgPyB0cnVlXHJcbiAgICAgIDogZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gc2VhcmNoRmxpZ2h0c1F1ZXJ5LnJldHVyblRyaXBcclxuICAgICAgPyBGbGlnaHRTZWFyY2hUeXBlLnJldHVyblxyXG4gICAgICA6IEZsaWdodFNlYXJjaFR5cGUub25lV2F5O1xyXG5cclxuICAgIGlmIChzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93KSB7XHJcbiAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5EZXBhcnQ7XHJcbiAgICB9IGVsc2UgaWYgKHNlYXJjaEZsaWdodHNRdWVyeS5vdXRib3VuZEFycml2YWxUaW1lV2luZG93KSB7XHJcbiAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5BcnJpdmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQW55dGltZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VhcmNoRmxpZ2h0c1F1ZXJ5LnJldHVybkRlcGFydHVyZVRpbWVXaW5kb3cpIHtcclxuICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuRGVwYXJ0O1xyXG4gICAgfSBlbHNlIGlmIChzZWFyY2hGbGlnaHRzUXVlcnkucmV0dXJuQXJyaXZhbFRpbWVXaW5kb3cpIHtcclxuICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQXJyaXZlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQW55dGltZTtcclxuICAgIH1cclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFtcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEFpcnBvcnRCeUNvZGUoc2VhcmNoRmxpZ2h0c1F1ZXJ5Lm9yaWdpbkFpcnBvcnQpLFxyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0QWlycG9ydEJ5Q29kZShzZWFyY2hGbGlnaHRzUXVlcnkuZGVzdGluYXRpb25BaXJwb3J0KVxyXG4gICAgXSkuc3Vic2NyaWJlKChbZGVwYXJ0TG9jYXRpb24sIGFycml2ZUxvY2F0aW9uXSkgPT4ge1xyXG4gICAgICBpZiAoZGVwYXJ0TG9jYXRpb24gJiYgYXJyaXZlTG9jYXRpb24pIHtcclxuICAgICAgICB0aGlzLmRlcGFydExvY2F0aW9uID0ge1xyXG4gICAgICAgICAgZGVzdGluYXRpb246IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaC5uYW1lLFxyXG4gICAgICAgICAgZ2F0ZXdheTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLmlhdGEsXHJcbiAgICAgICAgICB0ZXJtaW5hbHM6IHRoaXMuc2VhcmNoU2VydmljZS5wcm9jZXNzVGVybWluYWxzKFxyXG4gICAgICAgICAgICBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2gudGVybWluYWxzXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgY291bnRyeTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnksXHJcbiAgICAgICAgICBwb3N0Y29kZTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LnBvc3Rjb2RlLFxyXG4gICAgICAgICAgY291bnRyeUNvZGU6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5Q29kZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5hcnJpdmVMb2NhdGlvbiA9IHtcclxuICAgICAgICAgIGRlc3RpbmF0aW9uOiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2gubmFtZSxcclxuICAgICAgICAgIGdhdGV3YXk6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC5pYXRhLFxyXG4gICAgICAgICAgdGVybWluYWxzOiB0aGlzLnNlYXJjaFNlcnZpY2UucHJvY2Vzc1Rlcm1pbmFscyhcclxuICAgICAgICAgICAgYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLnRlcm1pbmFsc1xyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGNvdW50cnk6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5LFxyXG4gICAgICAgICAgcG9zdGNvZGU6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5wb3N0Y29kZSxcclxuICAgICAgICAgIGNvdW50cnlDb2RlOiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeUNvZGVcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAoc2VhcmNoRmxpZ2h0c1F1ZXJ5LnByZWZlcnJlZENhcnJpZXJzKSB7XHJcbiAgICAgICAgICBsZXQgY2FycmllcnM6IHN0cmluZ1tdID1cclxuICAgICAgICAgICAgc2VhcmNoRmxpZ2h0c1F1ZXJ5LnByZWZlcnJlZENhcnJpZXJzIGFzIHN0cmluZ1tdO1xyXG4gICAgICAgICAgY29uc3QgcHJlZmVycmVkQ2FycmllcnM6IE9CVEFpcmxpbmVzRGV0YWlsc1tdID0gW107XHJcbiAgICAgICAgICBjYXJyaWVycy5tYXAoKHByZWZlcnJlZENhcnJ5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgLmdldEFpcmxpbmVzTGlzdChwcmVmZXJyZWRDYXJyeSlcclxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKChpdGVtczogT0JUQWlybGluZXNEZXRhaWxzW10pID0+IHtcclxuICAgICAgICAgICAgICAgIGl0ZW1zLm1hcCgoaXRlbTogT0JUQWlybGluZXNEZXRhaWxzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmNvZGUgPT09IHByZWZlcnJlZENhcnJ5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlZmVycmVkQ2FycmllcnMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZWZlcnJlZENhcnJpZXJzID0gcHJlZmVycmVkQ2FycmllcnM7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIGFkZCBUcmF2ZWxsZXJzXHJcbiAgICBpZiAoYmFza2V0SXRlbS51c2Vycykge1xyXG4gICAgICBiYXNrZXRJdGVtLnVzZXJzLmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5hZGRUcmF2ZWxsZXIodXNlcik7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VG90YWxCYWdnYWdlKHJlc3VsdDogRmxpZ2h0SXRpbmVyYXJ5KTogbnVtYmVyIHtcclxuICAgIGxldCB0b3RhbCA9IDA7XHJcblxyXG4gICAgY29uc3QgcGFyc2VkQWRkaXRpb25hbCA9IEpTT04ucGFyc2UocmVzdWx0LmFkZGl0aW9uYWwpO1xyXG4gICAgaWYgKHBhcnNlZEFkZGl0aW9uYWwgJiYgcGFyc2VkQWRkaXRpb25hbC5vdXRib3VuZEZsaWdodHMpIHtcclxuICAgICAgcGFyc2VkQWRkaXRpb25hbC5vdXRib3VuZEZsaWdodHMuZm9yRWFjaCgoZmxpZ2h0OiBhbnkpID0+IHtcclxuICAgICAgICBmbGlnaHQuYmFnZ2FnZS5mb3JFYWNoKChiYWc6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGJhZy5hbGxvd2FuY2UgJiYgYmFnLmFsbG93YW5jZSA+IHRvdGFsKSB7XHJcbiAgICAgICAgICAgIHRvdGFsID0gYmFnLmFsbG93YW5jZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKHBhcnNlZEFkZGl0aW9uYWwgJiYgcGFyc2VkQWRkaXRpb25hbC5iYWdnYWdlQWxsb3dhbmNlKSB7XHJcbiAgICAgIHBhcnNlZEFkZGl0aW9uYWwuYmFnZ2FnZUFsbG93YW5jZS5mb3JFYWNoKChiYWdnYWdlQWxsb3c6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGJhZ2dhZ2VBbGxvdy5iYWdnYWdlLnF0eSAmJlxyXG4gICAgICAgICAgTnVtYmVyKGJhZ2dhZ2VBbGxvdy5iYWdnYWdlLnF0eSkgPiB0b3RhbFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdG90YWwgPSBOdW1iZXIoYmFnZ2FnZUFsbG93LmJhZ2dhZ2UucXR5KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0b3RhbDtcclxuICB9XHJcblxyXG4gIGlzR3JvdXBlZEZsaWdodHMoXHJcbiAgICB0b1Rlc3Q6IEZsaWdodFF1b3RlUmVzdWx0QXJyYXlcclxuICApOiB0b1Rlc3QgaXMgRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0W10ge1xyXG4gICAgcmV0dXJuIHRvVGVzdFswXT8udHlwZSA9PT0gJ0ZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCc7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGZpbHRlciB0aGUgcmVzdWx0cywgdGhlbiBzb3J0IHRoZSByZW1haW5kZXJcclxuICAgKiBAdG9kbyAtIEFkZCBmaWx0ZXJzIGZvciB0cmF2ZWwgcG9saWN5LCBmYXJlIHR5cGVzIGFuZCBhbmNpbGxpYXJpZXNcclxuICAgKi9cclxuICBhcHBseUZpbHRlcnMoZmlsdGVyczogRmxpZ2h0RmlsdGVycywgc29ydFZhbHVlOiBGbGlnaHRTb3J0VHlwZXMpOiB2b2lkIHtcclxuICAgIHRoaXMuY3VycmVudEZpbHRlcnMgPSBmaWx0ZXJzO1xyXG4gICAgdGhpcy5jdXJyZW50U29ydCA9IHNvcnRWYWx1ZTtcclxuICAgIC8vIGNvbnNvbGUubG9nKCcrKysgQXBwbHlpbmcgRmlsdGVycyB0byBmbGlnaHRzOiAnLCBmaWx0ZXJzLCAnICsrKycpO1xyXG4gICAgaWYgKHRoaXMuZnVsbFJlc3VsdHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBmaWx0ZXJTZWxlY3RlZEZsaWdodHM6IChcclxuICAgICAgZ3JvdXBzVG9TaG93OiBudW1iZXJbXSxcclxuICAgICAgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtXHJcbiAgICApID0+IChmOiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW4gPSB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHRcclxuICAgICAgPyB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQuaW5ib3VuZEZsaWdodHM/Lmxlbmd0aFxyXG4gICAgICAgID8gKGdyb3Vwc1RvU2hvdzogbnVtYmVyW10sIGRpcmVjdGlvbjogRmxpZ2h0RGlyZWN0aW9uRW51bSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5EdWFsU2luZ2xlSW5ib3VuZCB8fFxyXG4gICAgICAgICAgICAgICAgZ3JvdXBzVG9TaG93LmluY2x1ZGVzKGZsaWdodEl0aW5lcmFyeS51aWQpXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICA6IChncm91cHNUb1Nob3c6IG51bWJlcltdLCBkaXJlY3Rpb246IEZsaWdodERpcmVjdGlvbkVudW0pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZUluYm91bmQgfHxcclxuICAgICAgICAgICAgICAgIGdyb3Vwc1RvU2hvdy5pbmNsdWRlcyhmbGlnaHRJdGluZXJhcnkudWlkKVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgIDogKF9ncm91cHNUb1Nob3c6IG51bWJlcltdLCBkaXJlY3Rpb246IEZsaWdodERpcmVjdGlvbkVudW0pID0+IHtcclxuICAgICAgICAgIHJldHVybiAoX2ZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9O1xyXG5cclxuICAgIGNvbnN0IHRlc3RlciA9IChcclxuICAgICAgZmlsdGVyc1RvdGVzdDogUmVjb3JkPG51bWJlciB8IHN0cmluZywgU2VsZWN0RmlsdGVyPixcclxuICAgICAgdGVzdEZ1bmN0aW9uOiAoXHJcbiAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5LFxyXG4gICAgICAgIHZhbHVlOiBzdHJpbmcgfCBudW1iZXJcclxuICAgICAgKSA9PiBib29sZWFuXHJcbiAgICApID0+IHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBPYmplY3QudmFsdWVzKGZpbHRlcnNUb3Rlc3QpLmZpbHRlcihcclxuICAgICAgICAoZmlsdGVyOiBTZWxlY3RGaWx0ZXIpID0+IGZpbHRlci5zZWxlY3RlZFxyXG4gICAgICApO1xyXG4gICAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXkpID0+IHtcclxuICAgICAgICAgIHJldHVybiAhIXNlbGVjdGVkLmZpbmQoKGZpbHRlcjogU2VsZWN0RmlsdGVyKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0ZXN0RnVuY3Rpb24oZmxpZ2h0SXRpbmVyYXJ5LCBmaWx0ZXIudmFsdWUpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gKF9mbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXkpID0+IHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgcmVwbGFjZUZpZWxkcyA9IChcclxuICAgICAgZmllbGQ6IHN0cmluZyxcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnlcclxuICAgICk6IHN0cmluZyA9PiB7XHJcbiAgICAgIHJldHVybiBmaWVsZFxyXG4gICAgICAgIC5yZXBsYWNlKCdPVVRCT1VORF9ERVBBUlRVUkUnLCAnb3V0Ym91bmRGbGlnaHRzLjAnKVxyXG4gICAgICAgIC5yZXBsYWNlKFxyXG4gICAgICAgICAgJ09VVEJPVU5EX0FSUklWQUwnLFxyXG4gICAgICAgICAgJ291dGJvdW5kRmxpZ2h0cy4nICsgKGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMSlcclxuICAgICAgICApXHJcbiAgICAgICAgLnJlcGxhY2UoJ0lOQk9VTkRfREVQQVJUVVJFJywgJ2luYm91bmRGbGlnaHRzLjAnKVxyXG4gICAgICAgIC5yZXBsYWNlKFxyXG4gICAgICAgICAgJ0lOQk9VTkRfQVJSSVZBTCcsXHJcbiAgICAgICAgICAnaW5ib3VuZEZsaWdodHMuJyArXHJcbiAgICAgICAgICAgICgoZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzIHx8IFtdKS5sZW5ndGggLSAxKVxyXG4gICAgICAgICk7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgaXNCZXR3ZWVuID0gKFxyXG4gICAgICBtaW5tYXg6IE1pbk1heCxcclxuICAgICAgZmllbGQ6IHN0cmluZ1xyXG4gICAgKTogKChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gYm9vbGVhbikgPT4ge1xyXG4gICAgICByZXR1cm4gKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsID0gdGhpcy5oZWxwZXJzLmZyb21PYmplY3QoXHJcbiAgICAgICAgICBmbGlnaHRJdGluZXJhcnksXHJcbiAgICAgICAgICAuLi5yZXBsYWNlRmllbGRzKGZpZWxkLCBmbGlnaHRJdGluZXJhcnkpLnNwbGl0KCcuJylcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiB2YWwgPj0gbWlubWF4Lm1pbiAmJiB2YWwgPD0gbWlubWF4Lm1heDtcclxuICAgICAgfTtcclxuICAgIH07XHJcbiAgICBjb25zdCBpc0hvdXJCZXR3ZWVuID0gKFxyXG4gICAgICBtaW5tYXg6IE1pbk1heCxcclxuICAgICAgZmllbGQ6IHN0cmluZ1xyXG4gICAgKTogKChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gYm9vbGVhbikgPT4ge1xyXG4gICAgICByZXR1cm4gKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsID0gbW9tZW50KFxyXG4gICAgICAgICAgdGhpcy5oZWxwZXJzLmZyb21PYmplY3QoXHJcbiAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeSxcclxuICAgICAgICAgICAgLi4ucmVwbGFjZUZpZWxkcyhmaWVsZCwgZmxpZ2h0SXRpbmVyYXJ5KS5zcGxpdCgnLicpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKS5nZXQoJ2hvdXInKTtcclxuICAgICAgICByZXR1cm4gdmFsID49IG1pbm1heC5taW4gJiYgdmFsIDw9IG1pbm1heC5tYXg7XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGlzVGltZUJldHdlZW4gPSAoXHJcbiAgICAgIG1pbm1heDogTWluTWF4LFxyXG4gICAgICBmaWVsZDogc3RyaW5nXHJcbiAgICApOiAoKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuKSA9PiB7XHJcbiAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpOiBib29sZWFuID0+IHtcclxuICAgICAgICBjb25zdCB2YWwgPSBtb21lbnQoXHJcbiAgICAgICAgICB0aGlzLmhlbHBlcnMuZnJvbU9iamVjdChcclxuICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5LFxyXG4gICAgICAgICAgICAuLi5yZXBsYWNlRmllbGRzKGZpZWxkLCBmbGlnaHRJdGluZXJhcnkpLnNwbGl0KCcuJylcclxuICAgICAgICAgIClcclxuICAgICAgICApLmdldCgnaG91cicpO1xyXG5cclxuICAgICAgICAvLyBub3cgYXR0ZW1wdCB0byBnZXQgdGhlIG1pbiAtIG1heSBuZWVkIHRvIG5vcm1hbGlzZSB0aGlzXHJcbiAgICAgICAgY29uc3QgdmFsMiA9IG1vbWVudChcclxuICAgICAgICAgIHRoaXMuaGVscGVycy5mcm9tT2JqZWN0KFxyXG4gICAgICAgICAgICBmbGlnaHRJdGluZXJhcnksXHJcbiAgICAgICAgICAgIC4uLnJlcGxhY2VGaWVsZHMoZmllbGQsIGZsaWdodEl0aW5lcmFyeSkuc3BsaXQoJy4nKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICkuZ2V0KCdtaW51dGUnKTtcclxuXHJcbiAgICAgICAgY29uc3QgdG90YWxUaW1lOiBudW1iZXIgPSBOdW1iZXIoXHJcbiAgICAgICAgICBgJHt2YWx9LiR7dGhpcy5oZWxwZXJzLm5vcm1hbGlzZU1pbnV0ZVRvQmFzZTEwKHZhbDIpfWBcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiB0b3RhbFRpbWUgPj0gbWlubWF4Lm1pbiAmJiB0b3RhbFRpbWUgPD0gbWlubWF4Lm1heDtcclxuICAgICAgfTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaGFzVmFsdWUgPSAoXHJcbiAgICAgIGZpZWxkOiBzdHJpbmdcclxuICAgICk6ICgoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHRvVGVzdDogc3RyaW5nKSA9PiBib29sZWFuKSA9PiB7XHJcbiAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHRvVGVzdDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsID0gdGhpcy5oZWxwZXJzLmZyb21PYmplY3QoXHJcbiAgICAgICAgICBmbGlnaHRJdGluZXJhcnksXHJcbiAgICAgICAgICAuLi5yZXBsYWNlRmllbGRzKGZpZWxkLCBmbGlnaHRJdGluZXJhcnkpLnNwbGl0KCcuJylcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiB2YWwgPT09IHRvVGVzdDtcclxuICAgICAgfTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgZmllbGRIYXNWYWx1ZSA9IChcclxuICAgICAgZmllbGQ6IGtleW9mIEZsaWdodEpvdXJuZXlcclxuICAgICk6ICgoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSA9PiBib29sZWFuKSA9PiB7XHJcbiAgICAgIHJldHVybiAoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGZsaWdodFtmaWVsZF0gPT09IHZhbHVlO1xyXG4gICAgICB9O1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBvdXRJdGluZXJhcnlUZXN0ZXJzOiAoKFxyXG4gICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeVxyXG4gICAgKSA9PiBib29sZWFuKVtdID0gW107XHJcbiAgICBjb25zdCBpbkl0aW5lcmFyeVRlc3RlcnM6ICgoXHJcbiAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5XHJcbiAgICApID0+IGJvb2xlYW4pW10gPSBbXTtcclxuXHJcbiAgICBjb25zdCBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzOiAoKFxyXG4gICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeVxyXG4gICAgKSA9PiBib29sZWFuKVtdID0gW107XHJcblxyXG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICBpc1RpbWVCZXR3ZWVuKGZpbHRlcnMuYXJyaXZhbFRpbWUsICdPVVRCT1VORF9BUlJJVkFMLmRhdGVUaW1lQXJyaXZpbmcnKVxyXG4gICAgKTtcclxuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgaXNUaW1lQmV0d2VlbihcclxuICAgICAgICBmaWx0ZXJzLmRlcGFydHVyZVRpbWUsXHJcbiAgICAgICAgJ09VVEJPVU5EX0RFUEFSVFVSRS5kYXRlVGltZURlcGFydGluZydcclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzQmV0d2VlbihmaWx0ZXJzLnJldHVybkR1cmF0aW9uLCAnb3V0Ym91bmRUb3RhbER1cmF0aW9uJylcclxuICAgICk7XHJcbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzQmV0d2VlbihmaWx0ZXJzLmR1cmF0aW9uLCAnb3V0Ym91bmRUb3RhbER1cmF0aW9uJylcclxuICAgICk7XHJcbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goaXNCZXR3ZWVuKGZpbHRlcnMucHJpY2UsICd0b3RhbC5wcmljZScpKTtcclxuXHJcbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLnN0b3BzLFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoID09PSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMudG90YWxTdG9wcyxcclxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoICtcclxuICAgICAgICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzIHx8IFtdKS5sZW5ndGggPT09XHJcbiAgICAgICAgICAgIHZhbHVlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLnRvdGFsU3RvcHMsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggPT09IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMuYmFnZ2FnZSxcclxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGJhZ2dhZ2VBcnJheTogbnVtYmVyW10gPSBmbGlnaHRJdGluZXJhcnkuYmFnZ2FnZUFsbG93YW5jZS5tYXAoXHJcbiAgICAgICAgICAgIChiYWdnYWdlQWxsb3dhbmNlOiBCYWdnYWdlQWxsb3dhbmNlKSA9PiBiYWdnYWdlQWxsb3dhbmNlLnF0eVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0IGJhZ2dhZ2U6IG51bWJlciA9IGJhZ2dhZ2VBcnJheS5sZW5ndGhcclxuICAgICAgICAgICAgPyBNYXRoLm1pbiguLi5iYWdnYWdlQXJyYXkpXHJcbiAgICAgICAgICAgIDogMDtcclxuICAgICAgICAgIHJldHVybiBiYWdnYWdlID09PSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoXHJcbiAgICAgICAgZmlsdGVycy5kZXBhdHVyZUFpcnBvcnQsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0c1swXT8ub3JpZ2luQWlycG9ydCA9PT0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMuYXJyaXZhbEFpcnBvcnQsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzW1xyXG4gICAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMVxyXG4gICAgICAgICAgICBdPy5kZXN0aW5hdGlvbkFpcnBvcnQgPT09IHZhbHVlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgaXNCZXR3ZWVuKGZpbHRlcnMuZHVyYXRpb24sICdvdXRib3VuZFRvdGFsRHVyYXRpb24nKVxyXG4gICAgKTtcclxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKGlzQmV0d2VlbihmaWx0ZXJzLnByaWNlLCAndG90YWwucHJpY2UnKSk7XHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goaXNCZXR3ZWVuKGZpbHRlcnMucHJpY2UsICd0b3RhbC5wcmljZScpKTtcclxuXHJcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgaXNUaW1lQmV0d2VlbihcclxuICAgICAgICBmaWx0ZXJzLnJldHVybkFycml2YWxUaW1lLFxyXG4gICAgICAgICdJTkJPVU5EX0FSUklWQUwuZGF0ZVRpbWVBcnJpdmluZydcclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzVGltZUJldHdlZW4oXHJcbiAgICAgICAgZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZSxcclxuICAgICAgICAnT1VUQk9VTkRfQVJSSVZBTC5kYXRlVGltZUFycml2aW5nJ1xyXG4gICAgICApXHJcbiAgICApO1xyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzVGltZUJldHdlZW4oXHJcbiAgICAgICAgZmlsdGVycy5yZXR1cm5EZXBhcnR1cmVUaW1lLFxyXG4gICAgICAgICdJTkJPVU5EX0RFUEFSVFVSRS5kYXRlVGltZURlcGFydGluZydcclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgaXNCZXR3ZWVuKGZpbHRlcnMucmV0dXJuRHVyYXRpb24sICdpbmJvdW5kVG90YWxEdXJhdGlvbicpXHJcbiAgICApO1xyXG5cclxuICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgaXNCZXR3ZWVuKGZpbHRlcnMucmV0dXJuRHVyYXRpb24sICdvdXRib3VuZFRvdGFsRHVyYXRpb24nKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMuc3RvcHMsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzLmxlbmd0aCA9PT0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMuc3RvcHMsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggPT09IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoXHJcbiAgICAgICAgZmlsdGVycy50b3RhbFN0b3BzLFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggK1xyXG4gICAgICAgICAgICAgIChmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHMgfHwgW10pLmxlbmd0aCA9PT1cclxuICAgICAgICAgICAgdmFsdWVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLmJhZ2dhZ2UsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBiYWdnYWdlQXJyYXk6IG51bWJlcltdID0gZmxpZ2h0SXRpbmVyYXJ5LmJhZ2dhZ2VBbGxvd2FuY2UubWFwKFxyXG4gICAgICAgICAgICAoYmFnZ2FnZUFsbG93YW5jZTogQmFnZ2FnZUFsbG93YW5jZSkgPT4gYmFnZ2FnZUFsbG93YW5jZS5xdHlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zdCBiYWdnYWdlOiBudW1iZXIgPSBiYWdnYWdlQXJyYXkubGVuZ3RoXHJcbiAgICAgICAgICAgID8gTWF0aC5taW4oLi4uYmFnZ2FnZUFycmF5KVxyXG4gICAgICAgICAgICA6IDA7XHJcbiAgICAgICAgICByZXR1cm4gYmFnZ2FnZSA9PT0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMuYmFnZ2FnZSxcclxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGJhZ2dhZ2VBcnJheTogbnVtYmVyW10gPSBmbGlnaHRJdGluZXJhcnkuYmFnZ2FnZUFsbG93YW5jZS5tYXAoXHJcbiAgICAgICAgICAgIChiYWdnYWdlQWxsb3dhbmNlOiBCYWdnYWdlQWxsb3dhbmNlKSA9PiBiYWdnYWdlQWxsb3dhbmNlLnF0eVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0IGJhZ2dhZ2U6IG51bWJlciA9IGJhZ2dhZ2VBcnJheS5sZW5ndGhcclxuICAgICAgICAgICAgPyBNYXRoLm1pbiguLi5iYWdnYWdlQXJyYXkpXHJcbiAgICAgICAgICAgIDogMDtcclxuICAgICAgICAgIHJldHVybiBiYWdnYWdlID09PSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLmRlcGF0dXJlUmV0dXJuQWlycG9ydCxcclxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIHJldHVybiBmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHNbMF0/Lm9yaWdpbkFpcnBvcnQgPT09IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLmRlcGF0dXJlUmV0dXJuQWlycG9ydCxcclxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIHJldHVybiBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzWzBdPy5vcmlnaW5BaXJwb3J0ID09PSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLmFycml2YWxSZXR1cm5BaXJwb3J0LFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzW1xyXG4gICAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXHJcbiAgICAgICAgICAgIF0/LmRlc3RpbmF0aW9uQWlycG9ydCA9PT0gdmFsdWVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMuYXJyaXZhbFJldHVybkFpcnBvcnQsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzW1xyXG4gICAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMVxyXG4gICAgICAgICAgICBdPy5kZXN0aW5hdGlvbkFpcnBvcnQgPT09IHZhbHVlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBvdXRKb3VybmV5VGVzdGVyczogKChcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5XHJcbiAgICApID0+IGJvb2xlYW4pW10gPSBbXTtcclxuICAgIG91dEpvdXJuZXlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihmaWx0ZXJzLmNsYXNzZXMsIGZpZWxkSGFzVmFsdWUoJ2NhYmluQ2xhc3MnKSlcclxuICAgICk7XHJcbiAgICBvdXRKb3VybmV5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoZmlsdGVycy5haXJsaW5lcywgZmllbGRIYXNWYWx1ZSgnbWFya2V0aW5nQ2FycmllcicpKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBpbkpvdXJuZXlUZXN0ZXJzOiAoKFxyXG4gICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXlcclxuICAgICkgPT4gYm9vbGVhbilbXSA9IFtdO1xyXG4gICAgaW5Kb3VybmV5VGVzdGVycy5wdXNoKHRlc3RlcihmaWx0ZXJzLmNsYXNzZXMsIGZpZWxkSGFzVmFsdWUoJ2NhYmluQ2xhc3MnKSkpO1xyXG4gICAgaW5Kb3VybmV5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoZmlsdGVycy5haXJsaW5lcywgZmllbGRIYXNWYWx1ZSgnbWFya2V0aW5nQ2FycmllcicpKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBvdXRGaWx0ZXJJdGluZXJhcmllcyA9IChcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksXHJcbiAgICAgIGdyb3VwSW5kZXg6IG51bWJlclxyXG4gICAgKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5yZWR1Y2UoXHJcbiAgICAgICAgICAoXHJcbiAgICAgICAgICAgIGFjYzogYm9vbGVhbixcclxuICAgICAgICAgICAgdGVzdGVyMTogKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuXHJcbiAgICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgYWNjID0gYWNjICYmIHRlc3RlcjEoZmxpZ2h0SXRpbmVyYXJ5KTtcclxuICAgICAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB0cnVlXHJcbiAgICAgICAgKSAmJlxyXG4gICAgICAgICghZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cyB8fFxyXG4gICAgICAgICAgISEoZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cyB8fCBbXSkuZmluZChcclxuICAgICAgICAgICAgKGZsaWdodEpvdXJuZXk6IEZsaWdodEpvdXJuZXkpOiBib29sZWFuID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gISFvdXRKb3VybmV5VGVzdGVycy5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgICAgIGFjYzogYm9vbGVhbixcclxuICAgICAgICAgICAgICAgICAgdGVzdGVyMjogKFxyXG4gICAgICAgICAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leVxyXG4gICAgICAgICAgICAgICAgICApID0+IGJvb2xlYW5cclxuICAgICAgICAgICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gYWNjICYmIHRlc3RlcjIoZmxpZ2h0Sm91cm5leSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICkpXHJcbiAgICAgICk7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgaW5GaWx0ZXJJdGluZXJhcmllcyA9IChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIGluSXRpbmVyYXJ5VGVzdGVycy5yZWR1Y2UoXHJcbiAgICAgICAgICAoXHJcbiAgICAgICAgICAgIGFjYzogYm9vbGVhbixcclxuICAgICAgICAgICAgdGVzdGVyMTogKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuXHJcbiAgICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGFjYyAmJiB0ZXN0ZXIxKGZsaWdodEl0aW5lcmFyeSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICkgJiZcclxuICAgICAgICAoIWZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cz8ubGVuZ3RoIHx8XHJcbiAgICAgICAgICAhIShmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHMgfHwgW10pLmZpbmQoXHJcbiAgICAgICAgICAgIChmbGlnaHRKb3VybmV5OiBGbGlnaHRKb3VybmV5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICEhaW5Kb3VybmV5VGVzdGVycy5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgICAgIGFjYzogYm9vbGVhbixcclxuICAgICAgICAgICAgICAgICAgdGVzdGVyMjogKFxyXG4gICAgICAgICAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leVxyXG4gICAgICAgICAgICAgICAgICApID0+IGJvb2xlYW5cclxuICAgICAgICAgICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gYWNjICYmIHRlc3RlcjIoZmxpZ2h0Sm91cm5leSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICkpXHJcbiAgICAgICk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGluRHVhbEZpbHRlckl0aW5lcmFyaWVzID0gKFxyXG4gICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeVxyXG4gICAgKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5yZWR1Y2UoXHJcbiAgICAgICAgICAoXHJcbiAgICAgICAgICAgIGFjYzogYm9vbGVhbixcclxuICAgICAgICAgICAgdGVzdGVyMTogKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuXHJcbiAgICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGFjYyAmJiB0ZXN0ZXIxKGZsaWdodEl0aW5lcmFyeSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICkgJiZcclxuICAgICAgICAoIWZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHM/Lmxlbmd0aCB8fFxyXG4gICAgICAgICAgISEoZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cyB8fCBbXSkuZmluZChcclxuICAgICAgICAgICAgKGZsaWdodEpvdXJuZXk6IEZsaWdodEpvdXJuZXkpOiBib29sZWFuID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gISFpbkpvdXJuZXlUZXN0ZXJzLnJlZHVjZShcclxuICAgICAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgICAgYWNjOiBib29sZWFuLFxyXG4gICAgICAgICAgICAgICAgICB0ZXN0ZXIyOiAoXHJcbiAgICAgICAgICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5XHJcbiAgICAgICAgICAgICAgICAgICkgPT4gYm9vbGVhblxyXG4gICAgICAgICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBhY2MgJiYgdGVzdGVyMihmbGlnaHRKb3VybmV5KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSlcclxuICAgICAgKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWRSdWxlU3VtbWFyeTogUmVjb3JkUnVsZUFjdGlvbiA9XHJcbiAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWRbXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0Py5qb3VybmV5SGFzaFxyXG4gICAgICBdIHx8IHt9O1xyXG5cclxuICAgIGNvbnN0IGhhc0ZpZWxkID0gPFQ+KFxyXG4gICAgICBmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxyXG4gICAgICBmaWVsZDogc3RyaW5nLFxyXG4gICAgICBkZWY6IFRcclxuICAgICk6IFQgPT4ge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIHRoaXMuaGVscGVycy5maWVsZEZyb21PYmplY3QodGhpcy5fcnVsZUFjdGlvblN1bW1hcnksIFtcclxuICAgICAgICAgICdqb3VybmV5V2hlblNlbGVjdGVkJyxcclxuICAgICAgICAgIGZsaWdodC5qb3VybmV5SGFzaCxcclxuICAgICAgICAgIGZpZWxkXHJcbiAgICAgICAgXSkgfHxcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZmllbGRGcm9tT2JqZWN0KHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LCBbXHJcbiAgICAgICAgICAnd2hlblNlbGVjdGVkQWxvbmUnLFxyXG4gICAgICAgICAgZmxpZ2h0LmpvdXJuZXlIYXNoLFxyXG4gICAgICAgICAgZmllbGRcclxuICAgICAgICBdKSB8fFxyXG4gICAgICAgIHRoaXMuaGVscGVycy5maWVsZEZyb21PYmplY3Qoc2VsZWN0ZWRSdWxlU3VtbWFyeSwgW1xyXG4gICAgICAgICAgZmxpZ2h0LmpvdXJuZXlIYXNoLFxyXG4gICAgICAgICAgZmllbGRcclxuICAgICAgICBdKSB8fFxyXG4gICAgICAgIGRlZlxyXG4gICAgICApO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBzZXRTZWxlY3RlZCA9IChmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSA9PiB7XHJcbiAgICAgIGZsaWdodC5zZWxlY3RlZCA9IGZsaWdodC51aWQgPT09IHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodD8udWlkO1xyXG4gICAgICBmbGlnaHQudW5hdmFpbGFibGUgPSBoYXNGaWVsZChmbGlnaHQsICd1bmF2YWlsYWJsZScsIGZhbHNlKTtcclxuXHJcbiAgICAgIGZsaWdodC51bmF2YWlsYWJsZU1lc3NhZ2UgPSBoYXNGaWVsZChmbGlnaHQsICd1bmF2YWlsYWJsZU1lc3NhZ2UnLCAnJyk7XHJcbiAgICAgIGZsaWdodC5yZXF1aXJlc1JlYXNvbiA9IGhhc0ZpZWxkKGZsaWdodCwgJ3JlcXVpcmVzUmVhc29uJywgZmFsc2UpO1xyXG4gICAgICBmbGlnaHQucmVxdWlyZXNSZWFzb25NZXNzYWdlID0gaGFzRmllbGQoXHJcbiAgICAgICAgZmxpZ2h0LFxyXG4gICAgICAgICdyZXF1aXJlc1JlYXNvbk1lc3NhZ2UnLFxyXG4gICAgICAgICcnXHJcbiAgICAgICk7XHJcblxyXG4gICAgICByZXR1cm4gZmxpZ2h0O1xyXG4gICAgfTtcclxuICAgIGlmICh0aGlzLmlzR3JvdXBlZEZsaWdodHModGhpcy5mdWxsUmVzdWx0cykpIHtcclxuICAgICAgY29uc3QgZ3JvdXBlZEZsaWdodHM6IEdyb3VwRmxpZ2h0cyA9IHRoaXMuX2dyb3VwZWQuZmluZChcclxuICAgICAgICAoaXRlbTogR3JvdXBGbGlnaHRzKSA9PiBpdGVtLnJlZmVyZW5jZUlEID09PSB0aGlzLnNlbGVjdGVkR3JvdXBJZFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnJlc3VsdHMubmV4dChcclxuICAgICAgICB0aGlzLmhlbHBlcnNcclxuICAgICAgICAgIC5jbG9uZTxGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHRbXT4odGhpcy5mdWxsUmVzdWx0cylcclxuICAgICAgICAgIC5maWx0ZXIoKHJlc3VsdDE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gISFyZXN1bHQxO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5tYXAoXHJcbiAgICAgICAgICAgIChyZXN1bHQyOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQpOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGZpbHRlckl0aW5lcmFyaWVzID1cclxuICAgICAgICAgICAgICAgIHJlc3VsdDIuZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kIHx8XHJcbiAgICAgICAgICAgICAgICByZXN1bHQyLmRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5EdWFsU2luZ2xlT3V0Ym91bmRcclxuICAgICAgICAgICAgICAgICAgPyBvdXRGaWx0ZXJJdGluZXJhcmllc1xyXG4gICAgICAgICAgICAgICAgICA6IHJlc3VsdDIuZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkR1YWxTaW5nbGVJbmJvdW5kXHJcbiAgICAgICAgICAgICAgICAgID8gaW5EdWFsRmlsdGVySXRpbmVyYXJpZXNcclxuICAgICAgICAgICAgICAgICAgOiBpbkZpbHRlckl0aW5lcmFyaWVzO1xyXG5cclxuICAgICAgICAgICAgICByZXN1bHQyLmNsYXNzZXMgPSBPYmplY3QuZW50cmllcyhyZXN1bHQyLmNsYXNzZXMpLnJlZHVjZShcclxuICAgICAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgICAgYWNjdW06IFJlY29yZDxPQlRGbGlnaHRDYWJpbkNsYXNzLCBGbGlnaHRJdGluZXJhcnlDbGFzcz4sXHJcbiAgICAgICAgICAgICAgICAgIFtrZXksIHZhbHVlXTogW09CVEZsaWdodENhYmluQ2xhc3MsIEZsaWdodEl0aW5lcmFyeUNsYXNzXVxyXG4gICAgICAgICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5mbGlnaHRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRKb3VybmV5cyA9IHZhbHVlLmZsaWdodHNcclxuICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gISFmbGlnaHRJdGluZXJhcnlcclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclNlbGVjdGVkRmxpZ2h0cyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkRmxpZ2h0cz8uZmxpZ2h0c1tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGVscGVycy5PQlRGbGlnaHRDYWJpbkNsYXNzVG9GbGlnaHRDYWJpbkNsYXNzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBdIHx8IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDIuZGlyZWN0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZmlsdGVySXRpbmVyYXJpZXMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAubWFwKHNldFNlbGVjdGVkKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRKb3VybmV5cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBhY2N1bVtrZXldID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi52YWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmxpZ2h0czogZmlsdGVyZWRKb3VybmV5c1xyXG4gICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHt9IGFzIFJlY29yZDxPQlRGbGlnaHRDYWJpbkNsYXNzLCBGbGlnaHRJdGluZXJhcnlDbGFzcz5cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHQyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAuZmlsdGVyKChyZXN1bHQyOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDIgJiYgT2JqZWN0LmtleXMocmVzdWx0Mi5jbGFzc2VzKS5sZW5ndGggPiAwO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5zb3J0KHRoaXMuX3NvcnRHcm91cGVkUm91dGluZXNbc29ydFZhbHVlXSkgYXMgRmxpZ2h0UXVvdGVSZXN1bHRBcnJheVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZXN1bHRzLm5leHQoXHJcbiAgICAgICAgT2JqZWN0LmZyZWV6ZShcclxuICAgICAgICAgIHRoaXMuaGVscGVyc1xyXG4gICAgICAgICAgICAuY2xvbmUodGhpcy5mdWxsUmVzdWx0cylcclxuICAgICAgICAgICAgLm1hcCgocmVzdWx0NDogRmxpZ2h0QWxsUXVvdGVSZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICBsZXQgbmV3Sm91cm5leXM6IGFueSA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHQ0LmpvdXJuZXlzKTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGZpbHRlcnMuZmxpZ2h0TnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdKb3VybmV5cyA9IG5ld0pvdXJuZXlzLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgKGZsaWdodEl0ZW06IEZsaWdodEl0aW5lcmFyeSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG91dGJvdW5kRmxpZ2h0cyA9IGZsaWdodEl0ZW0ub3V0Ym91bmRGbGlnaHRzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAob3V0RmxpZ2h0KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRGbGlnaHQubWFya2V0aW5nRmxpZ2h0TnVtYmVyID09PSBmaWx0ZXJzLmZsaWdodE51bWJlclxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5ib3VuZEZsaWdodHMgPSBmbGlnaHRJdGVtLmluYm91bmRGbGlnaHRzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAoaW5GbGlnaHQpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluRmxpZ2h0Lm1hcmtldGluZ0ZsaWdodE51bWJlciA9PT0gZmlsdGVycy5mbGlnaHROdW1iZXJcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvdXRib3VuZEZsaWdodHMgfHwgaW5ib3VuZEZsaWdodHMpIHJldHVybiBmbGlnaHRJdGVtO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgbmV3Sm91cm5leXMgPSBuZXdKb3VybmV5cy5maWx0ZXIob3V0RmlsdGVySXRpbmVyYXJpZXMpO1xyXG5cclxuICAgICAgICAgICAgICBpZiAodGhpcy5pc1JldHVybikge1xyXG4gICAgICAgICAgICAgICAgbGV0IG5ld0luSm91cm5leXM6IGFueSA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHQ0LmpvdXJuZXlzKTtcclxuICAgICAgICAgICAgICAgIG5ld0luSm91cm5leXMgPSBuZXdJbkpvdXJuZXlzLmZpbHRlcihpbkZpbHRlckl0aW5lcmFyaWVzKTtcclxuICAgICAgICAgICAgICAgIG5ld0pvdXJuZXlzID0gdGhpcy5tZXJnZU91dEluQm91bmQobmV3Sm91cm5leXMsIG5ld0luSm91cm5leXMpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBuZXdKb3VybmV5cy5zb3J0KHRoaXMuX3NvcnRJdGluYXJ5Um91dGluZXNbc29ydFZhbHVlXSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdGbGlnaHRBbGxRdW90ZVJlc3VsdCcsXHJcbiAgICAgICAgICAgICAgICBqb3VybmV5czogPEZsaWdodEl0aW5lcmFyeVtdPm5ld0pvdXJuZXlzXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApIGFzIEZsaWdodFF1b3RlUmVzdWx0QXJyYXlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1lcmdlT3V0SW5Cb3VuZChcclxuICAgIG91dGJvdW5kOiBGbGlnaHRJdGluZXJhcnlbXSxcclxuICAgIGluYm91bmQ6IEZsaWdodEl0aW5lcmFyeVtdXHJcbiAgKTogRmxpZ2h0SXRpbmVyYXJ5W10ge1xyXG4gICAgY29uc3QgZmxpZ2h0cyA9IE9iamVjdC52YWx1ZXMoXHJcbiAgICAgIFsuLi5vdXRib3VuZCwgLi4uaW5ib3VuZF0ucmVkdWNlKChyZXN1bHQsIHsgdWlkLCAuLi5yZXN0IH0pID0+IHtcclxuICAgICAgICBpZiAoIXJlc3VsdFt1aWRdKSB7XHJcbiAgICAgICAgICByZXN1bHRbdWlkXSA9IHtcclxuICAgICAgICAgICAgLi4uKHJlc3VsdFt1aWRdIHx8IHt9KSxcclxuICAgICAgICAgICAgdWlkLFxyXG4gICAgICAgICAgICAuLi5yZXN0XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9LCBbXSlcclxuICAgICk7XHJcbiAgICByZXR1cm4gZmxpZ2h0cztcclxuICB9XHJcblxyXG4gIHVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHM6IEZsaWdodFF1b3RlUmVzdWx0QXJyYXkpOiBJQ2hlYXBlc3RQcmljZSB7XHJcbiAgICBpZiAoIXJlc3VsdHMubGVuZ3RoIHx8IHRoaXMuc2VhcmNoU2VydmljZS5pc0ZsaWdodHNHcm91cGVkKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGpvdXJuZXlzID0gKHJlc3VsdHNbMF0gYXMgRmxpZ2h0QWxsUXVvdGVSZXN1bHQpLmpvdXJuZXlzO1xyXG4gICAgaWYgKCFqb3VybmV5cy5sZW5ndGgpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBjdXJyZW5jeSA9IGpvdXJuZXlzWzBdLnRvdGFsLmN1cnJlbmN5O1xyXG4gICAgcmV0dXJuIGpvdXJuZXlzLnJlZHVjZShcclxuICAgICAgKGNoZWFwZXN0UHJpY2U6IElDaGVhcGVzdFByaWNlLCByZXN1bHQ6IEZsaWdodEl0aW5lcmFyeSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHByaWNlID0gcmVzdWx0LnRvdGFsLnByaWNlO1xyXG4gICAgICAgIGlmIChjaGVhcGVzdFByaWNlLmFtb3VudCA+IHByaWNlKSBjaGVhcGVzdFByaWNlLmFtb3VudCA9IHByaWNlO1xyXG4gICAgICAgIHJldHVybiBjaGVhcGVzdFByaWNlO1xyXG4gICAgICB9LFxyXG4gICAgICB7IGFtb3VudDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsIGN1cnJlbmN5Q29kZTogY3VycmVuY3kgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHNlbGVjdEdyb3VwZWRGbGlnaHQoXHJcbiAgICBzZWxlY3RlZEZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXHJcbiAgICBkaXJlY3Rpb246IEZsaWdodERpcmVjdGlvbkVudW0sXHJcbiAgICBncm91cElkOiBudW1iZXJcclxuICApIHtcclxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPVxyXG4gICAgICBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xyXG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgYmFza2V0ICYmXHJcbiAgICAgIHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUub25lV2F5ICYmXHJcbiAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5PdXRib3VuZFxyXG4gICAgKSB7XHJcbiAgICAgIC8vIFRPRE8gYmVjb3VzZSBwb3AtdXAgaXMgbm90IHJlYWR5IEkgY29tbWVudGVkIHRoZSBjb2RlLlxyXG4gICAgICAvLyB0aGlzLm1vZGFsU2VydmljZS5vcGVuKCBNb2RhbFR5cGVzLkZsaWdodEV4dHJhc0RpYWxvZ0NvbXBvbmVudCwgeyBjZW50ZXJlZDogdHJ1ZSB9LCB7IGZsaWdodDogc2VsZWN0ZWRGbGlnaHQgfSkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAvLyAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgdGhpcy5ib29rU2luZ2xlRmxpZ2h0KGludEJhc2tldCwgc2VsZWN0ZWRGbGlnaHQpO1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgYmFza2V0ICYmXHJcbiAgICAgIHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuICYmXHJcbiAgICAgIChkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmQgfHxcclxuICAgICAgICBkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZU91dGJvdW5kKVxyXG4gICAgKSB7XHJcbiAgICAgIGlmIChzZWxlY3RlZEZsaWdodC5zZWxlY3RlZCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwSWQgPSAtMTtcclxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycyh0aGlzLmN1cnJlbnRGaWx0ZXJzLCB0aGlzLmN1cnJlbnRTb3J0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQgPSBzZWxlY3RlZEZsaWdodDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBJZCA9IGdyb3VwSWQ7XHJcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnModGhpcy5jdXJyZW50RmlsdGVycywgdGhpcy5jdXJyZW50U29ydCk7XHJcbiAgICAgICAgdGhpcy5fdXBkYXRlVHJhdmVsUG9saWNpZXMoKTtcclxuICAgICAgfVxyXG4gICAgICBzZWxlY3RlZEZsaWdodC5zZWxlY3RlZCA9ICFzZWxlY3RlZEZsaWdodC5zZWxlY3RlZDtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgYmFza2V0ICYmXHJcbiAgICAgIHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuICYmXHJcbiAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5JbmJvdW5kICYmXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZG9Cb29raW5nKFxyXG4gICAgICAgIGludEJhc2tldCxcclxuICAgICAgICBzZWxlY3RlZEZsaWdodCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBvdXRib3VuZEZsaWdodHM6IFtcclxuICAgICAgICAgICAgLi4uc2VsZWN0ZWRGbGlnaHQub3V0Ym91bmRGbGlnaHRzLm1hcChcclxuICAgICAgICAgICAgICAoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCBzZWdtZW50SW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFrZVNjaGVtYUZsaWdodHMoXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodCxcclxuICAgICAgICAgICAgICAgICAgJ291dGJvdW5kJyxcclxuICAgICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgICAgc2VnbWVudEluZGV4XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgXSxcclxuICAgICAgICAgIGluYm91bmRGbGlnaHRzOiBbXHJcbiAgICAgICAgICAgIC4uLnNlbGVjdGVkRmxpZ2h0LmluYm91bmRGbGlnaHRzLm1hcChcclxuICAgICAgICAgICAgICAoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCBzZWdtZW50SW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFrZVNjaGVtYUZsaWdodHMoXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodCxcclxuICAgICAgICAgICAgICAgICAgJ2luYm91bmQnLFxyXG4gICAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgICBzZWdtZW50SW5kZXhcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgICAgam91cm5leVR5cGU6ICdyb3VuZHRyaXAnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmdVVEMsXHJcbiAgICAgICAgc2VsZWN0ZWRGbGlnaHQuaW5ib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmdVVENcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0LnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodCA9IG51bGw7XHJcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKHRoaXMuY3VycmVudEZpbHRlcnMsIHRoaXMuY3VycmVudFNvcnQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIGJhc2tldCAmJlxyXG4gICAgICB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaC5jaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLnJldHVybiAmJlxyXG4gICAgICBkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZUluYm91bmQgJiZcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0XHJcbiAgICApIHtcclxuICAgICAgdGhpcy5ib29rU2luZ2xlRmxpZ2h0KGludEJhc2tldCwgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0KTtcclxuICAgICAgdGhpcy5ib29rU2luZ2xlRmxpZ2h0KGludEJhc2tldCwgc2VsZWN0ZWRGbGlnaHQpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0ID0gbnVsbDtcclxuICAgICAgdGhpcy5hcHBseUZpbHRlcnModGhpcy5jdXJyZW50RmlsdGVycywgdGhpcy5jdXJyZW50U29ydCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgX3VwZGF0ZVRyYXZlbFBvbGljaWVzKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0IHx8XHJcbiAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWRbXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0LmpvdXJuZXlIYXNoXHJcbiAgICAgIF0gfHxcclxuICAgICAgIXRoaXMubXVsdGkgfHxcclxuICAgICAgdGhpcy5tdWx0aS5sZW5ndGggPT09IDBcclxuICAgICkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBtdWx0aUluYm91bmRzID0gKHRoaXMubXVsdGkgfHwgW10pLnJlZHVjZShcclxuICAgICAgKGFjYzogRmxpZ2h0SXRpbmVyYXJ5W10sIGl0ZW06IEZsaWdodE11bHRpKSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0ub3JkZXIgPT09IDEgJiYgaXRlbS5yZXN1bHRzICYmIGl0ZW0ucmVzdWx0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBhY2MgPSBhY2MuY29uY2F0KGl0ZW0ucmVzdWx0cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgIH0sXHJcbiAgICAgIFtdXHJcbiAgICApO1xyXG4gICAgaWYgKG11bHRpSW5ib3VuZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmFwcGx5RmxpZ2h0UnVsZXNcclxuICAgICAgICAuZmV0Y2hPbmUoe1xyXG4gICAgICAgICAgc2VsZWN0ZWRPdXRib3VuZEZsaWdodDogdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0LFxyXG4gICAgICAgICAgYXZhaWxhYmxlSW5ib3VuZEZsaWdodHM6IG11bHRpSW5ib3VuZHNcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5waXBlKHRha2UoMSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgocnVsZXM6IFJ1bGVBY3Rpb25TdW1tYXJ5SW50ZXJmYWNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocnVsZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkgPSB0aGlzLmhlbHBlcnMubWVyZ2VPYmplY3RzKFxyXG4gICAgICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LFxyXG4gICAgICAgICAgICAgIHJ1bGVzXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuX2FwcGx5RmlsdGVyKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJvb2tTaW5nbGVGbGlnaHQoXHJcbiAgICBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlLFxyXG4gICAgc2VsZWN0ZWRGbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zXHJcbiAgKSB7XHJcbiAgICB0aGlzLmRvQm9va2luZyhcclxuICAgICAgaW50QmFza2V0LFxyXG4gICAgICBzZWxlY3RlZEZsaWdodCxcclxuICAgICAge1xyXG4gICAgICAgIG91dGJvdW5kRmxpZ2h0czogc2VsZWN0ZWRGbGlnaHQub3V0Ym91bmRGbGlnaHRzLm1hcChcclxuICAgICAgICAgIChmbGlnaHQ6IEZsaWdodEpvdXJuZXksIHNlZ21lbnRJbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1ha2VTY2hlbWFGbGlnaHRzKGZsaWdodCwgJ291dGJvdW5kJywgMCwgc2VnbWVudEluZGV4KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApLFxyXG4gICAgICAgIGluYm91bmRGbGlnaHRzOiBbXSxcclxuICAgICAgICBqb3VybmV5VHlwZTogJ3NpbmdsZSdcclxuICAgICAgfSxcclxuICAgICAgc2VsZWN0ZWRGbGlnaHQub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZG9Cb29raW5nKFxyXG4gICAgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSxcclxuICAgIHNlbGVjdGVkRmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcclxuICAgIHNjaGVtYURldGFpbHM6IGFueSxcclxuICAgIG91dGJvdW5kRGF0ZTogc3RyaW5nLFxyXG4gICAgaW5ib3VuZERhdGU/OiBzdHJpbmdcclxuICApOiBQcm9taXNlPERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnM+IHtcclxuICAgIGNvbnN0IHsgc291cmNlSWQsIGNvMlBlckl0ZW0sIGNvMlBlclBhc3NlbmdlciwgdG90YWwgfSA9IHNlbGVjdGVkRmxpZ2h0O1xyXG4gICAgY29uc3QgYm9va2luZzogQWRkSXRlbVRvQmFza2V0TXV0YXRpb25WYXJpYWJsZXMgPSB7XHJcbiAgICAgIGFkdWx0czogdGhpcy5hZHVsdHMsXHJcbiAgICAgIGJhc2tldDogaW50QmFza2V0LmlkLFxyXG4gICAgICBjaGlsZHJlbjogdGhpcy5jaGlsZHJlbixcclxuICAgICAgY28yUGVySXRlbSxcclxuICAgICAgY28yUGVyUGFzc2VuZ2VyLFxyXG4gICAgICBjdXJyZW5jeTogdG90YWwuY3VycmVuY3kgYXMgQ3VycmVuY3lDb2RlLFxyXG4gICAgICBkZXRhaWw6IHNjaGVtYURldGFpbHMsXHJcbiAgICAgIHByaWNlOiB0b3RhbC5wcmljZSxcclxuICAgICAgc2VhcmNoUXVlcnk6IHRoaXMucmVzdWx0UXVlcnksXHJcbiAgICAgIHNlcnZpY2U6IHNvdXJjZUlkLnRvU3RyaW5nKCksXHJcbiAgICAgIG91dGJvdW5kRGF0ZVxyXG4gICAgfTtcclxuICAgIGlmIChpbmJvdW5kRGF0ZSkge1xyXG4gICAgICBib29raW5nLmluYm91bmREYXRlID0gaW5ib3VuZERhdGU7XHJcbiAgICB9XHJcbiAgICBjb25zdCB3aGF0SGFwcGVuZWQgPSBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgIGJvb2tpbmcsXHJcbiAgICAgIGludEJhc2tldCxcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxyXG4gICAgICB0aGlzLnRyYXZlbGxlcnMsXHJcbiAgICAgIHNlbGVjdGVkRmxpZ2h0LnJlcXVpcmVzUmVhc29uXHJcbiAgICApO1xyXG4gICAgaWYgKHdoYXRIYXBwZW5lZCA9PT0gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5yZXNlYXJjaCkge1xyXG4gICAgICB0aGlzLnBlcmZvcm1TZWFyY2goKTtcclxuICAgIH1cclxuICAgIHJldHVybiB3aGF0SGFwcGVuZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1ha2VTY2hlbWFGbGlnaHRzKFxyXG4gICAgc2VsZWN0ZWRGbGlnaHQ6IEZsaWdodEpvdXJuZXksXHJcbiAgICBmbGlnaHRHcm91cDogJ291dGJvdW5kJyB8ICdpbmJvdW5kJyxcclxuICAgIGdyb3VwSW5kZXg6IG51bWJlcixcclxuICAgIHNlZ21lbnRJbmRleDogbnVtYmVyXHJcbiAgKTogYW55IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLnNlbGVjdGVkRmxpZ2h0LFxyXG4gICAgICBqb3VybmV5SW5mbzoge1xyXG4gICAgICAgIGZsaWdodEdyb3VwLFxyXG4gICAgICAgIGdyb3VwSW5kZXgsXHJcbiAgICAgICAgc2VnbWVudEluZGV4XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG4gIGFzeW5jIGFkZEZsaWdodEpvdXJuZXlzVG9CYXNrZXQoXHJcbiAgICBmbGlnaHRRdW90ZTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcclxuICApOiBQcm9taXNlPERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnM+IHtcclxuICAgIGlmIChmbGlnaHRRdW90ZS51bmF2YWlsYWJsZSkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPVxyXG4gICAgICBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xyXG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xyXG4gICAgaWYgKGJhc2tldCkge1xyXG4gICAgICBjb25zdCB7IHNvdXJjZUlkLCBjbzJQZXJJdGVtLCBjbzJQZXJQYXNzZW5nZXIsIHRvdGFsIH0gPSBmbGlnaHRRdW90ZTtcclxuICAgICAgY29uc3Qgb3V0Ym91bmREYXRlOiBhbnkgPSBtb21lbnQoXHJcbiAgICAgICAgZmxpZ2h0UXVvdGUub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGluYm91bmREYXRlOiBhbnkgPSBmbGlnaHRRdW90ZS5pbmJvdW5kRmxpZ2h0cy5sZW5ndGhcclxuICAgICAgICA/IG1vbWVudChmbGlnaHRRdW90ZS5pbmJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZylcclxuICAgICAgICA6IG51bGw7XHJcblxyXG4gICAgICBjb25zdCB0ZXJtc0FuZENvbmRpdGlvbnMgPSB0aGlzLmdldFRlcm1zQW5kQ29uZChmbGlnaHRRdW90ZSk7XHJcbiAgICAgIGNvbnN0IHNjaGVtYURldGFpbHMgPSB7XHJcbiAgICAgICAgb3V0Ym91bmRGbGlnaHRzOiBbXHJcbiAgICAgICAgICAuLi5mbGlnaHRRdW90ZS5vdXRib3VuZEZsaWdodHMubWFwKFxyXG4gICAgICAgICAgICAoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCBfc2VnbWVudEluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4geyAuLi5mbGlnaHQgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgaW5ib3VuZEZsaWdodHM6IFtcclxuICAgICAgICAgIC4uLmZsaWdodFF1b3RlLmluYm91bmRGbGlnaHRzLm1hcChcclxuICAgICAgICAgICAgKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgX3NlZ21lbnRJbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uZmxpZ2h0IH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIClcclxuICAgICAgICBdLFxyXG4gICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zLFxyXG4gICAgICAgIGpvdXJuZXlUeXBlOiAnc2luZ2xlJ1xyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBib29raW5nOiBBZGRJdGVtVG9CYXNrZXRNdXRhdGlvblZhcmlhYmxlcyA9IHtcclxuICAgICAgICBhZHVsdHM6IHRoaXMuYWR1bHRzLFxyXG4gICAgICAgIGJhc2tldDogaW50QmFza2V0LmlkLFxyXG4gICAgICAgIGNoaWxkcmVuOiB0aGlzLmNoaWxkcmVuLFxyXG4gICAgICAgIGNvMlBlckl0ZW0sXHJcbiAgICAgICAgY28yUGVyUGFzc2VuZ2VyLFxyXG4gICAgICAgIGN1cnJlbmN5OiB0b3RhbC5jdXJyZW5jeSBhcyBDdXJyZW5jeUNvZGUsXHJcbiAgICAgICAgZGV0YWlsOiBzY2hlbWFEZXRhaWxzLFxyXG4gICAgICAgIHByaWNlOiB0b3RhbC5wcmljZSxcclxuICAgICAgICBzZWFyY2hRdWVyeTogdGhpcy5yZXN1bHRRdWVyeSxcclxuICAgICAgICBzZXJ2aWNlOiBzb3VyY2VJZC50b1N0cmluZygpLFxyXG4gICAgICAgIG91dGJvdW5kRGF0ZTogb3V0Ym91bmREYXRlLmZvcm1hdCgpXHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChpbmJvdW5kRGF0ZSkge1xyXG4gICAgICAgIGJvb2tpbmcuaW5ib3VuZERhdGUgPSBpbmJvdW5kRGF0ZS5mb3JtYXQoKTtcclxuICAgICAgICBzY2hlbWFEZXRhaWxzLmpvdXJuZXlUeXBlID0gJ3JvdW5kdHJpcCc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgICAgYm9va2luZyxcclxuICAgICAgICBpbnRCYXNrZXQsXHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMudHJhdmVsbGVycyxcclxuICAgICAgICBmbGlnaHRRdW90ZS5yZXF1aXJlc1JlYXNvblxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNhbmNlbCk7IC8vIFRPRE8gc2hvdWxkIHRoaXMgdGhyb3cgYW4gZXJyb3I/XHJcbiAgfVxyXG5cclxuICBzZXRGbGlnaHREaXNwbGF5VHlwZShkaXNwbGF5VHlwZTogRmxpZ2h0RGlzcGxheVR5cGVzKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQgPSBudWxsO1xyXG4gICAgdGhpcy5jaG9vc2VuRGlzcGxheVR5cGUubmV4dChkaXNwbGF5VHlwZSk7XHJcbiAgfVxyXG5cclxuICBfYXBwbHlGaWx0ZXIoKSB7XHJcbiAgICB0aGlzLmFwcGx5RmlsdGVycyh0aGlzLmN1cnJlbnRGaWx0ZXJzLCB0aGlzLmN1cnJlbnRTb3J0KTtcclxuICB9XHJcblxyXG4gIG9wZW5GbGlnaHRGYXJlUnVsZXMoXHJcbiAgICBydWxlczogRmFyZUNvbmRpdGlvbnMsXHJcbiAgICBmbGlnaHRzOiBGbGlnaHRKb3VybmV5W10sXHJcbiAgICBvcHRpb25zOiBhbnkgPSBudWxsLFxyXG4gICAgZmxpZ2h0RGV0YWlsOiBGbGlnaHRJdGluZXJhcnkgPSBudWxsXHJcbiAgKTogdm9pZCB7XHJcbiAgICAvLyBmaXJzdCBjaGVjayBpZiB0aGVyZSBhcmUgcnVsZXNcclxuICAgIGNvbnN0IGRvQ2FsbCA9ICFPYmplY3QudmFsdWVzKHJ1bGVzKS5maW5kKFxyXG4gICAgICAocnVsZTogRmFyZUNvbmRpdGlvbkVudHJ5W10pOiBudW1iZXIgPT4gcnVsZS5sZW5ndGhcclxuICAgICk7XHJcbiAgICBpZiAoZG9DYWxsKSB7XHJcbiAgICAgIGNvbnN0IHJ1bGVzRnJvbUNhbGwgPSB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0RmxpZ2h0RmFyZVJ1bGVzKFxyXG4gICAgICAgIGZsaWdodHNbMF0gYXMgSW5wdXRGbGlnaHRKb3VybmV5XHJcbiAgICAgICk7XHJcbiAgICAgIHJ1bGVzRnJvbUNhbGwuc3Vic2NyaWJlKFxyXG4gICAgICAgIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKE1vZGFsVHlwZXMuTW9kYWxGbGlnaHRGYXJlQ29tcG9uZW50LCBvcHRpb25zLCB7XHJcbiAgICAgICAgICAgIHJ1bGVzOiBkYXRhLnJlc3VsdHNbMF0sXHJcbiAgICAgICAgICAgIGZyb206IGZsaWdodHNbMF0ub3JpZ2luQWlycG9ydCxcclxuICAgICAgICAgICAgdG86IGZsaWdodHNbZmxpZ2h0cy5sZW5ndGggLSAxXS5kZXN0aW5hdGlvbkFpcnBvcnQsXHJcbiAgICAgICAgICAgIGZsaWdodDogZmxpZ2h0RGV0YWlsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihNb2RhbFR5cGVzLk1vZGFsRmxpZ2h0RmFyZUNvbXBvbmVudCwgb3B0aW9ucywge1xyXG4gICAgICAgIHJ1bGVzLFxyXG4gICAgICAgIGZyb206IGZsaWdodHNbMF0ub3JpZ2luQWlycG9ydCxcclxuICAgICAgICB0bzogZmxpZ2h0c1tmbGlnaHRzLmxlbmd0aCAtIDFdLmRlc3RpbmF0aW9uQWlycG9ydCxcclxuICAgICAgICBmbGlnaHQ6IGZsaWdodERldGFpbFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFRPRE8gd2FpdGluZyBmb3IgZGF0YVxyXG4gIGdldFRlcm1zQW5kQ29uZChmbGlnaHRRdW90ZTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMpIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnUGVuYWx0aWVzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdFbGlnaWJpbGl0eScsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgICxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdEYXkvdGltZScsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnU2Vhc29uYWxpdHknLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0ZsaWdodMKgQXBwbGljYXRpb24nLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0FkdmFuY2XCoFJlc2VydmF0aW9ucy90aWNrZXRpbmcnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ01heGltdW3CoFN0YXknLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ01pbmltdW3CoFN0YXknLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1N0b3BvdmVycycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVHJhbnNmZXJzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdDb21iaW5hdGlvbnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0JsYWNrb3V0wqBEYXRlcycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnU3VyY2hhcmdlcycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQWNjb21wYW5pZWTCoFRyYXZlbCcsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVHJhdmVswqBSZXN0cmljdGlvbnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1NhbGVzwqBSZXN0cmljdGlvbnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0hpcC9taWxlYWdlwqBFeGNlcHRpb25zJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUaWNrZXTCoEVuZG9yc2VtZW50cycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQ2hpbGRyZW7CoERpc2NvdW50cycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVG91csKgQ29uZHVjdG9ywqBEaXNjb3VudHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0FnZW50wqBEaXNjb3VudHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0FsbMKgT3RoZXLCoERpc2NvdW50cycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnTWlzY2VsbGFuZW91c8KgUHJvdmlzaW9ucycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRmFyZcKgQnnCoFJ1bGUnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0dyb3VwcycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVG91cnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1Zpc2l0wqBBbm90aGVywqBDb3VudHJ5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdEZXBvc2l0cycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVm9sdW50YXJ5wqBDaGFuZ2VzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdWb2x1bnRhcnnCoFJlZnVuZHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ05lZ290aWF0ZWTCoEZhcmVzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdSdWxlwqBBcHBsaWNhdGlvbsKgQW5kwqBPdGhlcsKgQ29uZGl0aW9ucycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH1cclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBzYXZlU2VhcmNoKCk6IE9ic2VydmFibGU8U2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdD4ge1xyXG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xyXG4gICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcclxuICAgICAgY29uc3QgZmF2b3VyaXRlU2VhcmNoUXVlcnk6IElGbGlnaHRTZWFyY2hBcmdzID1cclxuICAgICAgICB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpO1xyXG5cclxuICAgICAgY29uc3Qgc2VhcmNoSW5mbyA9IHtcclxuICAgICAgICBuYW1lOiBgJHttb21lbnQoKX1gLFxyXG4gICAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5GbGlnaHQsXHJcbiAgICAgICAgc2VhcmNoQXJnczogZmF2b3VyaXRlU2VhcmNoUXVlcnlcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlRmF2b3VyaXRlU2VhcmNoKHNlYXJjaEluZm8pO1xyXG4gICAgfVxyXG4gIH1cclxuICBhc3luYyBhcHBseUZhdm91cml0ZShmYXY6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gZmF2Lm11bHRpRGVzdGluYXRpb25cclxuICAgICAgPyBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eVxyXG4gICAgICA6IGZhdi5yZXR1cm5UcmlwXHJcbiAgICAgID8gRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm5cclxuICAgICAgOiBGbGlnaHRTZWFyY2hUeXBlLm9uZVdheTtcclxuICAgIGlmICh0aGlzLmNob3NlblNlYXJjaFR5cGUgPT0gRmxpZ2h0U2VhcmNoVHlwZS5tdWx0aUNpdHkpIHtcclxuICAgICAgY29uc3QgbXVsdGkgPSBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICBmYXYubXVsdGlEZXN0aW5hdGlvbi5tYXAoXHJcbiAgICAgICAgICBhc3luYyAoYTogeyBkYXRlOiBzdHJpbmc7IGRlc3Q6IHN0cmluZzsgb3JpZzogc3RyaW5nIH0pID0+IHtcclxuICAgICAgICAgICAgbGV0IGRlc3RpbmF0aW9uOiB7IGRhdGU6IG1vbWVudC5Nb21lbnQ7IGRlc3Q6IGFueTsgb3JpZzogYW55IH0gPSB7XHJcbiAgICAgICAgICAgICAgZGF0ZTogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgIGRlc3Q6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICBvcmlnOiB1bmRlZmluZWRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgZGVzdGluYXRpb24ub3JpZyA9IGF3YWl0IHRoaXMuc2VhcmNoU2VydmljZVxyXG4gICAgICAgICAgICAgIC5nZXRBaXJwb3J0c0xpc3QoYS5vcmlnKVxyXG4gICAgICAgICAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgICAgICAgICAgIC50aGVuKChvcmlnUmVzdWx0cykgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChvcmlnUmVzdWx0cyBhcyBhbnlbXSkuZmluZCgoYikgPT4gYi5nYXRld2F5ID09IGEub3JpZyk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLmRlc3QgPSBhd2FpdCB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgICAgICAgICAuZ2V0QWlycG9ydHNMaXN0KGEuZGVzdClcclxuICAgICAgICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICAgICAgICAgICAudGhlbigoZGVzdFJlc3VsdHMpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAoZGVzdFJlc3VsdHMgYXMgYW55W10pLmZpbmQoKGIpID0+IGIuZ2F0ZXdheSA9PSBhLmRlc3QpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gZGVzdGluYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLm11bHRpRGVzdGluYXRpb24gPSBtdWx0aSBhcyBhbnk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgICAuZ2V0QWlycG9ydHNMaXN0KGZhdi5vcmlnaW5BaXJwb3J0KVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdHMpID0+IHtcclxuICAgICAgICAgIHRoaXMuZGVwYXJ0TG9jYXRpb24gPSAocmVzdWx0cyBhcyBhbnlbXSkuZmluZChcclxuICAgICAgICAgICAgKGEpID0+IGEuZ2F0ZXdheSA9PSBmYXYub3JpZ2luQWlycG9ydFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlXHJcbiAgICAgICAgLmdldEFpcnBvcnRzTGlzdChmYXYuZGVzdGluYXRpb25BaXJwb3J0KVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdHMpID0+IHtcclxuICAgICAgICAgIHRoaXMuYXJyaXZlTG9jYXRpb24gPSAocmVzdWx0cyBhcyBhbnlbXSkuZmluZChcclxuICAgICAgICAgICAgKGEpID0+IGEuZ2F0ZXdheSA9PSBmYXYuZGVzdGluYXRpb25BaXJwb3J0XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jYWJpbkNsYXNzID0gZmF2Lm91dGJvdW5kQ2FiaW5DbGFzc1swXTtcclxuICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9XHJcbiAgICAgIHRoaXMuY2hvc2VuU2VhcmNoVHlwZSAhPSBGbGlnaHRTZWFyY2hUeXBlLnJldHVyblxyXG4gICAgICAgID8gbnVsbFxyXG4gICAgICAgIDogZmF2LnJldHVybkNhYmluQ2xhc3NbMF07XHJcbiAgICB0aGlzLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA9IGZhdi5pbmNsdWRlTmVhcmJ5QWlycG9ydHM7XHJcbiAgICB0aGlzLmFkdWx0cyA9IGZhdi5wYXNzZW5nZXJzLmZpbHRlcigoYTogYW55KSA9PiBhLnR5cGUgPT0gJ0FEVUxUJykubGVuZ3RoO1xyXG4gICAgdGhpcy5jaGlsZHJlbiA9IGZhdi5wYXNzZW5nZXJzLmZpbHRlcigoYTogYW55KSA9PiBhLnR5cGUgPT0gJ0NISUxEJykubGVuZ3RoO1xyXG4gICAgLy8gdGhpcy5wcmVmZXJyZWRDYXJyaWVycyA9IGZhdi5wcmVmZXJyZWRDYXJyaWVycy5tYXAoKGE6IGFueSkgPT4ge1xyXG5cclxuICAgIC8vIH0pXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVNlcmNoUXVlcnkoXHJcbiAgICBxdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXNcclxuICApOiBJRmxpZ2h0U2VhcmNoQXJncyB7XHJcbiAgICBjb25zdCBzZWFyY2hRdWVyeTogSUZsaWdodFNlYXJjaEFyZ3MgPSBxdWVyeTtcclxuICAgIHN3aXRjaCAodGhpcy5jaG9zZW5TZWFyY2hUeXBlKSB7XHJcbiAgICAgIGNhc2UgRmxpZ2h0U2VhcmNoVHlwZS5tdWx0aUNpdHk6XHJcbiAgICAgICAgc2VhcmNoUXVlcnkubXVsdGlEZXN0aW5hdGlvbkRldGFpbCA9IHRoaXMubXVsdGlEZXN0aW5hdGlvbjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGbGlnaHRTZWFyY2hUeXBlLnJldHVybjpcclxuICAgICAgY2FzZSBGbGlnaHRTZWFyY2hUeXBlLm9uZVdheTpcclxuICAgICAgICBzZWFyY2hRdWVyeS5kZXBhcnRMb2NhdGlvbkRldGFpbCA9IHRoaXMuZGVwYXJ0TG9jYXRpb247XHJcbiAgICAgICAgc2VhcmNoUXVlcnkuYXJyaXZlTG9jYXRpb25EZXRhaWwgPSB0aGlzLmFycml2ZUxvY2F0aW9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzZWFyY2hRdWVyeTtcclxuICB9XHJcbn1cclxuIl19
2007
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxpZ2h0LWVudGVycHJpc2Utc2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2J0c2VydmljZXMvYmFzZS9zcmMvbGliL3ZlbmRvci9jbGFzc2VzL2ZsaWdodC1lbnRlcnByaXNlLXNlYXJjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBSXpELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBSWxFLE9BQU8sRUFRTCxRQUFRLEVBQ1IsZ0JBQWdCLEVBSWhCLG1CQUFtQixFQVFuQixXQUFXLEVBQ1osTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQ0wsNEJBQTRCLEVBRTVCLG1CQUFtQixFQVluQixtQkFBbUIsRUFNcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQVV4QixPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUduQixNQUFNLHlDQUF5QyxDQUFDO0FBRWpELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBTzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUt2RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBR2hELE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQztBQWFuQixNQUFNLENBQU4sSUFBWSxVQUlYO0FBSkQsV0FBWSxVQUFVO0lBQ3BCLGlDQUFtQixDQUFBO0lBQ25CLGtDQUFvQixDQUFBO0lBQ3BCLGtDQUFvQixDQUFBO0FBQ3RCLENBQUMsRUFKVyxVQUFVLEtBQVYsVUFBVSxRQUlyQjtBQUVELE1BQU0sQ0FBTixJQUFZLGVBVVg7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QUFJLENBQUMscUJBQXFCLEdBQUcsR0FBRyxDQUFDLHFCQUFxQixDQUFDO1lBQ3ZELElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQzFFLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQzVFLG1FQUFtRTtZQUVuRSxLQUFLO1FBQ1AsQ0FBQztLQUFBO0lBRU8sZ0JBQWdCLENBQ3RCLEtBQW9DO1FBRXBDLE1BQU0sV0FBVyxHQUFzQixLQUFLLENBQUM7UUFDN0MsUUFBUSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDN0IsS0FBSyxnQkFBZ0IsQ0FBQyxTQUFTO2dCQUM3QixXQUFXLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO2dCQUMzRCxNQUFNO1lBQ1IsS0FBSyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7WUFDN0IsS0FBSyxnQkFBZ0IsQ0FBQyxNQUFNO2dCQUMxQixXQUFXLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztnQkFDdkQsV0FBVyxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7Z0JBQ3ZELE1BQU07U0FDVDtRQUVELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7O0FBeDRGZSw2Q0FBc0IsR0FBRyxlQUFlLENBQUM7QUFDekMsOENBQXVCLEdBQUcsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IEJhc2VFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi9iYXNlLWVudGVycHJpc2UnO1xyXG5pbXBvcnQgeyBCYXNlU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlSGVscGVyUm91dGluZXMgfSBmcm9tICcuL2hlbHBlcnMnO1xyXG5pbXBvcnQgeyBUcmF2ZWxsZXIgfSBmcm9tICcuLi9tb2RlbHMvdHJhdmVsbGVyLm9iamVjdCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBWYWx1ZURpc3BsYXkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3ZhbHVlLWRpc3BsYXknO1xyXG5pbXBvcnQgeyBGbGlnaHRGaWx0ZXJzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mbGlnaHQtZmlsdGVycy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBTZWxlY3RGaWx0ZXIgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NlbGVjdC1maWx0ZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBBZGRJdGVtVG9CYXNrZXRNdXRhdGlvblZhcmlhYmxlcyxcclxuICBCYWdnYWdlQWxsb3dhbmNlLFxyXG4gIEJhc2tldEl0ZW0sXHJcbiAgQ3VycmVuY3lDb2RlLFxyXG4gIERlc3RpbmF0aW9uRW50cnksXHJcbiAgRmFyZUNvbmRpdGlvbkVudHJ5LFxyXG4gIEZhcmVDb25kaXRpb25zLFxyXG4gIEZhcmVUeXBlLFxyXG4gIEZsaWdodENhYmluQ2xhc3MsXHJcbiAgRmxpZ2h0SXRpbmVyYXJ5LFxyXG4gIEZsaWdodEpvdXJuZXksXHJcbiAgRmxpZ2h0UGFzc2VuZ2VyT2JqZWN0LFxyXG4gIEZsaWdodFBhc3NlbmdlclR5cGUsXHJcbiAgR3JvdXBlZEZpZWxkc0ZyYWdtZW50LFxyXG4gIEdyb3VwRmxpZ2h0cyxcclxuICBJbnB1dEZsaWdodEpvdXJuZXksXHJcbiAgSXRpbmVyYXJ5U3VtbWFyeSxcclxuICBNYXRjaGluZ0ZsaWdodHMsXHJcbiAgU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzLFxyXG4gIFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlcnZpY2VUeXBlXHJcbn0gZnJvbSAnLi4vdHlwZXMvZ3JhcGhxbC50eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucyxcclxuICBGbGlnaHRBbGxRdW90ZVJlc3VsdCxcclxuICBGbGlnaHREaXJlY3Rpb25FbnVtLFxyXG4gIEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCxcclxuICBGbGlnaHRHcm91cHMsXHJcbiAgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MsXHJcbiAgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXHJcbiAgRmxpZ2h0TXVsdGksXHJcbiAgRmxpZ2h0UXVvdGVSZXN1bHRBcnJheSxcclxuICBHcm91cGVkRmxpZ2h0cyxcclxuICBNaW5NYXgsXHJcbiAgTmdiRGF0ZVN0cnVjdCxcclxuICBPQlRBaXJsaW5lc0RldGFpbHMsXHJcbiAgT0JUQWlycG9ydERldGFpbHMsXHJcbiAgT0JURmxpZ2h0Q2FiaW5DbGFzcyxcclxuICBSZWNlbnRTZWFyY2gsXHJcbiAgUmVjb3JkUnVsZUFjdGlvbixcclxuICBSdWxlQWN0aW9uU3VtbWFyeUludGVyZmFjZSxcclxuICBSdWxlTG9va3VwLFxyXG4gIFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHRcclxufSBmcm9tICcuLi90eXBlcy90eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUZsaWdodFF1b3RlRmV0Y2hlcixcclxuICBGbGlnaHRRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZmxpZ2h0LXF1b3RlLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEZ1bGxVc2VyRGV0YWlscyxcclxuICBVc2VyU2VydmljZUludGVyZmFjZVxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSXVzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIERFRkFVTFRfRkxJR0hUX0ZJTFRFUlMsXHJcbiAgRmxpZ2h0RGlzcGxheVR5cGVzLFxyXG4gIEZsaWdodEVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2UsXHJcbiAgRmxpZ2h0VGVtcFBhcmFtc1xyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWZsaWdodC1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IElDaGVhcGVzdFByaWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jaGVhcGVzdC1wcmljZSc7XHJcbmltcG9ydCB7IEZsaWdodFNlYXJjaFR5cGUgfSBmcm9tICcuL2ZsaWdodC1zZWFyY2gtdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgSU11bHRpRGVzdGluYXRpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL2ZsaWdodC1tdWx0aS1kZXN0aW5hdGlvbi5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1xyXG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gIEludGVybmFsQmFza2V0SW50ZXJmYWNlXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IHJlc3VsdCB9IGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7IFVzZXJGYXZvcnVyaXRlIH0gZnJvbSAnLi91c2VyLWZhdm91cml0ZS5lbnVtJztcclxuaW1wb3J0IHtcclxuICBBcHBseUppdEZsaWdodFJ1bGVzVHlwZSxcclxuICBCYXNlQXBwbHlKaXRGbGlnaHRSdWxlc0ZldGNoZXJcclxufSBmcm9tICcuLi9mZXRjaGVycy9hcHBseS1qaXQtZmxpZ2h0LXJ1bGVzJztcclxuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQmFzZU1vZGFsT3BlbmVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGFsLW9wZW5lci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTW9kYWxUeXBlcyB9IGZyb20gJy4vbW9kYWwtdHlwZXMuZW51bSc7XHJcbmltcG9ydCB7IElGbGlnaHRTZWFyY2hBcmdzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mbGlnaHQtc2VhcmNoLWFyZ3MuaW50ZXJmYWNlJztcclxuXHJcbmNvbnN0IE9VVEJPVU5EID0gMDtcclxuZXhwb3J0IGludGVyZmFjZSBBbGxvd2VkQ2xhc3Mge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzIHwgbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGbGlnaHRPcGVyYXRvciB7XHJcbiAgY29kZTogc3RyaW5nO1xyXG4gIG5hbWU6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgQWxsb3dlZENsYXNzZXMgPSBBbGxvd2VkQ2xhc3NbXTtcclxuXHJcbmV4cG9ydCBlbnVtIFRpbWVXaW5kb3cge1xyXG4gIEFueXRpbWUgPSAnQW55dGltZScsXHJcbiAgRGVwYXJ0ID0gJ0RlcGFydCBCeScsXHJcbiAgQXJyaXZlID0gJ0Fycml2ZSBCeSdcclxufVxyXG5cclxuZXhwb3J0IGVudW0gRmxpZ2h0U29ydFR5cGVzIHtcclxuICBDaGVhcGVzdCA9ICdDaGVhcGVzdCcsXHJcbiAgTW9zdEV4cGVuc2l2ZSA9ICdNb3N0IEV4cGVuc2l2ZScsXHJcbiAgRmFzdGVzdCA9ICdGYXN0ZXN0JyxcclxuICBQcmVmZXJyZWQgPSAnUHJlZmVycmVkJyxcclxuICBMb3dlc3RFbWlzc2lvbnMgPSAnTG93ZXN0IEVtaXNzaW9ucycsXHJcbiAgRGVwYXJ0dXJlVGltZSA9ICdEZXBhcnR1cmUgVGltZScsXHJcbiAgQXJyaXZhbFRpbWUgPSAnQXJyaXZhbCBUaW1lJyxcclxuICBRdWlja2VzdCA9ICdRdWlja2VzdCcsXHJcbiAgTW9zdERpcmVjdCA9ICdNb3N0IERpcmVjdCdcclxufVxyXG5cclxuaW50ZXJmYWNlIEZsaWdodFNlc3Npb25UeXBlIHtcclxuICByZXN1bHRzOiBGbGlnaHRRdW90ZVJlc3VsdEFycmF5O1xyXG4gIGdyb3VwZWQ6IEdyb3VwZWRGbGlnaHRzO1xyXG4gIHF1ZXJ5OiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcztcclxufVxyXG5cclxuaW50ZXJmYWNlIEhpZGVGbGlnaHRDYWJpbkNsYXNzSW50ZXJmYWNlIHtcclxuICBhbnk6IGJvb2xlYW47XHJcbiAgYnVzaW5lc3M6IGJvb2xlYW47XHJcbiAgZWNvbm9teTogYm9vbGVhbjtcclxuICBwcmVtaXVtRWNvbm9teTogYm9vbGVhbjtcclxuICBmaXJzdDogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEZsaWdodEVudGVycHJpc2VTZWFyY2g8XHJcbiAgICBGUV9RIGV4dGVuZHMgRmxpZ2h0UXVvdGVGZXRjaGVyVHlwZSxcclxuICAgIEFKRl9RIGV4dGVuZHMgQXBwbHlKaXRGbGlnaHRSdWxlc1R5cGVcclxuICA+XHJcbiAgZXh0ZW5kcyBCYXNlRW50ZXJwcmlzZVNlYXJjaDxcclxuICAgIEZsaWdodFRlbXBQYXJhbXMsXHJcbiAgICBGbGlnaHRBbGxRdW90ZVJlc3VsdCxcclxuICAgIEZsaWdodFF1b3RlUmVzdWx0QXJyYXlcclxuICA+XHJcbiAgaW1wbGVtZW50cyBGbGlnaHRFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlXHJcbntcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyA9ICdzZWFyY2hfZmxpZ2h0JztcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFMgPSAncmVzdWx0c19mbGlnaHQnO1xyXG5cclxuICBwdWJsaWMgdHlwZTogU2VydmljZVR5cGUgPSBTZXJ2aWNlVHlwZS5GbGlnaHQ7XHJcblxyXG4gIGF2YWxpYWJsZUNsYXNzZXM6IEJlaGF2aW9yU3ViamVjdDxBbGxvd2VkQ2xhc3Nlcz4gPVxyXG4gICAgbmV3IEJlaGF2aW9yU3ViamVjdDxBbGxvd2VkQ2xhc3Nlcz4oW10pO1xyXG4gIHRpbWVDcml0ZXJpYU9wdGlvbnM6IEJlaGF2aW9yU3ViamVjdDxUaW1lV2luZG93W10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcclxuICAgIFRpbWVXaW5kb3dbXVxyXG4gID4oW10pO1xyXG4gIGZsaWdodE9wZXJhdG9yczogQmVoYXZpb3JTdWJqZWN0PEZsaWdodE9wZXJhdG9yW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcclxuICAgIEZsaWdodE9wZXJhdG9yW11cclxuICA+KFtdKTtcclxuXHJcbiAgcHJpdmF0ZSBfbmVnb3RpYXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX25lYXJieV9haXJwb3J0czogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIF90aW1lQXJyYXk6IFZhbHVlRGlzcGxheTxzdHJpbmc+W107XHJcbiAgcHJpdmF0ZSBfc29ydEFycmF5OiBWYWx1ZURpc3BsYXk8RmxpZ2h0U29ydFR5cGVzPltdID0gW1xyXG4gICAgeyBkaXNwbGF5OiAnQ2hlYXBlc3QgRmlyc3QnLCB2YWx1ZTogRmxpZ2h0U29ydFR5cGVzLkNoZWFwZXN0IH0sXHJcbiAgICB7XHJcbiAgICAgIGRpc3BsYXk6ICdNb3N0IEV4cGVuc2l2ZSBGaXJzdCcsXHJcbiAgICAgIHZhbHVlOiBGbGlnaHRTb3J0VHlwZXMuTW9zdEV4cGVuc2l2ZVxyXG4gICAgfSxcclxuICAgIHsgZGlzcGxheTogJ0Zhc3Rlc3QgRmlyc3QnLCB2YWx1ZTogRmxpZ2h0U29ydFR5cGVzLkZhc3Rlc3QgfSxcclxuICAgIHsgZGlzcGxheTogJ1ByZWZlcnJlZCBGYXJlcyBGaXJzdCcsIHZhbHVlOiBGbGlnaHRTb3J0VHlwZXMuUHJlZmVycmVkIH0sXHJcbiAgICB7XHJcbiAgICAgIGRpc3BsYXk6ICdMb3dlc3QgQ28yIEVtaXNzaW9ucyBGaXJzdCcsXHJcbiAgICAgIHZhbHVlOiBGbGlnaHRTb3J0VHlwZXMuTG93ZXN0RW1pc3Npb25zXHJcbiAgICB9XHJcbiAgXTtcclxuXHJcbiAgcHJpdmF0ZSBfc29ydEl0aW5hcnlSb3V0aW5lczogUmVjb3JkPFxyXG4gICAgRmxpZ2h0U29ydFR5cGVzLFxyXG4gICAgKGE6IEZsaWdodEl0aW5lcmFyeSwgYjogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBudW1iZXJcclxuICA+ID0ge1xyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5DaGVhcGVzdF06IChhOiBGbGlnaHRJdGluZXJhcnksIGI6IEZsaWdodEl0aW5lcmFyeSkgPT4ge1xyXG4gICAgICByZXR1cm4gYS50b3RhbC5wcmljZSAtIGIudG90YWwucHJpY2U7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5Nb3N0RXhwZW5zaXZlXTogKFxyXG4gICAgICBhOiBGbGlnaHRJdGluZXJhcnksXHJcbiAgICAgIGI6IEZsaWdodEl0aW5lcmFyeVxyXG4gICAgKSA9PiB7XHJcbiAgICAgIHJldHVybiBiLnRvdGFsLnByaWNlIC0gYS50b3RhbC5wcmljZTtcclxuICAgIH0sXHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLkZhc3Rlc3RdOiAoYTogRmxpZ2h0SXRpbmVyYXJ5LCBiOiBGbGlnaHRJdGluZXJhcnkpID0+IHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBhLm91dGJvdW5kVG90YWxEdXJhdGlvbiArXHJcbiAgICAgICAgKGEuaW5ib3VuZFRvdGFsRHVyYXRpb24gPyBhLmluYm91bmRUb3RhbER1cmF0aW9uIDogMCkgLVxyXG4gICAgICAgIChiLm91dGJvdW5kVG90YWxEdXJhdGlvbiArXHJcbiAgICAgICAgICAoYi5pbmJvdW5kVG90YWxEdXJhdGlvbiA/IGIuaW5ib3VuZFRvdGFsRHVyYXRpb24gOiAwKSlcclxuICAgICAgKTtcclxuICAgIH0sXHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLlByZWZlcnJlZF06IChcclxuICAgICAgYTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXHJcbiAgICAgIGI6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zXHJcbiAgICApID0+IHtcclxuICAgICAgcmV0dXJuIGEucHJlZmVycmVkIC0gYi5wcmVmZXJyZWQ7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5Mb3dlc3RFbWlzc2lvbnNdOiAoXHJcbiAgICAgIGE6IEZsaWdodEl0aW5lcmFyeSxcclxuICAgICAgYjogRmxpZ2h0SXRpbmVyYXJ5XHJcbiAgICApID0+IHtcclxuICAgICAgcmV0dXJuIGEuY28yUGVySXRlbSAtIGIuY28yUGVySXRlbTtcclxuICAgIH0sXHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLkRlcGFydHVyZVRpbWVdOiAoXHJcbiAgICAgIGE6IEZsaWdodEl0aW5lcmFyeSxcclxuICAgICAgYjogRmxpZ2h0SXRpbmVyYXJ5XHJcbiAgICApID0+IHtcclxuICAgICAgY29uc3QgYVRpbWUgPSBtb21lbnQoYS5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpO1xyXG4gICAgICBjb25zdCBiVGltZSA9IG1vbWVudChiLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZyk7XHJcbiAgICAgIGlmIChhVGltZS5pc0JlZm9yZShiVGltZSkpIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGFUaW1lLmlzU2FtZShiVGltZSkgPyAwIDogMTtcclxuICAgIH0sXHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLkFycml2YWxUaW1lXTogKGE6IEZsaWdodEl0aW5lcmFyeSwgYjogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XHJcbiAgICAgIGNvbnN0IGFUaW1lID0gbW9tZW50KGEub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lQXJyaXZpbmcpO1xyXG4gICAgICBjb25zdCBiVGltZSA9IG1vbWVudChiLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZUFycml2aW5nKTtcclxuICAgICAgaWYgKGFUaW1lLmlzQmVmb3JlKGJUaW1lKSkge1xyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYVRpbWUuaXNTYW1lKGJUaW1lKSA/IDAgOiAxO1xyXG4gICAgfSxcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuUXVpY2tlc3RdOiAoYTogRmxpZ2h0SXRpbmVyYXJ5LCBiOiBGbGlnaHRJdGluZXJhcnkpID0+IHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBhLm91dGJvdW5kVG90YWxEdXJhdGlvbiArXHJcbiAgICAgICAgKGEuaW5ib3VuZFRvdGFsRHVyYXRpb24gPyBhLmluYm91bmRUb3RhbER1cmF0aW9uIDogMCkgLVxyXG4gICAgICAgIChiLm91dGJvdW5kVG90YWxEdXJhdGlvbiArXHJcbiAgICAgICAgICAoYi5pbmJvdW5kVG90YWxEdXJhdGlvbiA/IGIuaW5ib3VuZFRvdGFsRHVyYXRpb24gOiAwKSlcclxuICAgICAgKTtcclxuICAgIH0sXHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLk1vc3REaXJlY3RdOiAoYTogRmxpZ2h0SXRpbmVyYXJ5LCBiOiBGbGlnaHRJdGluZXJhcnkpID0+IHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBhLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggK1xyXG4gICAgICAgIChhLm91dGJvdW5kRmxpZ2h0cyA/IGEub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCA6IDApIC1cclxuICAgICAgICAoYi5vdXRib3VuZEZsaWdodHMubGVuZ3RoICtcclxuICAgICAgICAgIChiLm91dGJvdW5kRmxpZ2h0cyA/IGIub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCA6IDApKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgX3NvcnRHcm91cGVkUm91dGluZXM6IFJlY29yZDxcclxuICAgIEZsaWdodFNvcnRUeXBlcyxcclxuICAgIChhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCkgPT4gbnVtYmVyXHJcbiAgPiA9IHtcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuQ2hlYXBlc3RdOiAoXHJcbiAgICAgIGE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCxcclxuICAgICAgYjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0XHJcbiAgICApID0+IHtcclxuICAgICAgaWYgKGEuZGlyZWN0aW9uICE9PSBiLmRpcmVjdGlvbikge1xyXG4gICAgICAgIHJldHVybiBhLmRpcmVjdGlvbiAtIGIuZGlyZWN0aW9uO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhLm1pblByaWNlIC0gYi5taW5QcmljZTtcclxuICAgIH0sXHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLk1vc3RFeHBlbnNpdmVdOiAoXHJcbiAgICAgIGE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCxcclxuICAgICAgYjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0XHJcbiAgICApID0+IHtcclxuICAgICAgaWYgKGEuZGlyZWN0aW9uICE9PSBiLmRpcmVjdGlvbikge1xyXG4gICAgICAgIHJldHVybiBhLmRpcmVjdGlvbiAtIGIuZGlyZWN0aW9uO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBiLm1pblByaWNlIC0gYS5tYXhQcmljZTtcclxuICAgIH0sXHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLkZhc3Rlc3RdOiAoXHJcbiAgICAgIGE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCxcclxuICAgICAgYjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0XHJcbiAgICApID0+IHtcclxuICAgICAgaWYgKGEuZGlyZWN0aW9uICE9PSBiLmRpcmVjdGlvbikge1xyXG4gICAgICAgIHJldHVybiBhLmRpcmVjdGlvbiAtIGIuZGlyZWN0aW9uO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhLmRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5PdXRib3VuZFxyXG4gICAgICAgID8gYS5vdXRib3VuZFRvdGFsRHVyYXRpb24gLSBiLm91dGJvdW5kVG90YWxEdXJhdGlvblxyXG4gICAgICAgIDogYS5pbmJvdW5kVG90YWxEdXJhdGlvbiAtIGIuaW5ib3VuZFRvdGFsRHVyYXRpb247XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5QcmVmZXJyZWRdOiAoXHJcbiAgICAgIGE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCxcclxuICAgICAgYjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0XHJcbiAgICApID0+IHtcclxuICAgICAgaWYgKGEuZGlyZWN0aW9uICE9PSBiLmRpcmVjdGlvbikge1xyXG4gICAgICAgIHJldHVybiBhLmRpcmVjdGlvbiAtIGIuZGlyZWN0aW9uO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAoYi5wcmVmZXJyZWQgPyAxIDogMCkgLSAoYS5wcmVmZXJyZWQgPyAxIDogMCk7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5Mb3dlc3RFbWlzc2lvbnNdOiAoXHJcbiAgICAgIGE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCxcclxuICAgICAgYjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0XHJcbiAgICApID0+IHtcclxuICAgICAgaWYgKGEuZGlyZWN0aW9uICE9PSBiLmRpcmVjdGlvbikge1xyXG4gICAgICAgIHJldHVybiBhLmRpcmVjdGlvbiAtIGIuZGlyZWN0aW9uO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhLmNvMlBlckl0ZW0gLSBiLmNvMlBlckl0ZW07XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5EZXBhcnR1cmVUaW1lXTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBhVGltZSA9IG1vbWVudChhLmRlcGFydERhdGVUaW1lKTtcclxuICAgICAgY29uc3QgYlRpbWUgPSBtb21lbnQoYi5kZXBhcnREYXRlVGltZSk7XHJcbiAgICAgIGlmIChhVGltZS5pc0JlZm9yZShiVGltZSkpIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGFUaW1lLmlzU2FtZShiVGltZSkgPyAwIDogMTtcclxuICAgIH0sXHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLkFycml2YWxUaW1lXTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBhVGltZSA9IG1vbWVudChhLmFycml2YWxEYXRlVGltZSk7XHJcbiAgICAgIGNvbnN0IGJUaW1lID0gbW9tZW50KGIuYXJyaXZhbERhdGVUaW1lKTtcclxuICAgICAgaWYgKGFUaW1lLmlzQmVmb3JlKGJUaW1lKSkge1xyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYVRpbWUuaXNTYW1lKGJUaW1lKSA/IDAgOiAxO1xyXG4gICAgfSxcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuUXVpY2tlc3RdOiAoXHJcbiAgICAgIGE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCxcclxuICAgICAgYjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0XHJcbiAgICApID0+IHtcclxuICAgICAgaWYgKGEuZGlyZWN0aW9uICE9PSBiLmRpcmVjdGlvbikge1xyXG4gICAgICAgIHJldHVybiBhLmRpcmVjdGlvbiAtIGIuZGlyZWN0aW9uO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhLmRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5PdXRib3VuZFxyXG4gICAgICAgID8gYS5vdXRib3VuZFRvdGFsRHVyYXRpb24gLSBiLm91dGJvdW5kVG90YWxEdXJhdGlvblxyXG4gICAgICAgIDogKGEuaW5ib3VuZFRvdGFsRHVyYXRpb24gPyBhLmluYm91bmRUb3RhbER1cmF0aW9uIDogMCkgLVxyXG4gICAgICAgICAgICAoYi5pbmJvdW5kVG90YWxEdXJhdGlvbiA/IGIuaW5ib3VuZFRvdGFsRHVyYXRpb24gOiAwKTtcclxuICAgIH0sXHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLk1vc3REaXJlY3RdOiAoXHJcbiAgICAgIGE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCxcclxuICAgICAgYjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0XHJcbiAgICApID0+IHtcclxuICAgICAgaWYgKGEuZGlyZWN0aW9uICE9PSBiLmRpcmVjdGlvbikge1xyXG4gICAgICAgIHJldHVybiBhLmRpcmVjdGlvbiAtIGIuZGlyZWN0aW9uO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhLmRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5PdXRib3VuZFxyXG4gICAgICAgID8gYS5vdXRsZWdzLmxlbmd0aCAtIGIub3V0bGVncy5sZW5ndGhcclxuICAgICAgICA6IChhLmlubGVncyB8fCBbXSkubGVuZ3RoIC0gKGIuaW5sZWdzIHx8IFtdKS5sZW5ndGg7XHJcbiAgICB9XHJcbiAgfTtcclxuICBwcml2YXRlIF9mYXJlVHlwZUFycmF5OiBWYWx1ZURpc3BsYXk8RmFyZVR5cGU+W10gPSBbXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5GbGV4aWJsZSwgZGlzcGxheTogJ0ZsZXhpYmxlJyB9LFxyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuTGVpc3VyZSwgZGlzcGxheTogJ0xlaXN1cmUnIH0sXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5Mb3dlc3QsIGRpc3BsYXk6ICdMb3dlc3QnIH0sXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5OZWdvdGlhdGVkLCBkaXNwbGF5OiAnTmVnb3RpYXRlZCcgfSxcclxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLk5vbk5lZ290aWF0ZWQsIGRpc3BsYXk6ICdOb24tTmVnb3RpYXRlZCcgfSxcclxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLlJlcXVlc3RGYXJlUnVsZXMsIGRpc3BsYXk6ICdSZXF1ZXN0IEZhcmUgUnVsZXMnIH0sXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5TZWxlY3RBbmRQcm8sIGRpc3BsYXk6ICdTZWxlY3QgJiBQcm8nIH1cclxuICBdO1xyXG5cclxuICBwdWJsaWMgbWluaW11bU91dEJvdW5kRGF0ZSA9IHtcclxuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKSxcclxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcclxuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpXHJcbiAgfTtcclxuXHJcbiAgcHVibGljIG1pbmltdW1JbkJvdW5kRGF0ZSA9IHtcclxuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKSxcclxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcclxuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpXHJcbiAgfTtcclxuICBwcml2YXRlIF9vdXREYXRlOiBOZ2JEYXRlU3RydWN0O1xyXG4gIHByaXZhdGUgX291dFRpbWU6IHN0cmluZztcclxuICBwcml2YXRlIF9pbkRhdGU6IE5nYkRhdGVTdHJ1Y3Q7XHJcbiAgcHJpdmF0ZSBfaW5UaW1lOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfZGVzdGluYXRpb25BaXJwb3J0OiBhbnk7XHJcbiAgcHJpdmF0ZSBfb3JpZ2luQWlycG9ydDogYW55O1xyXG4gIHByaXZhdGUgX3Bhc3NlbmdlcnM6IGFueTtcclxuICAvLyBwcml2YXRlIGdyb3VwZWRPYmplY3Q6IEZsaWdodEl0aW5lcmFyeVdpdGhTZWxlY3RlZFtdO1xyXG4gIHByb3RlY3RlZCByZXN1bHRRdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXM7XHJcbiAgcHJvdGVjdGVkIF9ncm91cGVkOiBHcm91cGVkRmxpZ2h0cyA9IG51bGw7XHJcbiAgdHJhdmVsbGVyczogVHJhdmVsbGVyW10gPSBudWxsO1xyXG4gIHByb3RlY3RlZCByZXN1bHRzU2Vzc2lvbk5hbWUgPSBGbGlnaHRFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xyXG4gIHByb3RlY3RlZCBtdWx0aVJlc3VsdHNTZXNzaW9uTmFtZSA9XHJcbiAgICBGbGlnaHRFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xyXG4gIHNlbGVjdGVkR3JvdXBGbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zO1xyXG4gIHByaXZhdGUgX3Nob3dIb3RlbEZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9ob3RlbFNlYXJjaFJlcXVlc3RlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGZpbHRlcnM6IEJlaGF2aW9yU3ViamVjdDxGbGlnaHRGaWx0ZXJzPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoXHJcbiAgICBERUZBVUxUX0ZMSUdIVF9GSUxURVJTXHJcbiAgKTtcclxuICBkdXJhbFNpbmdsZUZpbHRlcjogQmVoYXZpb3JTdWJqZWN0PEZsaWdodEZpbHRlcnM+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChcclxuICAgIERFRkFVTFRfRkxJR0hUX0ZJTFRFUlNcclxuICApO1xyXG5cclxuICBjaG9vc2VuRGlzcGxheVR5cGU6IEJlaGF2aW9yU3ViamVjdDxGbGlnaHREaXNwbGF5VHlwZXM+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChcclxuICAgIEZsaWdodERpc3BsYXlUeXBlcy5yZXR1cm5zXHJcbiAgKTtcclxuICBjdXJyZW50U29ydDogRmxpZ2h0U29ydFR5cGVzO1xyXG4gIGN1cnJlbnRGaWx0ZXJzOiBGbGlnaHRGaWx0ZXJzO1xyXG4gIHNlbGVjdGVkR3JvdXBJZDogbnVtYmVyO1xyXG4gIHByaXZhdGUgX3J1bGVBY3Rpb25TdW1tYXJ5OiBSdWxlQWN0aW9uU3VtbWFyeUludGVyZmFjZTtcclxuICBtdWx0aTogRmxpZ2h0TXVsdGlbXTtcclxuICBfY2hlYXBlc3RQcmljZU9iamVjdDoge1xyXG4gICAgZHVhbE91dGJvdW5kOiBJQ2hlYXBlc3RQcmljZTtcclxuICAgIGR1YWxJbmJvdW5kOiBJQ2hlYXBlc3RQcmljZTtcclxuICAgIHJldHVybnM6IElDaGVhcGVzdFByaWNlO1xyXG4gIH0gPSB7XHJcbiAgICBkdWFsT3V0Ym91bmQ6IHtcclxuICAgICAgYW1vdW50OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcclxuICAgICAgY3VycmVuY3lDb2RlOiAnR0JQJ1xyXG4gICAgfSxcclxuICAgIGR1YWxJbmJvdW5kOiB7XHJcbiAgICAgIGFtb3VudDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXHJcbiAgICAgIGN1cnJlbmN5Q29kZTogJ0dCUCdcclxuICAgIH0sXHJcbiAgICByZXR1cm5zOiB7XHJcbiAgICAgIGFtb3VudDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXHJcbiAgICAgIGN1cnJlbmN5Q29kZTogJ0dCUCdcclxuICAgIH1cclxuICB9O1xyXG4gIHB1YmxpYyBnZXQgY2hlYXBlc3RQcmljZU9iamVjdCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9jaGVhcGVzdFByaWNlT2JqZWN0O1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IHRpbWVBcnJheSgpIHtcclxuICAgIHRoaXMuX3RpbWVBcnJheSA9XHJcbiAgICAgIHRoaXMuX3RpbWVBcnJheSB8fFxyXG4gICAgICBBcnJheSg5NilcclxuICAgICAgICAuZmlsbCgwKVxyXG4gICAgICAgIC5tYXAoKF8sIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZhbHVlOlxyXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyA0KVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcclxuICAgICAgICAgICAgICAnOicgK1xyXG4gICAgICAgICAgICAgICgoaW5kZXggJSA0KSAqIDE1KS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyksXHJcbiAgICAgICAgICAgIGRpc3BsYXk6XHJcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcihpbmRleCAvIDQpXHJcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgLnBhZFN0YXJ0KDIsICcwJykgK1xyXG4gICAgICAgICAgICAgICc6JyArXHJcbiAgICAgICAgICAgICAgKChpbmRleCAlIDQpICogMTUpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIHJldHVybiB0aGlzLl90aW1lQXJyYXk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHByZWZlcnJlZENhcnJpZXJzKCk6IE9CVEFpcmxpbmVzRGV0YWlsc1tdIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHByZWZlcnJlZENhcnJpZXJzKHZhbHVlOiBPQlRBaXJsaW5lc0RldGFpbHNbXSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IG9wZXJhdG9yMSgpOiBPQlRBaXJsaW5lc0RldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1swXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgb3BlcmF0b3IxKHZhbHVlOiBPQlRBaXJsaW5lc0RldGFpbHMpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1swXSA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IG9wZXJhdG9yMigpOiBPQlRBaXJsaW5lc0RldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1sxXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgb3BlcmF0b3IyKHZhbHVlOiBPQlRBaXJsaW5lc0RldGFpbHMpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1sxXSA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IG9wZXJhdG9yMygpOiBPQlRBaXJsaW5lc0RldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1syXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgb3BlcmF0b3IzKHZhbHVlOiBPQlRBaXJsaW5lc0RldGFpbHMpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1syXSA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IG9wZXJhdG9yNCgpOiBPQlRBaXJsaW5lc0RldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1szXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgb3BlcmF0b3I0KHZhbHVlOiBPQlRBaXJsaW5lc0RldGFpbHMpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1szXSA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbWluRGF0ZTogTmdiRGF0ZVN0cnVjdDtcclxuICBwdWJsaWMgZ2V0IG1pbkRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICB0aGlzLl9taW5EYXRlID0gdGhpcy5fbWluRGF0ZSB8fCB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUobW9tZW50KCkpO1xyXG4gICAgcmV0dXJuIHRoaXMuX21pbkRhdGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFkdWx0cygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5hZHVsdHM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGFkdWx0cyh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gTnVtYmVyKHZhbHVlKTtcclxuICAgIHRoaXMudXBkYXRlVHJhdmVsbGVycygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjaGlsZHJlbigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgY2hpbGRyZW4odmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuID0gTnVtYmVyKHZhbHVlKTtcclxuICAgIHRoaXMudXBkYXRlVHJhdmVsbGVycygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBkZXBhcnRMb2NhdGlvbigpOiBzdHJpbmcgfCBPQlRBaXJwb3J0RGV0YWlscyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmRlcGFydExvY2F0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBkZXBhcnRMb2NhdGlvbih2YWx1ZTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5kZXBhcnRMb2NhdGlvbiA9IHZhbHVlO1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgdGhpcy5fb3JpZ2luQWlycG9ydCA9ICcnO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB2YWx1ZS5nYXRld2F5KSB7XHJcbiAgICAgIHRoaXMuX29yaWdpbkFpcnBvcnQgPSB2YWx1ZS5nYXRld2F5O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fb3JpZ2luQWlycG9ydCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHF1ZXJ5T3JpZ2luQWlwb3J0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3JpZ2luQWlycG9ydDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcXVlcnlEZXN0aW5hdGlvbkFpcG9ydCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZGVwYXJ0RGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLl9vdXREYXRlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBkZXBhcnREYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XHJcbiAgICB0aGlzLl9vdXREYXRlID0gdmFsdWU7XHJcbiAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgdGhpcy5fb3V0RGF0ZSxcclxuICAgICAgdGhpcy5fb3V0VGltZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZGVwYXJ0VGltZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dFRpbWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGRlcGFydFRpbWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fb3V0VGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQoXHJcbiAgICAgIHRoaXMuX291dERhdGUsXHJcbiAgICAgIHRoaXMuX291dFRpbWVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IG91dEJvdW5kRGF0ZSgpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBvdXRCb3VuZERhdGUodmFsdWU6IG1vbWVudC5Nb21lbnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUgPSB2YWx1ZS5pc1ZhbGlkKCkgPyB2YWx1ZSA6IG51bGw7XHJcbiAgICB0aGlzLm1pbmltdW1JbkJvdW5kRGF0ZSA9IHtcclxuICAgICAgeWVhcjogdmFsdWUueWVhcigpLFxyXG4gICAgICBtb250aDogdmFsdWUubW9udGgoKSArIDEsXHJcbiAgICAgIGRheTogdmFsdWUuZGF0ZSgpXHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZSAmJlxyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGUgJiZcclxuICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZS5pc0FmdGVyKHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSlcclxuICAgICkge1xyXG4gICAgICB0aGlzLmluYm91bmREYXRlID0gbW9tZW50KHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUpLmFkZCgxLCAnZGF5Jyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9vdXREYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKHZhbHVlKTtcclxuICAgIHRoaXMuX291dFRpbWUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0VGltZUNvbG9uKHZhbHVlKTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcmV0dXJuRGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLl9pbkRhdGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHJldHVybkRhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcclxuICAgIHRoaXMuX2luRGF0ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudCh0aGlzLl9pbkRhdGUsIHRoaXMuX2luVGltZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFycml2ZVRpbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9pblRpbWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGFycml2ZVRpbWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5faW5UaW1lID0gdmFsdWU7XHJcbiAgICB0aGlzLmluYm91bmREYXRlID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KHRoaXMuX2luRGF0ZSwgdGhpcy5faW5UaW1lKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaW5ib3VuZERhdGUoKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBpbmJvdW5kRGF0ZSh2YWx1ZTogbW9tZW50Lk1vbWVudCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlID0gdmFsdWUuaXNWYWxpZCgpID8gdmFsdWUgOiBudWxsO1xyXG4gICAgdGhpcy5faW5EYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKHZhbHVlKTtcclxuICAgIHRoaXMuX2luVGltZSA9IHRoaXMuaGVscGVycy5mb3JtYXRUaW1lQ29sb24odmFsdWUpO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhcnJpdmVMb2NhdGlvbigpOiBzdHJpbmcgfCBPQlRBaXJwb3J0RGV0YWlscyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFycml2ZUxvY2F0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBhcnJpdmVMb2NhdGlvbih2YWx1ZTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5hcnJpdmVMb2NhdGlvbiA9IHZhbHVlO1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0ID0gJyc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlICYmIHZhbHVlLmdhdGV3YXkpIHtcclxuICAgICAgdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0ID0gdmFsdWUuZ2F0ZXdheTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY2FiaW5DbGFzcygpOiBGbGlnaHRDYWJpbkNsYXNzIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNhYmluQ2xhc3M7XHJcbiAgfVxyXG5cclxuICBzZXQgY2FiaW5DbGFzcyh2YWx1ZTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGwpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jYWJpbkNsYXNzID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgcmV0dXJuQ2FiaW5DbGFzcygpOiBGbGlnaHRDYWJpbkNsYXNzIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnJldHVybkNhYmluQ2xhc3M7XHJcbiAgfVxyXG5cclxuICBzZXQgcmV0dXJuQ2FiaW5DbGFzcyh2YWx1ZTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGwpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY2hvc2VuU2VhcmNoVHlwZSgpOiBGbGlnaHRTZWFyY2hUeXBlIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZTtcclxuICB9XHJcblxyXG4gIHNldCBjaG9zZW5TZWFyY2hUeXBlKHR5cGU6IEZsaWdodFNlYXJjaFR5cGUpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID0gdHlwZTtcclxuICB9XHJcblxyXG4gIGdldCBpc1JldHVybigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm47XHJcbiAgfVxyXG5cclxuICBnZXQgb3V0VGltZUNyaXRlcmlhKCk6IFRpbWVXaW5kb3cge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lQ3JpdGVyaWE7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0VGltZUNyaXRlcmlhKHZhbHVlOiBUaW1lV2luZG93KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUNyaXRlcmlhID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaW5UaW1lQ3JpdGVyaWEoKTogVGltZVdpbmRvdyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmluVGltZUNyaXRlcmlhO1xyXG4gIH1cclxuXHJcbiAgc2V0IGluVGltZUNyaXRlcmlhKHZhbHVlOiBUaW1lV2luZG93KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuaW5UaW1lQ3JpdGVyaWEgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcbiAgZ2V0IG1heENvbm5lY3Rpb25zKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm1heENvbm5lY3Rpb25zO1xyXG4gIH1cclxuXHJcbiAgc2V0IG1heENvbm5lY3Rpb25zKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5tYXhDb25uZWN0aW9ucyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbXVsdGlEZXN0aW5hdGlvbjogRGVzdGluYXRpb25FbnRyeVtdID0gW107XHJcbiAgZ2V0IG11bHRpRGVzdGluYXRpb24oKTogSU11bHRpRGVzdGluYXRpb25bXSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm11bHRpRGVzdGluYXRpb247XHJcbiAgfVxyXG5cclxuICBzZXQgbXVsdGlEZXN0aW5hdGlvbih2YWx1ZUFycmF5OiBJTXVsdGlEZXN0aW5hdGlvbltdKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMubXVsdGlEZXN0aW5hdGlvbiA9IHZhbHVlQXJyYXk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHNob3dIb3RlbEZvcm0oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2hvd0hvdGVsRm9ybTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgc2hvd0hvdGVsRm9ybShuZXdWYWw6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3Nob3dIb3RlbEZvcm0gPSBuZXdWYWw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGhvdGVsU2VhcmNoUmVxdWVzdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2hvdGVsU2VhcmNoUmVxdWVzdGVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBob3RlbFNlYXJjaFJlcXVlc3RlZChuZXdWYWw6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2hvdGVsU2VhcmNoUmVxdWVzdGVkID0gbmV3VmFsO1xyXG4gIH1cclxuXHJcbiAgc2V0TXVsdGlEZXN0aW5hdGlvblF1ZXJ5KG11bHRpRGVzdGluYXRpb246IElNdWx0aURlc3RpbmF0aW9uW10pIHtcclxuICAgIGNvbnN0IG5ld011bHRpRGVzdGluYXRpb24gPSB0aGlzLmhlbHBlcnMuY2xvbmUobXVsdGlEZXN0aW5hdGlvbik7XHJcbiAgICByZXR1cm4gbmV3TXVsdGlEZXN0aW5hdGlvbi5yZWR1Y2UoXHJcbiAgICAgIChkZXN0aW5hdGlvbkFycmF5OiBEZXN0aW5hdGlvbkVudHJ5W10sIGl0ZW06IElNdWx0aURlc3RpbmF0aW9uKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGVzdGluYXRpb25PYmplY3QgPSB7fSBhcyBEZXN0aW5hdGlvbkVudHJ5O1xyXG4gICAgICAgIGRlc3RpbmF0aW9uT2JqZWN0Lm9yaWcgPSBpdGVtLm9yaWcuZ2F0ZXdheTtcclxuICAgICAgICBkZXN0aW5hdGlvbk9iamVjdC5kZXN0ID0gaXRlbS5kZXN0LmdhdGV3YXk7XHJcbiAgICAgICAgZGVzdGluYXRpb25PYmplY3QuZGF0ZSA9IHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlKGl0ZW0uZGF0ZSk7XHJcbiAgICAgICAgZGVzdGluYXRpb25BcnJheS5wdXNoKGRlc3RpbmF0aW9uT2JqZWN0KTtcclxuICAgICAgICByZXR1cm4gZGVzdGluYXRpb25BcnJheTtcclxuICAgICAgfSxcclxuICAgICAgW10gYXMgRGVzdGluYXRpb25FbnRyeVtdXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gZ2V0IG9ubHlcclxuICBnZXQgc29ydERyb3Bkb3duVmFsdWVzKCk6IFZhbHVlRGlzcGxheTxGbGlnaHRTb3J0VHlwZXM+W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NvcnRBcnJheTtcclxuICB9XHJcblxyXG4gIGdldCBmYXJlVHlwZXNWYWx1ZXMoKTogVmFsdWVEaXNwbGF5PEZhcmVUeXBlPltdIHtcclxuICAgIHJldHVybiB0aGlzLl9mYXJlVHlwZUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZhcmVUeXBlKCk6IEZhcmVUeXBlIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZmFyZVR5cGU7XHJcbiAgfVxyXG5cclxuICBzZXQgZmFyZVR5cGUodmFsdWU6IEZhcmVUeXBlKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZmFyZVR5cGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBuZWdvdGlhdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX25lZ290aWF0ZWQ7XHJcbiAgfVxyXG5cclxuICBzZXQgbmVnb3RpYXRlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fbmVnb3RpYXRlZCA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGluY2x1ZGVOZWFyYnlBaXJwb3J0cygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaW5jbHVkZU5lYXJieUFpcnBvcnRzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGluY2x1ZGVOZWFyYnlBaXJwb3J0cyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA9IHZhbHVlO1xyXG4gIH1cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZmxpZ2h0ZmV0Y2hlcjogQmFzZUZsaWdodFF1b3RlRmV0Y2hlcjxGUV9RPixcclxuICAgIGhlbHBlcnM6IEJhc2VIZWxwZXJSb3V0aW5lcyxcclxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gICAgcHJpdmF0ZSBiYXNrZXRTZXJ2aWNlOiBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcclxuICAgIHN0b3JhZ2VTZXJ2aWNlOiBCYXNlU3RvcmFnZVNlcnZpY2UsXHJcbiAgICBzZWFyY2hTZXJ2aWNlOiBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSxcclxuICAgIHByaXZhdGUgYXBwbHlGbGlnaHRSdWxlczogQmFzZUFwcGx5Sml0RmxpZ2h0UnVsZXNGZXRjaGVyPEFKRl9RPixcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCYXNlTW9kYWxPcGVuZXJTZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgc3VwZXIoc3RvcmFnZVNlcnZpY2UsIGhlbHBlcnMsIHNlYXJjaFNlcnZpY2UsIHVzZXJTZXJ2aWNlKTtcclxuXHJcbiAgICBjb25zdCBkYXRhOiB7XHJcbiAgICAgIHRlbXBQYXJhbXM6IEZsaWdodFRlbXBQYXJhbXM7XHJcbiAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogRmxpZ2h0VGVtcFBhcmFtcztcclxuICAgIH0gPSBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbShcclxuICAgICAgRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TXHJcbiAgICApIHx8IHtcclxuICAgICAgdGVtcFBhcmFtczoge30gYXMgRmxpZ2h0VGVtcFBhcmFtcyxcclxuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB7fSBhcyBGbGlnaHRUZW1wUGFyYW1zXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHF1ZXJ5ID0gc2VhcmNoU2VydmljZS5tYWtlRmxpZ2h0UXVlcnkoZGF0YS50ZW1wUGFyYW1zKTtcclxuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyhxdWVyeSk7XHJcbiAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBkYXRhLm9yaWdpbmFsVXNlclNlYXJjaDtcclxuICAgIGlmIChzZWFyY2hTZXJ2aWNlLnNob3VsZEFkZFRyYXZlbGxlclN1YnNjcmlwdGlvbigpKSB7XHJcbiAgICAgIHNlYXJjaFNlcnZpY2UudHJhdmVsbGVySW5mb3JtYXRpb24uc3Vic2NyaWJlKFxyXG4gICAgICAgICh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsZXJzID0gdHJhdmVsbGVycztcclxuICAgICAgICAgIGNvbnN0IHNwbGl0VHJhdmVsbGVycyA9IHRoaXMuaGVscGVycy5zZWxlY3RlZFRyYXZlbGxlcnMoXHJcbiAgICAgICAgICAgIHRyYXZlbGxlcnMsXHJcbiAgICAgICAgICAgIFNlcnZpY2VUeXBlLkZsaWdodFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5hZHVsdHMgPSBzcGxpdFRyYXZlbGxlcnMuYWR1bHRzLmxlbmd0aDtcclxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IHNwbGl0VHJhdmVsbGVycy5jaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgICAgICAvLyB0aGlzLnRlbXBQYXJhbXMuaW5mYW50cyA9IHNwbGl0VHJhdmVsbGVycy5pbmZhbnRzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlcnMoKTtcclxuICAgICAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdXNlclNlcnZpY2UuY2hhbmdlVXNlci5zdWJzY3JpYmUoKF91c2VyOiBGdWxsVXNlckRldGFpbHMpID0+IHtcclxuICAgICAgdGhpcy50aW1lQ3JpdGVyaWFPcHRpb25zLm5leHQoW1xyXG4gICAgICAgIFRpbWVXaW5kb3cuQW55dGltZSxcclxuICAgICAgICBUaW1lV2luZG93LkFycml2ZSxcclxuICAgICAgICBUaW1lV2luZG93LkRlcGFydFxyXG4gICAgICBdKTsgLy8gVE9ETyB1cGRhdGUgd2l0aCBhbnkgVUZzXHJcbiAgICAgIHRoaXMuZmxpZ2h0T3BlcmF0b3JzLm5leHQoW3sgY29kZTogJ0JBJywgbmFtZTogJ0JyaXRpc2ggQWlyd2F5cycgfV0pOyAvLyBGZXRjaCB0aGVzZSBmcm9tIERCXHJcbiAgICAgIHRoaXMudXBkYXRlQXZhbGlhYmxlQ2xhc3NlcygpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJzKCk7XHJcblxyXG4gICAgdGhpcy5uZWdvdGlhdGVkID1cclxuICAgICAgdGhpcy50ZW1wUGFyYW1zLmZhcmVUeXBlID09PSBGYXJlVHlwZS5OZWdvdGlhdGVkID8gdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHByb2Nlc3NSZXN1bHRzKFxyXG4gICAgcmVzdWx0czogRmxpZ2h0QWxsUXVvdGVSZXN1bHRcclxuICApOiBGbGlnaHRRdW90ZVJlc3VsdEFycmF5IHtcclxuICAgIGlmICghcmVzdWx0cykge1xyXG4gICAgICB0aGlzLl9ncm91cGVkID0gW107XHJcbiAgICAgIHRoaXMubXVsdGkgPSBbXTtcclxuICAgICAgdGhpcy5yZXN1bHRRdWVyeSA9IG51bGw7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIHRoaXMuX2dyb3VwZWQgPSByZXN1bHRzLmdyb3VwZWQgfHwgW107XHJcbiAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeSA9IE9iamVjdC5hc3NpZ24oXHJcbiAgICAgIHt9LFxyXG4gICAgICB7XHJcbiAgICAgICAgam91cm5leVdoZW5TZWxlY3RlZDoge30sXHJcbiAgICAgICAgZHVhbFNpbmdsZVdoZW5TZWxlY3RlZDoge30sXHJcbiAgICAgICAgd2hlblNlbGVjdGVkQWxvbmU6IHt9XHJcbiAgICAgIH0sXHJcbiAgICAgIHJlc3VsdHMucnVsZUFjdGlvblN1bW1hcnkgfHwge31cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5yZXN1bHRRdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcclxuICAgIHRoaXMubXVsdGkgPSByZXN1bHRzLm11bHRpO1xyXG4gICAgdGhpcy5zZXRGbGlnaHREaXNwbGF5VHlwZShGbGlnaHREaXNwbGF5VHlwZXMucmV0dXJucyk7XHJcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXJzID0gdGhpcy5oZWxwZXJzLmNyZWF0ZUZsaWdodEZpbHRlcnMoXHJcbiAgICAgIHJlc3VsdHMuam91cm5leXMsXHJcbiAgICAgIERFRkFVTFRfRkxJR0hUX0ZJTFRFUlNcclxuICAgICk7XHJcbiAgICB0aGlzLmZpbHRlcnMubmV4dCh0aGlzLmN1cnJlbnRGaWx0ZXJzKTtcclxuXHJcbiAgICAvLyBkZWxldGUgdGhpcy5yZXN1bHRRdWVyeVsnd2l0aEdyb3VwZWQnXTtcclxuICAgIGNvbnN0IGR1YWxTaW5nbGVzID0gcmVzdWx0cy5tdWx0aS5yZWR1Y2UoXHJcbiAgICAgIChcclxuICAgICAgICBwcmV2aW91c0l0ZW1zOiB7XHJcbiAgICAgICAgICBvdXRib3VuZDogUmVjb3JkPG51bWJlciwgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnM+O1xyXG4gICAgICAgICAgaW5ib3VuZDogUmVjb3JkPG51bWJlciwgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnM+O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbmV4dEl0ZW06IEl0aW5lcmFyeVN1bW1hcnlcclxuICAgICAgKSA9PiB7XHJcbiAgICAgICAgcHJldmlvdXNJdGVtc1tuZXh0SXRlbS5vcmRlciA9PT0gT1VUQk9VTkQgPyAnb3V0Ym91bmQnIDogJ2luYm91bmQnXSA9XHJcbiAgICAgICAgICBuZXh0SXRlbS5yZXN1bHRzLnJlZHVjZShcclxuICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgIGFjY3VtOiBSZWNvcmQ8bnVtYmVyLCBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucz4sXHJcbiAgICAgICAgICAgICAgZmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9uc1xyXG4gICAgICAgICAgICApOiBSZWNvcmQ8bnVtYmVyLCBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucz4gPT4ge1xyXG4gICAgICAgICAgICAgIGFjY3VtW2ZsaWdodC51aWRdID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBjYW5TZWxlY3Q6IHRydWVcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBmbGlnaHRcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHJldHVybiBhY2N1bTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcHJldmlvdXNJdGVtc1tuZXh0SXRlbS5vcmRlciA9PT0gT1VUQk9VTkQgPyAnb3V0Ym91bmQnIDogJ2luYm91bmQnXVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gcHJldmlvdXNJdGVtcztcclxuICAgICAgfSxcclxuICAgICAgeyBvdXRib3VuZDoge30sIGluYm91bmQ6IHt9IH1cclxuICAgICk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhkdWFsU2luZ2xlcyk7XHJcbiAgICBjb25zdCBkdWFsSW5ib3VuZEZpbHRlcnMgPSB0aGlzLmhlbHBlcnMuY3JlYXRlRmxpZ2h0RmlsdGVycyhcclxuICAgICAgT2JqZWN0LnZhbHVlcyhkdWFsU2luZ2xlcy5pbmJvdW5kKSxcclxuICAgICAgREVGQVVMVF9GTElHSFRfRklMVEVSU1xyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmR1cmFsU2luZ2xlRmlsdGVyLm5leHQoXHJcbiAgICAgIHRoaXMuaGVscGVycy5jcmVhdGVGbGlnaHRGaWx0ZXJzKE9iamVjdC52YWx1ZXMoZHVhbFNpbmdsZXMub3V0Ym91bmQpLCB7XHJcbiAgICAgICAgLi4uREVGQVVMVF9GTElHSFRfRklMVEVSUyxcclxuICAgICAgICBwcmljZTogZHVhbEluYm91bmRGaWx0ZXJzLnByaWNlLFxyXG4gICAgICAgIGFycml2YWxSZXR1cm5BaXJwb3J0OiBkdWFsSW5ib3VuZEZpbHRlcnMuYXJyaXZhbEFpcnBvcnQsXHJcbiAgICAgICAgZGVwYXR1cmVSZXR1cm5BaXJwb3J0OiBkdWFsSW5ib3VuZEZpbHRlcnMuZGVwYXR1cmVBaXJwb3J0LFxyXG4gICAgICAgIHJldHVybkFycml2YWxUaW1lOiBkdWFsSW5ib3VuZEZpbHRlcnMuYXJyaXZhbFRpbWUsXHJcbiAgICAgICAgcmV0dXJuRHVyYXRpb246IGR1YWxJbmJvdW5kRmlsdGVycy5kdXJhdGlvbixcclxuICAgICAgICByZXR1cm5EZXBhcnR1cmVUaW1lOiBkdWFsSW5ib3VuZEZpbHRlcnMuZGVwYXJ0dXJlVGltZVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIGlmIChyZXN1bHRzICYmIHRoaXMuc2VhcmNoU2VydmljZS5pc0ZsaWdodHNHcm91cGVkKCkpIHtcclxuICAgICAgY29uc3QgcmV0dXJucyA9IChcclxuICAgICAgICAocmVzdWx0cy5qb3VybmV5cyBhcyB1bmtub3duIGFzIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zW10pIHx8IFtdXHJcbiAgICAgICkucmVkdWNlKFxyXG4gICAgICAgIChcclxuICAgICAgICAgIGFjY3VtOiBSZWNvcmQ8bnVtYmVyLCBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucz4sXHJcbiAgICAgICAgICBmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zXHJcbiAgICAgICAgKTogUmVjb3JkPG51bWJlciwgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnM+ID0+IHtcclxuICAgICAgICAgIGFjY3VtW2ZsaWdodC51aWRdID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICBjYW5TZWxlY3Q6IHRydWVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZmxpZ2h0XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge31cclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IHJldHVybkRhdGEgPSAocmVzdWx0cy5ncm91cGVkIHx8IFtdKS5yZWR1Y2UoXHJcbiAgICAgICAgdGhpcy5tYWtlR3JvdXBlZE9iamVjdHMocmV0dXJucyksXHJcbiAgICAgICAgW11cclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IGR1YWxEYXRhT3V0Ym91bmQ6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFtdID0gKFxyXG4gICAgICAgIHJlc3VsdHMuZ3JvdXBlZCB8fCBbXVxyXG4gICAgICApXHJcbiAgICAgICAgLnJlZHVjZSh0aGlzLm1ha2VHcm91cGVkT2JqZWN0cyhkdWFsU2luZ2xlcy5vdXRib3VuZCksIFtdKVxyXG4gICAgICAgIC5tYXAoKHJlc3VsdDE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgcmVzdWx0MS5kaXJlY3Rpb24gPSBGbGlnaHREaXJlY3Rpb25FbnVtLkR1YWxTaW5nbGVPdXRib3VuZDtcclxuICAgICAgICAgIHJldHVybiByZXN1bHQxO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgZHVhbERhdGFJbmJvdW5kOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHRbXSA9IChcclxuICAgICAgICByZXN1bHRzLmdyb3VwZWQgfHwgW11cclxuICAgICAgKVxyXG4gICAgICAgIC5yZWR1Y2UodGhpcy5tYWtlR3JvdXBlZE9iamVjdHMoZHVhbFNpbmdsZXMuaW5ib3VuZCwgdHJ1ZSksIFtdKVxyXG4gICAgICAgIC5tYXAoKHJlc3VsdDE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgcmVzdWx0MS5kaXJlY3Rpb24gPSBGbGlnaHREaXJlY3Rpb25FbnVtLkR1YWxTaW5nbGVJbmJvdW5kO1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDE7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIC8vIGdvbm5hIGdyYWIgY2hlYXBlc3QgZmxpZ2h0cyBoZXJlXHJcbiAgICAgIHRoaXMuX2NoZWFwZXN0UHJpY2VPYmplY3QucmV0dXJucyA9IHJldHVybkRhdGEucmVkdWNlKFxyXG4gICAgICAgIChjaGVhcGVzdFByaWNlOiBJQ2hlYXBlc3RQcmljZSwgcmVzdWx0OiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHByaWNlID0gcmVzdWx0Lm1pblByaWNlO1xyXG4gICAgICAgICAgaWYgKGNoZWFwZXN0UHJpY2UuYW1vdW50ID4gcHJpY2UpIHtcclxuICAgICAgICAgICAgY2hlYXBlc3RQcmljZS5hbW91bnQgPSBwcmljZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBjaGVhcGVzdFByaWNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgeyBhbW91bnQ6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLCBjdXJyZW5jeUNvZGU6ICdHQlAnIH1cclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMuX2NoZWFwZXN0UHJpY2VPYmplY3QuZHVhbE91dGJvdW5kID0gZHVhbERhdGFPdXRib3VuZC5yZWR1Y2UoXHJcbiAgICAgICAgKGNoZWFwZXN0UHJpY2U6IElDaGVhcGVzdFByaWNlLCByZXN1bHQ6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgcHJpY2UgPSByZXN1bHQubWluUHJpY2U7XHJcbiAgICAgICAgICBpZiAoY2hlYXBlc3RQcmljZS5hbW91bnQgPiBwcmljZSkge1xyXG4gICAgICAgICAgICBjaGVhcGVzdFByaWNlLmFtb3VudCA9IHByaWNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGNoZWFwZXN0UHJpY2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB7IGFtb3VudDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsIGN1cnJlbmN5Q29kZTogJ0dCUCcgfVxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5fY2hlYXBlc3RQcmljZU9iamVjdC5kdWFsSW5ib3VuZCA9IGR1YWxEYXRhSW5ib3VuZC5yZWR1Y2UoXHJcbiAgICAgICAgKGNoZWFwZXN0UHJpY2U6IElDaGVhcGVzdFByaWNlLCByZXN1bHQ6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgcHJpY2UgPSByZXN1bHQubWluUHJpY2U7XHJcbiAgICAgICAgICBpZiAoY2hlYXBlc3RQcmljZS5hbW91bnQgPiBwcmljZSkge1xyXG4gICAgICAgICAgICBjaGVhcGVzdFByaWNlLmFtb3VudCA9IHByaWNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGNoZWFwZXN0UHJpY2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB7IGFtb3VudDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsIGN1cnJlbmN5Q29kZTogJ0dCUCcgfVxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgZGF0YTIgPSBbLi4ucmV0dXJuRGF0YSwgLi4uZHVhbERhdGFPdXRib3VuZCwgLi4uZHVhbERhdGFJbmJvdW5kXTtcclxuICAgICAgY29uc29sZS5sb2coJ1Byb2Nlc3NlZCBHcm91cGVkIGRhdGEnLCBkYXRhMik7XHJcbiAgICAgIHJldHVybiBkYXRhMjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiByZXN1bHRzID8gW3Jlc3VsdHNdIDogW107XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgbWFrZUdyb3VwZWRPYmplY3RzKFxyXG4gICAgZ3JvdXBlZE9iamVjdDogUmVjb3JkPG51bWJlciwgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnM+LFxyXG4gICAgdHJlYXRPdXRib3VuZHNBc091dGJvdW5kczogYm9vbGVhbiA9IGZhbHNlXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBhY2M6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFtdLFxyXG4gICAgICBpdGVtOiBHcm91cGVkRmllbGRzRnJhZ21lbnRcclxuICAgICk6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFtdID0+IHtcclxuICAgICAgY29uc3QgaXNPdXRCb3VuZCA9IGl0ZW0uYm91bmRJbmRpY2F0b3IgPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmQ7XHJcbiAgICAgIGNvbnN0IHJldHVybk9iamVjdDogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0ID0ge1xyXG4gICAgICAgIHR5cGU6ICdGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQnLFxyXG4gICAgICAgIGRpcmVjdGlvbjogaXRlbS5ib3VuZEluZGljYXRvcixcclxuICAgICAgICBjbGFzc2VzOiB7XHJcbiAgICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzc106IG51bGwgYXMgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MsXHJcbiAgICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzc0JyYW5kZWRdOiBudWxsIGFzIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gICAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teUZsZXhpXTogbnVsbCBhcyBGbGlnaHRJdGluZXJhcnlDbGFzcyxcclxuICAgICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aUJyYW5kZWRdOlxyXG4gICAgICAgICAgICBudWxsIGFzIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gICAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFnc106IG51bGwgYXMgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MsXHJcbiAgICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215Tm9CYWdzQnJhbmRlZF06XHJcbiAgICAgICAgICAgIG51bGwgYXMgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MsXHJcbiAgICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZF06IG51bGwgYXMgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MsXHJcbiAgICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZEJyYW5kZWRdOlxyXG4gICAgICAgICAgICBudWxsIGFzIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gICAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRmlyc3RdOiBudWxsIGFzIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gICAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRmlyc3RCcmFuZGVkXTogbnVsbCBhcyBGbGlnaHRJdGluZXJhcnlDbGFzcyxcclxuICAgICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215XTogbnVsbCBhcyBGbGlnaHRJdGluZXJhcnlDbGFzcyxcclxuICAgICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215QnJhbmRlZF06XHJcbiAgICAgICAgICAgIG51bGwgYXMgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3NcclxuICAgICAgICB9LFxyXG4gICAgICAgIG9yaWdpbkFpcnBvcnQ6ICcnLFxyXG4gICAgICAgIG9yaWdpbkFpcnBvcnROYW1lOiAnJyxcclxuICAgICAgICBkZXN0aW5hdGlvbkFpcnBvcnQ6ICcnLFxyXG4gICAgICAgIGRlc3RpbmF0aW9uQWlycG9ydE5hbWU6ICcnLFxyXG4gICAgICAgIGRlcGFydERhdGVUaW1lOiAnJyxcclxuICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6ICcnLFxyXG4gICAgICAgIG91dGJvdW5kVG90YWxEdXJhdGlvbjogMCxcclxuICAgICAgICBpbmJvdW5kVG90YWxEdXJhdGlvbjogMCxcclxuICAgICAgICBvdXRsZWdzOiBudWxsLFxyXG4gICAgICAgIGlubGVnczogbnVsbCxcclxuICAgICAgICBvdXRsZWdzQ291bnQ6IDAsXHJcbiAgICAgICAgaW5sZWdzQ291bnQ6IDAsXHJcbiAgICAgICAgZGF0YVNvdXJjZTogJycsXHJcbiAgICAgICAgcHJlZmVycmVkOiBmYWxzZSxcclxuICAgICAgICBjb21wYW55UHJlZmVycmVkOiBmYWxzZSxcclxuICAgICAgICBjb21wYW55UHJlZmVycmVkTWVzc2FnZTogJycsXHJcbiAgICAgICAgb2ZmaWNlUHJlZmVycmVkOiBmYWxzZSxcclxuICAgICAgICBvZmZpY2VQcmVmZXJyZWRNZXNzYWdlOiAnJyxcclxuICAgICAgICB0bWNQcmVmZXJyZWQ6IGZhbHNlLFxyXG4gICAgICAgIHRtY1ByZWZlcnJlZE1lc3NhZ2U6ICcnLFxyXG4gICAgICAgIG91dGJvdW5kRmxpZ2h0TnVtYmVyOiAnJyxcclxuICAgICAgICBvcGVyYXRvcjogJycsXHJcbiAgICAgICAgb3BlcmF0b3JGdWxsOiAnJyxcclxuICAgICAgICBpbmJvdW5kRmxpZ2h0TnVtYmVyOiAnJyxcclxuICAgICAgICBpc1JldHVybjogZmFsc2UsXHJcbiAgICAgICAgbWluUHJpY2U6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLFxyXG4gICAgICAgIG1heFByaWNlOiAwLFxyXG4gICAgICAgIGNvMlBlckl0ZW06IDAsXHJcbiAgICAgICAgY28yUGVyUGFzc2VuZ2VyOiAwLFxyXG4gICAgICAgIGdpZDogaXRlbS5yZWZlcmVuY2VJRFxyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBicmFuZHM6IE1hdGNoaW5nRmxpZ2h0cyA9IGl0ZW0uZmxpZ2h0cztcclxuXHJcbiAgICAgIE9iamVjdC5rZXlzKGJyYW5kcylcclxuICAgICAgICAuZmlsdGVyKChrZXk6IHN0cmluZykgPT4ga2V5WzBdICE9PSAnXycpXHJcbiAgICAgICAgLmZvckVhY2goKGJyYW5kOiBGbGlnaHRHcm91cHMpID0+IHtcclxuICAgICAgICAgIGlmICghYnJhbmRzW2JyYW5kXS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gISB1c2luZyBhIHJlZHVjZSBiZWNhdXNlIG5vdCBhbGwgZmxpZ2h0cyBhY3R1YWxseSBleGlzdCBhbmQgd2Ugd2VyZSBzZWVpbmcgdW5kZWZpbmVkIGluIHRoZSBmbGlnaHQgbGlzdFxyXG4gICAgICAgICAgYnJhbmRzW2JyYW5kXS5mb3JFYWNoKChmbGlnaHROdW06IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmbGlnaHQgPSBncm91cGVkT2JqZWN0W2ZsaWdodE51bV07XHJcblxyXG4gICAgICAgICAgICBpZiAoZmxpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgaWYgKGlzT3V0Qm91bmQgfHwgdHJlYXRPdXRib3VuZHNBc091dGJvdW5kcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVHcm91cGVkSXRlbShcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQuc291cmNlLFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQub3V0Ym91bmRGbGlnaHRzLFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQub3V0Ym91bmRUb3RhbER1cmF0aW9uLFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQuaW5ib3VuZEZsaWdodHMsXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5pbmJvdW5kVG90YWxEdXJhdGlvbixcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0LmNvMlBlckl0ZW0sXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5jbzJQZXJQYXNzZW5nZXJcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlR3JvdXBlZEl0ZW0oXHJcbiAgICAgICAgICAgICAgICAgIHJldHVybk9iamVjdCxcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0LnNvdXJjZSxcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0LmluYm91bmRGbGlnaHRzLFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQuaW5ib3VuZFRvdGFsRHVyYXRpb24sXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5vdXRib3VuZEZsaWdodHMsXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5vdXRib3VuZFRvdGFsRHVyYXRpb24sXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5jbzJQZXJJdGVtLFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQuY28yUGVyUGFzc2VuZ2VyXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBjb25zdCBjb3JyZWN0QnJhbmQ6IE9CVEZsaWdodENhYmluQ2xhc3MgPVxyXG4gICAgICAgICAgICAgICAgdGhpcy5oZWxwZXJzLkZsaWdodENhYmluQ2xhc3NUb0JyYW5kZWRPQlRGbGlnaHRDYWJpbkNsYXNzKFxyXG4gICAgICAgICAgICAgICAgICBicmFuZCxcclxuICAgICAgICAgICAgICAgICAgISFmbGlnaHQuYmFzZUZhcmVJZCAmJiBmbGlnaHQuYmFzZUZhcmVJZCAhPT0gZmxpZ2h0LnVpZFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBjb25zdCBtaW5wcmljZSA9IE1hdGguZmxvb3IoZmxpZ2h0LnRvdGFsLnByaWNlKTtcclxuICAgICAgICAgICAgICBjb25zdCBtYXhwcmljZSA9IE1hdGguY2VpbChmbGlnaHQudG90YWwucHJpY2UpO1xyXG4gICAgICAgICAgICAgIHJldHVybk9iamVjdC5taW5QcmljZSA9XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QubWluUHJpY2UgPCBtaW5wcmljZVxyXG4gICAgICAgICAgICAgICAgICA/IHJldHVybk9iamVjdC5taW5QcmljZVxyXG4gICAgICAgICAgICAgICAgICA6IG1pbnByaWNlO1xyXG5cclxuICAgICAgICAgICAgICByZXR1cm5PYmplY3QubWF4UHJpY2UgPVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0Lm1heFByaWNlID4gbWF4cHJpY2VcclxuICAgICAgICAgICAgICAgICAgPyByZXR1cm5PYmplY3QubWF4UHJpY2VcclxuICAgICAgICAgICAgICAgICAgOiBtYXhwcmljZTtcclxuXHJcbiAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0LmNvbXBhbnlQcmVmZXJyZWQgPVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtmbGlnaHQuam91cm5leUhhc2hdXHJcbiAgICAgICAgICAgICAgICAgID8uY29tcGFueVByZWZlcnJlZCB8fFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbZmxpZ2h0LmpvdXJuZXlIYXNoXVxyXG4gICAgICAgICAgICAgICAgICA/LmNvbXBhbnlQcmVmZXJyZWQgfHxcclxuICAgICAgICAgICAgICAgIGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICByZXR1cm5PYmplY3QuY29tcGFueVByZWZlcnJlZE1lc3NhZ2UgPVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtmbGlnaHQuam91cm5leUhhc2hdXHJcbiAgICAgICAgICAgICAgICAgID8uY29tcGFueVByZWZlcnJlZE1lc3NhZ2UgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2ZsaWdodC5qb3VybmV5SGFzaF1cclxuICAgICAgICAgICAgICAgICAgPy5jb21wYW55UHJlZmVycmVkTWVzc2FnZSB8fFxyXG4gICAgICAgICAgICAgICAgJyc7XHJcbiAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0Lm9mZmljZVByZWZlcnJlZCA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2ZsaWdodC5qb3VybmV5SGFzaF1cclxuICAgICAgICAgICAgICAgICAgPy5vZmZpY2VQcmVmZXJyZWQgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2ZsaWdodC5qb3VybmV5SGFzaF1cclxuICAgICAgICAgICAgICAgICAgPy5vZmZpY2VQcmVmZXJyZWQgfHxcclxuICAgICAgICAgICAgICAgIGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICByZXR1cm5PYmplY3Qub2ZmaWNlUHJlZmVycmVkTWVzc2FnZSA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2ZsaWdodC5qb3VybmV5SGFzaF1cclxuICAgICAgICAgICAgICAgICAgPy5vZmZpY2VQcmVmZXJyZWRNZXNzYWdlIHx8XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtmbGlnaHQuam91cm5leUhhc2hdXHJcbiAgICAgICAgICAgICAgICAgID8ub2ZmaWNlUHJlZmVycmVkTWVzc2FnZSB8fFxyXG4gICAgICAgICAgICAgICAgJyc7XHJcbiAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0LnRtY1ByZWZlcnJlZCA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2ZsaWdodC5qb3VybmV5SGFzaF1cclxuICAgICAgICAgICAgICAgICAgPy50bWNQcmVmZXJyZWQgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2ZsaWdodC5qb3VybmV5SGFzaF1cclxuICAgICAgICAgICAgICAgICAgPy50bWNQcmVmZXJyZWQgfHxcclxuICAgICAgICAgICAgICAgIGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICByZXR1cm5PYmplY3QudG1jUHJlZmVycmVkTWVzc2FnZSA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2ZsaWdodC5qb3VybmV5SGFzaF1cclxuICAgICAgICAgICAgICAgICAgPy50bWNQcmVmZXJyZWRNZXNzYWdlIHx8XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtmbGlnaHQuam91cm5leUhhc2hdXHJcbiAgICAgICAgICAgICAgICAgID8udG1jUHJlZmVycmVkTWVzc2FnZSB8fFxyXG4gICAgICAgICAgICAgICAgJyc7XHJcblxyXG4gICAgICAgICAgICAgIHJldHVybk9iamVjdC5wcmVmZXJyZWQgPVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtmbGlnaHQuam91cm5leUhhc2hdXHJcbiAgICAgICAgICAgICAgICAgID8uY29tcGFueVByZWZlcnJlZCB8fFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbZmxpZ2h0LmpvdXJuZXlIYXNoXVxyXG4gICAgICAgICAgICAgICAgICA/LmNvbXBhbnlQcmVmZXJyZWQgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbZmxpZ2h0LmpvdXJuZXlIYXNoXVxyXG4gICAgICAgICAgICAgICAgICA/Lm9mZmljZVByZWZlcnJlZCB8fFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbZmxpZ2h0LmpvdXJuZXlIYXNoXVxyXG4gICAgICAgICAgICAgICAgICA/Lm9mZmljZVByZWZlcnJlZCB8fFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtmbGlnaHQuam91cm5leUhhc2hdXHJcbiAgICAgICAgICAgICAgICAgID8udG1jUHJlZmVycmVkIHx8XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtmbGlnaHQuam91cm5leUhhc2hdXHJcbiAgICAgICAgICAgICAgICAgID8udG1jUHJlZmVycmVkO1xyXG4gICAgICAgICAgICAgIGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICBpZiAocmV0dXJuT2JqZWN0LmNsYXNzZXNbY29ycmVjdEJyYW5kXT8uZmxpZ2h0cz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuY2xhc3Nlc1tjb3JyZWN0QnJhbmRdLmZsaWdodHMucHVzaChmbGlnaHQpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybk9iamVjdC5jbGFzc2VzW2NvcnJlY3RCcmFuZF0ubWlucHJpY2UgPSBNYXRoLm1pbihcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0LmNsYXNzZXNbY29ycmVjdEJyYW5kXS5taW5wcmljZSxcclxuICAgICAgICAgICAgICAgICAgbWlucHJpY2VcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuY2xhc3Nlc1tjb3JyZWN0QnJhbmRdLm1heHByaWNlID0gTWF0aC5tYXgoXHJcbiAgICAgICAgICAgICAgICAgIHJldHVybk9iamVjdC5jbGFzc2VzW2NvcnJlY3RCcmFuZF0ubWF4cHJpY2UsXHJcbiAgICAgICAgICAgICAgICAgIG1heHByaWNlXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuY2xhc3Nlc1tjb3JyZWN0QnJhbmRdID0ge1xyXG4gICAgICAgICAgICAgICAgICBmbGlnaHRzOiBbZmxpZ2h0XSxcclxuICAgICAgICAgICAgICAgICAgbWlucHJpY2UsXHJcbiAgICAgICAgICAgICAgICAgIG1heHByaWNlLFxyXG4gICAgICAgICAgICAgICAgICBjdXJyZW5jeTogZmxpZ2h0LnRvdGFsLmN1cnJlbmN5XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAvLyBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAgIC8vICAgJ1VuYWJsZSB0byBmaW5kIGZsaWdodCB3aXRoIHVpZCAnICsgZmxpZ2h0TnVtXHJcbiAgICAgICAgICAgICAgLy8gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICByZXR1cm5PYmplY3QgJiZcclxuICAgICAgICAhIU9iamVjdC52YWx1ZXMocmV0dXJuT2JqZWN0LmNsYXNzZXMpLmZpbmQoXHJcbiAgICAgICAgICAoY2xhczogRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MpOiBib29sZWFuID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGNsYXM/LmZsaWdodHM/Lmxlbmd0aCA+IDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICBhY2MucHVzaChyZXR1cm5PYmplY3QpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhY2MuZmlsdGVyKChpdGVtMjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0KSA9PiAhIWl0ZW0yKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUdyb3VwZWRJdGVtKFxyXG4gICAgcmV0dXJuT2JqZWN0OiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICBzb3VyY2U6IHN0cmluZyxcclxuICAgIG91dGJvdW5kRmxpZ2h0czogRmxpZ2h0Sm91cm5leVtdLFxyXG4gICAgb3V0Ym91bmRUb3RhbER1cmF0aW9uOiBudW1iZXIsXHJcbiAgICBpbmJvdW5kRmxpZ2h0czogRmxpZ2h0Sm91cm5leVtdLFxyXG4gICAgaW5ib3VuZFRvdGFsRHVyYXRpb246IG51bWJlcixcclxuICAgIGNvMlBlckl0ZW06IG51bWJlcixcclxuICAgIGNvMlBlclBhc3NlbmdlcjogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICBpZiAob3V0Ym91bmRGbGlnaHRzPy5sZW5ndGggJiYgIXJldHVybk9iamVjdC5kZXBhcnREYXRlVGltZSkge1xyXG4gICAgICBjb25zdCBmaXJzdCA9IG91dGJvdW5kRmxpZ2h0c1swXTtcclxuICAgICAgY29uc3QgbGFzdCA9IG91dGJvdW5kRmxpZ2h0c1tvdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMV07XHJcbiAgICAgIHJldHVybk9iamVjdC5vcmlnaW5BaXJwb3J0ID0gZmlyc3Qub3JpZ2luQWlycG9ydDtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm9yaWdpbkFpcnBvcnROYW1lID0gZmlyc3Qub3JpZ2luQWlycG9ydE5hbWU7XHJcbiAgICAgIHJldHVybk9iamVjdC5kZXN0aW5hdGlvbkFpcnBvcnQgPSBsYXN0LmRlc3RpbmF0aW9uQWlycG9ydDtcclxuICAgICAgcmV0dXJuT2JqZWN0LmRlc3RpbmF0aW9uQWlycG9ydE5hbWUgPSBsYXN0LmRlc3RpbmF0aW9uQWlycG9ydE5hbWU7XHJcbiAgICAgIHJldHVybk9iamVjdC5kZXBhcnREYXRlVGltZSA9IGZpcnN0LmRhdGVUaW1lRGVwYXJ0aW5nO1xyXG4gICAgICByZXR1cm5PYmplY3QuYXJyaXZhbERhdGVUaW1lID0gbGFzdC5kYXRlVGltZUFycml2aW5nO1xyXG4gICAgICByZXR1cm5PYmplY3Qub3V0Ym91bmRUb3RhbER1cmF0aW9uID0gb3V0Ym91bmRUb3RhbER1cmF0aW9uO1xyXG4gICAgICByZXR1cm5PYmplY3QuZGF0YVNvdXJjZSA9IHNvdXJjZTtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm9wZXJhdG9yID0gZmlyc3QubWFya2V0aW5nQ2FycmllcjtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm9wZXJhdG9yRnVsbCA9IGZpcnN0Lm1hcmtldGluZ0NhcnJpZXJOYW1lO1xyXG4gICAgICByZXR1cm5PYmplY3Qub3V0bGVnc0NvdW50ID0gb3V0Ym91bmRGbGlnaHRzLmxlbmd0aDtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm91dGxlZ3MgPSBvdXRib3VuZEZsaWdodHM7XHJcbiAgICAgIHJldHVybk9iamVjdC5vdXRib3VuZEZsaWdodE51bWJlciA9XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmpvaW5Gcm9tQXR0cmlidXRlPEZsaWdodEpvdXJuZXk+KFxyXG4gICAgICAgICAgJy0nLFxyXG4gICAgICAgICAgJ21hcmtldGluZ0ZsaWdodE51bWJlcicsXHJcbiAgICAgICAgICBvdXRib3VuZEZsaWdodHNcclxuICAgICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuT2JqZWN0LmlzUmV0dXJuID0gZmFsc2U7XHJcbiAgICAgIHJldHVybk9iamVjdC5jbzJQZXJJdGVtID0gY28yUGVySXRlbTtcclxuICAgICAgcmV0dXJuT2JqZWN0LmNvMlBlclBhc3NlbmdlciA9IGNvMlBlclBhc3NlbmdlcjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5ib3VuZEZsaWdodHM/Lmxlbmd0aCAmJiAhcmV0dXJuT2JqZWN0LmluYm91bmRUb3RhbER1cmF0aW9uKSB7XHJcbiAgICAgIHJldHVybk9iamVjdC5pbmJvdW5kVG90YWxEdXJhdGlvbiA9IGluYm91bmRUb3RhbER1cmF0aW9uO1xyXG4gICAgICByZXR1cm5PYmplY3QuaW5sZWdzQ291bnQgPSBpbmJvdW5kRmxpZ2h0cy5sZW5ndGg7XHJcbiAgICAgIHJldHVybk9iamVjdC5pbmxlZ3MgPSBpbmJvdW5kRmxpZ2h0cztcclxuICAgICAgcmV0dXJuT2JqZWN0LmluYm91bmRGbGlnaHROdW1iZXIgPVxyXG4gICAgICAgIHRoaXMuaGVscGVycy5qb2luRnJvbUF0dHJpYnV0ZTxGbGlnaHRKb3VybmV5PihcclxuICAgICAgICAgICctJyxcclxuICAgICAgICAgICdvcGVyYXRpbmdGbGlnaHROdW1iZXInLFxyXG4gICAgICAgICAgaW5ib3VuZEZsaWdodHNcclxuICAgICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuT2JqZWN0LmlzUmV0dXJuID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBtYWtlU2Vzc2lvblJlc3VsdHMoXHJcbiAgICBkYXRhOiBGbGlnaHRRdW90ZVJlc3VsdEFycmF5XHJcbiAgKTogRmxpZ2h0U2Vzc2lvblR5cGUge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVzdWx0czogZGF0YSxcclxuICAgICAgZ3JvdXBlZDogdGhpcy5fZ3JvdXBlZCxcclxuICAgICAgcXVlcnk6IHRoaXMucmVzdWx0UXVlcnlcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXRNYXhGbGlnaHRQcmljZUZvckJyYW5kKG1hdGNoaW5nQnJhbmRGbGlnaHRzOiBGbGlnaHRJdGluZXJhcnlbXSk6IG51bWJlciB7XHJcbiAgICBsZXQgbWF4ID0gMDtcclxuICAgIG1hdGNoaW5nQnJhbmRGbGlnaHRzLmZvckVhY2goKGZsaWdodCkgPT4ge1xyXG4gICAgICBpZiAobWF4IDwgZmxpZ2h0Py50b3RhbD8ucHJpY2UpIHtcclxuICAgICAgICBtYXggPSBmbGlnaHQudG90YWwucHJpY2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG1heDtcclxuICB9XHJcbiAgZ2V0TWluRmxpZ2h0UHJpY2VGb3JCcmFuZChtYXRjaGluZ0JyYW5kRmxpZ2h0czogRmxpZ2h0SXRpbmVyYXJ5W10pOiBudW1iZXIge1xyXG4gICAgbGV0IG1pbiA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xyXG4gICAgbWF0Y2hpbmdCcmFuZEZsaWdodHMuZm9yRWFjaCgoZmxpZ2h0KSA9PiB7XHJcbiAgICAgIGlmIChtaW4gPiBmbGlnaHQ/LnRvdGFsPy5wcmljZSkge1xyXG4gICAgICAgIG1pbiA9IGZsaWdodC50b3RhbC5wcmljZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbWluO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHJlc2V0UXVlcnkoY2hlY2tJc1ZhbGlkOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHRoaXMuc2VhcmNoU2VydmljZS5tYWtlRmxpZ2h0UXVlcnkoKSk7XHJcbiAgICBpZiAoY2hlY2tJc1ZhbGlkKSB7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldFBhcmFtcygpOiB2b2lkIHtcclxuICAgIHRoaXMucmVzZXQoKTtcclxuICAgIHRoaXMucmVzZXRRdWVyeSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNWYWxpZCgpIHtcclxuICAgIGlmICghdGhpcy5kb0NoZWNrcykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBGbGlnaHRFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgIHtcclxuICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXHJcbiAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzID0gW107XHJcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUubXVsdGlDaXR5KSB7XHJcbiAgICAgIHRoaXMubXVsdGlDaXR5VmFsaWRhdGlvbigpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKCF0aGlzLl9vcmlnaW5BaXJwb3J0KSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIGFkZCBpbiBhIGRlcGFydHVyZSBsb2NhdGlvbicpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0KSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIGFkZCBpbiBhbiBhcnJpdmFsIGRlc3RpbmF0aW9uJyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlLmlzQWZ0ZXIobW9tZW50KCkpKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnRGVwYXJ0dXJlIGRhdGUgY2FuIG5vdCBiZSBpbiB0aGUgcGFzdCcpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5fb3JpZ2luQWlycG9ydCAmJlxyXG4gICAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCAmJlxyXG4gICAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9PT0gdGhpcy5fb3JpZ2luQWlycG9ydFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICAgJ09yaWdpbiBhbmQgZGVzdGluYXRpb24gYWlycG9ydCBjYW5ub3QgYmUgdGhlIHNhbWUnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pc1JldHVybikge1xyXG4gICAgICAgIC8vIFRPRE8gY2hlY2sgdGhhdCByZXR1cm4gZGV0YWlscyBhcmUgc2V0XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZS5pc1NhbWVPckFmdGVyKFxyXG4gICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuaW5UaW1lQ3JpdGVyaWFcclxuICAgICAgICAgIClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgICAgICdSZXR1cm4gZGF0ZSBtdXN0IGJlIGFmdGVyIHRoZSBkZXBhcnR1cmUgZGF0ZSdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaXNWYWxpZC5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMCk7XHJcbiAgICAgIHRoaXMubWVzc2FnZXMubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtdWx0aUNpdHlWYWxpZGF0aW9uKCkge1xyXG4gICAgbGV0IGlzZW1wdHlWYWx1ZSA9IGZhbHNlO1xyXG4gICAgbGV0IGlzZW1wdHlMYW5kaW5nID0gZmFsc2U7XHJcbiAgICBsZXQgaXNTYW1lVmFsdWUgPSBmYWxzZTtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uLm1hcCgoZWxlbWVudCwgaSkgPT4ge1xyXG4gICAgICBpZiAoIWVsZW1lbnQub3JpZykge1xyXG4gICAgICAgIGlzZW1wdHlWYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgaWYgKGkgPCAyKSB7XHJcbiAgICAgICAgICBpc2VtcHR5TGFuZGluZyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChlbGVtZW50Lm9yaWcgPT09IGVsZW1lbnQuZGVzdCkgaXNTYW1lVmFsdWUgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgICBpZiAoIW1vbWVudCh0aGlzLnRlbXBQYXJhbXMubXVsdGlEZXN0aW5hdGlvblswXS5kYXRlKS5pc0FmdGVyKG1vbWVudCgpKSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdEZXBhcnR1cmUgZGF0ZSBjYW4gbm90IGJlIGluIHRoZSBwYXN0Jyk7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNlbXB0eUxhbmRpbmcpXHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBzZWxlY3QgbGFuZGluZyBhaXJwb3J0KHMpJyk7XHJcbiAgICBpZiAoaXNlbXB0eVZhbHVlKVxyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2Ugc2VsZWN0IHRha2Ugb2ZmIGFpcnBvcnQocyknKTtcclxuICAgIGlmIChpc1NhbWVWYWx1ZSlcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAnVGFrZSBvZmYgYW5kIGxhbmRpbmcgbG9jYXRpb24ocykgY2Fubm90IGJlIHRoZSBzYW1lJ1xyXG4gICAgICApO1xyXG4gIH1cclxuICBzdGFydFNlYXJjaCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX29yaWdpbmFsVXNlclNlYXJjaCA9IE9iamVjdC5mcmVlemUoXHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMudGVtcFBhcmFtcylcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgICBGbGlnaHRFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxyXG4gICAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlUmVjZW50U2VhcmNoKHRoaXMuZ2V0UmVjZW50U2VhcmNoUXVlcnkocXVlcnkpKTtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLl9zdGFydFNlYXJjaCh0aGlzLmZsaWdodGZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFJlY2VudFNlYXJjaFF1ZXJ5KFxyXG4gICAgcXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzXHJcbiAgKTogU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5GbGlnaHQsXHJcbiAgICAgIHNlYXJjaEFyZ3M6IHF1ZXJ5LFxyXG4gICAgICB0cmF2ZWxEYXRlOiB0aGlzLm91dEJvdW5kRGF0ZS5mb3JtYXQoKSxcclxuICAgICAgdHJhdmVsbGVyczogdGhpcy5oZWxwZXJzLmdldFRyYXZlbGxlcnNJZCh0aGlzLnRyYXZlbGxlcnMpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXJ0UmVjZW50U2VhcmNoKHJlY2VudFNlYXJjaDogUmVjZW50U2VhcmNoKTogdm9pZCB7XHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmREYXRlKSB7XHJcbiAgICAgIGxldCBvdXRib3VuZFRpbWVXaW5kb3cgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJnc1xyXG4gICAgICAgIC5vdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3dcclxuICAgICAgICA/IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvd1xyXG4gICAgICAgIDogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdztcclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmNvbnZlcnRSZWNlbnRTZWFyY2hEYXRlVGltZShcclxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZERhdGUsXHJcbiAgICAgICAgb3V0Ym91bmRUaW1lV2luZG93XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRhdGUpIHtcclxuICAgICAgbGV0IHJldHVyblRpbWVXaW5kb3cgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgPyByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5BcnJpdmFsVGltZVdpbmRvdztcclxuICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKFxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRhdGUsXHJcbiAgICAgICAgcmV0dXJuVGltZVdpbmRvd1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmFyZVR5cGUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5mYXJlVHlwZTtcclxuICAgIHRoaXMubWF4Q29ubmVjdGlvbnMgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5tYXhDb25uZWN0aW9ucztcclxuXHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmRDYWJpbkNsYXNzKSB7XHJcbiAgICAgIHRoaXMuY2FiaW5DbGFzcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kQ2FiaW5DbGFzc1swXTtcclxuICAgIH1cclxuICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5DYWJpbkNsYXNzKSB7XHJcbiAgICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkNhYmluQ2xhc3NbMF07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHMgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5pbmNsdWRlTmVhcmJ5QWlycG9ydHNcclxuICAgICAgPyB0cnVlXHJcbiAgICAgIDogZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuVHJpcFxyXG4gICAgICA/IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuXHJcbiAgICAgIDogRmxpZ2h0U2VhcmNoVHlwZS5vbmVXYXk7XHJcblxyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvdykge1xyXG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuRGVwYXJ0O1xyXG4gICAgfSBlbHNlIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZEFycml2YWxUaW1lV2luZG93KSB7XHJcbiAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5BcnJpdmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQW55dGltZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvdykge1xyXG4gICAgICB0aGlzLmluVGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5EZXBhcnQ7XHJcbiAgICB9IGVsc2UgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkFycml2YWxUaW1lV2luZG93KSB7XHJcbiAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFycml2ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFueXRpbWU7XHJcbiAgICB9XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbXHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0QnlDb2RlKFxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm9yaWdpbkFpcnBvcnRcclxuICAgICAgKSxcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEFpcnBvcnRCeUNvZGUoXHJcbiAgICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVzdGluYXRpb25BaXJwb3J0XHJcbiAgICAgIClcclxuICAgIF0pLnN1YnNjcmliZSgoW2RlcGFydExvY2F0aW9uLCBhcnJpdmVMb2NhdGlvbl0pID0+IHtcclxuICAgICAgaWYgKGRlcGFydExvY2F0aW9uICYmIGFycml2ZUxvY2F0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5kZXBhcnRMb2NhdGlvbiA9IHtcclxuICAgICAgICAgIGRlc3RpbmF0aW9uOiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2gubmFtZSxcclxuICAgICAgICAgIGdhdGV3YXk6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaC5pYXRhLFxyXG4gICAgICAgICAgdGVybWluYWxzOiB0aGlzLnNlYXJjaFNlcnZpY2UucHJvY2Vzc1Rlcm1pbmFscyhcclxuICAgICAgICAgICAgZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLnRlcm1pbmFsc1xyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGNvdW50cnk6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5LFxyXG4gICAgICAgICAgcG9zdGNvZGU6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5wb3N0Y29kZSxcclxuICAgICAgICAgIGNvdW50cnlDb2RlOiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeUNvZGVcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuYXJyaXZlTG9jYXRpb24gPSB7XHJcbiAgICAgICAgICBkZXN0aW5hdGlvbjogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLm5hbWUsXHJcbiAgICAgICAgICBnYXRld2F5OiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2guaWF0YSxcclxuICAgICAgICAgIHRlcm1pbmFsczogdGhpcy5zZWFyY2hTZXJ2aWNlLnByb2Nlc3NUZXJtaW5hbHMoXHJcbiAgICAgICAgICAgIGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC50ZXJtaW5hbHNcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBjb3VudHJ5OiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeSxcclxuICAgICAgICAgIHBvc3Rjb2RlOiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8ucG9zdGNvZGUsXHJcbiAgICAgICAgICBjb3VudHJ5Q29kZTogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnByZWZlcnJlZENhcnJpZXJzKSB7XHJcbiAgICAgICAgICBjb25zdCBwcmVmZXJyZWRDYXJyaWVyczogT0JUQWlybGluZXNEZXRhaWxzW10gPSBbXTtcclxuICAgICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnByZWZlcnJlZENhcnJpZXJzLm1hcChcclxuICAgICAgICAgICAgKHByZWZlcnJlZENhcnJ5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgICAgICAgICAgIC5nZXRBaXJsaW5lc0xpc3QocHJlZmVycmVkQ2FycnkpXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChpdGVtczogT0JUQWlybGluZXNEZXRhaWxzW10pID0+IHtcclxuICAgICAgICAgICAgICAgICAgaXRlbXMubWFwKChpdGVtOiBPQlRBaXJsaW5lc0RldGFpbHMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5jb2RlID09PSBwcmVmZXJyZWRDYXJyeSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcHJlZmVycmVkQ2FycmllcnMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnByZWZlcnJlZENhcnJpZXJzID0gcHJlZmVycmVkQ2FycmllcnM7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYWtlRGVwYXJ0dXJlVGltZVdpbmRvdyhcclxuICAgIGRhdGVUaW1lOiBtb21lbnQuTW9tZW50LFxyXG4gICAgd2luZG93OiBUaW1lV2luZG93LFxyXG4gICAgaXNGbGlnaHRzR3JvdXBlZDogYm9vbGVhblxyXG4gICk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gd2luZG93ID09PSBUaW1lV2luZG93LkRlcGFydFxyXG4gICAgICA/IGlzRmxpZ2h0c0dyb3VwZWRcclxuICAgICAgICA/IHRoaXMuaGVscGVycy5tYWtlVGltZVdpbmRvdyhkYXRlVGltZSwgLTIsIDIpXHJcbiAgICAgICAgOiB0aGlzLmhlbHBlcnMubWFrZVRpbWVXaW5kb3coZGF0ZVRpbWUsIDAsIDQpXHJcbiAgICAgIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWFrZUFycml2YWxUaW1lV2luZG93KFxyXG4gICAgZGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQsXHJcbiAgICB3aW5kb3c6IFRpbWVXaW5kb3csXHJcbiAgICBpc0ZsaWdodHNHcm91cGVkOiBib29sZWFuXHJcbiAgKTogc3RyaW5nIHtcclxuICAgIGlmICh3aW5kb3cgIT09IFRpbWVXaW5kb3cuQXJyaXZlKSByZXR1cm4gbnVsbDtcclxuICAgIHJldHVybiBpc0ZsaWdodHNHcm91cGVkXHJcbiAgICAgID8gdGhpcy5oZWxwZXJzLm1ha2VUaW1lV2luZG93KGRhdGVUaW1lLCAtMiwgMilcclxuICAgICAgOiB0aGlzLmhlbHBlcnMubWFrZVRpbWVXaW5kb3coZGF0ZVRpbWUsIDAsIDQpO1xyXG4gIH1cclxuXHJcbiAgY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKFxyXG4gICAgZGF0ZTogc3RyaW5nLFxyXG4gICAgdGltZVdpbmRvdz86IHN0cmluZ1xyXG4gICk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgaWYgKHRpbWVXaW5kb3cpIHtcclxuICAgICAgY29uc3QgZmxpZ2h0VGltZSA9IHRpbWVXaW5kb3cuc3BsaXQoJy0nKTtcclxuICAgICAgY29uc3QgdGltZUFuZERhdGUgPSBtb21lbnQoZGF0ZSkuYWRkKFxyXG4gICAgICAgIG1vbWVudC5kdXJhdGlvbih0aGlzLmhlbHBlcnMuaGhtbVRvVGltZShmbGlnaHRUaW1lWzBdKSlcclxuICAgICAgKTtcclxuICAgICAgLy8gYWRkIDIgaG91clxyXG4gICAgICByZXR1cm4gdGltZUFuZERhdGUuY2xvbmUoKS5hZGQoMiwgJ2hvdXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBtb21lbnQoZGF0ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTZWFyY2hRdWVyeSgpOiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyB7XHJcbiAgICBjb25zdCBpc011bHRpQ2l0eUFjdGl2ZSA9XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eTtcclxuICAgIHRoaXMuX211bHRpRGVzdGluYXRpb24gPSBpc011bHRpQ2l0eUFjdGl2ZVxyXG4gICAgICA/IHRoaXMuc2V0TXVsdGlEZXN0aW5hdGlvblF1ZXJ5KHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uKVxyXG4gICAgICA6IG51bGw7XHJcblxyXG4gICAgdGhpcy5fbXVsdGlEZXN0aW5hdGlvbiA9XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eVxyXG4gICAgICAgID8gdGhpcy5zZXRNdWx0aURlc3RpbmF0aW9uUXVlcnkodGhpcy50ZW1wUGFyYW1zLm11bHRpRGVzdGluYXRpb24pXHJcbiAgICAgICAgOiBbXTtcclxuICAgIGNvbnN0IGlzRmxpZ2h0c0dyb3VwZWQgPSB0aGlzLnNlYXJjaFNlcnZpY2UuaXNGbGlnaHRzR3JvdXBlZCgpO1xyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcz4oXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAge30sXHJcbiAgICAgICAgaXNNdWx0aUNpdHlBY3RpdmVcclxuICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgIG11bHRpRGVzdGluYXRpb246IHRoaXMuX211bHRpRGVzdGluYXRpb25cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgb3JpZ2luQWlycG9ydDogdGhpcy5fb3JpZ2luQWlycG9ydCxcclxuICAgICAgICAgICAgICBkZXN0aW5hdGlvbkFpcnBvcnQ6IHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCxcclxuICAgICAgICAgICAgICBvdXRib3VuZERhdGU6IHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlKFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZVxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgb3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93OiB0aGlzLm1ha2VEZXBhcnR1cmVUaW1lV2luZG93KFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZSxcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lQ3JpdGVyaWEsXHJcbiAgICAgICAgICAgICAgICBpc0ZsaWdodHNHcm91cGVkXHJcbiAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICBvdXRib3VuZEFycml2YWxUaW1lV2luZG93OiB0aGlzLm1ha2VBcnJpdmFsVGltZVdpbmRvdyhcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUNyaXRlcmlhLFxyXG4gICAgICAgICAgICAgICAgaXNGbGlnaHRzR3JvdXBlZFxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBwYXNzZW5nZXJzOiB0aGlzLl9wYXNzZW5nZXJzLFxyXG4gICAgICAgICAgcmV0dXJuVHJpcDogdGhpcy5pc1JldHVybixcclxuICAgICAgICAgIG91dGJvdW5kQ2FiaW5DbGFzczogdGhpcy50ZW1wUGFyYW1zLmNhYmluQ2xhc3NcclxuICAgICAgICAgICAgPyBbdGhpcy50ZW1wUGFyYW1zLmNhYmluQ2xhc3NdXHJcbiAgICAgICAgICAgIDogbnVsbCxcclxuICAgICAgICAgIHJlcXVpcmVGcmVlQmFnOiBudWxsLFxyXG4gICAgICAgICAgbWF4Q29ubmVjdGlvbnM6IHRoaXMudGVtcFBhcmFtcy5tYXhDb25uZWN0aW9ucyxcclxuICAgICAgICAgIGluY2x1ZGVOZWFyYnlBaXJwb3J0czogdGhpcy50ZW1wUGFyYW1zLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyxcclxuICAgICAgICAgIHByZWZlcnJlZENhcnJpZXJzOiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnMubWFwKFxyXG4gICAgICAgICAgICAoY2FycmllcjogT0JUQWlybGluZXNEZXRhaWxzKSA9PlxyXG4gICAgICAgICAgICAgIGNhcnJpZXI/LmNvZGUgPyBjYXJyaWVyLmNvZGUgOiBudWxsXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgZmFyZVR5cGU6IHRoaXMudGVtcFBhcmFtcy5mYXJlVHlwZSxcclxuICAgICAgICAgIC8vIHdpdGhHcm91cGVkOiBpc0ZsaWdodHNHcm91cGVkXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0aGlzLmlzUmV0dXJuXHJcbiAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICByZXR1cm5EYXRlOiB0aGlzLmhlbHBlcnMuZm9ybWF0SXNvRGF0ZShcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZVxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgcmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvdzogdGhpcy5tYWtlRGVwYXJ0dXJlVGltZVdpbmRvdyhcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSxcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYSxcclxuICAgICAgICAgICAgICAgIGlzRmxpZ2h0c0dyb3VwZWRcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIHJldHVybkFycml2YWxUaW1lV2luZG93OiB0aGlzLm1ha2VBcnJpdmFsVGltZVdpbmRvdyhcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSxcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYSxcclxuICAgICAgICAgICAgICAgIGlzRmxpZ2h0c0dyb3VwZWRcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIHJldHVybkNhYmluQ2xhc3M6IHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzXHJcbiAgICAgICAgICAgICAgICA/IFt0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzc11cclxuICAgICAgICAgICAgICAgIDogbnVsbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA6IHt9XHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVRyYXZlbGxlcnMoKSB7XHJcbiAgICBjb25zdCB0cmF2ZWxsZXJzOiBGbGlnaHRQYXNzZW5nZXJPYmplY3RbXSA9IFtdO1xyXG4gICAgZm9yIChsZXQgbG9vcCA9IDA7IGxvb3AgPCB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzOyBsb29wICs9IDEpIHtcclxuICAgICAgdHJhdmVsbGVycy5wdXNoKHsgdHlwZTogRmxpZ2h0UGFzc2VuZ2VyVHlwZS5BZHVsdCB9KTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IGxvb3AgPSAwOyBsb29wIDwgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuOyBsb29wICs9IDEpIHtcclxuICAgICAgdHJhdmVsbGVycy5wdXNoKHsgdHlwZTogRmxpZ2h0UGFzc2VuZ2VyVHlwZS5DaGlsZCB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9wYXNzZW5nZXJzID0gdHJhdmVsbGVycztcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlQXZhbGlhYmxlQ2xhc3NlcygpIHtcclxuICAgIGNvbnN0IGhpZGVDbGFzc2VzID1cclxuICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRmF2b3JpdGVPYmplY3Q8SGlkZUZsaWdodENhYmluQ2xhc3NJbnRlcmZhY2U+KFxyXG4gICAgICAgIFVzZXJGYXZvcnVyaXRlLkhpZGVGbGlnaHRDYWJpbkNsYXNzZXNcclxuICAgICAgKSB8fCB7XHJcbiAgICAgICAgYW55OiBmYWxzZSxcclxuICAgICAgICBidXNpbmVzczogZmFsc2UsXHJcbiAgICAgICAgZWNvbm9teTogZmFsc2UsXHJcbiAgICAgICAgZmlyc3Q6IGZhbHNlLFxyXG4gICAgICAgIHByZW1pdW1FY29ub215OiBmYWxzZVxyXG4gICAgICB9O1xyXG5cclxuICAgIGNvbnN0IG9wdGlvbnM6IHsgbmFtZTogc3RyaW5nOyB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzIH1bXSA9IFtdO1xyXG4gICAgaWYgKCFoaWRlQ2xhc3Nlcy5hbnkpIHtcclxuICAgICAgb3B0aW9ucy5wdXNoKHsgbmFtZTogJ0FueScsIHR5cGU6IEZsaWdodENhYmluQ2xhc3MuQW55IH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKCFoaWRlQ2xhc3Nlcy5lY29ub215KSB7XHJcbiAgICAgIG9wdGlvbnMucHVzaCh7IG5hbWU6ICdFY29ub215JywgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaGlkZUNsYXNzZXMucHJlbWl1bUVjb25vbXkpIHtcclxuICAgICAgb3B0aW9ucy5wdXNoKHsgbmFtZTogJ1ByZW1pdW0nLCB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaGlkZUNsYXNzZXMuYnVzaW5lc3MpIHtcclxuICAgICAgb3B0aW9ucy5wdXNoKHsgbmFtZTogJ0J1c2luZXNzJywgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzcyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWhpZGVDbGFzc2VzLmZpcnN0KSB7XHJcbiAgICAgIG9wdGlvbnMucHVzaCh7IG5hbWU6ICdGaXJzdCcsIHR5cGU6IEZsaWdodENhYmluQ2xhc3MuRmlyc3QgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jYWJpbkNsYXNzID0gdGhpcy5nZXRVcGRhdGVkQ2FiaW5DbGFzcyhcclxuICAgICAgdGhpcy5jYWJpbkNsYXNzLFxyXG4gICAgICBoaWRlQ2xhc3NlcyxcclxuICAgICAgb3B0aW9uc1xyXG4gICAgKTtcclxuICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9IHRoaXMuZ2V0VXBkYXRlZENhYmluQ2xhc3MoXHJcbiAgICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyxcclxuICAgICAgaGlkZUNsYXNzZXMsXHJcbiAgICAgIG9wdGlvbnNcclxuICAgICk7XHJcbiAgICB0aGlzLmF2YWxpYWJsZUNsYXNzZXMubmV4dChvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VXBkYXRlZENhYmluQ2xhc3MoXHJcbiAgICBjYWJpbkNsYXNzOiBGbGlnaHRDYWJpbkNsYXNzLFxyXG4gICAgaGlkZUNsYXNzZXM6IEhpZGVGbGlnaHRDYWJpbkNsYXNzSW50ZXJmYWNlLFxyXG4gICAgb3B0aW9uczogeyBuYW1lOiBzdHJpbmc7IHR5cGU6IEZsaWdodENhYmluQ2xhc3MgfVtdXHJcbiAgKTogRmxpZ2h0Q2FiaW5DbGFzcyB7XHJcbiAgICBzd2l0Y2ggKGNhYmluQ2xhc3MpIHtcclxuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkFueTpcclxuICAgICAgICByZXR1cm4gaGlkZUNsYXNzZXMuYW55ID8gb3B0aW9uc1swXS50eXBlIDogY2FiaW5DbGFzcztcclxuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzOlxyXG4gICAgICAgIHJldHVybiBoaWRlQ2xhc3Nlcy5idXNpbmVzcyA/IG9wdGlvbnNbMF0udHlwZSA6IGNhYmluQ2xhc3M7XHJcbiAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215OlxyXG4gICAgICAgIHJldHVybiBoaWRlQ2xhc3Nlcy5lY29ub215ID8gb3B0aW9uc1swXS50eXBlIDogY2FiaW5DbGFzcztcclxuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkZpcnN0OlxyXG4gICAgICAgIHJldHVybiBoaWRlQ2xhc3Nlcy5maXJzdCA/IG9wdGlvbnNbMF0udHlwZSA6IGNhYmluQ2xhc3M7XHJcbiAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teTpcclxuICAgICAgICByZXR1cm4gaGlkZUNsYXNzZXMucHJlbWl1bUVjb25vbXkgPyBvcHRpb25zWzBdLnR5cGUgOiBjYWJpbkNsYXNzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNhYmluQ2xhc3M7XHJcbiAgfVxyXG4gIHVwZGF0ZUZyb21QcmV2aW91c1NlYXJjaGVzKFxyXG4gICAgX3ByZXZpb3VzSXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT5cclxuICApOiB2b2lkIHtcclxuICAgIC8vIEZsaWdodHMgY2FuIG5vdCBiZSBzZWFyY2ggYWZ0ZXIgb3RoZXIgcHJvZHVjdHMgc28gbm8gZGVmYXVsdHMgY2FuIGJlIHNldC5cclxuICB9XHJcblxyXG4gIHVwZGF0ZVNlYXJjaEZyb21FeHBpcmVkQmFza2V0SXRlbShiYXNrZXRJdGVtOiBCYXNrZXRJdGVtKTogdm9pZCB7XHJcbiAgICBjb25zdCBzZWFyY2hGbGlnaHRzUXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzID1cclxuICAgICAgYmFza2V0SXRlbS5zZWFyY2hRdWVyeTtcclxuICAgIGlmIChzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmREYXRlKSB7XHJcbiAgICAgIGxldCBvdXRib3VuZFRpbWVXaW5kb3cgPSBzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgPyBzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgOiBzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdztcclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmNvbnZlcnRSZWNlbnRTZWFyY2hEYXRlVGltZShcclxuICAgICAgICBzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmREYXRlLFxyXG4gICAgICAgIG91dGJvdW5kVGltZVdpbmRvd1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzZWFyY2hGbGlnaHRzUXVlcnkucmV0dXJuRGF0ZSkge1xyXG4gICAgICBsZXQgcmV0dXJuVGltZVdpbmRvdyA9IHNlYXJjaEZsaWdodHNRdWVyeS5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgPyBzZWFyY2hGbGlnaHRzUXVlcnkucmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvd1xyXG4gICAgICAgIDogc2VhcmNoRmxpZ2h0c1F1ZXJ5LnJldHVybkFycml2YWxUaW1lV2luZG93O1xyXG4gICAgICB0aGlzLmluYm91bmREYXRlID0gdGhpcy5jb252ZXJ0UmVjZW50U2VhcmNoRGF0ZVRpbWUoXHJcbiAgICAgICAgc2VhcmNoRmxpZ2h0c1F1ZXJ5LnJldHVybkRhdGUsXHJcbiAgICAgICAgcmV0dXJuVGltZVdpbmRvd1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmFyZVR5cGUgPSBzZWFyY2hGbGlnaHRzUXVlcnkuZmFyZVR5cGU7XHJcbiAgICB0aGlzLm1heENvbm5lY3Rpb25zID0gc2VhcmNoRmxpZ2h0c1F1ZXJ5Lm1heENvbm5lY3Rpb25zO1xyXG5cclxuICAgIGlmIChzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmRDYWJpbkNsYXNzKSB7XHJcbiAgICAgIHRoaXMuY2FiaW5DbGFzcyA9XHJcbiAgICAgICAgc2VhcmNoRmxpZ2h0c1F1ZXJ5Lm91dGJvdW5kQ2FiaW5DbGFzcyBhcyBGbGlnaHRDYWJpbkNsYXNzO1xyXG4gICAgfVxyXG4gICAgaWYgKHNlYXJjaEZsaWdodHNRdWVyeS5yZXR1cm5DYWJpbkNsYXNzKSB7XHJcbiAgICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9XHJcbiAgICAgICAgc2VhcmNoRmxpZ2h0c1F1ZXJ5LnJldHVybkNhYmluQ2xhc3MgYXMgRmxpZ2h0Q2FiaW5DbGFzcztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA9IHNlYXJjaEZsaWdodHNRdWVyeS5pbmNsdWRlTmVhcmJ5QWlycG9ydHNcclxuICAgICAgPyB0cnVlXHJcbiAgICAgIDogZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gc2VhcmNoRmxpZ2h0c1F1ZXJ5LnJldHVyblRyaXBcclxuICAgICAgPyBGbGlnaHRTZWFyY2hUeXBlLnJldHVyblxyXG4gICAgICA6IEZsaWdodFNlYXJjaFR5cGUub25lV2F5O1xyXG5cclxuICAgIGlmIChzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93KSB7XHJcbiAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5EZXBhcnQ7XHJcbiAgICB9IGVsc2UgaWYgKHNlYXJjaEZsaWdodHNRdWVyeS5vdXRib3VuZEFycml2YWxUaW1lV2luZG93KSB7XHJcbiAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5BcnJpdmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQW55dGltZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VhcmNoRmxpZ2h0c1F1ZXJ5LnJldHVybkRlcGFydHVyZVRpbWVXaW5kb3cpIHtcclxuICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuRGVwYXJ0O1xyXG4gICAgfSBlbHNlIGlmIChzZWFyY2hGbGlnaHRzUXVlcnkucmV0dXJuQXJyaXZhbFRpbWVXaW5kb3cpIHtcclxuICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQXJyaXZlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQW55dGltZTtcclxuICAgIH1cclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFtcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEFpcnBvcnRCeUNvZGUoc2VhcmNoRmxpZ2h0c1F1ZXJ5Lm9yaWdpbkFpcnBvcnQpLFxyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0QWlycG9ydEJ5Q29kZShzZWFyY2hGbGlnaHRzUXVlcnkuZGVzdGluYXRpb25BaXJwb3J0KVxyXG4gICAgXSkuc3Vic2NyaWJlKChbZGVwYXJ0TG9jYXRpb24sIGFycml2ZUxvY2F0aW9uXSkgPT4ge1xyXG4gICAgICBpZiAoZGVwYXJ0TG9jYXRpb24gJiYgYXJyaXZlTG9jYXRpb24pIHtcclxuICAgICAgICB0aGlzLmRlcGFydExvY2F0aW9uID0ge1xyXG4gICAgICAgICAgZGVzdGluYXRpb246IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaC5uYW1lLFxyXG4gICAgICAgICAgZ2F0ZXdheTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLmlhdGEsXHJcbiAgICAgICAgICB0ZXJtaW5hbHM6IHRoaXMuc2VhcmNoU2VydmljZS5wcm9jZXNzVGVybWluYWxzKFxyXG4gICAgICAgICAgICBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2gudGVybWluYWxzXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgY291bnRyeTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnksXHJcbiAgICAgICAgICBwb3N0Y29kZTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LnBvc3Rjb2RlLFxyXG4gICAgICAgICAgY291bnRyeUNvZGU6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5Q29kZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5hcnJpdmVMb2NhdGlvbiA9IHtcclxuICAgICAgICAgIGRlc3RpbmF0aW9uOiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2gubmFtZSxcclxuICAgICAgICAgIGdhdGV3YXk6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC5pYXRhLFxyXG4gICAgICAgICAgdGVybWluYWxzOiB0aGlzLnNlYXJjaFNlcnZpY2UucHJvY2Vzc1Rlcm1pbmFscyhcclxuICAgICAgICAgICAgYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLnRlcm1pbmFsc1xyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGNvdW50cnk6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5LFxyXG4gICAgICAgICAgcG9zdGNvZGU6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5wb3N0Y29kZSxcclxuICAgICAgICAgIGNvdW50cnlDb2RlOiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeUNvZGVcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAoc2VhcmNoRmxpZ2h0c1F1ZXJ5LnByZWZlcnJlZENhcnJpZXJzKSB7XHJcbiAgICAgICAgICBsZXQgY2FycmllcnM6IHN0cmluZ1tdID1cclxuICAgICAgICAgICAgc2VhcmNoRmxpZ2h0c1F1ZXJ5LnByZWZlcnJlZENhcnJpZXJzIGFzIHN0cmluZ1tdO1xyXG4gICAgICAgICAgY29uc3QgcHJlZmVycmVkQ2FycmllcnM6IE9CVEFpcmxpbmVzRGV0YWlsc1tdID0gW107XHJcbiAgICAgICAgICBjYXJyaWVycy5tYXAoKHByZWZlcnJlZENhcnJ5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgLmdldEFpcmxpbmVzTGlzdChwcmVmZXJyZWRDYXJyeSlcclxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKChpdGVtczogT0JUQWlybGluZXNEZXRhaWxzW10pID0+IHtcclxuICAgICAgICAgICAgICAgIGl0ZW1zLm1hcCgoaXRlbTogT0JUQWlybGluZXNEZXRhaWxzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmNvZGUgPT09IHByZWZlcnJlZENhcnJ5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlZmVycmVkQ2FycmllcnMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZWZlcnJlZENhcnJpZXJzID0gcHJlZmVycmVkQ2FycmllcnM7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIGFkZCBUcmF2ZWxsZXJzXHJcbiAgICBpZiAoYmFza2V0SXRlbS51c2Vycykge1xyXG4gICAgICBiYXNrZXRJdGVtLnVzZXJzLmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5hZGRUcmF2ZWxsZXIodXNlcik7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VG90YWxCYWdnYWdlKHJlc3VsdDogRmxpZ2h0SXRpbmVyYXJ5KTogbnVtYmVyIHtcclxuICAgIGxldCB0b3RhbCA9IDA7XHJcblxyXG4gICAgY29uc3QgcGFyc2VkQWRkaXRpb25hbCA9IEpTT04ucGFyc2UocmVzdWx0LmFkZGl0aW9uYWwpO1xyXG4gICAgaWYgKHBhcnNlZEFkZGl0aW9uYWwgJiYgcGFyc2VkQWRkaXRpb25hbC5vdXRib3VuZEZsaWdodHMpIHtcclxuICAgICAgcGFyc2VkQWRkaXRpb25hbC5vdXRib3VuZEZsaWdodHMuZm9yRWFjaCgoZmxpZ2h0OiBhbnkpID0+IHtcclxuICAgICAgICBmbGlnaHQuYmFnZ2FnZS5mb3JFYWNoKChiYWc6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGJhZy5hbGxvd2FuY2UgJiYgYmFnLmFsbG93YW5jZSA+IHRvdGFsKSB7XHJcbiAgICAgICAgICAgIHRvdGFsID0gYmFnLmFsbG93YW5jZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKHBhcnNlZEFkZGl0aW9uYWwgJiYgcGFyc2VkQWRkaXRpb25hbC5iYWdnYWdlQWxsb3dhbmNlKSB7XHJcbiAgICAgIHBhcnNlZEFkZGl0aW9uYWwuYmFnZ2FnZUFsbG93YW5jZS5mb3JFYWNoKChiYWdnYWdlQWxsb3c6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGJhZ2dhZ2VBbGxvdy5iYWdnYWdlLnF0eSAmJlxyXG4gICAgICAgICAgTnVtYmVyKGJhZ2dhZ2VBbGxvdy5iYWdnYWdlLnF0eSkgPiB0b3RhbFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdG90YWwgPSBOdW1iZXIoYmFnZ2FnZUFsbG93LmJhZ2dhZ2UucXR5KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0b3RhbDtcclxuICB9XHJcblxyXG4gIGlzR3JvdXBlZEZsaWdodHMoXHJcbiAgICB0b1Rlc3Q6IEZsaWdodFF1b3RlUmVzdWx0QXJyYXlcclxuICApOiB0b1Rlc3QgaXMgRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0W10ge1xyXG4gICAgcmV0dXJuIHRvVGVzdFswXT8udHlwZSA9PT0gJ0ZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCc7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGZpbHRlciB0aGUgcmVzdWx0cywgdGhlbiBzb3J0IHRoZSByZW1haW5kZXJcclxuICAgKiBAdG9kbyAtIEFkZCBmaWx0ZXJzIGZvciB0cmF2ZWwgcG9saWN5LCBmYXJlIHR5cGVzIGFuZCBhbmNpbGxpYXJpZXNcclxuICAgKi9cclxuICBhcHBseUZpbHRlcnMoZmlsdGVyczogRmxpZ2h0RmlsdGVycywgc29ydFZhbHVlOiBGbGlnaHRTb3J0VHlwZXMpOiB2b2lkIHtcclxuICAgIHRoaXMuY3VycmVudEZpbHRlcnMgPSBmaWx0ZXJzO1xyXG4gICAgdGhpcy5jdXJyZW50U29ydCA9IHNvcnRWYWx1ZTtcclxuICAgIC8vIGNvbnNvbGUubG9nKCcrKysgQXBwbHlpbmcgRmlsdGVycyB0byBmbGlnaHRzOiAnLCBmaWx0ZXJzLCAnICsrKycpO1xyXG4gICAgaWYgKHRoaXMuZnVsbFJlc3VsdHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBmaWx0ZXJTZWxlY3RlZEZsaWdodHM6IChcclxuICAgICAgZ3JvdXBzVG9TaG93OiBudW1iZXJbXSxcclxuICAgICAgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtXHJcbiAgICApID0+IChmOiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW4gPSB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHRcclxuICAgICAgPyB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQuaW5ib3VuZEZsaWdodHM/Lmxlbmd0aFxyXG4gICAgICAgID8gKGdyb3Vwc1RvU2hvdzogbnVtYmVyW10sIGRpcmVjdGlvbjogRmxpZ2h0RGlyZWN0aW9uRW51bSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5EdWFsU2luZ2xlSW5ib3VuZCB8fFxyXG4gICAgICAgICAgICAgICAgZ3JvdXBzVG9TaG93LmluY2x1ZGVzKGZsaWdodEl0aW5lcmFyeS51aWQpXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICA6IChncm91cHNUb1Nob3c6IG51bWJlcltdLCBkaXJlY3Rpb246IEZsaWdodERpcmVjdGlvbkVudW0pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZUluYm91bmQgfHxcclxuICAgICAgICAgICAgICAgIGdyb3Vwc1RvU2hvdy5pbmNsdWRlcyhmbGlnaHRJdGluZXJhcnkudWlkKVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgIDogKF9ncm91cHNUb1Nob3c6IG51bWJlcltdLCBkaXJlY3Rpb246IEZsaWdodERpcmVjdGlvbkVudW0pID0+IHtcclxuICAgICAgICAgIHJldHVybiAoX2ZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9O1xyXG5cclxuICAgIGNvbnN0IHRlc3RlciA9IChcclxuICAgICAgZmlsdGVyc1RvdGVzdDogUmVjb3JkPG51bWJlciB8IHN0cmluZywgU2VsZWN0RmlsdGVyPixcclxuICAgICAgdGVzdEZ1bmN0aW9uOiAoXHJcbiAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5LFxyXG4gICAgICAgIHZhbHVlOiBzdHJpbmcgfCBudW1iZXJcclxuICAgICAgKSA9PiBib29sZWFuXHJcbiAgICApID0+IHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBPYmplY3QudmFsdWVzKGZpbHRlcnNUb3Rlc3QpLmZpbHRlcihcclxuICAgICAgICAoZmlsdGVyOiBTZWxlY3RGaWx0ZXIpID0+IGZpbHRlci5zZWxlY3RlZFxyXG4gICAgICApO1xyXG4gICAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXkpID0+IHtcclxuICAgICAgICAgIHJldHVybiAhIXNlbGVjdGVkLmZpbmQoKGZpbHRlcjogU2VsZWN0RmlsdGVyKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0ZXN0RnVuY3Rpb24oZmxpZ2h0SXRpbmVyYXJ5LCBmaWx0ZXIudmFsdWUpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gKF9mbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXkpID0+IHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgcmVwbGFjZUZpZWxkcyA9IChcclxuICAgICAgZmllbGQ6IHN0cmluZyxcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnlcclxuICAgICk6IHN0cmluZyA9PiB7XHJcbiAgICAgIHJldHVybiBmaWVsZFxyXG4gICAgICAgIC5yZXBsYWNlKCdPVVRCT1VORF9ERVBBUlRVUkUnLCAnb3V0Ym91bmRGbGlnaHRzLjAnKVxyXG4gICAgICAgIC5yZXBsYWNlKFxyXG4gICAgICAgICAgJ09VVEJPVU5EX0FSUklWQUwnLFxyXG4gICAgICAgICAgJ291dGJvdW5kRmxpZ2h0cy4nICsgKGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMSlcclxuICAgICAgICApXHJcbiAgICAgICAgLnJlcGxhY2UoJ0lOQk9VTkRfREVQQVJUVVJFJywgJ2luYm91bmRGbGlnaHRzLjAnKVxyXG4gICAgICAgIC5yZXBsYWNlKFxyXG4gICAgICAgICAgJ0lOQk9VTkRfQVJSSVZBTCcsXHJcbiAgICAgICAgICAnaW5ib3VuZEZsaWdodHMuJyArXHJcbiAgICAgICAgICAgICgoZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzIHx8IFtdKS5sZW5ndGggLSAxKVxyXG4gICAgICAgICk7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgaXNCZXR3ZWVuID0gKFxyXG4gICAgICBtaW5tYXg6IE1pbk1heCxcclxuICAgICAgZmllbGQ6IHN0cmluZ1xyXG4gICAgKTogKChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gYm9vbGVhbikgPT4ge1xyXG4gICAgICByZXR1cm4gKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsID0gdGhpcy5oZWxwZXJzLmZyb21PYmplY3QoXHJcbiAgICAgICAgICBmbGlnaHRJdGluZXJhcnksXHJcbiAgICAgICAgICAuLi5yZXBsYWNlRmllbGRzKGZpZWxkLCBmbGlnaHRJdGluZXJhcnkpLnNwbGl0KCcuJylcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiB2YWwgPj0gbWlubWF4Lm1pbiAmJiB2YWwgPD0gbWlubWF4Lm1heDtcclxuICAgICAgfTtcclxuICAgIH07XHJcbiAgICBjb25zdCBpc0hvdXJCZXR3ZWVuID0gKFxyXG4gICAgICBtaW5tYXg6IE1pbk1heCxcclxuICAgICAgZmllbGQ6IHN0cmluZ1xyXG4gICAgKTogKChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gYm9vbGVhbikgPT4ge1xyXG4gICAgICByZXR1cm4gKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsID0gbW9tZW50KFxyXG4gICAgICAgICAgdGhpcy5oZWxwZXJzLmZyb21PYmplY3QoXHJcbiAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeSxcclxuICAgICAgICAgICAgLi4ucmVwbGFjZUZpZWxkcyhmaWVsZCwgZmxpZ2h0SXRpbmVyYXJ5KS5zcGxpdCgnLicpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKS5nZXQoJ2hvdXInKTtcclxuICAgICAgICByZXR1cm4gdmFsID49IG1pbm1heC5taW4gJiYgdmFsIDw9IG1pbm1heC5tYXg7XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGlzVGltZUJldHdlZW4gPSAoXHJcbiAgICAgIG1pbm1heDogTWluTWF4LFxyXG4gICAgICBmaWVsZDogc3RyaW5nXHJcbiAgICApOiAoKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuKSA9PiB7XHJcbiAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpOiBib29sZWFuID0+IHtcclxuICAgICAgICBjb25zdCB2YWwgPSBtb21lbnQoXHJcbiAgICAgICAgICB0aGlzLmhlbHBlcnMuZnJvbU9iamVjdChcclxuICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5LFxyXG4gICAgICAgICAgICAuLi5yZXBsYWNlRmllbGRzKGZpZWxkLCBmbGlnaHRJdGluZXJhcnkpLnNwbGl0KCcuJylcclxuICAgICAgICAgIClcclxuICAgICAgICApLmdldCgnaG91cicpO1xyXG5cclxuICAgICAgICAvLyBub3cgYXR0ZW1wdCB0byBnZXQgdGhlIG1pbiAtIG1heSBuZWVkIHRvIG5vcm1hbGlzZSB0aGlzXHJcbiAgICAgICAgY29uc3QgdmFsMiA9IG1vbWVudChcclxuICAgICAgICAgIHRoaXMuaGVscGVycy5mcm9tT2JqZWN0KFxyXG4gICAgICAgICAgICBmbGlnaHRJdGluZXJhcnksXHJcbiAgICAgICAgICAgIC4uLnJlcGxhY2VGaWVsZHMoZmllbGQsIGZsaWdodEl0aW5lcmFyeSkuc3BsaXQoJy4nKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICkuZ2V0KCdtaW51dGUnKTtcclxuXHJcbiAgICAgICAgY29uc3QgdG90YWxUaW1lOiBudW1iZXIgPSBOdW1iZXIoXHJcbiAgICAgICAgICBgJHt2YWx9LiR7dGhpcy5oZWxwZXJzLm5vcm1hbGlzZU1pbnV0ZVRvQmFzZTEwKHZhbDIpfWBcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiB0b3RhbFRpbWUgPj0gbWlubWF4Lm1pbiAmJiB0b3RhbFRpbWUgPD0gbWlubWF4Lm1heDtcclxuICAgICAgfTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaGFzVmFsdWUgPSAoXHJcbiAgICAgIGZpZWxkOiBzdHJpbmdcclxuICAgICk6ICgoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHRvVGVzdDogc3RyaW5nKSA9PiBib29sZWFuKSA9PiB7XHJcbiAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHRvVGVzdDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsID0gdGhpcy5oZWxwZXJzLmZyb21PYmplY3QoXHJcbiAgICAgICAgICBmbGlnaHRJdGluZXJhcnksXHJcbiAgICAgICAgICAuLi5yZXBsYWNlRmllbGRzKGZpZWxkLCBmbGlnaHRJdGluZXJhcnkpLnNwbGl0KCcuJylcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiB2YWwgPT09IHRvVGVzdDtcclxuICAgICAgfTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgZmllbGRIYXNWYWx1ZSA9IChcclxuICAgICAgZmllbGQ6IGtleW9mIEZsaWdodEpvdXJuZXlcclxuICAgICk6ICgoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSA9PiBib29sZWFuKSA9PiB7XHJcbiAgICAgIHJldHVybiAoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGZsaWdodFtmaWVsZF0gPT09IHZhbHVlO1xyXG4gICAgICB9O1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBvdXRJdGluZXJhcnlUZXN0ZXJzOiAoKFxyXG4gICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeVxyXG4gICAgKSA9PiBib29sZWFuKVtdID0gW107XHJcbiAgICBjb25zdCBpbkl0aW5lcmFyeVRlc3RlcnM6ICgoXHJcbiAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5XHJcbiAgICApID0+IGJvb2xlYW4pW10gPSBbXTtcclxuXHJcbiAgICBjb25zdCBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzOiAoKFxyXG4gICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeVxyXG4gICAgKSA9PiBib29sZWFuKVtdID0gW107XHJcblxyXG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICBpc1RpbWVCZXR3ZWVuKGZpbHRlcnMuYXJyaXZhbFRpbWUsICdPVVRCT1VORF9BUlJJVkFMLmRhdGVUaW1lQXJyaXZpbmcnKVxyXG4gICAgKTtcclxuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgaXNUaW1lQmV0d2VlbihcclxuICAgICAgICBmaWx0ZXJzLmRlcGFydHVyZVRpbWUsXHJcbiAgICAgICAgJ09VVEJPVU5EX0RFUEFSVFVSRS5kYXRlVGltZURlcGFydGluZydcclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzQmV0d2VlbihmaWx0ZXJzLnJldHVybkR1cmF0aW9uLCAnb3V0Ym91bmRUb3RhbER1cmF0aW9uJylcclxuICAgICk7XHJcbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzQmV0d2VlbihmaWx0ZXJzLmR1cmF0aW9uLCAnb3V0Ym91bmRUb3RhbER1cmF0aW9uJylcclxuICAgICk7XHJcbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goaXNCZXR3ZWVuKGZpbHRlcnMucHJpY2UsICd0b3RhbC5wcmljZScpKTtcclxuXHJcbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLnN0b3BzLFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoID09PSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMudG90YWxTdG9wcyxcclxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoICtcclxuICAgICAgICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzIHx8IFtdKS5sZW5ndGggPT09XHJcbiAgICAgICAgICAgIHZhbHVlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLnRvdGFsU3RvcHMsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggPT09IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMuYmFnZ2FnZSxcclxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGJhZ2dhZ2VBcnJheTogbnVtYmVyW10gPSBmbGlnaHRJdGluZXJhcnkuYmFnZ2FnZUFsbG93YW5jZS5tYXAoXHJcbiAgICAgICAgICAgIChiYWdnYWdlQWxsb3dhbmNlOiBCYWdnYWdlQWxsb3dhbmNlKSA9PiBiYWdnYWdlQWxsb3dhbmNlLnF0eVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0IGJhZ2dhZ2U6IG51bWJlciA9IGJhZ2dhZ2VBcnJheS5sZW5ndGhcclxuICAgICAgICAgICAgPyBNYXRoLm1pbiguLi5iYWdnYWdlQXJyYXkpXHJcbiAgICAgICAgICAgIDogMDtcclxuICAgICAgICAgIHJldHVybiBiYWdnYWdlID09PSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoXHJcbiAgICAgICAgZmlsdGVycy5kZXBhdHVyZUFpcnBvcnQsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0c1swXT8ub3JpZ2luQWlycG9ydCA9PT0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMuYXJyaXZhbEFpcnBvcnQsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzW1xyXG4gICAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMVxyXG4gICAgICAgICAgICBdPy5kZXN0aW5hdGlvbkFpcnBvcnQgPT09IHZhbHVlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgaXNCZXR3ZWVuKGZpbHRlcnMuZHVyYXRpb24sICdvdXRib3VuZFRvdGFsRHVyYXRpb24nKVxyXG4gICAgKTtcclxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKGlzQmV0d2VlbihmaWx0ZXJzLnByaWNlLCAndG90YWwucHJpY2UnKSk7XHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goaXNCZXR3ZWVuKGZpbHRlcnMucHJpY2UsICd0b3RhbC5wcmljZScpKTtcclxuXHJcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgaXNUaW1lQmV0d2VlbihcclxuICAgICAgICBmaWx0ZXJzLnJldHVybkFycml2YWxUaW1lLFxyXG4gICAgICAgICdJTkJPVU5EX0FSUklWQUwuZGF0ZVRpbWVBcnJpdmluZydcclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzVGltZUJldHdlZW4oXHJcbiAgICAgICAgZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZSxcclxuICAgICAgICAnT1VUQk9VTkRfQVJSSVZBTC5kYXRlVGltZUFycml2aW5nJ1xyXG4gICAgICApXHJcbiAgICApO1xyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzVGltZUJldHdlZW4oXHJcbiAgICAgICAgZmlsdGVycy5yZXR1cm5EZXBhcnR1cmVUaW1lLFxyXG4gICAgICAgICdJTkJPVU5EX0RFUEFSVFVSRS5kYXRlVGltZURlcGFydGluZydcclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgaXNCZXR3ZWVuKGZpbHRlcnMucmV0dXJuRHVyYXRpb24sICdpbmJvdW5kVG90YWxEdXJhdGlvbicpXHJcbiAgICApO1xyXG5cclxuICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgaXNCZXR3ZWVuKGZpbHRlcnMucmV0dXJuRHVyYXRpb24sICdvdXRib3VuZFRvdGFsRHVyYXRpb24nKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMuc3RvcHMsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzLmxlbmd0aCA9PT0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMuc3RvcHMsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggPT09IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoXHJcbiAgICAgICAgZmlsdGVycy50b3RhbFN0b3BzLFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggK1xyXG4gICAgICAgICAgICAgIChmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHMgfHwgW10pLmxlbmd0aCA9PT1cclxuICAgICAgICAgICAgdmFsdWVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLmJhZ2dhZ2UsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBiYWdnYWdlQXJyYXk6IG51bWJlcltdID0gZmxpZ2h0SXRpbmVyYXJ5LmJhZ2dhZ2VBbGxvd2FuY2UubWFwKFxyXG4gICAgICAgICAgICAoYmFnZ2FnZUFsbG93YW5jZTogQmFnZ2FnZUFsbG93YW5jZSkgPT4gYmFnZ2FnZUFsbG93YW5jZS5xdHlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zdCBiYWdnYWdlOiBudW1iZXIgPSBiYWdnYWdlQXJyYXkubGVuZ3RoXHJcbiAgICAgICAgICAgID8gTWF0aC5taW4oLi4uYmFnZ2FnZUFycmF5KVxyXG4gICAgICAgICAgICA6IDA7XHJcbiAgICAgICAgICByZXR1cm4gYmFnZ2FnZSA9PT0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMuYmFnZ2FnZSxcclxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGJhZ2dhZ2VBcnJheTogbnVtYmVyW10gPSBmbGlnaHRJdGluZXJhcnkuYmFnZ2FnZUFsbG93YW5jZS5tYXAoXHJcbiAgICAgICAgICAgIChiYWdnYWdlQWxsb3dhbmNlOiBCYWdnYWdlQWxsb3dhbmNlKSA9PiBiYWdnYWdlQWxsb3dhbmNlLnF0eVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0IGJhZ2dhZ2U6IG51bWJlciA9IGJhZ2dhZ2VBcnJheS5sZW5ndGhcclxuICAgICAgICAgICAgPyBNYXRoLm1pbiguLi5iYWdnYWdlQXJyYXkpXHJcbiAgICAgICAgICAgIDogMDtcclxuICAgICAgICAgIHJldHVybiBiYWdnYWdlID09PSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLmRlcGF0dXJlUmV0dXJuQWlycG9ydCxcclxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIHJldHVybiBmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHNbMF0/Lm9yaWdpbkFpcnBvcnQgPT09IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLmRlcGF0dXJlUmV0dXJuQWlycG9ydCxcclxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIHJldHVybiBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzWzBdPy5vcmlnaW5BaXJwb3J0ID09PSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLmFycml2YWxSZXR1cm5BaXJwb3J0LFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzW1xyXG4gICAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXHJcbiAgICAgICAgICAgIF0/LmRlc3RpbmF0aW9uQWlycG9ydCA9PT0gdmFsdWVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMuYXJyaXZhbFJldHVybkFpcnBvcnQsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzW1xyXG4gICAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMVxyXG4gICAgICAgICAgICBdPy5kZXN0aW5hdGlvbkFpcnBvcnQgPT09IHZhbHVlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBvdXRKb3VybmV5VGVzdGVyczogKChcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5XHJcbiAgICApID0+IGJvb2xlYW4pW10gPSBbXTtcclxuICAgIG91dEpvdXJuZXlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihmaWx0ZXJzLmNsYXNzZXMsIGZpZWxkSGFzVmFsdWUoJ2NhYmluQ2xhc3MnKSlcclxuICAgICk7XHJcbiAgICBvdXRKb3VybmV5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoZmlsdGVycy5haXJsaW5lcywgZmllbGRIYXNWYWx1ZSgnbWFya2V0aW5nQ2FycmllcicpKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBpbkpvdXJuZXlUZXN0ZXJzOiAoKFxyXG4gICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXlcclxuICAgICkgPT4gYm9vbGVhbilbXSA9IFtdO1xyXG4gICAgaW5Kb3VybmV5VGVzdGVycy5wdXNoKHRlc3RlcihmaWx0ZXJzLmNsYXNzZXMsIGZpZWxkSGFzVmFsdWUoJ2NhYmluQ2xhc3MnKSkpO1xyXG4gICAgaW5Kb3VybmV5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoZmlsdGVycy5haXJsaW5lcywgZmllbGRIYXNWYWx1ZSgnbWFya2V0aW5nQ2FycmllcicpKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBvdXRGaWx0ZXJJdGluZXJhcmllcyA9IChcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksXHJcbiAgICAgIGdyb3VwSW5kZXg6IG51bWJlclxyXG4gICAgKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5yZWR1Y2UoXHJcbiAgICAgICAgICAoXHJcbiAgICAgICAgICAgIGFjYzogYm9vbGVhbixcclxuICAgICAgICAgICAgdGVzdGVyMTogKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuXHJcbiAgICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgYWNjID0gYWNjICYmIHRlc3RlcjEoZmxpZ2h0SXRpbmVyYXJ5KTtcclxuICAgICAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB0cnVlXHJcbiAgICAgICAgKSAmJlxyXG4gICAgICAgICghZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cyB8fFxyXG4gICAgICAgICAgISEoZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cyB8fCBbXSkuZmluZChcclxuICAgICAgICAgICAgKGZsaWdodEpvdXJuZXk6IEZsaWdodEpvdXJuZXkpOiBib29sZWFuID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gISFvdXRKb3VybmV5VGVzdGVycy5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgICAgIGFjYzogYm9vbGVhbixcclxuICAgICAgICAgICAgICAgICAgdGVzdGVyMjogKFxyXG4gICAgICAgICAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leVxyXG4gICAgICAgICAgICAgICAgICApID0+IGJvb2xlYW5cclxuICAgICAgICAgICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gYWNjICYmIHRlc3RlcjIoZmxpZ2h0Sm91cm5leSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICkpXHJcbiAgICAgICk7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgaW5GaWx0ZXJJdGluZXJhcmllcyA9IChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIGluSXRpbmVyYXJ5VGVzdGVycy5yZWR1Y2UoXHJcbiAgICAgICAgICAoXHJcbiAgICAgICAgICAgIGFjYzogYm9vbGVhbixcclxuICAgICAgICAgICAgdGVzdGVyMTogKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuXHJcbiAgICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGFjYyAmJiB0ZXN0ZXIxKGZsaWdodEl0aW5lcmFyeSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICkgJiZcclxuICAgICAgICAoIWZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cz8ubGVuZ3RoIHx8XHJcbiAgICAgICAgICAhIShmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHMgfHwgW10pLmZpbmQoXHJcbiAgICAgICAgICAgIChmbGlnaHRKb3VybmV5OiBGbGlnaHRKb3VybmV5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICEhaW5Kb3VybmV5VGVzdGVycy5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgICAgIGFjYzogYm9vbGVhbixcclxuICAgICAgICAgICAgICAgICAgdGVzdGVyMjogKFxyXG4gICAgICAgICAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leVxyXG4gICAgICAgICAgICAgICAgICApID0+IGJvb2xlYW5cclxuICAgICAgICAgICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gYWNjICYmIHRlc3RlcjIoZmxpZ2h0Sm91cm5leSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICkpXHJcbiAgICAgICk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGluRHVhbEZpbHRlckl0aW5lcmFyaWVzID0gKFxyXG4gICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeVxyXG4gICAgKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5yZWR1Y2UoXHJcbiAgICAgICAgICAoXHJcbiAgICAgICAgICAgIGFjYzogYm9vbGVhbixcclxuICAgICAgICAgICAgdGVzdGVyMTogKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuXHJcbiAgICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGFjYyAmJiB0ZXN0ZXIxKGZsaWdodEl0aW5lcmFyeSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICkgJiZcclxuICAgICAgICAoIWZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHM/Lmxlbmd0aCB8fFxyXG4gICAgICAgICAgISEoZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cyB8fCBbXSkuZmluZChcclxuICAgICAgICAgICAgKGZsaWdodEpvdXJuZXk6IEZsaWdodEpvdXJuZXkpOiBib29sZWFuID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gISFpbkpvdXJuZXlUZXN0ZXJzLnJlZHVjZShcclxuICAgICAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgICAgYWNjOiBib29sZWFuLFxyXG4gICAgICAgICAgICAgICAgICB0ZXN0ZXIyOiAoXHJcbiAgICAgICAgICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5XHJcbiAgICAgICAgICAgICAgICAgICkgPT4gYm9vbGVhblxyXG4gICAgICAgICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBhY2MgJiYgdGVzdGVyMihmbGlnaHRKb3VybmV5KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSlcclxuICAgICAgKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWRSdWxlU3VtbWFyeTogUmVjb3JkUnVsZUFjdGlvbiA9XHJcbiAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWRbXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0Py5qb3VybmV5SGFzaFxyXG4gICAgICBdIHx8IHt9O1xyXG5cclxuICAgIGNvbnN0IGhhc0ZpZWxkID0gPFQ+KFxyXG4gICAgICBmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxyXG4gICAgICBmaWVsZDogc3RyaW5nLFxyXG4gICAgICBkZWY6IFRcclxuICAgICk6IFQgPT4ge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIHRoaXMuaGVscGVycy5maWVsZEZyb21PYmplY3QodGhpcy5fcnVsZUFjdGlvblN1bW1hcnksIFtcclxuICAgICAgICAgICdqb3VybmV5V2hlblNlbGVjdGVkJyxcclxuICAgICAgICAgIGZsaWdodC5qb3VybmV5SGFzaCxcclxuICAgICAgICAgIGZpZWxkXHJcbiAgICAgICAgXSkgfHxcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZmllbGRGcm9tT2JqZWN0KHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LCBbXHJcbiAgICAgICAgICAnd2hlblNlbGVjdGVkQWxvbmUnLFxyXG4gICAgICAgICAgZmxpZ2h0LmpvdXJuZXlIYXNoLFxyXG4gICAgICAgICAgZmllbGRcclxuICAgICAgICBdKSB8fFxyXG4gICAgICAgIHRoaXMuaGVscGVycy5maWVsZEZyb21PYmplY3Qoc2VsZWN0ZWRSdWxlU3VtbWFyeSwgW1xyXG4gICAgICAgICAgZmxpZ2h0LmpvdXJuZXlIYXNoLFxyXG4gICAgICAgICAgZmllbGRcclxuICAgICAgICBdKSB8fFxyXG4gICAgICAgIGRlZlxyXG4gICAgICApO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBzZXRTZWxlY3RlZCA9IChmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSA9PiB7XHJcbiAgICAgIGZsaWdodC5zZWxlY3RlZCA9IGZsaWdodC51aWQgPT09IHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodD8udWlkO1xyXG4gICAgICBmbGlnaHQudW5hdmFpbGFibGUgPSBoYXNGaWVsZChmbGlnaHQsICd1bmF2YWlsYWJsZScsIGZhbHNlKTtcclxuXHJcbiAgICAgIGZsaWdodC51bmF2YWlsYWJsZU1lc3NhZ2UgPSBoYXNGaWVsZChmbGlnaHQsICd1bmF2YWlsYWJsZU1lc3NhZ2UnLCAnJyk7XHJcbiAgICAgIGZsaWdodC5yZXF1aXJlc1JlYXNvbiA9IGhhc0ZpZWxkKGZsaWdodCwgJ3JlcXVpcmVzUmVhc29uJywgZmFsc2UpO1xyXG4gICAgICBmbGlnaHQucmVxdWlyZXNSZWFzb25NZXNzYWdlID0gaGFzRmllbGQoXHJcbiAgICAgICAgZmxpZ2h0LFxyXG4gICAgICAgICdyZXF1aXJlc1JlYXNvbk1lc3NhZ2UnLFxyXG4gICAgICAgICcnXHJcbiAgICAgICk7XHJcblxyXG4gICAgICByZXR1cm4gZmxpZ2h0O1xyXG4gICAgfTtcclxuICAgIGlmICh0aGlzLmlzR3JvdXBlZEZsaWdodHModGhpcy5mdWxsUmVzdWx0cykpIHtcclxuICAgICAgY29uc3QgZ3JvdXBlZEZsaWdodHM6IEdyb3VwRmxpZ2h0cyA9IHRoaXMuX2dyb3VwZWQuZmluZChcclxuICAgICAgICAoaXRlbTogR3JvdXBGbGlnaHRzKSA9PiBpdGVtLnJlZmVyZW5jZUlEID09PSB0aGlzLnNlbGVjdGVkR3JvdXBJZFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnJlc3VsdHMubmV4dChcclxuICAgICAgICB0aGlzLmhlbHBlcnNcclxuICAgICAgICAgIC5jbG9uZTxGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHRbXT4odGhpcy5mdWxsUmVzdWx0cylcclxuICAgICAgICAgIC5maWx0ZXIoKHJlc3VsdDE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gISFyZXN1bHQxO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5tYXAoXHJcbiAgICAgICAgICAgIChyZXN1bHQyOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQpOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGZpbHRlckl0aW5lcmFyaWVzID1cclxuICAgICAgICAgICAgICAgIHJlc3VsdDIuZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kIHx8XHJcbiAgICAgICAgICAgICAgICByZXN1bHQyLmRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5EdWFsU2luZ2xlT3V0Ym91bmRcclxuICAgICAgICAgICAgICAgICAgPyBvdXRGaWx0ZXJJdGluZXJhcmllc1xyXG4gICAgICAgICAgICAgICAgICA6IHJlc3VsdDIuZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkR1YWxTaW5nbGVJbmJvdW5kXHJcbiAgICAgICAgICAgICAgICAgID8gaW5EdWFsRmlsdGVySXRpbmVyYXJpZXNcclxuICAgICAgICAgICAgICAgICAgOiBpbkZpbHRlckl0aW5lcmFyaWVzO1xyXG5cclxuICAgICAgICAgICAgICByZXN1bHQyLmNsYXNzZXMgPSBPYmplY3QuZW50cmllcyhyZXN1bHQyLmNsYXNzZXMpLnJlZHVjZShcclxuICAgICAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgICAgYWNjdW06IFJlY29yZDxPQlRGbGlnaHRDYWJpbkNsYXNzLCBGbGlnaHRJdGluZXJhcnlDbGFzcz4sXHJcbiAgICAgICAgICAgICAgICAgIFtrZXksIHZhbHVlXTogW09CVEZsaWdodENhYmluQ2xhc3MsIEZsaWdodEl0aW5lcmFyeUNsYXNzXVxyXG4gICAgICAgICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5mbGlnaHRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRKb3VybmV5cyA9IHZhbHVlLmZsaWdodHNcclxuICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gISFmbGlnaHRJdGluZXJhcnlcclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclNlbGVjdGVkRmxpZ2h0cyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkRmxpZ2h0cz8uZmxpZ2h0c1tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGVscGVycy5PQlRGbGlnaHRDYWJpbkNsYXNzVG9GbGlnaHRDYWJpbkNsYXNzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBdIHx8IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDIuZGlyZWN0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZmlsdGVySXRpbmVyYXJpZXMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAubWFwKHNldFNlbGVjdGVkKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRKb3VybmV5cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBhY2N1bVtrZXldID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi52YWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmxpZ2h0czogZmlsdGVyZWRKb3VybmV5c1xyXG4gICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHt9IGFzIFJlY29yZDxPQlRGbGlnaHRDYWJpbkNsYXNzLCBGbGlnaHRJdGluZXJhcnlDbGFzcz5cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHQyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAuZmlsdGVyKChyZXN1bHQyOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDIgJiYgT2JqZWN0LmtleXMocmVzdWx0Mi5jbGFzc2VzKS5sZW5ndGggPiAwO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5zb3J0KHRoaXMuX3NvcnRHcm91cGVkUm91dGluZXNbc29ydFZhbHVlXSkgYXMgRmxpZ2h0UXVvdGVSZXN1bHRBcnJheVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZXN1bHRzLm5leHQoXHJcbiAgICAgICAgT2JqZWN0LmZyZWV6ZShcclxuICAgICAgICAgIHRoaXMuaGVscGVyc1xyXG4gICAgICAgICAgICAuY2xvbmUodGhpcy5mdWxsUmVzdWx0cylcclxuICAgICAgICAgICAgLm1hcCgocmVzdWx0NDogRmxpZ2h0QWxsUXVvdGVSZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICBsZXQgbmV3Sm91cm5leXM6IGFueSA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHQ0LmpvdXJuZXlzKTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGZpbHRlcnMuZmxpZ2h0TnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdKb3VybmV5cyA9IG5ld0pvdXJuZXlzLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgKGZsaWdodEl0ZW06IEZsaWdodEl0aW5lcmFyeSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG91dGJvdW5kRmxpZ2h0cyA9IGZsaWdodEl0ZW0ub3V0Ym91bmRGbGlnaHRzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAob3V0RmxpZ2h0KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRGbGlnaHQubWFya2V0aW5nRmxpZ2h0TnVtYmVyID09PSBmaWx0ZXJzLmZsaWdodE51bWJlclxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5ib3VuZEZsaWdodHMgPSBmbGlnaHRJdGVtLmluYm91bmRGbGlnaHRzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAoaW5GbGlnaHQpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluRmxpZ2h0Lm1hcmtldGluZ0ZsaWdodE51bWJlciA9PT0gZmlsdGVycy5mbGlnaHROdW1iZXJcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvdXRib3VuZEZsaWdodHMgfHwgaW5ib3VuZEZsaWdodHMpIHJldHVybiBmbGlnaHRJdGVtO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgbmV3Sm91cm5leXMgPSBuZXdKb3VybmV5cy5maWx0ZXIob3V0RmlsdGVySXRpbmVyYXJpZXMpO1xyXG5cclxuICAgICAgICAgICAgICBpZiAodGhpcy5pc1JldHVybikge1xyXG4gICAgICAgICAgICAgICAgbGV0IG5ld0luSm91cm5leXM6IGFueSA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHQ0LmpvdXJuZXlzKTtcclxuICAgICAgICAgICAgICAgIG5ld0luSm91cm5leXMgPSBuZXdJbkpvdXJuZXlzLmZpbHRlcihpbkZpbHRlckl0aW5lcmFyaWVzKTtcclxuICAgICAgICAgICAgICAgIG5ld0pvdXJuZXlzID0gdGhpcy5tZXJnZU91dEluQm91bmQobmV3Sm91cm5leXMsIG5ld0luSm91cm5leXMpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBuZXdKb3VybmV5cy5zb3J0KHRoaXMuX3NvcnRJdGluYXJ5Um91dGluZXNbc29ydFZhbHVlXSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdGbGlnaHRBbGxRdW90ZVJlc3VsdCcsXHJcbiAgICAgICAgICAgICAgICBqb3VybmV5czogPEZsaWdodEl0aW5lcmFyeVtdPm5ld0pvdXJuZXlzXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApIGFzIEZsaWdodFF1b3RlUmVzdWx0QXJyYXlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1lcmdlT3V0SW5Cb3VuZChcclxuICAgIG91dGJvdW5kOiBGbGlnaHRJdGluZXJhcnlbXSxcclxuICAgIGluYm91bmQ6IEZsaWdodEl0aW5lcmFyeVtdXHJcbiAgKTogRmxpZ2h0SXRpbmVyYXJ5W10ge1xyXG4gICAgY29uc3QgZmxpZ2h0cyA9IE9iamVjdC52YWx1ZXMoXHJcbiAgICAgIFsuLi5vdXRib3VuZCwgLi4uaW5ib3VuZF0ucmVkdWNlKChyZXN1bHQsIHsgdWlkLCAuLi5yZXN0IH0pID0+IHtcclxuICAgICAgICBpZiAoIXJlc3VsdFt1aWRdKSB7XHJcbiAgICAgICAgICByZXN1bHRbdWlkXSA9IHtcclxuICAgICAgICAgICAgLi4uKHJlc3VsdFt1aWRdIHx8IHt9KSxcclxuICAgICAgICAgICAgdWlkLFxyXG4gICAgICAgICAgICAuLi5yZXN0XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9LCBbXSlcclxuICAgICk7XHJcbiAgICByZXR1cm4gZmxpZ2h0cztcclxuICB9XHJcblxyXG4gIHVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHM6IEZsaWdodFF1b3RlUmVzdWx0QXJyYXkpOiBJQ2hlYXBlc3RQcmljZSB7XHJcbiAgICBpZiAoIXJlc3VsdHMubGVuZ3RoIHx8IHRoaXMuc2VhcmNoU2VydmljZS5pc0ZsaWdodHNHcm91cGVkKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGpvdXJuZXlzID0gKHJlc3VsdHNbMF0gYXMgRmxpZ2h0QWxsUXVvdGVSZXN1bHQpLmpvdXJuZXlzO1xyXG4gICAgaWYgKCFqb3VybmV5cy5sZW5ndGgpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBjdXJyZW5jeSA9IGpvdXJuZXlzWzBdLnRvdGFsLmN1cnJlbmN5O1xyXG4gICAgcmV0dXJuIGpvdXJuZXlzLnJlZHVjZShcclxuICAgICAgKGNoZWFwZXN0UHJpY2U6IElDaGVhcGVzdFByaWNlLCByZXN1bHQ6IEZsaWdodEl0aW5lcmFyeSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHByaWNlID0gcmVzdWx0LnRvdGFsLnByaWNlO1xyXG4gICAgICAgIGlmIChjaGVhcGVzdFByaWNlLmFtb3VudCA+IHByaWNlKSBjaGVhcGVzdFByaWNlLmFtb3VudCA9IHByaWNlO1xyXG4gICAgICAgIHJldHVybiBjaGVhcGVzdFByaWNlO1xyXG4gICAgICB9LFxyXG4gICAgICB7IGFtb3VudDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsIGN1cnJlbmN5Q29kZTogY3VycmVuY3kgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHNlbGVjdEdyb3VwZWRGbGlnaHQoXHJcbiAgICBzZWxlY3RlZEZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXHJcbiAgICBkaXJlY3Rpb246IEZsaWdodERpcmVjdGlvbkVudW0sXHJcbiAgICBncm91cElkOiBudW1iZXJcclxuICApIHtcclxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPVxyXG4gICAgICBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xyXG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgYmFza2V0ICYmXHJcbiAgICAgIHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUub25lV2F5ICYmXHJcbiAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5PdXRib3VuZFxyXG4gICAgKSB7XHJcbiAgICAgIC8vIFRPRE8gYmVjb3VzZSBwb3AtdXAgaXMgbm90IHJlYWR5IEkgY29tbWVudGVkIHRoZSBjb2RlLlxyXG4gICAgICAvLyB0aGlzLm1vZGFsU2VydmljZS5vcGVuKCBNb2RhbFR5cGVzLkZsaWdodEV4dHJhc0RpYWxvZ0NvbXBvbmVudCwgeyBjZW50ZXJlZDogdHJ1ZSB9LCB7IGZsaWdodDogc2VsZWN0ZWRGbGlnaHQgfSkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAvLyAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgdGhpcy5ib29rU2luZ2xlRmxpZ2h0KGludEJhc2tldCwgc2VsZWN0ZWRGbGlnaHQpO1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgYmFza2V0ICYmXHJcbiAgICAgIHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuICYmXHJcbiAgICAgIChkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmQgfHxcclxuICAgICAgICBkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZU91dGJvdW5kKVxyXG4gICAgKSB7XHJcbiAgICAgIGlmIChzZWxlY3RlZEZsaWdodC5zZWxlY3RlZCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwSWQgPSAtMTtcclxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycyh0aGlzLmN1cnJlbnRGaWx0ZXJzLCB0aGlzLmN1cnJlbnRTb3J0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQgPSBzZWxlY3RlZEZsaWdodDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBJZCA9IGdyb3VwSWQ7XHJcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnModGhpcy5jdXJyZW50RmlsdGVycywgdGhpcy5jdXJyZW50U29ydCk7XHJcbiAgICAgICAgdGhpcy5fdXBkYXRlVHJhdmVsUG9saWNpZXMoKTtcclxuICAgICAgfVxyXG4gICAgICBzZWxlY3RlZEZsaWdodC5zZWxlY3RlZCA9ICFzZWxlY3RlZEZsaWdodC5zZWxlY3RlZDtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgYmFza2V0ICYmXHJcbiAgICAgIHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuICYmXHJcbiAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5JbmJvdW5kICYmXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZG9Cb29raW5nKFxyXG4gICAgICAgIGludEJhc2tldCxcclxuICAgICAgICBzZWxlY3RlZEZsaWdodCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBvdXRib3VuZEZsaWdodHM6IFtcclxuICAgICAgICAgICAgLi4uc2VsZWN0ZWRGbGlnaHQub3V0Ym91bmRGbGlnaHRzLm1hcChcclxuICAgICAgICAgICAgICAoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCBzZWdtZW50SW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFrZVNjaGVtYUZsaWdodHMoXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodCxcclxuICAgICAgICAgICAgICAgICAgJ291dGJvdW5kJyxcclxuICAgICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgICAgc2VnbWVudEluZGV4XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgXSxcclxuICAgICAgICAgIGluYm91bmRGbGlnaHRzOiBbXHJcbiAgICAgICAgICAgIC4uLnNlbGVjdGVkRmxpZ2h0LmluYm91bmRGbGlnaHRzLm1hcChcclxuICAgICAgICAgICAgICAoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCBzZWdtZW50SW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFrZVNjaGVtYUZsaWdodHMoXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodCxcclxuICAgICAgICAgICAgICAgICAgJ2luYm91bmQnLFxyXG4gICAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgICBzZWdtZW50SW5kZXhcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgICAgam91cm5leVR5cGU6ICdyb3VuZHRyaXAnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmdVVEMsXHJcbiAgICAgICAgc2VsZWN0ZWRGbGlnaHQuaW5ib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmdVVENcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0LnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodCA9IG51bGw7XHJcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKHRoaXMuY3VycmVudEZpbHRlcnMsIHRoaXMuY3VycmVudFNvcnQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIGJhc2tldCAmJlxyXG4gICAgICB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaC5jaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLnJldHVybiAmJlxyXG4gICAgICBkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZUluYm91bmQgJiZcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0XHJcbiAgICApIHtcclxuICAgICAgdGhpcy5ib29rU2luZ2xlRmxpZ2h0KGludEJhc2tldCwgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0KTtcclxuICAgICAgdGhpcy5ib29rU2luZ2xlRmxpZ2h0KGludEJhc2tldCwgc2VsZWN0ZWRGbGlnaHQpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0ID0gbnVsbDtcclxuICAgICAgdGhpcy5hcHBseUZpbHRlcnModGhpcy5jdXJyZW50RmlsdGVycywgdGhpcy5jdXJyZW50U29ydCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgX3VwZGF0ZVRyYXZlbFBvbGljaWVzKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0IHx8XHJcbiAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWRbXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0LmpvdXJuZXlIYXNoXHJcbiAgICAgIF0gfHxcclxuICAgICAgIXRoaXMubXVsdGkgfHxcclxuICAgICAgdGhpcy5tdWx0aS5sZW5ndGggPT09IDBcclxuICAgICkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBtdWx0aUluYm91bmRzID0gKHRoaXMubXVsdGkgfHwgW10pLnJlZHVjZShcclxuICAgICAgKGFjYzogRmxpZ2h0SXRpbmVyYXJ5W10sIGl0ZW06IEZsaWdodE11bHRpKSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0ub3JkZXIgPT09IDEgJiYgaXRlbS5yZXN1bHRzICYmIGl0ZW0ucmVzdWx0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBhY2MgPSBhY2MuY29uY2F0KGl0ZW0ucmVzdWx0cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgIH0sXHJcbiAgICAgIFtdXHJcbiAgICApO1xyXG4gICAgaWYgKG11bHRpSW5ib3VuZHMubGVuZ3RoID4gMCkge1xyXG5cclxuICAgICAgaWYgKCF0aGlzLnJhd1Jlc3VsdHMpIHtcclxuICAgICAgICB0aGlzLnJhd1Jlc3VsdHMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtKFxyXG4gICAgICAgICAgdGhpcy5yZXN1bHRzU2Vzc2lvbk5hbWUgKyAnX3JhdydcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLnJhd1Jlc3VsdHMpO1xyXG4gICAgICB0aGlzLmFwcGx5RmxpZ2h0UnVsZXNcclxuICAgICAgICAuZmV0Y2hPbmUoe1xyXG4gICAgICAgICAgc2VsZWN0ZWRPdXRib3VuZEZsaWdodDogdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0LFxyXG4gICAgICAgICAgYXZhaWxhYmxlSW5ib3VuZEZsaWdodHM6IG11bHRpSW5ib3VuZHMsXHJcbiAgICAgICAgICBzZWFyY2hJZDogdGhpcy5yYXdSZXN1bHRzLnNlYXJjaElkXHJcbiAgICAgICAgfSlcclxuICAgICAgICAucGlwZSh0YWtlKDEpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHJ1bGVzOiBSdWxlQWN0aW9uU3VtbWFyeUludGVyZmFjZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJ1bGVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5ID0gdGhpcy5oZWxwZXJzLm1lcmdlT2JqZWN0cyhcclxuICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeSxcclxuICAgICAgICAgICAgICBydWxlc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLl9hcHBseUZpbHRlcigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBib29rU2luZ2xlRmxpZ2h0KFxyXG4gICAgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSxcclxuICAgIHNlbGVjdGVkRmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9uc1xyXG4gICkge1xyXG4gICAgdGhpcy5kb0Jvb2tpbmcoXHJcbiAgICAgIGludEJhc2tldCxcclxuICAgICAgc2VsZWN0ZWRGbGlnaHQsXHJcbiAgICAgIHtcclxuICAgICAgICBvdXRib3VuZEZsaWdodHM6IHNlbGVjdGVkRmxpZ2h0Lm91dGJvdW5kRmxpZ2h0cy5tYXAoXHJcbiAgICAgICAgICAoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCBzZWdtZW50SW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYWtlU2NoZW1hRmxpZ2h0cyhmbGlnaHQsICdvdXRib3VuZCcsIDAsIHNlZ21lbnRJbmRleCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKSxcclxuICAgICAgICBpbmJvdW5kRmxpZ2h0czogW10sXHJcbiAgICAgICAgam91cm5leVR5cGU6ICdzaW5nbGUnXHJcbiAgICAgIH0sXHJcbiAgICAgIHNlbGVjdGVkRmxpZ2h0Lm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRvQm9va2luZyhcclxuICAgIGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UsXHJcbiAgICBzZWxlY3RlZEZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXHJcbiAgICBzY2hlbWFEZXRhaWxzOiBhbnksXHJcbiAgICBvdXRib3VuZERhdGU6IHN0cmluZyxcclxuICAgIGluYm91bmREYXRlPzogc3RyaW5nXHJcbiAgKTogUHJvbWlzZTxEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zPiB7XHJcbiAgICBjb25zdCB7IHNvdXJjZUlkLCBjbzJQZXJJdGVtLCBjbzJQZXJQYXNzZW5nZXIsIHRvdGFsIH0gPSBzZWxlY3RlZEZsaWdodDtcclxuICAgIGNvbnN0IGJvb2tpbmc6IEFkZEl0ZW1Ub0Jhc2tldE11dGF0aW9uVmFyaWFibGVzID0ge1xyXG4gICAgICBhZHVsdHM6IHRoaXMuYWR1bHRzLFxyXG4gICAgICBiYXNrZXQ6IGludEJhc2tldC5pZCxcclxuICAgICAgY2hpbGRyZW46IHRoaXMuY2hpbGRyZW4sXHJcbiAgICAgIGNvMlBlckl0ZW0sXHJcbiAgICAgIGNvMlBlclBhc3NlbmdlcixcclxuICAgICAgY3VycmVuY3k6IHRvdGFsLmN1cnJlbmN5IGFzIEN1cnJlbmN5Q29kZSxcclxuICAgICAgZGV0YWlsOiBzY2hlbWFEZXRhaWxzLFxyXG4gICAgICBwcmljZTogdG90YWwucHJpY2UsXHJcbiAgICAgIHNlYXJjaFF1ZXJ5OiB0aGlzLnJlc3VsdFF1ZXJ5LFxyXG4gICAgICBzZXJ2aWNlOiBzb3VyY2VJZC50b1N0cmluZygpLFxyXG4gICAgICBvdXRib3VuZERhdGUsXHJcbiAgICAgIGxvd2VzdFByaWNlOiAodGhpcy5hYnNvbHV0ZUNoZWFwZXN0UHJpY2UuYW1vdW50ICE9IE1hdGguZmxvb3IodG90YWwucHJpY2UpIHx8IHRoaXMuYWJzb2x1dGVDaGVhcGVzdFByaWNlLmN1cnJlbmN5Q29kZSAhPSB0b3RhbC5jdXJyZW5jeSkgPyBcclxuICAgICAgICB0aGlzLmFic29sdXRlQ2hlYXBlc3RQcmljZS5hbW91bnQgOiBudWxsLFxyXG4gICAgICBsb3dlc3RQcmljZUN1cnJlbmN5OiAodGhpcy5hYnNvbHV0ZUNoZWFwZXN0UHJpY2UuYW1vdW50ICE9IE1hdGguZmxvb3IodG90YWwucHJpY2UpIHx8IHRoaXMuYWJzb2x1dGVDaGVhcGVzdFByaWNlLmN1cnJlbmN5Q29kZSAhPSB0b3RhbC5jdXJyZW5jeSkgP1xyXG4gICAgICAgIDxDdXJyZW5jeUNvZGU+dGhpcy5hYnNvbHV0ZUNoZWFwZXN0UHJpY2UuY3VycmVuY3lDb2RlIDogbnVsbFxyXG4gICAgfTtcclxuICAgIGlmIChpbmJvdW5kRGF0ZSkge1xyXG4gICAgICBib29raW5nLmluYm91bmREYXRlID0gaW5ib3VuZERhdGU7XHJcbiAgICB9XHJcbiAgICBjb25zdCB3aGF0SGFwcGVuZWQgPSBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgIGJvb2tpbmcsXHJcbiAgICAgIGludEJhc2tldCxcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxyXG4gICAgICB0aGlzLnRyYXZlbGxlcnMsXHJcbiAgICAgIHNlbGVjdGVkRmxpZ2h0LnJlcXVpcmVzUmVhc29uXHJcbiAgICApO1xyXG4gICAgaWYgKHdoYXRIYXBwZW5lZCA9PT0gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5yZXNlYXJjaCkge1xyXG4gICAgICB0aGlzLnBlcmZvcm1TZWFyY2goKTtcclxuICAgIH1cclxuICAgIHJldHVybiB3aGF0SGFwcGVuZWQ7XHJcbiAgfVxyXG5cclxuICBnZXQgYWJzb2x1dGVDaGVhcGVzdFByaWNlKCk6IElDaGVhcGVzdFByaWNle1xyXG4gICAgaWYgKHRoaXMuY2hlYXBlc3RQcmljZSkgcmV0dXJuIHRoaXMuY2hlYXBlc3RQcmljZVxyXG4gICAgbGV0IHByaWNlOiBJQ2hlYXBlc3RQcmljZSA9IHsgYW1vdW50OiBudWxsLCBjdXJyZW5jeUNvZGU6IG51bGx9XHJcbiAgICBpZiAodGhpcy5jaGVhcGVzdFByaWNlT2JqZWN0LmR1YWxJbmJvdW5kLmFtb3VudCArIHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdC5kdWFsT3V0Ym91bmQuYW1vdW50IDwgXHJcbiAgICAgIHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdC5yZXR1cm5zLmFtb3VudCAmJiB0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3QuZHVhbEluYm91bmQuY3VycmVuY3lDb2RlID09IHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdC5kdWFsT3V0Ym91bmQuY3VycmVuY3lDb2RlKXtcclxuICAgICAgcHJpY2UuYW1vdW50ID0gdGhpcy5jaGVhcGVzdFByaWNlT2JqZWN0LmR1YWxJbmJvdW5kLmFtb3VudCArIHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdC5kdWFsT3V0Ym91bmQuYW1vdW50XHJcbiAgICAgIHByaWNlLmN1cnJlbmN5Q29kZSA9IHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdC5kdWFsSW5ib3VuZC5jdXJyZW5jeUNvZGVcclxuICAgIH1cclxuICAgIGVsc2UgcHJpY2UgPSB0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3QucmV0dXJuc1xyXG4gICAgcmV0dXJuIHByaWNlXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1ha2VTY2hlbWFGbGlnaHRzKFxyXG4gICAgc2VsZWN0ZWRGbGlnaHQ6IEZsaWdodEpvdXJuZXksXHJcbiAgICBmbGlnaHRHcm91cDogJ291dGJvdW5kJyB8ICdpbmJvdW5kJyxcclxuICAgIGdyb3VwSW5kZXg6IG51bWJlcixcclxuICAgIHNlZ21lbnRJbmRleDogbnVtYmVyXHJcbiAgKTogYW55IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLnNlbGVjdGVkRmxpZ2h0LFxyXG4gICAgICBqb3VybmV5SW5mbzoge1xyXG4gICAgICAgIGZsaWdodEdyb3VwLFxyXG4gICAgICAgIGdyb3VwSW5kZXgsXHJcbiAgICAgICAgc2VnbWVudEluZGV4XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG4gIGFzeW5jIGFkZEZsaWdodEpvdXJuZXlzVG9CYXNrZXQoXHJcbiAgICBmbGlnaHRRdW90ZTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcclxuICApOiBQcm9taXNlPERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnM+IHtcclxuICAgIGlmIChmbGlnaHRRdW90ZS51bmF2YWlsYWJsZSkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPVxyXG4gICAgICBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xyXG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xyXG4gICAgaWYgKGJhc2tldCkge1xyXG4gICAgICBjb25zdCB7IHNvdXJjZUlkLCBjbzJQZXJJdGVtLCBjbzJQZXJQYXNzZW5nZXIsIHRvdGFsIH0gPSBmbGlnaHRRdW90ZTtcclxuICAgICAgY29uc3Qgb3V0Ym91bmREYXRlOiBhbnkgPSBtb21lbnQoXHJcbiAgICAgICAgZmxpZ2h0UXVvdGUub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGluYm91bmREYXRlOiBhbnkgPSBmbGlnaHRRdW90ZS5pbmJvdW5kRmxpZ2h0cy5sZW5ndGhcclxuICAgICAgICA/IG1vbWVudChmbGlnaHRRdW90ZS5pbmJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZylcclxuICAgICAgICA6IG51bGw7XHJcblxyXG4gICAgICBjb25zdCB0ZXJtc0FuZENvbmRpdGlvbnMgPSB0aGlzLmdldFRlcm1zQW5kQ29uZChmbGlnaHRRdW90ZSk7XHJcbiAgICAgIGNvbnN0IHNjaGVtYURldGFpbHMgPSB7XHJcbiAgICAgICAgb3V0Ym91bmRGbGlnaHRzOiBbXHJcbiAgICAgICAgICAuLi5mbGlnaHRRdW90ZS5vdXRib3VuZEZsaWdodHMubWFwKFxyXG4gICAgICAgICAgICAoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCBfc2VnbWVudEluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4geyAuLi5mbGlnaHQgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgaW5ib3VuZEZsaWdodHM6IFtcclxuICAgICAgICAgIC4uLmZsaWdodFF1b3RlLmluYm91bmRGbGlnaHRzLm1hcChcclxuICAgICAgICAgICAgKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgX3NlZ21lbnRJbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uZmxpZ2h0IH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIClcclxuICAgICAgICBdLFxyXG4gICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zLFxyXG4gICAgICAgIGpvdXJuZXlUeXBlOiAnc2luZ2xlJ1xyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBib29raW5nOiBBZGRJdGVtVG9CYXNrZXRNdXRhdGlvblZhcmlhYmxlcyA9IHtcclxuICAgICAgICBhZHVsdHM6IHRoaXMuYWR1bHRzLFxyXG4gICAgICAgIGJhc2tldDogaW50QmFza2V0LmlkLFxyXG4gICAgICAgIGNoaWxkcmVuOiB0aGlzLmNoaWxkcmVuLFxyXG4gICAgICAgIGNvMlBlckl0ZW0sXHJcbiAgICAgICAgY28yUGVyUGFzc2VuZ2VyLFxyXG4gICAgICAgIGN1cnJlbmN5OiB0b3RhbC5jdXJyZW5jeSBhcyBDdXJyZW5jeUNvZGUsXHJcbiAgICAgICAgZGV0YWlsOiBzY2hlbWFEZXRhaWxzLFxyXG4gICAgICAgIHByaWNlOiB0b3RhbC5wcmljZSxcclxuICAgICAgICBzZWFyY2hRdWVyeTogdGhpcy5yZXN1bHRRdWVyeSxcclxuICAgICAgICBzZXJ2aWNlOiBzb3VyY2VJZC50b1N0cmluZygpLFxyXG4gICAgICAgIG91dGJvdW5kRGF0ZTogb3V0Ym91bmREYXRlLmZvcm1hdCgpXHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChpbmJvdW5kRGF0ZSkge1xyXG4gICAgICAgIGJvb2tpbmcuaW5ib3VuZERhdGUgPSBpbmJvdW5kRGF0ZS5mb3JtYXQoKTtcclxuICAgICAgICBzY2hlbWFEZXRhaWxzLmpvdXJuZXlUeXBlID0gJ3JvdW5kdHJpcCc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgICAgYm9va2luZyxcclxuICAgICAgICBpbnRCYXNrZXQsXHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMudHJhdmVsbGVycyxcclxuICAgICAgICBmbGlnaHRRdW90ZS5yZXF1aXJlc1JlYXNvblxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNhbmNlbCk7IC8vIFRPRE8gc2hvdWxkIHRoaXMgdGhyb3cgYW4gZXJyb3I/XHJcbiAgfVxyXG5cclxuICBzZXRGbGlnaHREaXNwbGF5VHlwZShkaXNwbGF5VHlwZTogRmxpZ2h0RGlzcGxheVR5cGVzKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQgPSBudWxsO1xyXG4gICAgdGhpcy5jaG9vc2VuRGlzcGxheVR5cGUubmV4dChkaXNwbGF5VHlwZSk7XHJcbiAgfVxyXG5cclxuICBfYXBwbHlGaWx0ZXIoKSB7XHJcbiAgICB0aGlzLmFwcGx5RmlsdGVycyh0aGlzLmN1cnJlbnRGaWx0ZXJzLCB0aGlzLmN1cnJlbnRTb3J0KTtcclxuICB9XHJcblxyXG4gIG9wZW5GbGlnaHRGYXJlUnVsZXMoXHJcbiAgICBydWxlczogRmFyZUNvbmRpdGlvbnMsXHJcbiAgICBmbGlnaHRzOiBGbGlnaHRKb3VybmV5W10sXHJcbiAgICBvcHRpb25zOiBhbnkgPSBudWxsLFxyXG4gICAgZmxpZ2h0RGV0YWlsOiBGbGlnaHRJdGluZXJhcnkgPSBudWxsXHJcbiAgKTogdm9pZCB7XHJcbiAgICAvLyBmaXJzdCBjaGVjayBpZiB0aGVyZSBhcmUgcnVsZXNcclxuICAgIGNvbnN0IGRvQ2FsbCA9ICFPYmplY3QudmFsdWVzKHJ1bGVzKS5maW5kKFxyXG4gICAgICAocnVsZTogRmFyZUNvbmRpdGlvbkVudHJ5W10pOiBudW1iZXIgPT4gcnVsZS5sZW5ndGhcclxuICAgICk7XHJcbiAgICBpZiAoZG9DYWxsKSB7XHJcbiAgICAgIGNvbnN0IHJ1bGVzRnJvbUNhbGwgPSB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0RmxpZ2h0RmFyZVJ1bGVzKFxyXG4gICAgICAgIGZsaWdodHNbMF0gYXMgSW5wdXRGbGlnaHRKb3VybmV5XHJcbiAgICAgICk7XHJcbiAgICAgIHJ1bGVzRnJvbUNhbGwuc3Vic2NyaWJlKFxyXG4gICAgICAgIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKE1vZGFsVHlwZXMuTW9kYWxGbGlnaHRGYXJlQ29tcG9uZW50LCBvcHRpb25zLCB7XHJcbiAgICAgICAgICAgIHJ1bGVzOiBkYXRhLnJlc3VsdHNbMF0sXHJcbiAgICAgICAgICAgIGZyb206IGZsaWdodHNbMF0ub3JpZ2luQWlycG9ydCxcclxuICAgICAgICAgICAgdG86IGZsaWdodHNbZmxpZ2h0cy5sZW5ndGggLSAxXS5kZXN0aW5hdGlvbkFpcnBvcnQsXHJcbiAgICAgICAgICAgIGZsaWdodDogZmxpZ2h0RGV0YWlsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihNb2RhbFR5cGVzLk1vZGFsRmxpZ2h0RmFyZUNvbXBvbmVudCwgb3B0aW9ucywge1xyXG4gICAgICAgIHJ1bGVzLFxyXG4gICAgICAgIGZyb206IGZsaWdodHNbMF0ub3JpZ2luQWlycG9ydCxcclxuICAgICAgICB0bzogZmxpZ2h0c1tmbGlnaHRzLmxlbmd0aCAtIDFdLmRlc3RpbmF0aW9uQWlycG9ydCxcclxuICAgICAgICBmbGlnaHQ6IGZsaWdodERldGFpbFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFRPRE8gd2FpdGluZyBmb3IgZGF0YVxyXG4gIGdldFRlcm1zQW5kQ29uZChmbGlnaHRRdW90ZTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMpIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnUGVuYWx0aWVzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdFbGlnaWJpbGl0eScsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgICxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdEYXkvdGltZScsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnU2Vhc29uYWxpdHknLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0ZsaWdodMKgQXBwbGljYXRpb24nLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0FkdmFuY2XCoFJlc2VydmF0aW9ucy90aWNrZXRpbmcnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ01heGltdW3CoFN0YXknLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ01pbmltdW3CoFN0YXknLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1N0b3BvdmVycycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVHJhbnNmZXJzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdDb21iaW5hdGlvbnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0JsYWNrb3V0wqBEYXRlcycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnU3VyY2hhcmdlcycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQWNjb21wYW5pZWTCoFRyYXZlbCcsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVHJhdmVswqBSZXN0cmljdGlvbnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1NhbGVzwqBSZXN0cmljdGlvbnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0hpcC9taWxlYWdlwqBFeGNlcHRpb25zJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUaWNrZXTCoEVuZG9yc2VtZW50cycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQ2hpbGRyZW7CoERpc2NvdW50cycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVG91csKgQ29uZHVjdG9ywqBEaXNjb3VudHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0FnZW50wqBEaXNjb3VudHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0FsbMKgT3RoZXLCoERpc2NvdW50cycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnTWlzY2VsbGFuZW91c8KgUHJvdmlzaW9ucycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRmFyZcKgQnnCoFJ1bGUnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0dyb3VwcycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVG91cnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1Zpc2l0wqBBbm90aGVywqBDb3VudHJ5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdEZXBvc2l0cycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVm9sdW50YXJ5wqBDaGFuZ2VzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdWb2x1bnRhcnnCoFJlZnVuZHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ05lZ290aWF0ZWTCoEZhcmVzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdSdWxlwqBBcHBsaWNhdGlvbsKgQW5kwqBPdGhlcsKgQ29uZGl0aW9ucycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH1cclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBzYXZlU2VhcmNoKCk6IE9ic2VydmFibGU8U2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdD4ge1xyXG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xyXG4gICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcclxuICAgICAgY29uc3QgZmF2b3VyaXRlU2VhcmNoUXVlcnk6IElGbGlnaHRTZWFyY2hBcmdzID1cclxuICAgICAgICB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpO1xyXG5cclxuICAgICAgY29uc3Qgc2VhcmNoSW5mbyA9IHtcclxuICAgICAgICBuYW1lOiBgJHttb21lbnQoKX1gLFxyXG4gICAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5GbGlnaHQsXHJcbiAgICAgICAgc2VhcmNoQXJnczogZmF2b3VyaXRlU2VhcmNoUXVlcnlcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlRmF2b3VyaXRlU2VhcmNoKHNlYXJjaEluZm8pO1xyXG4gICAgfVxyXG4gIH1cclxuICBhc3luYyBhcHBseUZhdm91cml0ZShmYXY6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gZmF2Lm11bHRpRGVzdGluYXRpb25cclxuICAgICAgPyBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eVxyXG4gICAgICA6IGZhdi5yZXR1cm5UcmlwXHJcbiAgICAgID8gRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm5cclxuICAgICAgOiBGbGlnaHRTZWFyY2hUeXBlLm9uZVdheTtcclxuICAgIGlmICh0aGlzLmNob3NlblNlYXJjaFR5cGUgPT0gRmxpZ2h0U2VhcmNoVHlwZS5tdWx0aUNpdHkpIHtcclxuICAgICAgY29uc3QgbXVsdGkgPSBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICBmYXYubXVsdGlEZXN0aW5hdGlvbi5tYXAoXHJcbiAgICAgICAgICBhc3luYyAoYTogeyBkYXRlOiBzdHJpbmc7IGRlc3Q6IHN0cmluZzsgb3JpZzogc3RyaW5nIH0pID0+IHtcclxuICAgICAgICAgICAgbGV0IGRlc3RpbmF0aW9uOiB7IGRhdGU6IG1vbWVudC5Nb21lbnQ7IGRlc3Q6IGFueTsgb3JpZzogYW55IH0gPSB7XHJcbiAgICAgICAgICAgICAgZGF0ZTogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgIGRlc3Q6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICBvcmlnOiB1bmRlZmluZWRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgZGVzdGluYXRpb24ub3JpZyA9IGF3YWl0IHRoaXMuc2VhcmNoU2VydmljZVxyXG4gICAgICAgICAgICAgIC5nZXRBaXJwb3J0c0xpc3QoYS5vcmlnKVxyXG4gICAgICAgICAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgICAgICAgICAgIC50aGVuKChvcmlnUmVzdWx0cykgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChvcmlnUmVzdWx0cyBhcyBhbnlbXSkuZmluZCgoYikgPT4gYi5nYXRld2F5ID09IGEub3JpZyk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLmRlc3QgPSBhd2FpdCB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgICAgICAgICAuZ2V0QWlycG9ydHNMaXN0KGEuZGVzdClcclxuICAgICAgICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICAgICAgICAgICAudGhlbigoZGVzdFJlc3VsdHMpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAoZGVzdFJlc3VsdHMgYXMgYW55W10pLmZpbmQoKGIpID0+IGIuZ2F0ZXdheSA9PSBhLmRlc3QpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gZGVzdGluYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLm11bHRpRGVzdGluYXRpb24gPSBtdWx0aSBhcyBhbnk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgICAuZ2V0QWlycG9ydHNMaXN0KGZhdi5vcmlnaW5BaXJwb3J0KVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdHMpID0+IHtcclxuICAgICAgICAgIHRoaXMuZGVwYXJ0TG9jYXRpb24gPSAocmVzdWx0cyBhcyBhbnlbXSkuZmluZChcclxuICAgICAgICAgICAgKGEpID0+IGEuZ2F0ZXdheSA9PSBmYXYub3JpZ2luQWlycG9ydFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlXHJcbiAgICAgICAgLmdldEFpcnBvcnRzTGlzdChmYXYuZGVzdGluYXRpb25BaXJwb3J0KVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdHMpID0+IHtcclxuICAgICAgICAgIHRoaXMuYXJyaXZlTG9jYXRpb24gPSAocmVzdWx0cyBhcyBhbnlbXSkuZmluZChcclxuICAgICAgICAgICAgKGEpID0+IGEuZ2F0ZXdheSA9PSBmYXYuZGVzdGluYXRpb25BaXJwb3J0XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jYWJpbkNsYXNzID0gZmF2Lm91dGJvdW5kQ2FiaW5DbGFzc1swXTtcclxuICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9XHJcbiAgICAgIHRoaXMuY2hvc2VuU2VhcmNoVHlwZSAhPSBGbGlnaHRTZWFyY2hUeXBlLnJldHVyblxyXG4gICAgICAgID8gbnVsbFxyXG4gICAgICAgIDogZmF2LnJldHVybkNhYmluQ2xhc3NbMF07XHJcbiAgICB0aGlzLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA9IGZhdi5pbmNsdWRlTmVhcmJ5QWlycG9ydHM7XHJcbiAgICB0aGlzLmFkdWx0cyA9IGZhdi5wYXNzZW5nZXJzLmZpbHRlcigoYTogYW55KSA9PiBhLnR5cGUgPT0gJ0FEVUxUJykubGVuZ3RoO1xyXG4gICAgdGhpcy5jaGlsZHJlbiA9IGZhdi5wYXNzZW5nZXJzLmZpbHRlcigoYTogYW55KSA9PiBhLnR5cGUgPT0gJ0NISUxEJykubGVuZ3RoO1xyXG4gICAgLy8gdGhpcy5wcmVmZXJyZWRDYXJyaWVycyA9IGZhdi5wcmVmZXJyZWRDYXJyaWVycy5tYXAoKGE6IGFueSkgPT4ge1xyXG5cclxuICAgIC8vIH0pXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVNlcmNoUXVlcnkoXHJcbiAgICBxdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXNcclxuICApOiBJRmxpZ2h0U2VhcmNoQXJncyB7XHJcbiAgICBjb25zdCBzZWFyY2hRdWVyeTogSUZsaWdodFNlYXJjaEFyZ3MgPSBxdWVyeTtcclxuICAgIHN3aXRjaCAodGhpcy5jaG9zZW5TZWFyY2hUeXBlKSB7XHJcbiAgICAgIGNhc2UgRmxpZ2h0U2VhcmNoVHlwZS5tdWx0aUNpdHk6XHJcbiAgICAgICAgc2VhcmNoUXVlcnkubXVsdGlEZXN0aW5hdGlvbkRldGFpbCA9IHRoaXMubXVsdGlEZXN0aW5hdGlvbjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGbGlnaHRTZWFyY2hUeXBlLnJldHVybjpcclxuICAgICAgY2FzZSBGbGlnaHRTZWFyY2hUeXBlLm9uZVdheTpcclxuICAgICAgICBzZWFyY2hRdWVyeS5kZXBhcnRMb2NhdGlvbkRldGFpbCA9IHRoaXMuZGVwYXJ0TG9jYXRpb247XHJcbiAgICAgICAgc2VhcmNoUXVlcnkuYXJyaXZlTG9jYXRpb25EZXRhaWwgPSB0aGlzLmFycml2ZUxvY2F0aW9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzZWFyY2hRdWVyeTtcclxuICB9XHJcbn1cclxuIl19