@sabstravtech/obtservices 0.0.22050309 → 0.0.22051001

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/angular/fetchers.d.ts +4 -0
  2. package/angular/lib/vendor/fetchers/get-cancellation-info.fetcher.d.ts +7 -0
  3. package/angular/lib/vendor/fetchers/get-irl-supplier-station.fetcher.d.ts +7 -0
  4. package/angular/lib/vendor/services/enterprise-basket.service.d.ts +4 -3
  5. package/angular/lib/vendor/services/search.service.d.ts +4 -3
  6. package/angular/lib/vendor/services/ticket-queue.service.d.ts +6 -0
  7. package/angular/lib/vendor/types/graphql.angular.types.d.ts +96 -15
  8. package/angular/sabstravtech-obtservices-angular.d.ts +0 -1
  9. package/angular/sabstravtech-obtservices-angular.metadata.json +1 -1
  10. package/angular/services.d.ts +1 -0
  11. package/base/fetchers.d.ts +4 -0
  12. package/base/interfaces.d.ts +2 -0
  13. package/base/lib/vendor/classes/cabhire-enterprise-search.d.ts +2 -1
  14. package/base/lib/vendor/classes/carhire-enterprise-search.d.ts +1 -0
  15. package/base/lib/vendor/classes/eurostar-enterprise-search.d.ts +2 -1
  16. package/base/lib/vendor/classes/fast-track-enterprise-search.d.ts +16 -11
  17. package/base/lib/vendor/classes/flight-enterprise-search.d.ts +2 -1
  18. package/base/lib/vendor/classes/hotel-enterprise-search.d.ts +2 -1
  19. package/base/lib/vendor/classes/irl-enterprise-search.d.ts +20 -6
  20. package/base/lib/vendor/classes/lounges-enterprise-search.d.ts +1 -0
  21. package/base/lib/vendor/classes/management-info-and-valid.d.ts +6 -1
  22. package/base/lib/vendor/classes/modal-types.enum.d.ts +1 -0
  23. package/base/lib/vendor/classes/parking-enterprise-search.d.ts +1 -0
  24. package/base/lib/vendor/classes/rail-enterprise-search.d.ts +3 -2
  25. package/base/lib/vendor/fetchers/fast-track-quote.fetcher.d.ts +1 -1
  26. package/base/lib/vendor/fetchers/get-cancellation-info.fetcher.d.ts +20 -0
  27. package/base/lib/vendor/fetchers/get-irl-supplier-station.fetcher.d.ts +21 -0
  28. package/base/lib/vendor/interfaces/Icabhire-enterprise-search.d.ts +1 -0
  29. package/base/lib/vendor/interfaces/Icarhire-enterprise-search.d.ts +1 -0
  30. package/base/lib/vendor/interfaces/Ienterprise-basket.service.d.ts +6 -3
  31. package/base/lib/vendor/interfaces/Ieurostar-enterprise-search.d.ts +1 -0
  32. package/base/lib/vendor/interfaces/Ifast-track-enterprise-search.d.ts +5 -1
  33. package/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +1 -0
  34. package/base/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +2 -0
  35. package/base/lib/vendor/interfaces/Iirl-enterprise-search.d.ts +8 -3
  36. package/base/lib/vendor/interfaces/Ilounges-enterprise-search.d.ts +1 -0
  37. package/base/lib/vendor/interfaces/Iparking-enterprise-search.d.ts +1 -0
  38. package/base/lib/vendor/interfaces/Irail-enterprise-search.d.ts +1 -0
  39. package/base/lib/vendor/interfaces/Iuser.service.d.ts +2 -1
  40. package/base/lib/vendor/interfaces/fast-track-filters.interface.d.ts +4 -0
  41. package/base/lib/vendor/interfaces/rail-basket-item.interface.d.ts +2 -0
  42. package/base/lib/vendor/interfaces/summary-interface.d.ts +2 -0
  43. package/base/lib/vendor/services/enterprise-basket.service.d.ts +13 -6
  44. package/base/lib/vendor/services/requires-reason.service.d.ts +20 -0
  45. package/base/lib/vendor/services/search.service.d.ts +5 -3
  46. package/base/lib/vendor/services/webtoken.service.d.ts +1 -0
  47. package/base/lib/vendor/types/graphql.types.d.ts +91 -15
  48. package/base/lib/vendor/types/types.d.ts +28 -15
  49. package/base/sabstravtech-obtservices-base.metadata.json +1 -1
  50. package/base/services.d.ts +1 -0
  51. package/bundles/sabstravtech-obtservices-angular.umd.js +175 -79
  52. package/bundles/sabstravtech-obtservices-angular.umd.js.map +1 -1
  53. package/bundles/sabstravtech-obtservices-angular.umd.min.js +1 -1
  54. package/bundles/sabstravtech-obtservices-angular.umd.min.js.map +1 -1
  55. package/bundles/sabstravtech-obtservices-base.umd.js +2511 -143
  56. package/bundles/sabstravtech-obtservices-base.umd.js.map +1 -1
  57. package/bundles/sabstravtech-obtservices-base.umd.min.js +2 -2
  58. package/bundles/sabstravtech-obtservices-base.umd.min.js.map +1 -1
  59. package/esm2015/angular/fetchers.js +5 -1
  60. package/esm2015/angular/lib/vendor/fetchers/get-cancellation-info.fetcher.js +25 -0
  61. package/esm2015/angular/lib/vendor/fetchers/get-irl-supplier-station.fetcher.js +25 -0
  62. package/esm2015/angular/lib/vendor/services/enterprise-basket.service.js +8 -5
  63. package/esm2015/angular/lib/vendor/services/http-call.service.js +6 -2
  64. package/esm2015/angular/lib/vendor/services/search.service.js +28 -25
  65. package/esm2015/angular/lib/vendor/services/ticket-queue.service.js +23 -0
  66. package/esm2015/angular/lib/vendor/types/graphql.angular.types.js +62 -7
  67. package/esm2015/angular/obtservices.module.js +3 -1
  68. package/esm2015/angular/sabstravtech-obtservices-angular.js +1 -2
  69. package/esm2015/angular/services.js +2 -1
  70. package/esm2015/base/fetchers.js +5 -1
  71. package/esm2015/base/interfaces.js +3 -1
  72. package/esm2015/base/lib/vendor/classes/basket-info-mi-details.impl.js +4 -1
  73. package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +37 -5
  74. package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +43 -12
  75. package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +35 -14
  76. package/esm2015/base/lib/vendor/classes/fast-track-enterprise-search.js +81 -14
  77. package/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +44 -5
  78. package/esm2015/base/lib/vendor/classes/helpers.js +6 -2
  79. package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +48 -14
  80. package/esm2015/base/lib/vendor/classes/irl-enterprise-search.js +197 -23
  81. package/esm2015/base/lib/vendor/classes/lounges-enterprise-search.js +22 -6
  82. package/esm2015/base/lib/vendor/classes/management-info-and-valid.js +1 -1
  83. package/esm2015/base/lib/vendor/classes/modal-types.enum.js +2 -1
  84. package/esm2015/base/lib/vendor/classes/parking-enterprise-search.js +27 -7
  85. package/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +62 -13
  86. package/esm2015/base/lib/vendor/classes/supplementary-booking-info-impl.js +2 -2
  87. package/esm2015/base/lib/vendor/fetchers/fast-track-quote.fetcher.js +2 -2
  88. package/esm2015/base/lib/vendor/fetchers/get-cancellation-info.fetcher.js +10 -0
  89. package/esm2015/base/lib/vendor/fetchers/get-irl-supplier-station.fetcher.js +11 -0
  90. package/esm2015/base/lib/vendor/interfaces/Icabhire-enterprise-search.js +1 -1
  91. package/esm2015/base/lib/vendor/interfaces/Icarhire-enterprise-search.js +1 -1
  92. package/esm2015/base/lib/vendor/interfaces/Ienterprise-basket.service.js +1 -1
  93. package/esm2015/base/lib/vendor/interfaces/Ieurostar-enterprise-search.js +1 -1
  94. package/esm2015/base/lib/vendor/interfaces/Ifast-track-enterprise-search.js +1 -1
  95. package/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +1 -1
  96. package/esm2015/base/lib/vendor/interfaces/Ihotel-enterprise-search.js +1 -1
  97. package/esm2015/base/lib/vendor/interfaces/Iirl-enterprise-search.js +1 -1
  98. package/esm2015/base/lib/vendor/interfaces/Ilounges-enterprise-search.js +1 -1
  99. package/esm2015/base/lib/vendor/interfaces/Iparking-enterprise-search.js +1 -1
  100. package/esm2015/base/lib/vendor/interfaces/Irail-enterprise-search.js +1 -1
  101. package/esm2015/base/lib/vendor/interfaces/Iuser.service.js +1 -1
  102. package/esm2015/base/lib/vendor/interfaces/fast-track-filters.interface.js +2 -0
  103. package/esm2015/base/lib/vendor/interfaces/rail-basket-item.interface.js +1 -1
  104. package/esm2015/base/lib/vendor/interfaces/summary-interface.js +1 -1
  105. package/esm2015/base/lib/vendor/services/enterprise-basket.service.js +63 -17
  106. package/esm2015/base/lib/vendor/services/hotel-avallibility.service.js +16 -12
  107. package/esm2015/base/lib/vendor/services/requires-reason.service.js +49 -0
  108. package/esm2015/base/lib/vendor/services/search.service.js +11 -5
  109. package/esm2015/base/lib/vendor/services/user.service.js +25 -4
  110. package/esm2015/base/lib/vendor/services/webtoken.service.js +9 -5
  111. package/esm2015/base/lib/vendor/types/graphql.types.js +9 -1
  112. package/esm2015/base/lib/vendor/types/types.js +1649 -8
  113. package/esm2015/base/services.js +2 -1
  114. package/fesm2015/sabstravtech-obtservices-angular.js +131 -17
  115. package/fesm2015/sabstravtech-obtservices-angular.js.map +1 -1
  116. package/fesm2015/sabstravtech-obtservices-base.js +2435 -149
  117. package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
  118. package/package.json +1 -1
@@ -30,7 +30,7 @@ export var TravellerSearchTypes;
30
30
  TravellerSearchTypes["employeeNumber"] = "employeeNumber";
31
31
  })(TravellerSearchTypes || (TravellerSearchTypes = {}));
32
32
  export class BaseEnterpriseSearchService {
33
- constructor(searchAirportsFetcher, searchAirlinesFetcher, storageService, userService, modalService, router, helpers, hotelAvalibilityService, citiesFetcher, confermaCitiesFetcher, postcodeFetcher, railStationFetcher, saveUserAddressUpdater, userAddressesFetcher, basketService, getUserCompanyOfficesFetcher, searchHotelChainsFetcher, getConfermaRoomImagesFetcher, baseValidateIsPostcodeValidTester, depotFetcher, confermaOfficeNamesFetcher, confermaOfficeFetcher, baseDeleteUserAddressUpdater, baseDeleteRecentSearchUpdater, baseSaveRecentSearchUpdater, getUserCurrentCarbonAllowanceFetcher, baseSaveFavouriteSearchUpdater, environment, loungeFetcher, parkingFetcher, httpCallService, flightFetcher, hotelFetcher, carhireFetcher, carHireAvailabilityDetailFetcher, cabhireFetcher, railFetcher, irlFetcher, getRailStationFetcher, baseWebTokenService, riskAlertsFetcher, quicklistFetcher, getUserRecentSearchesFetcher, getRailCardsFetcher, getCovidMicrositeTokenFetcher, eurostarFetcher, searchUsersCanBookForFetcher, searchIrlStationsFetcher, irlDiscountCardsFetcher, getFlightFareRulesFetcher, getFlightSeatMapFetcher, getRailLiveDeparturesFetcher, applyHotelRulesFetcher, applyFlightRules, getUserFavouriteSearchesFetcher, deleteFavouriteSearchUpdater, emailBasketFetcher, fasttrackFetcher, sendOfflineNotificationFetcher, getHotelChainsFetcher, getRailProvidersFetcher, getAllAirlinesFetcher, getCarHireProvidersFetcher) {
33
+ constructor(searchAirportsFetcher, searchAirlinesFetcher, storageService, userService, modalService, router, helpers, hotelAvalibilityService, citiesFetcher, confermaCitiesFetcher, postcodeFetcher, railStationFetcher, saveUserAddressUpdater, userAddressesFetcher, basketService, getUserCompanyOfficesFetcher, searchHotelChainsFetcher, getConfermaRoomImagesFetcher, baseValidateIsPostcodeValidTester, depotFetcher, confermaOfficeNamesFetcher, confermaOfficeFetcher, baseDeleteUserAddressUpdater, baseDeleteRecentSearchUpdater, baseSaveRecentSearchUpdater, getUserCurrentCarbonAllowanceFetcher, baseSaveFavouriteSearchUpdater, environment, loungeFetcher, parkingFetcher, httpCallService, flightFetcher, hotelFetcher, carhireFetcher, carHireAvailabilityDetailFetcher, cabhireFetcher, railFetcher, irlFetcher, getRailStationFetcher, getIrlSupplierStationFetcher, baseWebTokenService, riskAlertsFetcher, quicklistFetcher, getUserRecentSearchesFetcher, getRailCardsFetcher, getCovidMicrositeTokenFetcher, eurostarFetcher, searchUsersCanBookForFetcher, searchIrlStationsFetcher, irlDiscountCardsFetcher, getFlightFareRulesFetcher, getFlightSeatMapFetcher, getRailLiveDeparturesFetcher, applyHotelRulesFetcher, applyFlightRules, getUserFavouriteSearchesFetcher, deleteFavouriteSearchUpdater, emailBasketFetcher, fasttrackFetcher, sendOfflineNotificationFetcher, getHotelChainsFetcher, getRailProvidersFetcher, getAllAirlinesFetcher, getCarHireProvidersFetcher) {
34
34
  this.searchAirportsFetcher = searchAirportsFetcher;
35
35
  this.searchAirlinesFetcher = searchAirlinesFetcher;
36
36
  this.storageService = storageService;
@@ -59,6 +59,7 @@ export class BaseEnterpriseSearchService {
59
59
  this.getUserCurrentCarbonAllowanceFetcher = getUserCurrentCarbonAllowanceFetcher;
60
60
  this.baseSaveFavouriteSearchUpdater = baseSaveFavouriteSearchUpdater;
61
61
  this.getRailStationFetcher = getRailStationFetcher;
62
+ this.getIrlSupplierStationFetcher = getIrlSupplierStationFetcher;
62
63
  this.riskAlertsFetcher = riskAlertsFetcher;
63
64
  this.getUserRecentSearchesFetcher = getUserRecentSearchesFetcher;
64
65
  this.getRailCardsFetcher = getRailCardsFetcher;
@@ -103,7 +104,7 @@ export class BaseEnterpriseSearchService {
103
104
  [ServiceType.Hotel]: new HotelEnterpriseSearch(hotelFetcher, helpers, userService, environment, hotelAvalibilityService, basketService, storageService, this, httpCallService, quicklistFetcher, getRailStationFetcher, applyHotelRulesFetcher),
104
105
  [ServiceType.Car]: new CarhireEnterpriseSearch(carhireFetcher, carHireAvailabilityDetailFetcher, helpers, basketService, storageService, this),
105
106
  [ServiceType.Cab]: new CabHireEnterpriseSearch(cabhireFetcher, helpers, storageService, this, basketService),
106
- [ServiceType.InternationalRail]: new IRLEnterpriseSearch(irlFetcher, irlDiscountCardsFetcher, helpers, basketService, storageService, this),
107
+ [ServiceType.InternationalRail]: new IRLEnterpriseSearch(irlFetcher, irlDiscountCardsFetcher, helpers, basketService, storageService, this, getIrlSupplierStationFetcher),
107
108
  [ServiceType.FastTrack]: new FastTrackEnterpriseSearch(fasttrackFetcher, helpers, basketService, storageService, this),
108
109
  [ServiceType.Coach]: null,
109
110
  [ServiceType.Rail]: new RailEnterpriseSearch(railFetcher, getRailStationFetcher, helpers, basketService, storageService, this, userService, modalService),
@@ -410,12 +411,13 @@ export class BaseEnterpriseSearchService {
410
411
  }
411
412
  return of([]);
412
413
  }
413
- getStationLocations(term, isLoading) {
414
+ getStationLocations(term, isLoading, hasTod = false) {
414
415
  if (term.length > 2) {
415
416
  isLoading === null || isLoading === void 0 ? void 0 : isLoading.next(true);
416
417
  return this.railStationFetcher
417
418
  .fetchList({
418
- query: term
419
+ query: term,
420
+ hasTod
419
421
  })
420
422
  .pipe(take(1), map((results) => {
421
423
  if (isLoading) {
@@ -700,6 +702,10 @@ export class BaseEnterpriseSearchService {
700
702
  this.canSearch(ServiceType.Hotel)) {
701
703
  concattedErrors.push(...this.searches[ServiceType.Hotel].validationMessages);
702
704
  }
705
+ if (this.search_objects[ServiceType.FastTrack].chosen &&
706
+ this.canSearch(ServiceType.FastTrack)) {
707
+ concattedErrors.push(...this.searches[ServiceType.FastTrack].validationMessages);
708
+ }
703
709
  /*
704
710
  if (this.search_objects.hotel.chosen && this.canSearch(TravelTypeEnum.HOTEL)) {
705
711
  concattedErrors = concattedErrors.concat(this.hotel.validationMessages);
@@ -1542,4 +1548,4 @@ export class BaseEnterpriseSearchService {
1542
1548
  }
1543
1549
  }
1544
1550
  BaseEnterpriseSearchService.SESSION_TRAVELLER = 'search_travellers';
1545
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vYnRzZXJ2aWNlcy9iYXNlL3NyYy9saWIvdmVuZG9yL3NlcnZpY2VzL3NlYXJjaC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxTQUFTLE1BQU0sd0JBQXdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUduRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUsvRSxPQUFPLEVBSUwsVUFBVSxFQUNWLFFBQVEsRUFDUixTQUFTLEVBQ1QscUJBQXFCLEVBRXJCLFdBQVcsRUFFWCxrQkFBa0IsRUFVbEIsZ0JBQWdCLEVBS2hCLGNBQWMsRUFVZixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQy9FLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsVUFBVSxFQUNYLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDL0UsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixrQkFBa0IsRUFDbkIsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzQyxPQUFPLEVBQWEsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFTeEUsT0FBTyxFQU1M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O2dCQUM3QixVQUFVLEVBQUUsVUFBVTtnQkFDdEIsVUFBVSxFQUFFLFVBQVU7YUFDdkIsQ0FBQztZQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFckIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FDN0MsQ0FBQyxNQUE4QixFQUFFLEVBQUU7Z0JBQ2pDLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRTtvQkFDbEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQ3BCLFVBQVUsQ0FBQyw2QkFBNkIsRUFDeEMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFDOUIsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUNwQyxDQUFDO2lCQUNIO3FCQUFNO29CQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUNwQixVQUFVLENBQUMsbUJBQW1CLEVBQzlCLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUNsQixFQUFFLEtBQUssRUFBRSxxQ0FBcUMsRUFBRSxDQUNqRCxDQUFDO2lCQUNIO1lBQ0gsQ0FBQyxDQUNGLENBQUM7U0FDSDtJQUNILENBQUM7SUFFRCx1QkFBdUIsQ0FDckIsWUFBaUI7UUFFakIsT0FBTyxJQUFJLENBQUMsOEJBQThCLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3BFLENBQUM7O0FBeGlFTSw2Q0FBaUIsR0FBVyxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCBDb3VudHJpZXMgZnJvbSAnLi4vZGF0YS9jb3VudHJpZXMuanNvbic7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZm9ya0pvaW4sIG9mLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQmFzZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2Jhc2UtZW50ZXJwcmlzZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUGFya2luZ0VudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL3BhcmtpbmctZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQge1xyXG4gIFNlYXJjaE9iamVjdCxcclxuICBTZWFyY2hPYmplY3RzXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zZWFyY2gtb2JqZWN0cy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1xyXG4gIEFkZHJlc3MsXHJcbiAgQWlycG9ydCxcclxuICBCYXNrZXRJdGVtLFxyXG4gIEJvb2tlclR5cGUsXHJcbiAgRmFyZVR5cGUsXHJcbiAgUmFpbENsYXNzLFxyXG4gIFJhaWxTZWFyY2hKb3VybmV5VHlwZSxcclxuICBTZWFyY2hBaXJwb3J0cyxcclxuICBTZXJ2aWNlVHlwZSxcclxuICBTYXZlVXNlckFkZHJlc3NNdXRhdGlvblZhcmlhYmxlcyxcclxuICBDYWJIaXJlVmVoaWNsZVR5cGUsXHJcbiAgQ29uZmVybWFPZmZpY2VOYW1lcyxcclxuICBDb25mZXJtYU9mZmljZUluZm8sXHJcbiAgQ29uZmVybWFPZmZpY2VSZXN1bHQsXHJcbiAgQ2FyYm9uQWxsb3dhbmNlLFxyXG4gIFJpc2tBbGVydCxcclxuICBSaXNrTGV2ZWwsXHJcbiAgR2V0Umlza0FsZXJ0c1F1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlYXJjaEFpcmxpbmVzLFxyXG4gIEFpcmxpbmVSZXN1bHQsXHJcbiAgRmxpZ2h0Q2FiaW5DbGFzcyxcclxuICBSZWZlcmVuY2VSYWlsQ2FyZFF1YWxpZmllcixcclxuICBTZWFyY2hVc2VyQ2FuQm9va0ZvclF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyxcclxuICBJcmxTdXBwbGllclN0YXRpb24sXHJcbiAgSXJsSm91cm5leVR5cGUsXHJcbiAgR2V0RmxpZ2h0RmFyZVJ1bGVzUXVlcnlWYXJpYWJsZXMsXHJcbiAgR2V0RmxpZ2h0U2VhdE1hcFF1ZXJ5VmFyaWFibGVzLFxyXG4gIElucHV0RmxpZ2h0Sm91cm5leSxcclxuICBGbGlnaHRTZWF0TWFwUmVzdWx0LFxyXG4gIEZsaWdodFNlYXRNYXBSZXNwb25zZSxcclxuICBTYXZlRmF2b3VyaXRlU2VhcmNoTXV0YXRpb25WYXJpYWJsZXMsXHJcbiAgQmFza2V0LFxyXG4gIElybEpvdXJuZXlPcHRpb25zLFxyXG4gIElybE9mZmxpbmVOb3RpZnlSZXN1bHRcclxufSBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcclxuaW1wb3J0IHsgTG91bmdlc0VudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2xvdW5nZXMtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBIb3RlbEVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2hvdGVsLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgQ2FyaGlyZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2NhcmhpcmUtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQge1xyXG4gIEZsaWdodEVudGVycHJpc2VTZWFyY2gsXHJcbiAgVGltZVdpbmRvd1xyXG59IGZyb20gJy4uL2NsYXNzZXMvZmxpZ2h0LWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgQ2FiSGlyZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2NhYmhpcmUtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQge1xyXG4gIFJhaWxFbnRlcnByaXNlU2VhcmNoLFxyXG4gIFJhaWxTZWFyY2hDcml0ZXJpYVxyXG59IGZyb20gJy4uL2NsYXNzZXMvcmFpbC1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IFRyYXZlbGxlciwgVHJhdmVsbGVyT2JqZWN0IH0gZnJvbSAnLi4vbW9kZWxzL3RyYXZlbGxlci5vYmplY3QnO1xyXG5pbXBvcnQgeyBCYXNlU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VIZWxwZXJSb3V0aW5lcyB9IGZyb20gJy4uL2NsYXNzZXMvaGVscGVycyc7XHJcbmltcG9ydCB7IEJhc2VIb3RlbEF2YWxpYmlsaXR5U2VydmljZSB9IGZyb20gJy4vaG90ZWwtYXZhbGxpYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlRW52aXJvbm1lbnQgfSBmcm9tICcuLi9jbGFzc2VzL2Vudmlyb21lbnQnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hQb3N0Y29kZUZldGNoZXIsXHJcbiAgU2VhcmNoUG9zdGNvZGVzUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL3NlYXJjaC1wb3N0Y29kZXMuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQWRkcmVzc0Zvcm0sXHJcbiAgQWlycG9ydFNlYXJjaFJlc3VsdHMsXHJcbiAgQ2FySGlyZURlcG90UmVzdWx0QXJyYXksXHJcbiAgQ291bnRyeUNvZGUsXHJcbiAgTG9jYXRpb25EZXRhaWxzLFxyXG4gIExvY2F0aW9uVHlwZXMsXHJcbiAgT0JUQWlycG9ydERldGFpbHMsXHJcbiAgUmFpbEFpcnBvcnQsXHJcbiAgUm91dGVyLFxyXG4gIFNlYXJjaENpdGllc1Jlc3VsdCxcclxuICBTZWFyY2hDaXRpZXNSZXN1bHRBcnJheSxcclxuICBTZWFyY2hQb3N0Y29kZXNSZXN1bHQsXHJcbiAgU2VhcmNoUG9zdGNvZGVzUmVzdWx0QXJyYXksXHJcbiAgU2VhcmNoUmFpbFN0YXRpb25zUmVzdWx0LFxyXG4gIFNlYXJjaFJhaWxTdGF0aW9uc1Jlc3VsdEFycmF5LFxyXG4gIFRlcm1pbmFsc1R5cGUsXHJcbiAgR2V0VXNlckNvbXBhbnlPZmZpY2VzUmVzdWx0QXJyYXksXHJcbiAgR2V0VXNlckNvbXBhbnlPZmZpY2VzUmVzdWx0LFxyXG4gIFNlYXJjaEhvdGVsQ2hhaW5zUmVzdWx0QXJyYXksXHJcbiAgU2VhcmNoSG90ZWxDaGFpbnNSZXN1bHQsXHJcbiAgQWlybGluZXNTZWFyY2hSZXN1bHQsXHJcbiAgT0JUQWlybGluZXNEZXRhaWxzLFxyXG4gIEdldFVzZXJSZWNlbnRTZWFyY2hlc1Jlc3VsdEFycmF5LFxyXG4gIEdldFVzZXJSZWNlbnRTZWFyY2hlc1Jlc3VsdCxcclxuICBSZWNlbnRTZWFyY2gsXHJcbiAgU2VhcmNoQ29uZmVybWFDaXRpZXNSZXN1bHQsXHJcbiAgQ29uZmVybWFPZmZpY2VOYW1lUmVzdWx0LFxyXG4gIEdldEZsaWdodEZhcmVSdWxlc1Jlc3VsdEFycmF5LFxyXG4gIFNlYXJjaFJhaWxMaXZlRGVwYXJ0dXJlc1Jlc3VsdCxcclxuICBTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0LFxyXG4gIEdldFVzZXJGYXZvdXJpdGVTZWFyY2hlc1Jlc3VsdEFycmF5LFxyXG4gIEdldEhvdGVsQ2hhaW5zUmVzdWx0QXJyYXksXHJcbiAgR2V0SG90ZWxDaGFpbnNSZXN1bHQsXHJcbiAgZ2V0UmFpbFByb3ZpZGVyc1Jlc3VsdCxcclxuICBnZXRSYWlsUHJvdmlkZXJzUmVzdWx0QXJyYXksXHJcbiAgR2V0QWxsQWlybGluZXNSZXN1bHQsXHJcbiAgR2V0QWxsQWlybGluZXNSZXN1bHRBcnJheSxcclxuICBHZXRDYXJIaXJlUHJvdmlkZXJzUmVzdWx0LFxyXG4gIEdldENhckhpcmVQcm92aWRlcnNSZXN1bHRBcnJheSxcclxuICBTZXJ2aWNlUHJvdmlkZXJcclxufSBmcm9tICcuLi90eXBlcy90eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaFJhaWxTdGF0aW9uc0ZldGNoZXIsXHJcbiAgU2VhcmNoUmFpbFN0YXRpb25zRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9zZWFyY2gtcmFpbC1zdGF0aW9ucy5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlTG91bmdlUXVvdGVGZXRjaGVyLFxyXG4gIExvdW5nZVF1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9sb3VuZ2UtcXVvdGUuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVBhcmtpbmdRdW90ZUZldGNoZXIsXHJcbiAgUGFya2luZ1F1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9wYXJraW5nLXF1b3RlLWZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VGbGlnaHRRdW90ZUZldGNoZXIsXHJcbiAgRmxpZ2h0UXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2ZsaWdodC1xdW90ZS5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlSG90ZWxRdW90ZUZldGNoZXIsXHJcbiAgSG90ZWxRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvaG90ZWwtcXVvdGUtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUNhcmhpcmVRdW90ZUZldGNoZXIsXHJcbiAgQ2FySGlyZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY2FyaGlyZS1xdW90ZS1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlQ2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXIsXHJcbiAgQ2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY2FyaGlyZS1hdmFpbGFiaWxpdHktZGV0YWlsLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VDYWJoaXJlUXVvdGVGZXRjaGVyLFxyXG4gIENhYmhpcmVRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY2FiaGlyZS1xdW90ZS1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlUmFpbFF1b3RlRmV0Y2hlcixcclxuICBSYWlsUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL3JhaWwtcXVvdGUtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUlybFF1b3RlRmV0Y2hlcixcclxuICBJcmxRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvaXJsLXF1b3RlLWZldGNoZXInO1xyXG5pbXBvcnQgeyBSZWdFeHBzIH0gZnJvbSAnLi4vbW9kZWxzL3JlZ2V4cC5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgU2VhcmNoUGFyYW1zXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hBaXJwb3J0c0ZldGNoZXIsXHJcbiAgU2VhcmNoQWlycG9ydHNRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLWFpcnBvcnRzLWZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hBaXJsaW5lc0ZldGNoZXIsXHJcbiAgU2VhcmNoQWlybGluZXNRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLWFpcmxpbmVzLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIFVzZXJTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gIFVzZXJTZXJ2aWNlc1xyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSXVzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaENpdHlGZXRjaGVyLFxyXG4gIFNlYXJjaENpdGllc1F1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9zZWFyY2gtY2l0aWVzLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hDb25mZXJtYUNpdHlGZXRjaGVyLFxyXG4gIFNlYXJjaENvbmZlcm1hQ2l0aWVzUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL3NlYXJjaC1jb25mZXJtYS1jaXRpZXMuZmV0Y2hlcic7XHJcbmltcG9ydCB7IEFic3RyYWN0SHR0cENhbGxTZXJ2aWNlIH0gZnJvbSAnLi9odHRwLWNhbGwuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IEhvdGVsQXZhbGluaWxpdHlGZXRjaGVyVHlwZSB9IGZyb20gJy4uL2ZldGNoZXJzL2hvdGVsLWF2YWxpYWJpbGl0eS1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlU2F2ZVVzZXJBZGRyZXNzVXBkYXRlcixcclxuICBTYXZlVXNlckFkZHJlc3NVcGRhdGVyVHlwZVxyXG59IGZyb20gJy4uL3VwZGF0ZXJzL3NhdmUtdXNlci1hZGRyZXNzLnVwZGF0ZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VVc2VyQWRkcmVzc2VzRmV0Y2hlcixcclxuICBVc2VyQWRkcmVzc0ZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvdXNlci1hZGRyZXNzZXMuZmV0Y2hlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VDb25mZXJtYU9mZmljZU5hbWVzRmV0Y2hlcixcclxuICBDb25mZXJtYU9mZmljZU5hbWVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2NvbmZlcm1hLW9mZmljZS1uYW1lcy5mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZUNvbmZlcm1hT2ZmaWNlRmV0Y2hlcixcclxuICBDb25mZXJtYU9mZmljZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY29uZmVybWEtb2ZmaWNlLmZldGNoZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlR2V0VXNlckNvbXBhbnlPZmZpY2VzRmV0Y2hlcixcclxuICBHZXRVc2VyQ29tcGFueU9mZmljZXNRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXVzZXItY29tcGFueS1vZmZpY2VzLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hIb3RlbENoYWluc0ZldGNoZXIsXHJcbiAgU2VhcmNoSG90ZWxDaGFpbnNRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLWhvdGVsLWNoYWlucy5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlR2V0Q29uZmVybWFSb29tSW1hZ2VzRmV0Y2hlcixcclxuICBHZXRDb25mZXJtYVJvb21JbWFnZXNRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWNvbmZlcm1hLXJvb20taW1hZ2VzLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VWYWxpZGF0ZUlzUG9zdGNvZGVWYWxpZFRlc3RlcixcclxuICBWYWxpZGF0ZUlzUG9zdGNvZGVWYWxpZFR5cGVcclxufSBmcm9tICcuLi90ZXN0ZXJzL3Bvc3Rjb2RlLXZhbGlkYXRlLnRlc3Rlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hEZXBvdEZldGNoZXIsXHJcbiAgU2VhcmNoRGVwb3RRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLWRlcG90cy5mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldFJhaWxTdGF0aW9uRmV0Y2hlcixcclxuICBHZXRSYWlsU3RhdGlvbkZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXJhaWwtc3RhdGlvbi5mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaElybFN0YXRpb25zRmV0Y2hlcixcclxuICBTZWFyY2hJcmxTdGF0aW9uc0ZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLWlybC1zdGF0aW9ucy5mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaENvbmZlcm1hUXVpY2tsaXN0RmV0Y2hlcixcclxuICBDb25mZXJtYVF1aWNrbGlzdEZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY29uZmVybWEtcXVpY2tsaXN0LmZldGNoZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlRGVsZXRlVXNlckFkZHJlc3NVcGRhdGVyLFxyXG4gIERlbGV0ZVVzZXJBZGRyZXNzRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi91cGRhdGVycy9yZW1vdmUtdXNlci1hZGRyZXNzLXVwZGF0ZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlRGVsZXRlUmVjZW50U2VhcmNoVXBkYXRlcixcclxuICBEZWxldGVSZWNlbnRTZWFyY2hGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL3VwZGF0ZXJzL3JlbW92ZS1yZWNlbnQtc2VhcmNoLXVwZGF0ZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlU2F2ZVJlY2VudFNlYXJjaFVwZGF0ZXIsXHJcbiAgU2F2ZVJlY2VudFNlYXJjaEZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vdXBkYXRlcnMvc2F2ZS1yZWNlbnQtc2VhcmNoLXVwZGF0ZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlU2F2ZUZhdm91cml0ZVNlYXJjaFVwZGF0ZXIsXHJcbiAgU2F2ZUZhdm91cml0ZVNlYXJjaEZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vdXBkYXRlcnMvc2F2ZS1mYXZvdXJpdGUtc2VhcmNoLXVwZGF0ZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlR2V0UmFpbExpdmVEZXBhcnR1cmVzRmV0Y2hlcixcclxuICBHZXRSYWlsTGl2ZURlcGFydHVyZXNGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1yYWlsLWxpdmUtZGVwYXJ0dXJlcy5mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7IEhvdGVsVGVtcFBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSWhvdGVsLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgUmFpbFRlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lyYWlsLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgRmxpZ2h0VGVtcFBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSWZsaWdodC1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IExvdW5nZXNUZW1wUGFyYW1zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JbG91bmdlcy1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IFBhcmtpbmdUZW1wUGFyYW1zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JcGFya2luZy1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7XHJcbiAgQ2FiSGlyZVRlbXBQYXJhbXMsXHJcbiAgVGF4aUZvcm1Nb2RlXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JY2FiaGlyZS1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IENhckhpcmVUZW1wUGFyYW1zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JY2FyaGlyZS1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldFVzZXJDdXJyZW50Q2FyYm9uQWxsb3dhbmNlRmV0Y2hlcixcclxuICBHZXRVc2VyQ3VycmVudENhcmJvbkFsbG93YW5jZVR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtdXNlci1jdXJyZW50LWNhcmJvbi1hbGxvd2FuY2UuZmV0Y2hlcic7XHJcbmltcG9ydCB7IEJhc2VXZWJUb2tlblNlcnZpY2UgfSBmcm9tICcuL3dlYnRva2VuLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VHZXRSaXNrQWxlcnRzRmV0Y2hlcixcclxuICBHZXRSaXNrQWxlcnRzRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtcmlzay1hbGVydHMuZmV0Y2hlcic7XHJcbmltcG9ydCB7IElybFRlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lpcmwtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBJUkxFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi4vY2xhc3Nlcy9pcmwtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlR2V0VXNlclJlY2VudFNlYXJjaGVzRmV0Y2hlcixcclxuICBHZXRVc2VyUmVjZW50U2VhcmNoZXNGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC11c2VyLXJlY2VudC1zZWFyY2hlcy5mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldFJhaWxjYXJkc0ZldGNoZXIsXHJcbiAgR2V0UmFpbENhcmRzRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtcmFpbC1jYXJkcy5mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldENvdmlkTWljcm9zaXRlVG9rZW5GZXRjaGVyLFxyXG4gIEdldENvdmlkTWljcm9zaXRlVG9rZW5GZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1jb3ZpZC1taWNyb3NpdGUtdG9rZW4uZmV0Y2hlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VFdXJvc3RhclF1b3RlRmV0Y2hlcixcclxuICBFdXJvc3RhclF1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9ldXJvc3Rhci1xdW90ZS5mZXRjaGVyJztcclxuaW1wb3J0IHsgRXVyb3N0YXJFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi4vY2xhc3Nlcy9ldXJvc3Rhci1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IEV1cm9zdGFyVGVtcFBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSWV1cm9zdGFyLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IEV1cm9TdGF0aW9ucyBmcm9tICcuLi9kYXRhL2V1cm8tc3RhdGlvbnMuanNvbic7XHJcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaFVzZXJzQ2FuQm9va0ZvckZldGNoZXIsXHJcbiAgU2VhcmNoVXNlckNhbkJvb2tGb3JGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL3NlYXJjaC11c2Vycy1jYW4tYm9vay1mb3ItZmV0Y2hlcic7XHJcbmltcG9ydCB7IEV1cm9zdGFyU2VhcmNoVHlwZSB9IGZyb20gJy4uL2NsYXNzZXMvZXVyb3N0YXItc2VhcmNoLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUlybERpc2NvdW50Q2FyZEZldGNoZXIsXHJcbiAgSXJsRGlzY291bnRDYXJkRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9pcmwtZGlzY291bnQtY2FyZC1mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldEZsaWdodEZhcmVSdWxlc0ZldGNoZXIsXHJcbiAgR2V0RmxpZ2h0RmFyZVJ1bGVzVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2ZsaWdodC1mYXJlLXJ1bGVzLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VHZXRGbGlnaHRTZWF0TWFwRmV0Y2hlcixcclxuICBHZXRGbGlnaHRTZWF0TWFwVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1mbGlnaHQtc2VhdC1tYXAtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQXBwbHlIb3RlbFJ1bGVzRmV0Y2hlclR5cGUsXHJcbiAgQmFzZUhvdGVsUnVsZXNGZXRjaGVyXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvYXBwbHktSklULWhvdGVsLXJ1bGVzLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEFwcGx5Sml0RmxpZ2h0UnVsZXNUeXBlLFxyXG4gIEJhc2VBcHBseUppdEZsaWdodFJ1bGVzRmV0Y2hlclxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2FwcGx5LWppdC1mbGlnaHQtcnVsZXMnO1xyXG5pbXBvcnQgeyBCYXNlTW9kYWxPcGVuZXJTZXJ2aWNlIH0gZnJvbSAnLi9tb2RhbC1vcGVuZXIuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldFVzZXJGYXZvdXJpdGVTZWFyY2hlc0ZldGNoZXIsXHJcbiAgR2V0VXNlckZhdm91cml0ZVNlYXJjaGVzRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtdXNlci1mYXZvdXJpdGUtc2VhcmNoZXMuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZURlbGV0ZUZhdm91cml0ZVNlYXJjaFVwZGF0ZXIsXHJcbiAgRGVsZXRlRmF2b3VyaXRlU2VhcmNoRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi91cGRhdGVycy9yZW1vdmUtZmF2b3VyaXRlLXNlYXJjaC11cGRhdGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlRW1haWxCYXNrZXRGZXRjaGVyLFxyXG4gIEVtYWlsQmFza2V0RmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9lbWFpbC1iYXNrZXQuZmV0Y2hlcic7XHJcbmltcG9ydCB7IEZhc3RUcmFja1RlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lmYXN0LXRyYWNrLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgRmFzdFRyYWNrRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4uL2NsYXNzZXMvZmFzdC10cmFjay1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUZhc3RUcmFja1F1b3RlRmV0Y2hlcixcclxuICBGYXN0VHJhY2tRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZmFzdC10cmFjay1xdW90ZS5mZXRjaGVyJztcclxuaW1wb3J0IHsgTW9kYWxUeXBlcyB9IGZyb20gJy4uL2NsYXNzZXMvbW9kYWwtdHlwZXMuZW51bSc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlbmRPZmZsaW5lTm90aWZpY2F0aW9uRmV0Y2hlcixcclxuICBTZW5kT2ZmbGluZU5vdGlmaWNhdGlvbkZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VuZC1vZmZsaW5lLW5vdGlmaWNhdGlvbi5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlR2V0SG90ZWxDaGFpbnNGZXRjaGVyLFxyXG4gIEdldEhvdGVsQ2hhaW5zRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtaG90ZWwtY2hhaW5zLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VHZXRSYWlsUHJvdmlkZXJzRmV0Y2hlcixcclxuICBHZXRSYWlsUHJvdmlkZXJzRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtcmFpbC1wcm92aWRlcnMuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldEFsbEFpcmxpbmVzRmV0Y2hlcixcclxuICBHZXRBbGxBaXJsaW5lc0ZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWFsbC1haXJsaW5lcy5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlR2V0Q2FySGlyZVByb3ZpZGVyc0ZldGNoZXIsXHJcbiAgR2V0Q2FySGlyZVByb3ZpZGVyc0ZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWNhci1oaXJlLXByb3ZpZGVycy5mZXRjaGVyJztcclxuXHJcbmV4cG9ydCBjb25zdCBNQVhfVFJBVkVMTEVSUyA9IDg7XHJcblxyXG5leHBvcnQgZW51bSBUcmF2ZWxsZXJTZWFyY2hUeXBlcyB7XHJcbiAgZW1haWwgPSAnZW1haWwnLFxyXG4gIG5hbWUgPSAnbmFtZScsXHJcbiAgZW1wbG95ZWVOdW1iZXIgPSAnZW1wbG95ZWVOdW1iZXInXHJcbn1cclxuXHJcbmludGVyZmFjZSBIaWdoZXN0U2VhcmNoUHJpb3JpdHlPYmplY3RJbnRlcmZhY2Uge1xyXG4gIGhpZ2hlc3Q6IG51bWJlcjtcclxuICBjdXJyZW50SXRlbTogU2VhcmNoT2JqZWN0O1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQmFzZUVudGVycHJpc2VTZWFyY2hTZXJ2aWNlPFxyXG4gIFNQX1EgZXh0ZW5kcyBTZWFyY2hQb3N0Y29kZXNRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNSX1EgZXh0ZW5kcyBTZWFyY2hSYWlsU3RhdGlvbnNGZXRjaGVyVHlwZSxcclxuICBTTF9RIGV4dGVuZHMgTG91bmdlUXVvdGVGZXRjaGVyVHlwZSxcclxuICBTUEFfUSBleHRlbmRzIFBhcmtpbmdRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNGTF9RIGV4dGVuZHMgRmxpZ2h0UXVvdGVGZXRjaGVyVHlwZSxcclxuICBTSE9fUSBleHRlbmRzIEhvdGVsUXVvdGVGZXRjaGVyVHlwZSxcclxuICBTQ0hfUSBleHRlbmRzIENhckhpcmVGZXRjaGVyVHlwZSxcclxuICBDSEFEX1EgZXh0ZW5kcyBDYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlclR5cGUsXHJcbiAgU1RIX1EgZXh0ZW5kcyBDYWJoaXJlUXVvdGVGZXRjaGVyVHlwZSxcclxuICBTQV9RIGV4dGVuZHMgU2VhcmNoQWlycG9ydHNRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNBTF9RIGV4dGVuZHMgU2VhcmNoQWlybGluZXNRdW90ZUZldGNoZXJUeXBlLFxyXG4gIEhBX1EgZXh0ZW5kcyBIb3RlbEF2YWxpbmlsaXR5RmV0Y2hlclR5cGUsXHJcbiAgU0NfUSBleHRlbmRzIFNlYXJjaENpdGllc1F1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU0NDX1EgZXh0ZW5kcyBTZWFyY2hDb25mZXJtYUNpdGllc1F1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU1JBX1EgZXh0ZW5kcyBSYWlsUXVvdGVGZXRjaGVyVHlwZSxcclxuICBTSV9RIGV4dGVuZHMgSXJsUXVvdGVGZXRjaGVyVHlwZSxcclxuICBTVUFfUSBleHRlbmRzIFNhdmVVc2VyQWRkcmVzc1VwZGF0ZXJUeXBlLFxyXG4gIFNVX1EgZXh0ZW5kcyBVc2VyQWRkcmVzc0ZldGNoZXJUeXBlLFxyXG4gIEdVQ09fUSBleHRlbmRzIEdldFVzZXJDb21wYW55T2ZmaWNlc1F1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU0hDX1EgZXh0ZW5kcyBTZWFyY2hIb3RlbENoYWluc1F1b3RlRmV0Y2hlclR5cGUsXHJcbiAgR0NSSV9RIGV4dGVuZHMgR2V0Q29uZmVybWFSb29tSW1hZ2VzUXVvdGVGZXRjaGVyVHlwZSxcclxuICBJUFZfUSBleHRlbmRzIFZhbGlkYXRlSXNQb3N0Y29kZVZhbGlkVHlwZSxcclxuICBTRF9RIGV4dGVuZHMgU2VhcmNoRGVwb3RRdW90ZUZldGNoZXJUeXBlLFxyXG4gIEdSU19RIGV4dGVuZHMgR2V0UmFpbFN0YXRpb25GZXRjaGVyVHlwZSxcclxuICBHT05fUSBleHRlbmRzIENvbmZlcm1hT2ZmaWNlTmFtZUZldGNoZXJUeXBlLFxyXG4gIENPX1EgZXh0ZW5kcyBDb25mZXJtYU9mZmljZUZldGNoZXJUeXBlLFxyXG4gIERVQV9RIGV4dGVuZHMgRGVsZXRlVXNlckFkZHJlc3NGZXRjaGVyVHlwZSxcclxuICBEUlNfUSBleHRlbmRzIERlbGV0ZVJlY2VudFNlYXJjaEZldGNoZXJUeXBlLFxyXG4gIFNSU19RIGV4dGVuZHMgU2F2ZVJlY2VudFNlYXJjaEZldGNoZXJUeXBlLFxyXG4gIFVDQV9RIGV4dGVuZHMgR2V0VXNlckN1cnJlbnRDYXJib25BbGxvd2FuY2VUeXBlLFxyXG4gIFNGU19RIGV4dGVuZHMgU2F2ZUZhdm91cml0ZVNlYXJjaEZldGNoZXJUeXBlLFxyXG4gIEdSQV9RIGV4dGVuZHMgR2V0Umlza0FsZXJ0c0ZldGNoZXJUeXBlLFxyXG4gIFFMX1EgZXh0ZW5kcyBDb25mZXJtYVF1aWNrbGlzdEZldGNoZXJUeXBlLFxyXG4gIEdVUlNGX1EgZXh0ZW5kcyBHZXRVc2VyUmVjZW50U2VhcmNoZXNGZXRjaGVyVHlwZSxcclxuICBHUkNGX1EgZXh0ZW5kcyBHZXRSYWlsQ2FyZHNGZXRjaGVyVHlwZSxcclxuICBHQ01URl9RIGV4dGVuZHMgR2V0Q292aWRNaWNyb3NpdGVUb2tlbkZldGNoZXJUeXBlLFxyXG4gIFNFX1EgZXh0ZW5kcyBFdXJvc3RhclF1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU1VDQkYgZXh0ZW5kcyBTZWFyY2hVc2VyQ2FuQm9va0ZvckZldGNoZXJUeXBlLFxyXG4gIFNJU19RIGV4dGVuZHMgU2VhcmNoSXJsU3RhdGlvbnNGZXRjaGVyVHlwZSxcclxuICBHSURGX1EgZXh0ZW5kcyBJcmxEaXNjb3VudENhcmRGZXRjaGVyVHlwZSxcclxuICBHRkZSX1EgZXh0ZW5kcyBHZXRGbGlnaHRGYXJlUnVsZXNUeXBlLFxyXG4gIEdGU01fUSBleHRlbmRzIEdldEZsaWdodFNlYXRNYXBUeXBlLFxyXG4gIEdSTERfRiBleHRlbmRzIEdldFJhaWxMaXZlRGVwYXJ0dXJlc0ZldGNoZXJUeXBlLFxyXG4gIEFIUl9RIGV4dGVuZHMgQXBwbHlIb3RlbFJ1bGVzRmV0Y2hlclR5cGUsXHJcbiAgQUZSX1EgZXh0ZW5kcyBBcHBseUppdEZsaWdodFJ1bGVzVHlwZSxcclxuICBHVUZTRl9RIGV4dGVuZHMgR2V0VXNlckZhdm91cml0ZVNlYXJjaGVzRmV0Y2hlclR5cGUsXHJcbiAgREZTX1EgZXh0ZW5kcyBEZWxldGVGYXZvdXJpdGVTZWFyY2hGZXRjaGVyVHlwZSxcclxuICBFQl9GIGV4dGVuZHMgRW1haWxCYXNrZXRGZXRjaGVyVHlwZSxcclxuICBGVFFfUSBleHRlbmRzIEZhc3RUcmFja1F1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU09OX1EgZXh0ZW5kcyBTZW5kT2ZmbGluZU5vdGlmaWNhdGlvbkZldGNoZXJUeXBlLFxyXG4gIEdIVF9RIGV4dGVuZHMgR2V0SG90ZWxDaGFpbnNGZXRjaGVyVHlwZSxcclxuICBHUlBfUSBleHRlbmRzIEdldFJhaWxQcm92aWRlcnNGZXRjaGVyVHlwZSxcclxuICBHQUFfUSBleHRlbmRzIEdldEFsbEFpcmxpbmVzRmV0Y2hlclR5cGUsXHJcbiAgR0NIUF9RIGV4dGVuZHMgR2V0Q2FySGlyZVByb3ZpZGVyc0ZldGNoZXJUeXBlXHJcbj4gaW1wbGVtZW50cyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZVxyXG57XHJcbiAgc3RhdGljIFNFU1NJT05fVFJBVkVMTEVSOiBzdHJpbmcgPSAnc2VhcmNoX3RyYXZlbGxlcnMnO1xyXG5cclxuICBzZWFyY2hlczogU2VhcmNoUGFyYW1zO1xyXG4gIHRyYXZlbGxlcl9lcnJvciA9IGZhbHNlO1xyXG4gIHRyYXZlbGxlckluZm9ybWF0aW9uOiBCZWhhdmlvclN1YmplY3Q8VHJhdmVsbGVyW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcclxuICAgIFRyYXZlbGxlcltdXHJcbiAgPihbXSk7XHJcbiAgZXJyb3JzOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pO1xyXG4gIHNlYXJjaExvYWRpbmdEb25lOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KFxyXG4gICAgZmFsc2VcclxuICApO1xyXG4gIHNlYXJjaFRpbWVkT3V0OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KFxyXG4gICAgZmFsc2VcclxuICApO1xyXG4gIG5ld1NlYXJjaFN0YXJ0ZWQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oXHJcbiAgICBmYWxzZVxyXG4gICk7XHJcblxyXG4gIGZpcnN0TG9hZCA9IHRydWU7XHJcblxyXG4gIHNlYXJjaF9vYmplY3RzOiBTZWFyY2hPYmplY3RzO1xyXG4gIGhpZ2hlc3Rfc2VhcmNoX3ByaW9yaXR5ID0gODtcclxuICBzaG93X2Vycm9ycyA9IGZhbHNlO1xyXG4gIHRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlczogc3RyaW5nW10gPSBbXTtcclxuICBzZWFyY2hfbG9hZGluZyA9IGZhbHNlO1xyXG4gIHNlYXJjaF9haXJwb3J0X2xvYWRpbmcgPSBmYWxzZTtcclxuICBhbGxTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgc2VhcmNoZXNTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAganJmUmVmZXJlbmNlOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBzZWxlY3RlZFRyYXZlbGxlcnM6IFRyYXZlbGxlcltdID0gW107XHJcbiAgc2VsZWN0ZWRQbGFjZXM6IGFueSA9IFtdO1xyXG4gIGNvdW50cmllcyA9IENvdW50cmllcztcclxuICBldXJvc3RhdGlvbnM6IHsgZ2F0ZXdheTogc3RyaW5nOyBkZXN0aW5hdGlvbjogc3RyaW5nIH1bXSA9XHJcbiAgICBfLnRvQXJyYXkoRXVyb1N0YXRpb25zKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgc2VhcmNoQWlycG9ydHNGZXRjaGVyOiBCYXNlU2VhcmNoQWlycG9ydHNGZXRjaGVyPFNBX1E+LFxyXG4gICAgcHJvdGVjdGVkIHNlYXJjaEFpcmxpbmVzRmV0Y2hlcjogQmFzZVNlYXJjaEFpcmxpbmVzRmV0Y2hlcjxTQUxfUT4sXHJcbiAgICBwcm90ZWN0ZWQgc3RvcmFnZVNlcnZpY2U6IEJhc2VTdG9yYWdlU2VydmljZSxcclxuICAgIHByb3RlY3RlZCB1c2VyU2VydmljZTogVXNlclNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBwcm90ZWN0ZWQgbW9kYWxTZXJ2aWNlOiBCYXNlTW9kYWxPcGVuZXJTZXJ2aWNlLFxyXG4gICAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJvdGVjdGVkIGhlbHBlcnM6IEJhc2VIZWxwZXJSb3V0aW5lcyxcclxuICAgIHByb3RlY3RlZCBob3RlbEF2YWxpYmlsaXR5U2VydmljZTogQmFzZUhvdGVsQXZhbGliaWxpdHlTZXJ2aWNlPEhBX1E+LFxyXG4gICAgcHJpdmF0ZSBjaXRpZXNGZXRjaGVyOiBCYXNlU2VhcmNoQ2l0eUZldGNoZXI8U0NfUT4sXHJcbiAgICBwcml2YXRlIGNvbmZlcm1hQ2l0aWVzRmV0Y2hlcjogQmFzZVNlYXJjaENvbmZlcm1hQ2l0eUZldGNoZXI8U0NDX1E+LFxyXG4gICAgcHJpdmF0ZSBwb3N0Y29kZUZldGNoZXI6IEJhc2VTZWFyY2hQb3N0Y29kZUZldGNoZXI8U1BfUT4sXHJcbiAgICBwcml2YXRlIHJhaWxTdGF0aW9uRmV0Y2hlcjogQmFzZVNlYXJjaFJhaWxTdGF0aW9uc0ZldGNoZXI8U1JfUT4sXHJcbiAgICBwcml2YXRlIHNhdmVVc2VyQWRkcmVzc1VwZGF0ZXI6IEJhc2VTYXZlVXNlckFkZHJlc3NVcGRhdGVyPFNVQV9RPixcclxuICAgIHByaXZhdGUgdXNlckFkZHJlc3Nlc0ZldGNoZXI6IEJhc2VVc2VyQWRkcmVzc2VzRmV0Y2hlcjxTVV9RPixcclxuICAgIHByaXZhdGUgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBwcml2YXRlIGdldFVzZXJDb21wYW55T2ZmaWNlc0ZldGNoZXI6IEJhc2VHZXRVc2VyQ29tcGFueU9mZmljZXNGZXRjaGVyPEdVQ09fUT4sXHJcbiAgICBwcml2YXRlIHNlYXJjaEhvdGVsQ2hhaW5zRmV0Y2hlcjogQmFzZVNlYXJjaEhvdGVsQ2hhaW5zRmV0Y2hlcjxTSENfUT4sXHJcbiAgICBwcml2YXRlIGdldENvbmZlcm1hUm9vbUltYWdlc0ZldGNoZXI6IEJhc2VHZXRDb25mZXJtYVJvb21JbWFnZXNGZXRjaGVyPEdDUklfUT4sXHJcbiAgICBwcml2YXRlIGJhc2VWYWxpZGF0ZUlzUG9zdGNvZGVWYWxpZFRlc3RlcjogQmFzZVZhbGlkYXRlSXNQb3N0Y29kZVZhbGlkVGVzdGVyPElQVl9RPixcclxuICAgIHByaXZhdGUgZGVwb3RGZXRjaGVyOiBCYXNlU2VhcmNoRGVwb3RGZXRjaGVyPFNEX1E+LFxyXG4gICAgcHJpdmF0ZSBjb25mZXJtYU9mZmljZU5hbWVzRmV0Y2hlcjogQmFzZUNvbmZlcm1hT2ZmaWNlTmFtZXNGZXRjaGVyPEdPTl9RPixcclxuICAgIHByaXZhdGUgY29uZmVybWFPZmZpY2VGZXRjaGVyOiBCYXNlQ29uZmVybWFPZmZpY2VGZXRjaGVyPENPX1E+LFxyXG4gICAgcHJpdmF0ZSBiYXNlRGVsZXRlVXNlckFkZHJlc3NVcGRhdGVyOiBCYXNlRGVsZXRlVXNlckFkZHJlc3NVcGRhdGVyPERVQV9RPixcclxuICAgIHByaXZhdGUgYmFzZURlbGV0ZVJlY2VudFNlYXJjaFVwZGF0ZXI6IEJhc2VEZWxldGVSZWNlbnRTZWFyY2hVcGRhdGVyPERSU19RPixcclxuICAgIHByaXZhdGUgYmFzZVNhdmVSZWNlbnRTZWFyY2hVcGRhdGVyOiBCYXNlU2F2ZVJlY2VudFNlYXJjaFVwZGF0ZXI8U1JTX1E+LFxyXG4gICAgcHJpdmF0ZSBnZXRVc2VyQ3VycmVudENhcmJvbkFsbG93YW5jZUZldGNoZXI6IEJhc2VHZXRVc2VyQ3VycmVudENhcmJvbkFsbG93YW5jZUZldGNoZXI8VUNBX1E+LFxyXG4gICAgcHJpdmF0ZSBiYXNlU2F2ZUZhdm91cml0ZVNlYXJjaFVwZGF0ZXI6IEJhc2VTYXZlRmF2b3VyaXRlU2VhcmNoVXBkYXRlcjxTRlNfUT4sXHJcbiAgICBlbnZpcm9ubWVudDogQmFzZUVudmlyb25tZW50LFxyXG4gICAgbG91bmdlRmV0Y2hlcjogQmFzZUxvdW5nZVF1b3RlRmV0Y2hlcjxTTF9RPixcclxuICAgIHBhcmtpbmdGZXRjaGVyOiBCYXNlUGFya2luZ1F1b3RlRmV0Y2hlcjxTUEFfUT4sXHJcbiAgICBodHRwQ2FsbFNlcnZpY2U6IEFic3RyYWN0SHR0cENhbGxTZXJ2aWNlLFxyXG4gICAgZmxpZ2h0RmV0Y2hlcjogQmFzZUZsaWdodFF1b3RlRmV0Y2hlcjxTRkxfUT4sXHJcbiAgICBob3RlbEZldGNoZXI6IEJhc2VIb3RlbFF1b3RlRmV0Y2hlcjxTSE9fUT4sXHJcbiAgICBjYXJoaXJlRmV0Y2hlcjogQmFzZUNhcmhpcmVRdW90ZUZldGNoZXI8U0NIX1E+LFxyXG4gICAgY2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXI6IEJhc2VDYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlcjxDSEFEX1E+LFxyXG4gICAgY2FiaGlyZUZldGNoZXI6IEJhc2VDYWJoaXJlUXVvdGVGZXRjaGVyPFNUSF9RPixcclxuICAgIHJhaWxGZXRjaGVyOiBCYXNlUmFpbFF1b3RlRmV0Y2hlcjxTUkFfUT4sXHJcbiAgICBpcmxGZXRjaGVyOiBCYXNlSXJsUXVvdGVGZXRjaGVyPFNJX1E+LFxyXG4gICAgcHJvdGVjdGVkIGdldFJhaWxTdGF0aW9uRmV0Y2hlcjogQmFzZUdldFJhaWxTdGF0aW9uRmV0Y2hlcjxHUlNfUT4sXHJcbiAgICBiYXNlV2ViVG9rZW5TZXJ2aWNlOiBCYXNlV2ViVG9rZW5TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByaXNrQWxlcnRzRmV0Y2hlcjogQmFzZUdldFJpc2tBbGVydHNGZXRjaGVyPEdSQV9RPixcclxuICAgIHF1aWNrbGlzdEZldGNoZXI6IEJhc2VTZWFyY2hDb25mZXJtYVF1aWNrbGlzdEZldGNoZXI8UUxfUT4sXHJcbiAgICBwcml2YXRlIGdldFVzZXJSZWNlbnRTZWFyY2hlc0ZldGNoZXI6IEJhc2VHZXRVc2VyUmVjZW50U2VhcmNoZXNGZXRjaGVyPEdVUlNGX1E+LFxyXG4gICAgcHJvdGVjdGVkIGdldFJhaWxDYXJkc0ZldGNoZXI6IEJhc2VHZXRSYWlsY2FyZHNGZXRjaGVyPEdSQ0ZfUT4sXHJcbiAgICBwcm90ZWN0ZWQgZ2V0Q292aWRNaWNyb3NpdGVUb2tlbkZldGNoZXI6IEJhc2VHZXRDb3ZpZE1pY3Jvc2l0ZVRva2VuRmV0Y2hlcjxHQ01URl9RPixcclxuICAgIGV1cm9zdGFyRmV0Y2hlcjogQmFzZUV1cm9zdGFyUXVvdGVGZXRjaGVyPFNFX1E+LFxyXG4gICAgcHVibGljIHNlYXJjaFVzZXJzQ2FuQm9va0ZvckZldGNoZXI6IEJhc2VTZWFyY2hVc2Vyc0NhbkJvb2tGb3JGZXRjaGVyPFNVQ0JGPixcclxuICAgIHByb3RlY3RlZCBzZWFyY2hJcmxTdGF0aW9uc0ZldGNoZXI6IEJhc2VTZWFyY2hJcmxTdGF0aW9uc0ZldGNoZXI8U0lTX1E+LFxyXG4gICAgcHJvdGVjdGVkIGlybERpc2NvdW50Q2FyZHNGZXRjaGVyOiBCYXNlSXJsRGlzY291bnRDYXJkRmV0Y2hlcjxHSURGX1E+LFxyXG4gICAgcHJpdmF0ZSBnZXRGbGlnaHRGYXJlUnVsZXNGZXRjaGVyOiBCYXNlR2V0RmxpZ2h0RmFyZVJ1bGVzRmV0Y2hlcjxHRkZSX1E+LFxyXG4gICAgcHJpdmF0ZSBnZXRGbGlnaHRTZWF0TWFwRmV0Y2hlcjogQmFzZUdldEZsaWdodFNlYXRNYXBGZXRjaGVyPEdGU01fUT4sXHJcbiAgICBwcml2YXRlIGdldFJhaWxMaXZlRGVwYXJ0dXJlc0ZldGNoZXI6IEJhc2VHZXRSYWlsTGl2ZURlcGFydHVyZXNGZXRjaGVyPEdSTERfRj4sXHJcbiAgICBhcHBseUhvdGVsUnVsZXNGZXRjaGVyOiBCYXNlSG90ZWxSdWxlc0ZldGNoZXI8QUhSX1E+LFxyXG4gICAgYXBwbHlGbGlnaHRSdWxlczogQmFzZUFwcGx5Sml0RmxpZ2h0UnVsZXNGZXRjaGVyPEFGUl9RPixcclxuICAgIHByaXZhdGUgZ2V0VXNlckZhdm91cml0ZVNlYXJjaGVzRmV0Y2hlcjogQmFzZUdldFVzZXJGYXZvdXJpdGVTZWFyY2hlc0ZldGNoZXI8R1VGU0ZfUT4sXHJcbiAgICBwcml2YXRlIGRlbGV0ZUZhdm91cml0ZVNlYXJjaFVwZGF0ZXI6IEJhc2VEZWxldGVGYXZvdXJpdGVTZWFyY2hVcGRhdGVyPERGU19RPixcclxuICAgIHByaXZhdGUgZW1haWxCYXNrZXRGZXRjaGVyOiBCYXNlRW1haWxCYXNrZXRGZXRjaGVyPEVCX0Y+LFxyXG4gICAgZmFzdHRyYWNrRmV0Y2hlcjogQmFzZUZhc3RUcmFja1F1b3RlRmV0Y2hlcjxGVFFfUT4sXHJcbiAgICBwcml2YXRlIHNlbmRPZmZsaW5lTm90aWZpY2F0aW9uRmV0Y2hlcjogQmFzZVNlbmRPZmZsaW5lTm90aWZpY2F0aW9uRmV0Y2hlcjxTT05fUT4sXHJcbiAgICBwcml2YXRlIGdldEhvdGVsQ2hhaW5zRmV0Y2hlcjogQmFzZUdldEhvdGVsQ2hhaW5zRmV0Y2hlcjxHSFRfUT4sXHJcbiAgICBwcml2YXRlIGdldFJhaWxQcm92aWRlcnNGZXRjaGVyOiBCYXNlR2V0UmFpbFByb3ZpZGVyc0ZldGNoZXI8R1JQX1E+LFxyXG4gICAgcHJpdmF0ZSBnZXRBbGxBaXJsaW5lc0ZldGNoZXI6IEJhc2VHZXRBbGxBaXJsaW5lc0ZldGNoZXI8R0FBX1E+LFxyXG4gICAgcHJpdmF0ZSBnZXRDYXJIaXJlUHJvdmlkZXJzRmV0Y2hlcjogQmFzZUdldENhckhpcmVQcm92aWRlcnNGZXRjaGVyPEdDSFBfUT5cclxuICApIHtcclxuICAgIGNvbnNvbGUubG9nKCdFbnRlcnBpc2Ugc2VhcmNoIHNlcnZpY2UgYmVpbmcgaW5pdGVkJyk7XHJcbiAgICB0aGlzLnNlYXJjaGVzID0ge1xyXG4gICAgICBbU2VydmljZVR5cGUuTG91bmdlXTogbmV3IExvdW5nZXNFbnRlcnByaXNlU2VhcmNoKFxyXG4gICAgICAgIGxvdW5nZUZldGNoZXIsXHJcbiAgICAgICAgaGVscGVycyxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXNcclxuICAgICAgKSxcclxuICAgICAgW1NlcnZpY2VUeXBlLlBhcmtpbmddOiBuZXcgUGFya2luZ0VudGVycHJpc2VTZWFyY2goXHJcbiAgICAgICAgcGFya2luZ0ZldGNoZXIsXHJcbiAgICAgICAgaGVscGVycyxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXNcclxuICAgICAgKSxcclxuICAgICAgW1NlcnZpY2VUeXBlLkZsaWdodF06IG5ldyBGbGlnaHRFbnRlcnByaXNlU2VhcmNoKFxyXG4gICAgICAgIGZsaWdodEZldGNoZXIsXHJcbiAgICAgICAgaGVscGVycyxcclxuICAgICAgICB1c2VyU2VydmljZSxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMsXHJcbiAgICAgICAgYXBwbHlGbGlnaHRSdWxlcyxcclxuICAgICAgICBtb2RhbFNlcnZpY2VcclxuICAgICAgKSxcclxuICAgICAgW1NlcnZpY2VUeXBlLkhvdGVsXTogbmV3IEhvdGVsRW50ZXJwcmlzZVNlYXJjaChcclxuICAgICAgICBob3RlbEZldGNoZXIsXHJcbiAgICAgICAgaGVscGVycyxcclxuICAgICAgICB1c2VyU2VydmljZSxcclxuICAgICAgICBlbnZpcm9ubWVudCxcclxuICAgICAgICBob3RlbEF2YWxpYmlsaXR5U2VydmljZSxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMsXHJcbiAgICAgICAgaHR0cENhbGxTZXJ2aWNlLFxyXG4gICAgICAgIHF1aWNrbGlzdEZldGNoZXIsXHJcbiAgICAgICAgZ2V0UmFpbFN0YXRpb25GZXRjaGVyLFxyXG4gICAgICAgIGFwcGx5SG90ZWxSdWxlc0ZldGNoZXJcclxuICAgICAgKSxcclxuICAgICAgW1NlcnZpY2VUeXBlLkNhcl06IG5ldyBDYXJoaXJlRW50ZXJwcmlzZVNlYXJjaChcclxuICAgICAgICBjYXJoaXJlRmV0Y2hlcixcclxuICAgICAgICBjYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlcixcclxuICAgICAgICBoZWxwZXJzLFxyXG4gICAgICAgIGJhc2tldFNlcnZpY2UsXHJcbiAgICAgICAgc3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgdGhpc1xyXG4gICAgICApLFxyXG4gICAgICBbU2VydmljZVR5cGUuQ2FiXTogbmV3IENhYkhpcmVFbnRlcnByaXNlU2VhcmNoKFxyXG4gICAgICAgIGNhYmhpcmVGZXRjaGVyLFxyXG4gICAgICAgIGhlbHBlcnMsXHJcbiAgICAgICAgc3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgdGhpcyxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlXHJcbiAgICAgICksXHJcbiAgICAgIFtTZXJ2aWNlVHlwZS5JbnRlcm5hdGlvbmFsUmFpbF06IG5ldyBJUkxFbnRlcnByaXNlU2VhcmNoKFxyXG4gICAgICAgIGlybEZldGNoZXIsXHJcbiAgICAgICAgaXJsRGlzY291bnRDYXJkc0ZldGNoZXIsXHJcbiAgICAgICAgaGVscGVycyxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXNcclxuICAgICAgKSxcclxuICAgICAgW1NlcnZpY2VUeXBlLkZhc3RUcmFja106IG5ldyBGYXN0VHJhY2tFbnRlcnByaXNlU2VhcmNoKFxyXG4gICAgICAgIGZhc3R0cmFja0ZldGNoZXIsXHJcbiAgICAgICAgaGVscGVycyxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXNcclxuICAgICAgKSxcclxuICAgICAgW1NlcnZpY2VUeXBlLkNvYWNoXTogbnVsbCxcclxuICAgICAgW1NlcnZpY2VUeXBlLlJhaWxdOiBuZXcgUmFpbEVudGVycHJpc2VTZWFyY2goXHJcbiAgICAgICAgcmFpbEZldGNoZXIsXHJcbiAgICAgICAgZ2V0UmFpbFN0YXRpb25GZXRjaGVyLFxyXG4gICAgICAgIGhlbHBlcnMsXHJcbiAgICAgICAgYmFza2V0U2VydmljZSxcclxuICAgICAgICBzdG9yYWdlU2VydmljZSxcclxuICAgICAgICB0aGlzLFxyXG4gICAgICAgIHVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIG1vZGFsU2VydmljZVxyXG4gICAgICApLFxyXG4gICAgICBbU2VydmljZVR5cGUuRXVyb3N0YXJdOiBuZXcgRXVyb3N0YXJFbnRlcnByaXNlU2VhcmNoKFxyXG4gICAgICAgIGV1cm9zdGFyRmV0Y2hlcixcclxuICAgICAgICBoZWxwZXJzLFxyXG4gICAgICAgIHVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIGJhc2tldFNlcnZpY2UsXHJcbiAgICAgICAgc3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgdGhpcyxcclxuICAgICAgICBtb2RhbFNlcnZpY2VcclxuICAgICAgKVxyXG4gICAgfTtcclxuICAgIGNvbnNvbGUubG9nKCdOZXdseSBjcmVhdGVkIHNlYXJjaCBvYmplY3RzOiAnLCB0aGlzLnNlYXJjaGVzKTtcclxuICAgIHRoaXMuc2VhcmNoX29iamVjdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5pbml0X3NlYXJjaF9vYmplY3RzKCkpO1xyXG4gICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtQXNMaXN0PFxyXG4gICAgICBUcmF2ZWxsZXJbXVxyXG4gICAgPihCYXNlRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2UuU0VTU0lPTl9UUkFWRUxMRVIpO1xyXG4gICAgdGhpcy50cmF2ZWxsZXJJbmZvcm1hdGlvbi5uZXh0KHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzKTtcclxuICAgIHVzZXJTZXJ2aWNlLmZ1bGxVc2VyRGV0YWlscy51c2VyU2VydmljZXMuc3Vic2NyaWJlKFxyXG4gICAgICAoc2VydmljZXM6IFVzZXJTZXJ2aWNlcykgPT4ge1xyXG4gICAgICAgIGlmIChzZXJ2aWNlcykge1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0cyA9IE9iamVjdC5rZXlzKHRoaXMuc2VhcmNoX29iamVjdHMpLnJlZHVjZShcclxuICAgICAgICAgICAgKG9iamVjdHM6IFNlYXJjaE9iamVjdHMsIGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgKG9iamVjdHMgYXMgUmVjb3JkPHN0cmluZywgYW55Pilba2V5XS5lbmFibGVkID1cclxuICAgICAgICAgICAgICAgICEhc2VydmljZXMgJiYgISFzZXJ2aWNlc1trZXldO1xyXG4gICAgICAgICAgICAgIHJldHVybiBvYmplY3RzO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaF9vYmplY3RzXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmNvdW50cmllcykpIHtcclxuICAgICAgdGhpcy5jb3VudHJpZXMgPSB0aGlzLmNvdW50cmllcy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgaWYgKGEuY05hbWUgPCBiLmNOYW1lKSB7XHJcbiAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhLmNOYW1lID4gYi5jTmFtZSkge1xyXG4gICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBiYXNlV2ViVG9rZW5TZXJ2aWNlLmF1dG9Mb2dvdXRDb25maWcgPSB0aGlzLmdldEF1dG9Mb2dvdXRDb25maWcoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMuYWxsU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuYWxsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldCgpIHtcclxuICAgIHRoaXMucmVzZXRBbGxTZWFyY2hJdGVtcygpO1xyXG4gICAgdGhpcy5iYXNrZXRTZXJ2aWNlLnJlc2V0KCk7XHJcbiAgfVxyXG5cclxuICByZXNldEFsbFNlYXJjaEl0ZW1zKCkge1xyXG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLnNlYXJjaGVzKS5mb3JFYWNoKFxyXG4gICAgICAoaXRlbTogQmFzZUVudGVycHJpc2VTZWFyY2g8YW55LCBhbnksIGFueVtdPikgPT4ge1xyXG4gICAgICAgIGl0ZW0/LnJlc2V0KCk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICB0aGlzLnJlbW92ZUFsbFRyYXZlbGxlcnMoKTtcclxuICAgIHRoaXMucmVzZXRTZWFyY2hPYmplY3RzKCk7XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyQ3VycmVudENhcmJvbkFsbG93YW5jZShcclxuICAgIHVzZXI/OiBzdHJpbmcsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPENhcmJvbkFsbG93YW5jZT4ge1xyXG4gICAgaWYgKGlzTG9hZGluZykge1xyXG4gICAgICBpc0xvYWRpbmcubmV4dCh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBxdWVyeSA9IHsgdXNlciB9O1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0VXNlckN1cnJlbnRDYXJib25BbGxvd2FuY2VGZXRjaGVyLmZldGNoTGlzdChxdWVyeSkucGlwZShcclxuICAgICAgdGFrZSgxKSxcclxuICAgICAgbWFwKChyZXN1bHRzOiBDYXJib25BbGxvd2FuY2UpID0+IHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0cztcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRSaXNrQWxlcnRzKFxyXG4gICAgbWluTGV2ZWw6IFJpc2tMZXZlbCxcclxuICAgIG1heExldmVsOiBSaXNrTGV2ZWwsXHJcbiAgICBjb3VudHJ5SXNvQ29kZTogc3RyaW5nLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxSaXNrQWxlcnRbXT4ge1xyXG4gICAgaWYgKGlzTG9hZGluZykge1xyXG4gICAgICBpc0xvYWRpbmcubmV4dCh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBxdWVyeTogR2V0Umlza0FsZXJ0c1F1ZXJ5VmFyaWFibGVzID0ge1xyXG4gICAgICBtaW5MZXZlbCxcclxuICAgICAgbWF4TGV2ZWwsXHJcbiAgICAgIGNvdW50cnlJc29Db2RlXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLnJpc2tBbGVydHNGZXRjaGVyLmZldGNoTGlzdChxdWVyeSkucGlwZShcclxuICAgICAgdGFrZSgxKSxcclxuICAgICAgbWFwKChyZXN1bHQ6IFJpc2tBbGVydFtdKSA9PiB7XHJcbiAgICAgICAgaWYgKGlzTG9hZGluZykge1xyXG4gICAgICAgICAgaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRBaXJwb3J0c0xpc3QoXHJcbiAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICBjb3VudHJ5Q29kZT86IENvdW50cnlDb2RlLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+LFxyXG4gICAgaGFzTG91bmdlPzogYm9vbGVhbixcclxuICAgIGhhc1Bhcmtpbmc/OiBib29sZWFuLFxyXG4gICAgaGFzRmFzdFRyYWNrPzogYm9vbGVhblxyXG4gICk6IE9ic2VydmFibGU8T0JUQWlycG9ydERldGFpbHNbXT4ge1xyXG4gICAgaWYgKHRlcm0ubGVuZ3RoID4gMikge1xyXG4gICAgICBpZiAoaXNMb2FkaW5nKSB7XHJcbiAgICAgICAgaXNMb2FkaW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHF1ZXJ5OiBTZWFyY2hBaXJwb3J0cy5WYXJpYWJsZXMgPSB7IHF1ZXJ5OiB0ZXJtIH07XHJcbiAgICAgIGlmICghIWNvdW50cnlDb2RlKSB7XHJcbiAgICAgICAgcXVlcnkuY291bnRyeUNvZGUgPSBjb3VudHJ5Q29kZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodHlwZW9mIGhhc0xvdW5nZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgcXVlcnkuaGFzTG91bmdlID0gaGFzTG91bmdlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0eXBlb2YgaGFzUGFya2luZyA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgcXVlcnkuaGFzUGFya2luZyA9IGhhc1Bhcmtpbmc7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHR5cGVvZiBoYXNGYXN0VHJhY2sgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgIHF1ZXJ5Lmhhc0Zhc3RUcmFjayA9IGhhc0Zhc3RUcmFjaztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hBaXJwb3J0c0ZldGNoZXIuZmV0Y2hPbmUocXVlcnkpLnBpcGUoXHJcbiAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICBtYXAoKHJlc3VsdHM6IEFpcnBvcnRTZWFyY2hSZXN1bHRzKSA9PiB7XHJcbiAgICAgICAgICBpZiAoaXNMb2FkaW5nKSB7XHJcbiAgICAgICAgICAgIGlzTG9hZGluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAocmVzdWx0cyAmJiByZXN1bHRzLmdlbmVyYWxNYXRjaGVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGdlbmVyYWxNYXRjaGVzID0gdGhpcy5oZWxwZXJzLmNsb25lKHJlc3VsdHMuZ2VuZXJhbE1hdGNoZXMpO1xyXG5cclxuICAgICAgICAgICAgLy8gUmVtb3ZpbmcgdGhpcyBhcyB0aGlzIGNyZWF0ZXMgZHVwbGljYXRlIGFpcnBvcnRzIGluIHRoZSBsaXN0XHJcbiAgICAgICAgICAgIC8vIGlmIChyZXN1bHRzLmlhdGFNYXRjaCkge1xyXG4gICAgICAgICAgICAvLyAgIGdlbmVyYWxNYXRjaGVzLnB1c2gocmVzdWx0cy5pYXRhTWF0Y2gpO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgZ2VuZXJhbE1hdGNoZXNcclxuICAgICAgICAgICAgICAgIC8vIC5maWx0ZXIoKGFpcnBvcnQ6IEFpcnBvcnRSZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vICAgcmV0dXJuICEhY291bnRyeUNvZGVcclxuICAgICAgICAgICAgICAgIC8vICAgICA/IGNvdW50cnlDb2RlID09PSBhaXJwb3J0LmRldGFpbHMuY291bnRyeUNvZGVcclxuICAgICAgICAgICAgICAgIC8vICAgICA6IGFpcnBvcnQ7XHJcbiAgICAgICAgICAgICAgICAvLyB9KVxyXG4gICAgICAgICAgICAgICAgLm1hcCgoYWlycG9ydDogQWlycG9ydCk6IE9CVEFpcnBvcnREZXRhaWxzID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbjogYWlycG9ydC5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGdhdGV3YXk6IGFpcnBvcnQuaWF0YSxcclxuICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hbHM6IHRoaXMucHJvY2Vzc1Rlcm1pbmFscyhhaXJwb3J0LnRlcm1pbmFscyksXHJcbiAgICAgICAgICAgICAgICAgICAgY291bnRyeTogYWlycG9ydD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5LFxyXG4gICAgICAgICAgICAgICAgICAgIHBvc3Rjb2RlOiBhaXJwb3J0Py5sb2NhdGlvbkRldGFpbHM/LnBvc3Rjb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvdW50cnlDb2RlOiBhaXJwb3J0Py5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlXHJcbiAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXRBaXJsaW5lc0xpc3QoXHJcbiAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPE9CVEFpcmxpbmVzRGV0YWlsc1tdPiB7XHJcbiAgICBpZiAodGVybS5sZW5ndGggPj0gMikge1xyXG4gICAgICBpZiAoaXNMb2FkaW5nKSB7XHJcbiAgICAgICAgaXNMb2FkaW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcXVlcnk6IFNlYXJjaEFpcmxpbmVzLlZhcmlhYmxlcyA9IHsgcXVlcnk6IHRlcm0gfTtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoQWlybGluZXNGZXRjaGVyLmZldGNoT25lKHF1ZXJ5KS5waXBlKFxyXG4gICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgbWFwKChyZXN1bHRzOiBBaXJsaW5lc1NlYXJjaFJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGlzTG9hZGluZykge1xyXG4gICAgICAgICAgICBpc0xvYWRpbmcubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0cy5nZW5lcmFsTWF0Y2hlcykge1xyXG4gICAgICAgICAgICBjb25zdCBnZW5lcmFsTWF0Y2hlcyA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHRzLmdlbmVyYWxNYXRjaGVzKTtcclxuICAgICAgICAgICAgcmV0dXJuIGdlbmVyYWxNYXRjaGVzLm1hcChcclxuICAgICAgICAgICAgICAoYWlybGluZXM6IEFpcmxpbmVSZXN1bHQpOiBPQlRBaXJsaW5lc0RldGFpbHMgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgY29kZTogYWlybGluZXMuaWF0YSxcclxuICAgICAgICAgICAgICAgICAgbmFtZTogYWlybGluZXMubmFtZVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldEFpcnBvcnRMb2NhdGlvbnMoXHJcbiAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICBjb3VudHJ5Q29kZTogQ291bnRyeUNvZGUsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4sXHJcbiAgICBoYXNMb3VuZ2U/OiBib29sZWFuLFxyXG4gICAgaGFzUGFya2luZz86IGJvb2xlYW4sXHJcbiAgICBoYXNGYXN0VHJhY2s/OiBib29sZWFuXHJcbiAgKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkRldGFpbHNbXT4ge1xyXG4gICAgY29uc3QgY29udmVydCA9IChyZXN1bHRzOiBPQlRBaXJwb3J0RGV0YWlsc1tdKTogTG9jYXRpb25EZXRhaWxzW10gPT4ge1xyXG4gICAgICByZXR1cm4gcmVzdWx0cy5tYXAoKHJlc3VsdDogT0JUQWlycG9ydERldGFpbHMpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgbmFtZTogcmVzdWx0LmRlc3RpbmF0aW9uLFxyXG4gICAgICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5BaXJwb3J0LFxyXG4gICAgICAgICAgYWlycG9ydDogcmVzdWx0XHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0QWlycG9ydHNMaXN0KFxyXG4gICAgICB0ZXJtLFxyXG4gICAgICBjb3VudHJ5Q29kZSxcclxuICAgICAgaXNMb2FkaW5nLFxyXG4gICAgICBoYXNMb3VuZ2UsXHJcbiAgICAgIGhhc1BhcmtpbmcsXHJcbiAgICAgIGhhc0Zhc3RUcmFja1xyXG4gICAgKS5waXBlKG1hcChjb252ZXJ0KSk7XHJcbiAgfVxyXG5cclxuICBnZXRDaXR5TG9jYXRpb25zKFxyXG4gICAgdGVybTogc3RyaW5nLFxyXG4gICAgY291bnRyeUNvZGU/OiBDb3VudHJ5Q29kZSxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPixcclxuICAgIGlzQ29uZmlybWE/OiBib29sZWFuXHJcbiAgKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkRldGFpbHNbXT4ge1xyXG4gICAgaWYgKHRlcm0ubGVuZ3RoIDw9IDIpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzQ29uZmlybWEpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29uZmVybWFDaXR5TG9jYXRpb25zKHRlcm0sIGNvdW50cnlDb2RlLCBpc0xvYWRpbmcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2dldENpdHlMb2NhdGlvbnModGVybSwgY291bnRyeUNvZGUsIGlzTG9hZGluZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBfZ2V0Q2l0eUxvY2F0aW9ucyhcclxuICAgIHRlcm06IHN0cmluZyxcclxuICAgIGNvdW50cnlDb2RlPzogQ291bnRyeUNvZGUsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPExvY2F0aW9uRGV0YWlsc1tdPiB7XHJcbiAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XHJcbiAgICBjb25zdCBxdWVyeTogYW55ID0geyBxdWVyeTogdGVybSB9O1xyXG4gICAgaWYgKGNvdW50cnlDb2RlKSB7XHJcbiAgICAgIHF1ZXJ5LmNvdW50cnlDb2RlID0gY291bnRyeUNvZGU7XHJcbiAgICB9XHJcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8U2VhcmNoQ2l0aWVzUmVzdWx0QXJyYXk+ID1cclxuICAgICAgdGhpcy5jaXRpZXNGZXRjaGVyLmZldGNoTGlzdChxdWVyeSk7XHJcbiAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IFNlYXJjaENpdGllc1Jlc3VsdEFycmF5KTogTG9jYXRpb25EZXRhaWxzW10gPT4ge1xyXG4gICAgICBjb25zdCBkYXRhOiBMb2NhdGlvbkRldGFpbHNbXSA9IHJlc3VsdHMubWFwKFxyXG4gICAgICAgIChyZXN1bHQ6IFNlYXJjaENpdGllc1Jlc3VsdCk6IExvY2F0aW9uRGV0YWlscyA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBuYW1lOiByZXN1bHQubmFtZSxcclxuICAgICAgICAgICAgbG9uZ2l0dWRlOiByZXN1bHQuY29vcmRpbmF0ZXMubG9uZ2l0dWRlLFxyXG4gICAgICAgICAgICBsYXRpdHVkZTogcmVzdWx0LmNvb3JkaW5hdGVzLmxhdGl0dWRlLFxyXG4gICAgICAgICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLkNpdHksXHJcbiAgICAgICAgICAgIGNvdW50cnlDb2RlOiByZXN1bHQuY291bnRyeUNvZGUsXHJcbiAgICAgICAgICAgIGlkOiByZXN1bHQuaWRcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgICBpc0xvYWRpbmc/Lm5leHQoZmFsc2UpO1xyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgbWFwKGZ1bmMpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q29uZmVybWFDaXR5TG9jYXRpb25zKFxyXG4gICAgdGVybTogc3RyaW5nLFxyXG4gICAgY291bnRyeUNvZGU/OiBDb3VudHJ5Q29kZSxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcclxuICAgIGlzTG9hZGluZz8ubmV4dCh0cnVlKTtcclxuICAgIGNvbnN0IHF1ZXJ5OiBhbnkgPSB7IGNpdHlOYW1lOiB0ZXJtIH07XHJcbiAgICBpZiAoY291bnRyeUNvZGUpIHtcclxuICAgICAgcXVlcnkuY291bnRyeUNvZGUgPSBjb3VudHJ5Q29kZTtcclxuICAgIH1cclxuICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxTZWFyY2hDb25mZXJtYUNpdGllc1Jlc3VsdD4gPVxyXG4gICAgICB0aGlzLmNvbmZlcm1hQ2l0aWVzRmV0Y2hlci5mZXRjaE9uZShxdWVyeSk7XHJcbiAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IFNlYXJjaENvbmZlcm1hQ2l0aWVzUmVzdWx0KTogTG9jYXRpb25EZXRhaWxzW10gPT4ge1xyXG4gICAgICBpc0xvYWRpbmc/Lm5leHQoZmFsc2UpO1xyXG5cclxuICAgICAgaWYgKCFyZXN1bHRzPy5zdWdnZXN0aW9ucykge1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgZGF0YTogTG9jYXRpb25EZXRhaWxzW10gPSByZXN1bHRzLnN1Z2dlc3Rpb25zLm1hcChcclxuICAgICAgICAocmVzdWx0KTogTG9jYXRpb25EZXRhaWxzID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG5hbWU6IHJlc3VsdC5uYW1lLFxyXG4gICAgICAgICAgICBsb25naXR1ZGU6IHJlc3VsdC5sb25naXR1ZGUsXHJcbiAgICAgICAgICAgIGxhdGl0dWRlOiByZXN1bHQubGF0aXR1ZGUsXHJcbiAgICAgICAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXMuQ2l0eSxcclxuICAgICAgICAgICAgY291bnRyeUNvZGU6IHJlc3VsdC5jb3VudHJ5Q29kZVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcblxyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgbWFwKGZ1bmMpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCBjYXIgaGlyZSBkZXBvdHMgYmFzZWQgb24gY2l0eSBjb3Jkc1xyXG4gICAqL1xyXG4gIGdldENhckhpcmVEZXBvdHMoXHJcbiAgICBsYXRpdHVkZTogbnVtYmVyLFxyXG4gICAgbG9uZ2l0dWRlOiBudW1iZXIsXHJcbiAgICByYWRpdXM/OiBzdHJpbmcsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPENhckhpcmVEZXBvdFJlc3VsdEFycmF5PiB7XHJcbiAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XHJcbiAgICBjb25zdCBxdWVyeTogYW55ID0geyBsYXRpdHVkZSwgbG9uZ2l0dWRlIH07XHJcbiAgICBpZiAocmFkaXVzKSB7XHJcbiAgICAgIHF1ZXJ5LnJhZGl1cyA9IHJhZGl1cztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8Q2FySGlyZURlcG90UmVzdWx0QXJyYXk+ID1cclxuICAgICAgdGhpcy5kZXBvdEZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KTtcclxuXHJcbiAgICByZXR1cm4gb2JzOyAvLyAucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xyXG5cclxuICAgIC8vIHJldHVybiBvZihbXSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgcG9zdGNvZGUgbG9jYXRpb25zLCB0aGVzZSB3aWxsIHVzZSBwYXJ0aWFsIHBvc3Rjb2RlLFxyXG4gICAqICBmdWxsIGFuZCB0aGVuIGdyYWJiaW5nIHRoZW0gd2lsbCBsZXQgdXMgZmlsbCBpbiB0aGUgYWRkcmVzcyBmb3JtXHJcbiAgICogQHRvZG8gLSBmaWxsIHRoaXMgb3V0IGZvciB0aGUgb3RoZXIgbG9jYXRpb24gdHlwZXMsIG1heSBuZWVkIHRvIG1lcmdlTWFwIHRoZW0gb3Igc29tZSBvdGhlciByeGpzIG1hZ2ljXHJcbiAgICogQHBhcmFtIHRlcm0gLSB0aGUgdGVybSB0byBzZWFyY2ggYnkgZS5nLiAnd2ExNCcgc2hvdWxkIGJyaW5nIGJhY2ssIG91ciBvZmZpY2UsICdtMzMnIHNob2l1bGQgYnJpbmcgYmFjayBteSBhZGRyc1xyXG4gICAqL1xyXG4gIGdldFBvc3Rjb2RlTGlzdCh0ZXJtOiBzdHJpbmcpOiBPYnNlcnZhYmxlPExvY2F0aW9uRGV0YWlsc1tdPiB7XHJcbiAgICBpZiAoUmVnRXhwcy5VS19QT1NUQ09ERS50ZXN0KHRlcm0pKSB7XHJcbiAgICAgIGNvbnN0IHN1YnMgPSB0aGlzLnBvc3Rjb2RlRmV0Y2hlci5mZXRjaExpc3QoeyBwb3N0Y29kZTogdGVybSB9KS5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzdWx0czogU2VhcmNoUG9zdGNvZGVzUmVzdWx0QXJyYXkpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXN1bHRzLm1hcChcclxuICAgICAgICAgICAgKHJlc3VsdDogU2VhcmNoUG9zdGNvZGVzUmVzdWx0KTogTG9jYXRpb25EZXRhaWxzID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogcmVzdWx0LnBvc3Rjb2RlLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5Qb3N0Y29kZSxcclxuICAgICAgICAgICAgICAgIGxhdGl0dWRlOiByZXN1bHQubGF0aXR1ZGUsXHJcbiAgICAgICAgICAgICAgICBsb25naXR1ZGU6IHJlc3VsdC5sb25naXR1ZGVcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7IC8vIGV4cGFuZCB0aGlzIHdpdGggdGhlIG90aGVyIHNlYXJjaGVzIHdoZW4gdGhleSBhcmUgZG9uZVxyXG5cclxuICAgICAgcmV0dXJuIHN1YnM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVG9TZWxlY3RlZFBsYWNlcyhhZGRyZXNzOiBBZGRyZXNzKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkUGxhY2VzLnB1c2goYWRkcmVzcyk7XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3RlZFBsYWNlQnlJZChwbGFjZUlkOiBzdHJpbmcpOiBBZGRyZXNzIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUGxhY2VzLmZpbmQoXHJcbiAgICAgIChwbGFjZTogeyBwbGFjZV9pZDogc3RyaW5nIH0pID0+IHBsYWNlLnBsYWNlX2lkID09PSBwbGFjZUlkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29uZmlybWFPZmZpY2VzKHRlcm06IHN0cmluZyk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcclxuICAgIGlmICh0ZXJtPy5sZW5ndGggPiAyKSB7XHJcbiAgICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxDb25mZXJtYU9mZmljZU5hbWVSZXN1bHQ+ID1cclxuICAgICAgICB0aGlzLmNvbmZlcm1hT2ZmaWNlTmFtZXNGZXRjaGVyLmZldGNoTGlzdCgpO1xyXG4gICAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IENvbmZlcm1hT2ZmaWNlTmFtZVJlc3VsdCk6IExvY2F0aW9uRGV0YWlsc1tdID0+IHtcclxuICAgICAgICBpZiAoIXJlc3VsdHM/LnJlc3VsdHMpIHtcclxuICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGRhdGE6IExvY2F0aW9uRGV0YWlsc1tdID0gcmVzdWx0cy5yZXN1bHRzLm1hcChcclxuICAgICAgICAgIChyZXN1bHQ6IENvbmZlcm1hT2ZmaWNlTmFtZXMpOiBMb2NhdGlvbkRldGFpbHMgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIG5hbWU6IHJlc3VsdC5uYW1lLFxyXG4gICAgICAgICAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXMuT2ZmaWNlLFxyXG4gICAgICAgICAgICAgIGlkOiByZXN1bHQuaWRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgbWFwKGZ1bmMpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb2YoW10pO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgdGhlIGxpc3Qgb2YgT2ZmaWNlIGxvY2F0aW9ucyBiYXNlZCBvbiBzZWFyY2ggdGVybSBnaXZlblxyXG4gICAqIEB0b2RvIC0gZmlsbCB0aGlzIG91dCBzbyB0aGF0IGl0IGFjdHVhbGx5IHBlcmZvcm1zIGEgaHR0cCBjYWxsXHJcbiAgICogQHBhcmFtIHRlcm0gLSB0aGUgdGVybSB3ZSB3YW50IHRvIHNlYXJjaCBieVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgZ2V0T2ZmaWNlTG9jYXRpb25zKHRlcm06IHN0cmluZyk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcclxuICAgIGlmICh0ZXJtLmxlbmd0aCA+IDIpIHtcclxuICAgICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPEdldFVzZXJDb21wYW55T2ZmaWNlc1Jlc3VsdEFycmF5PiA9XHJcbiAgICAgICAgdGhpcy5nZXRVc2VyQ29tcGFueU9mZmljZXNGZXRjaGVyLmZldGNoTGlzdCgpO1xyXG4gICAgICBjb25zdCBmdW5jID0gKFxyXG4gICAgICAgIHJlc3VsdHM6IEdldFVzZXJDb21wYW55T2ZmaWNlc1Jlc3VsdEFycmF5XHJcbiAgICAgICk6IExvY2F0aW9uRGV0YWlsc1tdID0+IHtcclxuICAgICAgICBjb25zdCBkYXRhOiBMb2NhdGlvbkRldGFpbHNbXSA9IHJlc3VsdHMubWFwKFxyXG4gICAgICAgICAgKHJlc3VsdDogR2V0VXNlckNvbXBhbnlPZmZpY2VzUmVzdWx0KTogTG9jYXRpb25EZXRhaWxzID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICBuYW1lOiByZXN1bHQubmFtZSxcclxuICAgICAgICAgICAgICBvZmZpY2U6IHJlc3VsdC5hZGRyZXNzZXNbMF0sXHJcbiAgICAgICAgICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5PZmZpY2VcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgbWFwKGZ1bmMpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb2YoW10pO1xyXG4gIH1cclxuXHJcbiAgZ2V0U3RhdGlvbkxvY2F0aW9ucyhcclxuICAgIHRlcm06IHN0cmluZyxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcclxuICAgIGlmICh0ZXJtLmxlbmd0aCA+IDIpIHtcclxuICAgICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xyXG4gICAgICByZXR1cm4gdGhpcy5yYWlsU3RhdGlvbkZldGNoZXJcclxuICAgICAgICAuZmV0Y2hMaXN0KHtcclxuICAgICAgICAgIHF1ZXJ5OiB0ZXJtXHJcbiAgICAgICAgfSlcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICBtYXAoKHJlc3VsdHM6IFNlYXJjaFJhaWxTdGF0aW9uc1Jlc3VsdEFycmF5KTogTG9jYXRpb25EZXRhaWxzW10gPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXNMb2FkaW5nKSB7XHJcbiAgICAgICAgICAgICAgaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzXHJcbiAgICAgICAgICAgICAgPyByZXN1bHRzLm1hcCgocmVzdWx0OiBTZWFyY2hSYWlsU3RhdGlvbnNSZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLlRyYWluU3RhdGlvbixcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiByZXN1bHQubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICByYWlsc3RhdGlvbjogcmVzdWx0XHJcbiAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIDogW107XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IGlybCBzdGF0aW9uIGxvY2F0aW9uc1xyXG4gICAqIEBwYXJhbSB0ZXJtIC0gdGhlIHRlcm0gdG8gc2VhcmNoXHJcbiAgICogQHBhcmFtIGlzTG9hZGluZyAtIEJlaGF2aW9yU3ViamVjdCBzbyB3ZSBrbm93IHNvbWV0aGluZyBpcyBoYXBwZW5pbmdcclxuICAgKi9cclxuICBzZWFyY2hJcmxTdGF0aW9uc0xvY2F0aW9ucyhcclxuICAgIHRlcm06IHN0cmluZyxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcclxuICAgIGlmICh0ZXJtLmxlbmd0aCA+IDIpIHtcclxuICAgICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xyXG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hJcmxTdGF0aW9uc0ZldGNoZXJcclxuICAgICAgICAuZmV0Y2hMaXN0KHtcclxuICAgICAgICAgIHF1ZXJ5OiB0ZXJtXHJcbiAgICAgICAgfSlcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICBtYXAoKHJlc3VsdHM6IElybFN1cHBsaWVyU3RhdGlvbltdKTogTG9jYXRpb25EZXRhaWxzW10gPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXNMb2FkaW5nKSB7XHJcbiAgICAgICAgICAgICAgaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzLm1hcCgocmVzdWx0OiBJcmxTdXBwbGllclN0YXRpb24pID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5UcmFpblN0YXRpb24sXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBgJHtyZXN1bHQubmFtZX0gKCR7cmVzdWx0LnN1cHBsaWVyfSlgLFxyXG4gICAgICAgICAgICAgICAgcmFpbHN0YXRpb246IHJlc3VsdFxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCBob3RlbCBsb2NhdGlvbnMsIHRoZXNlIHNob3VsZCBiZSBjaXR5LCBvZmZpY2UsIGFpcnBvcnQsIHJhaWxzdGF0aW9uXHJcbiAgICogQHRvZG8gLSBmaWxsIHRoaXMgb3V0IGZvciB0aGUgb3RoZXIgbG9jYXRpb24gdHlwZXMsIG1heSBuZWVkIHRvIG1lcmdlTWFwIHRoZW0gb3Igc29tZSBvdGhlciByeGpzIG1hZ2ljXHJcbiAgICogQHBhcmFtIHRlcm0gLSB0aGUgdGVybSB0byBzZWFyY2ggYnkgZS5nLiAnTWFuJyBzaG91bGQgYnJpbmcgYmFjaywgbWFuY2hlc3RlciwgbWFuY2hlc3RlciBhaXJwb3J0LCBtYW5jaGVzdGVyIHBpY2FkaWxseSwgZXRjXHJcbiAgICovXHJcbiAgZ2V0SG90ZWxMb2NhdGlvbnNMaXN0KFxyXG4gICAgdGVybTogc3RyaW5nLFxyXG4gICAgY291bnRyeUNvZGU6IENvdW50cnlDb2RlLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkRldGFpbHNbXT4ge1xyXG4gICAgaWYgKHRlcm0ubGVuZ3RoID4gMikge1xyXG4gICAgICBpZiAoUmVnRXhwcy5VS19QT1NUQ09ERS50ZXN0KHRlcm0pKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UG9zdGNvZGVMaXN0KHRlcm0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICghaXNMb2FkaW5nPy52YWx1ZSkge1xyXG4gICAgICAgICAgaXNMb2FkaW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHN1YnMgPSBmb3JrSm9pbihbXHJcbiAgICAgICAgICB0aGlzLmdldEFpcnBvcnRMb2NhdGlvbnModGVybSwgY291bnRyeUNvZGUsIGlzTG9hZGluZyksXHJcbiAgICAgICAgICB0aGlzLmdldENpdHlMb2NhdGlvbnMoXHJcbiAgICAgICAgICAgIHRlcm0sXHJcbiAgICAgICAgICAgIGNvdW50cnlDb2RlLFxyXG4gICAgICAgICAgICBpc0xvYWRpbmcsXHJcbiAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UudXNlckhhc1NlcnZpY2VQcm92aWRlcihcclxuICAgICAgICAgICAgICBTZXJ2aWNlVHlwZS5Ib3RlbCxcclxuICAgICAgICAgICAgICBTZXJ2aWNlUHJvdmlkZXIuQ29uZmlybWFcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIHRoaXMuZ2V0U3RhdGlvbkxvY2F0aW9ucyh0ZXJtLCBpc0xvYWRpbmcpLFxyXG4gICAgICAgICAgdGhpcy5nZXRDb25maXJtYU9mZmljZXModGVybSlcclxuICAgICAgICBdKS5waXBlKFxyXG4gICAgICAgICAgbWFwKChyZXN1bHRzOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXNMb2FkaW5nPy52YWx1ZSkge1xyXG4gICAgICAgICAgICAgIGlzTG9hZGluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cy5yZWR1Y2UoKGFjY3VtOiBMb2NhdGlvbkRldGFpbHNbXSwgcmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBhY2N1bS5wdXNoKC4uLnJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICAgICAgICB9LCBbXSk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7IC8vIGV4cGFuZCB0aGlzIHdpdGggdGhlIG90aGVyIHNlYXJjaGVzIHdoZW4gdGhleSBhcmUgZG9uZVxyXG4gICAgICAgIHJldHVybiBzdWJzO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U3RhdGlvbnNBbmRBaXJwb3J0c0xpc3QoXHJcbiAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICBjb3VudHJ5Q29kZTogQ291bnRyeUNvZGUsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPExvY2F0aW9uRGV0YWlsc1tdPiB7XHJcbiAgICBpZiAodGVybS5sZW5ndGggPiAyKSB7XHJcbiAgICAgIGlmICghaXNMb2FkaW5nPy52YWx1ZSkge1xyXG4gICAgICAgIGlzTG9hZGluZy5uZXh0KHRydWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHN1YnMgPSBmb3JrSm9pbihbXHJcbiAgICAgICAgdGhpcy5nZXRBaXJwb3J0TG9jYXRpb25zKHRlcm0sIGNvdW50cnlDb2RlLCBpc0xvYWRpbmcpLFxyXG4gICAgICAgIHRoaXMuZ2V0U3RhdGlvbkxvY2F0aW9ucyh0ZXJtLCBpc0xvYWRpbmcpXHJcbiAgICAgIF0pLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXN1bHRzOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGlzTG9hZGluZz8udmFsdWUpIHtcclxuICAgICAgICAgICAgaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHMucmVkdWNlKChhY2N1bTogYW55W10sIHJlc3VsdDogYW55W10pID0+IHtcclxuICAgICAgICAgICAgYWNjdW0ucHVzaCguLi5yZXN1bHQpO1xyXG4gICAgICAgICAgICByZXR1cm4gYWNjdW07XHJcbiAgICAgICAgICB9LCBbXSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTsgLy8gZXhwYW5kIHRoaXMgd2l0aCB0aGUgb3RoZXIgc2VhcmNoZXMgd2hlbiB0aGV5IGFyZSBkb25lXHJcbiAgICAgIHJldHVybiBzdWJzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qXHJcbiAgQGRlc2MgLSByZW1vdmUgYSBzcGVjaWZpZWQgdHJhdmVsbGVyIGZyb20gdGhlIHNlbGVjdGVkIGFycmF5XHJcbiAgKiovXHJcbiAgcmVtb3ZlVHJhdmVsbGVyKHRyYXZlbGxlcjogVHJhdmVsbGVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl9yZW1vdmVUcmF2ZWxsZXIodHJhdmVsbGVyKTtcclxuXHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBCYXNlRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2UuU0VTU0lPTl9UUkFWRUxMRVIsXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzXHJcbiAgICApO1xyXG4gICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJJbmZvcm1hdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgX3JlbW92ZVRyYXZlbGxlcih0cmF2ZWxsZXI6IFRyYXZlbGxlcikge1xyXG4gICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMgPSB0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5maWx0ZXIoXHJcbiAgICAgICh0cmF2ZWxsZXJUb1Rlc3Q6IFRyYXZlbGxlcikgPT4ge1xyXG4gICAgICAgIHJldHVybiAhVHJhdmVsbGVyT2JqZWN0LmVxdWFscyh0cmF2ZWxsZXJUb1Rlc3QsIHRyYXZlbGxlcik7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVBbGxUcmF2ZWxsZXJzKCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coJ3JlbW92ZSBhbGwgdHJhdmVsbGVycyBjYWxsZWQhJyk7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnNlbGVjdGVkVHJhdmVsbGVycyk7XHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzID0gW107XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5mb3JFYWNoKCh0cmF2ZWxsZXI6IFRyYXZlbGxlcikgPT4ge1xyXG4gICAgICB0aGlzLl9yZW1vdmVUcmF2ZWxsZXIodHJhdmVsbGVyKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIEJhc2VFbnRlcnByaXNlU2VhcmNoU2VydmljZS5TRVNTSU9OX1RSQVZFTExFUixcclxuICAgICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnNcclxuICAgICk7XHJcbiAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlckluZm9ybWF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBhZGRUcmF2ZWxsZXIodHJhdmVsbGVyOiBUcmF2ZWxsZXIpIHtcclxuICAgIGlmIChcclxuICAgICAgIXRoaXMudHJhdmVsbGVyQWxyZWFkeUFkZGVkKHRyYXZlbGxlcikgJiZcclxuICAgICAgIXRoaXMuY3VycmVudE5vT2ZUcmF2ZWxsZXJzR3JlYXRlck9yRXF1YWxUb01heCgpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMucHVzaCh0cmF2ZWxsZXIpO1xyXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICAgIEJhc2VFbnRlcnByaXNlU2VhcmNoU2VydmljZS5TRVNTSU9OX1RSQVZFTExFUixcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVyc1xyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlckluZm9ybWF0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGN1cnJlbnROb09mVHJhdmVsbGVyc0dyZWF0ZXJPckVxdWFsVG9NYXgoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMubGVuZ3RoID49IHRoaXMubWF4VHJhdmVsbGVycygpO1xyXG4gIH1cclxuXHJcbiAgbWF4VHJhdmVsbGVycygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIC8qdGhpcy51c2VyU2VydmljZS51c2VUcmF2ZWxsZXJQcm9maWxlICYmKi8gdGhpcy5jYW5Vc2VUcmF2ZWxsZXJQcm9maWxlKClcclxuICAgICAgPyAxXHJcbiAgICAgIDogTUFYX1RSQVZFTExFUlM7XHJcbiAgfVxyXG4gIC8qXHJcbiAgICBAZGVzYyAtIGhlbHBlciBmdW5jdGlvbiAtIGRldGVybWluZXMgaWYgYSBzZWxlY3RlZCB0cmF2ZWxsZXIgaXMgYWxyZWFkeSBhZGRlZCAtXHJcbiAgICB1c2VkIHRvIHByZXZlbnQgc2FtZSB0cmF2ZWxsZXIgYmVpbmcgYWRkZWQgbW9yZSB0aGFuIG9uY2VcclxuICAqKi9cclxuICB0cmF2ZWxsZXJBbHJlYWR5QWRkZWQodHJhdmVsbGVyOiBUcmF2ZWxsZXIpOiBib29sZWFuIHtcclxuICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCB0aGUgc2VsZWN0ZWQgdHJhdmVsbGVycyBhbmQgcmV0dXJuIHRydWUgaWYgZm91bmQsIGZhbHNlIG90aGVyIHdpc2VcclxuICAgIHJldHVybiAhIXRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmZpbmQoKHRyYXZlbGxlcnM6IFRyYXZlbGxlcikgPT5cclxuICAgICAgVHJhdmVsbGVyT2JqZWN0LmVxdWFscyh0cmF2ZWxsZXJzLCB0cmF2ZWxsZXIpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY2FuVXNlVHJhdmVsbGVyUHJvZmlsZSgpOiBib29sZWFuIHtcclxuICAgIC8qXHJcbiAgICBpZiAodGhpcy51c2VyU2VydmljZS5pc1VzZXJGYXZvcml0ZVNldChVc2VyRmF2b3J1cml0ZS5Eb250VXNlVHJhdmVsbGVyUG9saWN5KSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCB1c2VyID0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRGV0YWlscygpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMubGVuZ3RoID09PSAxICYmXHJcbiAgICAgICF0aGlzLnNlbGVjdGVkVHJhdmVsbGVyc1swXVxyXG4gICAgICAgIC5ndWVzdCAvKiYmXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzWzBdLnBheF9pZCAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVyc1swXS5wYXhfaWQgIT09IHVzZXIuUGF4SWRcclxuICAgICk7Ki9cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldEN1cnJlbnROb09mVHJhdmVsbGVycygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVRyYXZlbGxlckluZm9ybWF0aW9uKCkge1xyXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgQmFzZUVudGVycHJpc2VTZWFyY2hTZXJ2aWNlLlNFU1NJT05fVFJBVkVMTEVSLFxyXG4gICAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVyc1xyXG4gICAgKTtcclxuICAgIHRoaXMudHJhdmVsbGVySW5mb3JtYXRpb24ubmV4dChbLi4udGhpcy5zZWxlY3RlZFRyYXZlbGxlcnNdKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogIEBkZXNjIC0gZGV0ZXJtaW5lIGFuZCByZXR1cm4gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdmFsdWUsXHJcbiAgICogICB0aGUgaGlnaGVzdCBpcyBiYXNlZCBvbiB0aGUgcHJpb3JpdHkgdmFsdWUgb2YgdGhlIHNlYXJjaCB0eXBlLFxyXG4gICAqICAgIGlmIGl0IGlzIGNob3NlbiBhbmQgaWYgdGhlIGJvb2tpbmcgaGFzIG5vdCBiZWVuIGNob3NlblxyXG4gICAqKi9cclxuICBkZXRlcm1pbmVIaWdoZXN0U2VhcmNoUHJpb3JpdHkoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAodGhpcy5oaWdoZXN0X3NlYXJjaF9wcmlvcml0eSA9XHJcbiAgICAgIHRoaXMuX2dldEhpZ2hlc3RTZWFyY2hQcmlvcml0eU9iamVjdCgpLmhpZ2hlc3QpO1xyXG4gIH1cclxuXHJcbiAgZ2V0SGlnaGVzdFNlYXJjaFByaW9yaXR5T2JqZWN0KFxyXG4gICAgYmFza2V0SXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT5cclxuICApOiBTZWFyY2hPYmplY3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX2dldEhpZ2hlc3RTZWFyY2hQcmlvcml0eU9iamVjdChiYXNrZXRJdGVtcykuY3VycmVudEl0ZW07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRIaWdoZXN0U2VhcmNoUHJpb3JpdHlPYmplY3QoXHJcbiAgICBiYXNrZXRJdGVtczogUmVjb3JkPFNlcnZpY2VUeXBlLCBCYXNrZXRJdGVtPiA9IHt9IGFzIFJlY29yZDxcclxuICAgICAgU2VydmljZVR5cGUsXHJcbiAgICAgIEJhc2tldEl0ZW1cclxuICAgID5cclxuICApOiBIaWdoZXN0U2VhcmNoUHJpb3JpdHlPYmplY3RJbnRlcmZhY2Uge1xyXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5zZWFyY2hfb2JqZWN0cykucmVkdWNlKFxyXG4gICAgICAoeyBoaWdoZXN0LCBjdXJyZW50SXRlbSB9LCBpdGVtOiBTZWFyY2hPYmplY3QpID0+IHtcclxuICAgICAgICBpZiAoaXRlbS5jaG9zZW4gJiYgaXRlbS5wcmlvcml0eSA8IGhpZ2hlc3QpIHtcclxuICAgICAgICAgIGlmICghYmFza2V0SXRlbXNbaXRlbS50eXBlIGFzIFNlcnZpY2VUeXBlXSkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBoaWdoZXN0OiBpdGVtLnByaW9yaXR5LCBjdXJyZW50SXRlbTogaXRlbSB9O1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaXRlbS5jaG9zZW4gPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgaGlnaGVzdCwgY3VycmVudEl0ZW0gfTtcclxuICAgICAgfSxcclxuICAgICAgeyBoaWdoZXN0OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgY3VycmVudEl0ZW06IG51bGwgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGVkT3B0aW9ucygpOiBTZXJ2aWNlVHlwZVtdIHtcclxuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnNlYXJjaF9vYmplY3RzKS5yZWR1Y2UoKGN2LCBpdGVtSW5kZXgpID0+IHtcclxuICAgICAgaWYgKCh0aGlzLnNlYXJjaF9vYmplY3RzIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW2l0ZW1JbmRleF0uY2hvc2VuKSB7XHJcbiAgICAgICAgY3YucHVzaChpdGVtSW5kZXggYXMgU2VydmljZVR5cGUpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBjdjtcclxuICAgIH0sIFtdKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBpZiBzZWxlY3RlZCB0cmF2ZWxsZXJzIGNvbnRhaW5zIGFueSBndWVzdHMgd2l0aG91dCBhbGwgb2YgZGV0YWlsc1xyXG4gICAqL1xyXG4gIGhhc1NpbXBsZUd1ZXN0cygpOiBib29sZWFuIHtcclxuICAgIC8qcmV0dXJuICEhdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMuZmluZCgoeyBndWVzdCwgcGhvbmUsIG5hdGlvbmFsaXR5LCBlbWFpbCB9KSA9PiB7XHJcbiAgICAgIHJldHVybiBndWVzdCAmJiAhKCEhZW1haWwgJiYgISFwaG9uZSAmJiAhIW5hdGlvbmFsaXR5KTtcclxuICAgIH0pOyovXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBzZXQgdGhlIHNlYXJjaCBvYmplY3RzIHRvIHRoZSBnZXQgbWUgdGhlcmUgb2JqZWN0cyAtIGNhbGxlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIGdldCBtZSB0aGVyZSBzZWFyY2hlc1xyXG4gICAqL1xyXG4gIHNldEdldE1lVGhlcmVTZWFyY2hPYmplY3RzKCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coJysrKyBTZXR0aW5nIEdldE1lVGhlcmUgU2VhcmNoIE9iamVjdHMgKysrJyk7XHJcbiAgICB0aGlzLnNlYXJjaF9vYmplY3RzID0gdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMuZ2V0TWVUaGVyZVNlYXJjaE9iamVjdHMoKSk7XHJcbiAgfVxyXG5cclxuICByZXNldFNlYXJjaFBhcmFtcygpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKCdSZXNldGluZyBTZWFyY2ggUGFyYW1zIScpO1xyXG4gICAgdGhpcy5zZWFyY2hfb2JqZWN0cyA9IHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLmluaXRfc2VhcmNoX29iamVjdHMoKSk7XHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBCYXNlRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2UuU0VTU0lPTl9UUkFWRUxMRVIsXHJcbiAgICAgIHRoaXMuc2VhcmNoX29iamVjdHNcclxuICAgICk7XHJcbiAgICBPYmplY3QudmFsdWVzKHRoaXMuc2VhcmNoZXMpLmZvckVhY2goXHJcbiAgICAgIChwcm9kdWN0U2VhcmNoU2VydmljZTogQmFzZUVudGVycHJpc2VTZWFyY2g8YW55LCBhbnksIGFueVtdPikgPT4ge1xyXG4gICAgICAgIHByb2R1Y3RTZWFyY2hTZXJ2aWNlLnJlc2V0KCk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBjYW5TZWFyY2godHlwZTogU2VydmljZVR5cGUgfCBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIC8vIGNoZWNrIHRoYXQgdGhlIHNlbGVjdGVkIHR5cGUgaXMgY2hvc2VuLCBoYXMgaGlnaGVzdCBwcmlvcml0eSBhbmQgaGFzIG5vdCBhbHJlYWR5IGhhZCBhIGJvb2tpbmcgY2hvc2VuXHJcblxyXG4gICAgdGhpcy5kZXRlcm1pbmVIaWdoZXN0U2VhcmNoUHJpb3JpdHkoKTtcclxuICAgIC8vIGZpcnN0bHkgY2hlY2sgdGhhdCB0aGUgdHlwZSBvZiBzZWFyY2ggZXhpc3RzXHJcbiAgICBpZiAoKHRoaXMuc2VhcmNoX29iamVjdHMgYXMgUmVjb3JkPHN0cmluZywgYW55PilbdHlwZV0pIHtcclxuICAgICAgY29uc29sZS5sb2coJ2NhbiBzZWFyY2ggaGVyZScpO1xyXG4gICAgICAvLyBub3cgY2hlY2sgdGhhdCB0aGUgdHlwZSBpcyBjaG9zZW4gaGFzIGhpZ2hlc3QgcHJpb3JpdHlcclxuICAgICAgaWYgKFxyXG4gICAgICAgICh0aGlzLnNlYXJjaF9vYmplY3RzIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3R5cGVdLmNob3NlbiAmJlxyXG4gICAgICAgIHRoaXMuaGFzSGlnaGVzdFNlYXJjaFByaW9yaXR5KFxyXG4gICAgICAgICAgKHRoaXMuc2VhcmNoX29iamVjdHMgYXMgUmVjb3JkPHN0cmluZywgYW55PilbdHlwZV0ucHJpb3JpdHlcclxuICAgICAgICApXHJcbiAgICAgICkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHR5cGUgKyAnIGNhbiBiZSBzZWFyY2hlZCcpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBoYXNIaWdoZXN0U2VhcmNoUHJpb3JpdHkocHJpb3JpdHlWYWw6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy5kZXRlcm1pbmVIaWdoZXN0U2VhcmNoUHJpb3JpdHkoKTtcclxuICAgIHJldHVybiBwcmlvcml0eVZhbCA8PSB0aGlzLmhpZ2hlc3Rfc2VhcmNoX3ByaW9yaXR5O1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiAgQGRlc2MgLSBjb25jYXRpbmF0cyBhbGwgdGhlIHZhbGlkYXRpb24gbWVzc2FnZXMgYWNyb3NzIGFsbCBzZWxlY3RlZCB0eXBlcyArXHJcbiAgICogICB0cmF2ZWxsZXJzIChvciB3aWxsIGRvIHdoZW4gaXQncyBjb21wbGV0ZSkgVE9ETyAtIGFkZCBGbGlnaHQsIFJhaWwgQ2FyXHJcbiAgICoqL1xyXG4gIGdldEFsbEVycm9yTWVzc2FnZXMoKTogc3RyaW5nW10ge1xyXG4gICAgY29uc3QgY29uY2F0dGVkRXJyb3JzOiBzdHJpbmdbXSA9IHRoaXMudHJhdmVsbGVyVmFsaWRhdGlvbk1lc3NhZ2VzO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLkxvdW5nZV0uY2hvc2VuICYmXHJcbiAgICAgIHRoaXMuY2FuU2VhcmNoKFNlcnZpY2VUeXBlLkxvdW5nZSlcclxuICAgICkge1xyXG4gICAgICBjb25jYXR0ZWRFcnJvcnMucHVzaChcclxuICAgICAgICAuLi50aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkxvdW5nZV0udmFsaWRhdGlvbk1lc3NhZ2VzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLkNhcl0uY2hvc2VuICYmXHJcbiAgICAgIHRoaXMuY2FuU2VhcmNoKFNlcnZpY2VUeXBlLkNhcilcclxuICAgICkge1xyXG4gICAgICBjb25jYXR0ZWRFcnJvcnMucHVzaChcclxuICAgICAgICAuLi50aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkNhcl0udmFsaWRhdGlvbk1lc3NhZ2VzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLlJhaWxdLmNob3NlbiAmJlxyXG4gICAgICB0aGlzLmNhblNlYXJjaChTZXJ2aWNlVHlwZS5SYWlsKVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbmNhdHRlZEVycm9ycy5wdXNoKFxyXG4gICAgICAgIC4uLnRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF0udmFsaWRhdGlvbk1lc3NhZ2VzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLlBhcmtpbmddLmNob3NlbiAmJlxyXG4gICAgICB0aGlzLmNhblNlYXJjaChTZXJ2aWNlVHlwZS5QYXJraW5nKVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbmNhdHRlZEVycm9ycy5wdXNoKFxyXG4gICAgICAgIC4uLnRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuUGFya2luZ10udmFsaWRhdGlvbk1lc3NhZ2VzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLkNhYl0uY2hvc2VuICYmXHJcbiAgICAgIHRoaXMuY2FuU2VhcmNoKFNlcnZpY2VUeXBlLkNhYilcclxuICAgICkge1xyXG4gICAgICBjb25jYXR0ZWRFcnJvcnMucHVzaChcclxuICAgICAgICAuLi50aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkNhYl0udmFsaWRhdGlvbk1lc3NhZ2VzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLkhvdGVsXS5jaG9zZW4gJiZcclxuICAgICAgdGhpcy5jYW5TZWFyY2goU2VydmljZVR5cGUuSG90ZWwpXHJcbiAgICApIHtcclxuICAgICAgY29uY2F0dGVkRXJyb3JzLnB1c2goXHJcbiAgICAgICAgLi4udGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5Ib3RlbF0udmFsaWRhdGlvbk1lc3NhZ2VzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgIGlmICh0aGlzLnNlYXJjaF9vYmplY3RzLmhvdGVsLmNob3NlbiAmJiB0aGlzLmNhblNlYXJjaChUcmF2ZWxUeXBlRW51bS5IT1RFTCkpIHtcclxuICAgICAgY29uY2F0dGVkRXJyb3JzID0gY29uY2F0dGVkRXJyb3JzLmNvbmNhdCh0aGlzLmhvdGVsLnZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBpZiAodGhpcy5zZWFyY2hfb2JqZWN0cy5mbGlnaHQuY2hvc2VuICYmIHRoaXMuY2FuU2VhcmNoKFRyYXZlbFR5cGVFbnVtLkZMSUdIVCkpIHtcclxuICAgICAgY29uY2F0dGVkRXJyb3JzID0gY29uY2F0dGVkRXJyb3JzLmNvbmNhdCh0aGlzLmZsaWdodC52YWxpZGF0aW9uTWVzc2FnZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNlYXJjaF9vYmplY3RzLnBhcmtpbmcuY2hvc2VuICYmIHRoaXMuY2FuU2VhcmNoKFRyYXZlbFR5cGVFbnVtLkFJUl9QQVJLSU5HKSkge1xyXG4gICAgICBjb25jYXR0ZWRFcnJvcnMucHVzaCguLi50aGlzLnBhcmtpbmcudmFsaWRhdGlvbk1lc3NhZ2VzKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zZWFyY2hfb2JqZWN0cy50YXhpLmNob3NlbiAmJiB0aGlzLmNhblNlYXJjaChUcmF2ZWxUeXBlRW51bS5UQVhJKSkge1xyXG4gICAgICBjb25jYXR0ZWRFcnJvcnMucHVzaCguLi50aGlzLnRheGkudmFsaWRhdGlvbk1lc3NhZ2VzKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zZWFyY2hfb2JqZWN0cy5ldXJvc3Rhci5jaG9zZW4gJiYgdGhpcy5jYW5TZWFyY2goVHJhdmVsVHlwZUVudW0uRVVST1NUQVIpKSB7XHJcbiAgICAgIGNvbmNhdHRlZEVycm9ycy5wdXNoKC4uLnRoaXMuZXVyb3N0YXIudmFsaWRhdGlvbk1lc3NhZ2VzKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zZWFyY2hfb2JqZWN0cy5jb2FjaC5jaG9zZW4gJiYgdGhpcy5jYW5TZWFyY2goVHJhdmVsVHlwZUVudW0uQ09BQ0gpKSB7XHJcbiAgICAgIGNvbmNhdHRlZEVycm9ycy5wdXNoKC4uLnRoaXMuY29hY2gudmFsaWRhdGlvbk1lc3NhZ2VzKTtcclxuICAgIH0qL1xyXG4gICAgdGhpcy5lcnJvcnMubmV4dChjb25jYXR0ZWRFcnJvcnMpO1xyXG4gICAgcmV0dXJuIGNvbmNhdHRlZEVycm9ycztcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCB0cmF2ZWxsZXJzQ29udGFpblVzZXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5maW5kKCh0cmF2ZWxsZXI6IFRyYXZlbGxlcikgPT4ge1xyXG4gICAgICByZXR1cm4gdHJhdmVsbGVyLmlkID09PSB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJJZCgpLnRvU3RyaW5nKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB2YWxpZGF0ZVRyYXZlbGxlcnMoKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLnRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlcyA9IFtdO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy51c2VyU2VydmljZS5mdWxsVXNlckRldGFpbHMudXNlckRhdGEudmFsdWUuYm9va2VyX3R5cGUpIHtcclxuICAgICAgY2FzZSBCb29rZXJUeXBlLlNlbGZCb29rOlxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICEoXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLnRyYXZlbGxlcnNDb250YWluVXNlcigpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAvLyB0aGlzIHNob3VsZCBuZXZlciB0cmlnZ2VyIHVuZGVyIG5vcm1hbCBjb25kaXRpb25zIGFzIHRoZSB1c2VyIHNob3VsZCBiZSBsb2FkZWQgaW4gYXMgYSB0cmF2ZWxsZXIgb24gbG9naW5cclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVyVmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgICAgICdDdXJyZW50IHVzZXIgbXVzdCBiZSBhIHRyYXZlbGxlcidcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBCb29rZXJUeXBlLkJvb2tlcldpdGhTZWxmOlxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICEodGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMubGVuZ3RoIDwgMSkgfHxcclxuICAgICAgICAgICF0aGlzLnRyYXZlbGxlcnNDb250YWluVXNlcigpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2UgYWRkIHlvdXIgc2VsZi4nKTtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVyX2Vycm9yID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQm9va2VyVHlwZS5Cb29rZXI6XHJcbiAgICAgIGNhc2UgQm9va2VyVHlwZS5Db21wYW55OlxyXG4gICAgICBjYXNlIEJvb2tlclR5cGUuQ29tcGFueUdyb3VwOlxyXG4gICAgICBjYXNlIEJvb2tlclR5cGUuT2ZmaWNlOlxyXG4gICAgICBjYXNlIEJvb2tlclR5cGUuVG1jOlxyXG4gICAgICBjYXNlIEJvb2tlclR5cGUuUm9vdDpcclxuICAgICAgICBpZiAoISh0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5sZW5ndGggPj0gMSkpIHtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVyVmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgICAgICdQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSB0cmF2ZWxsZXInXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsZXJfZXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aGlzLnRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICAgJ1VucmVjb2duaXNlZCB1c2VyIHR5cGUhIC0gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydC4nXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgICByZXR1cm4gdGhpcy50cmF2ZWxsZXJWYWxpZGF0aW9uTWVzc2FnZXMubGVuZ3RoID09PSAwO1xyXG4gIH1cclxuXHJcbiAgZmluZFBheEluVHJhdmVsbGVycyh1c2VybmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMuZmluZCgodHJhdmVsbGVyOiBUcmF2ZWxsZXIpID0+IHtcclxuICAgICAgcmV0dXJuIHVzZXJuYW1lID09PSB0cmF2ZWxsZXIuZW1haWw7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlRm9ybXMoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBzZWFyY2hPYmplY3Q6IFNlYXJjaE9iamVjdCA9IHRoaXMuX2ZpbmRTZWFyY2hPYnRlY3QoKTtcclxuICAgIHRoaXMuZ2V0QWxsRXJyb3JNZXNzYWdlcygpO1xyXG4gICAgaWYgKHNlYXJjaE9iamVjdCkge1xyXG4gICAgICB0aGlzLmVycm9ycy5uZXh0KFxyXG4gICAgICAgIHRoaXMuc2VhcmNoZXNbc2VhcmNoT2JqZWN0LnR5cGUgYXMga2V5b2YgU2VhcmNoUGFyYW1zXS5tZXNzYWdlcy52YWx1ZVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIHRoaXMudmFsaWRhdGVUcmF2ZWxsZXJzKCkgJiZcclxuICAgICAgICB0aGlzLnNlYXJjaGVzW3NlYXJjaE9iamVjdC50eXBlIGFzIGtleW9mIFNlYXJjaFBhcmFtc10uaXNWYWxpZC52YWx1ZVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZmluZFNlYXJjaE9idGVjdCgpOiBTZWFyY2hPYmplY3QgfCBudWxsIHtcclxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuc2VhcmNoX29iamVjdHMpLmZpbmQoKG9iajogU2VhcmNoT2JqZWN0KSA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgISFvYmogJiYgb2JqLnByaW9yaXR5ID09PSB0aGlzLmhpZ2hlc3Rfc2VhcmNoX3ByaW9yaXR5ICYmIG9iai5jaG9zZW5cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRTZWFyY2hlcyh1cmw/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMubmV3U2VhcmNoU3RhcnRlZC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5zZWFyY2hfbG9hZGluZyA9IHRydWU7XHJcbiAgICBsZXQgc2VhcmNoT2JqZWN0OiBTZWFyY2hPYmplY3Q7XHJcbiAgICBzZWFyY2hPYmplY3QgPSB0aGlzLl9maW5kU2VhcmNoT2J0ZWN0KCk7XHJcbiAgICBpZiAoc2VhcmNoT2JqZWN0KSB7XHJcbiAgICAgIHNlYXJjaE9iamVjdC5jaG9zZW4gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cmwpIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0pO1xyXG4gICAgICBpZiAodGhpcy5zZWFyY2hlcy5JTlRFUk5BVElPTkFMX1JBSUwpIHtcclxuICAgICAgICB0aGlzLnN1Ym1pdElybEZvcm0oKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgc2VhcmNoT2JqZWN0ICYmXHJcbiAgICAgICF0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoc2VhcmNoT2JqZWN0LnJlc3VsdFVybClcclxuICAgICkge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbc2VhcmNoT2JqZWN0LnJlc3VsdFVybF0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qSWYgdGhlIHNlYXJjaCBleGNlZWRzIHRoZSB0aW1lb3V0IHRpbWUsIGNhbmNlbCBzZWFyY2ggYW5kIHRlbGwgT0JUIHRoYXQgaXQncyB0aW1lZCBvdXQqL1xyXG4gICAgLy8gY29uc3QgY29udGV4dCA9IHRoaXM7XHJcbiAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgaWYgKGNvbnRleHQuc2VhcmNoX2xvYWRpbmcpIHtcclxuICAgIC8vICAgICBjb250ZXh0LnNlYXJjaF9sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAvLyAgICAgY29udGV4dC5zZWFyY2hUaW1lZE91dC5uZXh0KHRydWUpO1xyXG4gICAgLy8gICAgIGNvbnRleHQuc2VhcmNoTG9hZGluZ0RvbmUubmV4dCh0cnVlKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSwgdGhpcy5lbnZpcm9ubWVudC5zZWFyY2hUaW1lb3V0KTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBQcm9taXNlLmFsbChcclxuICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMuc2VhcmNoZXMpLm1hcChcclxuICAgICAgICAgIChzZWFyY2g6IEJhc2VFbnRlcnByaXNlU2VhcmNoPGFueSwgYW55LCBhbnlbXT4pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuICEhc2VhcmNoICYmXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tzZWFyY2gudHlwZV0gJiZcclxuICAgICAgICAgICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW3NlYXJjaC50eXBlXS5jaG9zZW5cclxuICAgICAgICAgICAgICA/IHNlYXJjaC5zdGFydFNlYXJjaCgpXHJcbiAgICAgICAgICAgICAgOiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIClcclxuICAgICAgKS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICB0aGlzLnNlYXJjaF9sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hMb2FkaW5nRG9uZS5uZXh0KHRydWUpO1xyXG4gICAgICB9KTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICB0aGlzLnNlYXJjaF9sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VhcmNoTG9hZGluZ0RvbmUubmV4dCh0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFRheGlTdGF0aW9uTG9jYXRpb25zKFxyXG4gICAgdGVybTogc3RyaW5nLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxSYWlsQWlycG9ydFtdPiB7XHJcbiAgICByZXR1cm4gdGVybS5sZW5ndGggPCAzXHJcbiAgICAgID8gb2YoW10pXHJcbiAgICAgIDogb2YoW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogJ01hbmNoZXN0ZXIgQWlycG90JyxcclxuICAgICAgICAgICAgaXNhaXJwb3J0OiB0cnVlLFxyXG4gICAgICAgICAgICBzdXBwbGllcl9jb2RlOiAnTUFOJyxcclxuICAgICAgICAgICAgYWRkcmVzczogJ01hbmNoZXN0ZXIgQWlycG9ydCcsXHJcbiAgICAgICAgICAgIHBvc3Rjb2RlOiAnTTkwIDFRWCdcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uOiAnTWFuY2hlc3RlciBQaWNjYWRpbGx5JyxcclxuICAgICAgICAgICAgaXNhaXJwb3J0OiBmYWxzZSxcclxuICAgICAgICAgICAgc3VwcGxpZXJfY29kZTogJ01NQU4nLFxyXG4gICAgICAgICAgICBhZGRyZXNzOiAnTWFuY2hlc3RlciBQaWNjYWRpbGx5JyxcclxuICAgICAgICAgICAgcG9zdGNvZGU6ICdNMSAyUFonXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogJ0xvbmRvbiBIZWF0aHJvdycsXHJcbiAgICAgICAgICAgIGlzYWlycG9ydDogdHJ1ZSxcclxuICAgICAgICAgICAgc3VwcGxpZXJfY29kZTogJ0xIUicsXHJcbiAgICAgICAgICAgIGFkZHJlc3M6ICdMb25kb24gSGVhdGhyb3cgQWlycG9ydCcsXHJcbiAgICAgICAgICAgIHBvc3Rjb2RlOiAnVFc2IDFFVydcclxuICAgICAgICAgIH1cclxuICAgICAgICBdKTtcclxuICB9XHJcblxyXG4gIGdldEFkZHJlc3Nlcyhpc0xvYWRpbmc6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPik6IE9ic2VydmFibGU8QWRkcmVzc0Zvcm1bXT4ge1xyXG4gICAgcmV0dXJuIG9mKFtcclxuICAgICAge1xyXG4gICAgICAgIEhvdXNlOiAnQ2VjaWwgQ291cnQnLFxyXG4gICAgICAgIFN0cmVldDogJzI4LTM2IENlY2lsIFJvYWQnLFxyXG4gICAgICAgIFRvd246ICdIYWxlJyxcclxuICAgICAgICBQb3N0Q29kZTogJ1dBMTUgOVBCJyxcclxuICAgICAgICBDb3VudHJ5OiAnVUsnXHJcbiAgICAgIH1cclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0VXNlckFkZHJlc3NlcyhcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8QWRkcmVzc0Zvcm1bXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMudXNlckFkZHJlc3Nlc0ZldGNoZXIuZmV0Y2hMaXN0KCkucGlwZShcclxuICAgICAgdGFrZSgxKSxcclxuICAgICAgbWFwKChyZXN1bHRzOiBhbnkpOiBhbnkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXN1bHRzLm1hcCgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIElEOiByZXN1bHQuaWQsXHJcbiAgICAgICAgICAgIEhvdXNlOiByZXN1bHQubnVtYmVyT3JOYW1lLFxyXG4gICAgICAgICAgICBTdHJlZXQ6IHJlc3VsdC5zdHJlZXQsXHJcbiAgICAgICAgICAgIFRvd246IHJlc3VsdC50b3duLFxyXG4gICAgICAgICAgICBQb3N0Q29kZTogcmVzdWx0LnBvc3Rjb2RlLFxyXG4gICAgICAgICAgICBDb3VudHJ5OiByZXN1bHQuY291bnRyeUNvZGVcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlVXNlckFkZHJlc3NCeUlEKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYmFzZURlbGV0ZVVzZXJBZGRyZXNzVXBkYXRlci51cGRhdGVPbmUoeyBpZDogaWQgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRIb3RlbENoYWluKFxyXG4gICAgdGVybTogc3RyaW5nLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgaWYgKHRlcm0ubGVuZ3RoID4gMikge1xyXG4gICAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XHJcbiAgICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxTZWFyY2hIb3RlbENoYWluc1Jlc3VsdEFycmF5PiA9XHJcbiAgICAgICAgdGhpcy5zZWFyY2hIb3RlbENoYWluc0ZldGNoZXIuZmV0Y2hMaXN0KHsgcXVlcnk6IHRlcm0gfSk7XHJcbiAgICAgIGNvbnN0IGZ1bmMgPSAocmVzdWx0czogU2VhcmNoSG90ZWxDaGFpbnNSZXN1bHRBcnJheSk6IGFueVtdID0+IHtcclxuICAgICAgICBjb25zdCBkYXRhOiBhbnlbXSA9IHJlc3VsdHMubWFwKFxyXG4gICAgICAgICAgKHJlc3VsdDogU2VhcmNoSG90ZWxDaGFpbnNSZXN1bHQpOiBhbnkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIG5hbWU6IHJlc3VsdFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaXNMb2FkaW5nPy5uZXh0KGZhbHNlKTtcclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIG9icy5waXBlKHRha2UoMSksIG1hcChmdW5jKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9mKFtdKTtcclxuICB9XHJcblxyXG4gIGdldE9mZmljZU5hbWVzKFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxDb25mZXJtYU9mZmljZU5hbWVzW10+IHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZlcm1hT2ZmaWNlTmFtZXNGZXRjaGVyLmZldGNoTGlzdCgpLnBpcGUoXHJcbiAgICAgIHRha2UoMSksXHJcbiAgICAgIG1hcCgocmVzdWx0cyk6IGFueSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdHMpIHtcclxuICAgICAgICAgIHJldHVybiByZXN1bHRzPy5yZXN1bHRzPy5tYXAoKHJlc3VsdDogQ29uZmVybWFPZmZpY2VOYW1lcykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIGlkOiByZXN1bHQuaWQsXHJcbiAgICAgICAgICAgICAgbmFtZTogcmVzdWx0Lm5hbWVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICBpc0xvYWRpbmc/Lm5leHQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgZ2V0T2ZmaWNlKG9mZmljZUlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPENvbmZlcm1hT2ZmaWNlSW5mbz4ge1xyXG4gICAgaWYgKG9mZmljZUlkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbmZlcm1hT2ZmaWNlRmV0Y2hlci5mZXRjaE9uZSh7IG9mZmljZUlkIH0pLnBpcGUoXHJcbiAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICBtYXAoKHJlc3VsdHM6IENvbmZlcm1hT2ZmaWNlUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0cykge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cy5yZXN1bHRzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEFsbEhvdGVsQ2hhaW5zKCk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxHZXRIb3RlbENoYWluc1Jlc3VsdEFycmF5PiA9XHJcbiAgICAgIHRoaXMuZ2V0SG90ZWxDaGFpbnNGZXRjaGVyLmZldGNoTGlzdCgpO1xyXG4gICAgY29uc3QgZnVuYyA9IChyZXN1bHRzOiBHZXRIb3RlbENoYWluc1Jlc3VsdEFycmF5KTogYW55W10gPT4ge1xyXG4gICAgICBjb25zdCBkYXRhOiBhbnlbXSA9IHJlc3VsdHMubWFwKChyZXN1bHQ6IEdldEhvdGVsQ2hhaW5zUmVzdWx0KTogYW55ID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgbmFtZTogcmVzdWx0XHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsUmFpbFByb3ZpZGVycygpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8Z2V0UmFpbFByb3ZpZGVyc1Jlc3VsdEFycmF5PiA9XHJcbiAgICAgIHRoaXMuZ2V0UmFpbFByb3ZpZGVyc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XHJcbiAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IGdldFJhaWxQcm92aWRlcnNSZXN1bHRBcnJheSk6IGFueVtdID0+IHtcclxuICAgICAgY29uc3QgZGF0YTogYW55W10gPSByZXN1bHRzLm1hcCgocmVzdWx0OiBnZXRSYWlsUHJvdmlkZXJzUmVzdWx0KTogYW55ID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgbmFtZTogcmVzdWx0XHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2FySGlyZVByb2l2ZGVycygpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8R2V0Q2FySGlyZVByb3ZpZGVyc1Jlc3VsdEFycmF5PiA9XHJcbiAgICAgIHRoaXMuZ2V0Q2FySGlyZVByb3ZpZGVyc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XHJcbiAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IEdldENhckhpcmVQcm92aWRlcnNSZXN1bHRBcnJheSk6IGFueVtdID0+IHtcclxuICAgICAgY29uc3QgZGF0YTogYW55W10gPSByZXN1bHRzLm1hcChcclxuICAgICAgICAocmVzdWx0OiBHZXRDYXJIaXJlUHJvdmlkZXJzUmVzdWx0KTogYW55ID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG5hbWU6IHJlc3VsdFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsQWlybGluZXMoKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPEdldEFsbEFpcmxpbmVzUmVzdWx0QXJyYXk+ID1cclxuICAgICAgdGhpcy5nZXRBbGxBaXJsaW5lc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XHJcbiAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IEdldEFsbEFpcmxpbmVzUmVzdWx0QXJyYXkpOiBhbnlbXSA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGE6IGFueVtdID0gcmVzdWx0cy5tYXAoKHJlc3VsdDogR2V0QWxsQWlybGluZXNSZXN1bHQpOiBhbnkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgbWFwKGZ1bmMpKTtcclxuICB9XHJcblxyXG4gIGdldFJhaWxDYXJkcygpOiBPYnNlcnZhYmxlPFJlZmVyZW5jZVJhaWxDYXJkUXVhbGlmaWVyW10+IHtcclxuICAgIHJldHVybiB0aGlzLmdldFJhaWxDYXJkc0ZldGNoZXIuZmV0Y2hMaXN0KCkucGlwZShcclxuICAgICAgdGFrZSgxKSxcclxuICAgICAgbWFwKChyZXN1bHRzKTogYW55ID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0cykge1xyXG4gICAgICAgICAgY29uc3QgcmFpbENhcmRzID0gcmVzdWx0cy5tYXAoXHJcbiAgICAgICAgICAgIChyZXN1bHQ6IFJlZmVyZW5jZVJhaWxDYXJkUXVhbGlmaWVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IHJlc3VsdC5uYW1lLFxyXG4gICAgICAgICAgICAgICAgY29kZTogcmVzdWx0LmNvZGVcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuIHJhaWxDYXJkcy5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEFpcnBvcnRCeUNvZGUoY29kZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxBaXJwb3J0U2VhcmNoUmVzdWx0cz4ge1xyXG4gICAgaWYgKGNvZGUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoQWlycG9ydHNGZXRjaGVyLmZldGNoT25lKHsgcXVlcnk6IGNvZGUgfSkucGlwZShcclxuICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgIG1hcCgocmVzdWx0OiBBaXJwb3J0U2VhcmNoUmVzdWx0cykgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBUTyBCRSBPVkVSIFJJRERFTiBCWSBPQlQgU1VCQ0xBU1NFU1xyXG4gIHB1YmxpYyBpbml0X3NlYXJjaF9vYmplY3RzKCk6IFNlYXJjaE9iamVjdHMge1xyXG4gICAgcmV0dXJuIHt9O1xyXG4gIH1cclxuXHJcbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgICogU0VBUkNIIE9CSkVDVFMgRk9SIEdFVCBNRSBUSEVSRSBET09SIDIgRE9PUiAgICAgICAgICAqXHJcbiAgICogRGlmZmVyZW5jZShzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXHJcbiAgICogQWxsIG9iamVjdHMgaGF2ZSBhIHByaW9yaXR5IG9mIDEgc28gdGhhdCB0aGV5IGFyZSAgICAqXHJcbiAgICogc2VhcmNoZWQgYXQgdGhlIHNhbWUgdGltZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXHJcbiAgICogVXJscyBjaGFuZ2VkIHRvIGdldG1ldGhlcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAqXHJcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcbiAgcHJvdGVjdGVkIGdldE1lVGhlcmVTZWFyY2hPYmplY3RzKCk6IFNlYXJjaE9iamVjdHMge1xyXG4gICAgcmV0dXJuIHt9O1xyXG4gIH1cclxuICAvKlxyXG4gICAqICBAZGVzYyAtIGdldHMgYWxsIHNlbGVjdGVkIHRyYXZlbGxlcnNcclxuICAgKiAgIEltcGxlbWVudGVkIGZvciByYWlsIGNhcmQgcmVhc29ucyBpbiBMVVxyXG4gICAqKi9cclxuICBnZXRTZWxlY3RlZHRyYXZlbGxlcnMoKTogVHJhdmVsbGVyW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRTZWFyY2hPYmplY3RzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWFyY2hfb2JqZWN0cyA9IHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLmluaXRfc2VhcmNoX29iamVjdHMoKSk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICBUaGVzZSBhcmUgdGhlIHBvc3NpYmxlIGFycmF5IG9mIHZhbHVlcyBmcm9tIEFQSSBhcmUgZXhwdGVjdGVkIGFuZCBmdW5jdGlvbiBtYW5pcHVsYXRlIHRvIGNyZWF0ZSB0aGUgbGlzdFxyXG4gICAgW1wiTWFpblwiXVxyXG4gICAgW1wiMVwiXVxyXG4gICAgW1wiMVwiLCBcIjJcIl1cclxuICAgIFtcIjFcIiwgXCIyXCIsIFwiM1wiXVxyXG4gICAgW1wiMVwiLCBcIjJcIiwgXCIzXCIsIFwiNFwiXVxyXG4gICAgW1wiMVwiLCBcIjJcIiwgXCIzXCIsIFwiNFwiLCBcIjVcIl1cclxuICAgIFtcIlNvdXRoXCIsIFwiTm9ydGhcIl1cclxuICAqL1xyXG4gIHB1YmxpYyBwcm9jZXNzVGVybWluYWxzKHRlcm1pbmFsczogc3RyaW5nW10pOiBUZXJtaW5hbHNUeXBlW10ge1xyXG4gICAgY29uc3QgdGVtcFRlcm1pbmFsOiBUZXJtaW5hbHNUeXBlW10gPSBbXTtcclxuICAgIGlmIChcclxuICAgICAgdGVybWluYWxzLmluY2x1ZGVzKCcxJykgfHxcclxuICAgICAgdGVybWluYWxzLmluY2x1ZGVzKCcyJykgfHxcclxuICAgICAgdGVybWluYWxzLmluY2x1ZGVzKCczJykgfHxcclxuICAgICAgdGVybWluYWxzLmluY2x1ZGVzKCc0JykgfHxcclxuICAgICAgdGVybWluYWxzLmluY2x1ZGVzKCc1JylcclxuICAgICkge1xyXG4gICAgICB0ZW1wVGVybWluYWwucHVzaCh7IGtleTogJ0FueSBUZXJtaW5hbCcsIHZhbHVlOiAnQW55JyB9KTtcclxuICAgICAgdGVybWluYWxzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICB0ZW1wVGVybWluYWwucHVzaCh7IGtleTogYFRlcm1pbmFsICR7aXRlbX1gLCB2YWx1ZTogYCR7aXRlbX1gIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0ZXJtaW5hbHMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgdGVtcFRlcm1pbmFsLnB1c2goeyBrZXk6IGAke3Rlcm1pbmFsc1swXX0gVGVybWluYWxgLCB2YWx1ZTogJ0FueScgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGVtcFRlcm1pbmFsLnB1c2goeyBrZXk6ICdBbnkgVGVybWluYWwnLCB2YWx1ZTogJ0FueScgfSk7XHJcbiAgICAgICAgdGVybWluYWxzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgIHRlbXBUZXJtaW5hbC5wdXNoKHsga2V5OiBgJHtpdGVtfSBUZXJtaW5hbGAsIHZhbHVlOiBgJHtpdGVtfWAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0ZW1wVGVybWluYWw7XHJcbiAgfVxyXG5cclxuICBhc3luYyBzYXZlVXNlckFkZHJlc3MoXHJcbiAgICBhZGRyZXNzOiBTYXZlVXNlckFkZHJlc3NNdXRhdGlvblZhcmlhYmxlc1xyXG4gICk6IFByb21pc2U8YW55PiB7XHJcbiAgICBpZiAoYWRkcmVzcykge1xyXG4gICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHRoaXMuc2F2ZVVzZXJBZGRyZXNzVXBkYXRlclxyXG4gICAgICAgIC51cGRhdGVPbmUoYWRkcmVzcylcclxuICAgICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYW5Cb29rKHNlcnZpY2U6IFNlcnZpY2VUeXBlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZS5jYW5Cb29rKHNlcnZpY2UpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgaXNQb3N0Y29kZVZhaWxkKHBvc3Rjb2RlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiB0aGlzLmJhc2VWYWxpZGF0ZUlzUG9zdGNvZGVWYWxpZFRlc3Rlci50ZXN0KHsgcG9zdGNvZGUgfSk7XHJcbiAgfVxyXG5cclxuICAvKiBDcmVhdGUgUXVlcnkgRGVmYXVsdHMgU3RhcnQgKi9cclxuICAvKlxyXG4gICAqIENyZWF0ZSB0aGUgQ2FiIEhpcmUgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW0sIGF1dG8gZmlsbCB3aXRoIGRlZmF1bHRzIGlmIGZpZWxkcyBhcmUgZW1wdHkuXHJcbiAgICogQHBhcmFtICB7YW55fSAgICAgICAgICAgLi4uYXJncyBleGFtcGxlIC0gc2VhcmNoU2VydmljZS5zZXRDYWJIaXJlUXVlcnkoZGF0YS5xdWVyeSwgeyBkZXBhcnRzOiBtb21lbnREYXRlVGltZSB9KVxyXG4gICAqIEByZXR1cm4ge1F1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3N9ICAgICAgICAgUmV0dXJucyBRdWVyeVNlYXJjaENhYkhpcmVBcmdzIHR5cGVcclxuICAgKi9cclxuICBwdWJsaWMgbWFrZUNhYkhpcmVRdWVyeSguLi5hcmdzOiBhbnkpOiBDYWJIaXJlVGVtcFBhcmFtcyB7XHJcbiAgICBjb25zdCBkZWZhdWx0VmFsOiBDYWJIaXJlVGVtcFBhcmFtcyA9IHtcclxuICAgICAgYWR1bHRzOiAwLFxyXG4gICAgICBhaXJwb3J0OiBudWxsLFxyXG4gICAgICBjaGlsZHJlbjogMCxcclxuICAgICAgY291bnRyeUNvZGU6IG51bGwsXHJcbiAgICAgIGRlcGFydHM6IHRoaXMuaGVscGVycy5tYWtlTW9tZW50RGF5VGltZSgpLFxyXG4gICAgICBmcm9tQWRkcmVzczogbnVsbCxcclxuICAgICAgZnJvbVN0YXRpb246IG51bGwsXHJcbiAgICAgIGZyb21Mb2NhdGlvblR5cGU6IFRheGlGb3JtTW9kZS5BRERSRVNTLFxyXG4gICAgICBpbmZhbnRzOiAwLFxyXG4gICAgICB0b0FkZHJlc3M6IG51bGwsXHJcbiAgICAgIHRvU3RhdGlvbjogbnVsbCxcclxuICAgICAgdG9Mb2NhdGlvblR5cGU6IFRheGlGb3JtTW9kZS5BRERSRVNTLFxyXG4gICAgICB2ZWhpY2xlVHlwZTogQ2FiSGlyZVZlaGljbGVUeXBlLkFueSxcclxuICAgICAgdmlhc0Zyb206IG51bGwsXHJcbiAgICAgIHZpYXNUbzogbnVsbFxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnNhbmF0aXplUmV0dXJuczxDYWJIaXJlVGVtcFBhcmFtcz4oXHJcbiAgICAgIGRlZmF1bHRWYWwsXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIC4uLmFyZ3MpLFxyXG4gICAgICBbJ2RlcGFydHMnXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ3JlYXRlIHRoZSBDYXIgSGlyZSBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbSwgYXV0byBmaWxsIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cclxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAuLi5hcmdzIGV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLnNldENhckhpcmVRdWVyeShkYXRhLnF1ZXJ5LCB7IGRlcGFydHM6IG1vbWVudERhdGVUaW1lIH0pXHJcbiAgICogQHJldHVybiB7UXVlcnlTZWFyY2hDYXJIaXJlQXJnc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoQ2FySGlyZUFyZ3MgdHlwZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBtYWtlQ2FySGlyZVF1ZXJ5KC4uLmFyZ3M6IGFueSk6IENhckhpcmVUZW1wUGFyYW1zIHtcclxuICAgIGNvbnN0IGRlZmF1bHRWYWw6IENhckhpcmVUZW1wUGFyYW1zID0ge1xyXG4gICAgICBhZHVsdHM6IDAsXHJcbiAgICAgIGFpckNvbjogbnVsbCxcclxuICAgICAgY2FyQ2xhc3M6IG51bGwsXHJcbiAgICAgIGNhclR5cGU6IG51bGwsXHJcbiAgICAgIGNoaWxkcmVuOiAwLFxyXG4gICAgICBjaG9zZW5WZW5kb3I6IG51bGwsXHJcbiAgICAgIGNob3NlbkRpc3RhbmNlOiAnNScsXHJcbiAgICAgIGNpdHlEcm9wb2ZmOiBudWxsLFxyXG4gICAgICBjaXR5RHJvcG9mZkRlcG90OiBudWxsLFxyXG4gICAgICBjaXR5UGlja3VwOiBudWxsLFxyXG4gICAgICBjaXR5UGlja3VwRGVwb3Q6IG51bGwsXHJcbiAgICAgIGRyb3BvZmZfY291bnRyeTogJ0dCJyxcclxuICAgICAgZHJvcG9mZl9kYXRldGltZTogbnVsbCxcclxuICAgICAgZHJvcG9mZl9sb2NhdGlvbjogbnVsbCxcclxuICAgICAgZXN0aW1hdGVkTWlsZWFnZTogbnVsbCxcclxuICAgICAgbG9jYXRpb25UeXBlOiBudWxsLFxyXG4gICAgICBwaWNrdXBfY291bnRyeTogbnVsbCxcclxuICAgICAgcGlja3VwX2RhdGV0aW1lOiBudWxsLFxyXG4gICAgICBwaWNrdXBfbG9jYXRpb246IG51bGwsXHJcbiAgICAgIHBvc3Rjb2RlRHJvcG9mZjogbnVsbCxcclxuICAgICAgcG9zdGNvZGVEcm9wb2ZmUmF3OiBudWxsLFxyXG4gICAgICBwb3N0Y29kZVBpY2t1cDogbnVsbCxcclxuICAgICAgcG9zdGNvZGVQaWNrdXBSYXc6IG51bGwsXHJcbiAgICAgIHJldHVybl90b19waWNrdXA6IHRydWUsXHJcbiAgICAgIHRyYW5zbWlzc2lvbjogbnVsbFxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnNhbmF0aXplUmV0dXJuczxDYXJIaXJlVGVtcFBhcmFtcz4oXHJcbiAgICAgIGRlZmF1bHRWYWwsXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIC4uLmFyZ3MpLFxyXG4gICAgICBbJ3BpY2t1cF9kYXRldGltZScsICdkcm9wb2ZmX2RhdGV0aW1lJ11cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIENyZWF0ZXMgYSBGbGlnaHQgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW1zLCBhdXRvIGZpbGxzIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cclxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAgICAgICAgICAuLi5hcmdzIEV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLm1ha2VGbGlnaHRRdWVyeShkYXRhLnF1ZXJ5LCB7IG92ZXJyaWRlOiBcInByb3BlcnR5XCIgfSlcclxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaEZsaWdodHNBcmdzfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hGbGlnaHRzQXJncyB0eXBlXHJcbiAgICovXHJcbiAgcHVibGljIG1ha2VGbGlnaHRRdWVyeSguLi5hcmdzOiBhbnkpOiBGbGlnaHRUZW1wUGFyYW1zIHtcclxuICAgIGNvbnN0IG5vdyA9IHRoaXMuaGVscGVycy5tYWtlTW9tZW50RGF5VGltZSgpO1xyXG4gICAgY29uc3QgdG9tb3Jyb3cgPSB0aGlzLmhlbHBlcnMubWFrZU1vbWVudERheVRpbWUoMSk7XHJcbiAgICBjb25zdCBtb21lbnRPdXREYXRlVGltZSA9IHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXMobm93LCAzMCk7XHJcbiAgICBjb25zdCBtb21lbnRJbkRhdGVUaW1lID0gdGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyh0b21vcnJvdywgMzApO1xyXG5cclxuICAgIGNvbnN0IGRlZmF1bHRWYWw6IEZsaWdodFRlbXBQYXJhbXMgPSB7XHJcbiAgICAgIGFkdWx0czogMCxcclxuICAgICAgYXJyaXZlTG9jYXRpb246IG51bGwsXHJcbiAgICAgIGNhYmluQ2xhc3M6IEZsaWdodENhYmluQ2xhc3MuQW55LFxyXG4gICAgICBjaGlsZHJlbjogMCxcclxuICAgICAgY2hvc2VuU2VhcmNoVHlwZTogbnVsbCxcclxuICAgICAgZGVwYXJ0TG9jYXRpb246IG51bGwsXHJcbiAgICAgIGZhcmVUeXBlOiBGYXJlVHlwZS5GbGV4aWJsZSxcclxuICAgICAgaW5ib3VuZERhdGU6IG1vbWVudE91dERhdGVUaW1lLFxyXG4gICAgICBpblRpbWVDcml0ZXJpYTogVGltZVdpbmRvdy5EZXBhcnQsXHJcbiAgICAgIG1heENvbm5lY3Rpb25zOiBudWxsLFxyXG4gICAgICBpbmNsdWRlTmVhcmJ5QWlycG9ydHM6IGZhbHNlLFxyXG4gICAgICBtdWx0aURlc3RpbmF0aW9uOiBbXSxcclxuICAgICAgb3V0Qm91bmREYXRlOiBtb21lbnRJbkRhdGVUaW1lLFxyXG4gICAgICBvdXRUaW1lQ3JpdGVyaWE6IFRpbWVXaW5kb3cuRGVwYXJ0LFxyXG4gICAgICBwcmVmZXJyZWRDYXJyaWVyczogW251bGwsIG51bGwsIG51bGwsIG51bGxdLFxyXG4gICAgICByZXR1cm5DYWJpbkNsYXNzOiBGbGlnaHRDYWJpbkNsYXNzLkFueVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnNhbmF0aXplUmV0dXJuczxGbGlnaHRUZW1wUGFyYW1zPihcclxuICAgICAgZGVmYXVsdFZhbCxcclxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksXHJcbiAgICAgIFsnb3V0Qm91bmREYXRlJywgJ2luYm91bmREYXRlJ11cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIENyZWF0ZXMgYSBIb3RlbCBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbXMsIGF1dG8gZmlsbHMgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxyXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgICAgICAgICAgIC4uLmFyZ3MgRXhhbXBsZSAtIHNlYXJjaFNlcnZpY2UubWFrZUhvdGVsUXVlcnkoZGF0YS5xdWVyeSwgeyBvdmVycmlkZTogXCJwcm9wZXJ0eVwiIH0pXHJcbiAgICogQHJldHVybiB7UXVlcnlTZWFyY2hIb3RlbHNBcmdzfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hIb3RlbHNBcmdzIHR5cGVcclxuICAgKi9cclxuICBwdWJsaWMgbWFrZUhvdGVsUXVlcnkoLi4uYXJnczogYW55KTogSG90ZWxUZW1wUGFyYW1zIHtcclxuICAgIGNvbnN0IGRlZmF1bHRWYWwgPSB7XHJcbiAgICAgIGNoZWNraW5fZGF0ZTogbW9tZW50KCkuc2V0KCdob3VyJywgMjMpLnNldCgnbWludXRlJywgNTkpLFxyXG4gICAgICBjaGVja291dF9kYXRlOiBtb21lbnQoKS5hZGQoMSwgJ2RheScpLnNldCgnaG91cicsIDIzKS5zZXQoJ21pbnV0ZScsIDU5KSxcclxuICAgICAgY291bnRyeTogeyBjQ29kZTogJ0dCJywgY05hbWU6ICdVbml0ZWQgS2luZ2RvbScgfSxcclxuICAgICAgY3VycmVuY3k6ICdHQlAnLFxyXG4gICAgICBkaXN0YW5jZTogNSwgLy8gZGVmYXVsdCA1IG1pbGVzIHJhZGl1c1xyXG4gICAgICBob3RlbF9hdmFpbGFiaWxpdHk6IG51bGwsXHJcbiAgICAgIGhvdGVsX2NoYWluOiBudWxsLFxyXG4gICAgICBob3RlbF9uYW1lOiBudWxsLFxyXG4gICAgICBsb2NhdGlvbl90eXBlX3NlbGVjdDogTG9jYXRpb25UeXBlcy5BaXJwb3J0LFxyXG4gICAgICBsb2NhdGlvbjogbnVsbCwgLy8gbWlnaHQgd2FudCB0byBzcGxpdCB0aGlzIG91dCB0byBjaXR5LCBhaXJwb3J0LCBvZmZpY2UsIHJhaWxzdGF0aW9uIC0gdGhpcyB3aWxsIGRvIGZvciBub3dcclxuICAgICAgbm9fb2Zfb2NjdXBhbnRzOiAxLCAvLyBzaW1pbGFybHkgdGhpbmsgdGhpcyBpcyBhIG1heCBvZiAzXHJcbiAgICAgIG5vX29mX3Jvb21zOiAxLCAvLyBtYXggb2YgNCBpbiBvbGQgc2Ficywgbm90IHN1cmUgaGVyZVxyXG4gICAgICBvZmZpY2U6IG51bGwsXHJcbiAgICAgIHBvc3Rjb2RlOiBudWxsLFxyXG4gICAgICBwcmVmZXJlZF9ob3RlbHNfb25seTogZmFsc2UsXHJcbiAgICAgIHRyYWluc1N0YXRpb246IG51bGxcclxuICAgIH0gYXMgSG90ZWxUZW1wUGFyYW1zO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPEhvdGVsVGVtcFBhcmFtcz4oXHJcbiAgICAgIGRlZmF1bHRWYWwsXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIC4uLmFyZ3MpLFxyXG4gICAgICBbJ2NoZWNraW5fZGF0ZScsICdjaGVja291dF9kYXRlJ11cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIENyZWF0ZXMgYSBMb3VuZ2VzIHNlYXJjaCBxdWVyeSB3aXRoIHN1cHBsaWVkIHBhcmFtcywgYXV0byBmaWxscyB3aXRoIGRlZmF1bHRzIGlmIGZpZWxkcyBhcmUgZW1wdHkuXHJcbiAgICogQHBhcmFtICB7YW55fSAgICAgICAgICAgICAgICAgICAgLi4uYXJncyBFeGFtcGxlIC0gc2VhcmNoU2VydmljZS5tYWtlTG91bmdlc1F1ZXJ5KGRhdGEucXVlcnksIHsgb3ZlcnJpZGU6IFwicHJvcGVydHlcIiB9KVxyXG4gICAqIEByZXR1cm4ge1F1ZXJ5U2VhcmNoTG91bmdlc0FyZ3N9ICAgICAgICAgUmV0dXJucyBRdWVyeVNlYXJjaExvdW5nZXNBcmdzIHR5cGVcclxuICAgKi9cclxuICBwdWJsaWMgbWFrZUxvdW5nZXNRdWVyeSguLi5hcmdzOiBhbnkpOiBMb3VuZ2VzVGVtcFBhcmFtcyB7XHJcbiAgICBjb25zdCBkZWZhdWx0VmFsID0ge1xyXG4gICAgICBhZHVsdHM6IDAsXHJcbiAgICAgIGFycml2YWxEYXRldGltZTogbW9tZW50KCksXHJcbiAgICAgIGNoaWxkcmVuOiAwLFxyXG4gICAgICBpbmZhbnRzOiAwLFxyXG4gICAgICBsb2NhdGlvbkNvZGU6IG51bGwsXHJcbiAgICAgIHRlcm1pbmFsOiBudWxsXHJcbiAgICB9IGFzIExvdW5nZXNUZW1wUGFyYW1zO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPExvdW5nZXNUZW1wUGFyYW1zPihcclxuICAgICAgZGVmYXVsdFZhbCxcclxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksXHJcbiAgICAgIFsnYXJyaXZhbERhdGV0aW1lJ11cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIENyZWF0ZXMgYSBQYXJraW5nIHNlYXJjaCBxdWVyeSB3aXRoIHN1cHBsaWVkIHBhcmFtcywgYXV0byBmaWxscyB3aXRoIGRlZmF1bHRzIGlmIGZpZWxkcyBhcmUgZW1wdHkuXHJcbiAgICogQHBhcmFtICB7YW55fSAgICAgICAgICAgICAgICAgICAgLi4uYXJncyBFeGFtcGxlIC0gc2VhcmNoU2VydmljZS5tYWtlUGFya2luZ1F1ZXJ5KGRhdGEucXVlcnksIHsgb3ZlcnJpZGU6IFwicHJvcGVydHlcIiB9KVxyXG4gICAqIEByZXR1cm4ge1F1ZXJ5U2VhcmNoUGFya2luZ0FyZ3N9ICAgICAgICAgUmV0dXJucyBRdWVyeVNlYXJjaFBhcmtpbmdBcmdzIHR5cGVcclxuICAgKi9cclxuICBwdWJsaWMgbWFrZVBhcmtpbmdRdWVyeSguLi5hcmdzOiBhbnkpOiBQYXJraW5nVGVtcFBhcmFtcyB7XHJcbiAgICBjb25zdCBub3cgPSB0aGlzLmhlbHBlcnMubWFrZU1vbWVudERheVRpbWUoKTtcclxuICAgIGNvbnN0IHRvbW9ycm93ID0gdGhpcy5oZWxwZXJzLm1ha2VNb21lbnREYXlUaW1lKDEpO1xyXG4gICAgY29uc3QgbW9tZW50T3V0RGF0ZVRpbWUgPSB0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKG5vdywgMzApO1xyXG4gICAgY29uc3QgbW9tZW50SW5EYXRlVGltZSA9IHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXModG9tb3Jyb3csIDMwKTtcclxuXHJcbiAgICBjb25zdCBkZWZhdWx0VmFsID0ge1xyXG4gICAgICBhcnJpdmFsRGF0ZXRpbWU6IG1vbWVudE91dERhdGVUaW1lLFxyXG4gICAgICBjYXJQYXJrZWRGb3JZb3U6IG51bGwsXHJcbiAgICAgIGRlcGFydERhdGV0aW1lOiBtb21lbnRJbkRhdGVUaW1lLFxyXG4gICAgICBsb2NhdGlvbkNvZGU6IG51bGwsXHJcbiAgICAgIG1lZXRBbmRHcmVldDogbnVsbCxcclxuICAgICAgb25BaXJwb3J0OiBudWxsLFxyXG4gICAgICBvdXRGbGlnaHROdW1iZXI6IG51bGwsXHJcbiAgICAgIHBhcmtBbmRSaWRlOiBudWxsLFxyXG4gICAgICBwYXJrQW5kU3Ryb2xsOiBudWxsLFxyXG4gICAgICByZWNvbW1lbmRlZDogbnVsbCxcclxuICAgICAgdGVybWluYWw6IG51bGxcclxuICAgIH0gYXMgUGFya2luZ1RlbXBQYXJhbXM7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5hdGl6ZVJldHVybnM8UGFya2luZ1RlbXBQYXJhbXM+KFxyXG4gICAgICBkZWZhdWx0VmFsLFxyXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSxcclxuICAgICAgWydhcnJpdmFsRGF0ZXRpbWUnLCAnZGVwYXJ0RGF0ZXRpbWUnXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ3JlYXRlcyBhIFJhaWwgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW1zLCBhdXRvIGZpbGxzIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cclxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAgICAgICAgICAuLi5hcmdzIEV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLm1ha2VSYWlsUXVlcnkoZGF0YS5xdWVyeSwgeyBvdmVycmlkZTogXCJwcm9wZXJ0eVwiIH0pXHJcbiAgICogQHJldHVybiB7UXVlcnlTZWFyY2hSYWlsQXJnc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoUmFpbEFyZ3MgdHlwZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBtYWtlUmFpbFF1ZXJ5KC4uLmFyZ3M6IGFueSk6IFJhaWxUZW1wUGFyYW1zIHtcclxuICAgIGNvbnN0IHRpbWUgPSB0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKG1vbWVudCgpLCAzMCk7XHJcbiAgICBjb25zdCBkZWZhdWx0VmFsOiBSYWlsVGVtcFBhcmFtcyA9IHtcclxuICAgICAgYWlycG9ydEV4cHJlc3NTdGF0aW9uOiBudWxsLFxyXG4gICAgICBhcHBseVJhaWxjYXJkczogZmFsc2UsXHJcbiAgICAgIGNhcm5ldFRpY2tldDogZmFsc2UsXHJcbiAgICAgIGNob3NlblNlYXJjaENsYXNzOiBSYWlsQ2xhc3MuQWxsLFxyXG4gICAgICBjaG9zZW5TZWFyY2hUeXBlOiBSYWlsU2VhcmNoSm91cm5leVR5cGUuUmV0dXJuSm91cm5leSxcclxuICAgICAgZGlzYWJsZUF1dG9EaXNjb3VudHM6IGZhbHNlLFxyXG4gICAgICBleHRyYVRpbWU6IGZhbHNlLFxyXG4gICAgICBpbkJvdW5kRGF0ZVRpbWU6IHRpbWUsXHJcbiAgICAgIGlzQWlycG9ydEV4cHJlc3M6IGZhbHNlLFxyXG4gICAgICBub09mQWR1bHRzOiAwLFxyXG4gICAgICBub09mQ2hpbGRyZW46IDAsXHJcbiAgICAgIG91dGJvdW5kQ3JpdGVyaWE6IFJhaWxTZWFyY2hDcml0ZXJpYS5EZXBhcnQsXHJcbiAgICAgIG91dEJvdW5kRGF0ZVRpbWU6IHRpbWUsXHJcbiAgICAgIHByaW9yaXRpc2VCeVByaWNlOiBmYWxzZSxcclxuICAgICAgcmV0dXJuQ3JpdGVyaWE6IFJhaWxTZWFyY2hDcml0ZXJpYS5EZXBhcnQsXHJcbiAgICAgIHRyYXZlbGxpbmdGcm9tOiBudWxsLFxyXG4gICAgICB0cmF2ZWxsaW5nVG86IG51bGwsXHJcbiAgICAgIHZpYTogZmFsc2UsXHJcbiAgICAgIHZpYUxvY2F0aW9uOiBudWxsLFxyXG4gICAgICByYWlsQ2FyZHM6IG51bGxcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5hdGl6ZVJldHVybnM8UmFpbFRlbXBQYXJhbXM+KFxyXG4gICAgICBkZWZhdWx0VmFsLFxyXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSxcclxuICAgICAgWydpbkJvdW5kRGF0ZVRpbWUnLCAnb3V0Qm91bmREYXRlVGltZSddXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGVzIGEgUmFpbCBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbXMsIGF1dG8gZmlsbHMgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxyXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgICAgICAgICAgIC4uLmFyZ3MgRXhhbXBsZSAtIHNlYXJjaFNlcnZpY2UubWFrZUlybFF1ZXJ5KGRhdGEucXVlcnksIHsgb3ZlcnJpZGU6IFwicHJvcGVydHlcIiB9KVxyXG4gICAqIEByZXR1cm4ge1F1ZXJ5U2VhcmNoUmFpbEFyZ3N9ICAgICAgICAgUmV0dXJucyBRdWVyeVNlYXJjaFJhaWxBcmdzIHR5cGVcclxuICAgKi9cclxuICBwdWJsaWMgbWFrZUlybFF1ZXJ5KC4uLmFyZ3M6IGFueSk6IElybFRlbXBQYXJhbXMge1xyXG4gICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXMobW9tZW50KCksIDMwKTtcclxuICAgIGNvbnN0IGRlZmF1bHRWYWw6IElybFRlbXBQYXJhbXMgPSB7XHJcbiAgICAgIHN1cHBsaWVyOiBudWxsLCAvLyBJUkxTdXBwbGllciFcclxuICAgICAgY291bnRyeUNvZGU6ICcnLFxyXG4gICAgICBqb3VybmV5VHlwZTogSXJsSm91cm5leVR5cGUuUmV0dXJuSm91cm5leSwgLy8gSVJMSm91cm5leVR5cGUhXHJcbiAgICAgIGNsYXNzOiBudWxsLCAvLyBJUkxDbGFzc1xyXG4gICAgICBvdXRib3VuZERlcGFydHVyZURhdGVUaW1lOiB0aW1lLFxyXG4gICAgICBkZXBhcnR1cmVMb2NhdGlvbklkOiBudWxsLFxyXG4gICAgICBhcnJpdmFsTG9jYXRpb25JZDogbnVsbCxcclxuICAgICAgYWR1bHRzOiAwLFxyXG4gICAgICBjaGlsZHJlbjogMCxcclxuICAgICAgcmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWU6IHRpbWUsXHJcbiAgICAgIGlybERpc2NvdW50Q2FyZHM6IG51bGxcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5hdGl6ZVJldHVybnM8SXJsVGVtcFBhcmFtcz4oXHJcbiAgICAgIGRlZmF1bHRWYWwsXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIC4uLmFyZ3MpLFxyXG4gICAgICBbJ3JldHVybkRlcGFydHVyZURhdGVUaW1lJywgJ291dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUnXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ3JlYXRlcyBhIEV1cm9zdGFyIHNlYXJjaCBxdWVyeSB3aXRoIHN1cHBsaWVkIHBhcmFtcywgYXV0byBmaWxscyB3aXRoIGRlZmF1bHRzIGlmIGZpZWxkcyBhcmUgZW1wdHkuXHJcbiAgICogQHBhcmFtICB7YW55fSAgICAgICAgICAgICAgICAgICAgLi4uYXJncyBFeGFtcGxlIC0gc2VhcmNoU2VydmljZS5tYWtlRXVyb3N0YXJRdWVyeShkYXRhLnF1ZXJ5LCB7IG92ZXJyaWRlOiBcInByb3BlcnR5XCIgfSlcclxuICAgKiBAcmV0dXJuIHtFdXJvc3RhclRlbXBQYXJhbXN9ICAgICAgICAgUmV0dXJucyBRdWVyeVNlYXJjaEV1cm9zdGFyQXJncyB0eXBlXHJcbiAgICovXHJcbiAgcHVibGljIG1ha2VFdXJvc3RhclF1ZXJ5KC4uLmFyZ3M6IGFueSk6IEV1cm9zdGFyVGVtcFBhcmFtcyB7XHJcbiAgICBjb25zdCBub3cgPSB0aGlzLmhlbHBlcnMubWFrZU1vbWVudERheVRpbWUoKTtcclxuICAgIGNvbnN0IHRvbW9ycm93ID0gdGhpcy5oZWxwZXJzLm1ha2VNb21lbnREYXlUaW1lKDEpO1xyXG4gICAgY29uc3QgbW9tZW50T3V0RGF0ZVRpbWUgPSB0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKG5vdywgMzApO1xyXG4gICAgY29uc3QgbW9tZW50SW5EYXRlVGltZSA9IHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXModG9tb3Jyb3csIDMwKTtcclxuXHJcbiAgICBjb25zdCBkZWZhdWx0VmFsOiBFdXJvc3RhclRlbXBQYXJhbXMgPSB7XHJcbiAgICAgIGFkdWx0czogMCxcclxuICAgICAgYXJyaXZlTG9jYXRpb246IG51bGwsXHJcbiAgICAgIGNhYmluQ2xhc3M6IEZsaWdodENhYmluQ2xhc3MuQW55LFxyXG4gICAgICBjaGlsZHJlbjogMCxcclxuICAgICAgY2hvc2VuU2VhcmNoVHlwZTogRXVyb3N0YXJTZWFyY2hUeXBlLnJldHVybixcclxuICAgICAgZGVwYXJ0TG9jYXRpb246IG51bGwsXHJcbiAgICAgIGZhcmVUeXBlOiBGYXJlVHlwZS5GbGV4aWJsZSxcclxuICAgICAgaW5ib3VuZERhdGU6IG1vbWVudE91dERhdGVUaW1lLFxyXG4gICAgICBpblRpbWVDcml0ZXJpYTogVGltZVdpbmRvdy5EZXBhcnQsXHJcbiAgICAgIG1heENvbm5lY3Rpb25zOiBudWxsLFxyXG4gICAgICBpbmNsdWRlTmVhcmJ5QWlycG9ydHM6IGZhbHNlLFxyXG4gICAgICBtdWx0aURlc3RpbmF0aW9uOiBbXSxcclxuICAgICAgb3V0Qm91bmREYXRlOiBtb21lbnRJbkRhdGVUaW1lLFxyXG4gICAgICBvdXRUaW1lQ3JpdGVyaWE6IFRpbWVXaW5kb3cuRGVwYXJ0LFxyXG4gICAgICBwcmVmZXJyZWRDYXJyaWVyczogW251bGwsIG51bGwsIG51bGwsIG51bGxdLFxyXG4gICAgICByZXR1cm5DYWJpbkNsYXNzOiBGbGlnaHRDYWJpbkNsYXNzLkFueVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnNhbmF0aXplUmV0dXJuczxFdXJvc3RhclRlbXBQYXJhbXM+KFxyXG4gICAgICBkZWZhdWx0VmFsLFxyXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSxcclxuICAgICAgWydvdXRCb3VuZERhdGUnLCAnaW5ib3VuZERhdGUnXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ3JlYXRlcyBhIEZhc3RUcmFjayBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbXMsIGF1dG8gZmlsbHMgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxyXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgICAgICAgICAgIC4uLmFyZ3MgRXhhbXBsZSAtIHNlYXJjaFNlcnZpY2UubWFrZUZhc3RUcmFja1F1ZXJ5KGRhdGEucXVlcnksIHsgb3ZlcnJpZGU6IFwicHJvcGVydHlcIiB9KVxyXG4gICAqIEByZXR1cm4ge1F1ZXJ5U2VhcmNoTG91bmdlc0FyZ3N9ICAgICAgICAgUmV0dXJucyBRdWVyeVNlYXJjaExvdW5nZXNBcmdzIHR5cGVcclxuICAgKi9cclxuICBwdWJsaWMgbWFrZUZhc3RUcmFja1F1ZXJ5KC4uLmFyZ3M6IGFueSk6IEZhc3RUcmFja1RlbXBQYXJhbXMge1xyXG4gICAgY29uc3QgZGVmYXVsdFZhbCA9IHtcclxuICAgICAgYWR1bHRzOiAwLFxyXG4gICAgICBhcnJpdmFsRGF0ZXRpbWU6IG1vbWVudCgpLFxyXG4gICAgICBjaGlsZHJlbjogMCxcclxuICAgICAgbG9jYXRpb25Db2RlOiBudWxsXHJcbiAgICB9IGFzIEZhc3RUcmFja1RlbXBQYXJhbXM7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5hdGl6ZVJldHVybnM8RmFzdFRyYWNrVGVtcFBhcmFtcz4oXHJcbiAgICAgIGRlZmF1bHRWYWwsXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIC4uLmFyZ3MpLFxyXG4gICAgICBbJ2Fycml2YWxEYXRldGltZSddXHJcbiAgICApO1xyXG4gIH1cclxuICAvKiBDcmVhdGUgUXVlcnkgRGVmYXVsdHMgRW5kICovXHJcblxyXG4gIHNob3VsZEFkZFRyYXZlbGxlclN1YnNjcmlwdGlvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldEF1dG9Mb2dvdXRDb25maWcoKSB7XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIE92ZXJ3cml0ZSBpZiB0aGUgT0JUIGRpc3BsYXlzIGEgbGlzdCBvZiBvZmZpY2VzIGluc3RlYWQgb2Ygc2VhcmNoaW5nIG9uIHRoZW1cclxuICAgKi9cclxuICBwdWJsaWMgc2hvdWxkRmV0Y2hBbGxPZmZpY2VzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBpc0ZsaWdodHNHcm91cGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBnZXRDb3VudHJ5RnVsbE5hbWVGcm9tQ291bnRyeUNvZGUoY29kZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCBmdWxsTmFtZSA9ICdVbmtub3duJztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY291bnRyaWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGNvdW50cnkgPSB0aGlzLmNvdW50cmllc1tpXTtcclxuXHJcbiAgICAgIGlmIChjb3VudHJ5LmNDb2RlID09PSBjb2RlKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvdW50cnkuY05hbWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZnVsbE5hbWU7XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyUmVjZW50U2VhcmNoZXMoXHJcbiAgICBzZXJ2aWNlVHlwZT86IFNlcnZpY2VUeXBlLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxSZWNlbnRTZWFyY2hbXT4ge1xyXG4gICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xyXG4gICAgY29uc3QgcXVlcnkgPSB7IHNlcnZpY2VUeXBlIH07XHJcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8R2V0VXNlclJlY2VudFNlYXJjaGVzUmVzdWx0QXJyYXk+ID1cclxuICAgICAgdGhpcy5nZXRVc2VyUmVjZW50U2VhcmNoZXNGZXRjaGVyLmZldGNoTGlzdChxdWVyeSk7XHJcblxyXG4gICAgY29uc3QgZnVuYyA9IChcclxuICAgICAgcmVzdWx0czogR2V0VXNlclJlY2VudFNlYXJjaGVzUmVzdWx0QXJyYXlcclxuICAgICk6IFJlY2VudFNlYXJjaFtdID0+IHtcclxuICAgICAgY29uc3QgZGF0YTogUmVjZW50U2VhcmNoW10gPSByZXN1bHRzLm1hcChcclxuICAgICAgICAocmVzdWx0OiBHZXRVc2VyUmVjZW50U2VhcmNoZXNSZXN1bHQpOiBSZWNlbnRTZWFyY2ggPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaWQ6IHJlc3VsdC5pZCxcclxuICAgICAgICAgICAgbmFtZTogcmVzdWx0Lm5hbWUsXHJcbiAgICAgICAgICAgIHNlcnZpY2VUeXBlOiByZXN1bHQuc2VydmljZVR5cGUsXHJcbiAgICAgICAgICAgIHNlYXJjaEFyZ3M6IHJlc3VsdC5zZWFyY2hBcmdzLFxyXG4gICAgICAgICAgICBjcmVhdGVkQXQ6IHJlc3VsdC5jcmVhdGVkQXQsXHJcbiAgICAgICAgICAgIHVwZGF0ZWRBdDogcmVzdWx0LnVwZGF0ZWRBdCxcclxuICAgICAgICAgICAgdHJhdmVsRGF0ZTogcmVzdWx0LnRyYXZlbERhdGUsXHJcbiAgICAgICAgICAgIHRyYXZlbGxlcnM6IHJlc3VsdC50cmF2ZWxsZXJzXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgICAgaXNMb2FkaW5nPy5uZXh0KGZhbHNlKTtcclxuICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIG9icy5waXBlKHRha2UoMSksIG1hcChmdW5jKSk7XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyRmF2b3VyaXRlU2VhcmNoZXMoXHJcbiAgICBzZXJ2aWNlVHlwZT86IFNlcnZpY2VUeXBlLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxHZXRVc2VyRmF2b3VyaXRlU2VhcmNoZXNSZXN1bHRBcnJheT4ge1xyXG4gICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xyXG4gICAgY29uc3QgcXVlcnkgPSB7IHNlcnZpY2VUeXBlIH07XHJcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8R2V0VXNlckZhdm91cml0ZVNlYXJjaGVzUmVzdWx0QXJyYXk+ID1cclxuICAgICAgdGhpcy5nZXRVc2VyRmF2b3VyaXRlU2VhcmNoZXNGZXRjaGVyLmZldGNoTGlzdChxdWVyeSk7XHJcblxyXG4gICAgY29uc3QgZnVuYyA9IChyZXN1bHRzOiBHZXRVc2VyRmF2b3VyaXRlU2VhcmNoZXNSZXN1bHRBcnJheSkgPT4ge1xyXG4gICAgICBpc0xvYWRpbmc/Lm5leHQoZmFsc2UpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpLCB0YXAoZnVuYykpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlUmVjZW50U2VhcmNoQnlJRChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmJhc2VEZWxldGVSZWNlbnRTZWFyY2hVcGRhdGVyLnVwZGF0ZU9uZSh7IGlkOiBpZCB9KTtcclxuICB9XHJcbiAgZGVsZXRlRmF2b3VyaXRlU2VhcmNoQnlJRChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gdGhpcy5kZWxldGVGYXZvdXJpdGVTZWFyY2hVcGRhdGVyLnVwZGF0ZU9uZSh7IGlkOiBpZCB9KTtcclxuICB9XHJcblxyXG4gIHNhdmVSZWNlbnRTZWFyY2gocXVlcnk6IFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyk6IHZvaWQge1xyXG4gICAgaWYgKHF1ZXJ5KSB7XHJcbiAgICAgIHRoaXMuYmFzZVNhdmVSZWNlbnRTZWFyY2hVcGRhdGVyXHJcbiAgICAgICAgLnVwZGF0ZU9uZShxdWVyeSlcclxuICAgICAgICAucGlwZSh0YWtlKDEpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENvdmlkTWljcm9zaXRlVG9rZW4oKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiB0aGlzLmdldENvdmlkTWljcm9zaXRlVG9rZW5GZXRjaGVyLmZldGNoTGlzdCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IHRoZSBsaXN0IG9mIGV1cm9zdGFyIHN0YXRpb24gbG9jYXRpb25zIGJhc2VkIG9uIHNlYXJjaCB0ZXJtIGdpdmVuXHJcbiAgICogQHRvZG8gLSBmaWxsIHRoaXMgb3V0IHNvIHRoYXQgaXQgYWN0dWFsbHkgcGVyZm9ybXMgYSBodHRwIGNhbGxcclxuICAgKiBAcGFyYW0gdGVybSAtIHRoZSB0ZXJtIHdlIHdhbnQgdG8gc2VhcmNoIGJ5XHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBsb29rdXBFdXJvc3RhclN0YXRpb25zKHRlcm06IHN0cmluZyk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnNvbGUubG9nKCd0ZXJtfCAnLCB0ZXJtKTtcclxuICAgIGlmICh0ZXJtID09PSAnJykge1xyXG4gICAgICByZXR1cm4gb2YodGhpcy5ldXJvc3RhdGlvbnMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKFxyXG4gICAgICAgIHRoaXMuZXVyb3N0YXRpb25zLmZpbHRlcihcclxuICAgICAgICAgICh2KSA9PiB2LmRlc3RpbmF0aW9uLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0ZXJtLnRvTG93ZXJDYXNlKCkpID4gLTFcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWFyY2hUcmF2ZWxsZXJzKFxyXG4gICAgaW5wdXQ6IHN0cmluZyxcclxuICAgIHNlYXJjaFRyYXZlbGxlcnNCeTogVHJhdmVsbGVyU2VhcmNoVHlwZXNcclxuICApOiBPYnNlcnZhYmxlPFRyYXZlbGxlcltdPiB7XHJcbiAgICBjb25zdCB0eXBlOiBCb29rZXJUeXBlID0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyQm9va2luZ1R5cGUoKTtcclxuICAgIHRoaXMudHJhdmVsbGVyX2Vycm9yID0gZmFsc2U7XHJcbiAgICAvKiBUT0RPXHJcbiAgICBpZiAodGhpcy51c2VyU2VydmljZS51c2VBZ2VudENhbkJvb2tGb3IoKSkge1xyXG4gICAgICB0eXBlID0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRmF2b3JpdGVWYWx1ZSgnQWdlbnRDYW5Cb29rRm9yJyk7XHJcbiAgICB9Ki9cclxuICAgIGlmIChcclxuICAgICAgdHlwZSAmJlxyXG4gICAgICB0eXBlICE9PSBCb29rZXJUeXBlLlNlbGZCb29rICYmXHJcbiAgICAgIHR5cGUgIT09IEJvb2tlclR5cGUuVHJhdmVsbGVyICYmXHJcbiAgICAgIGlucHV0Lmxlbmd0aCA+PSAxXHJcbiAgICApIHtcclxuICAgICAgY29uc3QgaW5wdXRXb3JkcyA9IGlucHV0LnRvTG93ZXJDYXNlKCkubWF0Y2goLyhbXFx3XSkrL2cpO1xyXG4gICAgICBjb25zdCBhcmdzOiBTZWFyY2hVc2VyQ2FuQm9va0ZvclF1ZXJ5VmFyaWFibGVzID0ge307XHJcbiAgICAgIHN3aXRjaCAoc2VhcmNoVHJhdmVsbGVyc0J5KSB7XHJcbiAgICAgICAgY2FzZSBUcmF2ZWxsZXJTZWFyY2hUeXBlcy5uYW1lOlxyXG4gICAgICAgICAgYXJncy51c2VyTmFtZSA9IGlucHV0V29yZHMubGVuZ3RoID4gMSA/IGlucHV0V29yZHNbMF0gOiBpbnB1dDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgVHJhdmVsbGVyU2VhcmNoVHlwZXMuZW1haWw6XHJcbiAgICAgICAgICBhcmdzLmVtYWlsID0gaW5wdXQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFRyYXZlbGxlclNlYXJjaFR5cGVzLmVtcGxveWVlTnVtYmVyOlxyXG4gICAgICAgICAgYXJncy5lbXBsb3llZUlkID0gaW5wdXQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoVXNlcnNDYW5Cb29rRm9yRmV0Y2hlci5mZXRjaExpc3QoYXJncykucGlwZShcclxuICAgICAgICBtYXAoKGRhdGE6IFRyYXZlbGxlcltdKSA9PiB7XHJcbiAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oZWxwZXJzLmNsb25lKGRhdGEpLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gYS5zdXJuYW1lIDwgYi5zdXJuYW1lID8gLTEgOiBhLnN1cm5hbWUgPiBiLnN1cm5hbWUgPyAxIDogMDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEZsaWdodEZhcmVSdWxlcyhcclxuICAgIGZsaWdodDogSW5wdXRGbGlnaHRKb3VybmV5XHJcbiAgKTogT2JzZXJ2YWJsZTxHZXRGbGlnaHRGYXJlUnVsZXNSZXN1bHRBcnJheT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0RmxpZ2h0RmFyZVJ1bGVzRmV0Y2hlci5mZXRjaExpc3QoeyBmbGlnaHQgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRSYWlsTGl2ZURlcGFydHVyZXMoXHJcbiAgICBzdGF0aW9uOiBzdHJpbmcsXHJcbiAgICBkYXRlVGltZT86IHN0cmluZ1xyXG4gICk6IE9ic2VydmFibGU8U2VhcmNoUmFpbExpdmVEZXBhcnR1cmVzUmVzdWx0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRSYWlsTGl2ZURlcGFydHVyZXNGZXRjaGVyLmZldGNoTGlzdCh7XHJcbiAgICAgIHN0YXRpb25Db2RlOiBzdGF0aW9uLFxyXG4gICAgICBkZXBhcnREYXRlVGltZTogZGF0ZVRpbWVcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmxpZ2h0U2VhdE1hcChcclxuICAgIGZsaWdodDogSW5wdXRGbGlnaHRKb3VybmV5XHJcbiAgKTogT2JzZXJ2YWJsZTxGbGlnaHRTZWF0TWFwUmVzcG9uc2VbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0RmxpZ2h0U2VhdE1hcEZldGNoZXIuZmV0Y2hMaXN0KHsgZmxpZ2h0OiBmbGlnaHQgfSkucGlwZShcclxuICAgICAgbWFwKChkYXRhOiBGbGlnaHRTZWF0TWFwUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgIHJldHVybiBkYXRhLnJlc3VsdHM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNhdmVGYXZvdXJpdGVTZWFyY2goXHJcbiAgICBzZWFyY2g6IFNhdmVGYXZvdXJpdGVTZWFyY2hNdXRhdGlvblZhcmlhYmxlc1xyXG4gICk6IE9ic2VydmFibGU8U2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYmFzZVNhdmVGYXZvdXJpdGVTZWFyY2hVcGRhdGVyLnVwZGF0ZU9uZShzZWFyY2gpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29uZmVybWFSb29tSW1hZ2VzKGhvdGVsSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8U3RyaW5nW10+IHtcclxuICAgIGlmIChob3RlbElkKSB7XHJcbiAgICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxTZWFyY2hIb3RlbENoYWluc1Jlc3VsdEFycmF5PiA9XHJcbiAgICAgICAgdGhpcy5nZXRDb25mZXJtYVJvb21JbWFnZXNGZXRjaGVyLmZldGNoTGlzdCh7IGhvdGVsSWQgfSk7XHJcbiAgICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVtYWlsQmFza2V0KGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEJhc2tldD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZW1haWxCYXNrZXRGZXRjaGVyLmZldGNoTGlzdCh7IGlkIH0pO1xyXG4gIH1cclxuXHJcbiAgc3VibWl0SXJsRm9ybSgpIHtcclxuICAgIGNvbnN0IGN1cnJlbnRVc2VyRW1haWwgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJFbWFpbCgpO1xyXG4gICAgbGV0IHNlYXJjaFBhcmFtcyA9IHRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWxdO1xyXG4gICAgbGV0IG9uQmVoYWxmT2Y6IHN0cmluZztcclxuICAgIGxldCBwYXNzZW5nZXJzOiB7fTtcclxuXHJcbiAgICAvLyBnZXQgcGFzc2VuZ2Vyc1xyXG4gICAgdGhpcy5hbGxTdWJzY3JpcHRpb24uYWRkKHRoaXMudHJhdmVsbGVySW5mb3JtYXRpb24uc3Vic2NyaWJlKCh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSkgPT4ge1xyXG4gICAgICBwYXNzZW5nZXJzID0gdHJhdmVsbGVycy5tYXAoKHRyYXZlbGxlcjogVHJhdmVsbGVyLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgbGV0IGFnZTogbnVtYmVyO1xyXG4gICAgICAgIGlmICh0cmF2ZWxsZXIuZG9iKXtcclxuICAgICAgICAgIGxldCB0aW1lRGlmZiA9IE1hdGguYWJzKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gbmV3IERhdGUodHJhdmVsbGVyLmRvYikuZ2V0VGltZSgpKTtcclxuICAgICAgICAgIGFnZSA9IE1hdGguZmxvb3IoKHRpbWVEaWZmIC8gKDEwMDAgKiAzNjAwICogMjQpKS8zNjUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgbmFtZTogdHJhdmVsbGVyLm5hbWUsXHJcbiAgICAgICAgICBhZ2U6IGFnZT8udG9TdHJpbmcoKSB8fCAnTm90IHNwZWNpZmllZCcsXHJcbiAgICAgICAgICBkaXNjb3VudENhcmQ6IGBEaXNjb3VudCBDYXJkICR7aW5kZXgrMX1gLFxyXG4gICAgICAgICAgbG95YWx0eUNhcmQ6IGBMb3lhbHR5IENhcmQgJHtpbmRleCsxfWBcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIG9uQmVoYWxmT2YgPSB0cmF2ZWxsZXJzWzBdLmVtYWlsID8gdHJhdmVsbGVyc1swXS5lbWFpbCA6IGN1cnJlbnRVc2VyRW1haWw7XHJcbiAgICB9KSk7XHJcblxyXG4gICAgLy8gZ2V0IGpyZnJlZmVyZW5jZVxyXG4gICAgdGhpcy5hbGxTdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICBzZWFyY2hQYXJhbXMucmVzdWx0cy5zdWJzY3JpYmUoKGlybEpvdXJuZXk6IElybEpvdXJuZXlPcHRpb25zW10pID0+IHtcclxuICAgICAgICBpZiAoaXJsSm91cm5leVswXT8uanJmcmVmZXJlbmNlKSB7XHJcbiAgICAgICAgICB0aGlzLmpyZlJlZmVyZW5jZSA9IGlybEpvdXJuZXlbMF0/LmpyZnJlZmVyZW5jZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIGlmICh0aGlzLmpyZlJlZmVyZW5jZSAmJiBwYXNzZW5nZXJzKSB7XHJcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgdHJhaW5OdW1iZXI6IHNlYXJjaFBhcmFtcy50cmFpbk51bWJlciB8fCAnQW55JyxcclxuICAgICAgICBkZXBhcnR1cmVTdGF0aW9uOiBzZWFyY2hQYXJhbXMudHJhdmVsbGluZ0Zyb20ubmFtZSxcclxuICAgICAgICBkZXN0aW5hdGlvblN0YXRpb246IHNlYXJjaFBhcmFtcy50cmF2ZWxsaW5nVG8ubmFtZSxcclxuICAgICAgICBvdXRib3VuZERhdGU6IHNlYXJjaFBhcmFtcy5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lLFxyXG4gICAgICAgIGluYm91bmREYXRlOiBzZWFyY2hQYXJhbXMucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUsXHJcbiAgICAgICAgYWRkaXRpb25hbEluZm86XHJcbiAgICAgICAgICBzZWFyY2hQYXJhbXMuYWRkaXRpb25hbEluc3RydWN0aW9ucyB8fCAnTm8gYWRkaXRpb25hbCBpbnN0cnVjdGlvbnMnLFxyXG4gICAgICAgIHNlcnZpY2VDbGFzczogc2VhcmNoUGFyYW1zLmlybENsYXNzIHx8ICdBbnknLFxyXG4gICAgICAgIG9mZmxpbmVSZWZlcmVuY2U6IHRoaXMuanJmUmVmZXJlbmNlLFxyXG4gICAgICAgIG5vdGlmeUVtYWlsOiBjdXJyZW50VXNlckVtYWlsLCBcclxuICAgICAgICBvbkJlaGFsZk9mOiBvbkJlaGFsZk9mLFxyXG4gICAgICAgIHBhc3NlbmdlcnM6IHBhc3NlbmdlcnNcclxuICAgICAgfTtcclxuICAgICAgY29uc29sZS5sb2cocGF5bG9hZCk7XHJcblxyXG4gICAgICB0aGlzLnNlbmRPZmZsaW5lTm90aWZpY2F0aW9uKHBheWxvYWQpLnN1YnNjcmliZShcclxuICAgICAgICAocmVzdWx0OiBJcmxPZmZsaW5lTm90aWZ5UmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcclxuICAgICAgICAgICAgICBNb2RhbFR5cGVzLk9mZmxpbmVSZXF1ZXN0RGlhbG9nQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgIHsgY2VudGVyZWQ6IHRydWUsIHNpemU6ICdtZCcgfSxcclxuICAgICAgICAgICAgICB7IGpyZlJlZmVyZW5jZTogdGhpcy5qcmZSZWZlcmVuY2UgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcclxuICAgICAgICAgICAgICBNb2RhbFR5cGVzLk1vZGFsRXJyb3JDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgeyBjZW50ZXJlZDogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgIHsgZXJyb3I6ICdVbmFibGUgdG8gc2VuZCBvZmZsaW5lIG5vdGlmaWNhdGlvbicgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbmRPZmZsaW5lTm90aWZpY2F0aW9uKFxyXG4gICAganJmUmVmZXJlbmNlOiBhbnlcclxuICApOiBPYnNlcnZhYmxlPElybE9mZmxpbmVOb3RpZnlSZXN1bHQ+IHtcclxuICAgIHJldHVybiB0aGlzLnNlbmRPZmZsaW5lTm90aWZpY2F0aW9uRmV0Y2hlci5mZXRjaE9uZShqcmZSZWZlcmVuY2UpO1xyXG4gIH1cclxufVxyXG4iXX0=
1551
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vYnRzZXJ2aWNlcy9iYXNlL3NyYy9saWIvdmVuZG9yL3NlcnZpY2VzL3NlYXJjaC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxTQUFTLE1BQU0sd0JBQXdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUduRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUsvRSxPQUFPLEVBSUwsVUFBVSxFQUNWLFFBQVEsRUFDUixTQUFTLEVBQ1QscUJBQXFCLEVBRXJCLFdBQVcsRUFFWCxrQkFBa0IsRUFVbEIsZ0JBQWdCLEVBS2hCLGNBQWMsRUFVZixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQy9FLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsVUFBVSxFQUNYLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDL0UsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixrQkFBa0IsRUFDbkIsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzQyxPQUFPLEVBQWEsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFTeEUsT0FBTyxFQU1M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USxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3BFLENBQUM7O0FBcmpFTSw2Q0FBaUIsR0FBVyxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCBDb3VudHJpZXMgZnJvbSAnLi4vZGF0YS9jb3VudHJpZXMuanNvbic7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZm9ya0pvaW4sIG9mLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQmFzZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2Jhc2UtZW50ZXJwcmlzZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUGFya2luZ0VudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL3BhcmtpbmctZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQge1xyXG4gIFNlYXJjaE9iamVjdCxcclxuICBTZWFyY2hPYmplY3RzXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zZWFyY2gtb2JqZWN0cy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1xyXG4gIEFkZHJlc3MsXHJcbiAgQWlycG9ydCxcclxuICBCYXNrZXRJdGVtLFxyXG4gIEJvb2tlclR5cGUsXHJcbiAgRmFyZVR5cGUsXHJcbiAgUmFpbENsYXNzLFxyXG4gIFJhaWxTZWFyY2hKb3VybmV5VHlwZSxcclxuICBTZWFyY2hBaXJwb3J0cyxcclxuICBTZXJ2aWNlVHlwZSxcclxuICBTYXZlVXNlckFkZHJlc3NNdXRhdGlvblZhcmlhYmxlcyxcclxuICBDYWJIaXJlVmVoaWNsZVR5cGUsXHJcbiAgQ29uZmVybWFPZmZpY2VOYW1lcyxcclxuICBDb25mZXJtYU9mZmljZUluZm8sXHJcbiAgQ29uZmVybWFPZmZpY2VSZXN1bHQsXHJcbiAgQ2FyYm9uQWxsb3dhbmNlLFxyXG4gIFJpc2tBbGVydCxcclxuICBSaXNrTGV2ZWwsXHJcbiAgR2V0Umlza0FsZXJ0c1F1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlYXJjaEFpcmxpbmVzLFxyXG4gIEFpcmxpbmVSZXN1bHQsXHJcbiAgRmxpZ2h0Q2FiaW5DbGFzcyxcclxuICBSZWZlcmVuY2VSYWlsQ2FyZFF1YWxpZmllcixcclxuICBTZWFyY2hVc2VyQ2FuQm9va0ZvclF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyxcclxuICBJcmxTdXBwbGllclN0YXRpb24sXHJcbiAgSXJsSm91cm5leVR5cGUsXHJcbiAgR2V0RmxpZ2h0RmFyZVJ1bGVzUXVlcnlWYXJpYWJsZXMsXHJcbiAgR2V0RmxpZ2h0U2VhdE1hcFF1ZXJ5VmFyaWFibGVzLFxyXG4gIElucHV0RmxpZ2h0Sm91cm5leSxcclxuICBGbGlnaHRTZWF0TWFwUmVzdWx0LFxyXG4gIEZsaWdodFNlYXRNYXBSZXNwb25zZSxcclxuICBTYXZlRmF2b3VyaXRlU2VhcmNoTXV0YXRpb25WYXJpYWJsZXMsXHJcbiAgQmFza2V0LFxyXG4gIElybEpvdXJuZXlPcHRpb25zLFxyXG4gIElybE9mZmxpbmVOb3RpZnlSZXN1bHRcclxufSBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcclxuaW1wb3J0IHsgTG91bmdlc0VudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2xvdW5nZXMtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBIb3RlbEVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2hvdGVsLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgQ2FyaGlyZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2NhcmhpcmUtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQge1xyXG4gIEZsaWdodEVudGVycHJpc2VTZWFyY2gsXHJcbiAgVGltZVdpbmRvd1xyXG59IGZyb20gJy4uL2NsYXNzZXMvZmxpZ2h0LWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgQ2FiSGlyZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2NhYmhpcmUtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQge1xyXG4gIFJhaWxFbnRlcnByaXNlU2VhcmNoLFxyXG4gIFJhaWxTZWFyY2hDcml0ZXJpYVxyXG59IGZyb20gJy4uL2NsYXNzZXMvcmFpbC1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IFRyYXZlbGxlciwgVHJhdmVsbGVyT2JqZWN0IH0gZnJvbSAnLi4vbW9kZWxzL3RyYXZlbGxlci5vYmplY3QnO1xyXG5pbXBvcnQgeyBCYXNlU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VIZWxwZXJSb3V0aW5lcyB9IGZyb20gJy4uL2NsYXNzZXMvaGVscGVycyc7XHJcbmltcG9ydCB7IEJhc2VIb3RlbEF2YWxpYmlsaXR5U2VydmljZSB9IGZyb20gJy4vaG90ZWwtYXZhbGxpYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlRW52aXJvbm1lbnQgfSBmcm9tICcuLi9jbGFzc2VzL2Vudmlyb21lbnQnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hQb3N0Y29kZUZldGNoZXIsXHJcbiAgU2VhcmNoUG9zdGNvZGVzUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL3NlYXJjaC1wb3N0Y29kZXMuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQWRkcmVzc0Zvcm0sXHJcbiAgQWlycG9ydFNlYXJjaFJlc3VsdHMsXHJcbiAgQ2FySGlyZURlcG90UmVzdWx0QXJyYXksXHJcbiAgQ291bnRyeUNvZGUsXHJcbiAgTG9jYXRpb25EZXRhaWxzLFxyXG4gIExvY2F0aW9uVHlwZXMsXHJcbiAgT0JUQWlycG9ydERldGFpbHMsXHJcbiAgUmFpbEFpcnBvcnQsXHJcbiAgUm91dGVyLFxyXG4gIFNlYXJjaENpdGllc1Jlc3VsdCxcclxuICBTZWFyY2hDaXRpZXNSZXN1bHRBcnJheSxcclxuICBTZWFyY2hQb3N0Y29kZXNSZXN1bHQsXHJcbiAgU2VhcmNoUG9zdGNvZGVzUmVzdWx0QXJyYXksXHJcbiAgU2VhcmNoUmFpbFN0YXRpb25zUmVzdWx0LFxyXG4gIFNlYXJjaFJhaWxTdGF0aW9uc1Jlc3VsdEFycmF5LFxyXG4gIFRlcm1pbmFsc1R5cGUsXHJcbiAgR2V0VXNlckNvbXBhbnlPZmZpY2VzUmVzdWx0QXJyYXksXHJcbiAgR2V0VXNlckNvbXBhbnlPZmZpY2VzUmVzdWx0LFxyXG4gIFNlYXJjaEhvdGVsQ2hhaW5zUmVzdWx0QXJyYXksXHJcbiAgU2VhcmNoSG90ZWxDaGFpbnNSZXN1bHQsXHJcbiAgQWlybGluZXNTZWFyY2hSZXN1bHQsXHJcbiAgT0JUQWlybGluZXNEZXRhaWxzLFxyXG4gIEdldFVzZXJSZWNlbnRTZWFyY2hlc1Jlc3VsdEFycmF5LFxyXG4gIEdldFVzZXJSZWNlbnRTZWFyY2hlc1Jlc3VsdCxcclxuICBSZWNlbnRTZWFyY2gsXHJcbiAgU2VhcmNoQ29uZmVybWFDaXRpZXNSZXN1bHQsXHJcbiAgQ29uZmVybWFPZmZpY2VOYW1lUmVzdWx0LFxyXG4gIEdldEZsaWdodEZhcmVSdWxlc1Jlc3VsdEFycmF5LFxyXG4gIFNlYXJjaFJhaWxMaXZlRGVwYXJ0dXJlc1Jlc3VsdCxcclxuICBTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0LFxyXG4gIEdldFVzZXJGYXZvdXJpdGVTZWFyY2hlc1Jlc3VsdEFycmF5LFxyXG4gIEdldEhvdGVsQ2hhaW5zUmVzdWx0QXJyYXksXHJcbiAgR2V0SG90ZWxDaGFpbnNSZXN1bHQsXHJcbiAgZ2V0UmFpbFByb3ZpZGVyc1Jlc3VsdCxcclxuICBnZXRSYWlsUHJvdmlkZXJzUmVzdWx0QXJyYXksXHJcbiAgR2V0QWxsQWlybGluZXNSZXN1bHQsXHJcbiAgR2V0QWxsQWlybGluZXNSZXN1bHRBcnJheSxcclxuICBHZXRDYXJIaXJlUHJvdmlkZXJzUmVzdWx0LFxyXG4gIEdldENhckhpcmVQcm92aWRlcnNSZXN1bHRBcnJheSxcclxuICBTZXJ2aWNlUHJvdmlkZXJcclxufSBmcm9tICcuLi90eXBlcy90eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaFJhaWxTdGF0aW9uc0ZldGNoZXIsXHJcbiAgU2VhcmNoUmFpbFN0YXRpb25zRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9zZWFyY2gtcmFpbC1zdGF0aW9ucy5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlTG91bmdlUXVvdGVGZXRjaGVyLFxyXG4gIExvdW5nZVF1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9sb3VuZ2UtcXVvdGUuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVBhcmtpbmdRdW90ZUZldGNoZXIsXHJcbiAgUGFya2luZ1F1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9wYXJraW5nLXF1b3RlLWZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VGbGlnaHRRdW90ZUZldGNoZXIsXHJcbiAgRmxpZ2h0UXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2ZsaWdodC1xdW90ZS5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlSG90ZWxRdW90ZUZldGNoZXIsXHJcbiAgSG90ZWxRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvaG90ZWwtcXVvdGUtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUNhcmhpcmVRdW90ZUZldGNoZXIsXHJcbiAgQ2FySGlyZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY2FyaGlyZS1xdW90ZS1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlQ2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXIsXHJcbiAgQ2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY2FyaGlyZS1hdmFpbGFiaWxpdHktZGV0YWlsLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VDYWJoaXJlUXVvdGVGZXRjaGVyLFxyXG4gIENhYmhpcmVRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY2FiaGlyZS1xdW90ZS1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlUmFpbFF1b3RlRmV0Y2hlcixcclxuICBSYWlsUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL3JhaWwtcXVvdGUtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUlybFF1b3RlRmV0Y2hlcixcclxuICBJcmxRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvaXJsLXF1b3RlLWZldGNoZXInO1xyXG5pbXBvcnQgeyBSZWdFeHBzIH0gZnJvbSAnLi4vbW9kZWxzL3JlZ2V4cC5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgU2VhcmNoUGFyYW1zXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hBaXJwb3J0c0ZldGNoZXIsXHJcbiAgU2VhcmNoQWlycG9ydHNRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLWFpcnBvcnRzLWZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hBaXJsaW5lc0ZldGNoZXIsXHJcbiAgU2VhcmNoQWlybGluZXNRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLWFpcmxpbmVzLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIFVzZXJTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gIFVzZXJTZXJ2aWNlc1xyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSXVzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaENpdHlGZXRjaGVyLFxyXG4gIFNlYXJjaENpdGllc1F1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9zZWFyY2gtY2l0aWVzLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hDb25mZXJtYUNpdHlGZXRjaGVyLFxyXG4gIFNlYXJjaENvbmZlcm1hQ2l0aWVzUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL3NlYXJjaC1jb25mZXJtYS1jaXRpZXMuZmV0Y2hlcic7XHJcbmltcG9ydCB7IEFic3RyYWN0SHR0cENhbGxTZXJ2aWNlIH0gZnJvbSAnLi9odHRwLWNhbGwuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IEhvdGVsQXZhbGluaWxpdHlGZXRjaGVyVHlwZSB9IGZyb20gJy4uL2ZldGNoZXJzL2hvdGVsLWF2YWxpYWJpbGl0eS1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlU2F2ZVVzZXJBZGRyZXNzVXBkYXRlcixcclxuICBTYXZlVXNlckFkZHJlc3NVcGRhdGVyVHlwZVxyXG59IGZyb20gJy4uL3VwZGF0ZXJzL3NhdmUtdXNlci1hZGRyZXNzLnVwZGF0ZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VVc2VyQWRkcmVzc2VzRmV0Y2hlcixcclxuICBVc2VyQWRkcmVzc0ZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvdXNlci1hZGRyZXNzZXMuZmV0Y2hlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VDb25mZXJtYU9mZmljZU5hbWVzRmV0Y2hlcixcclxuICBDb25mZXJtYU9mZmljZU5hbWVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2NvbmZlcm1hLW9mZmljZS1uYW1lcy5mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZUNvbmZlcm1hT2ZmaWNlRmV0Y2hlcixcclxuICBDb25mZXJtYU9mZmljZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY29uZmVybWEtb2ZmaWNlLmZldGNoZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlR2V0VXNlckNvbXBhbnlPZmZpY2VzRmV0Y2hlcixcclxuICBHZXRVc2VyQ29tcGFueU9mZmljZXNRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXVzZXItY29tcGFueS1vZmZpY2VzLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hIb3RlbENoYWluc0ZldGNoZXIsXHJcbiAgU2VhcmNoSG90ZWxDaGFpbnNRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLWhvdGVsLWNoYWlucy5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlR2V0Q29uZmVybWFSb29tSW1hZ2VzRmV0Y2hlcixcclxuICBHZXRDb25mZXJtYVJvb21JbWFnZXNRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWNvbmZlcm1hLXJvb20taW1hZ2VzLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VWYWxpZGF0ZUlzUG9zdGNvZGVWYWxpZFRlc3RlcixcclxuICBWYWxpZGF0ZUlzUG9zdGNvZGVWYWxpZFR5cGVcclxufSBmcm9tICcuLi90ZXN0ZXJzL3Bvc3Rjb2RlLXZhbGlkYXRlLnRlc3Rlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hEZXBvdEZldGNoZXIsXHJcbiAgU2VhcmNoRGVwb3RRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLWRlcG90cy5mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldFJhaWxTdGF0aW9uRmV0Y2hlcixcclxuICBHZXRSYWlsU3RhdGlvbkZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXJhaWwtc3RhdGlvbi5mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaElybFN0YXRpb25zRmV0Y2hlcixcclxuICBTZWFyY2hJcmxTdGF0aW9uc0ZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLWlybC1zdGF0aW9ucy5mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaENvbmZlcm1hUXVpY2tsaXN0RmV0Y2hlcixcclxuICBDb25mZXJtYVF1aWNrbGlzdEZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY29uZmVybWEtcXVpY2tsaXN0LmZldGNoZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlRGVsZXRlVXNlckFkZHJlc3NVcGRhdGVyLFxyXG4gIERlbGV0ZVVzZXJBZGRyZXNzRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi91cGRhdGVycy9yZW1vdmUtdXNlci1hZGRyZXNzLXVwZGF0ZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlRGVsZXRlUmVjZW50U2VhcmNoVXBkYXRlcixcclxuICBEZWxldGVSZWNlbnRTZWFyY2hGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL3VwZGF0ZXJzL3JlbW92ZS1yZWNlbnQtc2VhcmNoLXVwZGF0ZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlU2F2ZVJlY2VudFNlYXJjaFVwZGF0ZXIsXHJcbiAgU2F2ZVJlY2VudFNlYXJjaEZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vdXBkYXRlcnMvc2F2ZS1yZWNlbnQtc2VhcmNoLXVwZGF0ZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlU2F2ZUZhdm91cml0ZVNlYXJjaFVwZGF0ZXIsXHJcbiAgU2F2ZUZhdm91cml0ZVNlYXJjaEZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vdXBkYXRlcnMvc2F2ZS1mYXZvdXJpdGUtc2VhcmNoLXVwZGF0ZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlR2V0UmFpbExpdmVEZXBhcnR1cmVzRmV0Y2hlcixcclxuICBHZXRSYWlsTGl2ZURlcGFydHVyZXNGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1yYWlsLWxpdmUtZGVwYXJ0dXJlcy5mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7IEhvdGVsVGVtcFBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSWhvdGVsLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgUmFpbFRlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lyYWlsLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgRmxpZ2h0VGVtcFBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSWZsaWdodC1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IExvdW5nZXNUZW1wUGFyYW1zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JbG91bmdlcy1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IFBhcmtpbmdUZW1wUGFyYW1zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JcGFya2luZy1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7XHJcbiAgQ2FiSGlyZVRlbXBQYXJhbXMsXHJcbiAgVGF4aUZvcm1Nb2RlXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JY2FiaGlyZS1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IENhckhpcmVUZW1wUGFyYW1zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JY2FyaGlyZS1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldFVzZXJDdXJyZW50Q2FyYm9uQWxsb3dhbmNlRmV0Y2hlcixcclxuICBHZXRVc2VyQ3VycmVudENhcmJvbkFsbG93YW5jZVR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtdXNlci1jdXJyZW50LWNhcmJvbi1hbGxvd2FuY2UuZmV0Y2hlcic7XHJcbmltcG9ydCB7IEJhc2VXZWJUb2tlblNlcnZpY2UgfSBmcm9tICcuL3dlYnRva2VuLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VHZXRSaXNrQWxlcnRzRmV0Y2hlcixcclxuICBHZXRSaXNrQWxlcnRzRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtcmlzay1hbGVydHMuZmV0Y2hlcic7XHJcbmltcG9ydCB7IElybFRlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lpcmwtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBJUkxFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi4vY2xhc3Nlcy9pcmwtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlR2V0VXNlclJlY2VudFNlYXJjaGVzRmV0Y2hlcixcclxuICBHZXRVc2VyUmVjZW50U2VhcmNoZXNGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC11c2VyLXJlY2VudC1zZWFyY2hlcy5mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldFJhaWxjYXJkc0ZldGNoZXIsXHJcbiAgR2V0UmFpbENhcmRzRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtcmFpbC1jYXJkcy5mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldENvdmlkTWljcm9zaXRlVG9rZW5GZXRjaGVyLFxyXG4gIEdldENvdmlkTWljcm9zaXRlVG9rZW5GZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1jb3ZpZC1taWNyb3NpdGUtdG9rZW4uZmV0Y2hlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VFdXJvc3RhclF1b3RlRmV0Y2hlcixcclxuICBFdXJvc3RhclF1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9ldXJvc3Rhci1xdW90ZS5mZXRjaGVyJztcclxuaW1wb3J0IHsgRXVyb3N0YXJFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi4vY2xhc3Nlcy9ldXJvc3Rhci1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IEV1cm9zdGFyVGVtcFBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSWV1cm9zdGFyLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IEV1cm9TdGF0aW9ucyBmcm9tICcuLi9kYXRhL2V1cm8tc3RhdGlvbnMuanNvbic7XHJcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaFVzZXJzQ2FuQm9va0ZvckZldGNoZXIsXHJcbiAgU2VhcmNoVXNlckNhbkJvb2tGb3JGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL3NlYXJjaC11c2Vycy1jYW4tYm9vay1mb3ItZmV0Y2hlcic7XHJcbmltcG9ydCB7IEV1cm9zdGFyU2VhcmNoVHlwZSB9IGZyb20gJy4uL2NsYXNzZXMvZXVyb3N0YXItc2VhcmNoLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUlybERpc2NvdW50Q2FyZEZldGNoZXIsXHJcbiAgSXJsRGlzY291bnRDYXJkRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9pcmwtZGlzY291bnQtY2FyZC1mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldEZsaWdodEZhcmVSdWxlc0ZldGNoZXIsXHJcbiAgR2V0RmxpZ2h0RmFyZVJ1bGVzVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2ZsaWdodC1mYXJlLXJ1bGVzLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VHZXRGbGlnaHRTZWF0TWFwRmV0Y2hlcixcclxuICBHZXRGbGlnaHRTZWF0TWFwVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1mbGlnaHQtc2VhdC1tYXAtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQXBwbHlIb3RlbFJ1bGVzRmV0Y2hlclR5cGUsXHJcbiAgQmFzZUhvdGVsUnVsZXNGZXRjaGVyXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvYXBwbHktSklULWhvdGVsLXJ1bGVzLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEFwcGx5Sml0RmxpZ2h0UnVsZXNUeXBlLFxyXG4gIEJhc2VBcHBseUppdEZsaWdodFJ1bGVzRmV0Y2hlclxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2FwcGx5LWppdC1mbGlnaHQtcnVsZXMnO1xyXG5pbXBvcnQgeyBCYXNlTW9kYWxPcGVuZXJTZXJ2aWNlIH0gZnJvbSAnLi9tb2RhbC1vcGVuZXIuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldFVzZXJGYXZvdXJpdGVTZWFyY2hlc0ZldGNoZXIsXHJcbiAgR2V0VXNlckZhdm91cml0ZVNlYXJjaGVzRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtdXNlci1mYXZvdXJpdGUtc2VhcmNoZXMuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZURlbGV0ZUZhdm91cml0ZVNlYXJjaFVwZGF0ZXIsXHJcbiAgRGVsZXRlRmF2b3VyaXRlU2VhcmNoRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi91cGRhdGVycy9yZW1vdmUtZmF2b3VyaXRlLXNlYXJjaC11cGRhdGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlRW1haWxCYXNrZXRGZXRjaGVyLFxyXG4gIEVtYWlsQmFza2V0RmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9lbWFpbC1iYXNrZXQuZmV0Y2hlcic7XHJcbmltcG9ydCB7IEZhc3RUcmFja1RlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lmYXN0LXRyYWNrLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgRmFzdFRyYWNrRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4uL2NsYXNzZXMvZmFzdC10cmFjay1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUZhc3RUcmFja1F1b3RlRmV0Y2hlcixcclxuICBGYXN0VHJhY2tRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZmFzdC10cmFjay1xdW90ZS5mZXRjaGVyJztcclxuaW1wb3J0IHsgTW9kYWxUeXBlcyB9IGZyb20gJy4uL2NsYXNzZXMvbW9kYWwtdHlwZXMuZW51bSc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlbmRPZmZsaW5lTm90aWZpY2F0aW9uRmV0Y2hlcixcclxuICBTZW5kT2ZmbGluZU5vdGlmaWNhdGlvbkZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VuZC1vZmZsaW5lLW5vdGlmaWNhdGlvbi5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlR2V0SG90ZWxDaGFpbnNGZXRjaGVyLFxyXG4gIEdldEhvdGVsQ2hhaW5zRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtaG90ZWwtY2hhaW5zLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VHZXRSYWlsUHJvdmlkZXJzRmV0Y2hlcixcclxuICBHZXRSYWlsUHJvdmlkZXJzRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtcmFpbC1wcm92aWRlcnMuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldEFsbEFpcmxpbmVzRmV0Y2hlcixcclxuICBHZXRBbGxBaXJsaW5lc0ZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWFsbC1haXJsaW5lcy5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlR2V0Q2FySGlyZVByb3ZpZGVyc0ZldGNoZXIsXHJcbiAgR2V0Q2FySGlyZVByb3ZpZGVyc0ZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWNhci1oaXJlLXByb3ZpZGVycy5mZXRjaGVyJztcclxuaW1wb3J0IHsgQmFzZUdldElybFN1cHBsaWVyU3RhdGlvbkZldGNoZXIsIEdldElybFN1cHBsaWVyU3RhdGlvbkZldGNoZXJUeXBlIH0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWlybC1zdXBwbGllci1zdGF0aW9uLmZldGNoZXInO1xyXG5cclxuZXhwb3J0IGNvbnN0IE1BWF9UUkFWRUxMRVJTID0gODtcclxuXHJcbmV4cG9ydCBlbnVtIFRyYXZlbGxlclNlYXJjaFR5cGVzIHtcclxuICBlbWFpbCA9ICdlbWFpbCcsXHJcbiAgbmFtZSA9ICduYW1lJyxcclxuICBlbXBsb3llZU51bWJlciA9ICdlbXBsb3llZU51bWJlcidcclxufVxyXG5cclxuaW50ZXJmYWNlIEhpZ2hlc3RTZWFyY2hQcmlvcml0eU9iamVjdEludGVyZmFjZSB7XHJcbiAgaGlnaGVzdDogbnVtYmVyO1xyXG4gIGN1cnJlbnRJdGVtOiBTZWFyY2hPYmplY3Q7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBCYXNlRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2U8XHJcbiAgU1BfUSBleHRlbmRzIFNlYXJjaFBvc3Rjb2Rlc1F1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU1JfUSBleHRlbmRzIFNlYXJjaFJhaWxTdGF0aW9uc0ZldGNoZXJUeXBlLFxyXG4gIFNMX1EgZXh0ZW5kcyBMb3VuZ2VRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNQQV9RIGV4dGVuZHMgUGFya2luZ1F1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU0ZMX1EgZXh0ZW5kcyBGbGlnaHRRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNIT19RIGV4dGVuZHMgSG90ZWxRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNDSF9RIGV4dGVuZHMgQ2FySGlyZUZldGNoZXJUeXBlLFxyXG4gIENIQURfUSBleHRlbmRzIENhckhpcmVBdmFpbGFiaWxpdHlEZXRhaWxGZXRjaGVyVHlwZSxcclxuICBTVEhfUSBleHRlbmRzIENhYmhpcmVRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNBX1EgZXh0ZW5kcyBTZWFyY2hBaXJwb3J0c1F1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU0FMX1EgZXh0ZW5kcyBTZWFyY2hBaXJsaW5lc1F1b3RlRmV0Y2hlclR5cGUsXHJcbiAgSEFfUSBleHRlbmRzIEhvdGVsQXZhbGluaWxpdHlGZXRjaGVyVHlwZSxcclxuICBTQ19RIGV4dGVuZHMgU2VhcmNoQ2l0aWVzUXVvdGVGZXRjaGVyVHlwZSxcclxuICBTQ0NfUSBleHRlbmRzIFNlYXJjaENvbmZlcm1hQ2l0aWVzUXVvdGVGZXRjaGVyVHlwZSxcclxuICBTUkFfUSBleHRlbmRzIFJhaWxRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNJX1EgZXh0ZW5kcyBJcmxRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNVQV9RIGV4dGVuZHMgU2F2ZVVzZXJBZGRyZXNzVXBkYXRlclR5cGUsXHJcbiAgU1VfUSBleHRlbmRzIFVzZXJBZGRyZXNzRmV0Y2hlclR5cGUsXHJcbiAgR1VDT19RIGV4dGVuZHMgR2V0VXNlckNvbXBhbnlPZmZpY2VzUXVvdGVGZXRjaGVyVHlwZSxcclxuICBTSENfUSBleHRlbmRzIFNlYXJjaEhvdGVsQ2hhaW5zUXVvdGVGZXRjaGVyVHlwZSxcclxuICBHQ1JJX1EgZXh0ZW5kcyBHZXRDb25mZXJtYVJvb21JbWFnZXNRdW90ZUZldGNoZXJUeXBlLFxyXG4gIElQVl9RIGV4dGVuZHMgVmFsaWRhdGVJc1Bvc3Rjb2RlVmFsaWRUeXBlLFxyXG4gIFNEX1EgZXh0ZW5kcyBTZWFyY2hEZXBvdFF1b3RlRmV0Y2hlclR5cGUsXHJcbiAgR1JTX1EgZXh0ZW5kcyBHZXRSYWlsU3RhdGlvbkZldGNoZXJUeXBlLFxyXG4gIEdJU1NGX1EgZXh0ZW5kcyBHZXRJcmxTdXBwbGllclN0YXRpb25GZXRjaGVyVHlwZSxcclxuICBHT05fUSBleHRlbmRzIENvbmZlcm1hT2ZmaWNlTmFtZUZldGNoZXJUeXBlLFxyXG4gIENPX1EgZXh0ZW5kcyBDb25mZXJtYU9mZmljZUZldGNoZXJUeXBlLFxyXG4gIERVQV9RIGV4dGVuZHMgRGVsZXRlVXNlckFkZHJlc3NGZXRjaGVyVHlwZSxcclxuICBEUlNfUSBleHRlbmRzIERlbGV0ZVJlY2VudFNlYXJjaEZldGNoZXJUeXBlLFxyXG4gIFNSU19RIGV4dGVuZHMgU2F2ZVJlY2VudFNlYXJjaEZldGNoZXJUeXBlLFxyXG4gIFVDQV9RIGV4dGVuZHMgR2V0VXNlckN1cnJlbnRDYXJib25BbGxvd2FuY2VUeXBlLFxyXG4gIFNGU19RIGV4dGVuZHMgU2F2ZUZhdm91cml0ZVNlYXJjaEZldGNoZXJUeXBlLFxyXG4gIEdSQV9RIGV4dGVuZHMgR2V0Umlza0FsZXJ0c0ZldGNoZXJUeXBlLFxyXG4gIFFMX1EgZXh0ZW5kcyBDb25mZXJtYVF1aWNrbGlzdEZldGNoZXJUeXBlLFxyXG4gIEdVUlNGX1EgZXh0ZW5kcyBHZXRVc2VyUmVjZW50U2VhcmNoZXNGZXRjaGVyVHlwZSxcclxuICBHUkNGX1EgZXh0ZW5kcyBHZXRSYWlsQ2FyZHNGZXRjaGVyVHlwZSxcclxuICBHQ01URl9RIGV4dGVuZHMgR2V0Q292aWRNaWNyb3NpdGVUb2tlbkZldGNoZXJUeXBlLFxyXG4gIFNFX1EgZXh0ZW5kcyBFdXJvc3RhclF1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU1VDQkYgZXh0ZW5kcyBTZWFyY2hVc2VyQ2FuQm9va0ZvckZldGNoZXJUeXBlLFxyXG4gIFNJU19RIGV4dGVuZHMgU2VhcmNoSXJsU3RhdGlvbnNGZXRjaGVyVHlwZSxcclxuICBHSURGX1EgZXh0ZW5kcyBJcmxEaXNjb3VudENhcmRGZXRjaGVyVHlwZSxcclxuICBHRkZSX1EgZXh0ZW5kcyBHZXRGbGlnaHRGYXJlUnVsZXNUeXBlLFxyXG4gIEdGU01fUSBleHRlbmRzIEdldEZsaWdodFNlYXRNYXBUeXBlLFxyXG4gIEdSTERfRiBleHRlbmRzIEdldFJhaWxMaXZlRGVwYXJ0dXJlc0ZldGNoZXJUeXBlLFxyXG4gIEFIUl9RIGV4dGVuZHMgQXBwbHlIb3RlbFJ1bGVzRmV0Y2hlclR5cGUsXHJcbiAgQUZSX1EgZXh0ZW5kcyBBcHBseUppdEZsaWdodFJ1bGVzVHlwZSxcclxuICBHVUZTRl9RIGV4dGVuZHMgR2V0VXNlckZhdm91cml0ZVNlYXJjaGVzRmV0Y2hlclR5cGUsXHJcbiAgREZTX1EgZXh0ZW5kcyBEZWxldGVGYXZvdXJpdGVTZWFyY2hGZXRjaGVyVHlwZSxcclxuICBFQl9GIGV4dGVuZHMgRW1haWxCYXNrZXRGZXRjaGVyVHlwZSxcclxuICBGVFFfUSBleHRlbmRzIEZhc3RUcmFja1F1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU09OX1EgZXh0ZW5kcyBTZW5kT2ZmbGluZU5vdGlmaWNhdGlvbkZldGNoZXJUeXBlLFxyXG4gIEdIVF9RIGV4dGVuZHMgR2V0SG90ZWxDaGFpbnNGZXRjaGVyVHlwZSxcclxuICBHUlBfUSBleHRlbmRzIEdldFJhaWxQcm92aWRlcnNGZXRjaGVyVHlwZSxcclxuICBHQUFfUSBleHRlbmRzIEdldEFsbEFpcmxpbmVzRmV0Y2hlclR5cGUsXHJcbiAgR0NIUF9RIGV4dGVuZHMgR2V0Q2FySGlyZVByb3ZpZGVyc0ZldGNoZXJUeXBlXHJcbj4gaW1wbGVtZW50cyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZVxyXG57XHJcbiAgc3RhdGljIFNFU1NJT05fVFJBVkVMTEVSOiBzdHJpbmcgPSAnc2VhcmNoX3RyYXZlbGxlcnMnO1xyXG5cclxuICBzZWFyY2hlczogU2VhcmNoUGFyYW1zO1xyXG4gIHRyYXZlbGxlcl9lcnJvciA9IGZhbHNlO1xyXG4gIHRyYXZlbGxlckluZm9ybWF0aW9uOiBCZWhhdmlvclN1YmplY3Q8VHJhdmVsbGVyW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcclxuICAgIFRyYXZlbGxlcltdXHJcbiAgPihbXSk7XHJcbiAgZXJyb3JzOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pO1xyXG4gIHNlYXJjaExvYWRpbmdEb25lOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KFxyXG4gICAgZmFsc2VcclxuICApO1xyXG4gIHNlYXJjaFRpbWVkT3V0OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KFxyXG4gICAgZmFsc2VcclxuICApO1xyXG4gIG5ld1NlYXJjaFN0YXJ0ZWQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oXHJcbiAgICBmYWxzZVxyXG4gICk7XHJcblxyXG4gIGZpcnN0TG9hZCA9IHRydWU7XHJcblxyXG4gIHNlYXJjaF9vYmplY3RzOiBTZWFyY2hPYmplY3RzO1xyXG4gIGhpZ2hlc3Rfc2VhcmNoX3ByaW9yaXR5ID0gODtcclxuICBzaG93X2Vycm9ycyA9IGZhbHNlO1xyXG4gIHRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlczogc3RyaW5nW10gPSBbXTtcclxuICBzZWFyY2hfbG9hZGluZyA9IGZhbHNlO1xyXG4gIHNlYXJjaF9haXJwb3J0X2xvYWRpbmcgPSBmYWxzZTtcclxuICBhbGxTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgc2VhcmNoZXNTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAganJmUmVmZXJlbmNlOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBzZWxlY3RlZFRyYXZlbGxlcnM6IFRyYXZlbGxlcltdID0gW107XHJcbiAgc2VsZWN0ZWRQbGFjZXM6IGFueSA9IFtdO1xyXG4gIGNvdW50cmllcyA9IENvdW50cmllcztcclxuICBldXJvc3RhdGlvbnM6IHsgZ2F0ZXdheTogc3RyaW5nOyBkZXN0aW5hdGlvbjogc3RyaW5nIH1bXSA9XHJcbiAgICBfLnRvQXJyYXkoRXVyb1N0YXRpb25zKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgc2VhcmNoQWlycG9ydHNGZXRjaGVyOiBCYXNlU2VhcmNoQWlycG9ydHNGZXRjaGVyPFNBX1E+LFxyXG4gICAgcHJvdGVjdGVkIHNlYXJjaEFpcmxpbmVzRmV0Y2hlcjogQmFzZVNlYXJjaEFpcmxpbmVzRmV0Y2hlcjxTQUxfUT4sXHJcbiAgICBwcm90ZWN0ZWQgc3RvcmFnZVNlcnZpY2U6IEJhc2VTdG9yYWdlU2VydmljZSxcclxuICAgIHByb3RlY3RlZCB1c2VyU2VydmljZTogVXNlclNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBwcm90ZWN0ZWQgbW9kYWxTZXJ2aWNlOiBCYXNlTW9kYWxPcGVuZXJTZXJ2aWNlLFxyXG4gICAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJvdGVjdGVkIGhlbHBlcnM6IEJhc2VIZWxwZXJSb3V0aW5lcyxcclxuICAgIHByb3RlY3RlZCBob3RlbEF2YWxpYmlsaXR5U2VydmljZTogQmFzZUhvdGVsQXZhbGliaWxpdHlTZXJ2aWNlPEhBX1E+LFxyXG4gICAgcHJpdmF0ZSBjaXRpZXNGZXRjaGVyOiBCYXNlU2VhcmNoQ2l0eUZldGNoZXI8U0NfUT4sXHJcbiAgICBwcml2YXRlIGNvbmZlcm1hQ2l0aWVzRmV0Y2hlcjogQmFzZVNlYXJjaENvbmZlcm1hQ2l0eUZldGNoZXI8U0NDX1E+LFxyXG4gICAgcHJpdmF0ZSBwb3N0Y29kZUZldGNoZXI6IEJhc2VTZWFyY2hQb3N0Y29kZUZldGNoZXI8U1BfUT4sXHJcbiAgICBwcml2YXRlIHJhaWxTdGF0aW9uRmV0Y2hlcjogQmFzZVNlYXJjaFJhaWxTdGF0aW9uc0ZldGNoZXI8U1JfUT4sXHJcbiAgICBwcml2YXRlIHNhdmVVc2VyQWRkcmVzc1VwZGF0ZXI6IEJhc2VTYXZlVXNlckFkZHJlc3NVcGRhdGVyPFNVQV9RPixcclxuICAgIHByaXZhdGUgdXNlckFkZHJlc3Nlc0ZldGNoZXI6IEJhc2VVc2VyQWRkcmVzc2VzRmV0Y2hlcjxTVV9RPixcclxuICAgIHByaXZhdGUgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBwcml2YXRlIGdldFVzZXJDb21wYW55T2ZmaWNlc0ZldGNoZXI6IEJhc2VHZXRVc2VyQ29tcGFueU9mZmljZXNGZXRjaGVyPEdVQ09fUT4sXHJcbiAgICBwcml2YXRlIHNlYXJjaEhvdGVsQ2hhaW5zRmV0Y2hlcjogQmFzZVNlYXJjaEhvdGVsQ2hhaW5zRmV0Y2hlcjxTSENfUT4sXHJcbiAgICBwcml2YXRlIGdldENvbmZlcm1hUm9vbUltYWdlc0ZldGNoZXI6IEJhc2VHZXRDb25mZXJtYVJvb21JbWFnZXNGZXRjaGVyPEdDUklfUT4sXHJcbiAgICBwcml2YXRlIGJhc2VWYWxpZGF0ZUlzUG9zdGNvZGVWYWxpZFRlc3RlcjogQmFzZVZhbGlkYXRlSXNQb3N0Y29kZVZhbGlkVGVzdGVyPElQVl9RPixcclxuICAgIHByaXZhdGUgZGVwb3RGZXRjaGVyOiBCYXNlU2VhcmNoRGVwb3RGZXRjaGVyPFNEX1E+LFxyXG4gICAgcHJpdmF0ZSBjb25mZXJtYU9mZmljZU5hbWVzRmV0Y2hlcjogQmFzZUNvbmZlcm1hT2ZmaWNlTmFtZXNGZXRjaGVyPEdPTl9RPixcclxuICAgIHByaXZhdGUgY29uZmVybWFPZmZpY2VGZXRjaGVyOiBCYXNlQ29uZmVybWFPZmZpY2VGZXRjaGVyPENPX1E+LFxyXG4gICAgcHJpdmF0ZSBiYXNlRGVsZXRlVXNlckFkZHJlc3NVcGRhdGVyOiBCYXNlRGVsZXRlVXNlckFkZHJlc3NVcGRhdGVyPERVQV9RPixcclxuICAgIHByaXZhdGUgYmFzZURlbGV0ZVJlY2VudFNlYXJjaFVwZGF0ZXI6IEJhc2VEZWxldGVSZWNlbnRTZWFyY2hVcGRhdGVyPERSU19RPixcclxuICAgIHByaXZhdGUgYmFzZVNhdmVSZWNlbnRTZWFyY2hVcGRhdGVyOiBCYXNlU2F2ZVJlY2VudFNlYXJjaFVwZGF0ZXI8U1JTX1E+LFxyXG4gICAgcHJpdmF0ZSBnZXRVc2VyQ3VycmVudENhcmJvbkFsbG93YW5jZUZldGNoZXI6IEJhc2VHZXRVc2VyQ3VycmVudENhcmJvbkFsbG93YW5jZUZldGNoZXI8VUNBX1E+LFxyXG4gICAgcHJpdmF0ZSBiYXNlU2F2ZUZhdm91cml0ZVNlYXJjaFVwZGF0ZXI6IEJhc2VTYXZlRmF2b3VyaXRlU2VhcmNoVXBkYXRlcjxTRlNfUT4sXHJcbiAgICBlbnZpcm9ubWVudDogQmFzZUVudmlyb25tZW50LFxyXG4gICAgbG91bmdlRmV0Y2hlcjogQmFzZUxvdW5nZVF1b3RlRmV0Y2hlcjxTTF9RPixcclxuICAgIHBhcmtpbmdGZXRjaGVyOiBCYXNlUGFya2luZ1F1b3RlRmV0Y2hlcjxTUEFfUT4sXHJcbiAgICBodHRwQ2FsbFNlcnZpY2U6IEFic3RyYWN0SHR0cENhbGxTZXJ2aWNlLFxyXG4gICAgZmxpZ2h0RmV0Y2hlcjogQmFzZUZsaWdodFF1b3RlRmV0Y2hlcjxTRkxfUT4sXHJcbiAgICBob3RlbEZldGNoZXI6IEJhc2VIb3RlbFF1b3RlRmV0Y2hlcjxTSE9fUT4sXHJcbiAgICBjYXJoaXJlRmV0Y2hlcjogQmFzZUNhcmhpcmVRdW90ZUZldGNoZXI8U0NIX1E+LFxyXG4gICAgY2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXI6IEJhc2VDYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlcjxDSEFEX1E+LFxyXG4gICAgY2FiaGlyZUZldGNoZXI6IEJhc2VDYWJoaXJlUXVvdGVGZXRjaGVyPFNUSF9RPixcclxuICAgIHJhaWxGZXRjaGVyOiBCYXNlUmFpbFF1b3RlRmV0Y2hlcjxTUkFfUT4sXHJcbiAgICBpcmxGZXRjaGVyOiBCYXNlSXJsUXVvdGVGZXRjaGVyPFNJX1E+LFxyXG4gICAgcHJvdGVjdGVkIGdldFJhaWxTdGF0aW9uRmV0Y2hlcjogQmFzZUdldFJhaWxTdGF0aW9uRmV0Y2hlcjxHUlNfUT4sXHJcbiAgICBwcm90ZWN0ZWQgZ2V0SXJsU3VwcGxpZXJTdGF0aW9uRmV0Y2hlcjogQmFzZUdldElybFN1cHBsaWVyU3RhdGlvbkZldGNoZXI8R0lTU0ZfUT4sXHJcbiAgICBiYXNlV2ViVG9rZW5TZXJ2aWNlOiBCYXNlV2ViVG9rZW5TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByaXNrQWxlcnRzRmV0Y2hlcjogQmFzZUdldFJpc2tBbGVydHNGZXRjaGVyPEdSQV9RPixcclxuICAgIHF1aWNrbGlzdEZldGNoZXI6IEJhc2VTZWFyY2hDb25mZXJtYVF1aWNrbGlzdEZldGNoZXI8UUxfUT4sXHJcbiAgICBwcml2YXRlIGdldFVzZXJSZWNlbnRTZWFyY2hlc0ZldGNoZXI6IEJhc2VHZXRVc2VyUmVjZW50U2VhcmNoZXNGZXRjaGVyPEdVUlNGX1E+LFxyXG4gICAgcHJvdGVjdGVkIGdldFJhaWxDYXJkc0ZldGNoZXI6IEJhc2VHZXRSYWlsY2FyZHNGZXRjaGVyPEdSQ0ZfUT4sXHJcbiAgICBwcm90ZWN0ZWQgZ2V0Q292aWRNaWNyb3NpdGVUb2tlbkZldGNoZXI6IEJhc2VHZXRDb3ZpZE1pY3Jvc2l0ZVRva2VuRmV0Y2hlcjxHQ01URl9RPixcclxuICAgIGV1cm9zdGFyRmV0Y2hlcjogQmFzZUV1cm9zdGFyUXVvdGVGZXRjaGVyPFNFX1E+LFxyXG4gICAgcHVibGljIHNlYXJjaFVzZXJzQ2FuQm9va0ZvckZldGNoZXI6IEJhc2VTZWFyY2hVc2Vyc0NhbkJvb2tGb3JGZXRjaGVyPFNVQ0JGPixcclxuICAgIHByb3RlY3RlZCBzZWFyY2hJcmxTdGF0aW9uc0ZldGNoZXI6IEJhc2VTZWFyY2hJcmxTdGF0aW9uc0ZldGNoZXI8U0lTX1E+LFxyXG4gICAgcHJvdGVjdGVkIGlybERpc2NvdW50Q2FyZHNGZXRjaGVyOiBCYXNlSXJsRGlzY291bnRDYXJkRmV0Y2hlcjxHSURGX1E+LFxyXG4gICAgcHJpdmF0ZSBnZXRGbGlnaHRGYXJlUnVsZXNGZXRjaGVyOiBCYXNlR2V0RmxpZ2h0RmFyZVJ1bGVzRmV0Y2hlcjxHRkZSX1E+LFxyXG4gICAgcHJpdmF0ZSBnZXRGbGlnaHRTZWF0TWFwRmV0Y2hlcjogQmFzZUdldEZsaWdodFNlYXRNYXBGZXRjaGVyPEdGU01fUT4sXHJcbiAgICBwcml2YXRlIGdldFJhaWxMaXZlRGVwYXJ0dXJlc0ZldGNoZXI6IEJhc2VHZXRSYWlsTGl2ZURlcGFydHVyZXNGZXRjaGVyPEdSTERfRj4sXHJcbiAgICBhcHBseUhvdGVsUnVsZXNGZXRjaGVyOiBCYXNlSG90ZWxSdWxlc0ZldGNoZXI8QUhSX1E+LFxyXG4gICAgYXBwbHlGbGlnaHRSdWxlczogQmFzZUFwcGx5Sml0RmxpZ2h0UnVsZXNGZXRjaGVyPEFGUl9RPixcclxuICAgIHByaXZhdGUgZ2V0VXNlckZhdm91cml0ZVNlYXJjaGVzRmV0Y2hlcjogQmFzZUdldFVzZXJGYXZvdXJpdGVTZWFyY2hlc0ZldGNoZXI8R1VGU0ZfUT4sXHJcbiAgICBwcml2YXRlIGRlbGV0ZUZhdm91cml0ZVNlYXJjaFVwZGF0ZXI6IEJhc2VEZWxldGVGYXZvdXJpdGVTZWFyY2hVcGRhdGVyPERGU19RPixcclxuICAgIHByaXZhdGUgZW1haWxCYXNrZXRGZXRjaGVyOiBCYXNlRW1haWxCYXNrZXRGZXRjaGVyPEVCX0Y+LFxyXG4gICAgZmFzdHRyYWNrRmV0Y2hlcjogQmFzZUZhc3RUcmFja1F1b3RlRmV0Y2hlcjxGVFFfUT4sXHJcbiAgICBwcml2YXRlIHNlbmRPZmZsaW5lTm90aWZpY2F0aW9uRmV0Y2hlcjogQmFzZVNlbmRPZmZsaW5lTm90aWZpY2F0aW9uRmV0Y2hlcjxTT05fUT4sXHJcbiAgICBwcml2YXRlIGdldEhvdGVsQ2hhaW5zRmV0Y2hlcjogQmFzZUdldEhvdGVsQ2hhaW5zRmV0Y2hlcjxHSFRfUT4sXHJcbiAgICBwcml2YXRlIGdldFJhaWxQcm92aWRlcnNGZXRjaGVyOiBCYXNlR2V0UmFpbFByb3ZpZGVyc0ZldGNoZXI8R1JQX1E+LFxyXG4gICAgcHJpdmF0ZSBnZXRBbGxBaXJsaW5lc0ZldGNoZXI6IEJhc2VHZXRBbGxBaXJsaW5lc0ZldGNoZXI8R0FBX1E+LFxyXG4gICAgcHJpdmF0ZSBnZXRDYXJIaXJlUHJvdmlkZXJzRmV0Y2hlcjogQmFzZUdldENhckhpcmVQcm92aWRlcnNGZXRjaGVyPEdDSFBfUT5cclxuICApIHtcclxuICAgIGNvbnNvbGUubG9nKCdFbnRlcnBpc2Ugc2VhcmNoIHNlcnZpY2UgYmVpbmcgaW5pdGVkJyk7XHJcbiAgICB0aGlzLnNlYXJjaGVzID0ge1xyXG4gICAgICBbU2VydmljZVR5cGUuTG91bmdlXTogbmV3IExvdW5nZXNFbnRlcnByaXNlU2VhcmNoKFxyXG4gICAgICAgIGxvdW5nZUZldGNoZXIsXHJcbiAgICAgICAgaGVscGVycyxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXNcclxuICAgICAgKSxcclxuICAgICAgW1NlcnZpY2VUeXBlLlBhcmtpbmddOiBuZXcgUGFya2luZ0VudGVycHJpc2VTZWFyY2goXHJcbiAgICAgICAgcGFya2luZ0ZldGNoZXIsXHJcbiAgICAgICAgaGVscGVycyxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXNcclxuICAgICAgKSxcclxuICAgICAgW1NlcnZpY2VUeXBlLkZsaWdodF06IG5ldyBGbGlnaHRFbnRlcnByaXNlU2VhcmNoKFxyXG4gICAgICAgIGZsaWdodEZldGNoZXIsXHJcbiAgICAgICAgaGVscGVycyxcclxuICAgICAgICB1c2VyU2VydmljZSxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMsXHJcbiAgICAgICAgYXBwbHlGbGlnaHRSdWxlcyxcclxuICAgICAgICBtb2RhbFNlcnZpY2VcclxuICAgICAgKSxcclxuICAgICAgW1NlcnZpY2VUeXBlLkhvdGVsXTogbmV3IEhvdGVsRW50ZXJwcmlzZVNlYXJjaChcclxuICAgICAgICBob3RlbEZldGNoZXIsXHJcbiAgICAgICAgaGVscGVycyxcclxuICAgICAgICB1c2VyU2VydmljZSxcclxuICAgICAgICBlbnZpcm9ubWVudCxcclxuICAgICAgICBob3RlbEF2YWxpYmlsaXR5U2VydmljZSxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMsXHJcbiAgICAgICAgaHR0cENhbGxTZXJ2aWNlLFxyXG4gICAgICAgIHF1aWNrbGlzdEZldGNoZXIsXHJcbiAgICAgICAgZ2V0UmFpbFN0YXRpb25GZXRjaGVyLFxyXG4gICAgICAgIGFwcGx5SG90ZWxSdWxlc0ZldGNoZXJcclxuICAgICAgKSxcclxuICAgICAgW1NlcnZpY2VUeXBlLkNhcl06IG5ldyBDYXJoaXJlRW50ZXJwcmlzZVNlYXJjaChcclxuICAgICAgICBjYXJoaXJlRmV0Y2hlcixcclxuICAgICAgICBjYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlcixcclxuICAgICAgICBoZWxwZXJzLFxyXG4gICAgICAgIGJhc2tldFNlcnZpY2UsXHJcbiAgICAgICAgc3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgdGhpc1xyXG4gICAgICApLFxyXG4gICAgICBbU2VydmljZVR5cGUuQ2FiXTogbmV3IENhYkhpcmVFbnRlcnByaXNlU2VhcmNoKFxyXG4gICAgICAgIGNhYmhpcmVGZXRjaGVyLFxyXG4gICAgICAgIGhlbHBlcnMsXHJcbiAgICAgICAgc3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgdGhpcyxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlXHJcbiAgICAgICksXHJcbiAgICAgIFtTZXJ2aWNlVHlwZS5JbnRlcm5hdGlvbmFsUmFpbF06IG5ldyBJUkxFbnRlcnByaXNlU2VhcmNoKFxyXG4gICAgICAgIGlybEZldGNoZXIsXHJcbiAgICAgICAgaXJsRGlzY291bnRDYXJkc0ZldGNoZXIsXHJcbiAgICAgICAgaGVscGVycyxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMsXHJcbiAgICAgICAgZ2V0SXJsU3VwcGxpZXJTdGF0aW9uRmV0Y2hlcixcclxuICAgICAgKSxcclxuICAgICAgW1NlcnZpY2VUeXBlLkZhc3RUcmFja106IG5ldyBGYXN0VHJhY2tFbnRlcnByaXNlU2VhcmNoKFxyXG4gICAgICAgIGZhc3R0cmFja0ZldGNoZXIsXHJcbiAgICAgICAgaGVscGVycyxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXNcclxuICAgICAgKSxcclxuICAgICAgW1NlcnZpY2VUeXBlLkNvYWNoXTogbnVsbCxcclxuICAgICAgW1NlcnZpY2VUeXBlLlJhaWxdOiBuZXcgUmFpbEVudGVycHJpc2VTZWFyY2goXHJcbiAgICAgICAgcmFpbEZldGNoZXIsXHJcbiAgICAgICAgZ2V0UmFpbFN0YXRpb25GZXRjaGVyLFxyXG4gICAgICAgIGhlbHBlcnMsXHJcbiAgICAgICAgYmFza2V0U2VydmljZSxcclxuICAgICAgICBzdG9yYWdlU2VydmljZSxcclxuICAgICAgICB0aGlzLFxyXG4gICAgICAgIHVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIG1vZGFsU2VydmljZVxyXG4gICAgICApLFxyXG4gICAgICBbU2VydmljZVR5cGUuRXVyb3N0YXJdOiBuZXcgRXVyb3N0YXJFbnRlcnByaXNlU2VhcmNoKFxyXG4gICAgICAgIGV1cm9zdGFyRmV0Y2hlcixcclxuICAgICAgICBoZWxwZXJzLFxyXG4gICAgICAgIHVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIGJhc2tldFNlcnZpY2UsXHJcbiAgICAgICAgc3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgdGhpcyxcclxuICAgICAgICBtb2RhbFNlcnZpY2VcclxuICAgICAgKVxyXG4gICAgfTtcclxuICAgIGNvbnNvbGUubG9nKCdOZXdseSBjcmVhdGVkIHNlYXJjaCBvYmplY3RzOiAnLCB0aGlzLnNlYXJjaGVzKTtcclxuICAgIHRoaXMuc2VhcmNoX29iamVjdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5pbml0X3NlYXJjaF9vYmplY3RzKCkpO1xyXG4gICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtQXNMaXN0PFxyXG4gICAgICBUcmF2ZWxsZXJbXVxyXG4gICAgPihCYXNlRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2UuU0VTU0lPTl9UUkFWRUxMRVIpO1xyXG4gICAgdGhpcy50cmF2ZWxsZXJJbmZvcm1hdGlvbi5uZXh0KHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzKTtcclxuICAgIHVzZXJTZXJ2aWNlLmZ1bGxVc2VyRGV0YWlscy51c2VyU2VydmljZXMuc3Vic2NyaWJlKFxyXG4gICAgICAoc2VydmljZXM6IFVzZXJTZXJ2aWNlcykgPT4ge1xyXG4gICAgICAgIGlmIChzZXJ2aWNlcykge1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0cyA9IE9iamVjdC5rZXlzKHRoaXMuc2VhcmNoX29iamVjdHMpLnJlZHVjZShcclxuICAgICAgICAgICAgKG9iamVjdHM6IFNlYXJjaE9iamVjdHMsIGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgKG9iamVjdHMgYXMgUmVjb3JkPHN0cmluZywgYW55Pilba2V5XS5lbmFibGVkID1cclxuICAgICAgICAgICAgICAgICEhc2VydmljZXMgJiYgISFzZXJ2aWNlc1trZXldO1xyXG4gICAgICAgICAgICAgIHJldHVybiBvYmplY3RzO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaF9vYmplY3RzXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmNvdW50cmllcykpIHtcclxuICAgICAgdGhpcy5jb3VudHJpZXMgPSB0aGlzLmNvdW50cmllcy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgaWYgKGEuY05hbWUgPCBiLmNOYW1lKSB7XHJcbiAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhLmNOYW1lID4gYi5jTmFtZSkge1xyXG4gICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBiYXNlV2ViVG9rZW5TZXJ2aWNlLmF1dG9Mb2dvdXRDb25maWcgPSB0aGlzLmdldEF1dG9Mb2dvdXRDb25maWcoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMuYWxsU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuYWxsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldCgpIHtcclxuICAgIHRoaXMucmVzZXRBbGxTZWFyY2hJdGVtcygpO1xyXG4gICAgdGhpcy5iYXNrZXRTZXJ2aWNlLnJlc2V0KCk7XHJcbiAgfVxyXG5cclxuICByZXNldEFsbFNlYXJjaEl0ZW1zKCkge1xyXG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLnNlYXJjaGVzKS5mb3JFYWNoKFxyXG4gICAgICAoaXRlbTogQmFzZUVudGVycHJpc2VTZWFyY2g8YW55LCBhbnksIGFueVtdPikgPT4ge1xyXG4gICAgICAgIGl0ZW0/LnJlc2V0KCk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICB0aGlzLnJlbW92ZUFsbFRyYXZlbGxlcnMoKTtcclxuICAgIHRoaXMucmVzZXRTZWFyY2hPYmplY3RzKCk7XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyQ3VycmVudENhcmJvbkFsbG93YW5jZShcclxuICAgIHVzZXI/OiBzdHJpbmcsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPENhcmJvbkFsbG93YW5jZT4ge1xyXG4gICAgaWYgKGlzTG9hZGluZykge1xyXG4gICAgICBpc0xvYWRpbmcubmV4dCh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBxdWVyeSA9IHsgdXNlciB9O1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0VXNlckN1cnJlbnRDYXJib25BbGxvd2FuY2VGZXRjaGVyLmZldGNoTGlzdChxdWVyeSkucGlwZShcclxuICAgICAgdGFrZSgxKSxcclxuICAgICAgbWFwKChyZXN1bHRzOiBDYXJib25BbGxvd2FuY2UpID0+IHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0cztcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRSaXNrQWxlcnRzKFxyXG4gICAgbWluTGV2ZWw6IFJpc2tMZXZlbCxcclxuICAgIG1heExldmVsOiBSaXNrTGV2ZWwsXHJcbiAgICBjb3VudHJ5SXNvQ29kZTogc3RyaW5nLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxSaXNrQWxlcnRbXT4ge1xyXG4gICAgaWYgKGlzTG9hZGluZykge1xyXG4gICAgICBpc0xvYWRpbmcubmV4dCh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBxdWVyeTogR2V0Umlza0FsZXJ0c1F1ZXJ5VmFyaWFibGVzID0ge1xyXG4gICAgICBtaW5MZXZlbCxcclxuICAgICAgbWF4TGV2ZWwsXHJcbiAgICAgIGNvdW50cnlJc29Db2RlXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLnJpc2tBbGVydHNGZXRjaGVyLmZldGNoTGlzdChxdWVyeSkucGlwZShcclxuICAgICAgdGFrZSgxKSxcclxuICAgICAgbWFwKChyZXN1bHQ6IFJpc2tBbGVydFtdKSA9PiB7XHJcbiAgICAgICAgaWYgKGlzTG9hZGluZykge1xyXG4gICAgICAgICAgaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRBaXJwb3J0c0xpc3QoXHJcbiAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICBjb3VudHJ5Q29kZT86IENvdW50cnlDb2RlLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+LFxyXG4gICAgaGFzTG91bmdlPzogYm9vbGVhbixcclxuICAgIGhhc1Bhcmtpbmc/OiBib29sZWFuLFxyXG4gICAgaGFzRmFzdFRyYWNrPzogYm9vbGVhblxyXG4gICk6IE9ic2VydmFibGU8T0JUQWlycG9ydERldGFpbHNbXT4ge1xyXG4gICAgaWYgKHRlcm0ubGVuZ3RoID4gMikge1xyXG4gICAgICBpZiAoaXNMb2FkaW5nKSB7XHJcbiAgICAgICAgaXNMb2FkaW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHF1ZXJ5OiBTZWFyY2hBaXJwb3J0cy5WYXJpYWJsZXMgPSB7IHF1ZXJ5OiB0ZXJtIH07XHJcbiAgICAgIGlmICghIWNvdW50cnlDb2RlKSB7XHJcbiAgICAgICAgcXVlcnkuY291bnRyeUNvZGUgPSBjb3VudHJ5Q29kZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodHlwZW9mIGhhc0xvdW5nZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgcXVlcnkuaGFzTG91bmdlID0gaGFzTG91bmdlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0eXBlb2YgaGFzUGFya2luZyA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgcXVlcnkuaGFzUGFya2luZyA9IGhhc1Bhcmtpbmc7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHR5cGVvZiBoYXNGYXN0VHJhY2sgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgIHF1ZXJ5Lmhhc0Zhc3RUcmFjayA9IGhhc0Zhc3RUcmFjaztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hBaXJwb3J0c0ZldGNoZXIuZmV0Y2hPbmUocXVlcnkpLnBpcGUoXHJcbiAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICBtYXAoKHJlc3VsdHM6IEFpcnBvcnRTZWFyY2hSZXN1bHRzKSA9PiB7XHJcbiAgICAgICAgICBpZiAoaXNMb2FkaW5nKSB7XHJcbiAgICAgICAgICAgIGlzTG9hZGluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAocmVzdWx0cyAmJiByZXN1bHRzLmdlbmVyYWxNYXRjaGVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGdlbmVyYWxNYXRjaGVzID0gdGhpcy5oZWxwZXJzLmNsb25lKHJlc3VsdHMuZ2VuZXJhbE1hdGNoZXMpO1xyXG5cclxuICAgICAgICAgICAgLy8gUmVtb3ZpbmcgdGhpcyBhcyB0aGlzIGNyZWF0ZXMgZHVwbGljYXRlIGFpcnBvcnRzIGluIHRoZSBsaXN0XHJcbiAgICAgICAgICAgIC8vIGlmIChyZXN1bHRzLmlhdGFNYXRjaCkge1xyXG4gICAgICAgICAgICAvLyAgIGdlbmVyYWxNYXRjaGVzLnB1c2gocmVzdWx0cy5pYXRhTWF0Y2gpO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgZ2VuZXJhbE1hdGNoZXNcclxuICAgICAgICAgICAgICAgIC8vIC5maWx0ZXIoKGFpcnBvcnQ6IEFpcnBvcnRSZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vICAgcmV0dXJuICEhY291bnRyeUNvZGVcclxuICAgICAgICAgICAgICAgIC8vICAgICA/IGNvdW50cnlDb2RlID09PSBhaXJwb3J0LmRldGFpbHMuY291bnRyeUNvZGVcclxuICAgICAgICAgICAgICAgIC8vICAgICA6IGFpcnBvcnQ7XHJcbiAgICAgICAgICAgICAgICAvLyB9KVxyXG4gICAgICAgICAgICAgICAgLm1hcCgoYWlycG9ydDogQWlycG9ydCk6IE9CVEFpcnBvcnREZXRhaWxzID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbjogYWlycG9ydC5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGdhdGV3YXk6IGFpcnBvcnQuaWF0YSxcclxuICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hbHM6IHRoaXMucHJvY2Vzc1Rlcm1pbmFscyhhaXJwb3J0LnRlcm1pbmFscyksXHJcbiAgICAgICAgICAgICAgICAgICAgY291bnRyeTogYWlycG9ydD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5LFxyXG4gICAgICAgICAgICAgICAgICAgIHBvc3Rjb2RlOiBhaXJwb3J0Py5sb2NhdGlvbkRldGFpbHM/LnBvc3Rjb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvdW50cnlDb2RlOiBhaXJwb3J0Py5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlXHJcbiAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXRBaXJsaW5lc0xpc3QoXHJcbiAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPE9CVEFpcmxpbmVzRGV0YWlsc1tdPiB7XHJcbiAgICBpZiAodGVybS5sZW5ndGggPj0gMikge1xyXG4gICAgICBpZiAoaXNMb2FkaW5nKSB7XHJcbiAgICAgICAgaXNMb2FkaW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcXVlcnk6IFNlYXJjaEFpcmxpbmVzLlZhcmlhYmxlcyA9IHsgcXVlcnk6IHRlcm0gfTtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoQWlybGluZXNGZXRjaGVyLmZldGNoT25lKHF1ZXJ5KS5waXBlKFxyXG4gICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgbWFwKChyZXN1bHRzOiBBaXJsaW5lc1NlYXJjaFJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGlzTG9hZGluZykge1xyXG4gICAgICAgICAgICBpc0xvYWRpbmcubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0cy5nZW5lcmFsTWF0Y2hlcykge1xyXG4gICAgICAgICAgICBjb25zdCBnZW5lcmFsTWF0Y2hlcyA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHRzLmdlbmVyYWxNYXRjaGVzKTtcclxuICAgICAgICAgICAgcmV0dXJuIGdlbmVyYWxNYXRjaGVzLm1hcChcclxuICAgICAgICAgICAgICAoYWlybGluZXM6IEFpcmxpbmVSZXN1bHQpOiBPQlRBaXJsaW5lc0RldGFpbHMgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgY29kZTogYWlybGluZXMuaWF0YSxcclxuICAgICAgICAgICAgICAgICAgbmFtZTogYWlybGluZXMubmFtZVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldEFpcnBvcnRMb2NhdGlvbnMoXHJcbiAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICBjb3VudHJ5Q29kZTogQ291bnRyeUNvZGUsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4sXHJcbiAgICBoYXNMb3VuZ2U/OiBib29sZWFuLFxyXG4gICAgaGFzUGFya2luZz86IGJvb2xlYW4sXHJcbiAgICBoYXNGYXN0VHJhY2s/OiBib29sZWFuXHJcbiAgKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkRldGFpbHNbXT4ge1xyXG4gICAgY29uc3QgY29udmVydCA9IChyZXN1bHRzOiBPQlRBaXJwb3J0RGV0YWlsc1tdKTogTG9jYXRpb25EZXRhaWxzW10gPT4ge1xyXG4gICAgICByZXR1cm4gcmVzdWx0cy5tYXAoKHJlc3VsdDogT0JUQWlycG9ydERldGFpbHMpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgbmFtZTogcmVzdWx0LmRlc3RpbmF0aW9uLFxyXG4gICAgICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5BaXJwb3J0LFxyXG4gICAgICAgICAgYWlycG9ydDogcmVzdWx0XHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0QWlycG9ydHNMaXN0KFxyXG4gICAgICB0ZXJtLFxyXG4gICAgICBjb3VudHJ5Q29kZSxcclxuICAgICAgaXNMb2FkaW5nLFxyXG4gICAgICBoYXNMb3VuZ2UsXHJcbiAgICAgIGhhc1BhcmtpbmcsXHJcbiAgICAgIGhhc0Zhc3RUcmFja1xyXG4gICAgKS5waXBlKG1hcChjb252ZXJ0KSk7XHJcbiAgfVxyXG5cclxuICBnZXRDaXR5TG9jYXRpb25zKFxyXG4gICAgdGVybTogc3RyaW5nLFxyXG4gICAgY291bnRyeUNvZGU/OiBDb3VudHJ5Q29kZSxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPixcclxuICAgIGlzQ29uZmlybWE/OiBib29sZWFuXHJcbiAgKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkRldGFpbHNbXT4ge1xyXG4gICAgaWYgKHRlcm0ubGVuZ3RoIDw9IDIpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzQ29uZmlybWEpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29uZmVybWFDaXR5TG9jYXRpb25zKHRlcm0sIGNvdW50cnlDb2RlLCBpc0xvYWRpbmcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2dldENpdHlMb2NhdGlvbnModGVybSwgY291bnRyeUNvZGUsIGlzTG9hZGluZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBfZ2V0Q2l0eUxvY2F0aW9ucyhcclxuICAgIHRlcm06IHN0cmluZyxcclxuICAgIGNvdW50cnlDb2RlPzogQ291bnRyeUNvZGUsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPExvY2F0aW9uRGV0YWlsc1tdPiB7XHJcbiAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XHJcbiAgICBjb25zdCBxdWVyeTogYW55ID0geyBxdWVyeTogdGVybSB9O1xyXG4gICAgaWYgKGNvdW50cnlDb2RlKSB7XHJcbiAgICAgIHF1ZXJ5LmNvdW50cnlDb2RlID0gY291bnRyeUNvZGU7XHJcbiAgICB9XHJcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8U2VhcmNoQ2l0aWVzUmVzdWx0QXJyYXk+ID1cclxuICAgICAgdGhpcy5jaXRpZXNGZXRjaGVyLmZldGNoTGlzdChxdWVyeSk7XHJcbiAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IFNlYXJjaENpdGllc1Jlc3VsdEFycmF5KTogTG9jYXRpb25EZXRhaWxzW10gPT4ge1xyXG4gICAgICBjb25zdCBkYXRhOiBMb2NhdGlvbkRldGFpbHNbXSA9IHJlc3VsdHMubWFwKFxyXG4gICAgICAgIChyZXN1bHQ6IFNlYXJjaENpdGllc1Jlc3VsdCk6IExvY2F0aW9uRGV0YWlscyA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBuYW1lOiByZXN1bHQubmFtZSxcclxuICAgICAgICAgICAgbG9uZ2l0dWRlOiByZXN1bHQuY29vcmRpbmF0ZXMubG9uZ2l0dWRlLFxyXG4gICAgICAgICAgICBsYXRpdHVkZTogcmVzdWx0LmNvb3JkaW5hdGVzLmxhdGl0dWRlLFxyXG4gICAgICAgICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLkNpdHksXHJcbiAgICAgICAgICAgIGNvdW50cnlDb2RlOiByZXN1bHQuY291bnRyeUNvZGUsXHJcbiAgICAgICAgICAgIGlkOiByZXN1bHQuaWRcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgICBpc0xvYWRpbmc/Lm5leHQoZmFsc2UpO1xyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgbWFwKGZ1bmMpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q29uZmVybWFDaXR5TG9jYXRpb25zKFxyXG4gICAgdGVybTogc3RyaW5nLFxyXG4gICAgY291bnRyeUNvZGU/OiBDb3VudHJ5Q29kZSxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcclxuICAgIGlzTG9hZGluZz8ubmV4dCh0cnVlKTtcclxuICAgIGNvbnN0IHF1ZXJ5OiBhbnkgPSB7IGNpdHlOYW1lOiB0ZXJtIH07XHJcbiAgICBpZiAoY291bnRyeUNvZGUpIHtcclxuICAgICAgcXVlcnkuY291bnRyeUNvZGUgPSBjb3VudHJ5Q29kZTtcclxuICAgIH1cclxuICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxTZWFyY2hDb25mZXJtYUNpdGllc1Jlc3VsdD4gPVxyXG4gICAgICB0aGlzLmNvbmZlcm1hQ2l0aWVzRmV0Y2hlci5mZXRjaE9uZShxdWVyeSk7XHJcbiAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IFNlYXJjaENvbmZlcm1hQ2l0aWVzUmVzdWx0KTogTG9jYXRpb25EZXRhaWxzW10gPT4ge1xyXG4gICAgICBpc0xvYWRpbmc/Lm5leHQoZmFsc2UpO1xyXG5cclxuICAgICAgaWYgKCFyZXN1bHRzPy5zdWdnZXN0aW9ucykge1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgZGF0YTogTG9jYXRpb25EZXRhaWxzW10gPSByZXN1bHRzLnN1Z2dlc3Rpb25zLm1hcChcclxuICAgICAgICAocmVzdWx0KTogTG9jYXRpb25EZXRhaWxzID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG5hbWU6IHJlc3VsdC5uYW1lLFxyXG4gICAgICAgICAgICBsb25naXR1ZGU6IHJlc3VsdC5sb25naXR1ZGUsXHJcbiAgICAgICAgICAgIGxhdGl0dWRlOiByZXN1bHQubGF0aXR1ZGUsXHJcbiAgICAgICAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXMuQ2l0eSxcclxuICAgICAgICAgICAgY291bnRyeUNvZGU6IHJlc3VsdC5jb3VudHJ5Q29kZVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcblxyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgbWFwKGZ1bmMpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCBjYXIgaGlyZSBkZXBvdHMgYmFzZWQgb24gY2l0eSBjb3Jkc1xyXG4gICAqL1xyXG4gIGdldENhckhpcmVEZXBvdHMoXHJcbiAgICBsYXRpdHVkZTogbnVtYmVyLFxyXG4gICAgbG9uZ2l0dWRlOiBudW1iZXIsXHJcbiAgICByYWRpdXM/OiBzdHJpbmcsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPENhckhpcmVEZXBvdFJlc3VsdEFycmF5PiB7XHJcbiAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XHJcbiAgICBjb25zdCBxdWVyeTogYW55ID0geyBsYXRpdHVkZSwgbG9uZ2l0dWRlIH07XHJcbiAgICBpZiAocmFkaXVzKSB7XHJcbiAgICAgIHF1ZXJ5LnJhZGl1cyA9IHJhZGl1cztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8Q2FySGlyZURlcG90UmVzdWx0QXJyYXk+ID1cclxuICAgICAgdGhpcy5kZXBvdEZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KTtcclxuXHJcbiAgICByZXR1cm4gb2JzOyAvLyAucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xyXG5cclxuICAgIC8vIHJldHVybiBvZihbXSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgcG9zdGNvZGUgbG9jYXRpb25zLCB0aGVzZSB3aWxsIHVzZSBwYXJ0aWFsIHBvc3Rjb2RlLFxyXG4gICAqICBmdWxsIGFuZCB0aGVuIGdyYWJiaW5nIHRoZW0gd2lsbCBsZXQgdXMgZmlsbCBpbiB0aGUgYWRkcmVzcyBmb3JtXHJcbiAgICogQHRvZG8gLSBmaWxsIHRoaXMgb3V0IGZvciB0aGUgb3RoZXIgbG9jYXRpb24gdHlwZXMsIG1heSBuZWVkIHRvIG1lcmdlTWFwIHRoZW0gb3Igc29tZSBvdGhlciByeGpzIG1hZ2ljXHJcbiAgICogQHBhcmFtIHRlcm0gLSB0aGUgdGVybSB0byBzZWFyY2ggYnkgZS5nLiAnd2ExNCcgc2hvdWxkIGJyaW5nIGJhY2ssIG91ciBvZmZpY2UsICdtMzMnIHNob2l1bGQgYnJpbmcgYmFjayBteSBhZGRyc1xyXG4gICAqL1xyXG4gIGdldFBvc3Rjb2RlTGlzdCh0ZXJtOiBzdHJpbmcpOiBPYnNlcnZhYmxlPExvY2F0aW9uRGV0YWlsc1tdPiB7XHJcbiAgICBpZiAoUmVnRXhwcy5VS19QT1NUQ09ERS50ZXN0KHRlcm0pKSB7XHJcbiAgICAgIGNvbnN0IHN1YnMgPSB0aGlzLnBvc3Rjb2RlRmV0Y2hlci5mZXRjaExpc3QoeyBwb3N0Y29kZTogdGVybSB9KS5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzdWx0czogU2VhcmNoUG9zdGNvZGVzUmVzdWx0QXJyYXkpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXN1bHRzLm1hcChcclxuICAgICAgICAgICAgKHJlc3VsdDogU2VhcmNoUG9zdGNvZGVzUmVzdWx0KTogTG9jYXRpb25EZXRhaWxzID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogcmVzdWx0LnBvc3Rjb2RlLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5Qb3N0Y29kZSxcclxuICAgICAgICAgICAgICAgIGxhdGl0dWRlOiByZXN1bHQubGF0aXR1ZGUsXHJcbiAgICAgICAgICAgICAgICBsb25naXR1ZGU6IHJlc3VsdC5sb25naXR1ZGVcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7IC8vIGV4cGFuZCB0aGlzIHdpdGggdGhlIG90aGVyIHNlYXJjaGVzIHdoZW4gdGhleSBhcmUgZG9uZVxyXG5cclxuICAgICAgcmV0dXJuIHN1YnM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVG9TZWxlY3RlZFBsYWNlcyhhZGRyZXNzOiBBZGRyZXNzKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkUGxhY2VzLnB1c2goYWRkcmVzcyk7XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3RlZFBsYWNlQnlJZChwbGFjZUlkOiBzdHJpbmcpOiBBZGRyZXNzIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUGxhY2VzLmZpbmQoXHJcbiAgICAgIChwbGFjZTogeyBwbGFjZV9pZDogc3RyaW5nIH0pID0+IHBsYWNlLnBsYWNlX2lkID09PSBwbGFjZUlkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29uZmlybWFPZmZpY2VzKHRlcm06IHN0cmluZyk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcclxuICAgIGlmICh0ZXJtPy5sZW5ndGggPiAyKSB7XHJcbiAgICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxDb25mZXJtYU9mZmljZU5hbWVSZXN1bHQ+ID1cclxuICAgICAgICB0aGlzLmNvbmZlcm1hT2ZmaWNlTmFtZXNGZXRjaGVyLmZldGNoTGlzdCgpO1xyXG4gICAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IENvbmZlcm1hT2ZmaWNlTmFtZVJlc3VsdCk6IExvY2F0aW9uRGV0YWlsc1tdID0+IHtcclxuICAgICAgICBpZiAoIXJlc3VsdHM/LnJlc3VsdHMpIHtcclxuICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGRhdGE6IExvY2F0aW9uRGV0YWlsc1tdID0gcmVzdWx0cy5yZXN1bHRzLm1hcChcclxuICAgICAgICAgIChyZXN1bHQ6IENvbmZlcm1hT2ZmaWNlTmFtZXMpOiBMb2NhdGlvbkRldGFpbHMgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIG5hbWU6IHJlc3VsdC5uYW1lLFxyXG4gICAgICAgICAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXMuT2ZmaWNlLFxyXG4gICAgICAgICAgICAgIGlkOiByZXN1bHQuaWRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgbWFwKGZ1bmMpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb2YoW10pO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgdGhlIGxpc3Qgb2YgT2ZmaWNlIGxvY2F0aW9ucyBiYXNlZCBvbiBzZWFyY2ggdGVybSBnaXZlblxyXG4gICAqIEB0b2RvIC0gZmlsbCB0aGlzIG91dCBzbyB0aGF0IGl0IGFjdHVhbGx5IHBlcmZvcm1zIGEgaHR0cCBjYWxsXHJcbiAgICogQHBhcmFtIHRlcm0gLSB0aGUgdGVybSB3ZSB3YW50IHRvIHNlYXJjaCBieVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgZ2V0T2ZmaWNlTG9jYXRpb25zKHRlcm06IHN0cmluZyk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcclxuICAgIGlmICh0ZXJtLmxlbmd0aCA+IDIpIHtcclxuICAgICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPEdldFVzZXJDb21wYW55T2ZmaWNlc1Jlc3VsdEFycmF5PiA9XHJcbiAgICAgICAgdGhpcy5nZXRVc2VyQ29tcGFueU9mZmljZXNGZXRjaGVyLmZldGNoTGlzdCgpO1xyXG4gICAgICBjb25zdCBmdW5jID0gKFxyXG4gICAgICAgIHJlc3VsdHM6IEdldFVzZXJDb21wYW55T2ZmaWNlc1Jlc3VsdEFycmF5XHJcbiAgICAgICk6IExvY2F0aW9uRGV0YWlsc1tdID0+IHtcclxuICAgICAgICBjb25zdCBkYXRhOiBMb2NhdGlvbkRldGFpbHNbXSA9IHJlc3VsdHMubWFwKFxyXG4gICAgICAgICAgKHJlc3VsdDogR2V0VXNlckNvbXBhbnlPZmZpY2VzUmVzdWx0KTogTG9jYXRpb25EZXRhaWxzID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICBuYW1lOiByZXN1bHQubmFtZSxcclxuICAgICAgICAgICAgICBvZmZpY2U6IHJlc3VsdC5hZGRyZXNzZXNbMF0sXHJcbiAgICAgICAgICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5PZmZpY2VcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgbWFwKGZ1bmMpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb2YoW10pO1xyXG4gIH1cclxuXHJcbiAgZ2V0U3RhdGlvbkxvY2F0aW9ucyhcclxuICAgIHRlcm06IHN0cmluZyxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPixcclxuICAgIGhhc1RvZDpib29sZWFuID0gZmFsc2VcclxuICApOiBPYnNlcnZhYmxlPExvY2F0aW9uRGV0YWlsc1tdPiB7XHJcbiAgICBpZiAodGVybS5sZW5ndGggPiAyKSB7XHJcbiAgICAgIGlzTG9hZGluZz8ubmV4dCh0cnVlKTtcclxuICAgICAgcmV0dXJuIHRoaXMucmFpbFN0YXRpb25GZXRjaGVyXHJcbiAgICAgICAgLmZldGNoTGlzdCh7XHJcbiAgICAgICAgICBxdWVyeTogdGVybSxcclxuICAgICAgICAgIGhhc1RvZFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgbWFwKChyZXN1bHRzOiBTZWFyY2hSYWlsU3RhdGlvbnNSZXN1bHRBcnJheSk6IExvY2F0aW9uRGV0YWlsc1tdID0+IHtcclxuICAgICAgICAgICAgaWYgKGlzTG9hZGluZykge1xyXG4gICAgICAgICAgICAgIGlzTG9hZGluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0c1xyXG4gICAgICAgICAgICAgID8gcmVzdWx0cy5tYXAoKHJlc3VsdDogU2VhcmNoUmFpbFN0YXRpb25zUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5UcmFpblN0YXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogcmVzdWx0Lm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcmFpbHN0YXRpb246IHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICA6IFtdO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCBpcmwgc3RhdGlvbiBsb2NhdGlvbnNcclxuICAgKiBAcGFyYW0gdGVybSAtIHRoZSB0ZXJtIHRvIHNlYXJjaFxyXG4gICAqIEBwYXJhbSBpc0xvYWRpbmcgLSBCZWhhdmlvclN1YmplY3Qgc28gd2Uga25vdyBzb21ldGhpbmcgaXMgaGFwcGVuaW5nXHJcbiAgICovXHJcbiAgc2VhcmNoSXJsU3RhdGlvbnNMb2NhdGlvbnMoXHJcbiAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPExvY2F0aW9uRGV0YWlsc1tdPiB7XHJcbiAgICBpZiAodGVybS5sZW5ndGggPiAyKSB7XHJcbiAgICAgIGlzTG9hZGluZz8ubmV4dCh0cnVlKTtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoSXJsU3RhdGlvbnNGZXRjaGVyXHJcbiAgICAgICAgLmZldGNoTGlzdCh7XHJcbiAgICAgICAgICBxdWVyeTogdGVybVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgbWFwKChyZXN1bHRzOiBJcmxTdXBwbGllclN0YXRpb25bXSk6IExvY2F0aW9uRGV0YWlsc1tdID0+IHtcclxuICAgICAgICAgICAgaWYgKGlzTG9hZGluZykge1xyXG4gICAgICAgICAgICAgIGlzTG9hZGluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cy5tYXAoKHJlc3VsdDogSXJsU3VwcGxpZXJTdGF0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXMuVHJhaW5TdGF0aW9uLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogYCR7cmVzdWx0Lm5hbWV9ICgke3Jlc3VsdC5zdXBwbGllcn0pYCxcclxuICAgICAgICAgICAgICAgIHJhaWxzdGF0aW9uOiByZXN1bHRcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgaG90ZWwgbG9jYXRpb25zLCB0aGVzZSBzaG91bGQgYmUgY2l0eSwgb2ZmaWNlLCBhaXJwb3J0LCByYWlsc3RhdGlvblxyXG4gICAqIEB0b2RvIC0gZmlsbCB0aGlzIG91dCBmb3IgdGhlIG90aGVyIGxvY2F0aW9uIHR5cGVzLCBtYXkgbmVlZCB0byBtZXJnZU1hcCB0aGVtIG9yIHNvbWUgb3RoZXIgcnhqcyBtYWdpY1xyXG4gICAqIEBwYXJhbSB0ZXJtIC0gdGhlIHRlcm0gdG8gc2VhcmNoIGJ5IGUuZy4gJ01hbicgc2hvdWxkIGJyaW5nIGJhY2ssIG1hbmNoZXN0ZXIsIG1hbmNoZXN0ZXIgYWlycG9ydCwgbWFuY2hlc3RlciBwaWNhZGlsbHksIGV0Y1xyXG4gICAqL1xyXG4gIGdldEhvdGVsTG9jYXRpb25zTGlzdChcclxuICAgIHRlcm06IHN0cmluZyxcclxuICAgIGNvdW50cnlDb2RlOiBDb3VudHJ5Q29kZSxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcclxuICAgIGlmICh0ZXJtLmxlbmd0aCA+IDIpIHtcclxuICAgICAgaWYgKFJlZ0V4cHMuVUtfUE9TVENPREUudGVzdCh0ZXJtKSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFBvc3Rjb2RlTGlzdCh0ZXJtKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIWlzTG9hZGluZz8udmFsdWUpIHtcclxuICAgICAgICAgIGlzTG9hZGluZy5uZXh0KHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzdWJzID0gZm9ya0pvaW4oW1xyXG4gICAgICAgICAgdGhpcy5nZXRBaXJwb3J0TG9jYXRpb25zKHRlcm0sIGNvdW50cnlDb2RlLCBpc0xvYWRpbmcpLFxyXG4gICAgICAgICAgdGhpcy5nZXRDaXR5TG9jYXRpb25zKFxyXG4gICAgICAgICAgICB0ZXJtLFxyXG4gICAgICAgICAgICBjb3VudHJ5Q29kZSxcclxuICAgICAgICAgICAgaXNMb2FkaW5nLFxyXG4gICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVzZXJIYXNTZXJ2aWNlUHJvdmlkZXIoXHJcbiAgICAgICAgICAgICAgU2VydmljZVR5cGUuSG90ZWwsXHJcbiAgICAgICAgICAgICAgU2VydmljZVByb3ZpZGVyLkNvbmZpcm1hXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICB0aGlzLmdldFN0YXRpb25Mb2NhdGlvbnModGVybSwgaXNMb2FkaW5nKSxcclxuICAgICAgICAgIHRoaXMuZ2V0Q29uZmlybWFPZmZpY2VzKHRlcm0pXHJcbiAgICAgICAgXSkucGlwZShcclxuICAgICAgICAgIG1hcCgocmVzdWx0czogYW55W10pID0+IHtcclxuICAgICAgICAgICAgaWYgKGlzTG9hZGluZz8udmFsdWUpIHtcclxuICAgICAgICAgICAgICBpc0xvYWRpbmcubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHMucmVkdWNlKChhY2N1bTogTG9jYXRpb25EZXRhaWxzW10sIHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgYWNjdW0ucHVzaCguLi5yZXN1bHQpO1xyXG4gICAgICAgICAgICAgIHJldHVybiBhY2N1bTtcclxuICAgICAgICAgICAgfSwgW10pO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApOyAvLyBleHBhbmQgdGhpcyB3aXRoIHRoZSBvdGhlciBzZWFyY2hlcyB3aGVuIHRoZXkgYXJlIGRvbmVcclxuICAgICAgICByZXR1cm4gc3VicztcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFN0YXRpb25zQW5kQWlycG9ydHNMaXN0KFxyXG4gICAgdGVybTogc3RyaW5nLFxyXG4gICAgY291bnRyeUNvZGU6IENvdW50cnlDb2RlLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkRldGFpbHNbXT4ge1xyXG4gICAgaWYgKHRlcm0ubGVuZ3RoID4gMikge1xyXG4gICAgICBpZiAoIWlzTG9hZGluZz8udmFsdWUpIHtcclxuICAgICAgICBpc0xvYWRpbmcubmV4dCh0cnVlKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBzdWJzID0gZm9ya0pvaW4oW1xyXG4gICAgICAgIHRoaXMuZ2V0QWlycG9ydExvY2F0aW9ucyh0ZXJtLCBjb3VudHJ5Q29kZSwgaXNMb2FkaW5nKSxcclxuICAgICAgICB0aGlzLmdldFN0YXRpb25Mb2NhdGlvbnModGVybSwgaXNMb2FkaW5nKVxyXG4gICAgICBdKS5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzdWx0czogYW55W10pID0+IHtcclxuICAgICAgICAgIGlmIChpc0xvYWRpbmc/LnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlzTG9hZGluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXN1bHRzLnJlZHVjZSgoYWNjdW06IGFueVtdLCByZXN1bHQ6IGFueVtdKSA9PiB7XHJcbiAgICAgICAgICAgIGFjY3VtLnB1c2goLi4ucmVzdWx0KTtcclxuICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICAgICAgfSwgW10pO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7IC8vIGV4cGFuZCB0aGlzIHdpdGggdGhlIG90aGVyIHNlYXJjaGVzIHdoZW4gdGhleSBhcmUgZG9uZVxyXG4gICAgICByZXR1cm4gc3VicztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gIEBkZXNjIC0gcmVtb3ZlIGEgc3BlY2lmaWVkIHRyYXZlbGxlciBmcm9tIHRoZSBzZWxlY3RlZCBhcnJheVxyXG4gICoqL1xyXG4gIHJlbW92ZVRyYXZlbGxlcih0cmF2ZWxsZXI6IFRyYXZlbGxlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fcmVtb3ZlVHJhdmVsbGVyKHRyYXZlbGxlcik7XHJcblxyXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgQmFzZUVudGVycHJpc2VTZWFyY2hTZXJ2aWNlLlNFU1NJT05fVFJBVkVMTEVSLFxyXG4gICAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVyc1xyXG4gICAgKTtcclxuICAgIHRoaXMudXBkYXRlVHJhdmVsbGVySW5mb3JtYXRpb24oKTtcclxuICB9XHJcblxyXG4gIF9yZW1vdmVUcmF2ZWxsZXIodHJhdmVsbGVyOiBUcmF2ZWxsZXIpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzID0gdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMuZmlsdGVyKFxyXG4gICAgICAodHJhdmVsbGVyVG9UZXN0OiBUcmF2ZWxsZXIpID0+IHtcclxuICAgICAgICByZXR1cm4gIVRyYXZlbGxlck9iamVjdC5lcXVhbHModHJhdmVsbGVyVG9UZXN0LCB0cmF2ZWxsZXIpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlQWxsVHJhdmVsbGVycygpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKCdyZW1vdmUgYWxsIHRyYXZlbGxlcnMgY2FsbGVkIScpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMpO1xyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkVHJhdmVsbGVycykge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVycyA9IFtdO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMuZm9yRWFjaCgodHJhdmVsbGVyOiBUcmF2ZWxsZXIpID0+IHtcclxuICAgICAgdGhpcy5fcmVtb3ZlVHJhdmVsbGVyKHRyYXZlbGxlcik7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBCYXNlRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2UuU0VTU0lPTl9UUkFWRUxMRVIsXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzXHJcbiAgICApO1xyXG4gICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJJbmZvcm1hdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgYWRkVHJhdmVsbGVyKHRyYXZlbGxlcjogVHJhdmVsbGVyKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLnRyYXZlbGxlckFscmVhZHlBZGRlZCh0cmF2ZWxsZXIpICYmXHJcbiAgICAgICF0aGlzLmN1cnJlbnROb09mVHJhdmVsbGVyc0dyZWF0ZXJPckVxdWFsVG9NYXgoKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLnB1c2godHJhdmVsbGVyKTtcclxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgICBCYXNlRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2UuU0VTU0lPTl9UUkFWRUxMRVIsXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnNcclxuICAgICAgKTtcclxuICAgICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJJbmZvcm1hdGlvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuICBjdXJyZW50Tm9PZlRyYXZlbGxlcnNHcmVhdGVyT3JFcXVhbFRvTWF4KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmxlbmd0aCA+PSB0aGlzLm1heFRyYXZlbGxlcnMoKTtcclxuICB9XHJcblxyXG4gIG1heFRyYXZlbGxlcnMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAvKnRoaXMudXNlclNlcnZpY2UudXNlVHJhdmVsbGVyUHJvZmlsZSAmJiovIHRoaXMuY2FuVXNlVHJhdmVsbGVyUHJvZmlsZSgpXHJcbiAgICAgID8gMVxyXG4gICAgICA6IE1BWF9UUkFWRUxMRVJTO1xyXG4gIH1cclxuICAvKlxyXG4gICAgQGRlc2MgLSBoZWxwZXIgZnVuY3Rpb24gLSBkZXRlcm1pbmVzIGlmIGEgc2VsZWN0ZWQgdHJhdmVsbGVyIGlzIGFscmVhZHkgYWRkZWQgLVxyXG4gICAgdXNlZCB0byBwcmV2ZW50IHNhbWUgdHJhdmVsbGVyIGJlaW5nIGFkZGVkIG1vcmUgdGhhbiBvbmNlXHJcbiAgKiovXHJcbiAgdHJhdmVsbGVyQWxyZWFkeUFkZGVkKHRyYXZlbGxlcjogVHJhdmVsbGVyKTogYm9vbGVhbiB7XHJcbiAgICAvLyBpdGVyYXRlIHRocm91Z2ggdGhlIHNlbGVjdGVkIHRyYXZlbGxlcnMgYW5kIHJldHVybiB0cnVlIGlmIGZvdW5kLCBmYWxzZSBvdGhlciB3aXNlXHJcbiAgICByZXR1cm4gISF0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5maW5kKCh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXIpID0+XHJcbiAgICAgIFRyYXZlbGxlck9iamVjdC5lcXVhbHModHJhdmVsbGVycywgdHJhdmVsbGVyKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGNhblVzZVRyYXZlbGxlclByb2ZpbGUoKTogYm9vbGVhbiB7XHJcbiAgICAvKlxyXG4gICAgaWYgKHRoaXMudXNlclNlcnZpY2UuaXNVc2VyRmF2b3JpdGVTZXQoVXNlckZhdm9ydXJpdGUuRG9udFVzZVRyYXZlbGxlclBvbGljeSkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdXNlciA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckRldGFpbHMoKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmxlbmd0aCA9PT0gMSAmJlxyXG4gICAgICAhdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnNbMF1cclxuICAgICAgICAuZ3Vlc3QgLyomJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVyc1swXS5wYXhfaWQgJiZcclxuICAgICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnNbMF0ucGF4X2lkICE9PSB1c2VyLlBheElkXHJcbiAgICApOyovXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnZXRDdXJyZW50Tm9PZlRyYXZlbGxlcnMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVUcmF2ZWxsZXJJbmZvcm1hdGlvbigpIHtcclxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIEJhc2VFbnRlcnByaXNlU2VhcmNoU2VydmljZS5TRVNTSU9OX1RSQVZFTExFUixcclxuICAgICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnNcclxuICAgICk7XHJcbiAgICB0aGlzLnRyYXZlbGxlckluZm9ybWF0aW9uLm5leHQoWy4uLnRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzXSk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqICBAZGVzYyAtIGRldGVybWluZSBhbmQgcmV0dXJuIHRoZSBoaWdoZXN0IHByaW9yaXR5IHZhbHVlLFxyXG4gICAqICAgdGhlIGhpZ2hlc3QgaXMgYmFzZWQgb24gdGhlIHByaW9yaXR5IHZhbHVlIG9mIHRoZSBzZWFyY2ggdHlwZSxcclxuICAgKiAgICBpZiBpdCBpcyBjaG9zZW4gYW5kIGlmIHRoZSBib29raW5nIGhhcyBub3QgYmVlbiBjaG9zZW5cclxuICAgKiovXHJcbiAgZGV0ZXJtaW5lSGlnaGVzdFNlYXJjaFByaW9yaXR5KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKHRoaXMuaGlnaGVzdF9zZWFyY2hfcHJpb3JpdHkgPVxyXG4gICAgICB0aGlzLl9nZXRIaWdoZXN0U2VhcmNoUHJpb3JpdHlPYmplY3QoKS5oaWdoZXN0KTtcclxuICB9XHJcblxyXG4gIGdldEhpZ2hlc3RTZWFyY2hQcmlvcml0eU9iamVjdChcclxuICAgIGJhc2tldEl0ZW1zOiBSZWNvcmQ8U2VydmljZVR5cGUsIEJhc2tldEl0ZW0+XHJcbiAgKTogU2VhcmNoT2JqZWN0IHtcclxuICAgIHJldHVybiB0aGlzLl9nZXRIaWdoZXN0U2VhcmNoUHJpb3JpdHlPYmplY3QoYmFza2V0SXRlbXMpLmN1cnJlbnRJdGVtO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0SGlnaGVzdFNlYXJjaFByaW9yaXR5T2JqZWN0KFxyXG4gICAgYmFza2V0SXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT4gPSB7fSBhcyBSZWNvcmQ8XHJcbiAgICAgIFNlcnZpY2VUeXBlLFxyXG4gICAgICBCYXNrZXRJdGVtXHJcbiAgICA+XHJcbiAgKTogSGlnaGVzdFNlYXJjaFByaW9yaXR5T2JqZWN0SW50ZXJmYWNlIHtcclxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuc2VhcmNoX29iamVjdHMpLnJlZHVjZShcclxuICAgICAgKHsgaGlnaGVzdCwgY3VycmVudEl0ZW0gfSwgaXRlbTogU2VhcmNoT2JqZWN0KSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0uY2hvc2VuICYmIGl0ZW0ucHJpb3JpdHkgPCBoaWdoZXN0KSB7XHJcbiAgICAgICAgICBpZiAoIWJhc2tldEl0ZW1zW2l0ZW0udHlwZSBhcyBTZXJ2aWNlVHlwZV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgaGlnaGVzdDogaXRlbS5wcmlvcml0eSwgY3VycmVudEl0ZW06IGl0ZW0gfTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGl0ZW0uY2hvc2VuID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IGhpZ2hlc3QsIGN1cnJlbnRJdGVtIH07XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgaGlnaGVzdDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsIGN1cnJlbnRJdGVtOiBudWxsIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3RlZE9wdGlvbnMoKTogU2VydmljZVR5cGVbXSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5zZWFyY2hfb2JqZWN0cykucmVkdWNlKChjdiwgaXRlbUluZGV4KSA9PiB7XHJcbiAgICAgIGlmICgodGhpcy5zZWFyY2hfb2JqZWN0cyBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtpdGVtSW5kZXhdLmNob3Nlbikge1xyXG4gICAgICAgIGN2LnB1c2goaXRlbUluZGV4IGFzIFNlcnZpY2VUeXBlKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gY3Y7XHJcbiAgICB9LCBbXSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVja3MgaWYgc2VsZWN0ZWQgdHJhdmVsbGVycyBjb250YWlucyBhbnkgZ3Vlc3RzIHdpdGhvdXQgYWxsIG9mIGRldGFpbHNcclxuICAgKi9cclxuICBoYXNTaW1wbGVHdWVzdHMoKTogYm9vbGVhbiB7XHJcbiAgICAvKnJldHVybiAhIXRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmZpbmQoKHsgZ3Vlc3QsIHBob25lLCBuYXRpb25hbGl0eSwgZW1haWwgfSkgPT4ge1xyXG4gICAgICByZXR1cm4gZ3Vlc3QgJiYgISghIWVtYWlsICYmICEhcGhvbmUgJiYgISFuYXRpb25hbGl0eSk7XHJcbiAgICB9KTsqL1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gc2V0IHRoZSBzZWFyY2ggb2JqZWN0cyB0byB0aGUgZ2V0IG1lIHRoZXJlIG9iamVjdHMgLSBjYWxsZWQgYmVmb3JlIHN0YXJ0aW5nIHRoZSBnZXQgbWUgdGhlcmUgc2VhcmNoZXNcclxuICAgKi9cclxuICBzZXRHZXRNZVRoZXJlU2VhcmNoT2JqZWN0cygpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKCcrKysgU2V0dGluZyBHZXRNZVRoZXJlIFNlYXJjaCBPYmplY3RzICsrKycpO1xyXG4gICAgdGhpcy5zZWFyY2hfb2JqZWN0cyA9IHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLmdldE1lVGhlcmVTZWFyY2hPYmplY3RzKCkpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRTZWFyY2hQYXJhbXMoKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZygnUmVzZXRpbmcgU2VhcmNoIFBhcmFtcyEnKTtcclxuICAgIHRoaXMuc2VhcmNoX29iamVjdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5pbml0X3NlYXJjaF9vYmplY3RzKCkpO1xyXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgQmFzZUVudGVycHJpc2VTZWFyY2hTZXJ2aWNlLlNFU1NJT05fVFJBVkVMTEVSLFxyXG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzXHJcbiAgICApO1xyXG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLnNlYXJjaGVzKS5mb3JFYWNoKFxyXG4gICAgICAocHJvZHVjdFNlYXJjaFNlcnZpY2U6IEJhc2VFbnRlcnByaXNlU2VhcmNoPGFueSwgYW55LCBhbnlbXT4pID0+IHtcclxuICAgICAgICBwcm9kdWN0U2VhcmNoU2VydmljZS5yZXNldCgpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY2FuU2VhcmNoKHR5cGU6IFNlcnZpY2VUeXBlIHwgc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAvLyBjaGVjayB0aGF0IHRoZSBzZWxlY3RlZCB0eXBlIGlzIGNob3NlbiwgaGFzIGhpZ2hlc3QgcHJpb3JpdHkgYW5kIGhhcyBub3QgYWxyZWFkeSBoYWQgYSBib29raW5nIGNob3NlblxyXG5cclxuICAgIHRoaXMuZGV0ZXJtaW5lSGlnaGVzdFNlYXJjaFByaW9yaXR5KCk7XHJcbiAgICAvLyBmaXJzdGx5IGNoZWNrIHRoYXQgdGhlIHR5cGUgb2Ygc2VhcmNoIGV4aXN0c1xyXG4gICAgaWYgKCh0aGlzLnNlYXJjaF9vYmplY3RzIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3R5cGVdKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdjYW4gc2VhcmNoIGhlcmUnKTtcclxuICAgICAgLy8gbm93IGNoZWNrIHRoYXQgdGhlIHR5cGUgaXMgY2hvc2VuIGhhcyBoaWdoZXN0IHByaW9yaXR5XHJcbiAgICAgIGlmIChcclxuICAgICAgICAodGhpcy5zZWFyY2hfb2JqZWN0cyBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVt0eXBlXS5jaG9zZW4gJiZcclxuICAgICAgICB0aGlzLmhhc0hpZ2hlc3RTZWFyY2hQcmlvcml0eShcclxuICAgICAgICAgICh0aGlzLnNlYXJjaF9vYmplY3RzIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3R5cGVdLnByaW9yaXR5XHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICBjb25zb2xlLmxvZyh0eXBlICsgJyBjYW4gYmUgc2VhcmNoZWQnKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgaGFzSGlnaGVzdFNlYXJjaFByaW9yaXR5KHByaW9yaXR5VmFsOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHRoaXMuZGV0ZXJtaW5lSGlnaGVzdFNlYXJjaFByaW9yaXR5KCk7XHJcbiAgICByZXR1cm4gcHJpb3JpdHlWYWwgPD0gdGhpcy5oaWdoZXN0X3NlYXJjaF9wcmlvcml0eTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogIEBkZXNjIC0gY29uY2F0aW5hdHMgYWxsIHRoZSB2YWxpZGF0aW9uIG1lc3NhZ2VzIGFjcm9zcyBhbGwgc2VsZWN0ZWQgdHlwZXMgK1xyXG4gICAqICAgdHJhdmVsbGVycyAob3Igd2lsbCBkbyB3aGVuIGl0J3MgY29tcGxldGUpIFRPRE8gLSBhZGQgRmxpZ2h0LCBSYWlsIENhclxyXG4gICAqKi9cclxuICBnZXRBbGxFcnJvck1lc3NhZ2VzKCk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IGNvbmNhdHRlZEVycm9yczogc3RyaW5nW10gPSB0aGlzLnRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlcztcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5Mb3VuZ2VdLmNob3NlbiAmJlxyXG4gICAgICB0aGlzLmNhblNlYXJjaChTZXJ2aWNlVHlwZS5Mb3VuZ2UpXHJcbiAgICApIHtcclxuICAgICAgY29uY2F0dGVkRXJyb3JzLnB1c2goXHJcbiAgICAgICAgLi4udGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5Mb3VuZ2VdLnZhbGlkYXRpb25NZXNzYWdlc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5DYXJdLmNob3NlbiAmJlxyXG4gICAgICB0aGlzLmNhblNlYXJjaChTZXJ2aWNlVHlwZS5DYXIpXHJcbiAgICApIHtcclxuICAgICAgY29uY2F0dGVkRXJyb3JzLnB1c2goXHJcbiAgICAgICAgLi4udGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5DYXJdLnZhbGlkYXRpb25NZXNzYWdlc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5SYWlsXS5jaG9zZW4gJiZcclxuICAgICAgdGhpcy5jYW5TZWFyY2goU2VydmljZVR5cGUuUmFpbClcclxuICAgICkge1xyXG4gICAgICBjb25jYXR0ZWRFcnJvcnMucHVzaChcclxuICAgICAgICAuLi50aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLlJhaWxdLnZhbGlkYXRpb25NZXNzYWdlc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5QYXJraW5nXS5jaG9zZW4gJiZcclxuICAgICAgdGhpcy5jYW5TZWFyY2goU2VydmljZVR5cGUuUGFya2luZylcclxuICAgICkge1xyXG4gICAgICBjb25jYXR0ZWRFcnJvcnMucHVzaChcclxuICAgICAgICAuLi50aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLlBhcmtpbmddLnZhbGlkYXRpb25NZXNzYWdlc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5DYWJdLmNob3NlbiAmJlxyXG4gICAgICB0aGlzLmNhblNlYXJjaChTZXJ2aWNlVHlwZS5DYWIpXHJcbiAgICApIHtcclxuICAgICAgY29uY2F0dGVkRXJyb3JzLnB1c2goXHJcbiAgICAgICAgLi4udGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5DYWJdLnZhbGlkYXRpb25NZXNzYWdlc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5Ib3RlbF0uY2hvc2VuICYmXHJcbiAgICAgIHRoaXMuY2FuU2VhcmNoKFNlcnZpY2VUeXBlLkhvdGVsKVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbmNhdHRlZEVycm9ycy5wdXNoKFxyXG4gICAgICAgIC4uLnRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuSG90ZWxdLnZhbGlkYXRpb25NZXNzYWdlc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5GYXN0VHJhY2tdLmNob3NlbiAmJlxyXG4gICAgICB0aGlzLmNhblNlYXJjaChTZXJ2aWNlVHlwZS5GYXN0VHJhY2spXHJcbiAgICApIHtcclxuICAgICAgY29uY2F0dGVkRXJyb3JzLnB1c2goXHJcbiAgICAgICAgLi4udGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5GYXN0VHJhY2tdLnZhbGlkYXRpb25NZXNzYWdlc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICBpZiAodGhpcy5zZWFyY2hfb2JqZWN0cy5ob3RlbC5jaG9zZW4gJiYgdGhpcy5jYW5TZWFyY2goVHJhdmVsVHlwZUVudW0uSE9URUwpKSB7XHJcbiAgICAgIGNvbmNhdHRlZEVycm9ycyA9IGNvbmNhdHRlZEVycm9ycy5jb25jYXQodGhpcy5ob3RlbC52YWxpZGF0aW9uTWVzc2FnZXMpO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgaWYgKHRoaXMuc2VhcmNoX29iamVjdHMuZmxpZ2h0LmNob3NlbiAmJiB0aGlzLmNhblNlYXJjaChUcmF2ZWxUeXBlRW51bS5GTElHSFQpKSB7XHJcbiAgICAgIGNvbmNhdHRlZEVycm9ycyA9IGNvbmNhdHRlZEVycm9ycy5jb25jYXQodGhpcy5mbGlnaHQudmFsaWRhdGlvbk1lc3NhZ2VzKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zZWFyY2hfb2JqZWN0cy5wYXJraW5nLmNob3NlbiAmJiB0aGlzLmNhblNlYXJjaChUcmF2ZWxUeXBlRW51bS5BSVJfUEFSS0lORykpIHtcclxuICAgICAgY29uY2F0dGVkRXJyb3JzLnB1c2goLi4udGhpcy5wYXJraW5nLnZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VhcmNoX29iamVjdHMudGF4aS5jaG9zZW4gJiYgdGhpcy5jYW5TZWFyY2goVHJhdmVsVHlwZUVudW0uVEFYSSkpIHtcclxuICAgICAgY29uY2F0dGVkRXJyb3JzLnB1c2goLi4udGhpcy50YXhpLnZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VhcmNoX29iamVjdHMuZXVyb3N0YXIuY2hvc2VuICYmIHRoaXMuY2FuU2VhcmNoKFRyYXZlbFR5cGVFbnVtLkVVUk9TVEFSKSkge1xyXG4gICAgICBjb25jYXR0ZWRFcnJvcnMucHVzaCguLi50aGlzLmV1cm9zdGFyLnZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VhcmNoX29iamVjdHMuY29hY2guY2hvc2VuICYmIHRoaXMuY2FuU2VhcmNoKFRyYXZlbFR5cGVFbnVtLkNPQUNIKSkge1xyXG4gICAgICBjb25jYXR0ZWRFcnJvcnMucHVzaCguLi50aGlzLmNvYWNoLnZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgICB9Ki9cclxuICAgIHRoaXMuZXJyb3JzLm5leHQoY29uY2F0dGVkRXJyb3JzKTtcclxuICAgIHJldHVybiBjb25jYXR0ZWRFcnJvcnM7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgdHJhdmVsbGVyc0NvbnRhaW5Vc2VyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMuZmluZCgodHJhdmVsbGVyOiBUcmF2ZWxsZXIpID0+IHtcclxuICAgICAgcmV0dXJuIHRyYXZlbGxlci5pZCA9PT0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VySWQoKS50b1N0cmluZygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdmFsaWRhdGVUcmF2ZWxsZXJzKCk6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy50cmF2ZWxsZXJWYWxpZGF0aW9uTWVzc2FnZXMgPSBbXTtcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMudXNlclNlcnZpY2UuZnVsbFVzZXJEZXRhaWxzLnVzZXJEYXRhLnZhbHVlLmJvb2tlcl90eXBlKSB7XHJcbiAgICAgIGNhc2UgQm9va2VyVHlwZS5TZWxmQm9vazpcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAhKFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5sZW5ndGggPT09IDEgJiYgdGhpcy50cmF2ZWxsZXJzQ29udGFpblVzZXIoKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgLy8gdGhpcyBzaG91bGQgbmV2ZXIgdHJpZ2dlciB1bmRlciBub3JtYWwgY29uZGl0aW9ucyBhcyB0aGUgdXNlciBzaG91bGQgYmUgbG9hZGVkIGluIGFzIGEgdHJhdmVsbGVyIG9uIGxvZ2luXHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICAgICAnQ3VycmVudCB1c2VyIG11c3QgYmUgYSB0cmF2ZWxsZXInXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQm9va2VyVHlwZS5Cb29rZXJXaXRoU2VsZjpcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAhKHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmxlbmd0aCA8IDEpIHx8XHJcbiAgICAgICAgICAhdGhpcy50cmF2ZWxsZXJzQ29udGFpblVzZXIoKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsZXJWYWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIGFkZCB5b3VyIHNlbGYuJyk7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlcl9lcnJvciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEJvb2tlclR5cGUuQm9va2VyOlxyXG4gICAgICBjYXNlIEJvb2tlclR5cGUuQ29tcGFueTpcclxuICAgICAgY2FzZSBCb29rZXJUeXBlLkNvbXBhbnlHcm91cDpcclxuICAgICAgY2FzZSBCb29rZXJUeXBlLk9mZmljZTpcclxuICAgICAgY2FzZSBCb29rZXJUeXBlLlRtYzpcclxuICAgICAgY2FzZSBCb29rZXJUeXBlLlJvb3Q6XHJcbiAgICAgICAgaWYgKCEodGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMubGVuZ3RoID49IDEpKSB7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICAgICAnUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCBvbmUgdHJhdmVsbGVyJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVyX2Vycm9yID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJWYWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAgICdVbnJlY29nbmlzZWQgdXNlciB0eXBlISAtIFBsZWFzZSBjb250YWN0IHN1cHBvcnQuJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2codGhpcy50cmF2ZWxsZXJWYWxpZGF0aW9uTWVzc2FnZXMpO1xyXG4gICAgcmV0dXJuIHRoaXMudHJhdmVsbGVyVmFsaWRhdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMDtcclxuICB9XHJcblxyXG4gIGZpbmRQYXhJblRyYXZlbGxlcnModXNlcm5hbWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmZpbmQoKHRyYXZlbGxlcjogVHJhdmVsbGVyKSA9PiB7XHJcbiAgICAgIHJldHVybiB1c2VybmFtZSA9PT0gdHJhdmVsbGVyLmVtYWlsO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZUZvcm1zKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qgc2VhcmNoT2JqZWN0OiBTZWFyY2hPYmplY3QgPSB0aGlzLl9maW5kU2VhcmNoT2J0ZWN0KCk7XHJcbiAgICB0aGlzLmdldEFsbEVycm9yTWVzc2FnZXMoKTtcclxuICAgIGlmIChzZWFyY2hPYmplY3QpIHtcclxuICAgICAgdGhpcy5lcnJvcnMubmV4dChcclxuICAgICAgICB0aGlzLnNlYXJjaGVzW3NlYXJjaE9iamVjdC50eXBlIGFzIGtleW9mIFNlYXJjaFBhcmFtc10ubWVzc2FnZXMudmFsdWVcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICB0aGlzLnZhbGlkYXRlVHJhdmVsbGVycygpICYmXHJcbiAgICAgICAgdGhpcy5zZWFyY2hlc1tzZWFyY2hPYmplY3QudHlwZSBhcyBrZXlvZiBTZWFyY2hQYXJhbXNdLmlzVmFsaWQudmFsdWVcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2ZpbmRTZWFyY2hPYnRlY3QoKTogU2VhcmNoT2JqZWN0IHwgbnVsbCB7XHJcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnNlYXJjaF9vYmplY3RzKS5maW5kKChvYmo6IFNlYXJjaE9iamVjdCkgPT4ge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgICEhb2JqICYmIG9iai5wcmlvcml0eSA9PT0gdGhpcy5oaWdoZXN0X3NlYXJjaF9wcmlvcml0eSAmJiBvYmouY2hvc2VuXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHN0YXJ0U2VhcmNoZXModXJsPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLm5ld1NlYXJjaFN0YXJ0ZWQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuc2VhcmNoX2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgbGV0IHNlYXJjaE9iamVjdDogU2VhcmNoT2JqZWN0O1xyXG4gICAgc2VhcmNoT2JqZWN0ID0gdGhpcy5fZmluZFNlYXJjaE9idGVjdCgpO1xyXG4gICAgaWYgKHNlYXJjaE9iamVjdCkge1xyXG4gICAgICBzZWFyY2hPYmplY3QuY2hvc2VuID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodXJsKSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmxdKTtcclxuICAgICAgaWYgKHRoaXMuc2VhcmNoZXMuSU5URVJOQVRJT05BTF9SQUlMKSB7XHJcbiAgICAgICAgdGhpcy5zdWJtaXRJcmxGb3JtKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIHNlYXJjaE9iamVjdCAmJlxyXG4gICAgICAhdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKHNlYXJjaE9iamVjdC5yZXN1bHRVcmwpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3NlYXJjaE9iamVjdC5yZXN1bHRVcmxdKTtcclxuICAgIH1cclxuXHJcbiAgICAvKklmIHRoZSBzZWFyY2ggZXhjZWVkcyB0aGUgdGltZW91dCB0aW1lLCBjYW5jZWwgc2VhcmNoIGFuZCB0ZWxsIE9CVCB0aGF0IGl0J3MgdGltZWQgb3V0Ki9cclxuICAgIC8vIGNvbnN0IGNvbnRleHQgPSB0aGlzO1xyXG4gICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgIGlmIChjb250ZXh0LnNlYXJjaF9sb2FkaW5nKSB7XHJcbiAgICAvLyAgICAgY29udGV4dC5zZWFyY2hfbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgLy8gICAgIGNvbnRleHQuc2VhcmNoVGltZWRPdXQubmV4dCh0cnVlKTtcclxuICAgIC8vICAgICBjb250ZXh0LnNlYXJjaExvYWRpbmdEb25lLm5leHQodHJ1ZSk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH0sIHRoaXMuZW52aXJvbm1lbnQuc2VhcmNoVGltZW91dCk7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLnNlYXJjaGVzKS5tYXAoXHJcbiAgICAgICAgICAoc2VhcmNoOiBCYXNlRW50ZXJwcmlzZVNlYXJjaDxhbnksIGFueSwgYW55W10+KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiAhIXNlYXJjaCAmJlxyXG4gICAgICAgICAgICAgIHRoaXMuc2VhcmNoX29iamVjdHNbc2VhcmNoLnR5cGVdICYmXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tzZWFyY2gudHlwZV0uY2hvc2VuXHJcbiAgICAgICAgICAgICAgPyBzZWFyY2guc3RhcnRTZWFyY2goKVxyXG4gICAgICAgICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApXHJcbiAgICAgICkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hfbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoTG9hZGluZ0RvbmUubmV4dCh0cnVlKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgdGhpcy5zZWFyY2hfbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNlYXJjaExvYWRpbmdEb25lLm5leHQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRUYXhpU3RhdGlvbkxvY2F0aW9ucyhcclxuICAgIHRlcm06IHN0cmluZyxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8UmFpbEFpcnBvcnRbXT4ge1xyXG4gICAgcmV0dXJuIHRlcm0ubGVuZ3RoIDwgM1xyXG4gICAgICA/IG9mKFtdKVxyXG4gICAgICA6IG9mKFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZGVzdGluYXRpb246ICdNYW5jaGVzdGVyIEFpcnBvdCcsXHJcbiAgICAgICAgICAgIGlzYWlycG9ydDogdHJ1ZSxcclxuICAgICAgICAgICAgc3VwcGxpZXJfY29kZTogJ01BTicsXHJcbiAgICAgICAgICAgIGFkZHJlc3M6ICdNYW5jaGVzdGVyIEFpcnBvcnQnLFxyXG4gICAgICAgICAgICBwb3N0Y29kZTogJ005MCAxUVgnXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogJ01hbmNoZXN0ZXIgUGljY2FkaWxseScsXHJcbiAgICAgICAgICAgIGlzYWlycG9ydDogZmFsc2UsXHJcbiAgICAgICAgICAgIHN1cHBsaWVyX2NvZGU6ICdNTUFOJyxcclxuICAgICAgICAgICAgYWRkcmVzczogJ01hbmNoZXN0ZXIgUGljY2FkaWxseScsXHJcbiAgICAgICAgICAgIHBvc3Rjb2RlOiAnTTEgMlBaJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZGVzdGluYXRpb246ICdMb25kb24gSGVhdGhyb3cnLFxyXG4gICAgICAgICAgICBpc2FpcnBvcnQ6IHRydWUsXHJcbiAgICAgICAgICAgIHN1cHBsaWVyX2NvZGU6ICdMSFInLFxyXG4gICAgICAgICAgICBhZGRyZXNzOiAnTG9uZG9uIEhlYXRocm93IEFpcnBvcnQnLFxyXG4gICAgICAgICAgICBwb3N0Y29kZTogJ1RXNiAxRVcnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXSk7XHJcbiAgfVxyXG5cclxuICBnZXRBZGRyZXNzZXMoaXNMb2FkaW5nOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4pOiBPYnNlcnZhYmxlPEFkZHJlc3NGb3JtW10+IHtcclxuICAgIHJldHVybiBvZihbXHJcbiAgICAgIHtcclxuICAgICAgICBIb3VzZTogJ0NlY2lsIENvdXJ0JyxcclxuICAgICAgICBTdHJlZXQ6ICcyOC0zNiBDZWNpbCBSb2FkJyxcclxuICAgICAgICBUb3duOiAnSGFsZScsXHJcbiAgICAgICAgUG9zdENvZGU6ICdXQTE1IDlQQicsXHJcbiAgICAgICAgQ291bnRyeTogJ1VLJ1xyXG4gICAgICB9XHJcbiAgICBdKTtcclxuICB9XHJcblxyXG4gIGdldFVzZXJBZGRyZXNzZXMoXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPEFkZHJlc3NGb3JtW10+IHtcclxuICAgIHJldHVybiB0aGlzLnVzZXJBZGRyZXNzZXNGZXRjaGVyLmZldGNoTGlzdCgpLnBpcGUoXHJcbiAgICAgIHRha2UoMSksXHJcbiAgICAgIG1hcCgocmVzdWx0czogYW55KTogYW55ID0+IHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0cy5tYXAoKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBJRDogcmVzdWx0LmlkLFxyXG4gICAgICAgICAgICBIb3VzZTogcmVzdWx0Lm51bWJlck9yTmFtZSxcclxuICAgICAgICAgICAgU3RyZWV0OiByZXN1bHQuc3RyZWV0LFxyXG4gICAgICAgICAgICBUb3duOiByZXN1bHQudG93bixcclxuICAgICAgICAgICAgUG9zdENvZGU6IHJlc3VsdC5wb3N0Y29kZSxcclxuICAgICAgICAgICAgQ291bnRyeTogcmVzdWx0LmNvdW50cnlDb2RlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVVzZXJBZGRyZXNzQnlJRChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmJhc2VEZWxldGVVc2VyQWRkcmVzc1VwZGF0ZXIudXBkYXRlT25lKHsgaWQ6IGlkIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0SG90ZWxDaGFpbihcclxuICAgIHRlcm06IHN0cmluZyxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGlmICh0ZXJtLmxlbmd0aCA+IDIpIHtcclxuICAgICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xyXG4gICAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8U2VhcmNoSG90ZWxDaGFpbnNSZXN1bHRBcnJheT4gPVxyXG4gICAgICAgIHRoaXMuc2VhcmNoSG90ZWxDaGFpbnNGZXRjaGVyLmZldGNoTGlzdCh7IHF1ZXJ5OiB0ZXJtIH0pO1xyXG4gICAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IFNlYXJjaEhvdGVsQ2hhaW5zUmVzdWx0QXJyYXkpOiBhbnlbXSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGF0YTogYW55W10gPSByZXN1bHRzLm1hcChcclxuICAgICAgICAgIChyZXN1bHQ6IFNlYXJjaEhvdGVsQ2hhaW5zUmVzdWx0KTogYW55ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICBuYW1lOiByZXN1bHRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIGlzTG9hZGluZz8ubmV4dChmYWxzZSk7XHJcbiAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICAgIH07XHJcbiAgICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvZihbXSk7XHJcbiAgfVxyXG5cclxuICBnZXRPZmZpY2VOYW1lcyhcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8Q29uZmVybWFPZmZpY2VOYW1lc1tdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25mZXJtYU9mZmljZU5hbWVzRmV0Y2hlci5mZXRjaExpc3QoKS5waXBlKFxyXG4gICAgICB0YWtlKDEpLFxyXG4gICAgICBtYXAoKHJlc3VsdHMpOiBhbnkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHRzKSB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzdWx0cz8ucmVzdWx0cz8ubWFwKChyZXN1bHQ6IENvbmZlcm1hT2ZmaWNlTmFtZXMpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICBpZDogcmVzdWx0LmlkLFxyXG4gICAgICAgICAgICAgIG5hbWU6IHJlc3VsdC5uYW1lXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgaXNMb2FkaW5nPy5uZXh0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIGdldE9mZmljZShvZmZpY2VJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxDb25mZXJtYU9mZmljZUluZm8+IHtcclxuICAgIGlmIChvZmZpY2VJZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25mZXJtYU9mZmljZUZldGNoZXIuZmV0Y2hPbmUoeyBvZmZpY2VJZCB9KS5waXBlKFxyXG4gICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgbWFwKChyZXN1bHRzOiBDb25mZXJtYU9mZmljZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHMucmVzdWx0cztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRBbGxIb3RlbENoYWlucygpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8R2V0SG90ZWxDaGFpbnNSZXN1bHRBcnJheT4gPVxyXG4gICAgICB0aGlzLmdldEhvdGVsQ2hhaW5zRmV0Y2hlci5mZXRjaExpc3QoKTtcclxuICAgIGNvbnN0IGZ1bmMgPSAocmVzdWx0czogR2V0SG90ZWxDaGFpbnNSZXN1bHRBcnJheSk6IGFueVtdID0+IHtcclxuICAgICAgY29uc3QgZGF0YTogYW55W10gPSByZXN1bHRzLm1hcCgocmVzdWx0OiBHZXRIb3RlbENoYWluc1Jlc3VsdCk6IGFueSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIG5hbWU6IHJlc3VsdFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgbWFwKGZ1bmMpKTtcclxuICB9XHJcblxyXG4gIGdldEFsbFJhaWxQcm92aWRlcnMoKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPGdldFJhaWxQcm92aWRlcnNSZXN1bHRBcnJheT4gPVxyXG4gICAgICB0aGlzLmdldFJhaWxQcm92aWRlcnNGZXRjaGVyLmZldGNoTGlzdCgpO1xyXG4gICAgY29uc3QgZnVuYyA9IChyZXN1bHRzOiBnZXRSYWlsUHJvdmlkZXJzUmVzdWx0QXJyYXkpOiBhbnlbXSA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGE6IGFueVtdID0gcmVzdWx0cy5tYXAoKHJlc3VsdDogZ2V0UmFpbFByb3ZpZGVyc1Jlc3VsdCk6IGFueSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIG5hbWU6IHJlc3VsdFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgbWFwKGZ1bmMpKTtcclxuICB9XHJcblxyXG4gIGdldENhckhpcmVQcm9pdmRlcnMoKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPEdldENhckhpcmVQcm92aWRlcnNSZXN1bHRBcnJheT4gPVxyXG4gICAgICB0aGlzLmdldENhckhpcmVQcm92aWRlcnNGZXRjaGVyLmZldGNoTGlzdCgpO1xyXG4gICAgY29uc3QgZnVuYyA9IChyZXN1bHRzOiBHZXRDYXJIaXJlUHJvdmlkZXJzUmVzdWx0QXJyYXkpOiBhbnlbXSA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGE6IGFueVtdID0gcmVzdWx0cy5tYXAoXHJcbiAgICAgICAgKHJlc3VsdDogR2V0Q2FySGlyZVByb3ZpZGVyc1Jlc3VsdCk6IGFueSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBuYW1lOiByZXN1bHRcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgbWFwKGZ1bmMpKTtcclxuICB9XHJcblxyXG4gIGdldEFsbEFpcmxpbmVzKCk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxHZXRBbGxBaXJsaW5lc1Jlc3VsdEFycmF5PiA9XHJcbiAgICAgIHRoaXMuZ2V0QWxsQWlybGluZXNGZXRjaGVyLmZldGNoTGlzdCgpO1xyXG4gICAgY29uc3QgZnVuYyA9IChyZXN1bHRzOiBHZXRBbGxBaXJsaW5lc1Jlc3VsdEFycmF5KTogYW55W10gPT4ge1xyXG4gICAgICBjb25zdCBkYXRhOiBhbnlbXSA9IHJlc3VsdHMubWFwKChyZXN1bHQ6IEdldEFsbEFpcmxpbmVzUmVzdWx0KTogYW55ID0+IHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIG9icy5waXBlKHRha2UoMSksIG1hcChmdW5jKSk7XHJcbiAgfVxyXG5cclxuICBnZXRSYWlsQ2FyZHMoKTogT2JzZXJ2YWJsZTxSZWZlcmVuY2VSYWlsQ2FyZFF1YWxpZmllcltdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRSYWlsQ2FyZHNGZXRjaGVyLmZldGNoTGlzdCgpLnBpcGUoXHJcbiAgICAgIHRha2UoMSksXHJcbiAgICAgIG1hcCgocmVzdWx0cyk6IGFueSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdHMpIHtcclxuICAgICAgICAgIGNvbnN0IHJhaWxDYXJkcyA9IHJlc3VsdHMubWFwKFxyXG4gICAgICAgICAgICAocmVzdWx0OiBSZWZlcmVuY2VSYWlsQ2FyZFF1YWxpZmllcikgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiByZXN1bHQubmFtZSxcclxuICAgICAgICAgICAgICAgIGNvZGU6IHJlc3VsdC5jb2RlXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHJldHVybiByYWlsQ2FyZHMuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRBaXJwb3J0QnlDb2RlKGNvZGU6IHN0cmluZyk6IE9ic2VydmFibGU8QWlycG9ydFNlYXJjaFJlc3VsdHM+IHtcclxuICAgIGlmIChjb2RlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaEFpcnBvcnRzRmV0Y2hlci5mZXRjaE9uZSh7IHF1ZXJ5OiBjb2RlIH0pLnBpcGUoXHJcbiAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICBtYXAoKHJlc3VsdDogQWlycG9ydFNlYXJjaFJlc3VsdHMpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBvZigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gVE8gQkUgT1ZFUiBSSURERU4gQlkgT0JUIFNVQkNMQVNTRVNcclxuICBwdWJsaWMgaW5pdF9zZWFyY2hfb2JqZWN0cygpOiBTZWFyY2hPYmplY3RzIHtcclxuICAgIHJldHVybiB7fTtcclxuICB9XHJcblxyXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAqIFNFQVJDSCBPQkpFQ1RTIEZPUiBHRVQgTUUgVEhFUkUgRE9PUiAyIERPT1IgICAgICAgICAgKlxyXG4gICAqIERpZmZlcmVuY2Uocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxyXG4gICAqIEFsbCBvYmplY3RzIGhhdmUgYSBwcmlvcml0eSBvZiAxIHNvIHRoYXQgdGhleSBhcmUgICAgKlxyXG4gICAqIHNlYXJjaGVkIGF0IHRoZSBzYW1lIHRpbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxyXG4gICAqIFVybHMgY2hhbmdlZCB0byBnZXRtZXRoZXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxyXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG4gIHByb3RlY3RlZCBnZXRNZVRoZXJlU2VhcmNoT2JqZWN0cygpOiBTZWFyY2hPYmplY3RzIHtcclxuICAgIHJldHVybiB7fTtcclxuICB9XHJcbiAgLypcclxuICAgKiAgQGRlc2MgLSBnZXRzIGFsbCBzZWxlY3RlZCB0cmF2ZWxsZXJzXHJcbiAgICogICBJbXBsZW1lbnRlZCBmb3IgcmFpbCBjYXJkIHJlYXNvbnMgaW4gTFVcclxuICAgKiovXHJcbiAgZ2V0U2VsZWN0ZWR0cmF2ZWxsZXJzKCk6IFRyYXZlbGxlcltdIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVHJhdmVsbGVycztcclxuICB9XHJcblxyXG4gIHJlc2V0U2VhcmNoT2JqZWN0cygpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VhcmNoX29iamVjdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5pbml0X3NlYXJjaF9vYmplY3RzKCkpO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgVGhlc2UgYXJlIHRoZSBwb3NzaWJsZSBhcnJheSBvZiB2YWx1ZXMgZnJvbSBBUEkgYXJlIGV4cHRlY3RlZCBhbmQgZnVuY3Rpb24gbWFuaXB1bGF0ZSB0byBjcmVhdGUgdGhlIGxpc3RcclxuICAgIFtcIk1haW5cIl1cclxuICAgIFtcIjFcIl1cclxuICAgIFtcIjFcIiwgXCIyXCJdXHJcbiAgICBbXCIxXCIsIFwiMlwiLCBcIjNcIl1cclxuICAgIFtcIjFcIiwgXCIyXCIsIFwiM1wiLCBcIjRcIl1cclxuICAgIFtcIjFcIiwgXCIyXCIsIFwiM1wiLCBcIjRcIiwgXCI1XCJdXHJcbiAgICBbXCJTb3V0aFwiLCBcIk5vcnRoXCJdXHJcbiAgKi9cclxuICBwdWJsaWMgcHJvY2Vzc1Rlcm1pbmFscyh0ZXJtaW5hbHM6IHN0cmluZ1tdKTogVGVybWluYWxzVHlwZVtdIHtcclxuICAgIGNvbnN0IHRlbXBUZXJtaW5hbDogVGVybWluYWxzVHlwZVtdID0gW107XHJcbiAgICBpZiAoXHJcbiAgICAgIHRlcm1pbmFscy5pbmNsdWRlcygnMScpIHx8XHJcbiAgICAgIHRlcm1pbmFscy5pbmNsdWRlcygnMicpIHx8XHJcbiAgICAgIHRlcm1pbmFscy5pbmNsdWRlcygnMycpIHx8XHJcbiAgICAgIHRlcm1pbmFscy5pbmNsdWRlcygnNCcpIHx8XHJcbiAgICAgIHRlcm1pbmFscy5pbmNsdWRlcygnNScpXHJcbiAgICApIHtcclxuICAgICAgdGVtcFRlcm1pbmFsLnB1c2goeyBrZXk6ICdBbnkgVGVybWluYWwnLCB2YWx1ZTogJ0FueScgfSk7XHJcbiAgICAgIHRlcm1pbmFscy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgdGVtcFRlcm1pbmFsLnB1c2goeyBrZXk6IGBUZXJtaW5hbCAke2l0ZW19YCwgdmFsdWU6IGAke2l0ZW19YCB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGVybWluYWxzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgIHRlbXBUZXJtaW5hbC5wdXNoKHsga2V5OiBgJHt0ZXJtaW5hbHNbMF19IFRlcm1pbmFsYCwgdmFsdWU6ICdBbnknIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRlbXBUZXJtaW5hbC5wdXNoKHsga2V5OiAnQW55IFRlcm1pbmFsJywgdmFsdWU6ICdBbnknIH0pO1xyXG4gICAgICAgIHRlcm1pbmFscy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICB0ZW1wVGVybWluYWwucHVzaCh7IGtleTogYCR7aXRlbX0gVGVybWluYWxgLCB2YWx1ZTogYCR7aXRlbX1gIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGVtcFRlcm1pbmFsO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2F2ZVVzZXJBZGRyZXNzKFxyXG4gICAgYWRkcmVzczogU2F2ZVVzZXJBZGRyZXNzTXV0YXRpb25WYXJpYWJsZXNcclxuICApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgaWYgKGFkZHJlc3MpIHtcclxuICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCB0aGlzLnNhdmVVc2VyQWRkcmVzc1VwZGF0ZXJcclxuICAgICAgICAudXBkYXRlT25lKGFkZHJlc3MpXHJcbiAgICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FuQm9vayhzZXJ2aWNlOiBTZXJ2aWNlVHlwZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudXNlclNlcnZpY2UuY2FuQm9vayhzZXJ2aWNlKSA/IHRydWUgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGlzUG9zdGNvZGVWYWlsZChwb3N0Y29kZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gdGhpcy5iYXNlVmFsaWRhdGVJc1Bvc3Rjb2RlVmFsaWRUZXN0ZXIudGVzdCh7IHBvc3Rjb2RlIH0pO1xyXG4gIH1cclxuXHJcbiAgLyogQ3JlYXRlIFF1ZXJ5IERlZmF1bHRzIFN0YXJ0ICovXHJcbiAgLypcclxuICAgKiBDcmVhdGUgdGhlIENhYiBIaXJlIHNlYXJjaCBxdWVyeSB3aXRoIHN1cHBsaWVkIHBhcmFtLCBhdXRvIGZpbGwgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxyXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgIC4uLmFyZ3MgZXhhbXBsZSAtIHNlYXJjaFNlcnZpY2Uuc2V0Q2FiSGlyZVF1ZXJ5KGRhdGEucXVlcnksIHsgZGVwYXJ0czogbW9tZW50RGF0ZVRpbWUgfSlcclxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaENhYkhpcmVBcmdzfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hDYWJIaXJlQXJncyB0eXBlXHJcbiAgICovXHJcbiAgcHVibGljIG1ha2VDYWJIaXJlUXVlcnkoLi4uYXJnczogYW55KTogQ2FiSGlyZVRlbXBQYXJhbXMge1xyXG4gICAgY29uc3QgZGVmYXVsdFZhbDogQ2FiSGlyZVRlbXBQYXJhbXMgPSB7XHJcbiAgICAgIGFkdWx0czogMCxcclxuICAgICAgYWlycG9ydDogbnVsbCxcclxuICAgICAgY2hpbGRyZW46IDAsXHJcbiAgICAgIGNvdW50cnlDb2RlOiBudWxsLFxyXG4gICAgICBkZXBhcnRzOiB0aGlzLmhlbHBlcnMubWFrZU1vbWVudERheVRpbWUoKSxcclxuICAgICAgZnJvbUFkZHJlc3M6IG51bGwsXHJcbiAgICAgIGZyb21TdGF0aW9uOiBudWxsLFxyXG4gICAgICBmcm9tTG9jYXRpb25UeXBlOiBUYXhpRm9ybU1vZGUuQUREUkVTUyxcclxuICAgICAgaW5mYW50czogMCxcclxuICAgICAgdG9BZGRyZXNzOiBudWxsLFxyXG4gICAgICB0b1N0YXRpb246IG51bGwsXHJcbiAgICAgIHRvTG9jYXRpb25UeXBlOiBUYXhpRm9ybU1vZGUuQUREUkVTUyxcclxuICAgICAgdmVoaWNsZVR5cGU6IENhYkhpcmVWZWhpY2xlVHlwZS5BbnksXHJcbiAgICAgIHZpYXNGcm9tOiBudWxsLFxyXG4gICAgICB2aWFzVG86IG51bGxcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5hdGl6ZVJldHVybnM8Q2FiSGlyZVRlbXBQYXJhbXM+KFxyXG4gICAgICBkZWZhdWx0VmFsLFxyXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSxcclxuICAgICAgWydkZXBhcnRzJ11cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIENyZWF0ZSB0aGUgQ2FyIEhpcmUgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW0sIGF1dG8gZmlsbCB3aXRoIGRlZmF1bHRzIGlmIGZpZWxkcyBhcmUgZW1wdHkuXHJcbiAgICogQHBhcmFtICB7YW55fSAgICAgICAgICAgLi4uYXJncyBleGFtcGxlIC0gc2VhcmNoU2VydmljZS5zZXRDYXJIaXJlUXVlcnkoZGF0YS5xdWVyeSwgeyBkZXBhcnRzOiBtb21lbnREYXRlVGltZSB9KVxyXG4gICAqIEByZXR1cm4ge1F1ZXJ5U2VhcmNoQ2FySGlyZUFyZ3N9ICAgICAgICAgUmV0dXJucyBRdWVyeVNlYXJjaENhckhpcmVBcmdzIHR5cGVcclxuICAgKi9cclxuICBwdWJsaWMgbWFrZUNhckhpcmVRdWVyeSguLi5hcmdzOiBhbnkpOiBDYXJIaXJlVGVtcFBhcmFtcyB7XHJcbiAgICBjb25zdCBkZWZhdWx0VmFsOiBDYXJIaXJlVGVtcFBhcmFtcyA9IHtcclxuICAgICAgYWR1bHRzOiAwLFxyXG4gICAgICBhaXJDb246IG51bGwsXHJcbiAgICAgIGNhckNsYXNzOiBudWxsLFxyXG4gICAgICBjYXJUeXBlOiBudWxsLFxyXG4gICAgICBjaGlsZHJlbjogMCxcclxuICAgICAgY2hvc2VuVmVuZG9yOiBudWxsLFxyXG4gICAgICBjaG9zZW5EaXN0YW5jZTogJzUnLFxyXG4gICAgICBjaXR5RHJvcG9mZjogbnVsbCxcclxuICAgICAgY2l0eURyb3BvZmZEZXBvdDogbnVsbCxcclxuICAgICAgY2l0eVBpY2t1cDogbnVsbCxcclxuICAgICAgY2l0eVBpY2t1cERlcG90OiBudWxsLFxyXG4gICAgICBkcm9wb2ZmX2NvdW50cnk6ICdHQicsXHJcbiAgICAgIGRyb3BvZmZfZGF0ZXRpbWU6IG51bGwsXHJcbiAgICAgIGRyb3BvZmZfbG9jYXRpb246IG51bGwsXHJcbiAgICAgIGVzdGltYXRlZE1pbGVhZ2U6IG51bGwsXHJcbiAgICAgIGxvY2F0aW9uVHlwZTogbnVsbCxcclxuICAgICAgcGlja3VwX2NvdW50cnk6IG51bGwsXHJcbiAgICAgIHBpY2t1cF9kYXRldGltZTogbnVsbCxcclxuICAgICAgcGlja3VwX2xvY2F0aW9uOiBudWxsLFxyXG4gICAgICBwb3N0Y29kZURyb3BvZmY6IG51bGwsXHJcbiAgICAgIHBvc3Rjb2RlRHJvcG9mZlJhdzogbnVsbCxcclxuICAgICAgcG9zdGNvZGVQaWNrdXA6IG51bGwsXHJcbiAgICAgIHBvc3Rjb2RlUGlja3VwUmF3OiBudWxsLFxyXG4gICAgICByZXR1cm5fdG9fcGlja3VwOiB0cnVlLFxyXG4gICAgICB0cmFuc21pc3Npb246IG51bGxcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5hdGl6ZVJldHVybnM8Q2FySGlyZVRlbXBQYXJhbXM+KFxyXG4gICAgICBkZWZhdWx0VmFsLFxyXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSxcclxuICAgICAgWydwaWNrdXBfZGF0ZXRpbWUnLCAnZHJvcG9mZl9kYXRldGltZSddXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGVzIGEgRmxpZ2h0IHNlYXJjaCBxdWVyeSB3aXRoIHN1cHBsaWVkIHBhcmFtcywgYXV0byBmaWxscyB3aXRoIGRlZmF1bHRzIGlmIGZpZWxkcyBhcmUgZW1wdHkuXHJcbiAgICogQHBhcmFtICB7YW55fSAgICAgICAgICAgICAgICAgICAgLi4uYXJncyBFeGFtcGxlIC0gc2VhcmNoU2VydmljZS5tYWtlRmxpZ2h0UXVlcnkoZGF0YS5xdWVyeSwgeyBvdmVycmlkZTogXCJwcm9wZXJ0eVwiIH0pXHJcbiAgICogQHJldHVybiB7UXVlcnlTZWFyY2hGbGlnaHRzQXJnc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoRmxpZ2h0c0FyZ3MgdHlwZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBtYWtlRmxpZ2h0UXVlcnkoLi4uYXJnczogYW55KTogRmxpZ2h0VGVtcFBhcmFtcyB7XHJcbiAgICBjb25zdCBub3cgPSB0aGlzLmhlbHBlcnMubWFrZU1vbWVudERheVRpbWUoKTtcclxuICAgIGNvbnN0IHRvbW9ycm93ID0gdGhpcy5oZWxwZXJzLm1ha2VNb21lbnREYXlUaW1lKDEpO1xyXG4gICAgY29uc3QgbW9tZW50T3V0RGF0ZVRpbWUgPSB0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKG5vdywgMzApO1xyXG4gICAgY29uc3QgbW9tZW50SW5EYXRlVGltZSA9IHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXModG9tb3Jyb3csIDMwKTtcclxuXHJcbiAgICBjb25zdCBkZWZhdWx0VmFsOiBGbGlnaHRUZW1wUGFyYW1zID0ge1xyXG4gICAgICBhZHVsdHM6IDAsXHJcbiAgICAgIGFycml2ZUxvY2F0aW9uOiBudWxsLFxyXG4gICAgICBjYWJpbkNsYXNzOiBGbGlnaHRDYWJpbkNsYXNzLkFueSxcclxuICAgICAgY2hpbGRyZW46IDAsXHJcbiAgICAgIGNob3NlblNlYXJjaFR5cGU6IG51bGwsXHJcbiAgICAgIGRlcGFydExvY2F0aW9uOiBudWxsLFxyXG4gICAgICBmYXJlVHlwZTogRmFyZVR5cGUuRmxleGlibGUsXHJcbiAgICAgIGluYm91bmREYXRlOiBtb21lbnRPdXREYXRlVGltZSxcclxuICAgICAgaW5UaW1lQ3JpdGVyaWE6IFRpbWVXaW5kb3cuRGVwYXJ0LFxyXG4gICAgICBtYXhDb25uZWN0aW9uczogbnVsbCxcclxuICAgICAgaW5jbHVkZU5lYXJieUFpcnBvcnRzOiBmYWxzZSxcclxuICAgICAgbXVsdGlEZXN0aW5hdGlvbjogW10sXHJcbiAgICAgIG91dEJvdW5kRGF0ZTogbW9tZW50SW5EYXRlVGltZSxcclxuICAgICAgb3V0VGltZUNyaXRlcmlhOiBUaW1lV2luZG93LkRlcGFydCxcclxuICAgICAgcHJlZmVycmVkQ2FycmllcnM6IFtudWxsLCBudWxsLCBudWxsLCBudWxsXSxcclxuICAgICAgcmV0dXJuQ2FiaW5DbGFzczogRmxpZ2h0Q2FiaW5DbGFzcy5BbnlcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5hdGl6ZVJldHVybnM8RmxpZ2h0VGVtcFBhcmFtcz4oXHJcbiAgICAgIGRlZmF1bHRWYWwsXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIC4uLmFyZ3MpLFxyXG4gICAgICBbJ291dEJvdW5kRGF0ZScsICdpbmJvdW5kRGF0ZSddXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGVzIGEgSG90ZWwgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW1zLCBhdXRvIGZpbGxzIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cclxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAgICAgICAgICAuLi5hcmdzIEV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLm1ha2VIb3RlbFF1ZXJ5KGRhdGEucXVlcnksIHsgb3ZlcnJpZGU6IFwicHJvcGVydHlcIiB9KVxyXG4gICAqIEByZXR1cm4ge1F1ZXJ5U2VhcmNoSG90ZWxzQXJnc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoSG90ZWxzQXJncyB0eXBlXHJcbiAgICovXHJcbiAgcHVibGljIG1ha2VIb3RlbFF1ZXJ5KC4uLmFyZ3M6IGFueSk6IEhvdGVsVGVtcFBhcmFtcyB7XHJcbiAgICBjb25zdCBkZWZhdWx0VmFsID0ge1xyXG4gICAgICBjaGVja2luX2RhdGU6IG1vbWVudCgpLnNldCgnaG91cicsIDIzKS5zZXQoJ21pbnV0ZScsIDU5KSxcclxuICAgICAgY2hlY2tvdXRfZGF0ZTogbW9tZW50KCkuYWRkKDEsICdkYXknKS5zZXQoJ2hvdXInLCAyMykuc2V0KCdtaW51dGUnLCA1OSksXHJcbiAgICAgIGNvdW50cnk6IHsgY0NvZGU6ICdHQicsIGNOYW1lOiAnVW5pdGVkIEtpbmdkb20nIH0sXHJcbiAgICAgIGN1cnJlbmN5OiAnR0JQJyxcclxuICAgICAgZGlzdGFuY2U6IDUsIC8vIGRlZmF1bHQgNSBtaWxlcyByYWRpdXNcclxuICAgICAgaG90ZWxfYXZhaWxhYmlsaXR5OiBudWxsLFxyXG4gICAgICBob3RlbF9jaGFpbjogbnVsbCxcclxuICAgICAgaG90ZWxfbmFtZTogbnVsbCxcclxuICAgICAgbG9jYXRpb25fdHlwZV9zZWxlY3Q6IExvY2F0aW9uVHlwZXMuQWlycG9ydCxcclxuICAgICAgbG9jYXRpb246IG51bGwsIC8vIG1pZ2h0IHdhbnQgdG8gc3BsaXQgdGhpcyBvdXQgdG8gY2l0eSwgYWlycG9ydCwgb2ZmaWNlLCByYWlsc3RhdGlvbiAtIHRoaXMgd2lsbCBkbyBmb3Igbm93XHJcbiAgICAgIG5vX29mX29jY3VwYW50czogMSwgLy8gc2ltaWxhcmx5IHRoaW5rIHRoaXMgaXMgYSBtYXggb2YgM1xyXG4gICAgICBub19vZl9yb29tczogMSwgLy8gbWF4IG9mIDQgaW4gb2xkIHNhYnMsIG5vdCBzdXJlIGhlcmVcclxuICAgICAgb2ZmaWNlOiBudWxsLFxyXG4gICAgICBwb3N0Y29kZTogbnVsbCxcclxuICAgICAgcHJlZmVyZWRfaG90ZWxzX29ubHk6IGZhbHNlLFxyXG4gICAgICB0cmFpbnNTdGF0aW9uOiBudWxsXHJcbiAgICB9IGFzIEhvdGVsVGVtcFBhcmFtcztcclxuXHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnNhbmF0aXplUmV0dXJuczxIb3RlbFRlbXBQYXJhbXM+KFxyXG4gICAgICBkZWZhdWx0VmFsLFxyXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSxcclxuICAgICAgWydjaGVja2luX2RhdGUnLCAnY2hlY2tvdXRfZGF0ZSddXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGVzIGEgTG91bmdlcyBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbXMsIGF1dG8gZmlsbHMgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxyXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgICAgICAgICAgIC4uLmFyZ3MgRXhhbXBsZSAtIHNlYXJjaFNlcnZpY2UubWFrZUxvdW5nZXNRdWVyeShkYXRhLnF1ZXJ5LCB7IG92ZXJyaWRlOiBcInByb3BlcnR5XCIgfSlcclxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaExvdW5nZXNBcmdzfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hMb3VuZ2VzQXJncyB0eXBlXHJcbiAgICovXHJcbiAgcHVibGljIG1ha2VMb3VuZ2VzUXVlcnkoLi4uYXJnczogYW55KTogTG91bmdlc1RlbXBQYXJhbXMge1xyXG4gICAgY29uc3QgZGVmYXVsdFZhbCA9IHtcclxuICAgICAgYWR1bHRzOiAwLFxyXG4gICAgICBhcnJpdmFsRGF0ZXRpbWU6IG1vbWVudCgpLFxyXG4gICAgICBjaGlsZHJlbjogMCxcclxuICAgICAgaW5mYW50czogMCxcclxuICAgICAgbG9jYXRpb25Db2RlOiBudWxsLFxyXG4gICAgICB0ZXJtaW5hbDogbnVsbFxyXG4gICAgfSBhcyBMb3VuZ2VzVGVtcFBhcmFtcztcclxuXHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnNhbmF0aXplUmV0dXJuczxMb3VuZ2VzVGVtcFBhcmFtcz4oXHJcbiAgICAgIGRlZmF1bHRWYWwsXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIC4uLmFyZ3MpLFxyXG4gICAgICBbJ2Fycml2YWxEYXRldGltZSddXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGVzIGEgUGFya2luZyBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbXMsIGF1dG8gZmlsbHMgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxyXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgICAgICAgICAgIC4uLmFyZ3MgRXhhbXBsZSAtIHNlYXJjaFNlcnZpY2UubWFrZVBhcmtpbmdRdWVyeShkYXRhLnF1ZXJ5LCB7IG92ZXJyaWRlOiBcInByb3BlcnR5XCIgfSlcclxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaFBhcmtpbmdBcmdzfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hQYXJraW5nQXJncyB0eXBlXHJcbiAgICovXHJcbiAgcHVibGljIG1ha2VQYXJraW5nUXVlcnkoLi4uYXJnczogYW55KTogUGFya2luZ1RlbXBQYXJhbXMge1xyXG4gICAgY29uc3Qgbm93ID0gdGhpcy5oZWxwZXJzLm1ha2VNb21lbnREYXlUaW1lKCk7XHJcbiAgICBjb25zdCB0b21vcnJvdyA9IHRoaXMuaGVscGVycy5tYWtlTW9tZW50RGF5VGltZSgxKTtcclxuICAgIGNvbnN0IG1vbWVudE91dERhdGVUaW1lID0gdGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyhub3csIDMwKTtcclxuICAgIGNvbnN0IG1vbWVudEluRGF0ZVRpbWUgPSB0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKHRvbW9ycm93LCAzMCk7XHJcblxyXG4gICAgY29uc3QgZGVmYXVsdFZhbCA9IHtcclxuICAgICAgYXJyaXZhbERhdGV0aW1lOiBtb21lbnRPdXREYXRlVGltZSxcclxuICAgICAgY2FyUGFya2VkRm9yWW91OiBudWxsLFxyXG4gICAgICBkZXBhcnREYXRldGltZTogbW9tZW50SW5EYXRlVGltZSxcclxuICAgICAgbG9jYXRpb25Db2RlOiBudWxsLFxyXG4gICAgICBtZWV0QW5kR3JlZXQ6IG51bGwsXHJcbiAgICAgIG9uQWlycG9ydDogbnVsbCxcclxuICAgICAgb3V0RmxpZ2h0TnVtYmVyOiBudWxsLFxyXG4gICAgICBwYXJrQW5kUmlkZTogbnVsbCxcclxuICAgICAgcGFya0FuZFN0cm9sbDogbnVsbCxcclxuICAgICAgcmVjb21tZW5kZWQ6IG51bGwsXHJcbiAgICAgIHRlcm1pbmFsOiBudWxsXHJcbiAgICB9IGFzIFBhcmtpbmdUZW1wUGFyYW1zO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPFBhcmtpbmdUZW1wUGFyYW1zPihcclxuICAgICAgZGVmYXVsdFZhbCxcclxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksXHJcbiAgICAgIFsnYXJyaXZhbERhdGV0aW1lJywgJ2RlcGFydERhdGV0aW1lJ11cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIENyZWF0ZXMgYSBSYWlsIHNlYXJjaCBxdWVyeSB3aXRoIHN1cHBsaWVkIHBhcmFtcywgYXV0byBmaWxscyB3aXRoIGRlZmF1bHRzIGlmIGZpZWxkcyBhcmUgZW1wdHkuXHJcbiAgICogQHBhcmFtICB7YW55fSAgICAgICAgICAgICAgICAgICAgLi4uYXJncyBFeGFtcGxlIC0gc2VhcmNoU2VydmljZS5tYWtlUmFpbFF1ZXJ5KGRhdGEucXVlcnksIHsgb3ZlcnJpZGU6IFwicHJvcGVydHlcIiB9KVxyXG4gICAqIEByZXR1cm4ge1F1ZXJ5U2VhcmNoUmFpbEFyZ3N9ICAgICAgICAgUmV0dXJucyBRdWVyeVNlYXJjaFJhaWxBcmdzIHR5cGVcclxuICAgKi9cclxuICBwdWJsaWMgbWFrZVJhaWxRdWVyeSguLi5hcmdzOiBhbnkpOiBSYWlsVGVtcFBhcmFtcyB7XHJcbiAgICBjb25zdCB0aW1lID0gdGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyhtb21lbnQoKSwgMzApO1xyXG4gICAgY29uc3QgZGVmYXVsdFZhbDogUmFpbFRlbXBQYXJhbXMgPSB7XHJcbiAgICAgIGFpcnBvcnRFeHByZXNzU3RhdGlvbjogbnVsbCxcclxuICAgICAgYXBwbHlSYWlsY2FyZHM6IGZhbHNlLFxyXG4gICAgICBjYXJuZXRUaWNrZXQ6IGZhbHNlLFxyXG4gICAgICBjaG9zZW5TZWFyY2hDbGFzczogUmFpbENsYXNzLkFsbCxcclxuICAgICAgY2hvc2VuU2VhcmNoVHlwZTogUmFpbFNlYXJjaEpvdXJuZXlUeXBlLlJldHVybkpvdXJuZXksXHJcbiAgICAgIGRpc2FibGVBdXRvRGlzY291bnRzOiBmYWxzZSxcclxuICAgICAgZXh0cmFUaW1lOiBmYWxzZSxcclxuICAgICAgaW5Cb3VuZERhdGVUaW1lOiB0aW1lLFxyXG4gICAgICBpc0FpcnBvcnRFeHByZXNzOiBmYWxzZSxcclxuICAgICAgbm9PZkFkdWx0czogMCxcclxuICAgICAgbm9PZkNoaWxkcmVuOiAwLFxyXG4gICAgICBvdXRib3VuZENyaXRlcmlhOiBSYWlsU2VhcmNoQ3JpdGVyaWEuRGVwYXJ0LFxyXG4gICAgICBvdXRCb3VuZERhdGVUaW1lOiB0aW1lLFxyXG4gICAgICBwcmlvcml0aXNlQnlQcmljZTogZmFsc2UsXHJcbiAgICAgIHJldHVybkNyaXRlcmlhOiBSYWlsU2VhcmNoQ3JpdGVyaWEuRGVwYXJ0LFxyXG4gICAgICB0cmF2ZWxsaW5nRnJvbTogbnVsbCxcclxuICAgICAgdHJhdmVsbGluZ1RvOiBudWxsLFxyXG4gICAgICB2aWE6IGZhbHNlLFxyXG4gICAgICB2aWFMb2NhdGlvbjogbnVsbCxcclxuICAgICAgcmFpbENhcmRzOiBudWxsXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPFJhaWxUZW1wUGFyYW1zPihcclxuICAgICAgZGVmYXVsdFZhbCxcclxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksXHJcbiAgICAgIFsnaW5Cb3VuZERhdGVUaW1lJywgJ291dEJvdW5kRGF0ZVRpbWUnXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ3JlYXRlcyBhIFJhaWwgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW1zLCBhdXRvIGZpbGxzIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cclxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAgICAgICAgICAuLi5hcmdzIEV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLm1ha2VJcmxRdWVyeShkYXRhLnF1ZXJ5LCB7IG92ZXJyaWRlOiBcInByb3BlcnR5XCIgfSlcclxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaFJhaWxBcmdzfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hSYWlsQXJncyB0eXBlXHJcbiAgICovXHJcbiAgcHVibGljIG1ha2VJcmxRdWVyeSguLi5hcmdzOiBhbnkpOiBJcmxUZW1wUGFyYW1zIHtcclxuICAgIGNvbnN0IHRpbWUgPSB0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKG1vbWVudCgpLCAzMCk7XHJcbiAgICBjb25zdCBkZWZhdWx0VmFsOiBJcmxUZW1wUGFyYW1zID0ge1xyXG4gICAgICBzdXBwbGllcjogbnVsbCwgLy8gSVJMU3VwcGxpZXIhXHJcbiAgICAgIGNvdW50cnlDb2RlOiAnJyxcclxuICAgICAgam91cm5leVR5cGU6IElybEpvdXJuZXlUeXBlLlJldHVybkpvdXJuZXksIC8vIElSTEpvdXJuZXlUeXBlIVxyXG4gICAgICBjbGFzczogbnVsbCwgLy8gSVJMQ2xhc3NcclxuICAgICAgb3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZTogdGltZSxcclxuICAgICAgZGVwYXJ0dXJlTG9jYXRpb25JZDogbnVsbCxcclxuICAgICAgYXJyaXZhbExvY2F0aW9uSWQ6IG51bGwsXHJcbiAgICAgIGFkdWx0czogMCxcclxuICAgICAgY2hpbGRyZW46IDAsXHJcbiAgICAgIHJldHVybkRlcGFydHVyZURhdGVUaW1lOiB0aW1lLFxyXG4gICAgICBpcmxEaXNjb3VudENhcmRzOiBudWxsXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPElybFRlbXBQYXJhbXM+KFxyXG4gICAgICBkZWZhdWx0VmFsLFxyXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSxcclxuICAgICAgWydyZXR1cm5EZXBhcnR1cmVEYXRlVGltZScsICdvdXRib3VuZERlcGFydHVyZURhdGVUaW1lJ11cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIENyZWF0ZXMgYSBFdXJvc3RhciBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbXMsIGF1dG8gZmlsbHMgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxyXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgICAgICAgICAgIC4uLmFyZ3MgRXhhbXBsZSAtIHNlYXJjaFNlcnZpY2UubWFrZUV1cm9zdGFyUXVlcnkoZGF0YS5xdWVyeSwgeyBvdmVycmlkZTogXCJwcm9wZXJ0eVwiIH0pXHJcbiAgICogQHJldHVybiB7RXVyb3N0YXJUZW1wUGFyYW1zfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hFdXJvc3RhckFyZ3MgdHlwZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBtYWtlRXVyb3N0YXJRdWVyeSguLi5hcmdzOiBhbnkpOiBFdXJvc3RhclRlbXBQYXJhbXMge1xyXG4gICAgY29uc3Qgbm93ID0gdGhpcy5oZWxwZXJzLm1ha2VNb21lbnREYXlUaW1lKCk7XHJcbiAgICBjb25zdCB0b21vcnJvdyA9IHRoaXMuaGVscGVycy5tYWtlTW9tZW50RGF5VGltZSgxKTtcclxuICAgIGNvbnN0IG1vbWVudE91dERhdGVUaW1lID0gdGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyhub3csIDMwKTtcclxuICAgIGNvbnN0IG1vbWVudEluRGF0ZVRpbWUgPSB0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKHRvbW9ycm93LCAzMCk7XHJcblxyXG4gICAgY29uc3QgZGVmYXVsdFZhbDogRXVyb3N0YXJUZW1wUGFyYW1zID0ge1xyXG4gICAgICBhZHVsdHM6IDAsXHJcbiAgICAgIGFycml2ZUxvY2F0aW9uOiBudWxsLFxyXG4gICAgICBjYWJpbkNsYXNzOiBGbGlnaHRDYWJpbkNsYXNzLkFueSxcclxuICAgICAgY2hpbGRyZW46IDAsXHJcbiAgICAgIGNob3NlblNlYXJjaFR5cGU6IEV1cm9zdGFyU2VhcmNoVHlwZS5yZXR1cm4sXHJcbiAgICAgIGRlcGFydExvY2F0aW9uOiBudWxsLFxyXG4gICAgICBmYXJlVHlwZTogRmFyZVR5cGUuRmxleGlibGUsXHJcbiAgICAgIGluYm91bmREYXRlOiBtb21lbnRPdXREYXRlVGltZSxcclxuICAgICAgaW5UaW1lQ3JpdGVyaWE6IFRpbWVXaW5kb3cuRGVwYXJ0LFxyXG4gICAgICBtYXhDb25uZWN0aW9uczogbnVsbCxcclxuICAgICAgaW5jbHVkZU5lYXJieUFpcnBvcnRzOiBmYWxzZSxcclxuICAgICAgbXVsdGlEZXN0aW5hdGlvbjogW10sXHJcbiAgICAgIG91dEJvdW5kRGF0ZTogbW9tZW50SW5EYXRlVGltZSxcclxuICAgICAgb3V0VGltZUNyaXRlcmlhOiBUaW1lV2luZG93LkRlcGFydCxcclxuICAgICAgcHJlZmVycmVkQ2FycmllcnM6IFtudWxsLCBudWxsLCBudWxsLCBudWxsXSxcclxuICAgICAgcmV0dXJuQ2FiaW5DbGFzczogRmxpZ2h0Q2FiaW5DbGFzcy5BbnlcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5hdGl6ZVJldHVybnM8RXVyb3N0YXJUZW1wUGFyYW1zPihcclxuICAgICAgZGVmYXVsdFZhbCxcclxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksXHJcbiAgICAgIFsnb3V0Qm91bmREYXRlJywgJ2luYm91bmREYXRlJ11cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIENyZWF0ZXMgYSBGYXN0VHJhY2sgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW1zLCBhdXRvIGZpbGxzIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cclxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAgICAgICAgICAuLi5hcmdzIEV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLm1ha2VGYXN0VHJhY2tRdWVyeShkYXRhLnF1ZXJ5LCB7IG92ZXJyaWRlOiBcInByb3BlcnR5XCIgfSlcclxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaExvdW5nZXNBcmdzfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hMb3VuZ2VzQXJncyB0eXBlXHJcbiAgICovXHJcbiAgcHVibGljIG1ha2VGYXN0VHJhY2tRdWVyeSguLi5hcmdzOiBhbnkpOiBGYXN0VHJhY2tUZW1wUGFyYW1zIHtcclxuICAgIGNvbnN0IGRlZmF1bHRWYWwgPSB7XHJcbiAgICAgIGFkdWx0czogMCxcclxuICAgICAgYXJyaXZhbERhdGV0aW1lOiBtb21lbnQoKSxcclxuICAgICAgY2hpbGRyZW46IDAsXHJcbiAgICAgIGxvY2F0aW9uQ29kZTogbnVsbFxyXG4gICAgfSBhcyBGYXN0VHJhY2tUZW1wUGFyYW1zO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPEZhc3RUcmFja1RlbXBQYXJhbXM+KFxyXG4gICAgICBkZWZhdWx0VmFsLFxyXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSxcclxuICAgICAgWydhcnJpdmFsRGF0ZXRpbWUnXVxyXG4gICAgKTtcclxuICB9XHJcbiAgLyogQ3JlYXRlIFF1ZXJ5IERlZmF1bHRzIEVuZCAqL1xyXG5cclxuICBzaG91bGRBZGRUcmF2ZWxsZXJTdWJzY3JpcHRpb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnZXRBdXRvTG9nb3V0Q29uZmlnKCkge1xyXG4gICAgcmV0dXJuIHt9O1xyXG4gIH1cclxuICAvKipcclxuICAgKiBPdmVyd3JpdGUgaWYgdGhlIE9CVCBkaXNwbGF5cyBhIGxpc3Qgb2Ygb2ZmaWNlcyBpbnN0ZWFkIG9mIHNlYXJjaGluZyBvbiB0aGVtXHJcbiAgICovXHJcbiAgcHVibGljIHNob3VsZEZldGNoQWxsT2ZmaWNlcygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgaXNGbGlnaHRzR3JvdXBlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgZ2V0Q291bnRyeUZ1bGxOYW1lRnJvbUNvdW50cnlDb2RlKGNvZGU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgZnVsbE5hbWUgPSAnVW5rbm93bic7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvdW50cmllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBjb3VudHJ5ID0gdGhpcy5jb3VudHJpZXNbaV07XHJcblxyXG4gICAgICBpZiAoY291bnRyeS5jQ29kZSA9PT0gY29kZSkge1xyXG4gICAgICAgIHJldHVybiBjb3VudHJ5LmNOYW1lO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZ1bGxOYW1lO1xyXG4gIH1cclxuXHJcbiAgZ2V0VXNlclJlY2VudFNlYXJjaGVzKFxyXG4gICAgc2VydmljZVR5cGU/OiBTZXJ2aWNlVHlwZSxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8UmVjZW50U2VhcmNoW10+IHtcclxuICAgIGlzTG9hZGluZz8ubmV4dCh0cnVlKTtcclxuICAgIGNvbnN0IHF1ZXJ5ID0geyBzZXJ2aWNlVHlwZSB9O1xyXG4gICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPEdldFVzZXJSZWNlbnRTZWFyY2hlc1Jlc3VsdEFycmF5PiA9XHJcbiAgICAgIHRoaXMuZ2V0VXNlclJlY2VudFNlYXJjaGVzRmV0Y2hlci5mZXRjaExpc3QocXVlcnkpO1xyXG5cclxuICAgIGNvbnN0IGZ1bmMgPSAoXHJcbiAgICAgIHJlc3VsdHM6IEdldFVzZXJSZWNlbnRTZWFyY2hlc1Jlc3VsdEFycmF5XHJcbiAgICApOiBSZWNlbnRTZWFyY2hbXSA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGE6IFJlY2VudFNlYXJjaFtdID0gcmVzdWx0cy5tYXAoXHJcbiAgICAgICAgKHJlc3VsdDogR2V0VXNlclJlY2VudFNlYXJjaGVzUmVzdWx0KTogUmVjZW50U2VhcmNoID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGlkOiByZXN1bHQuaWQsXHJcbiAgICAgICAgICAgIG5hbWU6IHJlc3VsdC5uYW1lLFxyXG4gICAgICAgICAgICBzZXJ2aWNlVHlwZTogcmVzdWx0LnNlcnZpY2VUeXBlLFxyXG4gICAgICAgICAgICBzZWFyY2hBcmdzOiByZXN1bHQuc2VhcmNoQXJncyxcclxuICAgICAgICAgICAgY3JlYXRlZEF0OiByZXN1bHQuY3JlYXRlZEF0LFxyXG4gICAgICAgICAgICB1cGRhdGVkQXQ6IHJlc3VsdC51cGRhdGVkQXQsXHJcbiAgICAgICAgICAgIHRyYXZlbERhdGU6IHJlc3VsdC50cmF2ZWxEYXRlLFxyXG4gICAgICAgICAgICB0cmF2ZWxsZXJzOiByZXN1bHQudHJhdmVsbGVyc1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICAgIGlzTG9hZGluZz8ubmV4dChmYWxzZSk7XHJcbiAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xyXG4gIH1cclxuXHJcbiAgZ2V0VXNlckZhdm91cml0ZVNlYXJjaGVzKFxyXG4gICAgc2VydmljZVR5cGU/OiBTZXJ2aWNlVHlwZSxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8R2V0VXNlckZhdm91cml0ZVNlYXJjaGVzUmVzdWx0QXJyYXk+IHtcclxuICAgIGlzTG9hZGluZz8ubmV4dCh0cnVlKTtcclxuICAgIGNvbnN0IHF1ZXJ5ID0geyBzZXJ2aWNlVHlwZSB9O1xyXG4gICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPEdldFVzZXJGYXZvdXJpdGVTZWFyY2hlc1Jlc3VsdEFycmF5PiA9XHJcbiAgICAgIHRoaXMuZ2V0VXNlckZhdm91cml0ZVNlYXJjaGVzRmV0Y2hlci5mZXRjaExpc3QocXVlcnkpO1xyXG5cclxuICAgIGNvbnN0IGZ1bmMgPSAocmVzdWx0czogR2V0VXNlckZhdm91cml0ZVNlYXJjaGVzUmVzdWx0QXJyYXkpID0+IHtcclxuICAgICAgaXNMb2FkaW5nPy5uZXh0KGZhbHNlKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgdGFwKGZ1bmMpKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVJlY2VudFNlYXJjaEJ5SUQoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5iYXNlRGVsZXRlUmVjZW50U2VhcmNoVXBkYXRlci51cGRhdGVPbmUoeyBpZDogaWQgfSk7XHJcbiAgfVxyXG4gIGRlbGV0ZUZhdm91cml0ZVNlYXJjaEJ5SUQoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlRmF2b3VyaXRlU2VhcmNoVXBkYXRlci51cGRhdGVPbmUoeyBpZDogaWQgfSk7XHJcbiAgfVxyXG5cclxuICBzYXZlUmVjZW50U2VhcmNoKHF1ZXJ5OiBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMpOiB2b2lkIHtcclxuICAgIGlmIChxdWVyeSkge1xyXG4gICAgICB0aGlzLmJhc2VTYXZlUmVjZW50U2VhcmNoVXBkYXRlclxyXG4gICAgICAgIC51cGRhdGVPbmUocXVlcnkpXHJcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcclxuICAgICAgICAuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDb3ZpZE1pY3Jvc2l0ZVRva2VuKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRDb3ZpZE1pY3Jvc2l0ZVRva2VuRmV0Y2hlci5mZXRjaExpc3QoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCB0aGUgbGlzdCBvZiBldXJvc3RhciBzdGF0aW9uIGxvY2F0aW9ucyBiYXNlZCBvbiBzZWFyY2ggdGVybSBnaXZlblxyXG4gICAqIEB0b2RvIC0gZmlsbCB0aGlzIG91dCBzbyB0aGF0IGl0IGFjdHVhbGx5IHBlcmZvcm1zIGEgaHR0cCBjYWxsXHJcbiAgICogQHBhcmFtIHRlcm0gLSB0aGUgdGVybSB3ZSB3YW50IHRvIHNlYXJjaCBieVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgbG9va3VwRXVyb3N0YXJTdGF0aW9ucyh0ZXJtOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICBjb25zb2xlLmxvZygndGVybXwgJywgdGVybSk7XHJcbiAgICBpZiAodGVybSA9PT0gJycpIHtcclxuICAgICAgcmV0dXJuIG9mKHRoaXMuZXVyb3N0YXRpb25zKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBvZihcclxuICAgICAgICB0aGlzLmV1cm9zdGF0aW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICAodikgPT4gdi5kZXN0aW5hdGlvbi50b0xvd2VyQ2FzZSgpLmluZGV4T2YodGVybS50b0xvd2VyQ2FzZSgpKSA+IC0xXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VhcmNoVHJhdmVsbGVycyhcclxuICAgIGlucHV0OiBzdHJpbmcsXHJcbiAgICBzZWFyY2hUcmF2ZWxsZXJzQnk6IFRyYXZlbGxlclNlYXJjaFR5cGVzXHJcbiAgKTogT2JzZXJ2YWJsZTxUcmF2ZWxsZXJbXT4ge1xyXG4gICAgY29uc3QgdHlwZTogQm9va2VyVHlwZSA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckJvb2tpbmdUeXBlKCk7XHJcbiAgICB0aGlzLnRyYXZlbGxlcl9lcnJvciA9IGZhbHNlO1xyXG4gICAgLyogVE9ET1xyXG4gICAgaWYgKHRoaXMudXNlclNlcnZpY2UudXNlQWdlbnRDYW5Cb29rRm9yKCkpIHtcclxuICAgICAgdHlwZSA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckZhdm9yaXRlVmFsdWUoJ0FnZW50Q2FuQm9va0ZvcicpO1xyXG4gICAgfSovXHJcbiAgICBpZiAoXHJcbiAgICAgIHR5cGUgJiZcclxuICAgICAgdHlwZSAhPT0gQm9va2VyVHlwZS5TZWxmQm9vayAmJlxyXG4gICAgICB0eXBlICE9PSBCb29rZXJUeXBlLlRyYXZlbGxlciAmJlxyXG4gICAgICBpbnB1dC5sZW5ndGggPj0gMVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IGlucHV0V29yZHMgPSBpbnB1dC50b0xvd2VyQ2FzZSgpLm1hdGNoKC8oW1xcd10pKy9nKTtcclxuICAgICAgY29uc3QgYXJnczogU2VhcmNoVXNlckNhbkJvb2tGb3JRdWVyeVZhcmlhYmxlcyA9IHt9O1xyXG4gICAgICBzd2l0Y2ggKHNlYXJjaFRyYXZlbGxlcnNCeSkge1xyXG4gICAgICAgIGNhc2UgVHJhdmVsbGVyU2VhcmNoVHlwZXMubmFtZTpcclxuICAgICAgICAgIGFyZ3MudXNlck5hbWUgPSBpbnB1dFdvcmRzLmxlbmd0aCA+IDEgPyBpbnB1dFdvcmRzWzBdIDogaW5wdXQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFRyYXZlbGxlclNlYXJjaFR5cGVzLmVtYWlsOlxyXG4gICAgICAgICAgYXJncy5lbWFpbCA9IGlucHV0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBUcmF2ZWxsZXJTZWFyY2hUeXBlcy5lbXBsb3llZU51bWJlcjpcclxuICAgICAgICAgIGFyZ3MuZW1wbG95ZWVJZCA9IGlucHV0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaFVzZXJzQ2FuQm9va0ZvckZldGNoZXIuZmV0Y2hMaXN0KGFyZ3MpLnBpcGUoXHJcbiAgICAgICAgbWFwKChkYXRhOiBUcmF2ZWxsZXJbXSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGVscGVycy5jbG9uZShkYXRhKS5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGEuc3VybmFtZSA8IGIuc3VybmFtZSA/IC0xIDogYS5zdXJuYW1lID4gYi5zdXJuYW1lID8gMSA6IDA7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRGbGlnaHRGYXJlUnVsZXMoXHJcbiAgICBmbGlnaHQ6IElucHV0RmxpZ2h0Sm91cm5leVxyXG4gICk6IE9ic2VydmFibGU8R2V0RmxpZ2h0RmFyZVJ1bGVzUmVzdWx0QXJyYXk+IHtcclxuICAgIHJldHVybiB0aGlzLmdldEZsaWdodEZhcmVSdWxlc0ZldGNoZXIuZmV0Y2hMaXN0KHsgZmxpZ2h0IH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmFpbExpdmVEZXBhcnR1cmVzKFxyXG4gICAgc3RhdGlvbjogc3RyaW5nLFxyXG4gICAgZGF0ZVRpbWU/OiBzdHJpbmdcclxuICApOiBPYnNlcnZhYmxlPFNlYXJjaFJhaWxMaXZlRGVwYXJ0dXJlc1Jlc3VsdD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0UmFpbExpdmVEZXBhcnR1cmVzRmV0Y2hlci5mZXRjaExpc3Qoe1xyXG4gICAgICBzdGF0aW9uQ29kZTogc3RhdGlvbixcclxuICAgICAgZGVwYXJ0RGF0ZVRpbWU6IGRhdGVUaW1lXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldEZsaWdodFNlYXRNYXAoXHJcbiAgICBmbGlnaHQ6IElucHV0RmxpZ2h0Sm91cm5leVxyXG4gICk6IE9ic2VydmFibGU8RmxpZ2h0U2VhdE1hcFJlc3BvbnNlW10+IHtcclxuICAgIHJldHVybiB0aGlzLmdldEZsaWdodFNlYXRNYXBGZXRjaGVyLmZldGNoTGlzdCh7IGZsaWdodDogZmxpZ2h0IH0pLnBpcGUoXHJcbiAgICAgIG1hcCgoZGF0YTogRmxpZ2h0U2VhdE1hcFJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICByZXR1cm4gZGF0YS5yZXN1bHRzO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzYXZlRmF2b3VyaXRlU2VhcmNoKFxyXG4gICAgc2VhcmNoOiBTYXZlRmF2b3VyaXRlU2VhcmNoTXV0YXRpb25WYXJpYWJsZXNcclxuICApOiBPYnNlcnZhYmxlPFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHQ+IHtcclxuICAgIHJldHVybiB0aGlzLmJhc2VTYXZlRmF2b3VyaXRlU2VhcmNoVXBkYXRlci51cGRhdGVPbmUoc2VhcmNoKTtcclxuICB9XHJcblxyXG4gIGdldENvbmZlcm1hUm9vbUltYWdlcyhob3RlbElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFN0cmluZ1tdPiB7XHJcbiAgICBpZiAoaG90ZWxJZCkge1xyXG4gICAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8U2VhcmNoSG90ZWxDaGFpbnNSZXN1bHRBcnJheT4gPVxyXG4gICAgICAgIHRoaXMuZ2V0Q29uZmVybWFSb29tSW1hZ2VzRmV0Y2hlci5mZXRjaExpc3QoeyBob3RlbElkIH0pO1xyXG4gICAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlbWFpbEJhc2tldChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxCYXNrZXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmVtYWlsQmFza2V0RmV0Y2hlci5mZXRjaExpc3QoeyBpZCB9KTtcclxuICB9XHJcblxyXG4gIHN1Ym1pdElybEZvcm0oKSB7XHJcbiAgICBjb25zdCBjdXJyZW50VXNlckVtYWlsID0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRW1haWwoKTtcclxuICAgIGxldCBzZWFyY2hQYXJhbXMgPSB0aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsXTtcclxuICAgIGxldCBvbkJlaGFsZk9mOiBzdHJpbmc7XHJcbiAgICBsZXQgcGFzc2VuZ2Vyczoge307XHJcblxyXG4gICAgLy8gZ2V0IHBhc3NlbmdlcnNcclxuICAgIHRoaXMuYWxsU3Vic2NyaXB0aW9uLmFkZCh0aGlzLnRyYXZlbGxlckluZm9ybWF0aW9uLnN1YnNjcmliZSgodHJhdmVsbGVyczogVHJhdmVsbGVyW10pID0+IHtcclxuICAgICAgcGFzc2VuZ2VycyA9IHRyYXZlbGxlcnMubWFwKCh0cmF2ZWxsZXI6IFRyYXZlbGxlciwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIGxldCBhZ2U6IG51bWJlcjtcclxuICAgICAgICBpZiAodHJhdmVsbGVyLmRvYil7XHJcbiAgICAgICAgICBsZXQgdGltZURpZmYgPSBNYXRoLmFicyhuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIG5ldyBEYXRlKHRyYXZlbGxlci5kb2IpLmdldFRpbWUoKSk7XHJcbiAgICAgICAgICBhZ2UgPSBNYXRoLmZsb29yKCh0aW1lRGlmZiAvICgxMDAwICogMzYwMCAqIDI0KSkvMzY1KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIG5hbWU6IHRyYXZlbGxlci5uYW1lLFxyXG4gICAgICAgICAgYWdlOiBhZ2U/LnRvU3RyaW5nKCkgfHwgJ05vdCBzcGVjaWZpZWQnLFxyXG4gICAgICAgICAgZGlzY291bnRDYXJkOiBgRGlzY291bnQgQ2FyZCAke2luZGV4KzF9YCxcclxuICAgICAgICAgIGxveWFsdHlDYXJkOiBgTG95YWx0eSBDYXJkICR7aW5kZXgrMX1gXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICBvbkJlaGFsZk9mID0gdHJhdmVsbGVyc1swXS5lbWFpbCA/IHRyYXZlbGxlcnNbMF0uZW1haWwgOiBjdXJyZW50VXNlckVtYWlsO1xyXG4gICAgfSkpO1xyXG5cclxuICAgIC8vIGdldCBqcmZyZWZlcmVuY2VcclxuICAgIHRoaXMuYWxsU3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgc2VhcmNoUGFyYW1zLnJlc3VsdHMuc3Vic2NyaWJlKChpcmxKb3VybmV5OiBJcmxKb3VybmV5T3B0aW9uc1tdKSA9PiB7XHJcbiAgICAgICAgaWYgKGlybEpvdXJuZXlbMF0/LmpyZnJlZmVyZW5jZSkge1xyXG4gICAgICAgICAgdGhpcy5qcmZSZWZlcmVuY2UgPSBpcmxKb3VybmV5WzBdPy5qcmZyZWZlcmVuY2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAodGhpcy5qcmZSZWZlcmVuY2UgJiYgcGFzc2VuZ2Vycykge1xyXG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICAgIHRyYWluTnVtYmVyOiBzZWFyY2hQYXJhbXMudHJhaW5OdW1iZXIgfHwgJ0FueScsXHJcbiAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbjogc2VhcmNoUGFyYW1zLnRyYXZlbGxpbmdGcm9tLm5hbWUsXHJcbiAgICAgICAgZGVzdGluYXRpb25TdGF0aW9uOiBzZWFyY2hQYXJhbXMudHJhdmVsbGluZ1RvLm5hbWUsXHJcbiAgICAgICAgb3V0Ym91bmREYXRlOiBzZWFyY2hQYXJhbXMub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZSxcclxuICAgICAgICBpbmJvdW5kRGF0ZTogc2VhcmNoUGFyYW1zLnJldHVybkRlcGFydHVyZURhdGVUaW1lLFxyXG4gICAgICAgIGFkZGl0aW9uYWxJbmZvOlxyXG4gICAgICAgICAgc2VhcmNoUGFyYW1zLmFkZGl0aW9uYWxJbnN0cnVjdGlvbnMgfHwgJ05vIGFkZGl0aW9uYWwgaW5zdHJ1Y3Rpb25zJyxcclxuICAgICAgICBzZXJ2aWNlQ2xhc3M6IHNlYXJjaFBhcmFtcy5pcmxDbGFzcyB8fCAnQW55JyxcclxuICAgICAgICBvZmZsaW5lUmVmZXJlbmNlOiB0aGlzLmpyZlJlZmVyZW5jZSxcclxuICAgICAgICBub3RpZnlFbWFpbDogY3VycmVudFVzZXJFbWFpbCwgXHJcbiAgICAgICAgb25CZWhhbGZPZjogb25CZWhhbGZPZixcclxuICAgICAgICBwYXNzZW5nZXJzOiBwYXNzZW5nZXJzXHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnNvbGUubG9nKHBheWxvYWQpO1xyXG5cclxuICAgICAgdGhpcy5zZW5kT2ZmbGluZU5vdGlmaWNhdGlvbihwYXlsb2FkKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHJlc3VsdDogSXJsT2ZmbGluZU5vdGlmeVJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXHJcbiAgICAgICAgICAgICAgTW9kYWxUeXBlcy5PZmZsaW5lUmVxdWVzdERpYWxvZ0NvbXBvbmVudCxcclxuICAgICAgICAgICAgICB7IGNlbnRlcmVkOiB0cnVlLCBzaXplOiAnbWQnIH0sXHJcbiAgICAgICAgICAgICAgeyBqcmZSZWZlcmVuY2U6IHRoaXMuanJmUmVmZXJlbmNlIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXHJcbiAgICAgICAgICAgICAgTW9kYWxUeXBlcy5Nb2RhbEVycm9yQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgIHsgY2VudGVyZWQ6IHRydWUgfSxcclxuICAgICAgICAgICAgICB7IGVycm9yOiAnVW5hYmxlIHRvIHNlbmQgb2ZmbGluZSBub3RpZmljYXRpb24nIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZW5kT2ZmbGluZU5vdGlmaWNhdGlvbihcclxuICAgIGpyZlJlZmVyZW5jZTogYW55XHJcbiAgKTogT2JzZXJ2YWJsZTxJcmxPZmZsaW5lTm90aWZ5UmVzdWx0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZW5kT2ZmbGluZU5vdGlmaWNhdGlvbkZldGNoZXIuZmV0Y2hPbmUoanJmUmVmZXJlbmNlKTtcclxuICB9XHJcbn1cclxuIl19