@sabstravtech/obtservices 0.0.22042501 → 0.0.22051001

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/angular/fetchers.d.ts +8 -0
  2. package/angular/lib/vendor/fetchers/fast-track-quote.fetcher.d.ts +7 -0
  3. package/angular/lib/vendor/fetchers/get-all-airlines.fetcher.d.ts +7 -0
  4. package/angular/lib/vendor/fetchers/get-cancellation-info.fetcher.d.ts +7 -0
  5. package/angular/lib/vendor/fetchers/get-car-hire-providers.fetcher.d.ts +7 -0
  6. package/angular/lib/vendor/fetchers/get-hotel-chains.fetcher.d.ts +7 -0
  7. package/angular/lib/vendor/fetchers/get-irl-supplier-station.fetcher.d.ts +7 -0
  8. package/angular/lib/vendor/fetchers/get-rail-providers.fetcher.d.ts +7 -0
  9. package/angular/lib/vendor/fetchers/send-offline-notification.fetcher.d.ts +7 -0
  10. package/angular/lib/vendor/services/enterprise-basket.service.d.ts +4 -3
  11. package/angular/lib/vendor/services/search.service.d.ts +10 -3
  12. package/angular/lib/vendor/services/ticket-queue.service.d.ts +6 -0
  13. package/angular/lib/vendor/services/user.service.d.ts +5 -3
  14. package/angular/lib/vendor/types/graphql.angular.types.d.ts +438 -16
  15. package/angular/lib/vendor/updaters/edit-user.updater.d.ts +6 -0
  16. package/angular/lib/vendor/updaters/set-user-language-updater.d.ts +6 -0
  17. package/angular/sabstravtech-obtservices-angular.d.ts +16 -13
  18. package/angular/sabstravtech-obtservices-angular.metadata.json +1 -1
  19. package/angular/services.d.ts +1 -0
  20. package/base/fetchers.d.ts +10 -0
  21. package/base/interfaces.d.ts +2 -0
  22. package/base/lib/vendor/classes/cabhire-enterprise-search.d.ts +2 -1
  23. package/base/lib/vendor/classes/carhire-enterprise-search.d.ts +1 -0
  24. package/base/lib/vendor/classes/eurostar-enterprise-search.d.ts +8 -2
  25. package/base/lib/vendor/classes/fast-track-enterprise-search.d.ts +57 -0
  26. package/base/lib/vendor/classes/flight-enterprise-search.d.ts +2 -1
  27. package/base/lib/vendor/classes/hotel-enterprise-search.d.ts +3 -1
  28. package/base/lib/vendor/classes/irl-enterprise-search.d.ts +27 -7
  29. package/base/lib/vendor/classes/lounges-enterprise-search.d.ts +1 -0
  30. package/base/lib/vendor/classes/management-info-and-valid.d.ts +6 -1
  31. package/base/lib/vendor/classes/modal-types.enum.d.ts +2 -0
  32. package/base/lib/vendor/classes/parking-enterprise-search.d.ts +1 -0
  33. package/base/lib/vendor/classes/rail-enterprise-search.d.ts +3 -2
  34. package/base/lib/vendor/fetchers/fast-track-quote.fetcher.d.ts +23 -0
  35. package/base/lib/vendor/fetchers/get-all-airlines.fetcher.d.ts +20 -0
  36. package/base/lib/vendor/fetchers/get-cancellation-info.fetcher.d.ts +20 -0
  37. package/base/lib/vendor/fetchers/get-car-hire-providers.fetcher.d.ts +20 -0
  38. package/base/lib/vendor/fetchers/get-hotel-chains.fetcher.d.ts +20 -0
  39. package/base/lib/vendor/fetchers/get-irl-supplier-station.fetcher.d.ts +21 -0
  40. package/base/lib/vendor/fetchers/get-rail-providers.fetcher.d.ts +20 -0
  41. package/base/lib/vendor/fetchers/send-offline-notification.fetcher.d.ts +21 -0
  42. package/base/lib/vendor/fetchers/user-fetcher.d.ts +2 -3
  43. package/base/lib/vendor/interfaces/Icabhire-enterprise-search.d.ts +1 -0
  44. package/base/lib/vendor/interfaces/Icarhire-enterprise-search.d.ts +1 -0
  45. package/base/lib/vendor/interfaces/Ienterprise-basket.service.d.ts +6 -3
  46. package/base/lib/vendor/interfaces/Ieurostar-enterprise-search.d.ts +2 -0
  47. package/base/lib/vendor/interfaces/Ifast-track-enterprise-search.d.ts +26 -0
  48. package/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +1 -0
  49. package/base/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +2 -0
  50. package/base/lib/vendor/interfaces/Iirl-enterprise-search.d.ts +11 -3
  51. package/base/lib/vendor/interfaces/Ilounges-enterprise-search.d.ts +1 -0
  52. package/base/lib/vendor/interfaces/Iparking-enterprise-search.d.ts +1 -0
  53. package/base/lib/vendor/interfaces/Irail-enterprise-search.d.ts +1 -0
  54. package/base/lib/vendor/interfaces/Isearch.service.d.ts +7 -1
  55. package/base/lib/vendor/interfaces/Iuser.service.d.ts +2 -1
  56. package/base/lib/vendor/interfaces/eurostar-search-arg.interface.d.ts +2 -0
  57. package/base/lib/vendor/interfaces/fast-track-filters.interface.d.ts +4 -0
  58. package/base/lib/vendor/interfaces/rail-basket-item.interface.d.ts +2 -0
  59. package/base/lib/vendor/interfaces/summary-interface.d.ts +2 -0
  60. package/base/lib/vendor/interfaces/user.data.d.ts +1 -0
  61. package/base/lib/vendor/models/traveller.object.d.ts +1 -0
  62. package/base/lib/vendor/services/enterprise-basket.service.d.ts +13 -6
  63. package/base/lib/vendor/services/requires-reason.service.d.ts +20 -0
  64. package/base/lib/vendor/services/search.service.d.ts +30 -5
  65. package/base/lib/vendor/services/user.service.d.ts +12 -5
  66. package/base/lib/vendor/services/webtoken.service.d.ts +1 -0
  67. package/base/lib/vendor/types/graphql.types.d.ts +398 -16
  68. package/base/lib/vendor/types/types.d.ts +53 -16
  69. package/base/lib/vendor/updaters/edit-user-updater.d.ts +19 -0
  70. package/base/lib/vendor/updaters/set-user-language-updater.d.ts +19 -0
  71. package/base/sabstravtech-obtservices-base.d.ts +5 -5
  72. package/base/sabstravtech-obtservices-base.metadata.json +1 -1
  73. package/base/services.d.ts +1 -0
  74. package/base/updaters.d.ts +2 -0
  75. package/bundles/sabstravtech-obtservices-angular.umd.js +499 -91
  76. package/bundles/sabstravtech-obtservices-angular.umd.js.map +1 -1
  77. package/bundles/sabstravtech-obtservices-angular.umd.min.js +1 -1
  78. package/bundles/sabstravtech-obtservices-angular.umd.min.js.map +1 -1
  79. package/bundles/sabstravtech-obtservices-base.umd.js +3204 -176
  80. package/bundles/sabstravtech-obtservices-base.umd.js.map +1 -1
  81. package/bundles/sabstravtech-obtservices-base.umd.min.js +2 -2
  82. package/bundles/sabstravtech-obtservices-base.umd.min.js.map +1 -1
  83. package/esm2015/angular/fetchers.js +9 -1
  84. package/esm2015/angular/lib/vendor/fetchers/fast-track-quote.fetcher.js +25 -0
  85. package/esm2015/angular/lib/vendor/fetchers/get-all-airlines.fetcher.js +25 -0
  86. package/esm2015/angular/lib/vendor/fetchers/get-cancellation-info.fetcher.js +25 -0
  87. package/esm2015/angular/lib/vendor/fetchers/get-car-hire-providers.fetcher.js +25 -0
  88. package/esm2015/angular/lib/vendor/fetchers/get-hotel-chains.fetcher.js +25 -0
  89. package/esm2015/angular/lib/vendor/fetchers/get-irl-supplier-station.fetcher.js +25 -0
  90. package/esm2015/angular/lib/vendor/fetchers/get-rail-providers.fetcher.js +25 -0
  91. package/esm2015/angular/lib/vendor/fetchers/send-offline-notification.fetcher.js +25 -0
  92. package/esm2015/angular/lib/vendor/services/enterprise-basket.service.js +8 -5
  93. package/esm2015/angular/lib/vendor/services/http-call.service.js +6 -2
  94. package/esm2015/angular/lib/vendor/services/search.service.js +58 -37
  95. package/esm2015/angular/lib/vendor/services/ticket-queue.service.js +23 -0
  96. package/esm2015/angular/lib/vendor/services/user.service.js +12 -6
  97. package/esm2015/angular/lib/vendor/types/graphql.angular.types.js +583 -5
  98. package/esm2015/angular/lib/vendor/updaters/edit-user.updater.js +22 -0
  99. package/esm2015/angular/lib/vendor/updaters/set-user-language-updater.js +22 -0
  100. package/esm2015/angular/obtservices.module.js +3 -1
  101. package/esm2015/angular/sabstravtech-obtservices-angular.js +17 -14
  102. package/esm2015/angular/services.js +2 -1
  103. package/esm2015/base/fetchers.js +11 -1
  104. package/esm2015/base/interfaces.js +3 -1
  105. package/esm2015/base/lib/vendor/classes/basket-info-mi-details.impl.js +4 -1
  106. package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +37 -5
  107. package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +46 -16
  108. package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +77 -10
  109. package/esm2015/base/lib/vendor/classes/fast-track-enterprise-search.js +296 -0
  110. package/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +44 -5
  111. package/esm2015/base/lib/vendor/classes/helpers.js +6 -2
  112. package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +58 -19
  113. package/esm2015/base/lib/vendor/classes/irl-enterprise-search.js +214 -25
  114. package/esm2015/base/lib/vendor/classes/lounges-enterprise-search.js +22 -6
  115. package/esm2015/base/lib/vendor/classes/management-info-and-valid.js +1 -1
  116. package/esm2015/base/lib/vendor/classes/modal-types.enum.js +3 -1
  117. package/esm2015/base/lib/vendor/classes/parking-enterprise-search.js +27 -7
  118. package/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +62 -13
  119. package/esm2015/base/lib/vendor/classes/supplementary-booking-info-impl.js +2 -2
  120. package/esm2015/base/lib/vendor/fetchers/fast-track-quote.fetcher.js +11 -0
  121. package/esm2015/base/lib/vendor/fetchers/get-all-airlines.fetcher.js +11 -0
  122. package/esm2015/base/lib/vendor/fetchers/get-cancellation-info.fetcher.js +10 -0
  123. package/esm2015/base/lib/vendor/fetchers/get-car-hire-providers.fetcher.js +11 -0
  124. package/esm2015/base/lib/vendor/fetchers/get-hotel-chains.fetcher.js +11 -0
  125. package/esm2015/base/lib/vendor/fetchers/get-irl-supplier-station.fetcher.js +11 -0
  126. package/esm2015/base/lib/vendor/fetchers/get-rail-providers.fetcher.js +11 -0
  127. package/esm2015/base/lib/vendor/fetchers/send-offline-notification.fetcher.js +11 -0
  128. package/esm2015/base/lib/vendor/fetchers/user-fetcher.js +1 -1
  129. package/esm2015/base/lib/vendor/interfaces/Icabhire-enterprise-search.js +1 -1
  130. package/esm2015/base/lib/vendor/interfaces/Icarhire-enterprise-search.js +1 -1
  131. package/esm2015/base/lib/vendor/interfaces/Ienterprise-basket.service.js +1 -1
  132. package/esm2015/base/lib/vendor/interfaces/Ieurostar-enterprise-search.js +1 -1
  133. package/esm2015/base/lib/vendor/interfaces/Ifast-track-enterprise-search.js +2 -0
  134. package/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +1 -1
  135. package/esm2015/base/lib/vendor/interfaces/Ihotel-enterprise-search.js +1 -1
  136. package/esm2015/base/lib/vendor/interfaces/Iirl-enterprise-search.js +1 -1
  137. package/esm2015/base/lib/vendor/interfaces/Ilounges-enterprise-search.js +1 -1
  138. package/esm2015/base/lib/vendor/interfaces/Iparking-enterprise-search.js +1 -1
  139. package/esm2015/base/lib/vendor/interfaces/Irail-enterprise-search.js +1 -1
  140. package/esm2015/base/lib/vendor/interfaces/Isearch.service.js +1 -1
  141. package/esm2015/base/lib/vendor/interfaces/Iuser.service.js +1 -1
  142. package/esm2015/base/lib/vendor/interfaces/eurostar-search-arg.interface.js +1 -1
  143. package/esm2015/base/lib/vendor/interfaces/fast-track-filters.interface.js +2 -0
  144. package/esm2015/base/lib/vendor/interfaces/rail-basket-item.interface.js +1 -1
  145. package/esm2015/base/lib/vendor/interfaces/summary-interface.js +1 -1
  146. package/esm2015/base/lib/vendor/interfaces/user.data.js +1 -1
  147. package/esm2015/base/lib/vendor/models/traveller.object.js +3 -2
  148. package/esm2015/base/lib/vendor/services/enterprise-basket.service.js +63 -17
  149. package/esm2015/base/lib/vendor/services/hotel-avallibility.service.js +16 -12
  150. package/esm2015/base/lib/vendor/services/requires-reason.service.js +49 -0
  151. package/esm2015/base/lib/vendor/services/search.service.js +166 -20
  152. package/esm2015/base/lib/vendor/services/user.service.js +44 -6
  153. package/esm2015/base/lib/vendor/services/webtoken.service.js +9 -5
  154. package/esm2015/base/lib/vendor/types/graphql.types.js +9 -1
  155. package/esm2015/base/lib/vendor/types/types.js +1704 -1
  156. package/esm2015/base/lib/vendor/updaters/edit-user-updater.js +11 -0
  157. package/esm2015/base/lib/vendor/updaters/set-user-language-updater.js +11 -0
  158. package/esm2015/base/sabstravtech-obtservices-base.js +6 -5
  159. package/esm2015/base/services.js +2 -1
  160. package/esm2015/base/updaters.js +3 -1
  161. package/fesm2015/sabstravtech-obtservices-angular.js +790 -19
  162. package/fesm2015/sabstravtech-obtservices-angular.js.map +1 -1
  163. package/fesm2015/sabstravtech-obtservices-base.js +3041 -169
  164. package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
  165. package/package.json +1 -1
@@ -350,18 +350,27 @@ export class ParkingEnterpriseSearch extends BaseEnterpriseSearch {
350
350
  }
351
351
  updateFromPreviousSearches(previousItems) {
352
352
  var _a;
353
- console.log("PREPOPULATING PARKING FORM");
353
+ console.log('PREPOPULATING PARKING FORM');
354
354
  const flightItem = (_a = previousItems[ServiceType.Flight]) === null || _a === void 0 ? void 0 : _a.searchQuery;
355
355
  if (flightItem) {
356
356
  try {
357
357
  let startDate = this.searchService.searches[ServiceType.Flight].outBoundDate.toDate();
358
358
  let endDate = this.searchService.searches[ServiceType.Flight].inboundDate.toDate();
359
- this.outdate = { day: startDate.getUTCDate(), month: startDate.getUTCMonth() + 1, year: startDate.getUTCFullYear() };
360
- this.indate = { day: endDate.getUTCDate(), month: endDate.getUTCMonth() + 1, year: endDate.getUTCFullYear() };
361
- this.locationCode = this.searchService.searches[ServiceType.Flight].arriveLocation;
359
+ this.outdate = {
360
+ day: startDate.getUTCDate(),
361
+ month: startDate.getUTCMonth() + 1,
362
+ year: startDate.getUTCFullYear()
363
+ };
364
+ this.indate = {
365
+ day: endDate.getUTCDate(),
366
+ month: endDate.getUTCMonth() + 1,
367
+ year: endDate.getUTCFullYear()
368
+ };
369
+ this.locationCode = this.searchService.searches[ServiceType.Flight]
370
+ .arriveLocation;
362
371
  }
363
372
  catch (_b) {
364
- console.error("Error trying to prepopulate parking from flight item");
373
+ console.error('Error trying to prepopulate parking from flight item');
365
374
  }
366
375
  }
367
376
  }
@@ -389,7 +398,7 @@ export class ParkingEnterpriseSearch extends BaseEnterpriseSearch {
389
398
  searchQuery: parkingQuery,
390
399
  outboundDate: parkingQuery.arrivalDatetime.format(),
391
400
  inboundDate: parkingQuery.departDatetime.format()
392
- }, intBasket, this.searchService, this.travellers);
401
+ }, intBasket, this.searchService, this.travellers, parkingQuote.requiresReason);
393
402
  }
394
403
  return Promise.resolve(false);
395
404
  });
@@ -460,7 +469,18 @@ export class ParkingEnterpriseSearch extends BaseEnterpriseSearch {
460
469
  return this.searchService.saveFavouriteSearch(searchInfo);
461
470
  }
462
471
  }
472
+ applyFavourite(fav) {
473
+ return __awaiter(this, void 0, void 0, function* () {
474
+ this.searchService.getAirportsList(fav.locationCode).subscribe(a => {
475
+ this.locationCode = a.find(a => a.gateway == fav.locationCode);
476
+ this.terminal = fav.terminal;
477
+ });
478
+ // this.arrivalDatetime = moment((fav.arrivalDatetime as string).split("T")[0], "YYYY-MM-DD")
479
+ // this.departDatetime = moment((fav.departDatetime as string).split("T")[0], "YYYY-MM-DD")
480
+ // this.locationCode = fav.locationCode
481
+ });
482
+ }
463
483
  }
464
484
  ParkingEnterpriseSearch.STORAGE_SESSION_PARAMS = 'search_parking';
465
485
  ParkingEnterpriseSearch.STORAGE_SESSION_RESULTS = 'results_parking';
466
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFya2luZy1lbnRlcnByaXNlLXNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9wYXJraW5nLWVudGVycHJpc2Utc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQWF6RCxPQUFPLEVBT0wsV0FBVyxFQUNaLE1BQU0sd0JBQXdCLENBQUM7QUFlaEMsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUc7SUFDaEMsWUFBWSxFQUFFLGdDQUFnQztJQUM5QyxhQUFhLEVBQUUsdUNBQXVDO0lBQ3RELGNBQWMsRUFBRSx3Q0FBd0M7SUFDeEQsY0FBYyxFQUFFLGtEQUFrRDtDQUNuRSxDQUFDO0FBRUYsTUFBTSxPQUFPLHVCQUNYLFNBQVEsb0JBSVA7SUFzUUQsWUFDVSxjQUEwQyxFQUNsRCxPQUEyQixFQUNuQixhQUErQyxFQUN2RCxjQUFrQyxFQUMxQixhQUErQztRQUV2RCxLQUFLLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBTnZCLG1CQUFjLEdBQWQsY0FBYyxDQUE0QjtRQUUxQyxrQkFBYSxHQUFiLGFBQWEsQ0FBa0M7UUFFL0Msa0JBQWEsR0FBYixhQUFhLENBQWtDO1FBdFFsRCxTQUFJLEdBQWdCLFdBQVcsQ0FBQyxPQUFPLENBQUM7UUFDeEMsY0FBUyxHQUFHLElBQUksZUFBZSxDQUFrQixFQUFFLENBQUMsQ0FBQztRQUVyRCxtQkFBYyxHQUFHLElBQUksZUFBZSxDQUFlLElBQUksQ0FBQyxDQUFDO1FBRXpELHVCQUFrQixHQUE0QjtZQUNuRCxTQUFTLEVBQUUsWUFBWTtZQUN2QixZ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QUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUMvRCxPQUFPLGFBQWEsQ0FBQztRQUN2QixDQUFDLEVBQ0QsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsQ0FDNUQsQ0FBQztJQUNKLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTtZQUN0QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDckMsTUFBTSxVQUFVLEdBQUc7Z0JBQ2pCLElBQUksRUFBRSxHQUFHLE1BQU0sRUFBRSxFQUFFO2dCQUNuQixXQUFXLEVBQUUsV0FBVyxDQUFDLE9BQU87Z0JBQ2hDLFVBQVUsRUFBRSxNQUFNO2FBQ25CLENBQUE7WUFDRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDM0Q7SUFDSCxDQUFDOztBQWxqQmUsOENBQXNCLEdBQUcsZ0JBQWdCLENBQUM7QUFDMUMsK0NBQXVCLEdBQUcsaUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBCYXNlRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4vYmFzZS1lbnRlcnByaXNlJztcclxuaW1wb3J0IHsgQmFzZVN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZUhlbHBlclJvdXRpbmVzIH0gZnJvbSAnLi9oZWxwZXJzJztcclxuaW1wb3J0IHsgVHJhdmVsbGVyIH0gZnJvbSAnLi4vbW9kZWxzL3RyYXZlbGxlci5vYmplY3QnO1xyXG5pbXBvcnQge1xyXG4gIE5nYkRhdGVTdHJ1Y3QsXHJcbiAgT0JUQWlycG9ydERldGFpbHMsXHJcbiAgUGFya2luZ1F1b3RlUmVzdWx0QXJyYXksXHJcbiAgVGVybWluYWxzVHlwZSxcclxuICBQYXJraW5nRmlsdGVyc0ludGVyZmFjZSxcclxuICBSZWNlbnRTZWFyY2gsXHJcbiAgU2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdFxyXG59IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcclxuaW1wb3J0IHtcclxuICBBaXJwb3J0UmVzdWx0cyxcclxuICBCYXNrZXRJdGVtLFxyXG4gIFBhcmtpbmdRdW90ZSxcclxuICBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMsXHJcbiAgU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMsXHJcbiAgU2VhcmNoUGFya2luZ1F1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlcnZpY2VUeXBlXHJcbn0gZnJvbSAnLi4vdHlwZXMvZ3JhcGhxbC50eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVBhcmtpbmdRdW90ZUZldGNoZXIsXHJcbiAgUGFya2luZ1F1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9wYXJraW5nLXF1b3RlLWZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gIEludGVybmFsQmFza2V0SW50ZXJmYWNlXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIFBhcmtpbmdFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlLFxyXG4gIFBhcmtpbmdUZW1wUGFyYW1zXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JcGFya2luZy1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IElDaGVhcGVzdFByaWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jaGVhcGVzdC1wcmljZSc7XHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0VmFsaWRhdGlvbnMgPSB7XHJcbiAgQWlycG9ydEZpcnN0OiBgWW91IG11c3Qgc2VsZWN0IGFpcnBvcnQgZmlyc3QuYCxcclxuICBJbnZhcmRKb3VybmV5OiBgSW53YXJkIGpvdXJuZXkgY2Fubm90IGJlIGluIHRoZSBwYXN0LmAsXHJcbiAgT3V0d2FyZEpvdXJuZXk6IGBPdXR3YXJkIGpvdXJuZXkgY2Fubm90IGJlIGluIHRoZSBwYXN0LmAsXHJcbiAgRGF0ZU92ZXJsYXBwZWQ6IGBJbndhcmQgSm91cm5leSBjYW4gbm90IGJlIGJlZm9yZSBvdXR3YXJkIGpvdXJuZXlgXHJcbn07XHJcblxyXG5leHBvcnQgY2xhc3MgUGFya2luZ0VudGVycHJpc2VTZWFyY2g8USBleHRlbmRzIFBhcmtpbmdRdW90ZUZldGNoZXJUeXBlPlxyXG4gIGV4dGVuZHMgQmFzZUVudGVycHJpc2VTZWFyY2g8XHJcbiAgUGFya2luZ1RlbXBQYXJhbXMsXHJcbiAgUGFya2luZ1F1b3RlUmVzdWx0QXJyYXksXHJcbiAgUGFya2luZ1F1b3RlUmVzdWx0QXJyYXlcclxuICA+XHJcbiAgaW1wbGVtZW50cyBQYXJraW5nRW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZSB7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9QQVJBTVMgPSAnc2VhcmNoX3BhcmtpbmcnO1xyXG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUkVTVUxUUyA9ICdyZXN1bHRzX3BhcmtpbmcnO1xyXG5cclxuICBwdWJsaWMgdHlwZTogU2VydmljZVR5cGUgPSBTZXJ2aWNlVHlwZS5QYXJraW5nO1xyXG4gIHB1YmxpYyB0ZXJtaW5hbHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRlcm1pbmFsc1R5cGVbXT4oW10pO1xyXG5cclxuICBwdWJsaWMgbGlzdFZpZXdUb2dnbGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFBhcmtpbmdRdW90ZT4obnVsbCk7XHJcblxyXG4gIHB1YmxpYyBwYXJraW5nRmlsdGVyc1RleHQ6IFBhcmtpbmdGaWx0ZXJzSW50ZXJmYWNlID0ge1xyXG4gICAgb25BaXJwb3J0OiAnT24gQWlycG9ydCcsXHJcbiAgICBtZWV0QW5kR3JlZXQ6ICdNZWV0IGFuZCBncmVldCcsXHJcbiAgICBwYXJrQW5kUmlkZTogJ1BhcmsgYW5kIHJpZGUnLFxyXG4gICAgcGFya0FuZFN0cm9sbDogJ1BhcmsgYW5kIHN0cm9sbCcsXHJcbiAgICBjYXJQYXJrZWRGb3JZb3U6ICdDYXIgcGFya2VkIGZvciB5b3UnXHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfbG9jYXRpb25Db2RlOiBzdHJpbmc7XHJcblxyXG4gIGdldCBvdXRkYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dGRhdGU7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0ZGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fb3V0ZGF0ZSA9IHZhbHVlO1xyXG4gICAgaWYgKHRoaXMuX291dGRhdGUgJiYgdGhpcy5fb3V0ZGF0ZSkge1xyXG4gICAgICB0aGlzLmFycml2YWxEYXRldGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgICB0aGlzLl9vdXRkYXRlLFxyXG4gICAgICAgIHRoaXMuX291dHRpbWVcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBvdXR0aW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0dGltZTtcclxuICB9XHJcblxyXG4gIHNldCBvdXR0aW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX291dHRpbWUgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLl9vdXRkYXRlICYmIHRoaXMuX291dHRpbWUpIHtcclxuICAgICAgdGhpcy5hcnJpdmFsRGF0ZXRpbWUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQoXHJcbiAgICAgICAgdGhpcy5fb3V0ZGF0ZSxcclxuICAgICAgICB0aGlzLl9vdXR0aW1lXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgZGF0ZSB5b3UgbmVlZCB0aGUgcGFya2luZyB0aWxsXHJcbiAgICovXHJcbiAgZ2V0IGRlcGFydERhdGV0aW1lKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5kZXBhcnREYXRldGltZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBkYXRlIHlvdSBuZWVkIHRoZSBwYXJraW5nIHRpbGxcclxuICAgKi9cclxuICBzZXQgZGVwYXJ0RGF0ZXRpbWUodmFsdWU6IG1vbWVudC5Nb21lbnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5kZXBhcnREYXRldGltZSA9IHZhbHVlLmlzVmFsaWQoKSA/IHZhbHVlIDogbnVsbDtcclxuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgdGhpcy5faW5kYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKHZhbHVlKTtcclxuICAgICAgdGhpcy5faW50aW1lID0gdGhpcy5oZWxwZXJzLmZvcm1hdFRpbWVDb2xvbih2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaW5kYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX2luZGF0ZTtcclxuICB9XHJcblxyXG4gIHNldCBpbmRhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcclxuICAgIHRoaXMuX2luZGF0ZSA9IHZhbHVlO1xyXG4gICAgaWYgKHRoaXMuX2luZGF0ZSAmJiB0aGlzLl9pbnRpbWUpIHtcclxuICAgICAgdGhpcy5kZXBhcnREYXRldGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgICB0aGlzLl9pbmRhdGUsXHJcbiAgICAgICAgdGhpcy5faW50aW1lXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBpbnRpbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9pbnRpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgaW50aW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2ludGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5kZXBhcnREYXRldGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgdGhpcy5faW5kYXRlLFxyXG4gICAgICB0aGlzLl9pbnRpbWVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgZGF0ZSB5b3UgbmVlZCB0aGUgcGFya2luZyBmcm9tXHJcbiAgICovXHJcbiAgZ2V0IGFycml2YWxEYXRldGltZSgpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXM/LmFycml2YWxEYXRldGltZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBkYXRlIHlvdSBuZWVkIHRoZSBwYXJraW5nIGZyb21cclxuICAgKi9cclxuICBzZXQgYXJyaXZhbERhdGV0aW1lKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuYXJyaXZhbERhdGV0aW1lID0gdmFsdWUuaXNWYWxpZCA/IHZhbHVlIDogbnVsbDtcclxuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgdGhpcy5fb3V0ZGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZSh2YWx1ZSk7XHJcbiAgICAgIHRoaXMuX291dHRpbWUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0VGltZUNvbG9uKHZhbHVlKTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmRlcGFydERhdGV0aW1lICYmXHJcbiAgICAgICAgdGhpcy5kZXBhcnREYXRldGltZS5pc1NhbWVPckJlZm9yZSh0aGlzLmFycml2YWxEYXRldGltZSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29uc3QgZGF5QWZ0ZXJBcnJpdmFsRGF0ZVRpbWUgPSB0aGlzLmFycml2YWxEYXRldGltZS5jbG9uZSgpO1xyXG4gICAgICAgIHRoaXMuZGVwYXJ0RGF0ZXRpbWUgPSBkYXlBZnRlckFycml2YWxEYXRlVGltZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG91dEZsaWdodE51bWJlcigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcz8ub3V0RmxpZ2h0TnVtYmVyO1xyXG4gIH1cclxuXHJcbiAgc2V0IG91dEZsaWdodE51bWJlcih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMub3V0RmxpZ2h0TnVtYmVyID0gdmFsdWUgfHwgbnVsbDtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCByZWNvbW1lbmRlZCgpOiBib29sZWFuIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gISF0aGlzLnRlbXBQYXJhbXM/LnJlY29tbWVuZGVkO1xyXG4gIH1cclxuICBzZXQgcmVjb21tZW5kZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5yZWNvbW1lbmRlZCA9IHZhbHVlIHx8IG51bGw7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG4gIGdldCBvbkFpcnBvcnQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLnRlbXBQYXJhbXM/Lm9uQWlycG9ydDtcclxuICB9XHJcblxyXG4gIHNldCBvbkFpcnBvcnQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5vbkFpcnBvcnQgPSB2YWx1ZSB8fCBudWxsO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG1lZXRBbmRHcmVldCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhIXRoaXMudGVtcFBhcmFtcz8ubWVldEFuZEdyZWV0O1xyXG4gIH1cclxuXHJcbiAgc2V0IG1lZXRBbmRHcmVldCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm1lZXRBbmRHcmVldCA9IHZhbHVlIHx8IG51bGw7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgcGFya0FuZFJpZGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLnRlbXBQYXJhbXM/LnBhcmtBbmRSaWRlO1xyXG4gIH1cclxuXHJcbiAgc2V0IHBhcmtBbmRSaWRlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucGFya0FuZFJpZGUgPSB2YWx1ZSB8fCBudWxsO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHBhcmtBbmRTdHJvbGwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLnRlbXBQYXJhbXM/LnBhcmtBbmRTdHJvbGw7XHJcbiAgfVxyXG5cclxuICBzZXQgcGFya0FuZFN0cm9sbCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnBhcmtBbmRTdHJvbGwgPSB2YWx1ZSB8fCBudWxsO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNhclBhcmtlZEZvcllvdSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhIXRoaXMudGVtcFBhcmFtcz8uY2FyUGFya2VkRm9yWW91O1xyXG4gIH1cclxuXHJcbiAgc2V0IGNhclBhcmtlZEZvcllvdSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNhclBhcmtlZEZvcllvdSA9IHZhbHVlIHx8IG51bGw7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdGVybWluYWwoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudGVybWluYWxcclxuICAgICAgPyB0aGlzLnRlbXBQYXJhbXMudGVybWluYWwudG9TdHJpbmcoKVxyXG4gICAgICA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBzZXQgdGVybWluYWwoaW5wdXQ6IHN0cmluZykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnRlcm1pbmFsID0gaW5wdXQ7XHJcbiAgICBjb25zdCBmb3VuZDogVGVybWluYWxzVHlwZSA9IHRoaXMudGVybWluYWxzLnZhbHVlLmZpbmQoXHJcbiAgICAgICh0ZXJtaW5hbDogVGVybWluYWxzVHlwZSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIGlmICh0ZXJtaW5hbC52YWx1ZSA9PT0gaW5wdXQpIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoZm91bmQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRlcm1pbmFsID0gZm91bmQua2V5O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMudGVybWluYWxzLnZhbHVlICYmIHRoaXMudGVybWluYWxzLnZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVGVybWluYWwgPSB0aGlzLnRlcm1pbmFscy52YWx1ZVswXS5rZXk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRlcm1pbmFsID0gJ0FueSBUZXJtaW5hbCc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBsb2NhdGlvbkNvZGUoKTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5sb2NhdGlvbkNvZGU7XHJcbiAgfVxyXG5cclxuICBzZXQgbG9jYXRpb25Db2RlKHZhbHVlOiBzdHJpbmcgfCBPQlRBaXJwb3J0RGV0YWlscykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmxvY2F0aW9uQ29kZSA9IHZhbHVlO1xyXG5cclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRoaXMuX2xvY2F0aW9uQ29kZSA9IG51bGw7XHJcbiAgICAgIHRoaXMudGVybWluYWwgPSBudWxsO1xyXG4gICAgICB0aGlzLnRlcm1pbmFscy5uZXh0KFtdKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRlcm1pbmFsID0gbnVsbDtcclxuICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB2YWx1ZS5nYXRld2F5KSB7XHJcbiAgICAgIHRoaXMuX2xvY2F0aW9uQ29kZSA9IHZhbHVlLmdhdGV3YXk7XHJcbiAgICAgIHRoaXMudGVybWluYWwgPSBudWxsO1xyXG4gICAgICB0aGlzLnRlcm1pbmFscy5uZXh0KHZhbHVlLnRlcm1pbmFscyk7XHJcbiAgICAgIGlmICh2YWx1ZS50ZXJtaW5hbHMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRlcm1pbmFsID0gdmFsdWUudGVybWluYWxzWzBdLmtleTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9sb2NhdGlvbkNvZGUgPSBudWxsO1xyXG4gICAgICB0aGlzLnRlcm1pbmFsID0gbnVsbDtcclxuICAgICAgdGhpcy50ZXJtaW5hbHMubmV4dChbXSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUZXJtaW5hbCA9IG51bGw7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NlbGVjdGVkVGVybWluYWw6IHN0cmluZyA9ICcnO1xyXG4gIHNldCBzZWxlY3RlZFRlcm1pbmFsKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3NlbGVjdGVkVGVybWluYWwgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBzZWxlY3RlZFRlcm1pbmFsKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRUZXJtaW5hbDtcclxuICB9XHJcblxyXG4gIC8vIHB1YmxpYyB2YXJpYWJsZXNcclxuICBwdWJsaWMgbWluX2RhdGUgPSB7XHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsIC8vIG5nYkRhdGUgbW9udGhzIGFyZSBub3QgMCBpbmRleGVkXHJcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBtaW5fcmV0dXJuX2RhdGUgPSB7XHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsIC8vIG5nYkRhdGUgbW9udGhzIGFyZSBub3QgMCBpbmRleGVkXHJcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKSArIDEgLy8gbWluIDEgbmlnaHQgc3RheVxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgdHJhdmVsbGVyczogVHJhdmVsbGVyW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBwYXJraW5nZmV0Y2hlcjogQmFzZVBhcmtpbmdRdW90ZUZldGNoZXI8UT4sXHJcbiAgICBoZWxwZXJzOiBCYXNlSGVscGVyUm91dGluZXMsXHJcbiAgICBwcml2YXRlIGJhc2tldFNlcnZpY2U6IEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gICAgc3RvcmFnZVNlcnZpY2U6IEJhc2VTdG9yYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgc2VhcmNoU2VydmljZTogRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2VcclxuICApIHtcclxuICAgIHN1cGVyKHN0b3JhZ2VTZXJ2aWNlLCBoZWxwZXJzKTtcclxuXHJcbiAgICBjb25zdCBkYXRhOiB7XHJcbiAgICAgIHRlbXBQYXJhbXM6IFBhcmtpbmdUZW1wUGFyYW1zO1xyXG4gICAgfSA9IHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtKFxyXG4gICAgICBQYXJraW5nRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TXHJcbiAgICApIHx8IHtcclxuICAgICAgICB0ZW1wUGFyYW1zOiB7fSBhcyBQYXJraW5nVGVtcFBhcmFtc1xyXG4gICAgICB9O1xyXG5cclxuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyhzZWFyY2hTZXJ2aWNlLm1ha2VQYXJraW5nUXVlcnkoZGF0YS50ZW1wUGFyYW1zKSk7XHJcblxyXG4gICAgY29uc3QgcmVzdWx0cyA9XHJcbiAgICAgIHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtQXNMaXN0PFBhcmtpbmdRdW90ZVJlc3VsdEFycmF5PihcclxuICAgICAgICB0aGlzLnJlc3VsdHNTZXNzaW9uTmFtZVxyXG4gICAgICApIHx8IFtdO1xyXG5cclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMpO1xyXG4gICAgdGhpcy5fY2hlYXBlc3RSZXN1bHRQcmljZSA9IHRoaXMudXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0cyk7XHJcbiAgICBpZiAoc2VhcmNoU2VydmljZS5zaG91bGRBZGRUcmF2ZWxsZXJTdWJzY3JpcHRpb24oKSkge1xyXG4gICAgICBzZWFyY2hTZXJ2aWNlLnRyYXZlbGxlckluZm9ybWF0aW9uLnN1YnNjcmliZShcclxuICAgICAgICAodHJhdmVsbGVyczogVHJhdmVsbGVyW10pID0+IHtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVycyA9IHRyYXZlbGxlcnM/LnNsaWNlKDAsIDEpIHx8IFtdO1xyXG4gICAgICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCByZXN1bHRzU2Vzc2lvbk5hbWUgPVxyXG4gICAgUGFya2luZ0VudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XHJcbiAgcHJvdGVjdGVkIG11bHRpUmVzdWx0c1Nlc3Npb25OYW1lID1cclxuICAgIFBhcmtpbmdFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xyXG5cclxuICBwcml2YXRlIF9vdXRkYXRlOiBOZ2JEYXRlU3RydWN0ID0gbnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBfb3V0dGltZTogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBfaW5kYXRlOiBOZ2JEYXRlU3RydWN0ID0gbnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBfaW50aW1lOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICBwcm90ZWN0ZWQgcmVzZXRRdWVyeSgpOiB2b2lkIHtcclxuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyh0aGlzLnNlYXJjaFNlcnZpY2UubWFrZVBhcmtpbmdRdWVyeSgpKTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzVmFsaWQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZG9DaGVja3MpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgUGFya2luZ0VudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyxcclxuICAgICAge1xyXG4gICAgICAgIGxvY2F0aW9uOiB0aGlzLl9sb2NhdGlvbkNvZGUsXHJcbiAgICAgICAgdHJhdmVsbGVyczogdGhpcy50cmF2ZWxsZXJzLFxyXG4gICAgICAgIHRlbXBQYXJhbXM6IHRoaXMudGVtcFBhcmFtc1xyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzID0gW107XHJcbiAgICBpZiAoIXRoaXMuX2xvY2F0aW9uQ29kZSB8fCB0aGlzLl9sb2NhdGlvbkNvZGUgPT09ICcnKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goZGVmYXVsdFZhbGlkYXRpb25zLkFpcnBvcnRGaXJzdCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaWYgKCF0aGlzLnF1ZXJ5Py50ZXJtaW5hbCkge1xyXG4gICAgLy8gICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdUZXJtaW5hbCBjYW4gbm90IGJlIGVtcHR5LicpO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIGlmICh0aGlzLnRlbXBQYXJhbXM/LmFycml2YWxEYXRldGltZS51bml4KCkgPCBtb21lbnQoKS51bml4KCkpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChkZWZhdWx0VmFsaWRhdGlvbnMuSW52YXJkSm91cm5leSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudGVtcFBhcmFtcz8uZGVwYXJ0RGF0ZXRpbWUudW5peCgpIDwgbW9tZW50KCkudW5peCgpKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goZGVmYXVsdFZhbGlkYXRpb25zLk91dHdhcmRKb3VybmV5KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5kZXBhcnREYXRldGltZT8uaXNCZWZvcmUodGhpcy50ZW1wUGFyYW1zLmFycml2YWxEYXRldGltZSlcclxuICAgICkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKGRlZmF1bHRWYWxpZGF0aW9ucy5EYXRlT3ZlcmxhcHBlZCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzVmFsaWQubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5sZW5ndGggPT09IDApO1xyXG4gICAgdGhpcy5tZXNzYWdlcy5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzKTtcclxuICB9XHJcblxyXG4gIHN0YXJ0U2VhcmNoKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQoW10pO1xyXG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xyXG4gICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVSZWNlbnRTZWFyY2godGhpcy5nZXRSZWNlbnRTZWFyY2hRdWVyeShxdWVyeSkpO1xyXG4gICAgICByZXR1cm4gdGhpcy5fc3RhcnRTZWFyY2goXHJcbiAgICAgICAgdGhpcy5wYXJraW5nZmV0Y2hlci5mZXRjaExpc3QoXHJcbiAgICAgICAgICB0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8U2VhcmNoUGFya2luZ1F1ZXJ5VmFyaWFibGVzPihxdWVyeSlcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFJlY2VudFNlYXJjaFF1ZXJ5KFxyXG4gICAgcXVlcnk6IFNlYXJjaFBhcmtpbmdRdWVyeVZhcmlhYmxlc1xyXG4gICk6IFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzZXJ2aWNlVHlwZTogU2VydmljZVR5cGUuUGFya2luZyxcclxuICAgICAgc2VhcmNoQXJnczogcXVlcnksXHJcbiAgICAgIHRyYXZlbERhdGU6IHRoaXMuYXJyaXZhbERhdGV0aW1lLmZvcm1hdCgpLFxyXG4gICAgICB0cmF2ZWxsZXJzOiB0aGlzLmhlbHBlcnMuZ2V0VHJhdmVsbGVyc0lkKHRoaXMudHJhdmVsbGVycylcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhcnRSZWNlbnRTZWFyY2gocmVjZW50U2VhcmNoOiBSZWNlbnRTZWFyY2gpOiB2b2lkIHtcclxuICAgIHRoaXMuYXJyaXZhbERhdGV0aW1lID0gbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmFycml2YWxEYXRldGltZSk7XHJcbiAgICB0aGlzLmRlcGFydERhdGV0aW1lID0gbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcGFydERhdGV0aW1lKTtcclxuICAgIHRoaXMub3V0RmxpZ2h0TnVtYmVyID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0RmxpZ2h0TnVtYmVyO1xyXG4gICAgdGhpcy50ZXJtaW5hbCA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnRlcm1pbmFsO1xyXG5cclxuICAgIHRoaXMuc2VhcmNoU2VydmljZVxyXG4gICAgICAuZ2V0QWlycG9ydEJ5Q29kZShyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5sb2NhdGlvbkNvZGUpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGFpcnBvcnQ6IEFpcnBvcnRSZXN1bHRzKSA9PiB7XHJcbiAgICAgICAgaWYgKGFpcnBvcnQpIHtcclxuICAgICAgICAgIHRoaXMubG9jYXRpb25Db2RlID0ge1xyXG4gICAgICAgICAgICBjb3VudHJ5OiBhaXJwb3J0LmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5LFxyXG4gICAgICAgICAgICBjb3VudHJ5Q29kZTogYWlycG9ydC5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeUNvZGUsXHJcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uOiBhaXJwb3J0LmlhdGFNYXRjaC5uYW1lLFxyXG4gICAgICAgICAgICBnYXRld2F5OiBhaXJwb3J0LmlhdGFNYXRjaC5pYXRhLFxyXG4gICAgICAgICAgICBwb3N0Y29kZTogYWlycG9ydC5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8ucG9zdGNvZGUsXHJcbiAgICAgICAgICAgIHRlcm1pbmFsczogdGhpcy5zZWFyY2hTZXJ2aWNlLnByb2Nlc3NUZXJtaW5hbHMoXHJcbiAgICAgICAgICAgICAgYWlycG9ydC5pYXRhTWF0Y2gudGVybWluYWxzXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcclxuICB9XHJcblxyXG4gIGdldFNlYXJjaFF1ZXJ5KCk6IFNlYXJjaFBhcmtpbmdRdWVyeVZhcmlhYmxlcyB7XHJcbiAgICBjb25zdCBxdWVyeTogU2VhcmNoUGFya2luZ1F1ZXJ5VmFyaWFibGVzID0ge1xyXG4gICAgICBhcnJpdmFsRGF0ZXRpbWU6IHRoaXMudGVtcFBhcmFtcy5hcnJpdmFsRGF0ZXRpbWUsXHJcbiAgICAgIGRlcGFydERhdGV0aW1lOiB0aGlzLnRlbXBQYXJhbXMuZGVwYXJ0RGF0ZXRpbWUsXHJcbiAgICAgIGxvY2F0aW9uQ29kZTogdGhpcy5fbG9jYXRpb25Db2RlLFxyXG4gICAgICBvdXRGbGlnaHROdW1iZXI6IHRoaXMudGVtcFBhcmFtcy5vdXRGbGlnaHROdW1iZXIsXHJcbiAgICAgIHJlY29tbWVuZGVkOiB0aGlzLnRlbXBQYXJhbXMucmVjb21tZW5kZWQsXHJcbiAgICAgIG9uQWlycG9ydDogdGhpcy50ZW1wUGFyYW1zLm9uQWlycG9ydCxcclxuICAgICAgbWVldEFuZEdyZWV0OiB0aGlzLnRlbXBQYXJhbXMubWVldEFuZEdyZWV0LFxyXG4gICAgICBwYXJrQW5kUmlkZTogdGhpcy50ZW1wUGFyYW1zLnBhcmtBbmRSaWRlLFxyXG4gICAgICBwYXJrQW5kU3Ryb2xsOiB0aGlzLnRlbXBQYXJhbXMucGFya0FuZFN0cm9sbCxcclxuICAgICAgY2FyUGFya2VkRm9yWW91OiB0aGlzLnRlbXBQYXJhbXMuY2FyUGFya2VkRm9yWW91LFxyXG4gICAgICB0ZXJtaW5hbDpcclxuICAgICAgICB0aGlzLnRlbXBQYXJhbXMudGVybWluYWwgPT09ICdBbnknID8gbnVsbCA6IHRoaXMudGVtcFBhcmFtcy50ZXJtaW5hbFxyXG4gICAgfTtcclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8U2VhcmNoUGFya2luZ1F1ZXJ5VmFyaWFibGVzPihxdWVyeSk7XHJcbiAgfVxyXG5cclxuICBzb3J0QnlQcmljZShhc2M/OiBib29sZWFuKSB7XHJcbiAgICBsZXQgcmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLnJlc3VsdHMudmFsdWUpIHx8IFtdO1xyXG4gICAgaWYgKGFzYykge1xyXG4gICAgICByZXN1bHRzID0gcmVzdWx0cy5zb3J0KFxyXG4gICAgICAgIChhOiBQYXJraW5nUXVvdGUsIGI6IFBhcmtpbmdRdW90ZSkgPT4gYi5wcmljZSAtIGEucHJpY2VcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLnNvcnQoXHJcbiAgICAgICAgKGE6IFBhcmtpbmdRdW90ZSwgYjogUGFya2luZ1F1b3RlKSA9PiBhLnByaWNlIC0gYi5wcmljZVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQocmVzdWx0cyk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVGcm9tUHJldmlvdXNTZWFyY2hlcyhcclxuICAgIHByZXZpb3VzSXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT5cclxuICApOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKFwiUFJFUE9QVUxBVElORyBQQVJLSU5HIEZPUk1cIilcclxuICAgIGNvbnN0IGZsaWdodEl0ZW06IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzID1cclxuICAgICAgcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5GbGlnaHRdPy5zZWFyY2hRdWVyeTtcclxuICAgIGlmIChmbGlnaHRJdGVtKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgbGV0IHN0YXJ0RGF0ZSA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5GbGlnaHRdLm91dEJvdW5kRGF0ZS50b0RhdGUoKTtcclxuICAgICAgICBsZXQgZW5kRGF0ZSA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5GbGlnaHRdLmluYm91bmREYXRlLnRvRGF0ZSgpO1xyXG4gICAgICAgIHRoaXMub3V0ZGF0ZSA9IHsgZGF5OiBzdGFydERhdGUuZ2V0VVRDRGF0ZSgpLCBtb250aDogc3RhcnREYXRlLmdldFVUQ01vbnRoKCkgKyAxLCB5ZWFyOiBzdGFydERhdGUuZ2V0VVRDRnVsbFllYXIoKSB9O1xyXG4gICAgICAgIHRoaXMuaW5kYXRlID0geyBkYXk6IGVuZERhdGUuZ2V0VVRDRGF0ZSgpLCBtb250aDogZW5kRGF0ZS5nZXRVVENNb250aCgpICsgMSwgeWVhcjogZW5kRGF0ZS5nZXRVVENGdWxsWWVhcigpIH07XHJcbiAgICAgICAgdGhpcy5sb2NhdGlvbkNvZGUgPSB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XS5hcnJpdmVMb2NhdGlvbiBhcyBPQlRBaXJwb3J0RGV0YWlsc1xyXG4gICAgICB9IGNhdGNoIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIHBhcmtpbmcgZnJvbSBmbGlnaHQgaXRlbVwiKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkUGFya2luZ1RvQmFza2V0KFxyXG4gICAgcGFya2luZ1F1b3RlOiBQYXJraW5nUXVvdGUsXHJcbiAgICBwYXJraW5nUXVlcnk6IFNlYXJjaFBhcmtpbmdRdWVyeVZhcmlhYmxlc1xyXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9XHJcbiAgICAgIGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XHJcbiAgICBjb25zdCBiYXNrZXQgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWU7XHJcbiAgICBjb25zdCB0ZXJtc0FuZENvbmRpdGlvbnMgPSB0aGlzLmdldFRlcm1zQW5kQ29uZChwYXJraW5nUXVvdGUpO1xyXG4gICAgaWYgKGJhc2tldCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5iYXNrZXRTZXJ2aWNlLmFkZFRvQmFza2V0KFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGFkdWx0czogMSxcclxuICAgICAgICAgIGJhc2tldDogYmFza2V0LmlkLFxyXG4gICAgICAgICAgc2VydmljZTogcGFya2luZ1F1b3RlLnNvdXJjZUlkLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICBkZXRhaWw6IHtcclxuICAgICAgICAgICAgYXJyaXZhbERhdGV0aW1lOiBwYXJraW5nUXVlcnkuYXJyaXZhbERhdGV0aW1lLmZvcm1hdCgpLFxyXG4gICAgICAgICAgICBkZXBhcnREYXRldGltZTogcGFya2luZ1F1ZXJ5LmRlcGFydERhdGV0aW1lLmZvcm1hdCgpLFxyXG4gICAgICAgICAgICBsb2NhdGlvbkNvZGU6IHBhcmtpbmdRdW90ZS5jYXJQYXJrLmNvZGUsXHJcbiAgICAgICAgICAgIG5hbWU6IHBhcmtpbmdRdW90ZS5jYXJQYXJrLm5hbWUsXHJcbiAgICAgICAgICAgIHJlcXVpcmVkSW5mbzogcGFya2luZ1F1b3RlLnJlcXVpcmVkSW5mbyxcclxuICAgICAgICAgICAgYWlycG9ydElhdGE6IHBhcmtpbmdRdWVyeS5sb2NhdGlvbkNvZGUsXHJcbiAgICAgICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgcHJpY2U6IHBhcmtpbmdRdW90ZS5wcmljZSxcclxuICAgICAgICAgIGN1cnJlbmN5OiBwYXJraW5nUXVvdGUuY3VycmVuY3ksXHJcbiAgICAgICAgICBzZWFyY2hRdWVyeTogcGFya2luZ1F1ZXJ5LFxyXG4gICAgICAgICAgb3V0Ym91bmREYXRlOiBwYXJraW5nUXVlcnkuYXJyaXZhbERhdGV0aW1lLmZvcm1hdCgpLFxyXG4gICAgICAgICAgaW5ib3VuZERhdGU6IHBhcmtpbmdRdWVyeS5kZXBhcnREYXRldGltZS5mb3JtYXQoKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaW50QmFza2V0LFxyXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZSxcclxuICAgICAgICB0aGlzLnRyYXZlbGxlcnNcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGVybXNBbmRDb25kKHBhcmtpbmdRdW90ZTogUGFya2luZ1F1b3RlKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ05hbWUnLFxyXG4gICAgICAgIHZhbHVlOiBwYXJraW5nUXVvdGUuY2FyUGFyay5uYW1lXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVGVsZXBob25lJyxcclxuICAgICAgICB2YWx1ZTogcGFya2luZ1F1b3RlLmNhclBhcmsudGVsZXBob25lXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnSW1wb3J0YW50IEluZm9ybWF0aW9uJyxcclxuICAgICAgICB2YWx1ZTogcGFya2luZ1F1b3RlLmNhclBhcmsubWlzYy5pbXBvcnRhbnRJbmZvcm1hdGlvblxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0dlby1Qb3NpdGlvbicsXHJcbiAgICAgICAgdmFsdWU6IGBMYXRpdHVkZSAke3BhcmtpbmdRdW90ZS5jYXJQYXJrLmxhdGl0dWRlfTsgTG9uZ2l0dWRlICR7cGFya2luZ1F1b3RlLmNhclBhcmsubGF0aXR1ZGV9YFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0ludHJvZHVjdGlvbicsXHJcbiAgICAgICAgdmFsdWU6IHBhcmtpbmdRdW90ZS5jYXJQYXJrLmludHJvZHVjdGlvblxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0Fycml2YWwgUHJvY2VkdXJlcycsXHJcbiAgICAgICAgdmFsdWU6IHBhcmtpbmdRdW90ZS5jYXJQYXJrLmFycml2YWxQcm9jZWR1cmVcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdEZXBhcnR1cmUgUHJvY2VkdXJlJyxcclxuICAgICAgICB2YWx1ZTogcGFya2luZ1F1b3RlLmNhclBhcmsuZGVwYXJ0dXJlUHJvY2VkdXJlXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnSW5mb3JtYXRpb24nLFxyXG4gICAgICAgIHZhbHVlOiBwYXJraW5nUXVvdGUuY2FyUGFyay5pbmZvcm1hdGlvblxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ01heGltdW0gQ2FyIFNpemUnLFxyXG4gICAgICAgIHZhbHVlOiBwYXJraW5nUXVvdGUuY2FyUGFyay5tYXhpbXVtQ2FyU2l6ZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0RpcmVjdGlvbnMnLFxyXG4gICAgICAgIHZhbHVlOiBwYXJraW5nUXVvdGUuY2FyUGFyay5kaXJlY3Rpb25zXHJcbiAgICAgIH1cclxuICAgIF07XHJcbiAgfVxyXG5cclxuICB1cGRhdGVMb3dlc3RQcmljZShyZXN1bHRzOiBQYXJraW5nUXVvdGVbXSk6IElDaGVhcGVzdFByaWNlIHtcclxuICAgIGlmICghcmVzdWx0cy5sZW5ndGgpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgY3VycmVuY3kgPSByZXN1bHRzWzBdLmN1cnJlbmN5O1xyXG4gICAgcmV0dXJuIHJlc3VsdHMucmVkdWNlKFxyXG4gICAgICAoY2hlYXBlc3RQcmljZTogSUNoZWFwZXN0UHJpY2UsIHJlc3VsdDogUGFya2luZ1F1b3RlKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcHJpY2UgPSByZXN1bHQucHJpY2U7XHJcbiAgICAgICAgaWYgKGNoZWFwZXN0UHJpY2UuYW1vdW50ID4gcHJpY2UpIGNoZWFwZXN0UHJpY2UuYW1vdW50ID0gcHJpY2U7XHJcbiAgICAgICAgcmV0dXJuIGNoZWFwZXN0UHJpY2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgYW1vdW50OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgY3VycmVuY3lDb2RlOiBjdXJyZW5jeSB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVNlYXJjaCgpOiBPYnNlcnZhYmxlPFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHQ+IHtcclxuICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcclxuICAgICAgY29uc3Qgc2VhcmNoID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xyXG4gICAgICBjb25zdCBzZWFyY2hJbmZvID0ge1xyXG4gICAgICAgIG5hbWU6IGAke21vbWVudCgpfWAsXHJcbiAgICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLlBhcmtpbmcsXHJcbiAgICAgICAgc2VhcmNoQXJnczogc2VhcmNoXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlRmF2b3VyaXRlU2VhcmNoKHNlYXJjaEluZm8pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
486
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFya2luZy1lbnRlcnByaXNlLXNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9wYXJraW5nLWVudGVycHJpc2Utc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQWF6RCxPQUFPLEVBT0wsV0FBVyxFQUNaLE1BQU0sd0JBQXdCLENBQUM7QUFlaEMsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUc7SUFDaEMsWUFBWSxFQUFFLGdDQUFnQztJQUM5QyxhQUFhLEVBQUUsdUNBQXVDO0lBQ3RELGNBQWMsRUFBRSx3Q0FBd0M7SUFDeEQsY0FBYyxFQUFFLGtEQUFrRDtDQUNuRSxDQUFDO0FBRUYsTUFBTSxPQUFPLHVCQUNYLFNBQVEsb0JBSVA7SUF1UUQsWUFDVSxjQUEwQyxFQUNsRCxPQUEyQixFQUNuQixhQUErQyxFQUN2RCxjQUFrQyxFQUMxQixhQUErQztRQUV2RCxLQUFLLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBTnZCLG1CQUFjLEdBQWQsY0FBYyxDQUE0QjtRQUUxQyxrQkFBYSxHQUFiLGFBQWEsQ0FBa0M7UUFFL0Msa0JBQWEsR0FBYixhQUFhLENBQWtDO1FBdFFsRCxTQUFJLEdBQWdCLFdBQVcsQ0FBQyxPQUFPLENBQUM7UUFDeEMsY0FBUyxHQUFHLElBQUksZUFBZSxDQUFrQixFQUFFLENBQUMsQ0FBQztRQUVyRCxtQkFBYyxHQUFHLElBQUksZUFBZSxDQUFlLElBQUksQ0FBQyxDQUFDO1FBRXpELHVCQUFrQixHQUE0QjtZQUNuRCxTQUFTLEVBQUUsWUFBWTtZQUN2QixZ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dmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBCYXNlRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4vYmFzZS1lbnRlcnByaXNlJztcclxuaW1wb3J0IHsgQmFzZVN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZUhlbHBlclJvdXRpbmVzIH0gZnJvbSAnLi9oZWxwZXJzJztcclxuaW1wb3J0IHsgVHJhdmVsbGVyIH0gZnJvbSAnLi4vbW9kZWxzL3RyYXZlbGxlci5vYmplY3QnO1xyXG5pbXBvcnQge1xyXG4gIE5nYkRhdGVTdHJ1Y3QsXHJcbiAgT0JUQWlycG9ydERldGFpbHMsXHJcbiAgUGFya2luZ1F1b3RlUmVzdWx0QXJyYXksXHJcbiAgVGVybWluYWxzVHlwZSxcclxuICBQYXJraW5nRmlsdGVyc0ludGVyZmFjZSxcclxuICBSZWNlbnRTZWFyY2gsXHJcbiAgU2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdFxyXG59IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcclxuaW1wb3J0IHtcclxuICBBaXJwb3J0UmVzdWx0cyxcclxuICBCYXNrZXRJdGVtLFxyXG4gIFBhcmtpbmdRdW90ZSxcclxuICBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMsXHJcbiAgU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMsXHJcbiAgU2VhcmNoUGFya2luZ1F1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlcnZpY2VUeXBlXHJcbn0gZnJvbSAnLi4vdHlwZXMvZ3JhcGhxbC50eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVBhcmtpbmdRdW90ZUZldGNoZXIsXHJcbiAgUGFya2luZ1F1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9wYXJraW5nLXF1b3RlLWZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gIEludGVybmFsQmFza2V0SW50ZXJmYWNlXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIFBhcmtpbmdFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlLFxyXG4gIFBhcmtpbmdUZW1wUGFyYW1zXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JcGFya2luZy1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IElDaGVhcGVzdFByaWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jaGVhcGVzdC1wcmljZSc7XHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0VmFsaWRhdGlvbnMgPSB7XHJcbiAgQWlycG9ydEZpcnN0OiBgWW91IG11c3Qgc2VsZWN0IGFpcnBvcnQgZmlyc3QuYCxcclxuICBJbnZhcmRKb3VybmV5OiBgSW53YXJkIGpvdXJuZXkgY2Fubm90IGJlIGluIHRoZSBwYXN0LmAsXHJcbiAgT3V0d2FyZEpvdXJuZXk6IGBPdXR3YXJkIGpvdXJuZXkgY2Fubm90IGJlIGluIHRoZSBwYXN0LmAsXHJcbiAgRGF0ZU92ZXJsYXBwZWQ6IGBJbndhcmQgSm91cm5leSBjYW4gbm90IGJlIGJlZm9yZSBvdXR3YXJkIGpvdXJuZXlgXHJcbn07XHJcblxyXG5leHBvcnQgY2xhc3MgUGFya2luZ0VudGVycHJpc2VTZWFyY2g8USBleHRlbmRzIFBhcmtpbmdRdW90ZUZldGNoZXJUeXBlPlxyXG4gIGV4dGVuZHMgQmFzZUVudGVycHJpc2VTZWFyY2g8XHJcbiAgICBQYXJraW5nVGVtcFBhcmFtcyxcclxuICAgIFBhcmtpbmdRdW90ZVJlc3VsdEFycmF5LFxyXG4gICAgUGFya2luZ1F1b3RlUmVzdWx0QXJyYXlcclxuICA+XHJcbiAgaW1wbGVtZW50cyBQYXJraW5nRW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZVxyXG57XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9QQVJBTVMgPSAnc2VhcmNoX3BhcmtpbmcnO1xyXG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUkVTVUxUUyA9ICdyZXN1bHRzX3BhcmtpbmcnO1xyXG5cclxuICBwdWJsaWMgdHlwZTogU2VydmljZVR5cGUgPSBTZXJ2aWNlVHlwZS5QYXJraW5nO1xyXG4gIHB1YmxpYyB0ZXJtaW5hbHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRlcm1pbmFsc1R5cGVbXT4oW10pO1xyXG5cclxuICBwdWJsaWMgbGlzdFZpZXdUb2dnbGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFBhcmtpbmdRdW90ZT4obnVsbCk7XHJcblxyXG4gIHB1YmxpYyBwYXJraW5nRmlsdGVyc1RleHQ6IFBhcmtpbmdGaWx0ZXJzSW50ZXJmYWNlID0ge1xyXG4gICAgb25BaXJwb3J0OiAnT24gQWlycG9ydCcsXHJcbiAgICBtZWV0QW5kR3JlZXQ6ICdNZWV0IGFuZCBncmVldCcsXHJcbiAgICBwYXJrQW5kUmlkZTogJ1BhcmsgYW5kIHJpZGUnLFxyXG4gICAgcGFya0FuZFN0cm9sbDogJ1BhcmsgYW5kIHN0cm9sbCcsXHJcbiAgICBjYXJQYXJrZWRGb3JZb3U6ICdDYXIgcGFya2VkIGZvciB5b3UnXHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfbG9jYXRpb25Db2RlOiBzdHJpbmc7XHJcblxyXG4gIGdldCBvdXRkYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dGRhdGU7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0ZGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fb3V0ZGF0ZSA9IHZhbHVlO1xyXG4gICAgaWYgKHRoaXMuX291dGRhdGUgJiYgdGhpcy5fb3V0ZGF0ZSkge1xyXG4gICAgICB0aGlzLmFycml2YWxEYXRldGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgICB0aGlzLl9vdXRkYXRlLFxyXG4gICAgICAgIHRoaXMuX291dHRpbWVcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBvdXR0aW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0dGltZTtcclxuICB9XHJcblxyXG4gIHNldCBvdXR0aW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX291dHRpbWUgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLl9vdXRkYXRlICYmIHRoaXMuX291dHRpbWUpIHtcclxuICAgICAgdGhpcy5hcnJpdmFsRGF0ZXRpbWUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQoXHJcbiAgICAgICAgdGhpcy5fb3V0ZGF0ZSxcclxuICAgICAgICB0aGlzLl9vdXR0aW1lXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgZGF0ZSB5b3UgbmVlZCB0aGUgcGFya2luZyB0aWxsXHJcbiAgICovXHJcbiAgZ2V0IGRlcGFydERhdGV0aW1lKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5kZXBhcnREYXRldGltZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBkYXRlIHlvdSBuZWVkIHRoZSBwYXJraW5nIHRpbGxcclxuICAgKi9cclxuICBzZXQgZGVwYXJ0RGF0ZXRpbWUodmFsdWU6IG1vbWVudC5Nb21lbnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5kZXBhcnREYXRldGltZSA9IHZhbHVlLmlzVmFsaWQoKSA/IHZhbHVlIDogbnVsbDtcclxuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgdGhpcy5faW5kYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKHZhbHVlKTtcclxuICAgICAgdGhpcy5faW50aW1lID0gdGhpcy5oZWxwZXJzLmZvcm1hdFRpbWVDb2xvbih2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaW5kYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX2luZGF0ZTtcclxuICB9XHJcblxyXG4gIHNldCBpbmRhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcclxuICAgIHRoaXMuX2luZGF0ZSA9IHZhbHVlO1xyXG4gICAgaWYgKHRoaXMuX2luZGF0ZSAmJiB0aGlzLl9pbnRpbWUpIHtcclxuICAgICAgdGhpcy5kZXBhcnREYXRldGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgICB0aGlzLl9pbmRhdGUsXHJcbiAgICAgICAgdGhpcy5faW50aW1lXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBpbnRpbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9pbnRpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgaW50aW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2ludGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5kZXBhcnREYXRldGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgdGhpcy5faW5kYXRlLFxyXG4gICAgICB0aGlzLl9pbnRpbWVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgZGF0ZSB5b3UgbmVlZCB0aGUgcGFya2luZyBmcm9tXHJcbiAgICovXHJcbiAgZ2V0IGFycml2YWxEYXRldGltZSgpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXM/LmFycml2YWxEYXRldGltZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBkYXRlIHlvdSBuZWVkIHRoZSBwYXJraW5nIGZyb21cclxuICAgKi9cclxuICBzZXQgYXJyaXZhbERhdGV0aW1lKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuYXJyaXZhbERhdGV0aW1lID0gdmFsdWUuaXNWYWxpZCA/IHZhbHVlIDogbnVsbDtcclxuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgdGhpcy5fb3V0ZGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZSh2YWx1ZSk7XHJcbiAgICAgIHRoaXMuX291dHRpbWUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0VGltZUNvbG9uKHZhbHVlKTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmRlcGFydERhdGV0aW1lICYmXHJcbiAgICAgICAgdGhpcy5kZXBhcnREYXRldGltZS5pc1NhbWVPckJlZm9yZSh0aGlzLmFycml2YWxEYXRldGltZSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29uc3QgZGF5QWZ0ZXJBcnJpdmFsRGF0ZVRpbWUgPSB0aGlzLmFycml2YWxEYXRldGltZS5jbG9uZSgpO1xyXG4gICAgICAgIHRoaXMuZGVwYXJ0RGF0ZXRpbWUgPSBkYXlBZnRlckFycml2YWxEYXRlVGltZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG91dEZsaWdodE51bWJlcigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcz8ub3V0RmxpZ2h0TnVtYmVyO1xyXG4gIH1cclxuXHJcbiAgc2V0IG91dEZsaWdodE51bWJlcih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMub3V0RmxpZ2h0TnVtYmVyID0gdmFsdWUgfHwgbnVsbDtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCByZWNvbW1lbmRlZCgpOiBib29sZWFuIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gISF0aGlzLnRlbXBQYXJhbXM/LnJlY29tbWVuZGVkO1xyXG4gIH1cclxuICBzZXQgcmVjb21tZW5kZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5yZWNvbW1lbmRlZCA9IHZhbHVlIHx8IG51bGw7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG4gIGdldCBvbkFpcnBvcnQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLnRlbXBQYXJhbXM/Lm9uQWlycG9ydDtcclxuICB9XHJcblxyXG4gIHNldCBvbkFpcnBvcnQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5vbkFpcnBvcnQgPSB2YWx1ZSB8fCBudWxsO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG1lZXRBbmRHcmVldCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhIXRoaXMudGVtcFBhcmFtcz8ubWVldEFuZEdyZWV0O1xyXG4gIH1cclxuXHJcbiAgc2V0IG1lZXRBbmRHcmVldCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm1lZXRBbmRHcmVldCA9IHZhbHVlIHx8IG51bGw7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgcGFya0FuZFJpZGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLnRlbXBQYXJhbXM/LnBhcmtBbmRSaWRlO1xyXG4gIH1cclxuXHJcbiAgc2V0IHBhcmtBbmRSaWRlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucGFya0FuZFJpZGUgPSB2YWx1ZSB8fCBudWxsO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHBhcmtBbmRTdHJvbGwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLnRlbXBQYXJhbXM/LnBhcmtBbmRTdHJvbGw7XHJcbiAgfVxyXG5cclxuICBzZXQgcGFya0FuZFN0cm9sbCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnBhcmtBbmRTdHJvbGwgPSB2YWx1ZSB8fCBudWxsO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNhclBhcmtlZEZvcllvdSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhIXRoaXMudGVtcFBhcmFtcz8uY2FyUGFya2VkRm9yWW91O1xyXG4gIH1cclxuXHJcbiAgc2V0IGNhclBhcmtlZEZvcllvdSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNhclBhcmtlZEZvcllvdSA9IHZhbHVlIHx8IG51bGw7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdGVybWluYWwoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudGVybWluYWxcclxuICAgICAgPyB0aGlzLnRlbXBQYXJhbXMudGVybWluYWwudG9TdHJpbmcoKVxyXG4gICAgICA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBzZXQgdGVybWluYWwoaW5wdXQ6IHN0cmluZykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnRlcm1pbmFsID0gaW5wdXQ7XHJcbiAgICBjb25zdCBmb3VuZDogVGVybWluYWxzVHlwZSA9IHRoaXMudGVybWluYWxzLnZhbHVlLmZpbmQoXHJcbiAgICAgICh0ZXJtaW5hbDogVGVybWluYWxzVHlwZSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIGlmICh0ZXJtaW5hbC52YWx1ZSA9PT0gaW5wdXQpIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoZm91bmQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRlcm1pbmFsID0gZm91bmQua2V5O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMudGVybWluYWxzLnZhbHVlICYmIHRoaXMudGVybWluYWxzLnZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVGVybWluYWwgPSB0aGlzLnRlcm1pbmFscy52YWx1ZVswXS5rZXk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRlcm1pbmFsID0gJ0FueSBUZXJtaW5hbCc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBsb2NhdGlvbkNvZGUoKTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5sb2NhdGlvbkNvZGU7XHJcbiAgfVxyXG5cclxuICBzZXQgbG9jYXRpb25Db2RlKHZhbHVlOiBzdHJpbmcgfCBPQlRBaXJwb3J0RGV0YWlscykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmxvY2F0aW9uQ29kZSA9IHZhbHVlO1xyXG5cclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRoaXMuX2xvY2F0aW9uQ29kZSA9IG51bGw7XHJcbiAgICAgIHRoaXMudGVybWluYWwgPSBudWxsO1xyXG4gICAgICB0aGlzLnRlcm1pbmFscy5uZXh0KFtdKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRlcm1pbmFsID0gbnVsbDtcclxuICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB2YWx1ZS5nYXRld2F5KSB7XHJcbiAgICAgIHRoaXMuX2xvY2F0aW9uQ29kZSA9IHZhbHVlLmdhdGV3YXk7XHJcbiAgICAgIHRoaXMudGVybWluYWwgPSBudWxsO1xyXG4gICAgICB0aGlzLnRlcm1pbmFscy5uZXh0KHZhbHVlLnRlcm1pbmFscyk7XHJcbiAgICAgIGlmICh2YWx1ZS50ZXJtaW5hbHMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRlcm1pbmFsID0gdmFsdWUudGVybWluYWxzWzBdLmtleTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9sb2NhdGlvbkNvZGUgPSBudWxsO1xyXG4gICAgICB0aGlzLnRlcm1pbmFsID0gbnVsbDtcclxuICAgICAgdGhpcy50ZXJtaW5hbHMubmV4dChbXSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUZXJtaW5hbCA9IG51bGw7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NlbGVjdGVkVGVybWluYWw6IHN0cmluZyA9ICcnO1xyXG4gIHNldCBzZWxlY3RlZFRlcm1pbmFsKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3NlbGVjdGVkVGVybWluYWwgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBzZWxlY3RlZFRlcm1pbmFsKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRUZXJtaW5hbDtcclxuICB9XHJcblxyXG4gIC8vIHB1YmxpYyB2YXJpYWJsZXNcclxuICBwdWJsaWMgbWluX2RhdGUgPSB7XHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsIC8vIG5nYkRhdGUgbW9udGhzIGFyZSBub3QgMCBpbmRleGVkXHJcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBtaW5fcmV0dXJuX2RhdGUgPSB7XHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsIC8vIG5nYkRhdGUgbW9udGhzIGFyZSBub3QgMCBpbmRleGVkXHJcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKSArIDEgLy8gbWluIDEgbmlnaHQgc3RheVxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgdHJhdmVsbGVyczogVHJhdmVsbGVyW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBwYXJraW5nZmV0Y2hlcjogQmFzZVBhcmtpbmdRdW90ZUZldGNoZXI8UT4sXHJcbiAgICBoZWxwZXJzOiBCYXNlSGVscGVyUm91dGluZXMsXHJcbiAgICBwcml2YXRlIGJhc2tldFNlcnZpY2U6IEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gICAgc3RvcmFnZVNlcnZpY2U6IEJhc2VTdG9yYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgc2VhcmNoU2VydmljZTogRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2VcclxuICApIHtcclxuICAgIHN1cGVyKHN0b3JhZ2VTZXJ2aWNlLCBoZWxwZXJzKTtcclxuXHJcbiAgICBjb25zdCBkYXRhOiB7XHJcbiAgICAgIHRlbXBQYXJhbXM6IFBhcmtpbmdUZW1wUGFyYW1zO1xyXG4gICAgfSA9IHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtKFxyXG4gICAgICBQYXJraW5nRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TXHJcbiAgICApIHx8IHtcclxuICAgICAgdGVtcFBhcmFtczoge30gYXMgUGFya2luZ1RlbXBQYXJhbXNcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHNlYXJjaFNlcnZpY2UubWFrZVBhcmtpbmdRdWVyeShkYXRhLnRlbXBQYXJhbXMpKTtcclxuXHJcbiAgICBjb25zdCByZXN1bHRzID1cclxuICAgICAgc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW1Bc0xpc3Q8UGFya2luZ1F1b3RlUmVzdWx0QXJyYXk+KFxyXG4gICAgICAgIHRoaXMucmVzdWx0c1Nlc3Npb25OYW1lXHJcbiAgICAgICkgfHwgW107XHJcblxyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQocmVzdWx0cyk7XHJcbiAgICB0aGlzLl9jaGVhcGVzdFJlc3VsdFByaWNlID0gdGhpcy51cGRhdGVMb3dlc3RQcmljZShyZXN1bHRzKTtcclxuICAgIGlmIChzZWFyY2hTZXJ2aWNlLnNob3VsZEFkZFRyYXZlbGxlclN1YnNjcmlwdGlvbigpKSB7XHJcbiAgICAgIHNlYXJjaFNlcnZpY2UudHJhdmVsbGVySW5mb3JtYXRpb24uc3Vic2NyaWJlKFxyXG4gICAgICAgICh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsZXJzID0gdHJhdmVsbGVycz8uc2xpY2UoMCwgMSkgfHwgW107XHJcbiAgICAgICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHJlc3VsdHNTZXNzaW9uTmFtZSA9XHJcbiAgICBQYXJraW5nRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuICBwcm90ZWN0ZWQgbXVsdGlSZXN1bHRzU2Vzc2lvbk5hbWUgPVxyXG4gICAgUGFya2luZ0VudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XHJcblxyXG4gIHByaXZhdGUgX291dGRhdGU6IE5nYkRhdGVTdHJ1Y3QgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIF9vdXR0aW1lOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIF9pbmRhdGU6IE5nYkRhdGVTdHJ1Y3QgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIF9pbnRpbWU6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gIHByb3RlY3RlZCByZXNldFF1ZXJ5KCk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHRoaXMuc2VhcmNoU2VydmljZS5tYWtlUGFya2luZ1F1ZXJ5KCkpO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNWYWxpZCgpIHtcclxuICAgIGlmICghdGhpcy5kb0NoZWNrcykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBQYXJraW5nRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TLFxyXG4gICAgICB7XHJcbiAgICAgICAgbG9jYXRpb246IHRoaXMuX2xvY2F0aW9uQ29kZSxcclxuICAgICAgICB0cmF2ZWxsZXJzOiB0aGlzLnRyYXZlbGxlcnMsXHJcbiAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMgPSBbXTtcclxuICAgIGlmICghdGhpcy5fbG9jYXRpb25Db2RlIHx8IHRoaXMuX2xvY2F0aW9uQ29kZSA9PT0gJycpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChkZWZhdWx0VmFsaWRhdGlvbnMuQWlycG9ydEZpcnN0KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiAoIXRoaXMucXVlcnk/LnRlcm1pbmFsKSB7XHJcbiAgICAvLyAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1Rlcm1pbmFsIGNhbiBub3QgYmUgZW1wdHkuJyk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgaWYgKHRoaXMudGVtcFBhcmFtcz8uYXJyaXZhbERhdGV0aW1lLnVuaXgoKSA8IG1vbWVudCgpLnVuaXgoKSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKGRlZmF1bHRWYWxpZGF0aW9ucy5JbnZhcmRKb3VybmV5KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zPy5kZXBhcnREYXRldGltZS51bml4KCkgPCBtb21lbnQoKS51bml4KCkpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChkZWZhdWx0VmFsaWRhdGlvbnMuT3V0d2FyZEpvdXJuZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy50ZW1wUGFyYW1zLmRlcGFydERhdGV0aW1lPy5pc0JlZm9yZSh0aGlzLnRlbXBQYXJhbXMuYXJyaXZhbERhdGV0aW1lKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goZGVmYXVsdFZhbGlkYXRpb25zLkRhdGVPdmVybGFwcGVkKTtcclxuICAgIH1cclxuICAgIHRoaXMuaXNWYWxpZC5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMCk7XHJcbiAgICB0aGlzLm1lc3NhZ2VzLm5leHQodGhpcy52YWxpZGF0aW9uTWVzc2FnZXMpO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRTZWFyY2goKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChbXSk7XHJcbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XHJcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZVJlY2VudFNlYXJjaCh0aGlzLmdldFJlY2VudFNlYXJjaFF1ZXJ5KHF1ZXJ5KSk7XHJcbiAgICAgIHJldHVybiB0aGlzLl9zdGFydFNlYXJjaChcclxuICAgICAgICB0aGlzLnBhcmtpbmdmZXRjaGVyLmZldGNoTGlzdChcclxuICAgICAgICAgIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxTZWFyY2hQYXJraW5nUXVlcnlWYXJpYWJsZXM+KHF1ZXJ5KVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UmVjZW50U2VhcmNoUXVlcnkoXHJcbiAgICBxdWVyeTogU2VhcmNoUGFya2luZ1F1ZXJ5VmFyaWFibGVzXHJcbiAgKTogU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5QYXJraW5nLFxyXG4gICAgICBzZWFyY2hBcmdzOiBxdWVyeSxcclxuICAgICAgdHJhdmVsRGF0ZTogdGhpcy5hcnJpdmFsRGF0ZXRpbWUuZm9ybWF0KCksXHJcbiAgICAgIHRyYXZlbGxlcnM6IHRoaXMuaGVscGVycy5nZXRUcmF2ZWxsZXJzSWQodGhpcy50cmF2ZWxsZXJzKVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGFydFJlY2VudFNlYXJjaChyZWNlbnRTZWFyY2g6IFJlY2VudFNlYXJjaCk6IHZvaWQge1xyXG4gICAgdGhpcy5hcnJpdmFsRGF0ZXRpbWUgPSBtb21lbnQocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuYXJyaXZhbERhdGV0aW1lKTtcclxuICAgIHRoaXMuZGVwYXJ0RGF0ZXRpbWUgPSBtb21lbnQocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwYXJ0RGF0ZXRpbWUpO1xyXG4gICAgdGhpcy5vdXRGbGlnaHROdW1iZXIgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRGbGlnaHROdW1iZXI7XHJcbiAgICB0aGlzLnRlcm1pbmFsID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MudGVybWluYWw7XHJcblxyXG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlXHJcbiAgICAgIC5nZXRBaXJwb3J0QnlDb2RlKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmxvY2F0aW9uQ29kZSlcclxuICAgICAgLnN1YnNjcmliZSgoYWlycG9ydDogQWlycG9ydFJlc3VsdHMpID0+IHtcclxuICAgICAgICBpZiAoYWlycG9ydCkge1xyXG4gICAgICAgICAgdGhpcy5sb2NhdGlvbkNvZGUgPSB7XHJcbiAgICAgICAgICAgIGNvdW50cnk6IGFpcnBvcnQuaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnksXHJcbiAgICAgICAgICAgIGNvdW50cnlDb2RlOiBhaXJwb3J0LmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5Q29kZSxcclxuICAgICAgICAgICAgZGVzdGluYXRpb246IGFpcnBvcnQuaWF0YU1hdGNoLm5hbWUsXHJcbiAgICAgICAgICAgIGdhdGV3YXk6IGFpcnBvcnQuaWF0YU1hdGNoLmlhdGEsXHJcbiAgICAgICAgICAgIHBvc3Rjb2RlOiBhaXJwb3J0LmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5wb3N0Y29kZSxcclxuICAgICAgICAgICAgdGVybWluYWxzOiB0aGlzLnNlYXJjaFNlcnZpY2UucHJvY2Vzc1Rlcm1pbmFscyhcclxuICAgICAgICAgICAgICBhaXJwb3J0LmlhdGFNYXRjaC50ZXJtaW5hbHNcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VhcmNoUXVlcnkoKTogU2VhcmNoUGFya2luZ1F1ZXJ5VmFyaWFibGVzIHtcclxuICAgIGNvbnN0IHF1ZXJ5OiBTZWFyY2hQYXJraW5nUXVlcnlWYXJpYWJsZXMgPSB7XHJcbiAgICAgIGFycml2YWxEYXRldGltZTogdGhpcy50ZW1wUGFyYW1zLmFycml2YWxEYXRldGltZSxcclxuICAgICAgZGVwYXJ0RGF0ZXRpbWU6IHRoaXMudGVtcFBhcmFtcy5kZXBhcnREYXRldGltZSxcclxuICAgICAgbG9jYXRpb25Db2RlOiB0aGlzLl9sb2NhdGlvbkNvZGUsXHJcbiAgICAgIG91dEZsaWdodE51bWJlcjogdGhpcy50ZW1wUGFyYW1zLm91dEZsaWdodE51bWJlcixcclxuICAgICAgcmVjb21tZW5kZWQ6IHRoaXMudGVtcFBhcmFtcy5yZWNvbW1lbmRlZCxcclxuICAgICAgb25BaXJwb3J0OiB0aGlzLnRlbXBQYXJhbXMub25BaXJwb3J0LFxyXG4gICAgICBtZWV0QW5kR3JlZXQ6IHRoaXMudGVtcFBhcmFtcy5tZWV0QW5kR3JlZXQsXHJcbiAgICAgIHBhcmtBbmRSaWRlOiB0aGlzLnRlbXBQYXJhbXMucGFya0FuZFJpZGUsXHJcbiAgICAgIHBhcmtBbmRTdHJvbGw6IHRoaXMudGVtcFBhcmFtcy5wYXJrQW5kU3Ryb2xsLFxyXG4gICAgICBjYXJQYXJrZWRGb3JZb3U6IHRoaXMudGVtcFBhcmFtcy5jYXJQYXJrZWRGb3JZb3UsXHJcbiAgICAgIHRlcm1pbmFsOlxyXG4gICAgICAgIHRoaXMudGVtcFBhcmFtcy50ZXJtaW5hbCA9PT0gJ0FueScgPyBudWxsIDogdGhpcy50ZW1wUGFyYW1zLnRlcm1pbmFsXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxTZWFyY2hQYXJraW5nUXVlcnlWYXJpYWJsZXM+KHF1ZXJ5KTtcclxuICB9XHJcblxyXG4gIHNvcnRCeVByaWNlKGFzYz86IGJvb2xlYW4pIHtcclxuICAgIGxldCByZXN1bHRzID0gdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMucmVzdWx0cy52YWx1ZSkgfHwgW107XHJcbiAgICBpZiAoYXNjKSB7XHJcbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLnNvcnQoXHJcbiAgICAgICAgKGE6IFBhcmtpbmdRdW90ZSwgYjogUGFya2luZ1F1b3RlKSA9PiBiLnByaWNlIC0gYS5wcmljZVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc29ydChcclxuICAgICAgICAoYTogUGFya2luZ1F1b3RlLCBiOiBQYXJraW5nUXVvdGUpID0+IGEucHJpY2UgLSBiLnByaWNlXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChyZXN1bHRzKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUZyb21QcmV2aW91c1NlYXJjaGVzKFxyXG4gICAgcHJldmlvdXNJdGVtczogUmVjb3JkPFNlcnZpY2VUeXBlLCBCYXNrZXRJdGVtPlxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coJ1BSRVBPUFVMQVRJTkcgUEFSS0lORyBGT1JNJyk7XHJcbiAgICBjb25zdCBmbGlnaHRJdGVtOiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyA9XHJcbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuRmxpZ2h0XT8uc2VhcmNoUXVlcnk7XHJcbiAgICBpZiAoZmxpZ2h0SXRlbSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGxldCBzdGFydERhdGUgPVxyXG4gICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF0ub3V0Qm91bmREYXRlLnRvRGF0ZSgpO1xyXG4gICAgICAgIGxldCBlbmREYXRlID1cclxuICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5GbGlnaHRdLmluYm91bmREYXRlLnRvRGF0ZSgpO1xyXG4gICAgICAgIHRoaXMub3V0ZGF0ZSA9IHtcclxuICAgICAgICAgIGRheTogc3RhcnREYXRlLmdldFVUQ0RhdGUoKSxcclxuICAgICAgICAgIG1vbnRoOiBzdGFydERhdGUuZ2V0VVRDTW9udGgoKSArIDEsXHJcbiAgICAgICAgICB5ZWFyOiBzdGFydERhdGUuZ2V0VVRDRnVsbFllYXIoKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5pbmRhdGUgPSB7XHJcbiAgICAgICAgICBkYXk6IGVuZERhdGUuZ2V0VVRDRGF0ZSgpLFxyXG4gICAgICAgICAgbW9udGg6IGVuZERhdGUuZ2V0VVRDTW9udGgoKSArIDEsXHJcbiAgICAgICAgICB5ZWFyOiBlbmREYXRlLmdldFVUQ0Z1bGxZZWFyKClcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMubG9jYXRpb25Db2RlID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF1cclxuICAgICAgICAgIC5hcnJpdmVMb2NhdGlvbiBhcyBPQlRBaXJwb3J0RGV0YWlscztcclxuICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIHBhcmtpbmcgZnJvbSBmbGlnaHQgaXRlbScpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGRQYXJraW5nVG9CYXNrZXQoXHJcbiAgICBwYXJraW5nUXVvdGU6IFBhcmtpbmdRdW90ZSxcclxuICAgIHBhcmtpbmdRdWVyeTogU2VhcmNoUGFya2luZ1F1ZXJ5VmFyaWFibGVzXHJcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID1cclxuICAgICAgYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcclxuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcclxuICAgIGNvbnN0IHRlcm1zQW5kQ29uZGl0aW9ucyA9IHRoaXMuZ2V0VGVybXNBbmRDb25kKHBhcmtpbmdRdW90ZSk7XHJcbiAgICBpZiAoYmFza2V0KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgYWR1bHRzOiAxLFxyXG4gICAgICAgICAgYmFza2V0OiBiYXNrZXQuaWQsXHJcbiAgICAgICAgICBzZXJ2aWNlOiBwYXJraW5nUXVvdGUuc291cmNlSWQudG9TdHJpbmcoKSxcclxuICAgICAgICAgIGRldGFpbDoge1xyXG4gICAgICAgICAgICBhcnJpdmFsRGF0ZXRpbWU6IHBhcmtpbmdRdWVyeS5hcnJpdmFsRGF0ZXRpbWUuZm9ybWF0KCksXHJcbiAgICAgICAgICAgIGRlcGFydERhdGV0aW1lOiBwYXJraW5nUXVlcnkuZGVwYXJ0RGF0ZXRpbWUuZm9ybWF0KCksXHJcbiAgICAgICAgICAgIGxvY2F0aW9uQ29kZTogcGFya2luZ1F1b3RlLmNhclBhcmsuY29kZSxcclxuICAgICAgICAgICAgbmFtZTogcGFya2luZ1F1b3RlLmNhclBhcmsubmFtZSxcclxuICAgICAgICAgICAgcmVxdWlyZWRJbmZvOiBwYXJraW5nUXVvdGUucmVxdWlyZWRJbmZvLFxyXG4gICAgICAgICAgICBhaXJwb3J0SWF0YTogcGFya2luZ1F1ZXJ5LmxvY2F0aW9uQ29kZSxcclxuICAgICAgICAgICAgdGVybXNBbmRDb25kOiB0ZXJtc0FuZENvbmRpdGlvbnNcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBwcmljZTogcGFya2luZ1F1b3RlLnByaWNlLFxyXG4gICAgICAgICAgY3VycmVuY3k6IHBhcmtpbmdRdW90ZS5jdXJyZW5jeSxcclxuICAgICAgICAgIHNlYXJjaFF1ZXJ5OiBwYXJraW5nUXVlcnksXHJcbiAgICAgICAgICBvdXRib3VuZERhdGU6IHBhcmtpbmdRdWVyeS5hcnJpdmFsRGF0ZXRpbWUuZm9ybWF0KCksXHJcbiAgICAgICAgICBpbmJvdW5kRGF0ZTogcGFya2luZ1F1ZXJ5LmRlcGFydERhdGV0aW1lLmZvcm1hdCgpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBpbnRCYXNrZXQsXHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMudHJhdmVsbGVycyxcclxuICAgICAgICBwYXJraW5nUXVvdGUucmVxdWlyZXNSZWFzb25cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGVybXNBbmRDb25kKHBhcmtpbmdRdW90ZTogUGFya2luZ1F1b3RlKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ05hbWUnLFxyXG4gICAgICAgIHZhbHVlOiBwYXJraW5nUXVvdGUuY2FyUGFyay5uYW1lXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVGVsZXBob25lJyxcclxuICAgICAgICB2YWx1ZTogcGFya2luZ1F1b3RlLmNhclBhcmsudGVsZXBob25lXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnSW1wb3J0YW50IEluZm9ybWF0aW9uJyxcclxuICAgICAgICB2YWx1ZTogcGFya2luZ1F1b3RlLmNhclBhcmsubWlzYy5pbXBvcnRhbnRJbmZvcm1hdGlvblxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0dlby1Qb3NpdGlvbicsXHJcbiAgICAgICAgdmFsdWU6IGBMYXRpdHVkZSAke3BhcmtpbmdRdW90ZS5jYXJQYXJrLmxhdGl0dWRlfTsgTG9uZ2l0dWRlICR7cGFya2luZ1F1b3RlLmNhclBhcmsubGF0aXR1ZGV9YFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0ludHJvZHVjdGlvbicsXHJcbiAgICAgICAgdmFsdWU6IHBhcmtpbmdRdW90ZS5jYXJQYXJrLmludHJvZHVjdGlvblxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0Fycml2YWwgUHJvY2VkdXJlcycsXHJcbiAgICAgICAgdmFsdWU6IHBhcmtpbmdRdW90ZS5jYXJQYXJrLmFycml2YWxQcm9jZWR1cmVcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdEZXBhcnR1cmUgUHJvY2VkdXJlJyxcclxuICAgICAgICB2YWx1ZTogcGFya2luZ1F1b3RlLmNhclBhcmsuZGVwYXJ0dXJlUHJvY2VkdXJlXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnSW5mb3JtYXRpb24nLFxyXG4gICAgICAgIHZhbHVlOiBwYXJraW5nUXVvdGUuY2FyUGFyay5pbmZvcm1hdGlvblxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ01heGltdW0gQ2FyIFNpemUnLFxyXG4gICAgICAgIHZhbHVlOiBwYXJraW5nUXVvdGUuY2FyUGFyay5tYXhpbXVtQ2FyU2l6ZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0RpcmVjdGlvbnMnLFxyXG4gICAgICAgIHZhbHVlOiBwYXJraW5nUXVvdGUuY2FyUGFyay5kaXJlY3Rpb25zXHJcbiAgICAgIH1cclxuICAgIF07XHJcbiAgfVxyXG5cclxuICB1cGRhdGVMb3dlc3RQcmljZShyZXN1bHRzOiBQYXJraW5nUXVvdGVbXSk6IElDaGVhcGVzdFByaWNlIHtcclxuICAgIGlmICghcmVzdWx0cy5sZW5ndGgpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgY3VycmVuY3kgPSByZXN1bHRzWzBdLmN1cnJlbmN5O1xyXG4gICAgcmV0dXJuIHJlc3VsdHMucmVkdWNlKFxyXG4gICAgICAoY2hlYXBlc3RQcmljZTogSUNoZWFwZXN0UHJpY2UsIHJlc3VsdDogUGFya2luZ1F1b3RlKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcHJpY2UgPSByZXN1bHQucHJpY2U7XHJcbiAgICAgICAgaWYgKGNoZWFwZXN0UHJpY2UuYW1vdW50ID4gcHJpY2UpIGNoZWFwZXN0UHJpY2UuYW1vdW50ID0gcHJpY2U7XHJcbiAgICAgICAgcmV0dXJuIGNoZWFwZXN0UHJpY2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgYW1vdW50OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgY3VycmVuY3lDb2RlOiBjdXJyZW5jeSB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVNlYXJjaCgpOiBPYnNlcnZhYmxlPFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHQ+IHtcclxuICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcclxuICAgICAgY29uc3Qgc2VhcmNoID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xyXG4gICAgICBjb25zdCBzZWFyY2hJbmZvID0ge1xyXG4gICAgICAgIG5hbWU6IGAke21vbWVudCgpfWAsXHJcbiAgICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLlBhcmtpbmcsXHJcbiAgICAgICAgc2VhcmNoQXJnczogc2VhcmNoXHJcbiAgICAgIH07XHJcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZUZhdm91cml0ZVNlYXJjaChzZWFyY2hJbmZvKTtcclxuICAgIH1cclxuICB9XHJcbiAgYXN5bmMgYXBwbHlGYXZvdXJpdGUoZmF2OiBhbnkpOiBQcm9taXNlPHZvaWQ+e1xyXG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEFpcnBvcnRzTGlzdChmYXYubG9jYXRpb25Db2RlKS5zdWJzY3JpYmUoYSA9PiB7XHJcbiAgICAgIHRoaXMubG9jYXRpb25Db2RlID0gKGEgYXMgYW55W10pLmZpbmQoYSA9PiBhLmdhdGV3YXkgPT0gZmF2LmxvY2F0aW9uQ29kZSlcclxuICAgICAgdGhpcy50ZXJtaW5hbCA9IGZhdi50ZXJtaW5hbFxyXG4gICAgfSlcclxuICAgIC8vIHRoaXMuYXJyaXZhbERhdGV0aW1lID0gbW9tZW50KChmYXYuYXJyaXZhbERhdGV0aW1lIGFzIHN0cmluZykuc3BsaXQoXCJUXCIpWzBdLCBcIllZWVktTU0tRERcIilcclxuICAgIC8vIHRoaXMuZGVwYXJ0RGF0ZXRpbWUgPSBtb21lbnQoKGZhdi5kZXBhcnREYXRldGltZSBhcyBzdHJpbmcpLnNwbGl0KFwiVFwiKVswXSwgXCJZWVlZLU1NLUREXCIpXHJcbiAgICAvLyB0aGlzLmxvY2F0aW9uQ29kZSA9IGZhdi5sb2NhdGlvbkNvZGVcclxuICB9XHJcbn1cclxuIl19