@sabstravtech/obtservices 0.0.22051001 → 0.0.26051001

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 (142) hide show
  1. package/angular/components/basket-panel.d.ts +1 -0
  2. package/angular/fetchers.d.ts +3 -0
  3. package/angular/lib/vendor/fetchers/get-companies.fetcher.d.ts +7 -0
  4. package/angular/lib/vendor/fetchers/get-company.fetcher.d.ts +7 -0
  5. package/angular/lib/vendor/fetchers/get-user-guests.fetcher.d.ts +7 -0
  6. package/angular/lib/vendor/services/enterprise-basket.service.d.ts +2 -1
  7. package/angular/lib/vendor/services/logon.service.d.ts +2 -1
  8. package/angular/lib/vendor/services/user.service.d.ts +7 -3
  9. package/angular/lib/vendor/types/graphql.angular.types.d.ts +268 -85
  10. package/angular/lib/vendor/updaters/create-guest-updater.d.ts +6 -0
  11. package/angular/sabstravtech-obtservices-angular.metadata.json +1 -1
  12. package/angular/updaters.d.ts +1 -0
  13. package/base/fetchers.d.ts +3 -0
  14. package/base/lib/vendor/classes/base-enterprise.d.ts +5 -1
  15. package/base/lib/vendor/classes/basket-info-mi-details.impl.d.ts +2 -0
  16. package/base/lib/vendor/classes/bookable-basket.d.ts +2 -0
  17. package/base/lib/vendor/classes/cabhire-enterprise-search.d.ts +4 -3
  18. package/base/lib/vendor/classes/carhire-enterprise-search.d.ts +4 -3
  19. package/base/lib/vendor/classes/eurostar-enterprise-search.d.ts +4 -4
  20. package/base/lib/vendor/classes/fast-track-enterprise-search.d.ts +3 -3
  21. package/base/lib/vendor/classes/flight-enterprise-search.d.ts +5 -5
  22. package/base/lib/vendor/classes/helpers.d.ts +6 -1
  23. package/base/lib/vendor/classes/hotel-enterprise-search.d.ts +6 -3
  24. package/base/lib/vendor/classes/irl-enterprise-search.d.ts +4 -4
  25. package/base/lib/vendor/classes/lounges-enterprise-search.d.ts +3 -3
  26. package/base/lib/vendor/classes/management-info-and-valid.d.ts +1 -1
  27. package/base/lib/vendor/classes/modal-types.enum.d.ts +1 -0
  28. package/base/lib/vendor/classes/parking-enterprise-search.d.ts +3 -3
  29. package/base/lib/vendor/classes/rail-enterprise-search.d.ts +9 -7
  30. package/base/lib/vendor/classes/supplementary-booking-info-impl.d.ts +5 -3
  31. package/base/lib/vendor/fetchers/get-companies.fetcher.d.ts +21 -0
  32. package/base/lib/vendor/fetchers/get-company.fetcher.d.ts +20 -0
  33. package/base/lib/vendor/fetchers/get-user-guests.fetcher.d.ts +20 -0
  34. package/base/lib/vendor/interfaces/Icabhire-enterprise-search.d.ts +1 -0
  35. package/base/lib/vendor/interfaces/Icarhire-enterprise-search.d.ts +3 -2
  36. package/base/lib/vendor/interfaces/Ienterprise-basket.service.d.ts +6 -5
  37. package/base/lib/vendor/interfaces/Ieurostar-enterprise-search.d.ts +1 -0
  38. package/base/lib/vendor/interfaces/Ifast-track-enterprise-search.d.ts +7 -5
  39. package/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +2 -1
  40. package/base/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +5 -2
  41. package/base/lib/vendor/interfaces/Iirl-enterprise-search.d.ts +4 -3
  42. package/base/lib/vendor/interfaces/Ilounges-enterprise-search.d.ts +1 -0
  43. package/base/lib/vendor/interfaces/Iparking-enterprise-search.d.ts +1 -0
  44. package/base/lib/vendor/interfaces/Irail-enterprise-search.d.ts +5 -2
  45. package/base/lib/vendor/interfaces/Isearch.service.d.ts +4 -2
  46. package/base/lib/vendor/interfaces/Isupplementary-booking-info-impl.d.ts +3 -2
  47. package/base/lib/vendor/interfaces/Iuser.service.d.ts +1 -0
  48. package/base/lib/vendor/interfaces/car-hire-search-arg.interface.d.ts +2 -3
  49. package/base/lib/vendor/interfaces/summary-interface.d.ts +2 -0
  50. package/base/lib/vendor/interfaces/user.data.d.ts +1 -0
  51. package/base/lib/vendor/models/traveller.object.d.ts +1 -1
  52. package/base/lib/vendor/services/enterprise-basket.service.d.ts +18 -7
  53. package/base/lib/vendor/services/logon.service.d.ts +5 -1
  54. package/base/lib/vendor/services/search.service.d.ts +25 -22
  55. package/base/lib/vendor/services/url.service.d.ts +2 -0
  56. package/base/lib/vendor/services/user.service.d.ts +21 -5
  57. package/base/lib/vendor/services/webtoken.service.d.ts +4 -0
  58. package/base/lib/vendor/types/graphql.types.d.ts +245 -84
  59. package/base/lib/vendor/types/types.d.ts +16 -2
  60. package/base/lib/vendor/updaters/create-guest-updater.d.ts +19 -0
  61. package/base/sabstravtech-obtservices-base.d.ts +1 -1
  62. package/base/sabstravtech-obtservices-base.metadata.json +1 -1
  63. package/base/updaters.d.ts +1 -0
  64. package/bundles/sabstravtech-obtservices-angular.umd.js +366 -176
  65. package/bundles/sabstravtech-obtservices-angular.umd.js.map +1 -1
  66. package/bundles/sabstravtech-obtservices-angular.umd.min.js +1 -1
  67. package/bundles/sabstravtech-obtservices-angular.umd.min.js.map +1 -1
  68. package/bundles/sabstravtech-obtservices-base.umd.js +2019 -956
  69. package/bundles/sabstravtech-obtservices-base.umd.js.map +1 -1
  70. package/bundles/sabstravtech-obtservices-base.umd.min.js +2 -2
  71. package/bundles/sabstravtech-obtservices-base.umd.min.js.map +1 -1
  72. package/esm2015/angular/components/basket-panel.js +16 -7
  73. package/esm2015/angular/fetchers.js +4 -1
  74. package/esm2015/angular/lib/vendor/fetchers/get-companies.fetcher.js +25 -0
  75. package/esm2015/angular/lib/vendor/fetchers/get-company.fetcher.js +25 -0
  76. package/esm2015/angular/lib/vendor/fetchers/get-user-guests.fetcher.js +25 -0
  77. package/esm2015/angular/lib/vendor/services/enterprise-basket.service.js +8 -5
  78. package/esm2015/angular/lib/vendor/services/http-call.service.js +1 -1
  79. package/esm2015/angular/lib/vendor/services/logon.service.js +8 -5
  80. package/esm2015/angular/lib/vendor/services/search.service.js +1 -1
  81. package/esm2015/angular/lib/vendor/services/user.service.js +21 -9
  82. package/esm2015/angular/lib/vendor/services/webtoken.service.js +6 -2
  83. package/esm2015/angular/lib/vendor/types/graphql.angular.types.js +296 -70
  84. package/esm2015/angular/lib/vendor/updaters/create-guest-updater.js +22 -0
  85. package/esm2015/angular/updaters.js +2 -1
  86. package/esm2015/base/fetchers.js +4 -1
  87. package/esm2015/base/lib/vendor/classes/base-enterprise.js +8 -2
  88. package/esm2015/base/lib/vendor/classes/basket-info-mi-details.impl.js +14 -1
  89. package/esm2015/base/lib/vendor/classes/bookable-basket.js +27 -6
  90. package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +66 -11
  91. package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +108 -61
  92. package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +115 -33
  93. package/esm2015/base/lib/vendor/classes/fast-track-enterprise-search.js +31 -10
  94. package/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +196 -57
  95. package/esm2015/base/lib/vendor/classes/helpers.js +19 -3
  96. package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +145 -36
  97. package/esm2015/base/lib/vendor/classes/irl-enterprise-search.js +100 -30
  98. package/esm2015/base/lib/vendor/classes/lounges-enterprise-search.js +40 -8
  99. package/esm2015/base/lib/vendor/classes/management-info-and-valid.js +13 -9
  100. package/esm2015/base/lib/vendor/classes/modal-types.enum.js +2 -1
  101. package/esm2015/base/lib/vendor/classes/parking-enterprise-search.js +39 -7
  102. package/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +131 -20
  103. package/esm2015/base/lib/vendor/classes/supplementary-booking-info-impl.js +42 -4
  104. package/esm2015/base/lib/vendor/fetchers/get-companies.fetcher.js +11 -0
  105. package/esm2015/base/lib/vendor/fetchers/get-company.fetcher.js +11 -0
  106. package/esm2015/base/lib/vendor/fetchers/get-user-guests.fetcher.js +11 -0
  107. package/esm2015/base/lib/vendor/interfaces/Icabhire-enterprise-search.js +1 -1
  108. package/esm2015/base/lib/vendor/interfaces/Icarhire-enterprise-search.js +1 -1
  109. package/esm2015/base/lib/vendor/interfaces/Ienterprise-basket.service.js +1 -1
  110. package/esm2015/base/lib/vendor/interfaces/Ieurostar-enterprise-search.js +1 -1
  111. package/esm2015/base/lib/vendor/interfaces/Ifast-track-enterprise-search.js +1 -1
  112. package/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +1 -1
  113. package/esm2015/base/lib/vendor/interfaces/Ihotel-enterprise-search.js +2 -1
  114. package/esm2015/base/lib/vendor/interfaces/Iirl-enterprise-search.js +1 -1
  115. package/esm2015/base/lib/vendor/interfaces/Ilounges-enterprise-search.js +1 -1
  116. package/esm2015/base/lib/vendor/interfaces/Iparking-enterprise-search.js +1 -1
  117. package/esm2015/base/lib/vendor/interfaces/Irail-enterprise-search.js +1 -1
  118. package/esm2015/base/lib/vendor/interfaces/Isearch.service.js +1 -1
  119. package/esm2015/base/lib/vendor/interfaces/Isupplementary-booking-info-impl.js +1 -1
  120. package/esm2015/base/lib/vendor/interfaces/Iuser.service.js +1 -1
  121. package/esm2015/base/lib/vendor/interfaces/car-hire-search-arg.interface.js +1 -1
  122. package/esm2015/base/lib/vendor/interfaces/summary-interface.js +1 -1
  123. package/esm2015/base/lib/vendor/interfaces/user.data.js +1 -1
  124. package/esm2015/base/lib/vendor/models/traveller.object.js +1 -1
  125. package/esm2015/base/lib/vendor/services/enterprise-basket.service.js +93 -30
  126. package/esm2015/base/lib/vendor/services/http-call.service.js +1 -1
  127. package/esm2015/base/lib/vendor/services/logon.service.js +37 -3
  128. package/esm2015/base/lib/vendor/services/requires-reason.service.js +14 -10
  129. package/esm2015/base/lib/vendor/services/search.service.js +77 -102
  130. package/esm2015/base/lib/vendor/services/url.service.js +3 -1
  131. package/esm2015/base/lib/vendor/services/user.service.js +45 -11
  132. package/esm2015/base/lib/vendor/services/webtoken.service.js +8 -1
  133. package/esm2015/base/lib/vendor/types/graphql.types.js +7 -2
  134. package/esm2015/base/lib/vendor/types/types.js +31 -14
  135. package/esm2015/base/lib/vendor/updaters/create-guest-updater.js +11 -0
  136. package/esm2015/base/sabstravtech-obtservices-base.js +1 -1
  137. package/esm2015/base/updaters.js +2 -1
  138. package/fesm2015/sabstravtech-obtservices-angular.js +449 -141
  139. package/fesm2015/sabstravtech-obtservices-angular.js.map +1 -1
  140. package/fesm2015/sabstravtech-obtservices-base.js +1383 -410
  141. package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
  142. package/package.json +1 -1
@@ -15,7 +15,11 @@ const COACH_MAX_INFANT_AGE_YEARS = 0;
15
15
  const LOUNGES_MAX_INFANT_AGE_YEARS = 0;
16
16
  const METRES_TO_MILES_CONVERSION = 1609;
17
17
  const TIME_BASE = 60;
18
+ const GROUP_TICKET_CODES = ['GS', 'AIG', 'GRP', 'GU3', 'GU4', 'GUC', 'MPG', '2TR', 'SGU'];
18
19
  export class BaseHelperRoutines {
20
+ isGroupTicket(code) {
21
+ return GROUP_TICKET_CODES.includes(code.toUpperCase().trim());
22
+ }
19
23
  minToHour(dur) {
20
24
  return `${Math.floor(dur / 60)}h ${dur % 60}m`;
21
25
  }
@@ -708,7 +712,14 @@ export class BaseHelperRoutines {
708
712
  return value ? this.toStrings(value, schema) : isRequired ? {} : null;
709
713
  case 'array':
710
714
  return value; // TODO write array translation
715
+ case 'date-time':
716
+ if (value.year) {
717
+ value = this.formatIsoDate(this.ngDateToMoment(value));
718
+ }
719
+ return value;
720
+ break;
711
721
  default:
722
+ console.warn(`+++ unknown schema type ${schema.type} | returning value as is +++`);
712
723
  return value;
713
724
  }
714
725
  }
@@ -763,19 +774,24 @@ export class BaseHelperRoutines {
763
774
  return miItem.isValid();
764
775
  }));
765
776
  }
766
- isMiValid(miPerItem, miPerUser) {
777
+ isMiValid(miPerItem, miPerUser, miPerGuest) {
767
778
  const userMis = Object.values(miPerUser || {});
779
+ const guestMis = Object.values(miPerGuest || {});
768
780
  return (this.miIsValid(miPerItem) &&
769
781
  (userMis.length === 0 ||
770
782
  !!userMis.find((userMis1) => {
771
783
  return this.miIsValid(userMis1.managementInfo);
784
+ })) &&
785
+ (guestMis.length === 0 ||
786
+ !!guestMis.find((userMis1) => {
787
+ return this.miIsValid(userMis1.managementInfo);
772
788
  })));
773
789
  }
774
790
  needsMi(basket, needsToViewMi) {
775
791
  return (basket.basketInfoMiDetails.length > 0 &&
776
792
  (needsToViewMi ||
777
793
  !basket.basketInfoMiDetails.find((miDetail) => {
778
- return this.isMiValid(miDetail.miPerItem, miDetail.miPerUser);
794
+ return this.isMiValid(miDetail.miPerItem, miDetail.miPerUser, miDetail.miPerGuest);
779
795
  })));
780
796
  }
781
797
  findService(services, id) {
@@ -1384,4 +1400,4 @@ __decorate([
1384
1400
  function isSet(obj) {
1385
1401
  return obj !== undefined && obj !== null;
1386
1402
  }
1387
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBVXZCLE9BQU8sRUFDTCxtQkFBbUIsRUFLbkIsbUJBQW1CLEVBSXBCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUtMLGdCQUFnQixFQUdoQixhQUFhLEVBRWIsV0FBVyxFQUVaLE1BQU0sd0JBQXdCLENBQUM7QUFFaEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBU2pELE1BQU0sMEJBQTBCLEdBQUcsRUFBRSxDQUFDO0FBQ3RDLE1BQU0sd0JBQXdCLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLE1BQU0sNEJBQTRCLEdBQUcsRUFBRSxDQUFDO0FBQ3hDLE1BQU0seUJBQXlCLEdBQUcsRUFBRSxDQUFDO0FBQ3JDLE1BQU0sMkJBQTJCLEdBQUcsRUFBRSxDQUFDO0FBQ3ZDLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLE1BQU0sNEJBQTRCLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUVyQixNQUFNLE9BQU8sa0JBQWtCO0lBWTdCLFNBQVMsQ0FBQyxHQUFXO1FBQ25CLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDakQsQ0FBQztJ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QU8sQ0FBQztBQUM1Qiw4QkFBVyxHQUFHLFVBQVUsQ0FBQztBQXkvQmhDO0lBREMsUUFBUSxFQUFFOzs7OzJEQUdWO0FBR0Q7SUFEQyxRQUFRLEVBQUU7Ozs7dURBTVY7QUFHRDtJQURDLFFBQVEsRUFBRTs7Ozt1REFnQ1Y7QUF3cEJILFNBQVMsS0FBSyxDQUFDLEdBQVE7SUFDckIsT0FBTyxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUM7QUFDM0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcclxuXHJcbmltcG9ydCB7IFRyYXZlbGxlciB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFza2V0RGV0YWlscyxcclxuICBCYXNrZXRJdGVtTWFuYWdlbWVudEluZm9cclxufSBmcm9tICcuLi9zZXJ2aWNlcy9lbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkIH0gZnJvbSAnLi9tYW5hZ2VtZW50LWluZm8tYW5kLXZhbGlkJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2VzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBGbGlnaHREaXJlY3Rpb25FbnVtLFxyXG4gIEZsaWdodEdyb3VwcyxcclxuICBNYWluRmxpZ2h0Q2FiaW5DbGFzcyxcclxuICBNaW5NYXgsXHJcbiAgTmdiRGF0ZVN0cnVjdCxcclxuICBPQlRGbGlnaHRDYWJpbkNsYXNzLFxyXG4gIE9CVFJhaWxKb3VybmV5RmFyZSxcclxuICBTY2hlbWEsXHJcbiAgVW5wYWNrZWRcclxufSBmcm9tICcuLi90eXBlcy90eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgQWlycG9ydCxcclxuICBCYWdnYWdlQWxsb3dhbmNlLFxyXG4gIEJhc2tldEl0ZW0sXHJcbiAgRmFyZUNvbmRpdGlvbnMsXHJcbiAgRmxpZ2h0Q2FiaW5DbGFzcyxcclxuICBGbGlnaHRJdGluZXJhcnksXHJcbiAgRmxpZ2h0Sm91cm5leSxcclxuICBQYXNzZW5nZXJUeXBlLFxyXG4gIFNlcnZpY2UsXHJcbiAgU2VydmljZVR5cGUsXHJcbiAgVXNlclBhc3NlbmdlclR5cGVJbnB1dFxyXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xyXG5pbXBvcnQgeyBTdXBwbGVtZW50YXJ5Qm9va2luZ0luZm9JbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lzdXBwbGVtZW50YXJ5LWJvb2tpbmctaW5mby1pbXBsJztcclxuaW1wb3J0IHsgTWVtb3Jpc2UgfSBmcm9tICcuL2xpbWl0ZWQtY2FjaGUuY2xhc3MnO1xyXG5pbXBvcnQge1xyXG4gIEZsaWdodEZpbHRlcnMsXHJcbiAgRmxpZ2h0RmlsdGVyc1JlY29yZEtleXNcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL2ZsaWdodC1maWx0ZXJzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFJ1bGVzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zdW1tYXJ5LWludGVyZmFjZSc7XHJcblxyXG5kZWNsYXJlIHZhciBoZXhfaG1hY19tZDU6IGFueTtcclxuXHJcbmNvbnN0IEZMSUdIVF9NQVhfQ0hJTERfQUdFX1lFQVJTID0gMTY7XHJcbmNvbnN0IFJBSUxfTUFYX0NISUxEX0FHRV9ZRUFSUyA9IDEyO1xyXG5jb25zdCBFVVJPU1RBUl9NQVhfQ0hJTERfQUdFX1lFQVJTID0gMTI7XHJcbmNvbnN0IENPQUNIX01BWF9DSElMRF9BR0VfWUVBUlMgPSAxNTtcclxuY29uc3QgTE9VTkdFU19NQVhfQ0hJTERfQUdFX1lFQVJTID0gMTI7XHJcbmNvbnN0IEZMSUdIVF9NQVhfSU5GQU5UX0FHRV9ZRUFSUyA9IDA7XHJcbmNvbnN0IFJBSUxfTUFYX0lORkFOVF9BR0VfWUVBUlMgPSAwO1xyXG5jb25zdCBDT0FDSF9NQVhfSU5GQU5UX0FHRV9ZRUFSUyA9IDA7XHJcbmNvbnN0IExPVU5HRVNfTUFYX0lORkFOVF9BR0VfWUVBUlMgPSAwO1xyXG5jb25zdCBNRVRSRVNfVE9fTUlMRVNfQ09OVkVSU0lPTiA9IDE2MDk7XHJcbmNvbnN0IFRJTUVfQkFTRSA9IDYwO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJhc2VIZWxwZXJSb3V0aW5lcyB7XHJcbiAgc3RhdGljIFJFQURfREFURV9GT1JNQVQgPSAnZGQsIEQgTU1NIFlZWVknO1xyXG4gIHN0YXRpYyBSRUFEX1RJTUVfRk9STUFUID0gJ0hIOm1tJztcclxuICBzdGF0aWMgREFURV9GT1JNQVQgPSAnWVlNTUREJztcclxuICBzdGF0aWMgR1JBUEhRTF9EQVRBX0ZPUk1BVF9USU1FID0gJ1lZWVktTU0tREQgSEg6bW06c3MnO1xyXG4gIHN0YXRpYyBJU09fREFUQV9GT1JNQVQgPSAnWVlZWS1NTS1ERCc7XHJcbiAgc3RhdGljIElTT19EQVRBX0ZPUk1BVF9USU1FID0gJ1lZWVktTU0tREQgSEg6bW0nO1xyXG4gIHN0YXRpYyBJU09fREFUQV9GT1JNQVRfTk9fSFlQSEFOUyA9ICdZWVlZTU1ERCc7XHJcbiAgc3RhdGljIFRJTUVfRk9STUFUID0gJ0hIbW0nO1xyXG4gIHN0YXRpYyBUSU1FX0ZPUk1BVF9DT0xPTiA9ICdISDptbSc7XHJcbiAgc3RhdGljIE1NRERZWV9EQVRFID0gJ0RETU1ZWVlZJztcclxuXHJcbiAgbWluVG9Ib3VyKGR1cjogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gYCR7TWF0aC5mbG9vcihkdXIgLyA2MCl9aCAke2R1ciAlIDYwfW1gO1xyXG4gIH1cclxuXHJcbiAgbWFrZUNvbG9uVGltZSh0aW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aW1lLnN1YnN0cmluZygwLCAyKSArICc6JyArIHRpbWUuc3Vic3RyaW5nKDIsIDQpO1xyXG4gIH1cclxuXHJcbiAgbm9uTnVsbE1pbihrZXk6IHN0cmluZywgLi4uYXJnczogYW55W10pIHtcclxuICAgIHJldHVybiBhcmdzLnJlZHVjZShcclxuICAgICAgKGN1cnJlbnQsIGl0ZW0pID0+IHtcclxuICAgICAgICBpZiAoaXRlbSAmJiBpdGVtW2tleV0pIHtcclxuICAgICAgICAgIGlmIChjdXJyZW50Lm1pbiA+IE51bWJlcihpdGVtW2tleV0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGl0ZW0sIG1pbjogTnVtYmVyKGl0ZW1ba2V5XSkgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgbWluOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgaXRlbTogbnVsbCB9XHJcbiAgICApLml0ZW07XHJcbiAgfVxyXG5cclxuICBqb2luQnlDb21tYSguLi5hdHRyaWJ1dGVzOiBhbnlbXSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYXR0cmlidXRlc1xyXG4gICAgICAucmVkdWNlKChhY2MsIGF0dHIpID0+IHtcclxuICAgICAgICBpZiAoXy5pc0VtcHR5KGF0dHIpKSB7XHJcbiAgICAgICAgICBhY2MgKz0gYXR0ciArICcsJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgfSwgJycpXHJcbiAgICAgIC5zbGljZSgwLCAtMSk7XHJcbiAgfVxyXG5cclxuICBtdXR1YWxseUluY2x1ZGUoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBhLmluY2x1ZGVzKGIpIHx8IGIuaW5jbHVkZXMoYSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignVHJ5aW5nIHRvIG11dHVhbGx5IGNvbXBhcmUgdW5kZWZpbmVkIHZhcmlhYmxlLicpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmaW5kQnlLZXkoYXJyYXk6IGFueVtdLCBrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IGFueSB7XHJcbiAgICByZXR1cm4gYXJyYXlcclxuICAgICAgLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBpdGVtW2tleV0gPT09IHZhbHVlO1xyXG4gICAgICB9KVxyXG4gICAgICAucG9wKCk7XHJcbiAgfVxyXG5cclxuICBkYXRlVG9OZ0RhdGUoZGF0ZTogRGF0ZSk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgeWVhcjogZGF0ZS5nZXRGdWxsWWVhcigpLFxyXG4gICAgICBtb250aDogZGF0ZS5nZXRNb250aCgpICsgMSxcclxuICAgICAgZGF5OiBkYXRlLmdldERhdGUoKVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGNvbnZlcnRUb1lZTU1ERChkYXRlOiBzdHJpbmcpIHtcclxuICAgIGlmIChkYXRlLmxlbmd0aCA+IDYpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0RGF0ZSh0aGlzLnl5eXltbWRkVGltZVRvTW9tZW50KGRhdGUpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRlO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0RGF0ZVRvTU1ERFlZWShkYXRlOiBEYXRlKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBtb21lbnQoZGF0ZSkuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XHJcbiAgfVxyXG5cclxuICBmb3JtYXREYXRlKGRhdGU6IG1vbWVudC5Nb21lbnQpOiBzdHJpbmcge1xyXG4gICAgZGF0ZSA9IG1vbWVudChkYXRlKTtcclxuICAgIHJldHVybiBkYXRlLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuREFURV9GT1JNQVQpO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0VGltZShkYXRlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBkYXRlLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuVElNRV9GT1JNQVQpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9ybWF0VGltZUNvbG9uKGRhdGU6IG1vbWVudC5Nb21lbnQpOiBzdHJpbmcge1xyXG4gICAgZGF0ZSA9IG1vbWVudChkYXRlKTtcclxuICAgIHJldHVybiBkYXRlLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuVElNRV9GT1JNQVRfQ09MT04pO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0SXNvRGF0ZShkYXRlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcclxuICAgIGRhdGUgPSBtb21lbnQoZGF0ZSk7XHJcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLklTT19EQVRBX0ZPUk1BVCk7XHJcbiAgfVxyXG5cclxuICBmb3JtYXRJc29EYXRlVGltZShkYXRlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcclxuICAgIGRhdGUgPSBtb21lbnQoZGF0ZSk7XHJcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLklTT19EQVRBX0ZPUk1BVF9USU1FKTtcclxuICB9XHJcblxyXG4gIGZvcm1hdEdyYXBoUUxEYXRlVGltZShkYXRlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcclxuICAgIGRhdGUgPSBtb21lbnQoZGF0ZSk7XHJcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLkdSQVBIUUxfREFUQV9GT1JNQVRfVElNRSk7XHJcbiAgfVxyXG5cclxuICBmb3JtYXRJc29EYXRlTm9IeXBoYW5zKGRhdGU6IG1vbWVudC5Nb21lbnQpOiBzdHJpbmcge1xyXG4gICAgZGF0ZSA9IG1vbWVudChkYXRlKTtcclxuICAgIHJldHVybiBkYXRlLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuSVNPX0RBVEFfRk9STUFUX05PX0hZUEhBTlMpO1xyXG4gIH1cclxuXHJcbiAgZ2VuZXJhdGVUaW1lc0xpc3QoZnJvbSA9IDAsIHRvID0gMjQsIHN0ZXAgPSAxNSk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IGRhdGVUaW1lQXJyYXk6IHN0cmluZ1tdID0gW107XHJcbiAgICBmb3IgKGxldCBob3VyID0gMDsgaG91ciA8IHRvIC0gZnJvbTsgaG91cisrKSB7XHJcbiAgICAgIGZvciAobGV0IG1pbnV0ZSA9IDA7IG1pbnV0ZSA8IDYwOyBtaW51dGUgKz0gc3RlcCkge1xyXG4gICAgICAgIGRhdGVUaW1lQXJyYXkucHVzaChtb21lbnQoeyBob3VyLCBtaW51dGUgfSkuZm9ybWF0KCdISDptbScpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGVUaW1lQXJyYXk7XHJcbiAgfVxyXG5cclxuICBtb21lbnRUb05nRGF0ZShkYXRlOiBtb21lbnQuTW9tZW50KTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICBkYXRlID0gbW9tZW50KGRhdGUpO1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0ZVRvTmdEYXRlKGRhdGUudG9EYXRlKCkpO1xyXG4gIH1cclxuXHJcbiAgbmdEYXRlVG9EYXRlKGRhdGU6IE5nYkRhdGVTdHJ1Y3QpOiBEYXRlIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLnllYXIsIGRhdGUubW9udGggLSAxLCBkYXRlLmRheSk7XHJcbiAgfVxyXG5cclxuICBuZ0RhdGVUb01vbWVudChkYXRlOiBOZ2JEYXRlU3RydWN0LCB0aW1lPzogc3RyaW5nKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICBjb25zdCBtb20gPSBtb21lbnQodGhpcy5uZ0RhdGVUb0RhdGUoZGF0ZSkpO1xyXG4gICAgaWYgKHRpbWUpIHtcclxuICAgICAgY29uc3QgdGltZXMgPSB0aW1lLnNwbGl0KCc6Jyk7XHJcbiAgICAgIGlmICh0aW1lcy5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICBtb20uc2V0KCdob3VycycsIE51bWJlcih0aW1lc1swXSkpLnNldCgnbWludXRlcycsIE51bWJlcih0aW1lc1sxXSkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG1vbVxyXG4gICAgICAgICAgLnNldCgnaG91cnMnLCBOdW1iZXIodGltZS5zdWJzdHIoMCwgMikpKVxyXG4gICAgICAgICAgLnNldCgnbWludXRlcycsIE51bWJlcih0aW1lLnN1YnN0cigyLCAyKSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbW9tO1xyXG4gIH1cclxuXHJcbiAgdG9kYXlUb05nYkRhdGVTdHJ1Y3QoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICBjb25zdCB0b2RheSA9IG1vbWVudCgpO1xyXG4gICAgcmV0dXJuIHsgeWVhcjogdG9kYXkueWVhcigpLCBtb250aDogdG9kYXkubW9udGgoKSArIDEsIGRheTogdG9kYXkuZGF0ZSgpIH07XHJcbiAgfVxyXG5cclxuICBvYmplY3RUb0FycmF5KG9iamVjdDogUmVjb3JkPHN0cmluZywgYW55Pik6IEFycmF5PGFueT4ge1xyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkubWFwKChpKSA9PiBvYmplY3RbaV0pO1xyXG4gIH1cclxuXHJcbiAgeXl5eW1tZGRUb0RhdGUodmFsdWU6IHN0cmluZyk6IERhdGUge1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKFxyXG4gICAgICBOdW1iZXIodmFsdWUuc3Vic3RyaW5nKDAsIDQpKSxcclxuICAgICAgTnVtYmVyKHZhbHVlLnN1YnN0cmluZyg0LCA2KSkgLSAxLFxyXG4gICAgICBOdW1iZXIodmFsdWUuc3Vic3RyaW5nKDYsIDgpKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHl5eXltbWRkVG9Nb21lbnQodmFsdWU6IHN0cmluZyk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIG1vbWVudCh0aGlzLnl5eXltbWRkVG9EYXRlKHZhbHVlKSk7XHJcbiAgfVxyXG5cclxuICB5eW1tZGRUb01vbWVudCh2YWx1ZTogc3RyaW5nKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gbW9tZW50KHZhbHVlLCAnWVlNTUREJyk7XHJcbiAgfVxyXG5cclxuICB5eW1tZGRUb05nYkRhdGUodmFsdWU6IHN0cmluZyk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMubW9tZW50VG9OZ0RhdGUodGhpcy55eW1tZGRUb01vbWVudCh2YWx1ZSkpO1xyXG4gIH1cclxuXHJcbiAgeXltbWRkX2hobW1Ub01vbWVudChkYXRlOiBzdHJpbmcsIHRpbWU6IHN0cmluZyk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIG1vbWVudChgJHtkYXRlfSAke3RpbWV9YCwgJ1lZTU1ERCBISG1tJyk7XHJcbiAgfVxyXG5cclxuICB5eXl5bW1kZF9oaG1tVG9Nb21lbnQoZGF0ZTogc3RyaW5nLCB0aW1lOiBzdHJpbmcpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiBtb21lbnQoYCR7ZGF0ZX0gJHt0aW1lfWAsICdZWVlZTU1ERCBISG1tJyk7XHJcbiAgfVxyXG5cclxuICB5eXl5bW1kZFRvTmdEYXRlKHZhbHVlOiBzdHJpbmcpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLmRhdGVUb05nRGF0ZSh0aGlzLnl5eXltbWRkVG9EYXRlKHZhbHVlKSk7XHJcbiAgfVxyXG5cclxuICB5eXl5bW1kZFRpbWVUb05nRGF0ZShkYXRlOiBzdHJpbmcsIHRpbWU6IHN0cmluZyk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgY29uc3QgZHQgPSB0aGlzLnl5eXltbWRkVG9Nb21lbnQoZGF0ZSlcclxuICAgICAgLmFkZChOdW1iZXIodGltZS5zdWJzdHJpbmcoMCwgMikpLCAnaG91cnMnKVxyXG4gICAgICAuYWRkKE51bWJlcih0aW1lLnN1YnN0cmluZygyLCA0KSksICdtaW51dGVzJyk7XHJcbiAgICByZXR1cm4gdGhpcy5tb21lbnRUb05nRGF0ZShkdCk7XHJcbiAgfVxyXG5cclxuICB5eXl5bW1kZFRpbWVUb01vbWVudChkYXRlOiBzdHJpbmcpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIGlmIChkYXRlLmxlbmd0aCA9PT0gNikge1xyXG4gICAgICByZXR1cm4gbW9tZW50KGAke2RhdGV9YCwgJ1lZTU1ERCcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1vbWVudChgJHtkYXRlfWAsICdZWVlZTU1ERCcpO1xyXG4gIH1cclxuXHJcbiAgaGhtbVRvVGltZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgJHt2YWx1ZS5zdWJzdHJpbmcoMCwgMil9OiR7dmFsdWUuc3Vic3RyaW5nKDIsIDQpfWA7XHJcbiAgfVxyXG5cclxuICBkYXRlU3RyaW5nVG95eXl5bW1kZChkOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmICh0eXBlb2YgZCAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBtID0gLyhcXGR7NH0pWy1cXC9dPyhcXGR7Mn0pWy1cXC9dPyhcXGR7Mn0pLy5leGVjKGQpO1xyXG4gICAgcmV0dXJuIG0gPyBgJHttWzFdfSR7bVsyXX0ke21bM119YCA6IG51bGw7XHJcbiAgfVxyXG5cclxuICB0aW1lU3RyaW5nVG9oaF9tbSh0OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmICh0eXBlb2YgdCAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBtID0gLyhcXGR7Mn0pWzotXT8oXFxkezJ9KS8uZXhlYyh0KTtcclxuICAgIHJldHVybiBtID8gYCR7bVsxXX06JHttWzJdfWAgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgc3RyaW5nVG9Cb29sKHM6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHMgJiYgcyAhPT0gJ2ZhbHNlJyAmJiBzICE9PSAnMCcgJiYgcyAhPT0gJ25vJyAmJiBzICE9PSAnbic7XHJcbiAgfVxyXG5cclxuICBjbG9uZTxUID0gYW55Pih0b0Nsb25lOiBUKTogVCB7XHJcbiAgICByZXR1cm4gXy5jbG9uZURlZXAodG9DbG9uZSkgYXMgVDtcclxuICB9XHJcblxyXG4gIHJlcGxhY2VLZXlzSW5UZXh0KFxyXG4gICAgdGV4dDogc3RyaW5nLFxyXG4gICAgcmVwbGFjZW1lbnRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XHJcbiAgKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBPYmplY3Qua2V5cyhyZXBsYWNlbWVudHMpLnJlZHVjZSgoY3VycmVudCwga2V5KSA9PiB7XHJcbiAgICAgIHJldHVybiBjdXJyZW50LnJlcGxhY2UoJyUnICsga2V5LCByZXBsYWNlbWVudHNba2V5XSk7XHJcbiAgICB9LCB0ZXh0KTtcclxuICB9XHJcblxyXG4gIGdldE5leHRNaW51ZXRzKGRhdGU6IG1vbWVudC5Nb21lbnQgPSBtb21lbnQoKSwgbWludXRlc1RvUm91bmQgPSAxNSkge1xyXG4gICAgZGF0ZS5taW51dGUoTWF0aC5jZWlsKGRhdGUubWludXRlKCkgLyBtaW51dGVzVG9Sb3VuZCkgKiBtaW51dGVzVG9Sb3VuZCk7XHJcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoJ0hIOm1tJyk7XHJcbiAgfVxyXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAqIEJlbG93IGFyZSBmdW5jdGlvbnMgbmVlZGVkIGZvciBnZW5lcmF0aW5nIHRoZSBoYXNoZWQgbnVtYmVyIG9uY2UgdG9rZW4sIHRha2VuIGFzIHJlcXVpcmVkXHQqXHJcbiAgICogRG9uJ3QgTWVzcyB3aXRoIHRoZXNlXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KlxyXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuICBnZXROdW1iZXJPbmNlVmFsdWUodG9rZW46IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCByYW5kb21fdmFsdWUgPSB0aGlzLmd1aWQoKTtcclxuICAgIHJldHVybiByYW5kb21fdmFsdWUgKyAnXycgKyBoZXhfaG1hY19tZDUodG9rZW4sIHJhbmRvbV92YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBndWlkKCk6IGFueSB7XHJcbiAgICBsZXQgcmFuZG9tX2hleCA9ICcnO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzI7IGkrKykge1xyXG4gICAgICByYW5kb21faGV4ICs9IHRoaXMuczQoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmFuZG9tX2hleDtcclxuICB9XHJcblxyXG4gIHM0KCk6IGFueSB7XHJcbiAgICByZXR1cm4gTWF0aC5mbG9vcigoMSArIE1hdGgucmFuZG9tKCkpICogMHgxMDAwMClcclxuICAgICAgLnRvU3RyaW5nKDE2KVxyXG4gICAgICAuc3Vic3RyaW5nKDEpO1xyXG4gIH1cclxuXHJcbiAgY2FwaXRhbGlzZUZpcnN0TGV0dGVyKHdvcmQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAod29yZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiB3b3JkWzBdLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmcm9tT2JqZWN0KC4uLmFyZ3M6IGFueVtdKTogYW55IHtcclxuICAgIGxldCBkYXRhID0gYXJncy5zaGlmdCgpO1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBkYXRhICYmIGluZGV4IDwgYXJncy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcclxuICAgICAgZGF0YSA9IGRhdGFbYXJnc1tpbmRleF1dO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfVxyXG5cclxuICBtb21lbnRSb3VuZE1pbnV0ZXModGltZTogbW9tZW50Lk1vbWVudCwgcm91bmQ6IG51bWJlcik6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgdGltZSA9IG1vbWVudCh0aW1lKS5zdGFydE9mKCdtaW51dGVzJyk7XHJcbiAgICBsZXQgZGlmZiA9IHRpbWUubWludXRlcygpICUgcm91bmQ7XHJcbiAgICBpZiAoZGlmZiAhPT0gMCkge1xyXG4gICAgICBkaWZmID0gcm91bmQgLSBkaWZmO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRpbWUuYWRkKGRpZmYsICdtaW51dGUnKTtcclxuICB9XHJcblxyXG4gIHJvdW5kKGRhdGU6IGFueSwgZHVyYXRpb246IGFueSkge1xyXG4gICAgcmV0dXJuIG1vbWVudChNYXRoLmNlaWwoK2RhdGUgLyArZHVyYXRpb24pICogK2R1cmF0aW9uKTtcclxuICB9XHJcblxyXG4gIGljc0ZvbGQoYm9keTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGxpbmVzID0gYm9keS5zcGxpdCgvXFxyXFxuL2cpO1xyXG4gICAgcmV0dXJuIGxpbmVzXHJcbiAgICAgIC5tYXAoKGxpbmUpID0+IHtcclxuICAgICAgICBsZXQgcmVzID0gJyc7XHJcbiAgICAgICAgY29uc3QgbiA9IDcyO1xyXG4gICAgICAgIGxpbmUgPSBsaW5lLnRyaW0oKTtcclxuICAgICAgICB3aGlsZSAobGluZS5sZW5ndGggPiBuKSB7XHJcbiAgICAgICAgICByZXMgKz0gYCR7bGluZS5zbGljZSgwLCBuKX1cXHJcXG5gO1xyXG4gICAgICAgICAgbGluZSA9IGAgJHtsaW5lLnNsaWNlKG4pLnRyaW0oKX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGluZS50cmltKCkpIHtcclxuICAgICAgICAgIHJlcyArPSBsaW5lO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICB9KVxyXG4gICAgICAuam9pbignXFxyXFxuJyk7XHJcbiAgfVxyXG5cclxuICBzcGxpdEFkZHJlc3NMaW5lKFxyXG4gICAgbGluZTogc3RyaW5nLFxyXG4gICAgbGVuOiBudW1iZXJcclxuICApOiB7IGxpbmU6IHN0cmluZzsgcmVzaWR1ZTogc3RyaW5nIH0ge1xyXG4gICAgY29uc3QgcmVzID0ge1xyXG4gICAgICBsaW5lOiBsaW5lLnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCksXHJcbiAgICAgIHJlc2lkdWU6ICcnXHJcbiAgICB9O1xyXG4gICAgaWYgKHJlcy5saW5lLmxlbmd0aCA+IGxlbikge1xyXG4gICAgICBsZXQgaSA9IHJlcy5saW5lLnNsaWNlKDAsIGxlbikubGFzdEluZGV4T2YoJywnKTtcclxuICAgICAgaWYgKGkgPiAwKSB7XHJcbiAgICAgICAgcmVzLnJlc2lkdWUgPSByZXMubGluZS5zbGljZShpICsgMSkudHJpbSgpO1xyXG4gICAgICAgIHJlcy5saW5lID0gcmVzLmxpbmUuc2xpY2UoMCwgaSkudHJpbSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGkgPSByZXMubGluZS5zbGljZSgwLCBsZW4pLmxhc3RJbmRleE9mKCcgJyk7XHJcbiAgICAgICAgaWYgKGkgPiAwKSB7XHJcbiAgICAgICAgICByZXMucmVzaWR1ZSA9IHJlcy5saW5lLnNsaWNlKGkgKyAxKS50cmltKCk7XHJcbiAgICAgICAgICByZXMubGluZSA9IHJlcy5saW5lLnNsaWNlKDAsIGkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXMucmVzaWR1ZSA9IHJlcy5saW5lLnNsaWNlKGxlbik7XHJcbiAgICAgICAgICByZXMubGluZSA9IHJlcy5saW5lLnNsaWNlKDAsIGxlbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgZGF5c0JldHdlZW4oc3RhcnQ6IG1vbWVudC5Nb21lbnQsIGVuZDogbW9tZW50Lk1vbWVudCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gZW5kLmRpZmYoc3RhcnQsICdkYXlzJyk7XHJcbiAgfVxyXG5cclxuICBtYXBQcm9taXNlPFQgPSBhbnksIFIgPSBhbnk+KFxyXG4gICAgYTogVFtdLFxyXG4gICAgZjogKHZhbDogVCwgaW5kZXg6IG51bWJlcikgPT4gUiB8IFByb21pc2U8Uj4sXHJcbiAgICBtYXg/OiBudW1iZXJcclxuICApOiBQcm9taXNlPFJbXT4ge1xyXG4gICAgY29uc3QgaXQgPSBhW1N5bWJvbC5pdGVyYXRvcl0oKTtcclxuICAgIGNvbnN0IHJlc3VsdDogUltdID0gW107XHJcbiAgICBjb25zdCBidWZmZXI6IFByb21pc2U8Uj5bXSA9IFtdO1xyXG4gICAgbGV0IGkgPSAwO1xyXG4gICAgY29uc3QgbmV4dGYgPSAoKTogUHJvbWlzZTxSPiA9PiB7XHJcbiAgICAgIGNvbnN0IG5leHQgPSBpdC5uZXh0KCk7XHJcbiAgICAgIGlmIChuZXh0LmRvbmUpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgaW5kZXggPSBpKys7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZihuZXh0LnZhbHVlLCBpbmRleCkpLnRoZW4oKHZhbCkgPT4ge1xyXG4gICAgICAgIHJlc3VsdFtpbmRleF0gPSB2YWw7XHJcbiAgICAgICAgcmV0dXJuIG5leHRmKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIHdoaWxlICghbWF4IHx8IGJ1ZmZlci5sZW5ndGggPD0gbWF4KSB7XHJcbiAgICAgIGNvbnN0IG4gPSBuZXh0ZigpO1xyXG4gICAgICBpZiAobikge1xyXG4gICAgICAgIGJ1ZmZlci5wdXNoKG4pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoYnVmZmVyKS50aGVuKCgpID0+IHtcclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbWFwU2VyaWVzUHJvbWlzZTxUID0gYW55LCBSID0gYW55PihcclxuICAgIGE6IFRbXSxcclxuICAgIGY6ICh2YWw6IFQsIGluZGV4OiBudW1iZXIpID0+IFIgfCBQcm9taXNlPFI+XHJcbiAgKTogUHJvbWlzZTxSW10+IHtcclxuICAgIHJldHVybiB0aGlzLm1hcFByb21pc2UoYSwgZiwgMSk7XHJcbiAgfVxyXG5cclxuICBvYmoycXVlcnlTdHJpbmcob2JqOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIF8ucmVkdWNlKFxyXG4gICAgICBvYmosXHJcbiAgICAgIChhLCB2LCBrKSA9PiB7XHJcbiAgICAgICAgaWYgKGEgIT09ICcnKSB7XHJcbiAgICAgICAgICBhICs9ICcmJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGAke2F9JHtlbmNvZGVVUklDb21wb25lbnQoayl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHYpfWA7XHJcbiAgICAgIH0sXHJcbiAgICAgICcnXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc3RyaXBQdW5jdHVhdGlvbihzOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHMucmVwbGFjZSgvW15hLXpBLVowLTlcXHNdL2csICcnKTtcclxuICB9XHJcblxyXG4gIHJlcGxhY2VBbGwoaGF5c3RhY2s6IHN0cmluZywgbmVlZGxlOiBzdHJpbmcsIHJlcGxhY2VtZW50OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGhheXN0YWNrXHJcbiAgICAgID8gaGF5c3RhY2sucmVwbGFjZShuZXcgUmVnRXhwKG5lZWRsZSwgJ2cnKSwgcmVwbGFjZW1lbnQpXHJcbiAgICAgIDogbnVsbDtcclxuICB9XHJcblxyXG4gIGRhdGVUaW1lKHNhYnNEYXRlOiBzdHJpbmcsIHNhYnNUaW1lOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgY29uc3QgdGVtcERhdGUgPSBzYWJzRGF0ZS5tYXRjaCgvLnsxLDJ9L2cpOyAvLyBzcGxpdHMgZXZlcnkgMiBjaGFyYWN0ZXJzXHJcbiAgICBjb25zdCB0ZW1wVGltZSA9IHNhYnNUaW1lLm1hdGNoKC8uezEsMn0vZyk7XHJcblxyXG4gICAgY29uc3QgbmV3U3RyID1cclxuICAgICAgJzIwJyArXHJcbiAgICAgIHRlbXBEYXRlWzBdICtcclxuICAgICAgJy0nICtcclxuICAgICAgdGVtcERhdGVbMV0gK1xyXG4gICAgICAnLScgK1xyXG4gICAgICB0ZW1wRGF0ZVsyXSArXHJcbiAgICAgICdUJyArXHJcbiAgICAgIHRlbXBUaW1lWzBdICtcclxuICAgICAgJzonICtcclxuICAgICAgdGVtcFRpbWVbMV0gK1xyXG4gICAgICAnOjAwJztcclxuICAgIHJldHVybiBuZXdTdHI7XHJcbiAgfVxyXG5cclxuICBhbHRlcm5hdGVKU09OU3RyaW5naWZ5KGpzb25PYmplY3Q6IGFueSk6IHN0cmluZyB7XHJcbiAgICBsZXQganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGpzb25PYmplY3QpO1xyXG4gICAganNvblN0cmluZyA9IGpzb25TdHJpbmcucmVwbGFjZSgvXCIvZywgJ2AnKTtcclxuICAgIHJldHVybiBqc29uU3RyaW5nO1xyXG4gIH1cclxuXHJcbiAgLy8gQ29udmVydCBvYmplY3QgdG8gYXJyYXlcclxuICBDb252ZXJ0T2JqZWN0VG9BcnJheShvYmplY3Q6IG9iamVjdCk6IGFueVtdIHtcclxuICAgIGxldCBhcnJheSA9IF8udmFsdWVzKG9iamVjdCk7XHJcbiAgICBhcnJheSA9IF8uZmxhdHRlbihhcnJheSk7XHJcbiAgICByZXR1cm4gYXJyYXk7XHJcbiAgfVxyXG5cclxuICBhZGREYXkoZGF0ZVN0cnVjdDogTmdiRGF0ZVN0cnVjdCk6IGFueSB7XHJcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoXHJcbiAgICAgIGRhdGVTdHJ1Y3QueWVhcixcclxuICAgICAgZGF0ZVN0cnVjdC5tb250aCAtIDEsXHJcbiAgICAgIGRhdGVTdHJ1Y3QuZGF5ICsgMVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHJldERhdGUgPSB7XHJcbiAgICAgIHllYXI6IGRhdGUuZ2V0RnVsbFllYXIoKSxcclxuICAgICAgbW9udGg6IGRhdGUuZ2V0TW9udGgoKSArIDEsXHJcbiAgICAgIGRheTogZGF0ZS5nZXREYXRlKClcclxuICAgIH07XHJcbiAgICAvLy8vIGNvbnNvbGUubG9nKHJldERhdGUpO1xyXG4gICAgLy8vLyBjb25zb2xlLmxvZyhkYXRlKTtcclxuICAgIHJldHVybiByZXREYXRlO1xyXG4gIH1cclxuXHJcbiAgaGFzaENvZGUodG9Db2RlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IGhhc2ggPSAwO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9Db2RlLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgIGNvbnN0IGNoYXIgPSB0b0NvZGUuY2hhckNvZGVBdChpKTtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1iaXR3aXNlXHJcbiAgICAgIGhhc2ggPSAoaGFzaCA8PCA1KSAtIGhhc2ggKyBjaGFyO1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWJpdHdpc2VcclxuICAgICAgaGFzaCA9IGhhc2ggJiBoYXNoO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGhhc2gudG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIE1NZGR5eVRvTmdiKGRhdGU6IHN0cmluZyk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMubW9tZW50VG9OZ0RhdGUobW9tZW50KGRhdGUsIEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSkpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRDaGlsZHJlblRyYXZlbGxlcnMoXHJcbiAgICBzZWxlY3RlZFRyYXZlbGxlcnM6IFRyYXZlbGxlcltdLFxyXG4gICAgdHlwZTogU2VydmljZVR5cGVcclxuICApIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAvLyBUaGVzZSB0eXBlcyBkbyBub3QgaGF2ZSBhIGRpZmZlcmVuY2UgYmV0d2VlbiBhZHVsdHMgYW5kIGNoaWxkcmVuLiBzbyBhbHdheXMgbWFyayBhcyBhZHVsdHMuXHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuSG90ZWw6XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuQ2FiOlxyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIHJldHVybiBzZWxlY3RlZFRyYXZlbGxlcnMuZmlsdGVyKFxyXG4gICAgICAodHJhdmVsbGVyOiBUcmF2ZWxsZXIpID0+IHRyYXZlbGxlci5pc0NoaWxkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRUcmF2ZWxsZXJzKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdLCB0eXBlOiBTZXJ2aWNlVHlwZSkge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIC8vIFRoZXNlIHR5cGVzIGRvIG5vdCBoYXZlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIGFkdWx0cyBhbmQgY2hpbGRyZW4uIHNvIGFsd2F5cyBtYXJrIGFzIGFkdWx0cy5cclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Ib3RlbDpcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5DYWI6XHJcbiAgICAgICAgcmV0dXJuIHsgYWR1bHRzOiB0cmF2ZWxsZXJzLCBjaGlsZHJlbjogW10sIGluZmFudHM6IFtdIH07XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIHRyYXZlbGxlcnMucmVkdWNlKFxyXG4gICAgICAgICAgKFxyXG4gICAgICAgICAgICBhY2N1bToge1xyXG4gICAgICAgICAgICAgIGFkdWx0czogVHJhdmVsbGVyW107XHJcbiAgICAgICAgICAgICAgY2hpbGRyZW46IFRyYXZlbGxlcltdO1xyXG4gICAgICAgICAgICAgIGluZmFudHM6IFRyYXZlbGxlcltdO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0cmF2ZWxsZXI6IFRyYXZlbGxlclxyXG4gICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0cmF2ZWxsZXIuaXNDaGlsZCkge1xyXG4gICAgICAgICAgICAgIGlmICh0cmF2ZWxsZXIuaXNJbmZhbnQpIHtcclxuICAgICAgICAgICAgICAgIGFjY3VtLmluZmFudHMucHVzaCh0cmF2ZWxsZXIpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhY2N1bS5jaGlsZHJlbi5wdXNoKHRyYXZlbGxlcik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGFjY3VtLmFkdWx0cy5wdXNoKHRyYXZlbGxlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYWR1bHRzOiBbXSxcclxuICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxyXG4gICAgICAgICAgICBpbmZhbnRzOiBbXVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNlbGVjdGVkQWR1bHRUcmF2ZWxsZXJzKHNlbGVjdGVkVHJhdmVsbGVyczogVHJhdmVsbGVyW10sIHR5cGU6IFNlcnZpY2VUeXBlKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgLy8gVGhlc2UgdHlwZXMgZG8gbm90IGhhdmUgYSBkaWZmZXJlbmNlIGJldHdlZW4gYWR1bHRzIGFuZCBjaGlsZHJlbi4gc28gYWx3YXlzIG1hcmsgYXMgYWR1bHRzLlxyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkhvdGVsOlxyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNhYjpcclxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRUcmF2ZWxsZXJzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNlbGVjdGVkVHJhdmVsbGVycy5maWx0ZXIoXHJcbiAgICAgICh0cmF2ZWxsZXI6IFRyYXZlbGxlcikgPT4gIXRyYXZlbGxlci5pc0NoaWxkICYmICF0cmF2ZWxsZXIuaXNJbmZhbnRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc0NoaWxkKHRyYXZlbGxlcjogVHJhdmVsbGVyIHwgRGF0ZSwgbWF4QWdlOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGlmICh0cmF2ZWxsZXIgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgIGNvbnN0IGFkdWx0RGF0ZSA9IG1vbWVudCgpLmFkZCgtbWF4QWdlLCAneWVhcnMnKTtcclxuICAgICAgcmV0dXJuIGFkdWx0RGF0ZS5pc0JlZm9yZShcclxuICAgICAgICBtb21lbnQodHJhdmVsbGVyLCBCYXNlSGVscGVyUm91dGluZXMuSVNPX0RBVEFfRk9STUFUKSxcclxuICAgICAgICAnZGF5J1xyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRyYXZlbGxlci5pc0NoaWxkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNDaGlsZEZsaWdodCh0cmF2ZWxsZXI6IFRyYXZlbGxlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBGTElHSFRfTUFYX0NISUxEX0FHRV9ZRUFSUyk7XHJcbiAgfVxyXG5cclxuICBpc0NoaWxkUmFpbCh0cmF2ZWxsZXI6IFRyYXZlbGxlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBSQUlMX01BWF9DSElMRF9BR0VfWUVBUlMpO1xyXG4gIH1cclxuXHJcbiAgaXNDaGlsZEV1cm9zdGFyKHRyYXZlbGxlcjogVHJhdmVsbGVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIEVVUk9TVEFSX01BWF9DSElMRF9BR0VfWUVBUlMpO1xyXG4gIH1cclxuXHJcbiAgdW5pcUJ5KGFycmF5OiBhbnlbXSwgdmFsdWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIF8udW5pcUJ5KGFycmF5LCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBpc0NoaWxkKHRyYXZlbGxlcjogVHJhdmVsbGVyIHwgRGF0ZSwgdHJhdmVsVHlwZTogU2VydmljZVR5cGUpIHtcclxuICAgIHN3aXRjaCAodHJhdmVsVHlwZSkge1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkZsaWdodDpcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIEZMSUdIVF9NQVhfQ0hJTERfQUdFX1lFQVJTKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5SYWlsOlxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgUkFJTF9NQVhfQ0hJTERfQUdFX1lFQVJTKTtcclxuICAgICAgLy8gY2FzZSBTZXJ2aWNlVHlwZS5FdXJvc3RhcjpcclxuICAgICAgLy8gIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgRVVST1NUQVJfTUFYX0NISUxEX0FHRV9ZRUFSUyk7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuQ29hY2g6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBDT0FDSF9NQVhfQ0hJTERfQUdFX1lFQVJTKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Mb3VuZ2U6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBMT1VOR0VTX01BWF9DSElMRF9BR0VfWUVBUlMpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkhvdGVsOlxyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNhYjpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNJbmZhbnQodHJhdmVsbGVyOiBUcmF2ZWxsZXIgfCBEYXRlLCB0cmF2ZWxUeXBlOiBTZXJ2aWNlVHlwZSkge1xyXG4gICAgc3dpdGNoICh0cmF2ZWxUeXBlKSB7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuRmxpZ2h0OlxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgRkxJR0hUX01BWF9JTkZBTlRfQUdFX1lFQVJTKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5SYWlsOlxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgUkFJTF9NQVhfSU5GQU5UX0FHRV9ZRUFSUyk7XHJcbiAgICAgIC8vIGNhc2UgU2VydmljZVR5cGUuRXVyb3N0YXI6XHJcbiAgICAgIC8vICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIEVVUk9TVEFSX01BWF9DSElMRF9BR0VfWUVBUlMpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNvYWNoOlxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgQ09BQ0hfTUFYX0lORkFOVF9BR0VfWUVBUlMpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkxvdW5nZTpcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIExPVU5HRVNfTUFYX0lORkFOVF9BR0VfWUVBUlMpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkhvdGVsOlxyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNhYjpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0QWdlVHlwZSh0cmF2ZWxsZXI6IFRyYXZlbGxlciwgdHJhdmVsVHlwZTogU2VydmljZVR5cGUpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNDaGlsZCh0cmF2ZWxsZXIsIHRyYXZlbFR5cGUpID8gJ0MnIDogJ0EnO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWF4Q2hpbGRBZ2UodHlwZTogU2VydmljZVR5cGUpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuRmxpZ2h0OlxyXG4gICAgICAgIHJldHVybiBtb21lbnQoKVxyXG4gICAgICAgICAgLmFkZCgtRkxJR0hUX01BWF9DSElMRF9BR0VfWUVBUlMgKyAxLCAneWVhcnMnKVxyXG4gICAgICAgICAgLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuTU1ERFlZX0RBVEUpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLlJhaWw6XHJcbiAgICAgICAgcmV0dXJuIG1vbWVudCgpXHJcbiAgICAgICAgICAuYWRkKC1SQUlMX01BWF9DSElMRF9BR0VfWUVBUlMgKyAxLCAneWVhcnMnKVxyXG4gICAgICAgICAgLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuTU1ERFlZX0RBVEUpO1xyXG4gICAgICAvLyBjYXNlIFNlcnZpY2VUeXBlLkVVUk9TVEFSOlxyXG4gICAgICAvLyAgcmV0dXJuIG1vbWVudCgpLmFkZCgtRVVST1NUQVJfTUFYX0NISUxEX0FHRV9ZRUFSUyArIDEsICd5ZWFycycpLmZvcm1hdChIZWxwZXJzLk1NRERZWV9EQVRFKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Db2FjaDpcclxuICAgICAgICByZXR1cm4gbW9tZW50KClcclxuICAgICAgICAgIC5hZGQoLUNPQUNIX01BWF9DSElMRF9BR0VfWUVBUlMgKyAxLCAneWVhcnMnKVxyXG4gICAgICAgICAgLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuTU1ERFlZX0RBVEUpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkxvdW5nZTpcclxuICAgICAgICByZXR1cm4gbW9tZW50KClcclxuICAgICAgICAgIC5hZGQoLUxPVU5HRVNfTUFYX0NISUxEX0FHRV9ZRUFSUyArIDEsICd5ZWFycycpXHJcbiAgICAgICAgICAuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXREZWZhdWx0QWR1bHRBZ2UodHlwZTogU2VydmljZVR5cGUpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuRmxpZ2h0OlxyXG4gICAgICAgIHJldHVybiBtb21lbnQoKVxyXG4gICAgICAgICAgLmFkZCgtRkxJR0hUX01BWF9DSElMRF9BR0VfWUVBUlMgLSAxMCwgJ3llYXJzJylcclxuICAgICAgICAgIC5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5SYWlsOlxyXG4gICAgICAgIHJldHVybiBtb21lbnQoKVxyXG4gICAgICAgICAgLmFkZCgtUkFJTF9NQVhfQ0hJTERfQUdFX1lFQVJTIC0gMTAsICd5ZWFycycpXHJcbiAgICAgICAgICAuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XHJcbiAgICAgIC8vIGNhc2UgU2VydmljZVR5cGUuRXVyb3N0YXI6XHJcbiAgICAgIC8vICByZXR1cm4gbW9tZW50KCkuYWRkKC1FVVJPU1RBUl9NQVhfQ0hJTERfQUdFX1lFQVJTIC0gMTAsICd5ZWFycycpLmZvcm1hdChIZWxwZXJzLk1NRERZWV9EQVRFKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Db2FjaDpcclxuICAgICAgICByZXR1cm4gbW9tZW50KClcclxuICAgICAgICAgIC5hZGQoLUNPQUNIX01BWF9DSElMRF9BR0VfWUVBUlMgLSAxMCwgJ3llYXJzJylcclxuICAgICAgICAgIC5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Mb3VuZ2U6XHJcbiAgICAgICAgcmV0dXJuIG1vbWVudCgpXHJcbiAgICAgICAgICAuYWRkKC1MT1VOR0VTX01BWF9DSElMRF9BR0VfWUVBUlMgLSAxMCwgJ3llYXJzJylcclxuICAgICAgICAgIC5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Ib3RlbDpcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5DYWI6XHJcbiAgICAgICAgLy8gVGhlc2UgdHlwZXMgZG8gbm90IGhhdmUgY2hpbGQgcGxhY2VzIHNvXHJcbiAgICAgICAgcmV0dXJuIG1vbWVudCgpXHJcbiAgICAgICAgICAuYWRkKC0xOCwgJ3llYXJzJylcclxuICAgICAgICAgIC5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtb21lbnQoKS5hZGQoLTE4LCAneWVhcnMnKS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICB9XHJcblxyXG4gIHRyYW5zZm9ybShcclxuICAgIGFycmF5OiBhbnlbXSxcclxuICAgIGNhbGxiYWNrOiBfLk1lbW9Wb2lkQXJyYXlJdGVyYXRvcjxhbnksIGFueVtdPixcclxuICAgIGFjYzogYW55XHJcbiAgKTogYW55W10ge1xyXG4gICAgcmV0dXJuIF8udHJhbnNmb3JtKGFycmF5LCBjYWxsYmFjaywgYWNjKTtcclxuICB9XHJcblxyXG4gIGFycmF5VG9PYmplY3Q8VCBleHRlbmRzIHsgW2tleTogc3RyaW5nXTogYW55IH0+KFxyXG4gICAgYXJyYXk6IFRbXSxcclxuICAgIGZpZWxkOiBzdHJpbmdcclxuICApOiB7IFtrZXk6IHN0cmluZ106IFQgfSB7XHJcbiAgICByZXR1cm4gYXJyYXlcclxuICAgICAgLmZpbHRlcigoZGF0YTogVCkgPT4gISFkYXRhKVxyXG4gICAgICAucmVkdWNlKChjb25maWdzOiB7IFtrZXk6IHN0cmluZ106IFQgfSwgY29uZmlnSXRlbTogVCkgPT4ge1xyXG4gICAgICAgIGlmIChjb25maWdJdGVtICYmIGNvbmZpZ0l0ZW1bZmllbGRdKSB7XHJcbiAgICAgICAgICBjb25maWdzW2NvbmZpZ0l0ZW1bZmllbGRdXSA9IGNvbmZpZ0l0ZW07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb25maWdzO1xyXG4gICAgICB9LCB7fSk7XHJcbiAgfVxyXG5cclxuICBzZXRGaWVsZEluT2JqZWN0KFxyXG4gICAgb2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxyXG4gICAgZmllbGRzOiBzdHJpbmdbXSxcclxuICAgIHZhbHVlOiBhbnlcclxuICApOiBhbnkge1xyXG4gICAgaWYgKGZpZWxkcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZpZWxkJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoIW9iaikge1xyXG4gICAgICBvYmogPSB7fTtcclxuICAgIH1cclxuICAgIGlmIChmaWVsZHMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIG9ialtmaWVsZHNbMF1dID0gb2JqW2ZpZWxkc1swXV0gfHwgW107XHJcbiAgICAgIG9ialtmaWVsZHNbMF1dLnB1c2godmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZmllbGQ6IHN0cmluZyA9IGZpZWxkc1swXTtcclxuICAgICAgb2JqW2ZpZWxkXSA9IHRoaXMuc2V0RmllbGRJbk9iamVjdChvYmpbZmllbGRdLCBmaWVsZHMuc2xpY2UoMSksIHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH1cclxuXHJcbiAgYXJyYXlUb09iamVjdEFycmF5PFxyXG4gICAgVCBleHRlbmRzIHsgW2tleTogc3RyaW5nXTogYW55IH0sXHJcbiAgICBRIGV4dGVuZHMgeyBba2V5OiBzdHJpbmddOiBhbnkgfVxyXG4gID4oYXJyYXk6IFRbXSwgZmllbGRzOiAoc3RyaW5nIHwgc3RyaW5nW10pW10pOiBRIHtcclxuICAgIHJldHVybiBhcnJheVxyXG4gICAgICAuZmlsdGVyKChkYXRhOiBUKSA9PiAhIWRhdGEpXHJcbiAgICAgIC5yZWR1Y2UoKGNvbmZpZ3M6IHsgW2tleTogc3RyaW5nXTogVFtdIH0sIGNvbmZpZ0l0ZW06IFQpID0+IHtcclxuICAgICAgICBjb25zdCBmaWVsZFZhbHVlczogc3RyaW5nW10gPSBmaWVsZHMucmVkdWNlPHN0cmluZ1tdPihcclxuICAgICAgICAgIChhY2N1bTogc3RyaW5nW10sIGZpZWxkOiBrZXlvZiBUIHwgKGtleW9mIFQpW10pOiBzdHJpbmdbXSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZldGNoVmFsdWU6IHN0cmluZyA9IEFycmF5LmlzQXJyYXkoZmllbGQpXHJcbiAgICAgICAgICAgICAgPyBmaWVsZFxyXG4gICAgICAgICAgICAgICAgICAubWFwKChrZXk6IGtleW9mIFQpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWVsZEZyb21PYmplY3QoY29uZmlnSXRlbSwga2V5IGFzIHN0cmluZylcclxuICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAuam9pbignXycpXHJcbiAgICAgICAgICAgICAgOiB0aGlzLmZpZWxkRnJvbU9iamVjdChjb25maWdJdGVtLCBmaWVsZCBhcyBzdHJpbmcpO1xyXG4gICAgICAgICAgICBpZiAoYWNjdW0gJiYgZmV0Y2hWYWx1ZSkge1xyXG4gICAgICAgICAgICAgIGFjY3VtLnB1c2goZmV0Y2hWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFtdXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoY29uZmlnSXRlbSAmJiBmaWVsZFZhbHVlcykge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2V0RmllbGRJbk9iamVjdChjb25maWdzLCBmaWVsZFZhbHVlcywgY29uZmlnSXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCB7fSk7XHJcbiAgfVxyXG5cclxuICBnZXRUZXJtaW5hbHMoYWlycG9ydDogQWlycG9ydCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiBhaXJwb3J0LnRlcm1pbmFscztcclxuICB9XHJcblxyXG4gIGZpZWxkRnJvbU9iamVjdDxUPihvYmo6IG9iamVjdCwgZmllbGRzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IFQgfCBudWxsIHtcclxuICAgIHJldHVybiAoQXJyYXkuaXNBcnJheShmaWVsZHMpID8gZmllbGRzIDogKGZpZWxkcyB8fCAnJykuc3BsaXQoJy4nKSkucmVkdWNlKFxyXG4gICAgICAoY3VycmVudDogUmVjb3JkPHN0cmluZywgYW55PiwgZmllbGQxOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W2ZpZWxkMV0pIHtcclxuICAgICAgICAgIHJldHVybiBjdXJyZW50W2ZpZWxkMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9LFxyXG4gICAgICBvYmpcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBtYXBGaWVsZEZyb21PYmplY3Q8SyBleHRlbmRzIHN0cmluZyB8IG51bWJlciB8IHN5bWJvbCwgVD4oZmllbGQ6IEspIHtcclxuICAgIHJldHVybiAob2JqOiBSZWNvcmQ8SywgYW55Pik6IFQgPT4ge1xyXG4gICAgICByZXR1cm4gb2JqW2ZpZWxkXTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICByZW1vdmVOdWxsczxUPihxdWVyeTogVCk6IFQge1xyXG4gICAgaWYgKCFxdWVyeSkge1xyXG4gICAgICByZXR1cm4gcXVlcnk7XHJcbiAgICB9XHJcbiAgICBpZiAobW9tZW50LmlzTW9tZW50KHF1ZXJ5KSkge1xyXG4gICAgICByZXR1cm4gcXVlcnk7XHJcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocXVlcnkpKSB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgKChxdWVyeSBhcyB1bmtub3duIGFzIEFycmF5PFVucGFja2VkPFQ+PilcclxuICAgICAgICAgIC5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVOdWxscyhpdGVtKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZmlsdGVyKChpdGVtMTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiAhIWl0ZW0xO1xyXG4gICAgICAgICAgfSkgYXMgdW5rbm93biBhcyBUKSB8fCBudWxsXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBxdWVyeSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHF1ZXJ5KS5yZWR1Y2UoKGFjY3VtOiBULCBrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmIChrZXlbMF0gIT09ICdfJykge1xyXG4gICAgICAgICAgY29uc3QgdmFsdWUgPSAocXVlcnkgYXMgUmVjb3JkPHN0cmluZywgYW55Pilba2V5XTtcclxuICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLnJlbW92ZU51bGxzKHZhbHVlKTtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgKGRhdGEgIT09IG51bGwgJiYgZGF0YSAhPT0gdW5kZWZpbmVkICYmIGRhdGEgIT09ICdudWxsJykgfHxcclxuICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkoZGF0YSkgJiYgZGF0YS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIChhY2N1bSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtrZXldID0gZGF0YTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICB9LCB7fSBhcyBUKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBxdWVyeTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFRyYXZlbGxlcnNJZCh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSk6IHN0cmluZ1tdIHtcclxuICAgIGlmICh0cmF2ZWxsZXJzKSB7XHJcbiAgICAgIHJldHVybiB0cmF2ZWxsZXJzLnJlZHVjZShcclxuICAgICAgICAocHJldmlvdXNWYWx1ZTogc3RyaW5nW10sIGN1cnJlbnRWYWx1ZTogVHJhdmVsbGVyLCBpZHg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGlkeCA9PT0gMFxyXG4gICAgICAgICAgICA/IFtjdXJyZW50VmFsdWUuaWRdXHJcbiAgICAgICAgICAgIDogWy4uLnByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZS5pZF07XHJcbiAgICAgICAgfSxcclxuICAgICAgICBbXVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogbG9vcCBvdmVyIHRoZSBxdWVyeSBvYmplY3QgcGFyYW0gYW5kIGNvbnZlcnQgYW55IG1vbWVudCBkYXRlIG9iamVjdHMgdG8gZGF0ZS10aW1lIHN0cmluZ3NcclxuICAgKiBAcGFyYW0gcXVlcnlcclxuICAgKiBAcGFyYW0gZGVidWdcclxuICAgKi9cclxuICBzYW5pdGl6ZU1vbWVudERhdGVzKHF1ZXJ5OiBhbnksIGRlYnVnID0gZmFsc2UpOiBhbnkge1xyXG4gICAgY29uc3Qgc2FuaXRpemVkUXVlcnkgPSB7IC4uLnF1ZXJ5IH07XHJcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzYW5pdGl6ZWRRdWVyeSkpIHtcclxuICAgICAgaWYgKG1vbWVudC5pc01vbWVudCh2YWx1ZSkpIHtcclxuICAgICAgICBzYW5pdGl6ZWRRdWVyeVtrZXldID0gc2FuaXRpemVkUXVlcnlba2V5XS50b0lTT1N0cmluZygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoZGVidWcpIHtcclxuICAgICAgY29uc29sZS5sb2coJy0tIHNhbml0aXplTW9tZW50RGF0ZXMoKSBjYWxsZWQgLS0nKTtcclxuICAgICAgY29uc29sZS5sb2coJ29yaWdpbmFsIHF1ZXJ5OiAnLCBxdWVyeSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdzYW5pdGl6ZWQgcXVlcnk6ICcsIHNhbml0aXplZFF1ZXJ5KTtcclxuICAgIH1cclxuICAgIHJldHVybiBzYW5pdGl6ZWRRdWVyeTtcclxuICB9XHJcblxyXG4gIHRvU3RyaW5nczxUPih0b0Zvcm1hdDogVCwgc2NoZW1hOiBTY2hlbWEpOiBUIHtcclxuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhzY2hlbWEucHJvcGVydGllcyB8fCB7fSkucmVkdWNlKFxyXG4gICAgICAoY3VycmVudFZhbHVlOiBULCBba2V5LCB2YWx1ZV06IFtzdHJpbmcsIFNjaGVtYV0pOiBUID0+IHtcclxuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuX2Zvcm1hdFZhbHVlKFxyXG4gICAgICAgICAgdG9Gb3JtYXRba2V5IGFzIGtleW9mIFRdLFxyXG4gICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAoc2NoZW1hLnJlcXVpcmVkIHx8IFtdKS5pbmNsdWRlcyhrZXkpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKG5ld1ZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICBjdXJyZW50VmFsdWVba2V5IGFzIGtleW9mIFRdID0gbmV3VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjdXJyZW50VmFsdWU7XHJcbiAgICAgIH0sXHJcbiAgICAgIHt9IGFzIFRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9mb3JtYXRWYWx1ZSh2YWx1ZTogYW55LCBzY2hlbWE6IFNjaGVtYSwgaXNSZXF1aXJlZDogYm9vbGVhbik6IGFueSB7XHJcbiAgICBzd2l0Y2ggKHNjaGVtYS50eXBlKSB7XHJcbiAgICAgIGNhc2UgJ2ludGVnZXInOlxyXG4gICAgICAgIGNvbnN0IHRtcCA9IE51bWJlci5wYXJzZUludCh2YWx1ZSwgMTApO1xyXG4gICAgICAgIHJldHVybiBOdW1iZXIuaXNOYU4odG1wKSA/IChpc1JlcXVpcmVkID8gMCA6IG51bGwpIDogdG1wO1xyXG4gICAgICBjYXNlICdzdHJpbmcnOlxyXG4gICAgICAgIGNvbnN0IHRtcDEgPSB2YWx1ZSA/IHZhbHVlLnRvU3RyaW5nKCkgOiBudWxsO1xyXG4gICAgICAgIHJldHVybiB0bXAxICYmIHRtcDEubGVuZ3RoID4gMCA/IHRtcDEgOiBpc1JlcXVpcmVkID8gJycgOiBudWxsO1xyXG4gICAgICBjYXNlICdvYmplY3QnOlxyXG4gICAgICAgIHJldHVybiB2YWx1ZSA/IHRoaXMudG9TdHJpbmdzKHZhbHVlLCBzY2hlbWEpIDogaXNSZXF1aXJlZCA/IHt9IDogbnVsbDtcclxuICAgICAgY2FzZSAnYXJyYXknOlxyXG4gICAgICAgIHJldHVybiB2YWx1ZTsgLy8gVE9ETyB3cml0ZSBhcnJheSB0cmFuc2xhdGlvblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1ha2VUaW1lV2luZG93KGRhdGVUaW1lOiBtb21lbnQuTW9tZW50LCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzdGFydFRpbWUgPSBkYXRlVGltZS5jbG9uZSgpLmFkZChzdGFydCwgJ2hvdXInKTtcclxuICAgIGNvbnN0IGVuZFRpbWUgPSBkYXRlVGltZS5jbG9uZSgpLmFkZChlbmQsICdob3VyJyk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0VGltZShzdGFydFRpbWUpICsgJy0nICsgdGhpcy5mb3JtYXRUaW1lKGVuZFRpbWUpO1xyXG4gIH1cclxuXHJcbiAgaW5SYW5nZSh0b2NoZWNrOiBudW1iZXIsIHJhbmdlOiBNaW5NYXgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0b2NoZWNrID49IHJhbmdlLm1pbiAmJiB0b2NoZWNrIDw9IHJhbmdlLm1heDtcclxuICB9XHJcblxyXG4gIG1ha2VVc2Vycyh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSk6IFVzZXJQYXNzZW5nZXJUeXBlSW5wdXRbXSB7XHJcbiAgICByZXR1cm4gdHJhdmVsbGVycy5tYXAoKHRyYXZlbGxlcjogVHJhdmVsbGVyKTogVXNlclBhc3NlbmdlclR5cGVJbnB1dCA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaWQ6IHRyYXZlbGxlci5pZCxcclxuICAgICAgICBwYXNzZW5nZXJUeXBlOiB0cmF2ZWxsZXIuaXNDaGlsZFxyXG4gICAgICAgICAgPyBQYXNzZW5nZXJUeXBlLkNoaWxkXHJcbiAgICAgICAgICA6IHRyYXZlbGxlci5pc0luZmFudFxyXG4gICAgICAgICAgPyBQYXNzZW5nZXJUeXBlLkluZmFudFxyXG4gICAgICAgICAgOiBQYXNzZW5nZXJUeXBlLkFkdWx0XHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG1ha2VNb21lbnREYXlUaW1lKGFkZERheT86IG51bWJlciwgaGg/OiBudW1iZXIsIG0/OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGR0ID0gbW9tZW50KCk7XHJcblxyXG4gICAgaWYgKGFkZERheSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGR0LmFkZChhZGREYXksICdkYXknKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaGggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBkdC5zZXQoJ2hvdXJzJywgaGgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChtICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgZHQuc2V0KCdtaW51dGVzJywgbSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGR0O1xyXG4gIH1cclxuXHJcbiAgc2FuYXRpemVSZXR1cm5zPFQ+KFxyXG4gICAgZGVmYXVsdHM6IFQsXHJcbiAgICBzdXBwbGllZERhdGE6IFBhcnRpYWw8VD4sXHJcbiAgICBtb21lbnRGaWVsZHM/OiAoa2V5b2YgVClbXVxyXG4gICk6IFQge1xyXG4gICAgY29uc3QgY29tYmluZWQ6IFQgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cywgc3VwcGxpZWREYXRhKTtcclxuICAgIHJldHVybiAobW9tZW50RmllbGRzIHx8IFtdKS5yZWR1Y2UoKGN1cnJlbnQ6IFQsIG5leHQ6IGtleW9mIFQpID0+IHtcclxuICAgICAgY29uc3QgdmFsdWUgPSAoY3VycmVudCBhcyBhbnkpW25leHRdO1xyXG4gICAgICAoY3VycmVudCBhcyBhbnkpW25leHRdID0gIXZhbHVlXHJcbiAgICAgICAgPyBtb21lbnQoKVxyXG4gICAgICAgIDogdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJ1xyXG4gICAgICAgID8gbW9tZW50KHZhbHVlKVxyXG4gICAgICAgIDogdmFsdWU7XHJcbiAgICAgIHJldHVybiBjdXJyZW50O1xyXG4gICAgfSwgY29tYmluZWQpO1xyXG4gIH1cclxuXHJcbiAgbWlJc1ZhbGlkKHRvQ2hlY2s6IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZFtdKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0b0NoZWNrLmxlbmd0aCA9PT0gMCB8fFxyXG4gICAgICAhIXRvQ2hlY2suZmluZCgobWlJdGVtOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWQpID0+IHtcclxuICAgICAgICByZXR1cm4gbWlJdGVtLmlzVmFsaWQoKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpc01pVmFsaWQoXHJcbiAgICBtaVBlckl0ZW06IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZFtdLFxyXG4gICAgbWlQZXJVc2VyOiB7XHJcbiAgICAgIFtrZXk6IHN0cmluZ106IHtcclxuICAgICAgICBtYW5hZ2VtZW50SW5mbzogTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkW107XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB1c2VyTWlzID0gT2JqZWN0LnZhbHVlcyhtaVBlclVzZXIgfHwge30pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5taUlzVmFsaWQobWlQZXJJdGVtKSAmJlxyXG4gICAgICAodXNlck1pcy5sZW5ndGggPT09IDAgfHxcclxuICAgICAgICAhIXVzZXJNaXMuZmluZChcclxuICAgICAgICAgICh1c2VyTWlzMTogeyBtYW5hZ2VtZW50SW5mbzogTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkW10gfSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5taUlzVmFsaWQodXNlck1pczEubWFuYWdlbWVudEluZm8pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICkpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbmVlZHNNaShiYXNrZXQ6IEJhc2tldERldGFpbHMsIG5lZWRzVG9WaWV3TWk6IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIGJhc2tldC5iYXNrZXRJbmZvTWlEZXRhaWxzLmxlbmd0aCA+IDAgJiZcclxuICAgICAgKG5lZWRzVG9WaWV3TWkgfHxcclxuICAgICAgICAhYmFza2V0LmJhc2tldEluZm9NaURldGFpbHMuZmluZChcclxuICAgICAgICAgIChtaURldGFpbDogQmFza2V0SXRlbU1hbmFnZW1lbnRJbmZvKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzTWlWYWxpZChtaURldGFpbC5taVBlckl0ZW0sIG1pRGV0YWlsLm1pUGVyVXNlcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBmaW5kU2VydmljZShzZXJ2aWNlczogVXNlclNlcnZpY2VzLCBpZDogc3RyaW5nKTogU2VydmljZSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhzZXJ2aWNlcykucmVkdWNlKFxyXG4gICAgICAoY3VycmVudDogU2VydmljZSwgc2VydmljZTE6IFNlcnZpY2VbXSk6IFNlcnZpY2UgPT4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICBjdXJyZW50IHx8XHJcbiAgICAgICAgICBzZXJ2aWNlMS5maW5kKChzZXJ2aWNlMjogU2VydmljZSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gc2VydmljZTIuaWQgPT09IGlkO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9LFxyXG4gICAgICBudWxsIGFzIFNlcnZpY2VcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhbGxUcnVlKFxyXG4gICAgc3VwcEluZm86IFN1cHBsZW1lbnRhcnlCb29raW5nSW5mb0ludGVyZmFjZVtdLFxyXG4gICAgZmlsdGVyOiAoc3VwcEluZm86IFN1cHBsZW1lbnRhcnlCb29raW5nSW5mb0ludGVyZmFjZSkgPT4gYm9vbGVhblxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHN1cHBJbmZvLmZpbHRlcihmaWx0ZXIpLmxlbmd0aCA9PT0gc3VwcEluZm8ubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgam9pbkZyb21BdHRyaWJ1dGU8VD4oXHJcbiAgICBqb2luQ2hhcmFjdGVyOiBzdHJpbmcsXHJcbiAgICBhdHRyaWJ1dGU6IGtleW9mIFQsXHJcbiAgICBhcnJheTogVFtdXHJcbiAgKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBhcnJheS5tYXAoKGl0ZW06IFQpID0+IGl0ZW1bYXR0cmlidXRlXSkuam9pbihqb2luQ2hhcmFjdGVyKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIHNwbGl0IHVwIGFuIGFycmF5IGludG8gZXF1YWwgcGFydHNcclxuICAgKiBAcGFyYW0gYXJyYXkgLSB0aGUgYXJyYXkgdG8gc3BsaXQgdXBcclxuICAgKiBAcGFyYW0gc2l6ZSAtIHRoZSBzaXplIG9mIHRoZSBjb25zdGl0dWFudCBwYXJ0c1xyXG4gICAqIEBwYXJhbSBpbmNsdWRlUmVtYWluZGVyIC0gd2V0aGVyIG9yIG5vdCB0byBpbmNsdWRlIGFueSByZW1haW5nIHJlc3VsdHMgLSBkZWZhdWx0IHRydWVcclxuICAgKi9cclxuICBzcGxpdFVwQXJyYXkoXHJcbiAgICBhcnJheTogYW55W10sXHJcbiAgICBzaXplOiBudW1iZXIsXHJcbiAgICBpbmNsdWRlUmVtYWluZGVyOiBib29sZWFuID0gdHJ1ZVxyXG4gICk6IGFueVtdIHtcclxuICAgIGNvbnN0IGFycmF5Q29weSA9IF8uY2xvbmVEZWVwKGFycmF5KTsgLy8gbG9kYXNoIGNsb25lIGRlZXBcclxuICAgIGxldCBuZXdBcnJheSA9IFtdO1xyXG5cclxuICAgIGlmIChhcnJheUNvcHkubGVuZ3RoID4gc2l6ZSkge1xyXG4gICAgICB3aGlsZSAoYXJyYXlDb3B5Lmxlbmd0aCA+PSBzaXplKSB7XHJcbiAgICAgICAgbmV3QXJyYXkucHVzaChhcnJheUNvcHkuc3BsaWNlKDAsIHNpemUpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gYWRkIGFueSByZW1haW5pbmdcclxuICAgICAgaWYgKGFycmF5Q29weS5sZW5ndGggJiYgaW5jbHVkZVJlbWFpbmRlcikge1xyXG4gICAgICAgIG5ld0FycmF5LnB1c2goYXJyYXlDb3B5KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbmV3QXJyYXkgPSBhcnJheUNvcHk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ld0FycmF5O1xyXG4gIH1cclxuXHJcbiAgQE1lbW9yaXNlKClcclxuICBnZXRUaW1lRGlmZmVyZW5jZShkZXBEYXRlVGltZTogc3RyaW5nLCBhcnJEYXRlVGltZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBtb21lbnQoZGVwRGF0ZVRpbWUpLmRpZmYobW9tZW50KGFyckRhdGVUaW1lKSwgJ21pbnV0ZXMnKTtcclxuICB9XHJcblxyXG4gIEBNZW1vcmlzZSgpXHJcbiAgZGF5RGlmZmVyZW5jZShkZXB0OiBzdHJpbmcsIGFycjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGRpZmYgPSBtb21lbnQoYXJyKVxyXG4gICAgICAuc3RhcnRPZignZGF5JylcclxuICAgICAgLmRpZmYobW9tZW50KGRlcHQpLnN0YXJ0T2YoJ2RheScpLCAnZGF5Jyk7XHJcbiAgICByZXR1cm4gZGlmZiA+IDAgPyBkaWZmLnRvU3RyaW5nKCkgOiAnJztcclxuICB9XHJcblxyXG4gIEBNZW1vcmlzZSgpXHJcbiAgbWFrZUZhcmVSdWxlcyhmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeSwgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtKSB7XHJcbiAgICBjb25zdCBmbGlnaHRzID1cclxuICAgICAgZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kXHJcbiAgICAgICAgPyBmbGlnaHQub3V0Ym91bmRGbGlnaHRzXHJcbiAgICAgICAgOiBmbGlnaHQuaW5ib3VuZEZsaWdodHM7XHJcbiAgICBjb25zdCBydWxlcyA9IGZsaWdodHMucmVkdWNlKFxyXG4gICAgICAoY3VycmVudDogRmFyZUNvbmRpdGlvbnMsIG5leHQ6IEZsaWdodEpvdXJuZXkpID0+IHtcclxuICAgICAgICBjdXJyZW50LmNhbmNlbGxhdGlvbiA9IGN1cnJlbnQuY2FuY2VsbGF0aW9uLmNvbmNhdChcclxuICAgICAgICAgIG5leHQuZmFyZUNvbmRpdGlvbnM/LmNhbmNlbGxhdGlvbiB8fCBbXVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY3VycmVudC5jaGFuZ2UgPSBjdXJyZW50LmNoYW5nZS5jb25jYXQoXHJcbiAgICAgICAgICBuZXh0LmZhcmVDb25kaXRpb25zPy5jaGFuZ2UgfHwgW11cclxuICAgICAgICApO1xyXG4gICAgICAgIGN1cnJlbnQubm9TaG93ID0gY3VycmVudC5ub1Nob3cuY29uY2F0KFxyXG4gICAgICAgICAgbmV4dC5mYXJlQ29uZGl0aW9ucz8ubm9TaG93IHx8IFtdXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjdXJyZW50LnVwZ3JhZGUgPSBjdXJyZW50LnVwZ3JhZGUuY29uY2F0KFxyXG4gICAgICAgICAgbmV4dC5mYXJlQ29uZGl0aW9ucz8udXBncmFkZSB8fCBbXVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY3VycmVudC5vdGhlciA9IGN1cnJlbnQub3RoZXIuY29uY2F0KG5leHQuZmFyZUNvbmRpdGlvbnM/Lm90aGVyIHx8IFtdKTtcclxuICAgICAgICByZXR1cm4gY3VycmVudDtcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGNhbmNlbGxhdGlvbjogW10sXHJcbiAgICAgICAgY2hhbmdlOiBbXSxcclxuICAgICAgICBub1Nob3c6IFtdLFxyXG4gICAgICAgIHVwZ3JhZGU6IFtdLFxyXG4gICAgICAgIG90aGVyOiBbXVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHsgcnVsZXMsIGZsaWdodHMgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjIC0gZ2VuZXJhdGVzIGljcyBmaWxlIGNvbnRlbnRcclxuICAgKi9cclxuICBnZW5lcmF0ZUljc0ZpbGVDb250ZW50cyhiYXNrZXRJdGVtczogQmFza2V0SXRlbVtdKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGljc0JvZHlDb250ZW50ID0gdGhpcy5nZW5lcmF0ZUljc0ZpbGVCb2R5Q29udGVudChiYXNrZXRJdGVtcyk7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAnQkVHSU46VkNBTEVOREFSXFxyXFxuJyxcclxuICAgICAgJ1BST0RJRDotLy9NaWNyb3MgVHJhdmVsLy9TQUJTIENvcnBvcmF0ZSAtIE1NWElJSS8vRU5cXHJcXG4nLFxyXG4gICAgICAnVkVSU0lPTjoyLjBcXHJcXG4nLFxyXG4gICAgICAnTUVUSE9EOlJFUVVFU1RcXHJcXG4nLFxyXG4gICAgICBpY3NCb2R5Q29udGVudCxcclxuICAgICAgJ0VORDpWQ0FMRU5EQVJcXHJcXG4nXHJcbiAgICBdLmpvaW4oJycpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2MgLSBnZW5lcmF0ZXMgaWNzIGZpbGUgYm9keSBjb250ZW50IGJhc2VkIG9uIHRoZSBwcm92aWRlZCBiYXNrZXRJdGVtcyBwYXJhbVxyXG4gICAqL1xyXG4gIGdlbmVyYXRlSWNzRmlsZUJvZHlDb250ZW50KGJhc2tldEl0ZW1zOiBCYXNrZXRJdGVtW10pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgYm9keUNvbnRlbnQ6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgLy8gZ2VuZXJhdGUgY2FsZW5kYXIgZGF0YSBmb3IgZWFjaCBiYXNrZXQgaXRlbVxyXG4gICAgYmFza2V0SXRlbXMubWFwKChiYXNrZXRJdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICBjb25zdCBkYXRhID0ge1xyXG4gICAgICAgIGRTdGFydDogJycsXHJcbiAgICAgICAgZEVuZDogJycsXHJcbiAgICAgICAgbG9jYXRpb25Gcm9tOiAnJyxcclxuICAgICAgICBsb2NhdGlvblRvOiAnJyxcclxuICAgICAgICBiYXNrZXRJZDogJycsXHJcbiAgICAgICAgZGVzY3JpcHRpb246ICcnLFxyXG4gICAgICAgIHNlcnZpY2VUeXBlOiAnJyxcclxuICAgICAgICBzdW1tYXJ5OiAnJ1xyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBkYXRlRm9ybWF0ID0gJ0REIE1NTU0gWVlZWSBISDptbSc7XHJcbiAgICAgIGNvbnN0IHsgdHlwZSB9ID0gYmFza2V0SXRlbS5zZXJ2aWNlO1xyXG4gICAgICBjb25zdCB7IGFkdWx0cywgY2hpbGRyZW4sIGJvb2tpbmdUaGlyZFBhcnR5UmVmZXJlbmNlLCBkZXRhaWwsIHNlcnZpY2UgfSA9XHJcbiAgICAgICAgYmFza2V0SXRlbTtcclxuICAgICAgLy8gcG9wdWxhdGUgZGF0YSBvYmplY3QgZGVwZW5kaW5nIG9uIHRoZSBzZXJ2aWNlIHR5cGUgaW4gdGhlIGJhc2tldFxyXG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLkxvdW5nZTpcclxuICAgICAgICAgIGRhdGEuYmFza2V0SWQgPSBiYXNrZXRJdGVtLmlkO1xyXG4gICAgICAgICAgZGF0YS5kU3RhcnQgPSBkZXRhaWw/LmFycml2YWxEYXRldGltZTtcclxuICAgICAgICAgIGRhdGEuZEVuZCA9ICcnO1xyXG4gICAgICAgICAgZGF0YS5zdW1tYXJ5ID0gYEFpcnBvcnQgTG91bmdlIC0gJHtkZXRhaWwubmFtZX1gO1xyXG4gICAgICAgICAgZGF0YS5zZXJ2aWNlVHlwZSA9IHNlcnZpY2UudHlwZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IFtcclxuICAgICAgICAgICAgYExvdW5nZTogJHtkZXRhaWwubmFtZX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgU3RhcnRzOiAke21vbWVudChkZXRhaWwuYXJyaXZhbERhdGV0aW1lKS5mb3JtYXQoZGF0ZUZvcm1hdCl9XFxyXFxuYCxcclxuICAgICAgICAgICAgYEFkdWx0czogJHthZHVsdHN9XFxyXFxuYCxcclxuICAgICAgICAgICAgYENoaWxkcmVuOiAke2NoaWxkcmVufVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBCb29raW5nIFJlZjogJHtib29raW5nVGhpcmRQYXJ0eVJlZmVyZW5jZX1gXHJcbiAgICAgICAgICBdLmpvaW4oJycpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5DYWI6XHJcbiAgICAgICAgICBkYXRhLmJhc2tldElkID0gYmFza2V0SXRlbS5pZDtcclxuICAgICAgICAgIGRhdGEuc2VydmljZVR5cGUgPSBzZXJ2aWNlLnR5cGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIGRhdGEuZFN0YXJ0ID0gZGV0YWlsPy5kZXBhcnRzO1xyXG4gICAgICAgICAgZGF0YS5kRW5kID0gJyc7XHJcbiAgICAgICAgICBkYXRhLnN1bW1hcnkgPSBgVGF4aSBib29raW5nIC0gZnJvbSAke2RldGFpbC5mcm9tTG9jYXRpb24uYWRkcmVzc30gdG8gJHtkZXRhaWwudG9Mb2NhdGlvbi5hZGRyZXNzfWA7XHJcbiAgICAgICAgICBkYXRhLmRlc2NyaXB0aW9uID0gW1xyXG4gICAgICAgICAgICBgUGlja3VwIFBvaW50OiAke2RldGFpbC5mcm9tTG9jYXRpb24uYWRkcmVzc31cXHJcXG5gLFxyXG4gICAgICAgICAgICBgVGltZTogJHttb21lbnQoZGV0YWlsLmRlcGFydHMpLmZvcm1hdChkYXRlRm9ybWF0KX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQm9va2luZyBSZWY6ICR7Ym9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2V9YFxyXG4gICAgICAgICAgXS5qb2luKCcnKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuQ2FyOlxyXG4gICAgICAgICAgZGF0YS5iYXNrZXRJZCA9IGJhc2tldEl0ZW0uaWQ7XHJcbiAgICAgICAgICBkYXRhLnNlcnZpY2VUeXBlID0gc2VydmljZS50eXBlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICBkYXRhLmRTdGFydCA9IGRldGFpbD8ucGlja1VwRGF0ZXRpbWU7XHJcbiAgICAgICAgICBkYXRhLmRFbmQgPSBkZXRhaWw/LmRyb3BPZmZEYXRldGltZTtcclxuICAgICAgICAgIGRhdGEuc3VtbWFyeSA9IGBDYXIgYm9va2luZyAtIGZyb20gJHtkZXRhaWwucGlja1VwTG9jYXRpb24uYWRkcmVzc30gdG8gJHtkZXRhaWwuZHJvcE9mZkxvY2F0aW9uLmFkZHJlc3N9YDtcclxuICAgICAgICAgIGRhdGEuZGVzY3JpcHRpb24gPSBbXHJcbiAgICAgICAgICAgIGBQaWNrdXAgUG9pbnQ6ICR7ZGV0YWlsLnBpY2tVcExvY2F0aW9uLmFkZHJlc3N9XFxyXFxuYCxcclxuICAgICAgICAgICAgYFRpbWU6ICR7bW9tZW50KGRldGFpbC5waWNrVXBEYXRldGltZSkuZm9ybWF0KGRhdGVGb3JtYXQpfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBBcnJpdmFsIFBvaW50OiAke2RldGFpbC5kcm9wT2ZmTG9jYXRpb24uYWRkcmVzc31cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQm9va2luZyBSZWY6ICR7Ym9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2V9YFxyXG4gICAgICAgICAgXS5qb2luKCcnKTtcclxuICAgICAgICAgIChkYXRhLmxvY2F0aW9uRnJvbSA9IGRldGFpbC5waWNrVXBMb2NhdGlvbi5hZGRyZXNzKSxcclxuICAgICAgICAgICAgKGRhdGEubG9jYXRpb25UbyA9IGRldGFpbC5kcm9wT2ZmTG9jYXRpb24uYWRkcmVzcyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLkNvYWNoOlxyXG4gICAgICAgIC8vIFRPRE86IGhhbmRsZSB0aGlzIGNhc2VcclxuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLkZhc3RUcmFjazpcclxuICAgICAgICAvLyBUT0RPOiBoYW5kbGUgdGhpcyBjYXNlXHJcbiAgICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5GbGlnaHQ6XHJcbiAgICAgICAgICBkYXRhLmJhc2tldElkID0gYmFza2V0SXRlbS5pZDtcclxuICAgICAgICAgIGRhdGEuc2VydmljZVR5cGUgPSBzZXJ2aWNlLnR5cGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIGRhdGEuZFN0YXJ0ID0gZGV0YWlsPy5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmc7XHJcbiAgICAgICAgICBkYXRhLmRFbmQgPSBkZXRhaWw/Lm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZUFycml2aW5nO1xyXG4gICAgICAgICAgZGF0YS5zdW1tYXJ5ID0gYEZsaWdodCBCb29raW5nIC0gRnJvbSAke2RldGFpbC5vdXRib3VuZEZsaWdodHNbMF0ub3JpZ2luQWlycG9ydH0gdG8gJHtkZXRhaWwub3V0Ym91bmRGbGlnaHRzWzBdLmRlc3RpbmF0aW9uQWlycG9ydH1gO1xyXG4gICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IFtcclxuICAgICAgICAgICAgYEZyb206ICR7ZGV0YWlsLm91dGJvdW5kRmxpZ2h0c1swXS5vcmlnaW5BaXJwb3J0fVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBEZXBhcnQ6ICR7bW9tZW50KFxyXG4gICAgICAgICAgICAgIGRldGFpbC5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmdcclxuICAgICAgICAgICAgKS5mb3JtYXQoZGF0ZUZvcm1hdCl9XFxyXFxuYCxcclxuICAgICAgICAgICAgYFRvOiAke2RldGFpbC5vdXRib3VuZEZsaWdodHNbMF0uZGVzdGluYXRpb25BaXJwb3J0fVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBBcnJpdmU6ICR7bW9tZW50KFxyXG4gICAgICAgICAgICAgIGRldGFpbC5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVBcnJpdmluZ1xyXG4gICAgICAgICAgICApLmZvcm1hdChkYXRlRm9ybWF0KX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQm9va2luZyBSZWY6ICR7Ym9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2V9YFxyXG4gICAgICAgICAgXS5qb2luKCcnKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuSG90ZWw6XHJcbiAgICAgICAgICBkYXRhLmJhc2tldElkID0gYmFza2V0SXRlbS5pZDtcclxuICAgICAgICAgIGRhdGEuc2VydmljZVR5cGUgPSBzZXJ2aWNlLnR5cGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIGRhdGEuZFN0YXJ0ID0gZGV0YWlsPy5jaGVja0luO1xyXG4gICAgICAgICAgZGF0YS5kRW5kID0gZGV0YWlsPy5jaGVja091dDtcclxuICAgICAgICAgIGRhdGEuc3VtbWFyeSA9IGBIb3RlbCBib29raW5nIC0gICR7ZGV0YWlsLmhvdGVsTmFtZX1gO1xyXG4gICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IFtcclxuICAgICAgICAgICAgYEhvdGVsOiAke2RldGFpbC5ob3RlbE5hbWV9XFxyXFxuYCxcclxuICAgICAgICAgICAgYEFycml2YWw6ICR7bW9tZW50KGRldGFpbC5jaGVja0luKS5mb3JtYXQoZGF0ZUZvcm1hdCl9XFxyXFxuYCxcclxuICAgICAgICAgICAgYERlcGFydHVyZTogJHttb21lbnQoZGV0YWlsLmNoZWNrT3V0KS5mb3JtYXQoZGF0ZUZvcm1hdCl9XFxyXFxuYCxcclxuICAgICAgICAgICAgYEJvb2tpbmcgUmVmOiAke2Jvb2tpbmdUaGlyZFBhcnR5UmVmZXJlbmNlfWBcclxuICAgICAgICAgIF0uam9pbignJyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsOlxyXG4gICAgICAgICAgZGF0YS5iYXNrZXRJZCA9IGJhc2tldEl0ZW0uaWQ7XHJcbiAgICAgICAgICBkYXRhLnNlcnZpY2VUeXBlID0gc2VydmljZS50eXBlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICBkYXRhLmRTdGFydCA9IGRldGFpbD8ub3V0d2FyZERldGFpbC5kZXBhcnR1cmVEYXRlVGltZTtcclxuICAgICAgICAgIGRhdGEuZEVuZCA9IGRldGFpbD8ub3V0d2FyZERldGFpbC5hcnJpdmFsRGF0ZVRpbWU7XHJcbiAgICAgICAgICBkYXRhLmxvY2F0aW9uRnJvbSA9IGRldGFpbC5vdXR3YXJkRGV0YWlsLmRlcGFydHVyZVN0YXRpb25OYW1lO1xyXG4gICAgICAgICAgZGF0YS5sb2NhdGlvblRvID0gZGV0YWlsLm91dHdhcmREZXRhaWwuYXJyaXZhbERhdGVUaW1lO1xyXG4gICAgICAgICAgZGF0YS5zdW1tYXJ5ID0gYFRyYWluIEJvb2tpbmcgLSBGcm9tICR7ZGV0YWlsLm91dHdhcmREZXRhaWwuZGVwYXJ0dXJlU3RhdGlvbk5hbWV9IHRvICR7ZGV0YWlsLm91dHdhcmREZXRhaWwuYXJyaXZhbFN0YXRpb25OYW1lfWA7XHJcbiAgICAgICAgICBkYXRhLmRlc2NyaXB0aW9uID0gW1xyXG4gICAgICAgICAgICBgRnJvbSAke2RldGFpbC5vdXR3YXJkRGV0YWlsLmRlcGFydHVyZVN0YXRpb25OYW1lfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBUbyAke2RldGFpbC5vdXR3YXJkRGV0YWlsLmFycml2YWxTdGF0aW9uTmFtZX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgRGVwYXJ0dXJlICR7bW9tZW50KGRldGFpbC5vdXR3YXJkRGV0YWlsLmRlcGFydHVyZURhdGVUaW1lKS5mb3JtYXQoXHJcbiAgICAgICAgICAgICAgZGF0ZUZvcm1hdFxyXG4gICAgICAgICAgICApfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBBcnJpdmFsICR7bW9tZW50KGRldGFpbC5vdXR3YXJkRGV0YWlsLmFycml2YWxEYXRlVGltZSkuZm9ybWF0KFxyXG4gICAgICAgICAgICAgIGRhdGVGb3JtYXRcclxuICAgICAgICAgICAgKX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQm9va2luZyBSZWY6ICR7Ym9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2V9YFxyXG4gICAgICAgICAgXS5qb2luKCcnKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuUGFya2luZzpcclxuICAgICAgICAgIGRhdGEuYmFza2V0SWQgPSBiYXNrZXRJdGVtLmlkO1xyXG4gICAgICAgICAgZGF0YS5zZXJ2aWNlVHlwZSA9IHNlcnZpY2UudHlwZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgZGF0YS5kU3RhcnQgPSBkZXRhaWw/LmFycml2YWxEYXRldGltZTtcclxuICAgICAgICAgIGRhdGEuZEVuZCA9IGRldGFpbD8uZGVwYXJ0RGF0ZXRpbWU7XHJcbiAgICAgICAgICBkYXRhLnN1bW1hcnkgPSBgQWlycG9ydCBwYXJraW5nIC0gJHtkZXRhaWwubmFtZX1gO1xyXG4gICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IFtcclxuICAgICAgICAgICAgYEFpcnBvcnQgUGFya2luZzogJHtkZXRhaWwubmFtZX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQm9va2luZyBSZWY6ICR7Ym9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2V9YFxyXG4gICAgICAgICAgXS5qb2luKCcnKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuUmFpbDpcclxuICAgICAgICAgIGRhdGEuYmFza2V0SWQgPSBiYXNrZXRJdGVtLmlkO1xyXG4gICAgICAgICAgZGF0YS5zZXJ2aWNlVHlwZSA9IHNlcnZpY2UudHlwZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgZGF0YS5kU3RhcnQgPSBkZXRhaWw/Lm91dHdhcmREZXRhaWwuZGVwYXJ0dXJlRGF0ZVRpbWU7XHJcbiAgICAgICAgICBkYXRhLmRFbmQgPSBkZXRhaWw/Lm91dHdhcmREZXRhaWwuYXJyaXZhbERhdGVUaW1lO1xyXG4gICAgICAgICAgZGF0YS5sb2NhdGlvbkZyb20gPSBkZXRhaWwub3V0d2FyZERldGFpbC5kZXBhcnR1cmVTdGF0aW9uTmFtZTtcclxuICAgICAgICAgIGRhdGEubG9jYXRpb25UbyA9IGRldGFpbC5vdXR3YXJkRGV0YWlsLmFycml2YWxEYXRlVGltZTtcclxuICAgICAgICAgIGRhdGEuc3VtbWFyeSA9IGBUcmFpbiBCb29raW5nIC0gRnJvbSAke2RldGFpbC5vdXR3YXJkRGV0YWlsLmRlcGFydHVyZVN0YXRpb25OYW1lfSB0byAke2RldGFpbC5vdXR3YXJkRGV0YWlsLmFycml2YWxTdGF0aW9uTmFtZX1gO1xyXG4gICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IFtcclxuICAgICAgICAgICAgYEZyb20gJHtkZXRhaWwub3V0d2FyZERldGFpbC5kZXBhcnR1cmVTdGF0aW9uTmFtZX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgVG8gJHtkZXRhaWwub3V0d2FyZERldGFpbC5hcnJpdmFsU3RhdGlvbk5hbWV9XFxyXFxuYCxcclxuICAgICAgICAgICAgYERlcGFydHVyZSAke21vbWVudChkZXRhaWwub3V0d2FyZERldGFpbC5kZXBhcnR1cmVEYXRlVGltZSkuZm9ybWF0KFxyXG4gICAgICAgICAgICAgIGRhdGVGb3JtYXRcclxuICAgICAgICAgICAgKX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQXJyaXZhbCAke21vbWVudChkZXRhaWwub3V0d2FyZERldGFpbC5hcnJpdmFsRGF0ZVRpbWUpLmZvcm1hdChcclxuICAgICAgICAgICAgICBkYXRlRm9ybWF0XHJcbiAgICAgICAgICAgICl9XFxyXFxuYCxcclxuICAgICAgICAgICAgYEJvb2tpbmcgUmVmOiAke2Jvb2tpbmdUaGlyZFBhcnR5UmVmZXJlbmNlfWBcclxuICAgICAgICAgIF0uam9pbignJyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgYm9keUNvbnRlbnQucHVzaChcclxuICAgICAgICBbXHJcbiAgICAgICAgICAnQkVHSU46VkVWRU5UXFxyXFxuJyxcclxuICAgICAgICAgIGRhdGEuZFN0YXJ0XHJcbiAgICAgICAgICAgID8gYERUU1RBUlQ6JHttb21lbnQoZGF0YS5kU3RhcnQpLmZvcm1hdCgnWVlZWU1NRERUSEhtbXNzJyl9XFxyXFxuYFxyXG4gICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgICAgZGF0YS5kRW5kXHJcbiAgICAgICAgICAgID8gYERURU5EOiR7bW9tZW50KGRhdGEuZEVuZCkuZm9ybWF0KCdZWVlZTU1ERFRISG1tc3MnKX1cXHJcXG5gXHJcbiAgICAgICAgICAgIDogJycsXHJcbiAgICAgICAgICAnT1JHQU5JWkVSO0NOPVwiRG8gbm90IHJlcGx5IHRvIHRoaXMgZW1haWxcIjptYWlsdG86ZG9fbm90X3JlcGx5QHNhYnNjb3JwLmNvbVxcclxcbicsXHJcbiAgICAgICAgICBkYXRhLmxvY2F0aW9uVG8gJiYgZGF0YS5sb2NhdGlvbkZyb21cclxuICAgICAgICAgICAgPyBgTE9DQVRJT046ICR7ZGF0YS5sb2NhdGlvblRvfSB0byAke2RhdGEubG9jYXRpb25Gcm9tfSBcXHJcXG5gXHJcbiAgICAgICAgICAgIDogJycsXHJcbiAgICAgICAgICAnVFJBTlNQOk9QQVFVRVxcclxcbicsXHJcbiAgICAgICAgICAnU0VRVUVOQ0U6MFxcclxcbicsXHJcbiAgICAgICAgICBgVUlEOiR7ZGF0YS5zZXJ2aWNlVHlwZX1fJHtpbmRleH1fJHtkYXRhLmJhc2tldElkfUBzYWJzY29ycC5jb21cXHJcXG5gLFxyXG4gICAgICAgICAgYERUU1RBTVA6JHttb21lbnQoKS5mb3JtYXQoJ1lZWVlNTUREVEhIbW1zcycpfVxcclxcbmAsXHJcbiAgICAgICAgICBgREVTQ1JJUFRJT046JHtkYXRhLmRlc2NyaXB0aW9ufVxcclxcbmAsXHJcbiAgICAgICAgICBgU1VNTUFSWToke2RhdGEuc3VtbWFyeX1cXHJcXG5gLFxyXG4gICAgICAgICAgJ0VORDpWRVZFTlRcXHJcXG4nXHJcbiAgICAgICAgXS5qb2luKCcnKVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGJvZHlDb250ZW50LmpvaW4oJycpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2MgLSBjcmVhdGVzIGFuIGVsZW1lbnQgaW4gbWVtb3J5IGFuZCB0cmlnZ2VycyBjbGljayBldmVudCB0byBkb3dubG9hZCBpY3MgZmlsZVxyXG4gICAqL1xyXG4gIGRvd25sb2FkSWNzKGZpbGVuYW1lOiBzdHJpbmcsIHRleHQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFxyXG4gICAgICAnaHJlZicsXHJcbiAgICAgICdkYXRhOnRleHQvcGxhaW47Y2hhcnNldD11dGYtOCwnICsgZW5jb2RlVVJJQ29tcG9uZW50KHRleHQpXHJcbiAgICApO1xyXG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZmlsZW5hbWUpO1xyXG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RhcmdldCcsICdfYmxhbmsnKTtcclxuICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgIGVsZW1lbnQuY2xpY2soKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIHNwbGl0IGEgc3RyaW5nIG9uIGNhcGl0YWxzXHJcbiAgICogQHBhcmFtIHJhd1N0cmluZyAtIHRoZSBzdHJpbmcgd2Ugd2FudCB0byBzcGxpdFxyXG4gICAqIEBwYXJhbSBqb2luIC0gd2hldGhlciBvciBub3QgdG8gam9pbmcgdGhlIHNwbGl0IGludG8gb25lIHN0cmluZywgc2VwZXJhdGVkIGJ5IGEgc3BhY2VcclxuICAgKiBAcmV0dXJucyBzdHJpbmcvc3RyaW5nW11cclxuICAgKi9cclxuICBzcGxpdFN0cmluZ09uQ2FwaXRhbHMoXHJcbiAgICByYXdTdHJpbmc6IHN0cmluZyxcclxuICAgIGpvaW46IGJvb2xlYW4gPSBmYWxzZVxyXG4gICk6IHN0cmluZyB8IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IHNwbGl0U3RyaW5nID0gcmF3U3RyaW5nLnNwbGl0KC8oPz1bQS1aXSkvKTtcclxuXHJcbiAgICBpZiAoam9pbikge1xyXG4gICAgICByZXR1cm4gc3BsaXRTdHJpbmcuam9pbignICcpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzcGxpdFN0cmluZztcclxuICB9XHJcblxyXG4gIGNyZWF0ZUZsaWdodEZpbHRlcnMoXHJcbiAgICBqb3VybmV5czogRmxpZ2h0SXRpbmVyYXJ5W10sXHJcbiAgICBkZWZhdWx0RmlsdGVyczogRmxpZ2h0RmlsdGVyc1xyXG4gICk6IEZsaWdodEZpbHRlcnMge1xyXG4gICAgcmV0dXJuIGpvdXJuZXlzLnJlZHVjZShcclxuICAgICAgKGZpbHRlcnM6IEZsaWdodEZpbHRlcnMsIHJlc3VsdDE6IEZsaWdodEl0aW5lcmFyeSk6IEZsaWdodEZpbHRlcnMgPT4ge1xyXG4gICAgICAgIGNvbnN0IG91dFN0b3BzID0gcmVzdWx0MS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMTtcclxuICAgICAgICBmaWx0ZXJzLnN0b3BzW291dFN0b3BzXSA9IGZpbHRlcnMuc3RvcHNbb3V0U3RvcHNdIHx8IHtcclxuICAgICAgICAgIGRpc3BsYXk6XHJcbiAgICAgICAgICAgIG91dFN0b3BzID09PSAwXHJcbiAgICAgICAgICAgICAgPyAnRGlyZWN0J1xyXG4gICAgICAgICAgICAgIDogYCR7b3V0U3RvcHN9IHN0b3BgICsgKG91dFN0b3BzICE9PSAxID8gJ3MnIDogJycpLFxyXG4gICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgdmFsdWU6IG91dFN0b3BzICsgMVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGluU3RvcHMgPSByZXN1bHQxLmluYm91bmRGbGlnaHRzXHJcbiAgICAgICAgICA/IHJlc3VsdDEuaW5ib3VuZEZsaWdodHMubGVuZ3RoIC0gMVxyXG4gICAgICAgICAgOiAwO1xyXG4gICAgICAgIGNvbnN0IHRvdGFsU3RvcHMgPSBpblN0b3BzID4gb3V0U3RvcHMgPyBpblN0b3BzIDogb3V0U3RvcHM7XHJcbiAgICAgICAgZmlsdGVycy50b3RhbFN0b3BzW3RvdGFsU3RvcHNdID0gZmlsdGVycy50b3RhbFN0b3BzW3RvdGFsU3RvcHNdIHx8IHtcclxuICAgICAgICAgIGRpc3BsYXk6XHJcbiAgICAgICAgICAgIHRvdGFsU3RvcHMgPT09IDBcclxuICAgICAgICAgICAgICA/ICdEaXJlY3QnXHJcbiAgICAgICAgICAgICAgOiBgJHt0b3RhbFN0b3BzfSBzdG9wYCArICh0b3RhbFN0b3BzICE9PSAxID8gJ3MnIDogJycpLFxyXG4gICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgdmFsdWU6IHRvdGFsU3RvcHMgKyAxXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgdXBkYXRlRmxpZ2h0SXRlbXMgPSAoZmxpZ2h0OiBGbGlnaHRKb3VybmV5KTogdm9pZCA9PiB7XHJcbiAgICAgICAgICBmaWx0ZXJzLmNsYXNzZXNbZmxpZ2h0LmNhYmluQ2xhc3NdID0gZmlsdGVycy5jbGFzc2VzW1xyXG4gICAgICAgICAgICBmbGlnaHQuY2FiaW5DbGFzc1xyXG4gICAgICAgICAgXSB8fCB7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsaWdodC5jYWJpbkNsYXNzLFxyXG4gICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmbGlnaHQuY2FiaW5DbGFzc1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGZpbHRlcnMuYWlybGluZXNbZmxpZ2h0Lm1hcmtldGluZ0NhcnJpZXJdID0gZmlsdGVycy5haXJsaW5lc1tcclxuICAgICAgICAgICAgZmxpZ2h0Lm1hcmtldGluZ0NhcnJpZXJcclxuICAgICAgICAgIF0gfHwge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGlnaHQubWFya2V0aW5nQ2Fycmllck5hbWUsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgdmFsdWU6IGZsaWdodC5tYXJrZXRpbmdDYXJyaWVyXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmVzdWx0MS5vdXRib3VuZEZsaWdodHMuZm9yRWFjaCh1cGRhdGVGbGlnaHRJdGVtcyk7XHJcbiAgICAgICAgY29uc3QgYmFnZ2FnZUFycmF5OiBudW1iZXJbXSA9IHJlc3VsdDEuYmFnZ2FnZUFsbG93YW5jZS5tYXAoXHJcbiAgICAgICAgICAoYmFnZ2FnZUFsbG93YW5jZTogQmFnZ2FnZUFsbG93YW5jZSkgPT4gYmFnZ2FnZUFsbG93YW5jZS5xdHlcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGJhZ2dhZ2U6IG51bWJlciA9IGJhZ2dhZ2VBcnJheS5sZW5ndGhcclxuICAgICAgICAgID8gTWF0aC5taW4oLi4uYmFnZ2FnZUFycmF5KVxyXG4gICAgICAgICAgOiAwO1xyXG4gICAgICAgIGZpbHRlcnMuYmFnZ2FnZVtiYWdnYWdlXSA9IGZpbHRlcnMuYmFnZ2FnZVtiYWdnYWdlXSB8fCB7XHJcbiAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXHJcbiAgICAgICAgICBkaXNwbGF5OiBgJHtiYWdnYWdlfSBiYWcke2JhZ2dhZ2UgPiAxID8gJ3MnIDogJyd9YCxcclxuICAgICAgICAgIHZhbHVlOiBiYWdnYWdlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBpbmRleGVkRmxpZ2h0ID0gKFxyXG4gICAgICAgICAgZmxpZ2h0czogRmxpZ2h0Sm91cm5leVtdLFxyXG4gICAgICAgICAgZmlsdGVyQXR0cmlidXRlOiBGbGlnaHRGaWx0ZXJzUmVjb3JkS2V5cyxcclxuICAgICAgICAgIGZsaWdodEF0dHJpYnV0ZToga2V5b2YgRmxpZ2h0Sm91cm5leSxcclxuICAgICAgICAgIGZsaWdodEF0dHJpYnV0ZU5hbWU6IGtleW9mIEZsaWdodEpvdXJuZXksXHJcbiAgICAgICAgICBpbmRleDogbnVtYmVyXHJcbiAgICAgICAgKTogdm9pZCA9PiB7XHJcbiAgICAgICAgICBjb25zdCB0ZW1wOiBzdHJpbmcgPVxyXG4gICAgICAgICAgICBmbGlnaHRzICYmIGZsaWdodHNbaW5kZXhdXHJcbiAgICAgICAgICAgICAgPyBmbGlnaHRzW2luZGV4XVtmbGlnaHRBdHRyaWJ1dGVdXHJcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICBpZiAodGVtcCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcnNbZmlsdGVyQXR0cmlidXRlXVt0ZW1wXSA9IGZpbHRlcnNbZmlsdGVyQXR0cmlidXRlXVt0ZW1wXSB8fCB7XHJcbiAgICAgICAgICAgICAgdmFsdWU6IGZsaWdodHNbaW5kZXhdW2ZsaWdodEF0dHJpYnV0ZV0sXHJcbiAgICAgICAgICAgICAgZGlzcGxheTogZmxpZ2h0c1tpbmRleF1bZmxpZ2h0QXR0cmlidXRlTmFtZV0sXHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpbmRleGVkRmxpZ2h0KFxyXG4gICAgICAgICAgcmVzdWx0MS5vdXRib3VuZEZsaWdodHMsXHJcbiAgICAgICAgICAnZGVwYXR1cmVBaXJwb3J0JyxcclxuICAgICAgICAgICdvcmlnaW5BaXJwb3J0JyxcclxuICAgICAgICAgICdvcmlnaW5BaXJwb3J0TmFtZScsXHJcbiAgICAgICAgICAwXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpbmRleGVkRmxpZ2h0KFxyXG4gICAgICAgICAgcmVzdWx0MS5vdXRib3VuZEZsaWdodHMsXHJcbiAgICAgICAgICAnYXJyaXZhbEFpcnBvcnQnLFxyXG4gICAgICAgICAgJ2Rlc3RpbmF0aW9uQWlycG9ydCcsXHJcbiAgICAgICAgICAnZGVzdGluYXRpb25BaXJwb3J0TmFtZScsXHJcbiAgICAgICAgICByZXN1bHQxLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgZmlsdGVycy5wcmljZS5taW4gPVxyXG4gICAgICAgICAgZmlsdGVycy5wcmljZS5taW4gPCByZXN1bHQxLnRvdGFsLnByaWNlXHJcbiAgICAgICAgICAgID8gZmlsdGVycy5wcmljZS5taW5cclxuICAgICAgICAgICAgOiByZXN1bHQxLnRvdGFsLnByaWNlO1xyXG5cclxuICAgICAgICBmaWx0ZXJzLnByaWNlLm1heCA9XHJcbiAgICAgICAgICBmaWx0ZXJzLnByaWNlLm1heCA+IHJlc3VsdDEudG90YWwucHJpY2VcclxuICAgICAgICAgICAgPyBmaWx0ZXJzLnByaWNlLm1heFxyXG4gICAgICAgICAgICA6IHJlc3VsdDEudG90YWwucHJpY2U7XHJcblxyXG4gICAgICAgIGZpbHRlcnMuZHVyYXRpb24ubWluID1cclxuICAgICAgICAgIGZpbHRlcnMuZHVyYXRpb24ubWluIDwgcmVzdWx0MS5vdXRib3VuZFRvdGFsRHVyYXRpb25cclxuICAgICAgICAgICAgPyBmaWx0ZXJzLmR1cmF0aW9uLm1pblxyXG4gICAgICAgICAgICA6IHJlc3VsdDEub3V0Ym91bmRUb3RhbER1cmF0aW9uO1xyXG5cclxuICAgICAgICBmaWx0ZXJzLmR1cmF0aW9uLm1heCA9XHJcbiAgICAgICAgICBmaWx0ZXJzLmR1cmF0aW9uLm1heCA+IHJlc3VsdDEub3V0Ym91bmRUb3RhbER1cmF0aW9uXHJcbiAgICAgICAgICAgID8gZmlsdGVycy5kdXJhdGlvbi5tYXhcclxuICAgICAgICAgICAgOiByZXN1bHQxLm91dGJvdW5kVG90YWxEdXJhdGlvbjtcclxuXHJcbiAgICAgICAgY29uc3QgZGVwYXJ0VGltZSA9IG1vbWVudChcclxuICAgICAgICAgIHJlc3VsdDEub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nXHJcbiAgICAgICAgKS5nZXQoJ2hvdXInKTtcclxuXHJcbiAgICAgICAgZmlsdGVycy5kZXBhcnR1cmVUaW1lLm1pbiA9XHJcbiAgICAgICAgICBmaWx0ZXJzLmRlcGFydHVyZVRpbWUubWluIDwgZGVwYXJ0VGltZVxyXG4gICAgICAgICAgICA/IGZpbHRlcnMuZGVwYXJ0dXJlVGltZS5taW5cclxuICAgICAgICAgICAgOiBkZXBhcnRUaW1lO1xyXG4gICAgICAgIGZpbHRlcnMuZGVwYXJ0dXJlVGltZS5tYXggPVxyXG4gICAgICAgICAgZmlsdGVycy5kZXBhcnR1cmVUaW1lLm1heCA+IGRlcGFydFRpbWVcclxuICAgICAgICAgICAgPyBmaWx0ZXJzLmRlcGFydHVyZVRpbWUubWF4XHJcbiAgICAgICAgICAgIDogZGVwYXJ0VGltZTtcclxuXHJcbiAgICAgICAgY29uc3QgYXJyaXZhbFRpbWUgPSBtb21lbnQoXHJcbiAgICAgICAgICByZXN1bHQxLm91dGJvdW5kRmxpZ2h0c1tyZXN1bHQxLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXVxyXG4gICAgICAgICAgICAuZGF0ZVRpbWVBcnJpdmluZ1xyXG4gICAgICAgICkuZ2V0KCdob3VyJyk7XHJcblxyXG4gICAgICAgIGZpbHRlcnMuYXJyaXZhbFRpbWUubWluID1cclxuICAgICAgICAgIGZpbHRlcnMuYXJyaXZhbFRpbWUubWluIDwgYXJyaXZhbFRpbWVcclxuICAgICAgICAgICAgPyBmaWx0ZXJzLmFycml2YWxUaW1lLm1pblxyXG4gICAgICAgICAgICA6IGFycml2YWxUaW1lO1xyXG4gICAgICAgIGZpbHRlcnMuYXJyaXZhbFRpbWUubWF4ID1cclxuICAgICAgICAgIGZpbHRlcnMuYXJyaXZhbFRpbWUubWF4ID4gYXJyaXZhbFRpbWVcclxuICAgICAgICAgICAgPyBmaWx0ZXJzLmFycml2YWxUaW1lLm1heFxyXG4gICAgICAgICAgICA6IGFycml2YWxUaW1lO1xyXG5cclxuICAgICAgICBpZiAocmVzdWx0MS5pbmJvdW5kRmxpZ2h0cyAmJiByZXN1bHQxLmluYm91bmRGbGlnaHRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGZpbHRlcnMucmV0dXJuRHVyYXRpb24ubWluID1cclxuICAgICAgICAgICAgZmlsdGVycy5yZXR1cm5EdXJhdGlvbi5taW4gPCByZXN1bHQxLmluYm91bmRUb3RhbER1cmF0aW9uXHJcbiAgICAgICAgICAgICAgPyBmaWx0ZXJzLnJldHVybkR1cmF0aW9uLm1pblxyXG4gICAgICAgICAgICAgIDogcmVzdWx0MS5pbmJvdW5kVG90YWxEdXJhdGlvbjtcclxuXHJcbiAgICAgICAgICBmaWx0ZXJzLnJldHVybkR1cmF0aW9uLm1heCA9XHJcbiAgICAgICAgICAgIGZpbHRlcnMucmV0dXJuRHVyYXRpb24ubWF4ID4gcmVzdWx0MS5pbmJvdW5kVG90YWxEdXJhdGlvblxyXG4gICAgICAgICAgICAgID8gZmlsdGVycy5yZXR1cm5EdXJhdGlvbi5tYXhcclxuICAgICAgICAgICAgICA6IHJlc3VsdDEuaW5ib3VuZFRvdGFsRHVyYXRpb247XHJcblxyXG4gICAgICAgICAgY29uc3QgZGVwYXJ0VGltZVJldHVybiA9XHJcbiAgICAgICAgICAgIHJlc3VsdDEgJiYgcmVzdWx0MS5pbmJvdW5kRmxpZ2h0cyAmJiByZXN1bHQxLmluYm91bmRGbGlnaHRzWzBdXHJcbiAgICAgICAgICAgICAgPyBtb21lbnQocmVzdWx0MS5pbmJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZykuZ2V0KCdob3VyJylcclxuICAgICAgICAgICAgICA6IC0xO1xyXG5cclxuICAgICAgICAgIGZpbHRlcnMucmV0dXJuRGVwYXJ0dXJlVGltZS5taW4gPVxyXG4gICAgICAgICAgICBmaWx0ZXJzLnJldHVybkRlcGFydHVyZVRpbWUubWluIDwgZGVwYXJ0VGltZVJldHVyblxyXG4gICAgICAgICAgICAgID8gZmlsdGVycy5yZXR1cm5EZXBhcnR1cmVUaW1lLm1pblxyXG4gICAgICAgICAgICAgIDogZGVwYXJ0VGltZVJldHVybjtcclxuICAgICAgICAgIGZpbHRlcnMucmV0dXJuRGVwYXJ0dXJlVGltZS5tYXggPVxyXG4gICAgICAgICAgICBmaWx0ZXJzLnJldHVybkRlcGFydHVyZVRpbWUubWF4ID4gZGVwYXJ0VGltZVJldHVyblxyXG4gICAgICAgICAgICAgID8gZmlsdGVycy5yZXR1cm5EZXBhcnR1cmVUaW1lLm1heFxyXG4gICAgICAgICAgICAgIDogZGVwYXJ0VGltZVJldHVybjtcclxuXHJcbiAgICAgICAgICBjb25zdCBhcnJpdmFsVGltZVJldHVybiA9IG1vbWVudChcclxuICAgICAgICAgICAgcmVzdWx0MS5vdXRib3VuZEZsaWdodHNbcmVzdWx0MS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMV1cclxuICAgICAgICAgICAgICAuZGF0ZVRpbWVBcnJpdmluZ1xyXG4gICAgICAgICAgKS5nZXQoJ2hvdXInKTtcclxuXHJcbiAgICAgICAgICBmaWx0ZXJzLnJldHVybkFycml2YWxUaW1lLm1pbiA9XHJcbiAgICAgICAgICAgIGZpbHRlcnMucmV0dXJuQXJyaXZhbFRpbWUubWluIDwgYXJyaXZhbFRpbWVSZXR1cm5cclxuICAgICAgICAgICAgICA/IGZpbHRlcnMucmV0dXJuQXJyaXZhbFRpbWUubWluXHJcbiAgICAgICAgICAgICAgOiBhcnJpdmFsVGltZVJldHVybjtcclxuICAgICAgICAgIGZpbHRlcnMucmV0dXJuQXJyaXZhbFRpbWUubWF4ID1cclxuICAgICAgICAgICAgZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZS5tYXggPiBhcnJpdmFsVGltZVJldHVyblxyXG4gICAgICAgICAgICAgID8gZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZS5tYXhcclxuICAgICAgICAgICAgICA6IGFycml2YWxUaW1lUmV0dXJuO1xyXG5cclxuICAgICAgICAgIChyZXN1bHQxLmluYm91bmRGbGlnaHRzIHx8IFtdKS5mb3JFYWNoKHVwZGF0ZUZsaWdodEl0ZW1zKTtcclxuICAgICAgICAgIGluZGV4ZWRGbGlnaHQoXHJcbiAgICAgICAgICAgIHJlc3VsdDEuaW5ib3VuZEZsaWdodHMsXHJcbiAgICAgICAgICAgICdkZXBhdHVyZVJldHVybkFpcnBvcnQnLFxyXG4gICAgICAgICAgICAnb3JpZ2luQWlycG9ydCcsXHJcbiAgICAgICAgICAgICdvcmlnaW5BaXJwb3J0TmFtZScsXHJcbiAgICAgICAgICAgIDBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpbmRleGVkRmxpZ2h0KFxyXG4gICAgICAgICAgICByZXN1bHQxLmluYm91bmRGbGlnaHRzLFxyXG4gICAgICAgICAgICAnYXJyaXZhbFJldHVybkFpcnBvcnQnLFxyXG4gICAgICAgICAgICAnZGVzdGluYXRpb25BaXJwb3J0JyxcclxuICAgICAgICAgICAgJ2Rlc3RpbmF0aW9uQWlycG9ydE5hbWUnLFxyXG4gICAgICAgICAgICByZXN1bHQxLmluYm91bmRGbGlnaHRzLmxlbmd0aCAtIDFcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmaWx0ZXJzO1xyXG4gICAgICB9LFxyXG4gICAgICB0aGlzLmNsb25lKGRlZmF1bHRGaWx0ZXJzKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG1hcE92ZXJPYmplY3Q8Vj4oXHJcbiAgICBpdGVtczogUmVjb3JkPHN0cmluZyB8IG51bWJlciwgVj4sXHJcbiAgICBjYWxsYmFjazogKHZhbHVlOiBWLCBrZXk/OiBzdHJpbmcgfCBudW1iZXIpID0+IFZcclxuICApOiBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyLCBWPiB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoaXRlbXMpLnJlZHVjZShcclxuICAgICAgKGFjY3VtOiBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyLCBWPiwgZW50cmllczogW3N0cmluZyB8IG51bWJlciwgVl0pID0+IHtcclxuICAgICAgICBhY2N1bVtlbnRyaWVzWzBdXSA9IGNhbGxiYWNrKGVudHJpZXNbMV0sIGVudHJpZXNbMF0pO1xyXG4gICAgICAgIHJldHVybiBhY2N1bTtcclxuICAgICAgfSxcclxuICAgICAge30gYXMgUmVjb3JkPHN0cmluZyB8IG51bWJlciwgVj5cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBub3JtYWxpc2VNaW51dGVUb0Jhc2UxMChtaW46IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gTWF0aC5yb3VuZCgobWluICogMTAwKSAvIDYwKTtcclxuICB9XHJcblxyXG4gIE9CVEZsaWdodENhYmluQ2xhc3NUb0ZsaWdodENhYmluQ2xhc3MoXHJcbiAgICB2YWx1ZTogT0JURmxpZ2h0Q2FiaW5DbGFzc1xyXG4gICk6IE1haW5GbGlnaHRDYWJpbkNsYXNzIHtcclxuICAgIGNvbnN0IE9CVEZsaWdodENhYmluQ2xhc3NUb0ZsaWdodENhYmluQ2xhc3M6IFJlY29yZDxcclxuICAgICAgT0JURmxpZ2h0Q2FiaW5DbGFzcyxcclxuICAgICAgTWFpbkZsaWdodENhYmluQ2xhc3NcclxuICAgID4gPSB7XHJcbiAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzXTogRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzcyxcclxuICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3NCcmFuZGVkXTogRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzcyxcclxuICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teUZsZXhpXTogRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215RmxleGksXHJcbiAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aUJyYW5kZWRdOiBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aSxcclxuICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFnc106IEZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFncyxcclxuICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFnc0JyYW5kZWRdOlxyXG4gICAgICAgIEZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFncyxcclxuICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWRdOlxyXG4gICAgICAgIEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWQsXHJcbiAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkQnJhbmRlZF06XHJcbiAgICAgICAgRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZCxcclxuICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRmlyc3RdOiBGbGlnaHRDYWJpbkNsYXNzLkZpcnN0LFxyXG4gICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdEJyYW5kZWRdOiBGbGlnaHRDYWJpbkNsYXNzLkZpcnN0LFxyXG4gICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teV06IEZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXksXHJcbiAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215QnJhbmRlZF06XHJcbiAgICAgICAgRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teVxyXG4gICAgfTtcclxuICAgIHJldHVybiBPQlRGbGlnaHRDYWJpbkNsYXNzVG9GbGlnaHRDYWJpbkNsYXNzW3ZhbHVlXTtcclxuICB9XHJcbiAgRmxpZ2h0Q2FiaW5DbGFzc1RvQnJhbmRlZE9CVEZsaWdodENhYmluQ2xhc3MoXHJcbiAgICB2YWx1ZTogRmxpZ2h0R3JvdXBzLFxyXG4gICAgaXNCcmFuZGVkOiBib29sZWFuXHJcbiAgKTogT0JURmxpZ2h0Q2FiaW5DbGFzcyB7XHJcbiAgICBjb25zdCB0eXBlczogUmVjb3JkPEZsaWdodEdyb3VwcywgT0JURmxpZ2h0Q2FiaW5DbGFzcz4gPSBpc0JyYW5kZWRcclxuICAgICAgPyB7XHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teV06XHJcbiAgICAgICAgICAgIE9CVEZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXlCcmFuZGVkLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUJ1c2luZXNzXTpcclxuICAgICAgICAgICAgT0JURmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzc0JyYW5kZWQsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5MaXRlRWNvbm9teV06XHJcbiAgICAgICAgICAgIE9CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWRCcmFuZGVkLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuRWNvbm9teV06XHJcbiAgICAgICAgICAgIE9CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWRCcmFuZGVkLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUZpcnN0XTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdEJyYW5kZWQsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZF06XHJcbiAgICAgICAgICAgIE9CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWRCcmFuZGVkLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXldOlxyXG4gICAgICAgICAgICBPQlRGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215QnJhbmRlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aV06XHJcbiAgICAgICAgICAgIE9CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teUZsZXhpQnJhbmRlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3NdOlxyXG4gICAgICAgICAgICBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3NCcmFuZGVkLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3NdOiBPQlRGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzQnJhbmRlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkZpcnN0XTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdEJyYW5kZWRcclxuICAgICAgICB9XHJcbiAgICAgIDoge1xyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXldOiBPQlRGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215LFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUJ1c2luZXNzXTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzcyxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkxpdGVFY29ub215XTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXldOiBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUZpcnN0XTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkXTpcclxuICAgICAgICAgICAgT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215XTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teSxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aV06IE9CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teUZsZXhpLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFnc106IE9CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFncyxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzXTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzcyxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkZpcnN0XTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdFxyXG4gICAgICAgIH07XHJcbiAgICByZXR1cm4gdHlwZXNbdmFsdWVdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gY29udmVydCBmcm9tIG1ldHJlcyB0byBtaWxlc1xyXG4gICAqIEBwYXJhbSBtZXRyZXMgLSB0aGUgYW1vdW50IG9mIG1ldHJlcyB0byBjb252ZXJ0XHJcbiAgICogQHBhcmFtIGRlY2ltYWxQbGFjZXMgLSB0aGUgYW1vdW50IG9mIGQucCB0byBjb252ZXJ0IHRvLCBpZiBuZWdhdGl2ZSAoZGVmYXVsdCkgZG9lcyBub3QgcmVzdHJpY3QgdGhlIGRlY2ltYWwgcGxhY2VzXHJcbiAgICovXHJcbiAgY29udmVydE1ldHJlc1RvTWlsZXMobWV0cmVzOiBudW1iZXIsIGRlY2ltYWxQbGFjZXM6IG51bWJlciA9IC0xKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IG1pbGVzID0gbWV0cmVzIC8gTUVUUkVTX1RPX01JTEVTX0NPTlZFUlNJT047XHJcblxyXG4gICAgaWYgKGRlY2ltYWxQbGFjZXMgPj0gMCkge1xyXG4gICAgICByZXR1cm4gTnVtYmVyKG1pbGVzLnRvRml4ZWQoZGVjaW1hbFBsYWNlcykpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBtaWxlcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGNvbnZlcnQgc2Vjb25kcyB0byBob3Vyc1xyXG4gICAqIEBwYXJhbSBzZWNvbmRzIC0gdG8gY29udmVydFxyXG4gICAqIEBwYXJhbSBkZWNpbWFsUGxhY2VzIC0gdGhlIGFtb3VudCBvZiBkLnAgdG8gY29udmVydCB0bywgaWYgbmVnYXRpdmUgKGRlZmF1bHQpIGRvZXMgbm90IHJlc3RyaWN0IHRoZSBkZWNpbWFsIHBsYWNlc1xyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgY29udmVydFNlY29uZHNUb0hvdXJzKHNlY29uZHM6IG51bWJlciwgZGVjaW1hbFBsYWNlczogbnVtYmVyID0gLTEpOiBudW1iZXIge1xyXG4gICAgY29uc3QgaG91cnMgPSBzZWNvbmRzIC8gVElNRV9CQVNFIC8gVElNRV9CQVNFO1xyXG5cclxuICAgIGlmIChkZWNpbWFsUGxhY2VzID49IDApIHtcclxuICAgICAgcmV0dXJuIE51bWJlcihob3Vycy50b0ZpeGVkKGRlY2ltYWxQbGFjZXMpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaG91cnM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBjb252ZXJ0IHNlY29uZHMgdG8gbWluc1xyXG4gICAqIEBwYXJhbSBzZWNvbmRzIC0gdG8gY29udmVydFxyXG4gICAqIEBwYXJhbSBkZWNpbWFsUGxhY2VzIC0gdGhlIGFtb3VudCBvZiBkLnAgdG8gY29udmVydCB0bywgaWYgbmVnYXRpdmUgKGRlZmF1bHQpIGRvZXMgbm90IHJlc3RyaWN0IHRoZSBkZWNpbWFsIHBsYWNlc1xyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgY29udmVydFNlY29uZHNUb01pbnMoc2Vjb25kczogbnVtYmVyLCBkZWNpbWFsUGxhY2VzOiBudW1iZXIgPSAtMSk6IG51bWJlciB7XHJcbiAgICBjb25zdCBob3VycyA9IHNlY29uZHMgLyBUSU1FX0JBU0U7XHJcblxyXG4gICAgaWYgKGRlY2ltYWxQbGFjZXMgPj0gMCkge1xyXG4gICAgICByZXR1cm4gTnVtYmVyKGhvdXJzLnRvRml4ZWQoZGVjaW1hbFBsYWNlcykpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBob3VycztcclxuICB9XHJcblxyXG4gIGFkZFJhaWxBY3Rpb25SdWxlcyhcclxuICAgIGZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSxcclxuICAgIHJ1bGVzOiBSdWxlc1tdXHJcbiAgKTogT0JUUmFpbEpvdXJuZXlGYXJlIHtcclxuICAgIHJldHVybiBydWxlcy5yZWR1Y2UoKGZhcmUxOiBPQlRSYWlsSm91cm5leUZhcmUsIHJ1bGU6IFJ1bGVzKSA9PiB7XHJcbiAgICAgIGlmIChpc1NldChydWxlPy51bmF2YWlsYWJsZSkpIHtcclxuICAgICAgICBmYXJlMS51bmF2YWlsYWJsZSA9IHJ1bGUudW5hdmFpbGFibGUgYXMgYm9vbGVhbjtcclxuICAgICAgICBmYXJlMS51bmF2YWlsYWJsZU1lc3NhZ2UgPSBydWxlLnVuYXZhaWxhYmxlTWVzc2FnZSBhcyBzdHJpbmc7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGlzU2V0KHJ1bGU/LnJlcXVpcmVzUmVhc29uKSkge1xyXG4gICAgICAgIGZhcmUxLnJlcXVpcmVzUmVhc29uID0gcnVsZS5yZXF1aXJlc1JlYXNvbiBhcyBib29sZWFuO1xyXG4gICAgICAgIGZhcmUxLnJlcXVpcmVzUmVhc29uTWVzc2FnZSA9IHJ1bGUucmVxdWlyZXNSZWFzb25NZXNzYWdlIGFzIHN0cmluZztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFyZTE7XHJcbiAgICB9LCBmYXJlKTtcclxuICB9XHJcblxyXG4gIG1hcDxUPihvYmo6IFJlY29yZDxzdHJpbmcsIFQ+LCBmdW5jOiAobmV4dDogVCkgPT4gVCk6IFJlY29yZDxzdHJpbmcsIFQ+IHtcclxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKFxyXG4gICAgICB7fSxcclxuICAgICAgLi4uT2JqZWN0LmVudHJpZXMob2JqKS5tYXAoKFtrZXksIHZhbHVlXTogW3N0cmluZywgVF0pOiBSZWNvcmQ8XHJcbiAgICAgICAgc3RyaW5nLFxyXG4gICAgICAgIFRcclxuICAgICAgPiA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIFtrZXldOiBmdW5jKHZhbHVlKVxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbWVyZ2VPYmplY3RzPFQ+KC4uLm9ianM6IFRbXSk6IFQge1xyXG4gICAgcmV0dXJuIG9ianMucmVkdWNlKChjdXJyZW50OiBULCBuZXh0OiBUKSA9PiB7XHJcbiAgICAgIHJldHVybiBfLm1lcmdlKGN1cnJlbnQsIG5leHQpIGFzIFQ7XHJcbiAgICB9LCB7fSBhcyBUKTtcclxuICB9XHJcblxyXG4gIGludGVyY2VwdE1ldGhvZENhbGxzPFQgZXh0ZW5kcyBvYmplY3Q+KFxyXG4gICAgb2JqOiBULFxyXG4gICAgZm46IChwcm9wOiBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2wsIGFyZzogYW55W10pID0+IGFueVxyXG4gICk6IFQge1xyXG4gICAgcmV0dXJuIG5ldyBQcm94eShvYmosIHtcclxuICAgICAgZ2V0KHRhcmdldDogYW55LCBwcm9wOiBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2wpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHRhcmdldFtwcm9wXSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm94eSh0YXJnZXRbcHJvcF0sIHtcclxuICAgICAgICAgICAgYXBwbHk6ICh0YXJnZXQxLCB0aGlzQXJnLCBhcmd1bWVudHNMaXN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgZm4ocHJvcCwgYXJndW1lbnRzTGlzdCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkodGFyZ2V0MSwgdGhpc0FyZywgYXJndW1lbnRzTGlzdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pIGFzIHVua25vd24gYXMgVDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCB0aGUgcHJldmlvdXMgcXVhcnRlciBob3VyIGUuZy4gaWYgMjkgbWlucyAtIHJldHVybiAxNVxyXG4gICAqIEBwYXJhbSBkYXRlVGltZSAtIGRhdGUvdGltZSBpbiBtb21lbnQgZm9ybWF0XHJcbiAgICogQHJldHVybnMgbW9tZW50XHJcbiAgICovXHJcbiAgZ2V0Um91bmRlZERvd25RdWFydGVySG91cihkYXRlVGltZTogbW9tZW50Lk1vbWVudCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgY29uc3QgbWlucyA9IGRhdGVUaW1lLm1pbnV0ZXMoKTtcclxuXHJcbiAgICBpZiAobWlucyA8PSAxNSkge1xyXG4gICAgICBkYXRlVGltZS5zZXQoJ21pbnV0ZXMnLCAwKTtcclxuICAgIH0gZWxzZSBpZiAobWlucyA8PSAzMCkge1xyXG4gICAgICBkYXRlVGltZS5zZXQoJ21pbnV0ZXMnLCAxNSk7XHJcbiAgICB9IGVsc2UgaWYgKG1pbnMgPD0gNDUpIHtcclxuICAgICAgZGF0ZVRpbWUuc2V0KCdtaW51dGVzJywgMzApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGF0ZVRpbWUuc2V0KCdtaW51dGVzJywgNDUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkYXRlVGltZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCByb3VuZGVkIHVwIHF1YXJ0ZXIgaG91ciBlLmcuIGlmIDI5IC0gcmV0dXJuIDMwXHJcbiAgICogQHBhcmFtIGRhdGVUaW1lIC0gZGF0ZS90aW1lIGluIG1vbWVudCBmb3JtYXRcclxuICAgKiBAcmV0dXJucyBtb21lbnRcclxuICAgKi9cclxuICBnZXRSb3VuZGVkVXBRdWFydGVySG91cihkYXRlVGltZTogbW9tZW50Lk1vbWVudCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgY29uc3QgbWlucyA9IGRhdGVUaW1lLm1pbnV0ZXMoKTtcclxuXHJcbiAgICBpZiAobWlucyA8PSAxNSkge1xyXG4gICAgICBkYXRlVGltZS5zZXQoJ21pbnV0ZXMnLCAxNSk7XHJcbiAgICB9IGVsc2UgaWYgKG1pbnMgPD0gMzApIHtcclxuICAgICAgZGF0ZVRpbWUuc2V0KCdtaW51dGVzJywgMzApO1xyXG4gICAgfSBlbHNlIGlmIChtaW5zIDw9IDQ1KSB7XHJcbiAgICAgIGRhdGVUaW1lLnNldCgnbWludXRlcycsIDQ1KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRhdGVUaW1lLnNldCgnbWludXRlcycsIDApO1xyXG4gICAgICBkYXRlVGltZS5hZGQoMSwgJ2hvdXInKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGF0ZVRpbWU7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc1NldChvYmo6IGFueSk6IGJvb2xlYW4ge1xyXG4gIHJldHVybiBvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGw7XHJcbn1cclxuIl19
1403
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBVXZCLE9BQU8sRUFDTCxtQkFBbUIsRUFLbkIsbUJBQW1CLEVBSXBCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUtMLGdCQUFnQixFQUdoQixhQUFhLEVBRWIsV0FBVyxFQUVaLE1BQU0sd0JBQXdCLENBQUM7QUFFaEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBU2pELE1BQU0sMEJBQTBCLEdBQUcsRUFBRSxDQUFDO0FBQ3RDLE1BQU0sd0JBQXdCLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLE1BQU0sNEJBQTRCLEdBQUcsRUFBRSxDQUFDO0FBQ3hDLE1BQU0seUJBQXlCLEdBQUcsRUFBRSxDQUFDO0FBQ3JDLE1BQU0sMkJBQTJCLEdBQUcsRUFBRSxDQUFDO0FBQ3ZDLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLE1BQU0sNEJBQTRCLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUNyQixNQUFNLGtCQUFrQixHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUUxRixNQUFNLE9BQU8sa0JB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LFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDO0FBQzNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XHJcblxyXG5pbXBvcnQgeyBUcmF2ZWxsZXIgfSBmcm9tICcuLi9tb2RlbHMvdHJhdmVsbGVyLm9iamVjdCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2tldERldGFpbHMsXHJcbiAgQmFza2V0SXRlbU1hbmFnZW1lbnRJbmZvXHJcbn0gZnJvbSAnLi4vc2VydmljZXMvZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZCB9IGZyb20gJy4vbWFuYWdlbWVudC1pbmZvLWFuZC12YWxpZCc7XHJcbmltcG9ydCB7IFVzZXJTZXJ2aWNlcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXVzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgRmxpZ2h0RGlyZWN0aW9uRW51bSxcclxuICBGbGlnaHRHcm91cHMsXHJcbiAgTWFpbkZsaWdodENhYmluQ2xhc3MsXHJcbiAgTWluTWF4LFxyXG4gIE5nYkRhdGVTdHJ1Y3QsXHJcbiAgT0JURmxpZ2h0Q2FiaW5DbGFzcyxcclxuICBPQlRSYWlsSm91cm5leUZhcmUsXHJcbiAgU2NoZW1hLFxyXG4gIFVucGFja2VkXHJcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEFpcnBvcnQsXHJcbiAgQmFnZ2FnZUFsbG93YW5jZSxcclxuICBCYXNrZXRJdGVtLFxyXG4gIEZhcmVDb25kaXRpb25zLFxyXG4gIEZsaWdodENhYmluQ2xhc3MsXHJcbiAgRmxpZ2h0SXRpbmVyYXJ5LFxyXG4gIEZsaWdodEpvdXJuZXksXHJcbiAgUGFzc2VuZ2VyVHlwZSxcclxuICBTZXJ2aWNlLFxyXG4gIFNlcnZpY2VUeXBlLFxyXG4gIFVzZXJQYXNzZW5nZXJUeXBlSW5wdXRcclxufSBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcclxuaW1wb3J0IHsgU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc3VwcGxlbWVudGFyeS1ib29raW5nLWluZm8taW1wbCc7XHJcbmltcG9ydCB7IE1lbW9yaXNlIH0gZnJvbSAnLi9saW1pdGVkLWNhY2hlLmNsYXNzJztcclxuaW1wb3J0IHtcclxuICBGbGlnaHRGaWx0ZXJzLFxyXG4gIEZsaWdodEZpbHRlcnNSZWNvcmRLZXlzXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mbGlnaHQtZmlsdGVycy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBSdWxlcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvc3VtbWFyeS1pbnRlcmZhY2UnO1xyXG5cclxuZGVjbGFyZSB2YXIgaGV4X2htYWNfbWQ1OiBhbnk7XHJcblxyXG5jb25zdCBGTElHSFRfTUFYX0NISUxEX0FHRV9ZRUFSUyA9IDE2O1xyXG5jb25zdCBSQUlMX01BWF9DSElMRF9BR0VfWUVBUlMgPSAxMjtcclxuY29uc3QgRVVST1NUQVJfTUFYX0NISUxEX0FHRV9ZRUFSUyA9IDEyO1xyXG5jb25zdCBDT0FDSF9NQVhfQ0hJTERfQUdFX1lFQVJTID0gMTU7XHJcbmNvbnN0IExPVU5HRVNfTUFYX0NISUxEX0FHRV9ZRUFSUyA9IDEyO1xyXG5jb25zdCBGTElHSFRfTUFYX0lORkFOVF9BR0VfWUVBUlMgPSAwO1xyXG5jb25zdCBSQUlMX01BWF9JTkZBTlRfQUdFX1lFQVJTID0gMDtcclxuY29uc3QgQ09BQ0hfTUFYX0lORkFOVF9BR0VfWUVBUlMgPSAwO1xyXG5jb25zdCBMT1VOR0VTX01BWF9JTkZBTlRfQUdFX1lFQVJTID0gMDtcclxuY29uc3QgTUVUUkVTX1RPX01JTEVTX0NPTlZFUlNJT04gPSAxNjA5O1xyXG5jb25zdCBUSU1FX0JBU0UgPSA2MDtcclxuY29uc3QgR1JPVVBfVElDS0VUX0NPREVTID0gWydHUycsICdBSUcnLCAnR1JQJywgJ0dVMycsICdHVTQnLCAnR1VDJywgJ01QRycsICcyVFInLCAnU0dVJ107XHJcblxyXG5leHBvcnQgY2xhc3MgQmFzZUhlbHBlclJvdXRpbmVzIHtcclxuICBzdGF0aWMgUkVBRF9EQVRFX0ZPUk1BVCA9ICdkZCwgRCBNTU0gWVlZWSc7XHJcbiAgc3RhdGljIFJFQURfVElNRV9GT1JNQVQgPSAnSEg6bW0nO1xyXG4gIHN0YXRpYyBEQVRFX0ZPUk1BVCA9ICdZWU1NREQnO1xyXG4gIHN0YXRpYyBHUkFQSFFMX0RBVEFfRk9STUFUX1RJTUUgPSAnWVlZWS1NTS1ERCBISDptbTpzcyc7XHJcbiAgc3RhdGljIElTT19EQVRBX0ZPUk1BVCA9ICdZWVlZLU1NLUREJztcclxuICBzdGF0aWMgSVNPX0RBVEFfRk9STUFUX1RJTUUgPSAnWVlZWS1NTS1ERCBISDptbSc7XHJcbiAgc3RhdGljIElTT19EQVRBX0ZPUk1BVF9OT19IWVBIQU5TID0gJ1lZWVlNTUREJztcclxuICBzdGF0aWMgVElNRV9GT1JNQVQgPSAnSEhtbSc7XHJcbiAgc3RhdGljIFRJTUVfRk9STUFUX0NPTE9OID0gJ0hIOm1tJztcclxuICBzdGF0aWMgTU1ERFlZX0RBVEUgPSAnRERNTVlZWVknO1xyXG5cclxuICBpc0dyb3VwVGlja2V0KGNvZGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIEdST1VQX1RJQ0tFVF9DT0RFUy5pbmNsdWRlcyhjb2RlLnRvVXBwZXJDYXNlKCkudHJpbSgpKTtcclxuICB9XHJcblxyXG4gIG1pblRvSG91cihkdXI6IG51bWJlcikge1xyXG4gICAgcmV0dXJuIGAke01hdGguZmxvb3IoZHVyIC8gNjApfWggJHtkdXIgJSA2MH1tYDtcclxuICB9XHJcblxyXG4gIG1ha2VDb2xvblRpbWUodGltZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGltZS5zdWJzdHJpbmcoMCwgMikgKyAnOicgKyB0aW1lLnN1YnN0cmluZygyLCA0KTtcclxuICB9XHJcblxyXG4gIG5vbk51bGxNaW4oa2V5OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSB7XHJcbiAgICByZXR1cm4gYXJncy5yZWR1Y2UoXHJcbiAgICAgIChjdXJyZW50LCBpdGVtKSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbVtrZXldKSB7XHJcbiAgICAgICAgICBpZiAoY3VycmVudC5taW4gPiBOdW1iZXIoaXRlbVtrZXldKSkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBpdGVtLCBtaW46IE51bWJlcihpdGVtW2tleV0pIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xyXG4gICAgICB9LFxyXG4gICAgICB7IG1pbjogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsIGl0ZW06IG51bGwgfVxyXG4gICAgKS5pdGVtO1xyXG4gIH1cclxuXHJcbiAgam9pbkJ5Q29tbWEoLi4uYXR0cmlidXRlczogYW55W10pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGF0dHJpYnV0ZXNcclxuICAgICAgLnJlZHVjZSgoYWNjLCBhdHRyKSA9PiB7XHJcbiAgICAgICAgaWYgKF8uaXNFbXB0eShhdHRyKSkge1xyXG4gICAgICAgICAgYWNjICs9IGF0dHIgKyAnLCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgIH0sICcnKVxyXG4gICAgICAuc2xpY2UoMCwgLTEpO1xyXG4gIH1cclxuXHJcbiAgbXV0dWFsbHlJbmNsdWRlKGE6IHN0cmluZywgYjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gYS5pbmNsdWRlcyhiKSB8fCBiLmluY2x1ZGVzKGEpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ1RyeWluZyB0byBtdXR1YWxseSBjb21wYXJlIHVuZGVmaW5lZCB2YXJpYWJsZS4nKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZmluZEJ5S2V5KGFycmF5OiBhbnlbXSwga2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgcmV0dXJuIGFycmF5XHJcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICByZXR1cm4gaXRlbVtrZXldID09PSB2YWx1ZTtcclxuICAgICAgfSlcclxuICAgICAgLnBvcCgpO1xyXG4gIH1cclxuXHJcbiAgZGF0ZVRvTmdEYXRlKGRhdGU6IERhdGUpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHllYXI6IGRhdGUuZ2V0RnVsbFllYXIoKSxcclxuICAgICAgbW9udGg6IGRhdGUuZ2V0TW9udGgoKSArIDEsXHJcbiAgICAgIGRheTogZGF0ZS5nZXREYXRlKClcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjb252ZXJ0VG9ZWU1NREQoZGF0ZTogc3RyaW5nKSB7XHJcbiAgICBpZiAoZGF0ZS5sZW5ndGggPiA2KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmZvcm1hdERhdGUodGhpcy55eXl5bW1kZFRpbWVUb01vbWVudChkYXRlKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0ZTtcclxuICB9XHJcblxyXG4gIGZvcm1hdERhdGVUb01NRERZWVkoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gbW9tZW50KGRhdGUpLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuTU1ERFlZX0RBVEUpO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0RGF0ZShkYXRlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcclxuICAgIGRhdGUgPSBtb21lbnQoZGF0ZSk7XHJcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLkRBVEVfRk9STUFUKTtcclxuICB9XHJcblxyXG4gIGZvcm1hdFRpbWUoZGF0ZTogbW9tZW50Lk1vbWVudCk6IHN0cmluZyB7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gZGF0ZS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLlRJTUVfRk9STUFUKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZvcm1hdFRpbWVDb2xvbihkYXRlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcclxuICAgIGRhdGUgPSBtb21lbnQoZGF0ZSk7XHJcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLlRJTUVfRk9STUFUX0NPTE9OKTtcclxuICB9XHJcblxyXG4gIGZvcm1hdElzb0RhdGUoZGF0ZTogbW9tZW50Lk1vbWVudCk6IHN0cmluZyB7XHJcbiAgICBkYXRlID0gbW9tZW50KGRhdGUpO1xyXG4gICAgcmV0dXJuIGRhdGUuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5JU09fREFUQV9GT1JNQVQpO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0SXNvRGF0ZVRpbWUoZGF0ZTogbW9tZW50Lk1vbWVudCk6IHN0cmluZyB7XHJcbiAgICBkYXRlID0gbW9tZW50KGRhdGUpO1xyXG4gICAgcmV0dXJuIGRhdGUuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5JU09fREFUQV9GT1JNQVRfVElNRSk7XHJcbiAgfVxyXG5cclxuICBmb3JtYXRHcmFwaFFMRGF0ZVRpbWUoZGF0ZTogbW9tZW50Lk1vbWVudCk6IHN0cmluZyB7XHJcbiAgICBkYXRlID0gbW9tZW50KGRhdGUpO1xyXG4gICAgcmV0dXJuIGRhdGUuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5HUkFQSFFMX0RBVEFfRk9STUFUX1RJTUUpO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0SXNvRGF0ZU5vSHlwaGFucyhkYXRlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcclxuICAgIGRhdGUgPSBtb21lbnQoZGF0ZSk7XHJcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLklTT19EQVRBX0ZPUk1BVF9OT19IWVBIQU5TKTtcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlVGltZXNMaXN0KGZyb20gPSAwLCB0byA9IDI0LCBzdGVwID0gMTUpOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBkYXRlVGltZUFycmF5OiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgZm9yIChsZXQgaG91ciA9IDA7IGhvdXIgPCB0byAtIGZyb207IGhvdXIrKykge1xyXG4gICAgICBmb3IgKGxldCBtaW51dGUgPSAwOyBtaW51dGUgPCA2MDsgbWludXRlICs9IHN0ZXApIHtcclxuICAgICAgICBkYXRlVGltZUFycmF5LnB1c2gobW9tZW50KHsgaG91ciwgbWludXRlIH0pLmZvcm1hdCgnSEg6bW0nKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBkYXRlVGltZUFycmF5O1xyXG4gIH1cclxuXHJcbiAgbW9tZW50VG9OZ0RhdGUoZGF0ZTogbW9tZW50Lk1vbWVudCB8IHN0cmluZyk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgZGF0ZSA9IG1vbWVudChkYXRlKTtcclxuICAgIHJldHVybiB0aGlzLmRhdGVUb05nRGF0ZShkYXRlLnRvRGF0ZSgpKTtcclxuICB9XHJcblxyXG4gIG5nRGF0ZVRvRGF0ZShkYXRlOiBOZ2JEYXRlU3RydWN0KTogRGF0ZSB7XHJcbiAgICByZXR1cm4gbmV3IERhdGUoZGF0ZS55ZWFyLCBkYXRlLm1vbnRoIC0gMSwgZGF0ZS5kYXkpO1xyXG4gIH1cclxuXHJcbiAgbmdEYXRlVG9Nb21lbnQoZGF0ZTogTmdiRGF0ZVN0cnVjdCwgdGltZT86IHN0cmluZyk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgY29uc3QgbW9tID0gbW9tZW50KHRoaXMubmdEYXRlVG9EYXRlKGRhdGUpKTtcclxuICAgIGlmICh0aW1lKSB7XHJcbiAgICAgIGNvbnN0IHRpbWVzID0gdGltZS5zcGxpdCgnOicpO1xyXG4gICAgICBpZiAodGltZXMubGVuZ3RoID09PSAyKSB7XHJcbiAgICAgICAgbW9tLnNldCgnaG91cnMnLCBOdW1iZXIodGltZXNbMF0pKS5zZXQoJ21pbnV0ZXMnLCBOdW1iZXIodGltZXNbMV0pKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBtb21cclxuICAgICAgICAgIC5zZXQoJ2hvdXJzJywgTnVtYmVyKHRpbWUuc3Vic3RyKDAsIDIpKSlcclxuICAgICAgICAgIC5zZXQoJ21pbnV0ZXMnLCBOdW1iZXIodGltZS5zdWJzdHIoMiwgMikpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1vbTtcclxuICB9XHJcblxyXG4gIHRvZGF5VG9OZ2JEYXRlU3RydWN0KCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgY29uc3QgdG9kYXkgPSBtb21lbnQoKTtcclxuICAgIHJldHVybiB7IHllYXI6IHRvZGF5LnllYXIoKSwgbW9udGg6IHRvZGF5Lm1vbnRoKCkgKyAxLCBkYXk6IHRvZGF5LmRhdGUoKSB9O1xyXG4gIH1cclxuXHJcbiAgb2JqZWN0VG9BcnJheShvYmplY3Q6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBBcnJheTxhbnk+IHtcclxuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpLm1hcCgoaSkgPT4gb2JqZWN0W2ldKTtcclxuICB9XHJcblxyXG4gIHl5eXltbWRkVG9EYXRlKHZhbHVlOiBzdHJpbmcpOiBEYXRlIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZShcclxuICAgICAgTnVtYmVyKHZhbHVlLnN1YnN0cmluZygwLCA0KSksXHJcbiAgICAgIE51bWJlcih2YWx1ZS5zdWJzdHJpbmcoNCwgNikpIC0gMSxcclxuICAgICAgTnVtYmVyKHZhbHVlLnN1YnN0cmluZyg2LCA4KSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICB5eXl5bW1kZFRvTW9tZW50KHZhbHVlOiBzdHJpbmcpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiBtb21lbnQodGhpcy55eXl5bW1kZFRvRGF0ZSh2YWx1ZSkpO1xyXG4gIH1cclxuXHJcbiAgeXltbWRkVG9Nb21lbnQodmFsdWU6IHN0cmluZyk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIG1vbWVudCh2YWx1ZSwgJ1lZTU1ERCcpO1xyXG4gIH1cclxuXHJcbiAgeXltbWRkVG9OZ2JEYXRlKHZhbHVlOiBzdHJpbmcpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLm1vbWVudFRvTmdEYXRlKHRoaXMueXltbWRkVG9Nb21lbnQodmFsdWUpKTtcclxuICB9XHJcblxyXG4gIHl5bW1kZF9oaG1tVG9Nb21lbnQoZGF0ZTogc3RyaW5nLCB0aW1lOiBzdHJpbmcpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiBtb21lbnQoYCR7ZGF0ZX0gJHt0aW1lfWAsICdZWU1NREQgSEhtbScpO1xyXG4gIH1cclxuXHJcbiAgeXl5eW1tZGRfaGhtbVRvTW9tZW50KGRhdGU6IHN0cmluZywgdGltZTogc3RyaW5nKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gbW9tZW50KGAke2RhdGV9ICR7dGltZX1gLCAnWVlZWU1NREQgSEhtbScpO1xyXG4gIH1cclxuXHJcbiAgeXl5eW1tZGRUb05nRGF0ZSh2YWx1ZTogc3RyaW5nKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRlVG9OZ0RhdGUodGhpcy55eXl5bW1kZFRvRGF0ZSh2YWx1ZSkpO1xyXG4gIH1cclxuXHJcbiAgeXl5eW1tZGRUaW1lVG9OZ0RhdGUoZGF0ZTogc3RyaW5nLCB0aW1lOiBzdHJpbmcpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIGNvbnN0IGR0ID0gdGhpcy55eXl5bW1kZFRvTW9tZW50KGRhdGUpXHJcbiAgICAgIC5hZGQoTnVtYmVyKHRpbWUuc3Vic3RyaW5nKDAsIDIpKSwgJ2hvdXJzJylcclxuICAgICAgLmFkZChOdW1iZXIodGltZS5zdWJzdHJpbmcoMiwgNCkpLCAnbWludXRlcycpO1xyXG4gICAgcmV0dXJuIHRoaXMubW9tZW50VG9OZ0RhdGUoZHQpO1xyXG4gIH1cclxuXHJcbiAgeXl5eW1tZGRUaW1lVG9Nb21lbnQoZGF0ZTogc3RyaW5nKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICBpZiAoZGF0ZS5sZW5ndGggPT09IDYpIHtcclxuICAgICAgcmV0dXJuIG1vbWVudChgJHtkYXRlfWAsICdZWU1NREQnKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtb21lbnQoYCR7ZGF0ZX1gLCAnWVlZWU1NREQnKTtcclxuICB9XHJcblxyXG4gIGhobW1Ub1RpbWUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7dmFsdWUuc3Vic3RyaW5nKDAsIDIpfToke3ZhbHVlLnN1YnN0cmluZygyLCA0KX1gO1xyXG4gIH1cclxuXHJcbiAgZGF0ZVN0cmluZ1RveXl5eW1tZGQoZDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBpZiAodHlwZW9mIGQgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbSA9IC8oXFxkezR9KVstXFwvXT8oXFxkezJ9KVstXFwvXT8oXFxkezJ9KS8uZXhlYyhkKTtcclxuICAgIHJldHVybiBtID8gYCR7bVsxXX0ke21bMl19JHttWzNdfWAgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgdGltZVN0cmluZ1RvaGhfbW0odDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBpZiAodHlwZW9mIHQgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbSA9IC8oXFxkezJ9KVs6LV0/KFxcZHsyfSkvLmV4ZWModCk7XHJcbiAgICByZXR1cm4gbSA/IGAke21bMV19OiR7bVsyXX1gIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHN0cmluZ1RvQm9vbChzOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBzICYmIHMgIT09ICdmYWxzZScgJiYgcyAhPT0gJzAnICYmIHMgIT09ICdubycgJiYgcyAhPT0gJ24nO1xyXG4gIH1cclxuXHJcbiAgY2xvbmU8VCA9IGFueT4odG9DbG9uZTogVCk6IFQge1xyXG4gICAgcmV0dXJuIF8uY2xvbmVEZWVwKHRvQ2xvbmUpIGFzIFQ7XHJcbiAgfVxyXG5cclxuICByZXBsYWNlS2V5c0luVGV4dChcclxuICAgIHRleHQ6IHN0cmluZyxcclxuICAgIHJlcGxhY2VtZW50czogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxyXG4gICk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMocmVwbGFjZW1lbnRzKS5yZWR1Y2UoKGN1cnJlbnQsIGtleSkgPT4ge1xyXG4gICAgICByZXR1cm4gY3VycmVudC5yZXBsYWNlKCclJyArIGtleSwgcmVwbGFjZW1lbnRzW2tleV0pO1xyXG4gICAgfSwgdGV4dCk7XHJcbiAgfVxyXG5cclxuICBnZXROZXh0TWludWV0cyhkYXRlOiBtb21lbnQuTW9tZW50ID0gbW9tZW50KCksIG1pbnV0ZXNUb1JvdW5kID0gMTUpIHtcclxuICAgIGRhdGUubWludXRlKE1hdGguY2VpbChkYXRlLm1pbnV0ZSgpIC8gbWludXRlc1RvUm91bmQpICogbWludXRlc1RvUm91bmQpO1xyXG4gICAgcmV0dXJuIGRhdGUuZm9ybWF0KCdISDptbScpO1xyXG4gIH1cclxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAgKiBCZWxvdyBhcmUgZnVuY3Rpb25zIG5lZWRlZCBmb3IgZ2VuZXJhdGluZyB0aGUgaGFzaGVkIG51bWJlciBvbmNlIHRva2VuLCB0YWtlbiBhcyByZXF1aXJlZFx0KlxyXG4gICAqIERvbid0IE1lc3Mgd2l0aCB0aGVzZVx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCpcclxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcbiAgZ2V0TnVtYmVyT25jZVZhbHVlKHRva2VuOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgcmFuZG9tX3ZhbHVlID0gdGhpcy5ndWlkKCk7XHJcbiAgICByZXR1cm4gcmFuZG9tX3ZhbHVlICsgJ18nICsgaGV4X2htYWNfbWQ1KHRva2VuLCByYW5kb21fdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgZ3VpZCgpOiBhbnkge1xyXG4gICAgbGV0IHJhbmRvbV9oZXggPSAnJztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDMyOyBpKyspIHtcclxuICAgICAgcmFuZG9tX2hleCArPSB0aGlzLnM0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJhbmRvbV9oZXg7XHJcbiAgfVxyXG5cclxuICBzNCgpOiBhbnkge1xyXG4gICAgcmV0dXJuIE1hdGguZmxvb3IoKDEgKyBNYXRoLnJhbmRvbSgpKSAqIDB4MTAwMDApXHJcbiAgICAgIC50b1N0cmluZygxNilcclxuICAgICAgLnN1YnN0cmluZygxKTtcclxuICB9XHJcblxyXG4gIGNhcGl0YWxpc2VGaXJzdExldHRlcih3b3JkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKHdvcmQubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4gd29yZFswXS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnJvbU9iamVjdCguLi5hcmdzOiBhbnlbXSk6IGFueSB7XHJcbiAgICBsZXQgZGF0YSA9IGFyZ3Muc2hpZnQoKTtcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgZGF0YSAmJiBpbmRleCA8IGFyZ3MubGVuZ3RoOyBpbmRleCArPSAxKSB7XHJcbiAgICAgIGRhdGEgPSBkYXRhW2FyZ3NbaW5kZXhdXTtcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH1cclxuXHJcbiAgbW9tZW50Um91bmRNaW51dGVzKHRpbWU6IG1vbWVudC5Nb21lbnQsIHJvdW5kOiBudW1iZXIpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHRpbWUgPSBtb21lbnQodGltZSkuc3RhcnRPZignbWludXRlcycpO1xyXG4gICAgbGV0IGRpZmYgPSB0aW1lLm1pbnV0ZXMoKSAlIHJvdW5kO1xyXG4gICAgaWYgKGRpZmYgIT09IDApIHtcclxuICAgICAgZGlmZiA9IHJvdW5kIC0gZGlmZjtcclxuICAgIH1cclxuICAgIHJldHVybiB0aW1lLmFkZChkaWZmLCAnbWludXRlJyk7XHJcbiAgfVxyXG5cclxuICByb3VuZChkYXRlOiBhbnksIGR1cmF0aW9uOiBhbnkpIHtcclxuICAgIHJldHVybiBtb21lbnQoTWF0aC5jZWlsKCtkYXRlIC8gK2R1cmF0aW9uKSAqICtkdXJhdGlvbik7XHJcbiAgfVxyXG5cclxuICBpY3NGb2xkKGJvZHk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBsaW5lcyA9IGJvZHkuc3BsaXQoL1xcclxcbi9nKTtcclxuICAgIHJldHVybiBsaW5lc1xyXG4gICAgICAubWFwKChsaW5lKSA9PiB7XHJcbiAgICAgICAgbGV0IHJlcyA9ICcnO1xyXG4gICAgICAgIGNvbnN0IG4gPSA3MjtcclxuICAgICAgICBsaW5lID0gbGluZS50cmltKCk7XHJcbiAgICAgICAgd2hpbGUgKGxpbmUubGVuZ3RoID4gbikge1xyXG4gICAgICAgICAgcmVzICs9IGAke2xpbmUuc2xpY2UoMCwgbil9XFxyXFxuYDtcclxuICAgICAgICAgIGxpbmUgPSBgICR7bGluZS5zbGljZShuKS50cmltKCl9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxpbmUudHJpbSgpKSB7XHJcbiAgICAgICAgICByZXMgKz0gbGluZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgfSlcclxuICAgICAgLmpvaW4oJ1xcclxcbicpO1xyXG4gIH1cclxuXHJcbiAgc3BsaXRBZGRyZXNzTGluZShcclxuICAgIGxpbmU6IHN0cmluZyxcclxuICAgIGxlbjogbnVtYmVyXHJcbiAgKTogeyBsaW5lOiBzdHJpbmc7IHJlc2lkdWU6IHN0cmluZyB9IHtcclxuICAgIGNvbnN0IHJlcyA9IHtcclxuICAgICAgbGluZTogbGluZS5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgpLFxyXG4gICAgICByZXNpZHVlOiAnJ1xyXG4gICAgfTtcclxuICAgIGlmIChyZXMubGluZS5sZW5ndGggPiBsZW4pIHtcclxuICAgICAgbGV0IGkgPSByZXMubGluZS5zbGljZSgwLCBsZW4pLmxhc3RJbmRleE9mKCcsJyk7XHJcbiAgICAgIGlmIChpID4gMCkge1xyXG4gICAgICAgIHJlcy5yZXNpZHVlID0gcmVzLmxpbmUuc2xpY2UoaSArIDEpLnRyaW0oKTtcclxuICAgICAgICByZXMubGluZSA9IHJlcy5saW5lLnNsaWNlKDAsIGkpLnRyaW0oKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpID0gcmVzLmxpbmUuc2xpY2UoMCwgbGVuKS5sYXN0SW5kZXhPZignICcpO1xyXG4gICAgICAgIGlmIChpID4gMCkge1xyXG4gICAgICAgICAgcmVzLnJlc2lkdWUgPSByZXMubGluZS5zbGljZShpICsgMSkudHJpbSgpO1xyXG4gICAgICAgICAgcmVzLmxpbmUgPSByZXMubGluZS5zbGljZSgwLCBpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVzLnJlc2lkdWUgPSByZXMubGluZS5zbGljZShsZW4pO1xyXG4gICAgICAgICAgcmVzLmxpbmUgPSByZXMubGluZS5zbGljZSgwLCBsZW4pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIGRheXNCZXR3ZWVuKHN0YXJ0OiBtb21lbnQuTW9tZW50LCBlbmQ6IG1vbWVudC5Nb21lbnQpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGVuZC5kaWZmKHN0YXJ0LCAnZGF5cycpO1xyXG4gIH1cclxuXHJcbiAgbWFwUHJvbWlzZTxUID0gYW55LCBSID0gYW55PihcclxuICAgIGE6IFRbXSxcclxuICAgIGY6ICh2YWw6IFQsIGluZGV4OiBudW1iZXIpID0+IFIgfCBQcm9taXNlPFI+LFxyXG4gICAgbWF4PzogbnVtYmVyXHJcbiAgKTogUHJvbWlzZTxSW10+IHtcclxuICAgIGNvbnN0IGl0ID0gYVtTeW1ib2wuaXRlcmF0b3JdKCk7XHJcbiAgICBjb25zdCByZXN1bHQ6IFJbXSA9IFtdO1xyXG4gICAgY29uc3QgYnVmZmVyOiBQcm9taXNlPFI+W10gPSBbXTtcclxuICAgIGxldCBpID0gMDtcclxuICAgIGNvbnN0IG5leHRmID0gKCk6IFByb21pc2U8Uj4gPT4ge1xyXG4gICAgICBjb25zdCBuZXh0ID0gaXQubmV4dCgpO1xyXG4gICAgICBpZiAobmV4dC5kb25lKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gaSsrO1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGYobmV4dC52YWx1ZSwgaW5kZXgpKS50aGVuKCh2YWwpID0+IHtcclxuICAgICAgICByZXN1bHRbaW5kZXhdID0gdmFsO1xyXG4gICAgICAgIHJldHVybiBuZXh0ZigpO1xyXG4gICAgICB9KTtcclxuICAgIH07XHJcbiAgICB3aGlsZSAoIW1heCB8fCBidWZmZXIubGVuZ3RoIDw9IG1heCkge1xyXG4gICAgICBjb25zdCBuID0gbmV4dGYoKTtcclxuICAgICAgaWYgKG4pIHtcclxuICAgICAgICBidWZmZXIucHVzaChuKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKGJ1ZmZlcikudGhlbigoKSA9PiB7XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG1hcFNlcmllc1Byb21pc2U8VCA9IGFueSwgUiA9IGFueT4oXHJcbiAgICBhOiBUW10sXHJcbiAgICBmOiAodmFsOiBULCBpbmRleDogbnVtYmVyKSA9PiBSIHwgUHJvbWlzZTxSPlxyXG4gICk6IFByb21pc2U8UltdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5tYXBQcm9taXNlKGEsIGYsIDEpO1xyXG4gIH1cclxuXHJcbiAgb2JqMnF1ZXJ5U3RyaW5nKG9iajogYW55KTogc3RyaW5nIHtcclxuICAgIHJldHVybiBfLnJlZHVjZShcclxuICAgICAgb2JqLFxyXG4gICAgICAoYSwgdiwgaykgPT4ge1xyXG4gICAgICAgIGlmIChhICE9PSAnJykge1xyXG4gICAgICAgICAgYSArPSAnJic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBgJHthfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGspfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2KX1gO1xyXG4gICAgICB9LFxyXG4gICAgICAnJ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHN0cmlwUHVuY3R1YXRpb24oczogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBzLnJlcGxhY2UoL1teYS16QS1aMC05XFxzXS9nLCAnJyk7XHJcbiAgfVxyXG5cclxuICByZXBsYWNlQWxsKGhheXN0YWNrOiBzdHJpbmcsIG5lZWRsZTogc3RyaW5nLCByZXBsYWNlbWVudDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBoYXlzdGFja1xyXG4gICAgICA/IGhheXN0YWNrLnJlcGxhY2UobmV3IFJlZ0V4cChuZWVkbGUsICdnJyksIHJlcGxhY2VtZW50KVxyXG4gICAgICA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBkYXRlVGltZShzYWJzRGF0ZTogc3RyaW5nLCBzYWJzVGltZTogc3RyaW5nKTogYW55IHtcclxuICAgIGNvbnN0IHRlbXBEYXRlID0gc2Fic0RhdGUubWF0Y2goLy57MSwyfS9nKTsgLy8gc3BsaXRzIGV2ZXJ5IDIgY2hhcmFjdGVyc1xyXG4gICAgY29uc3QgdGVtcFRpbWUgPSBzYWJzVGltZS5tYXRjaCgvLnsxLDJ9L2cpO1xyXG5cclxuICAgIGNvbnN0IG5ld1N0ciA9XHJcbiAgICAgICcyMCcgK1xyXG4gICAgICB0ZW1wRGF0ZVswXSArXHJcbiAgICAgICctJyArXHJcbiAgICAgIHRlbXBEYXRlWzFdICtcclxuICAgICAgJy0nICtcclxuICAgICAgdGVtcERhdGVbMl0gK1xyXG4gICAgICAnVCcgK1xyXG4gICAgICB0ZW1wVGltZVswXSArXHJcbiAgICAgICc6JyArXHJcbiAgICAgIHRlbXBUaW1lWzFdICtcclxuICAgICAgJzowMCc7XHJcbiAgICByZXR1cm4gbmV3U3RyO1xyXG4gIH1cclxuXHJcbiAgYWx0ZXJuYXRlSlNPTlN0cmluZ2lmeShqc29uT2JqZWN0OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgbGV0IGpzb25TdHJpbmcgPSBKU09OLnN0cmluZ2lmeShqc29uT2JqZWN0KTtcclxuICAgIGpzb25TdHJpbmcgPSBqc29uU3RyaW5nLnJlcGxhY2UoL1wiL2csICdgJyk7XHJcbiAgICByZXR1cm4ganNvblN0cmluZztcclxuICB9XHJcblxyXG4gIC8vIENvbnZlcnQgb2JqZWN0IHRvIGFycmF5XHJcbiAgQ29udmVydE9iamVjdFRvQXJyYXkob2JqZWN0OiBvYmplY3QpOiBhbnlbXSB7XHJcbiAgICBsZXQgYXJyYXkgPSBfLnZhbHVlcyhvYmplY3QpO1xyXG4gICAgYXJyYXkgPSBfLmZsYXR0ZW4oYXJyYXkpO1xyXG4gICAgcmV0dXJuIGFycmF5O1xyXG4gIH1cclxuXHJcbiAgYWRkRGF5KGRhdGVTdHJ1Y3Q6IE5nYkRhdGVTdHJ1Y3QpOiBhbnkge1xyXG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKFxyXG4gICAgICBkYXRlU3RydWN0LnllYXIsXHJcbiAgICAgIGRhdGVTdHJ1Y3QubW9udGggLSAxLFxyXG4gICAgICBkYXRlU3RydWN0LmRheSArIDFcclxuICAgICk7XHJcbiAgICBjb25zdCByZXREYXRlID0ge1xyXG4gICAgICB5ZWFyOiBkYXRlLmdldEZ1bGxZZWFyKCksXHJcbiAgICAgIG1vbnRoOiBkYXRlLmdldE1vbnRoKCkgKyAxLFxyXG4gICAgICBkYXk6IGRhdGUuZ2V0RGF0ZSgpXHJcbiAgICB9O1xyXG4gICAgLy8vLyBjb25zb2xlLmxvZyhyZXREYXRlKTtcclxuICAgIC8vLy8gY29uc29sZS5sb2coZGF0ZSk7XHJcbiAgICByZXR1cm4gcmV0RGF0ZTtcclxuICB9XHJcblxyXG4gIGhhc2hDb2RlKHRvQ29kZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCBoYXNoID0gMDtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvQ29kZS5sZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgICBjb25zdCBjaGFyID0gdG9Db2RlLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tYml0d2lzZVxyXG4gICAgICBoYXNoID0gKGhhc2ggPDwgNSkgLSBoYXNoICsgY2hhcjtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1iaXR3aXNlXHJcbiAgICAgIGhhc2ggPSBoYXNoICYgaGFzaDtcclxuICAgIH1cclxuICAgIHJldHVybiBoYXNoLnRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICBNTWRkeXlUb05nYihkYXRlOiBzdHJpbmcpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLm1vbWVudFRvTmdEYXRlKG1vbWVudChkYXRlLCBCYXNlSGVscGVyUm91dGluZXMuTU1ERFlZX0RBVEUpKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdGVkQ2hpbGRyZW5UcmF2ZWxsZXJzKFxyXG4gICAgc2VsZWN0ZWRUcmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSxcclxuICAgIHR5cGU6IFNlcnZpY2VUeXBlXHJcbiAgKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgLy8gVGhlc2UgdHlwZXMgZG8gbm90IGhhdmUgYSBkaWZmZXJlbmNlIGJldHdlZW4gYWR1bHRzIGFuZCBjaGlsZHJlbi4gc28gYWx3YXlzIG1hcmsgYXMgYWR1bHRzLlxyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkhvdGVsOlxyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNhYjpcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2VsZWN0ZWRUcmF2ZWxsZXJzLmZpbHRlcihcclxuICAgICAgKHRyYXZlbGxlcjogVHJhdmVsbGVyKSA9PiB0cmF2ZWxsZXIuaXNDaGlsZFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdGVkVHJhdmVsbGVycyh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSwgdHlwZTogU2VydmljZVR5cGUpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAvLyBUaGVzZSB0eXBlcyBkbyBub3QgaGF2ZSBhIGRpZmZlcmVuY2UgYmV0d2VlbiBhZHVsdHMgYW5kIGNoaWxkcmVuLiBzbyBhbHdheXMgbWFyayBhcyBhZHVsdHMuXHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuSG90ZWw6XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuQ2FiOlxyXG4gICAgICAgIHJldHVybiB7IGFkdWx0czogdHJhdmVsbGVycywgY2hpbGRyZW46IFtdLCBpbmZhbnRzOiBbXSB9O1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiB0cmF2ZWxsZXJzLnJlZHVjZShcclxuICAgICAgICAgIChcclxuICAgICAgICAgICAgYWNjdW06IHtcclxuICAgICAgICAgICAgICBhZHVsdHM6IFRyYXZlbGxlcltdO1xyXG4gICAgICAgICAgICAgIGNoaWxkcmVuOiBUcmF2ZWxsZXJbXTtcclxuICAgICAgICAgICAgICBpbmZhbnRzOiBUcmF2ZWxsZXJbXTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdHJhdmVsbGVyOiBUcmF2ZWxsZXJcclxuICAgICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodHJhdmVsbGVyLmlzQ2hpbGQpIHtcclxuICAgICAgICAgICAgICBpZiAodHJhdmVsbGVyLmlzSW5mYW50KSB7XHJcbiAgICAgICAgICAgICAgICBhY2N1bS5pbmZhbnRzLnB1c2godHJhdmVsbGVyKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYWNjdW0uY2hpbGRyZW4ucHVzaCh0cmF2ZWxsZXIpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBhY2N1bS5hZHVsdHMucHVzaCh0cmF2ZWxsZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBhY2N1bTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFkdWx0czogW10sXHJcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXSxcclxuICAgICAgICAgICAgaW5mYW50czogW11cclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuICBzZWxlY3RlZEFkdWx0VHJhdmVsbGVycyhzZWxlY3RlZFRyYXZlbGxlcnM6IFRyYXZlbGxlcltdLCB0eXBlOiBTZXJ2aWNlVHlwZSkge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIC8vIFRoZXNlIHR5cGVzIGRvIG5vdCBoYXZlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIGFkdWx0cyBhbmQgY2hpbGRyZW4uIHNvIGFsd2F5cyBtYXJrIGFzIGFkdWx0cy5cclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Ib3RlbDpcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5DYWI6XHJcbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkVHJhdmVsbGVycztcclxuICAgIH1cclxuICAgIHJldHVybiBzZWxlY3RlZFRyYXZlbGxlcnMuZmlsdGVyKFxyXG4gICAgICAodHJhdmVsbGVyOiBUcmF2ZWxsZXIpID0+ICF0cmF2ZWxsZXIuaXNDaGlsZCAmJiAhdHJhdmVsbGVyLmlzSW5mYW50XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNDaGlsZCh0cmF2ZWxsZXI6IFRyYXZlbGxlciB8IERhdGUsIG1heEFnZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodHJhdmVsbGVyIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICBjb25zdCBhZHVsdERhdGUgPSBtb21lbnQoKS5hZGQoLW1heEFnZSwgJ3llYXJzJyk7XHJcbiAgICAgIHJldHVybiBhZHVsdERhdGUuaXNCZWZvcmUoXHJcbiAgICAgICAgbW9tZW50KHRyYXZlbGxlciwgQmFzZUhlbHBlclJvdXRpbmVzLklTT19EQVRBX0ZPUk1BVCksXHJcbiAgICAgICAgJ2RheSdcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0cmF2ZWxsZXIuaXNDaGlsZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzQ2hpbGRGbGlnaHQodHJhdmVsbGVyOiBUcmF2ZWxsZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgRkxJR0hUX01BWF9DSElMRF9BR0VfWUVBUlMpO1xyXG4gIH1cclxuXHJcbiAgaXNDaGlsZFJhaWwodHJhdmVsbGVyOiBUcmF2ZWxsZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgUkFJTF9NQVhfQ0hJTERfQUdFX1lFQVJTKTtcclxuICB9XHJcblxyXG4gIGlzQ2hpbGRFdXJvc3Rhcih0cmF2ZWxsZXI6IFRyYXZlbGxlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBFVVJPU1RBUl9NQVhfQ0hJTERfQUdFX1lFQVJTKTtcclxuICB9XHJcblxyXG4gIHVuaXFCeShhcnJheTogYW55W10sIHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBfLnVuaXFCeShhcnJheSwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgaXNDaGlsZCh0cmF2ZWxsZXI6IFRyYXZlbGxlciB8IERhdGUsIHRyYXZlbFR5cGU6IFNlcnZpY2VUeXBlKSB7XHJcbiAgICBzd2l0Y2ggKHRyYXZlbFR5cGUpIHtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5GbGlnaHQ6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBGTElHSFRfTUFYX0NISUxEX0FHRV9ZRUFSUyk7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuUmFpbDpcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIFJBSUxfTUFYX0NISUxEX0FHRV9ZRUFSUyk7XHJcbiAgICAgIC8vIGNhc2UgU2VydmljZVR5cGUuRXVyb3N0YXI6XHJcbiAgICAgIC8vICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIEVVUk9TVEFSX01BWF9DSElMRF9BR0VfWUVBUlMpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNvYWNoOlxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgQ09BQ0hfTUFYX0NISUxEX0FHRV9ZRUFSUyk7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuTG91bmdlOlxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgTE9VTkdFU19NQVhfQ0hJTERfQUdFX1lFQVJTKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Ib3RlbDpcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5DYWI6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzSW5mYW50KHRyYXZlbGxlcjogVHJhdmVsbGVyIHwgRGF0ZSwgdHJhdmVsVHlwZTogU2VydmljZVR5cGUpIHtcclxuICAgIHN3aXRjaCAodHJhdmVsVHlwZSkge1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkZsaWdodDpcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIEZMSUdIVF9NQVhfSU5GQU5UX0FHRV9ZRUFSUyk7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuUmFpbDpcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIFJBSUxfTUFYX0lORkFOVF9BR0VfWUVBUlMpO1xyXG4gICAgICAvLyBjYXNlIFNlcnZpY2VUeXBlLkV1cm9zdGFyOlxyXG4gICAgICAvLyAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBFVVJPU1RBUl9NQVhfQ0hJTERfQUdFX1lFQVJTKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Db2FjaDpcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIENPQUNIX01BWF9JTkZBTlRfQUdFX1lFQVJTKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Mb3VuZ2U6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBMT1VOR0VTX01BWF9JTkZBTlRfQUdFX1lFQVJTKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Ib3RlbDpcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5DYWI6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEFnZVR5cGUodHJhdmVsbGVyOiBUcmF2ZWxsZXIsIHRyYXZlbFR5cGU6IFNlcnZpY2VUeXBlKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLmlzQ2hpbGQodHJhdmVsbGVyLCB0cmF2ZWxUeXBlKSA/ICdDJyA6ICdBJztcclxuICB9XHJcblxyXG4gIGdldE1heENoaWxkQWdlKHR5cGU6IFNlcnZpY2VUeXBlKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkZsaWdodDpcclxuICAgICAgICByZXR1cm4gbW9tZW50KClcclxuICAgICAgICAgIC5hZGQoLUZMSUdIVF9NQVhfQ0hJTERfQUdFX1lFQVJTICsgMSwgJ3llYXJzJylcclxuICAgICAgICAgIC5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5SYWlsOlxyXG4gICAgICAgIHJldHVybiBtb21lbnQoKVxyXG4gICAgICAgICAgLmFkZCgtUkFJTF9NQVhfQ0hJTERfQUdFX1lFQVJTICsgMSwgJ3llYXJzJylcclxuICAgICAgICAgIC5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICAgICAgLy8gY2FzZSBTZXJ2aWNlVHlwZS5FVVJPU1RBUjpcclxuICAgICAgLy8gIHJldHVybiBtb21lbnQoKS5hZGQoLUVVUk9TVEFSX01BWF9DSElMRF9BR0VfWUVBUlMgKyAxLCAneWVhcnMnKS5mb3JtYXQoSGVscGVycy5NTUREWVlfREFURSk7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuQ29hY2g6XHJcbiAgICAgICAgcmV0dXJuIG1vbWVudCgpXHJcbiAgICAgICAgICAuYWRkKC1DT0FDSF9NQVhfQ0hJTERfQUdFX1lFQVJTICsgMSwgJ3llYXJzJylcclxuICAgICAgICAgIC5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Mb3VuZ2U6XHJcbiAgICAgICAgcmV0dXJuIG1vbWVudCgpXHJcbiAgICAgICAgICAuYWRkKC1MT1VOR0VTX01BWF9DSElMRF9BR0VfWUVBUlMgKyAxLCAneWVhcnMnKVxyXG4gICAgICAgICAgLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuTU1ERFlZX0RBVEUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0RGVmYXVsdEFkdWx0QWdlKHR5cGU6IFNlcnZpY2VUeXBlKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkZsaWdodDpcclxuICAgICAgICByZXR1cm4gbW9tZW50KClcclxuICAgICAgICAgIC5hZGQoLUZMSUdIVF9NQVhfQ0hJTERfQUdFX1lFQVJTIC0gMTAsICd5ZWFycycpXHJcbiAgICAgICAgICAuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuUmFpbDpcclxuICAgICAgICByZXR1cm4gbW9tZW50KClcclxuICAgICAgICAgIC5hZGQoLVJBSUxfTUFYX0NISUxEX0FHRV9ZRUFSUyAtIDEwLCAneWVhcnMnKVxyXG4gICAgICAgICAgLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuTU1ERFlZX0RBVEUpO1xyXG4gICAgICAvLyBjYXNlIFNlcnZpY2VUeXBlLkV1cm9zdGFyOlxyXG4gICAgICAvLyAgcmV0dXJuIG1vbWVudCgpLmFkZCgtRVVST1NUQVJfTUFYX0NISUxEX0FHRV9ZRUFSUyAtIDEwLCAneWVhcnMnKS5mb3JtYXQoSGVscGVycy5NTUREWVlfREFURSk7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuQ29hY2g6XHJcbiAgICAgICAgcmV0dXJuIG1vbWVudCgpXHJcbiAgICAgICAgICAuYWRkKC1DT0FDSF9NQVhfQ0hJTERfQUdFX1lFQVJTIC0gMTAsICd5ZWFycycpXHJcbiAgICAgICAgICAuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuTG91bmdlOlxyXG4gICAgICAgIHJldHVybiBtb21lbnQoKVxyXG4gICAgICAgICAgLmFkZCgtTE9VTkdFU19NQVhfQ0hJTERfQUdFX1lFQVJTIC0gMTAsICd5ZWFycycpXHJcbiAgICAgICAgICAuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuSG90ZWw6XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuQ2FiOlxyXG4gICAgICAgIC8vIFRoZXNlIHR5cGVzIGRvIG5vdCBoYXZlIGNoaWxkIHBsYWNlcyBzb1xyXG4gICAgICAgIHJldHVybiBtb21lbnQoKVxyXG4gICAgICAgICAgLmFkZCgtMTgsICd5ZWFycycpXHJcbiAgICAgICAgICAuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbW9tZW50KCkuYWRkKC0xOCwgJ3llYXJzJykuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm0oXHJcbiAgICBhcnJheTogYW55W10sXHJcbiAgICBjYWxsYmFjazogXy5NZW1vVm9pZEFycmF5SXRlcmF0b3I8YW55LCBhbnlbXT4sXHJcbiAgICBhY2M6IGFueVxyXG4gICk6IGFueVtdIHtcclxuICAgIHJldHVybiBfLnRyYW5zZm9ybShhcnJheSwgY2FsbGJhY2ssIGFjYyk7XHJcbiAgfVxyXG5cclxuICBhcnJheVRvT2JqZWN0PFQgZXh0ZW5kcyB7IFtrZXk6IHN0cmluZ106IGFueSB9PihcclxuICAgIGFycmF5OiBUW10sXHJcbiAgICBmaWVsZDogc3RyaW5nXHJcbiAgKTogeyBba2V5OiBzdHJpbmddOiBUIH0ge1xyXG4gICAgcmV0dXJuIGFycmF5XHJcbiAgICAgIC5maWx0ZXIoKGRhdGE6IFQpID0+ICEhZGF0YSlcclxuICAgICAgLnJlZHVjZSgoY29uZmlnczogeyBba2V5OiBzdHJpbmddOiBUIH0sIGNvbmZpZ0l0ZW06IFQpID0+IHtcclxuICAgICAgICBpZiAoY29uZmlnSXRlbSAmJiBjb25maWdJdGVtW2ZpZWxkXSkge1xyXG4gICAgICAgICAgY29uZmlnc1tjb25maWdJdGVtW2ZpZWxkXV0gPSBjb25maWdJdGVtO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY29uZmlncztcclxuICAgICAgfSwge30pO1xyXG4gIH1cclxuXHJcbiAgc2V0RmllbGRJbk9iamVjdChcclxuICAgIG9iajogUmVjb3JkPHN0cmluZywgYW55PixcclxuICAgIGZpZWxkczogc3RyaW5nW10sXHJcbiAgICB2YWx1ZTogYW55XHJcbiAgKTogYW55IHtcclxuICAgIGlmIChmaWVsZHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmaWVsZCcpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFvYmopIHtcclxuICAgICAgb2JqID0ge307XHJcbiAgICB9XHJcbiAgICBpZiAoZmllbGRzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICBvYmpbZmllbGRzWzBdXSA9IG9ialtmaWVsZHNbMF1dIHx8IFtdO1xyXG4gICAgICBvYmpbZmllbGRzWzBdXS5wdXNoKHZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGZpZWxkOiBzdHJpbmcgPSBmaWVsZHNbMF07XHJcbiAgICAgIG9ialtmaWVsZF0gPSB0aGlzLnNldEZpZWxkSW5PYmplY3Qob2JqW2ZpZWxkXSwgZmllbGRzLnNsaWNlKDEpLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9iajtcclxuICB9XHJcblxyXG4gIGFycmF5VG9PYmplY3RBcnJheTxcclxuICAgIFQgZXh0ZW5kcyB7IFtrZXk6IHN0cmluZ106IGFueSB9LFxyXG4gICAgUSBleHRlbmRzIHsgW2tleTogc3RyaW5nXTogYW55IH1cclxuICA+KGFycmF5OiBUW10sIGZpZWxkczogKHN0cmluZyB8IHN0cmluZ1tdKVtdKTogUSB7XHJcbiAgICByZXR1cm4gYXJyYXlcclxuICAgICAgLmZpbHRlcigoZGF0YTogVCkgPT4gISFkYXRhKVxyXG4gICAgICAucmVkdWNlKChjb25maWdzOiB7IFtrZXk6IHN0cmluZ106IFRbXSB9LCBjb25maWdJdGVtOiBUKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZmllbGRWYWx1ZXM6IHN0cmluZ1tdID0gZmllbGRzLnJlZHVjZTxzdHJpbmdbXT4oXHJcbiAgICAgICAgICAoYWNjdW06IHN0cmluZ1tdLCBmaWVsZDoga2V5b2YgVCB8IChrZXlvZiBUKVtdKTogc3RyaW5nW10gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmZXRjaFZhbHVlOiBzdHJpbmcgPSBBcnJheS5pc0FycmF5KGZpZWxkKVxyXG4gICAgICAgICAgICAgID8gZmllbGRcclxuICAgICAgICAgICAgICAgICAgLm1hcCgoa2V5OiBrZXlvZiBUKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmllbGRGcm9tT2JqZWN0KGNvbmZpZ0l0ZW0sIGtleSBhcyBzdHJpbmcpXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgLmpvaW4oJ18nKVxyXG4gICAgICAgICAgICAgIDogdGhpcy5maWVsZEZyb21PYmplY3QoY29uZmlnSXRlbSwgZmllbGQgYXMgc3RyaW5nKTtcclxuICAgICAgICAgICAgaWYgKGFjY3VtICYmIGZldGNoVmFsdWUpIHtcclxuICAgICAgICAgICAgICBhY2N1bS5wdXNoKGZldGNoVmFsdWUpO1xyXG4gICAgICAgICAgICAgIHJldHVybiBhY2N1bTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBbXVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGNvbmZpZ0l0ZW0gJiYgZmllbGRWYWx1ZXMpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLnNldEZpZWxkSW5PYmplY3QoY29uZmlncywgZmllbGRWYWx1ZXMsIGNvbmZpZ0l0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwge30pO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGVybWluYWxzKGFpcnBvcnQ6IEFpcnBvcnQpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gYWlycG9ydC50ZXJtaW5hbHM7XHJcbiAgfVxyXG5cclxuICBmaWVsZEZyb21PYmplY3Q8VD4ob2JqOiBvYmplY3QsIGZpZWxkczogc3RyaW5nIHwgc3RyaW5nW10pOiBUIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gKEFycmF5LmlzQXJyYXkoZmllbGRzKSA/IGZpZWxkcyA6IChmaWVsZHMgfHwgJycpLnNwbGl0KCcuJykpLnJlZHVjZShcclxuICAgICAgKGN1cnJlbnQ6IFJlY29yZDxzdHJpbmcsIGFueT4sIGZpZWxkMTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtmaWVsZDFdKSB7XHJcbiAgICAgICAgICByZXR1cm4gY3VycmVudFtmaWVsZDFdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfSxcclxuICAgICAgb2JqXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbWFwRmllbGRGcm9tT2JqZWN0PEsgZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2wsIFQ+KGZpZWxkOiBLKSB7XHJcbiAgICByZXR1cm4gKG9iajogUmVjb3JkPEssIGFueT4pOiBUID0+IHtcclxuICAgICAgcmV0dXJuIG9ialtmaWVsZF07XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlTnVsbHM8VD4ocXVlcnk6IFQpOiBUIHtcclxuICAgIGlmICghcXVlcnkpIHtcclxuICAgICAgcmV0dXJuIHF1ZXJ5O1xyXG4gICAgfVxyXG4gICAgaWYgKG1vbWVudC5pc01vbWVudChxdWVyeSkpIHtcclxuICAgICAgcmV0dXJuIHF1ZXJ5O1xyXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHF1ZXJ5KSkge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgICgocXVlcnkgYXMgdW5rbm93biBhcyBBcnJheTxVbnBhY2tlZDxUPj4pXHJcbiAgICAgICAgICAubWFwKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVtb3ZlTnVsbHMoaXRlbSk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmZpbHRlcigoaXRlbTE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gISFpdGVtMTtcclxuICAgICAgICAgIH0pIGFzIHVua25vd24gYXMgVCkgfHwgbnVsbFxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcXVlcnkgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhxdWVyeSkucmVkdWNlKChhY2N1bTogVCwga2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAoa2V5WzBdICE9PSAnXycpIHtcclxuICAgICAgICAgIGNvbnN0IHZhbHVlID0gKHF1ZXJ5IGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW2tleV07XHJcbiAgICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5yZW1vdmVOdWxscyh2YWx1ZSk7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIChkYXRhICE9PSBudWxsICYmIGRhdGEgIT09IHVuZGVmaW5lZCAmJiBkYXRhICE9PSAnbnVsbCcpIHx8XHJcbiAgICAgICAgICAgIChBcnJheS5pc0FycmF5KGRhdGEpICYmIGRhdGEubGVuZ3RoID4gMClcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAoYWNjdW0gYXMgUmVjb3JkPHN0cmluZywgYW55Pilba2V5XSA9IGRhdGE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhY2N1bTtcclxuICAgICAgfSwge30gYXMgVCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gcXVlcnk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRUcmF2ZWxsZXJzSWQodHJhdmVsbGVyczogVHJhdmVsbGVyW10pOiBzdHJpbmdbXSB7XHJcbiAgICBpZiAodHJhdmVsbGVycykge1xyXG4gICAgICByZXR1cm4gdHJhdmVsbGVycy5yZWR1Y2UoXHJcbiAgICAgICAgKHByZXZpb3VzVmFsdWU6IHN0cmluZ1tdLCBjdXJyZW50VmFsdWU6IFRyYXZlbGxlciwgaWR4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiBpZHggPT09IDBcclxuICAgICAgICAgICAgPyBbY3VycmVudFZhbHVlLmlkXVxyXG4gICAgICAgICAgICA6IFsuLi5wcmV2aW91c1ZhbHVlLCBjdXJyZW50VmFsdWUuaWRdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgW11cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGxvb3Agb3ZlciB0aGUgcXVlcnkgb2JqZWN0IHBhcmFtIGFuZCBjb252ZXJ0IGFueSBtb21lbnQgZGF0ZSBvYmplY3RzIHRvIGRhdGUtdGltZSBzdHJpbmdzXHJcbiAgICogQHBhcmFtIHF1ZXJ5XHJcbiAgICogQHBhcmFtIGRlYnVnXHJcbiAgICovXHJcbiAgc2FuaXRpemVNb21lbnREYXRlcyhxdWVyeTogYW55LCBkZWJ1ZyA9IGZhbHNlKTogYW55IHtcclxuICAgIGNvbnN0IHNhbml0aXplZFF1ZXJ5ID0geyAuLi5xdWVyeSB9O1xyXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc2FuaXRpemVkUXVlcnkpKSB7XHJcbiAgICAgIGlmIChtb21lbnQuaXNNb21lbnQodmFsdWUpKSB7XHJcbiAgICAgICAgc2FuaXRpemVkUXVlcnlba2V5XSA9IHNhbml0aXplZFF1ZXJ5W2tleV0udG9JU09TdHJpbmcoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGRlYnVnKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCctLSBzYW5pdGl6ZU1vbWVudERhdGVzKCkgY2FsbGVkIC0tJyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdvcmlnaW5hbCBxdWVyeTogJywgcXVlcnkpO1xyXG4gICAgICBjb25zb2xlLmxvZygnc2FuaXRpemVkIHF1ZXJ5OiAnLCBzYW5pdGl6ZWRRdWVyeSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2FuaXRpemVkUXVlcnk7XHJcbiAgfVxyXG5cclxuICB0b1N0cmluZ3M8VD4odG9Gb3JtYXQ6IFQsIHNjaGVtYTogU2NoZW1hKTogVCB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoc2NoZW1hLnByb3BlcnRpZXMgfHwge30pLnJlZHVjZShcclxuICAgICAgKGN1cnJlbnRWYWx1ZTogVCwgW2tleSwgdmFsdWVdOiBbc3RyaW5nLCBTY2hlbWFdKTogVCA9PiB7XHJcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLl9mb3JtYXRWYWx1ZShcclxuICAgICAgICAgIHRvRm9ybWF0W2tleSBhcyBrZXlvZiBUXSxcclxuICAgICAgICAgIHZhbHVlLFxyXG4gICAgICAgICAgKHNjaGVtYS5yZXF1aXJlZCB8fCBbXSkuaW5jbHVkZXMoa2V5KVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGlmIChuZXdWYWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgY3VycmVudFZhbHVlW2tleSBhcyBrZXlvZiBUXSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY3VycmVudFZhbHVlO1xyXG4gICAgICB9LFxyXG4gICAgICB7fSBhcyBUXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZm9ybWF0VmFsdWUodmFsdWU6IGFueSwgc2NoZW1hOiBTY2hlbWEsIGlzUmVxdWlyZWQ6IGJvb2xlYW4pOiBhbnkge1xyXG4gICAgc3dpdGNoIChzY2hlbWEudHlwZSkge1xyXG4gICAgICBjYXNlICdpbnRlZ2VyJzpcclxuICAgICAgICBjb25zdCB0bXAgPSBOdW1iZXIucGFyc2VJbnQodmFsdWUsIDEwKTtcclxuICAgICAgICByZXR1cm4gTnVtYmVyLmlzTmFOKHRtcCkgPyAoaXNSZXF1aXJlZCA/IDAgOiBudWxsKSA6IHRtcDtcclxuICAgICAgY2FzZSAnc3RyaW5nJzpcclxuICAgICAgICBjb25zdCB0bXAxID0gdmFsdWUgPyB2YWx1ZS50b1N0cmluZygpIDogbnVsbDtcclxuICAgICAgICByZXR1cm4gdG1wMSAmJiB0bXAxLmxlbmd0aCA+IDAgPyB0bXAxIDogaXNSZXF1aXJlZCA/ICcnIDogbnVsbDtcclxuICAgICAgY2FzZSAnb2JqZWN0JzpcclxuICAgICAgICByZXR1cm4gdmFsdWUgPyB0aGlzLnRvU3RyaW5ncyh2YWx1ZSwgc2NoZW1hKSA6IGlzUmVxdWlyZWQgPyB7fSA6IG51bGw7XHJcbiAgICAgIGNhc2UgJ2FycmF5JzpcclxuICAgICAgICByZXR1cm4gdmFsdWU7IC8vIFRPRE8gd3JpdGUgYXJyYXkgdHJhbnNsYXRpb25cclxuICAgICAgY2FzZSAnZGF0ZS10aW1lJzpcclxuICAgICAgICBpZiAodmFsdWUueWVhcikge1xyXG4gICAgICAgICAgdmFsdWUgPSB0aGlzLmZvcm1hdElzb0RhdGUodGhpcy5uZ0RhdGVUb01vbWVudCh2YWx1ZSkpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNvbnNvbGUud2FybihgKysrIHVua25vd24gc2NoZW1hIHR5cGUgJHtzY2hlbWEudHlwZX0gfCByZXR1cm5pbmcgdmFsdWUgYXMgaXMgKysrYCk7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbWFrZVRpbWVXaW5kb3coZGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IGRhdGVUaW1lLmNsb25lKCkuYWRkKHN0YXJ0LCAnaG91cicpO1xyXG4gICAgY29uc3QgZW5kVGltZSA9IGRhdGVUaW1lLmNsb25lKCkuYWRkKGVuZCwgJ2hvdXInKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5mb3JtYXRUaW1lKHN0YXJ0VGltZSkgKyAnLScgKyB0aGlzLmZvcm1hdFRpbWUoZW5kVGltZSk7XHJcbiAgfVxyXG5cclxuICBpblJhbmdlKHRvY2hlY2s6IG51bWJlciwgcmFuZ2U6IE1pbk1heCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRvY2hlY2sgPj0gcmFuZ2UubWluICYmIHRvY2hlY2sgPD0gcmFuZ2UubWF4O1xyXG4gIH1cclxuXHJcbiAgbWFrZVVzZXJzKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdKTogVXNlclBhc3NlbmdlclR5cGVJbnB1dFtdIHtcclxuICAgIHJldHVybiB0cmF2ZWxsZXJzLm1hcCgodHJhdmVsbGVyOiBUcmF2ZWxsZXIpOiBVc2VyUGFzc2VuZ2VyVHlwZUlucHV0ID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBpZDogdHJhdmVsbGVyLmlkLFxyXG4gICAgICAgIHBhc3NlbmdlclR5cGU6IHRyYXZlbGxlci5pc0NoaWxkXHJcbiAgICAgICAgICA/IFBhc3NlbmdlclR5cGUuQ2hpbGRcclxuICAgICAgICAgIDogdHJhdmVsbGVyLmlzSW5mYW50XHJcbiAgICAgICAgICA/IFBhc3NlbmdlclR5cGUuSW5mYW50XHJcbiAgICAgICAgICA6IFBhc3NlbmdlclR5cGUuQWR1bHRcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbWFrZU1vbWVudERheVRpbWUoYWRkRGF5PzogbnVtYmVyLCBoaD86IG51bWJlciwgbT86IG51bWJlcikge1xyXG4gICAgY29uc3QgZHQgPSBtb21lbnQoKTtcclxuXHJcbiAgICBpZiAoYWRkRGF5ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgZHQuYWRkKGFkZERheSwgJ2RheScpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChoaCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGR0LnNldCgnaG91cnMnLCBoaCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBkdC5zZXQoJ21pbnV0ZXMnLCBtKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZHQ7XHJcbiAgfVxyXG5cclxuICBzYW5hdGl6ZVJldHVybnM8VD4oXHJcbiAgICBkZWZhdWx0czogVCxcclxuICAgIHN1cHBsaWVkRGF0YTogUGFydGlhbDxUPixcclxuICAgIG1vbWVudEZpZWxkcz86IChrZXlvZiBUKVtdXHJcbiAgKTogVCB7XHJcbiAgICBjb25zdCBjb21iaW5lZDogVCA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRzLCBzdXBwbGllZERhdGEpO1xyXG4gICAgcmV0dXJuIChtb21lbnRGaWVsZHMgfHwgW10pLnJlZHVjZSgoY3VycmVudDogVCwgbmV4dDoga2V5b2YgVCkgPT4ge1xyXG4gICAgICBjb25zdCB2YWx1ZSA9IChjdXJyZW50IGFzIGFueSlbbmV4dF07XHJcbiAgICAgIChjdXJyZW50IGFzIGFueSlbbmV4dF0gPSAhdmFsdWVcclxuICAgICAgICA/IG1vbWVudCgpXHJcbiAgICAgICAgOiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgPyBtb21lbnQodmFsdWUpXHJcbiAgICAgICAgOiB2YWx1ZTtcclxuICAgICAgcmV0dXJuIGN1cnJlbnQ7XHJcbiAgICB9LCBjb21iaW5lZCk7XHJcbiAgfVxyXG5cclxuICBtaUlzVmFsaWQodG9DaGVjazogTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkW10pIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRvQ2hlY2subGVuZ3RoID09PSAwIHx8XHJcbiAgICAgICEhdG9DaGVjay5maW5kKChtaUl0ZW06IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBtaUl0ZW0uaXNWYWxpZCgpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGlzTWlWYWxpZChcclxuICAgIG1pUGVySXRlbTogTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkW10sXHJcbiAgICBtaVBlclVzZXI6IHtcclxuICAgICAgW2tleTogc3RyaW5nXToge1xyXG4gICAgICAgIG1hbmFnZW1lbnRJbmZvOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWRbXTtcclxuICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBtaVBlckd1ZXN0OiB7XHJcbiAgICAgIFtrZXk6IHN0cmluZ106IHtcclxuICAgICAgICBtYW5hZ2VtZW50SW5mbzogTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkW107XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB1c2VyTWlzID0gT2JqZWN0LnZhbHVlcyhtaVBlclVzZXIgfHwge30pO1xyXG4gICAgY29uc3QgZ3Vlc3RNaXMgPSBPYmplY3QudmFsdWVzKG1pUGVyR3Vlc3QgfHwge30pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5taUlzVmFsaWQobWlQZXJJdGVtKSAmJlxyXG4gICAgICAodXNlck1pcy5sZW5ndGggPT09IDAgfHxcclxuICAgICAgICAhIXVzZXJNaXMuZmluZChcclxuICAgICAgICAgICh1c2VyTWlzMTogeyBtYW5hZ2VtZW50SW5mbzogTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkW10gfSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5taUlzVmFsaWQodXNlck1pczEubWFuYWdlbWVudEluZm8pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICkpICYmXHJcbiAgICAgICAgKGd1ZXN0TWlzLmxlbmd0aCA9PT0gMCB8fFxyXG4gICAgICAgICAgISFndWVzdE1pcy5maW5kKFxyXG4gICAgICAgICAgICAodXNlck1pczE6IHsgbWFuYWdlbWVudEluZm86IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZFtdIH0pID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5taUlzVmFsaWQodXNlck1pczEubWFuYWdlbWVudEluZm8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG5lZWRzTWkoYmFza2V0OiBCYXNrZXREZXRhaWxzLCBuZWVkc1RvVmlld01pOiBib29sZWFuKTogYm9vbGVhbiB7XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgYmFza2V0LmJhc2tldEluZm9NaURldGFpbHMubGVuZ3RoID4gMCAmJlxyXG4gICAgICAobmVlZHNUb1ZpZXdNaSB8fFxyXG4gICAgICAgICFiYXNrZXQuYmFza2V0SW5mb01pRGV0YWlscy5maW5kKFxyXG4gICAgICAgICAgKG1pRGV0YWlsOiBCYXNrZXRJdGVtTWFuYWdlbWVudEluZm8pOiBib29sZWFuID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNNaVZhbGlkKG1pRGV0YWlsLm1pUGVySXRlbSwgbWlEZXRhaWwubWlQZXJVc2VyLCBtaURldGFpbC5taVBlckd1ZXN0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGZpbmRTZXJ2aWNlKHNlcnZpY2VzOiBVc2VyU2VydmljZXMsIGlkOiBzdHJpbmcpOiBTZXJ2aWNlIHtcclxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHNlcnZpY2VzKS5yZWR1Y2UoXHJcbiAgICAgIChjdXJyZW50OiBTZXJ2aWNlLCBzZXJ2aWNlMTogU2VydmljZVtdKTogU2VydmljZSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIGN1cnJlbnQgfHxcclxuICAgICAgICAgIHNlcnZpY2UxLmZpbmQoKHNlcnZpY2UyOiBTZXJ2aWNlKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlMi5pZCA9PT0gaWQ7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0sXHJcbiAgICAgIG51bGwgYXMgU2VydmljZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGFsbFRydWUoXHJcbiAgICBzdXBwSW5mbzogU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvSW50ZXJmYWNlW10sXHJcbiAgICBmaWx0ZXI6IChzdXBwSW5mbzogU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvSW50ZXJmYWNlKSA9PiBib29sZWFuXHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gc3VwcEluZm8uZmlsdGVyKGZpbHRlcikubGVuZ3RoID09PSBzdXBwSW5mby5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBqb2luRnJvbUF0dHJpYnV0ZTxUPihcclxuICAgIGpvaW5DaGFyYWN0ZXI6IHN0cmluZyxcclxuICAgIGF0dHJpYnV0ZToga2V5b2YgVCxcclxuICAgIGFycmF5OiBUW11cclxuICApOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGFycmF5Lm1hcCgoaXRlbTogVCkgPT4gaXRlbVthdHRyaWJ1dGVdKS5qb2luKGpvaW5DaGFyYWN0ZXIpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gc3BsaXQgdXAgYW4gYXJyYXkgaW50byBlcXVhbCBwYXJ0c1xyXG4gICAqIEBwYXJhbSBhcnJheSAtIHRoZSBhcnJheSB0byBzcGxpdCB1cFxyXG4gICAqIEBwYXJhbSBzaXplIC0gdGhlIHNpemUgb2YgdGhlIGNvbnN0aXR1YW50IHBhcnRzXHJcbiAgICogQHBhcmFtIGluY2x1ZGVSZW1haW5kZXIgLSB3ZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgYW55IHJlbWFpbmcgcmVzdWx0cyAtIGRlZmF1bHQgdHJ1ZVxyXG4gICAqL1xyXG4gIHNwbGl0VXBBcnJheShcclxuICAgIGFycmF5OiBhbnlbXSxcclxuICAgIHNpemU6IG51bWJlcixcclxuICAgIGluY2x1ZGVSZW1haW5kZXI6IGJvb2xlYW4gPSB0cnVlXHJcbiAgKTogYW55W10ge1xyXG4gICAgY29uc3QgYXJyYXlDb3B5ID0gXy5jbG9uZURlZXAoYXJyYXkpOyAvLyBsb2Rhc2ggY2xvbmUgZGVlcFxyXG4gICAgbGV0IG5ld0FycmF5ID0gW107XHJcblxyXG4gICAgaWYgKGFycmF5Q29weS5sZW5ndGggPiBzaXplKSB7XHJcbiAgICAgIHdoaWxlIChhcnJheUNvcHkubGVuZ3RoID49IHNpemUpIHtcclxuICAgICAgICBuZXdBcnJheS5wdXNoKGFycmF5Q29weS5zcGxpY2UoMCwgc2l6ZSkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBhZGQgYW55IHJlbWFpbmluZ1xyXG4gICAgICBpZiAoYXJyYXlDb3B5Lmxlbmd0aCAmJiBpbmNsdWRlUmVtYWluZGVyKSB7XHJcbiAgICAgICAgbmV3QXJyYXkucHVzaChhcnJheUNvcHkpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBuZXdBcnJheSA9IGFycmF5Q29weTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3QXJyYXk7XHJcbiAgfVxyXG5cclxuICBATWVtb3Jpc2UoKVxyXG4gIGdldFRpbWVEaWZmZXJlbmNlKGRlcERhdGVUaW1lOiBzdHJpbmcsIGFyckRhdGVUaW1lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIG1vbWVudChkZXBEYXRlVGltZSkuZGlmZihtb21lbnQoYXJyRGF0ZVRpbWUpLCAnbWludXRlcycpO1xyXG4gIH1cclxuXHJcbiAgQE1lbW9yaXNlKClcclxuICBkYXlEaWZmZXJlbmNlKGRlcHQ6IHN0cmluZywgYXJyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZGlmZiA9IG1vbWVudChhcnIpXHJcbiAgICAgIC5zdGFydE9mKCdkYXknKVxyXG4gICAgICAuZGlmZihtb21lbnQoZGVwdCkuc3RhcnRPZignZGF5JyksICdkYXknKTtcclxuICAgIHJldHVybiBkaWZmID4gMCA/IGRpZmYudG9TdHJpbmcoKSA6ICcnO1xyXG4gIH1cclxuXHJcbiAgQE1lbW9yaXNlKClcclxuICBtYWtlRmFyZVJ1bGVzKGZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5LCBkaXJlY3Rpb246IEZsaWdodERpcmVjdGlvbkVudW0pIHtcclxuICAgIGNvbnN0IGZsaWdodHMgPVxyXG4gICAgICBkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmRcclxuICAgICAgICA/IGZsaWdodC5vdXRib3VuZEZsaWdodHNcclxuICAgICAgICA6IGZsaWdodC5pbmJvdW5kRmxpZ2h0cztcclxuICAgIGNvbnN0IHJ1bGVzID0gZmxpZ2h0cy5yZWR1Y2UoXHJcbiAgICAgIChjdXJyZW50OiBGYXJlQ29uZGl0aW9ucywgbmV4dDogRmxpZ2h0Sm91cm5leSkgPT4ge1xyXG4gICAgICAgIGN1cnJlbnQuY2FuY2VsbGF0aW9uID0gY3VycmVudC5jYW5jZWxsYXRpb24uY29uY2F0KFxyXG4gICAgICAgICAgbmV4dC5mYXJlQ29uZGl0aW9ucz8uY2FuY2VsbGF0aW9uIHx8IFtdXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjdXJyZW50LmNoYW5nZSA9IGN1cnJlbnQuY2hhbmdlLmNvbmNhdChcclxuICAgICAgICAgIG5leHQuZmFyZUNvbmRpdGlvbnM/LmNoYW5nZSB8fCBbXVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY3VycmVudC5ub1Nob3cgPSBjdXJyZW50Lm5vU2hvdy5jb25jYXQoXHJcbiAgICAgICAgICBuZXh0LmZhcmVDb25kaXRpb25zPy5ub1Nob3cgfHwgW11cclxuICAgICAgICApO1xyXG4gICAgICAgIGN1cnJlbnQudXBncmFkZSA9IGN1cnJlbnQudXBncmFkZS5jb25jYXQoXHJcbiAgICAgICAgICBuZXh0LmZhcmVDb25kaXRpb25zPy51cGdyYWRlIHx8IFtdXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjdXJyZW50Lm90aGVyID0gY3VycmVudC5vdGhlci5jb25jYXQobmV4dC5mYXJlQ29uZGl0aW9ucz8ub3RoZXIgfHwgW10pO1xyXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgY2FuY2VsbGF0aW9uOiBbXSxcclxuICAgICAgICBjaGFuZ2U6IFtdLFxyXG4gICAgICAgIG5vU2hvdzogW10sXHJcbiAgICAgICAgdXBncmFkZTogW10sXHJcbiAgICAgICAgb3RoZXI6IFtdXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICByZXR1cm4geyBydWxlcywgZmxpZ2h0cyB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2MgLSBnZW5lcmF0ZXMgaWNzIGZpbGUgY29udGVudFxyXG4gICAqL1xyXG4gIGdlbmVyYXRlSWNzRmlsZUNvbnRlbnRzKGJhc2tldEl0ZW1zOiBCYXNrZXRJdGVtW10pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgaWNzQm9keUNvbnRlbnQgPSB0aGlzLmdlbmVyYXRlSWNzRmlsZUJvZHlDb250ZW50KGJhc2tldEl0ZW1zKTtcclxuICAgIHJldHVybiBbXHJcbiAgICAgICdCRUdJTjpWQ0FMRU5EQVJcXHJcXG4nLFxyXG4gICAgICAnUFJPRElEOi0vL01pY3JvcyBUcmF2ZWwvL1NBQlMgQ29ycG9yYXRlIC0gTU1YSUlJLy9FTlxcclxcbicsXHJcbiAgICAgICdWRVJTSU9OOjIuMFxcclxcbicsXHJcbiAgICAgICdNRVRIT0Q6UkVRVUVTVFxcclxcbicsXHJcbiAgICAgIGljc0JvZHlDb250ZW50LFxyXG4gICAgICAnRU5EOlZDQUxFTkRBUlxcclxcbidcclxuICAgIF0uam9pbignJyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzYyAtIGdlbmVyYXRlcyBpY3MgZmlsZSBib2R5IGNvbnRlbnQgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGJhc2tldEl0ZW1zIHBhcmFtXHJcbiAgICovXHJcbiAgZ2VuZXJhdGVJY3NGaWxlQm9keUNvbnRlbnQoYmFza2V0SXRlbXM6IEJhc2tldEl0ZW1bXSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBib2R5Q29udGVudDogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICAvLyBnZW5lcmF0ZSBjYWxlbmRhciBkYXRhIGZvciBlYWNoIGJhc2tldCBpdGVtXHJcbiAgICBiYXNrZXRJdGVtcy5tYXAoKGJhc2tldEl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSB7XHJcbiAgICAgICAgZFN0YXJ0OiAnJyxcclxuICAgICAgICBkRW5kOiAnJyxcclxuICAgICAgICBsb2NhdGlvbkZyb206ICcnLFxyXG4gICAgICAgIGxvY2F0aW9uVG86ICcnLFxyXG4gICAgICAgIGJhc2tldElkOiAnJyxcclxuICAgICAgICBkZXNjcmlwdGlvbjogJycsXHJcbiAgICAgICAgc2VydmljZVR5cGU6ICcnLFxyXG4gICAgICAgIHN1bW1hcnk6ICcnXHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnN0IGRhdGVGb3JtYXQgPSAnREQgTU1NTSBZWVlZIEhIOm1tJztcclxuICAgICAgY29uc3QgeyB0eXBlIH0gPSBiYXNrZXRJdGVtLnNlcnZpY2U7XHJcbiAgICAgIGNvbnN0IHsgYWR1bHRzLCBjaGlsZHJlbiwgYm9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2UsIGRldGFpbCwgc2VydmljZSB9ID1cclxuICAgICAgICBiYXNrZXRJdGVtO1xyXG4gICAgICAvLyBwb3B1bGF0ZSBkYXRhIG9iamVjdCBkZXBlbmRpbmcgb24gdGhlIHNlcnZpY2UgdHlwZSBpbiB0aGUgYmFza2V0XHJcbiAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuTG91bmdlOlxyXG4gICAgICAgICAgZGF0YS5iYXNrZXRJZCA9IGJhc2tldEl0ZW0uaWQ7XHJcbiAgICAgICAgICBkYXRhLmRTdGFydCA9IGRldGFpbD8uYXJyaXZhbERhdGV0aW1lO1xyXG4gICAgICAgICAgZGF0YS5kRW5kID0gJyc7XHJcbiAgICAgICAgICBkYXRhLnN1bW1hcnkgPSBgQWlycG9ydCBMb3VuZ2UgLSAke2RldGFpbC5uYW1lfWA7XHJcbiAgICAgICAgICBkYXRhLnNlcnZpY2VUeXBlID0gc2VydmljZS50eXBlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICBkYXRhLmRlc2NyaXB0aW9uID0gW1xyXG4gICAgICAgICAgICBgTG91bmdlOiAke2RldGFpbC5uYW1lfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBTdGFydHM6ICR7bW9tZW50KGRldGFpbC5hcnJpdmFsRGF0ZXRpbWUpLmZvcm1hdChkYXRlRm9ybWF0KX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQWR1bHRzOiAke2FkdWx0c31cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQ2hpbGRyZW46ICR7Y2hpbGRyZW59XFxyXFxuYCxcclxuICAgICAgICAgICAgYEJvb2tpbmcgUmVmOiAke2Jvb2tpbmdUaGlyZFBhcnR5UmVmZXJlbmNlfWBcclxuICAgICAgICAgIF0uam9pbignJyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLkNhYjpcclxuICAgICAgICAgIGRhdGEuYmFza2V0SWQgPSBiYXNrZXRJdGVtLmlkO1xyXG4gICAgICAgICAgZGF0YS5zZXJ2aWNlVHlwZSA9IHNlcnZpY2UudHlwZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgZGF0YS5kU3RhcnQgPSBkZXRhaWw/LmRlcGFydHM7XHJcbiAgICAgICAgICBkYXRhLmRFbmQgPSAnJztcclxuICAgICAgICAgIGRhdGEuc3VtbWFyeSA9IGBUYXhpIGJvb2tpbmcgLSBmcm9tICR7ZGV0YWlsLmZyb21Mb2NhdGlvbi5hZGRyZXNzfSB0byAke2RldGFpbC50b0xvY2F0aW9uLmFkZHJlc3N9YDtcclxuICAgICAgICAgIGRhdGEuZGVzY3JpcHRpb24gPSBbXHJcbiAgICAgICAgICAgIGBQaWNrdXAgUG9pbnQ6ICR7ZGV0YWlsLmZyb21Mb2NhdGlvbi5hZGRyZXNzfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBUaW1lOiAke21vbWVudChkZXRhaWwuZGVwYXJ0cykuZm9ybWF0KGRhdGVGb3JtYXQpfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBCb29raW5nIFJlZjogJHtib29raW5nVGhpcmRQYXJ0eVJlZmVyZW5jZX1gXHJcbiAgICAgICAgICBdLmpvaW4oJycpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5DYXI6XHJcbiAgICAgICAgICBkYXRhLmJhc2tldElkID0gYmFza2V0SXRlbS5pZDtcclxuICAgICAgICAgIGRhdGEuc2VydmljZVR5cGUgPSBzZXJ2aWNlLnR5cGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIGRhdGEuZFN0YXJ0ID0gZGV0YWlsPy5waWNrVXBEYXRldGltZTtcclxuICAgICAgICAgIGRhdGEuZEVuZCA9IGRldGFpbD8uZHJvcE9mZkRhdGV0aW1lO1xyXG4gICAgICAgICAgZGF0YS5zdW1tYXJ5ID0gYENhciBib29raW5nIC0gZnJvbSAke2RldGFpbC5waWNrVXBMb2NhdGlvbi5hZGRyZXNzfSB0byAke2RldGFpbC5kcm9wT2ZmTG9jYXRpb24uYWRkcmVzc31gO1xyXG4gICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IFtcclxuICAgICAgICAgICAgYFBpY2t1cCBQb2ludDogJHtkZXRhaWwucGlja1VwTG9jYXRpb24uYWRkcmVzc31cXHJcXG5gLFxyXG4gICAgICAgICAgICBgVGltZTogJHttb21lbnQoZGV0YWlsLnBpY2tVcERhdGV0aW1lKS5mb3JtYXQoZGF0ZUZvcm1hdCl9XFxyXFxuYCxcclxuICAgICAgICAgICAgYEFycml2YWwgUG9pbnQ6ICR7ZGV0YWlsLmRyb3BPZmZMb2NhdGlvbi5hZGRyZXNzfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBCb29raW5nIFJlZjogJHtib29raW5nVGhpcmRQYXJ0eVJlZmVyZW5jZX1gXHJcbiAgICAgICAgICBdLmpvaW4oJycpO1xyXG4gICAgICAgICAgKGRhdGEubG9jYXRpb25Gcm9tID0gZGV0YWlsLnBpY2tVcExvY2F0aW9uLmFkZHJlc3MpLFxyXG4gICAgICAgICAgICAoZGF0YS5sb2NhdGlvblRvID0gZGV0YWlsLmRyb3BPZmZMb2NhdGlvbi5hZGRyZXNzKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuQ29hY2g6XHJcbiAgICAgICAgLy8gVE9ETzogaGFuZGxlIHRoaXMgY2FzZVxyXG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuRmFzdFRyYWNrOlxyXG4gICAgICAgIC8vIFRPRE86IGhhbmRsZSB0aGlzIGNhc2VcclxuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLkZsaWdodDpcclxuICAgICAgICAgIGRhdGEuYmFza2V0SWQgPSBiYXNrZXRJdGVtLmlkO1xyXG4gICAgICAgICAgZGF0YS5zZXJ2aWNlVHlwZSA9IHNlcnZpY2UudHlwZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgZGF0YS5kU3RhcnQgPSBkZXRhaWw/Lm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZztcclxuICAgICAgICAgIGRhdGEuZEVuZCA9IGRldGFpbD8ub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lQXJyaXZpbmc7XHJcbiAgICAgICAgICBkYXRhLnN1bW1hcnkgPSBgRmxpZ2h0IEJvb2tpbmcgLSBGcm9tICR7ZGV0YWlsLm91dGJvdW5kRmxpZ2h0c1swXS5vcmlnaW5BaXJwb3J0fSB0byAke2RldGFpbC5vdXRib3VuZEZsaWdodHNbMF0uZGVzdGluYXRpb25BaXJwb3J0fWA7XHJcbiAgICAgICAgICBkYXRhLmRlc2NyaXB0aW9uID0gW1xyXG4gICAgICAgICAgICBgRnJvbTogJHtkZXRhaWwub3V0Ym91bmRGbGlnaHRzWzBdLm9yaWdpbkFpcnBvcnR9XFxyXFxuYCxcclxuICAgICAgICAgICAgYERlcGFydDogJHttb21lbnQoXHJcbiAgICAgICAgICAgICAgZGV0YWlsLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZ1xyXG4gICAgICAgICAgICApLmZvcm1hdChkYXRlRm9ybWF0KX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgVG86ICR7ZGV0YWlsLm91dGJvdW5kRmxpZ2h0c1swXS5kZXN0aW5hdGlvbkFpcnBvcnR9XFxyXFxuYCxcclxuICAgICAgICAgICAgYEFycml2ZTogJHttb21lbnQoXHJcbiAgICAgICAgICAgICAgZGV0YWlsLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZUFycml2aW5nXHJcbiAgICAgICAgICAgICkuZm9ybWF0KGRhdGVGb3JtYXQpfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBCb29raW5nIFJlZjogJHtib29raW5nVGhpcmRQYXJ0eVJlZmVyZW5jZX1gXHJcbiAgICAgICAgICBdLmpvaW4oJycpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Ib3RlbDpcclxuICAgICAgICAgIGRhdGEuYmFza2V0SWQgPSBiYXNrZXRJdGVtLmlkO1xyXG4gICAgICAgICAgZGF0YS5zZXJ2aWNlVHlwZSA9IHNlcnZpY2UudHlwZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgZGF0YS5kU3RhcnQgPSBkZXRhaWw/LmNoZWNrSW47XHJcbiAgICAgICAgICBkYXRhLmRFbmQgPSBkZXRhaWw/LmNoZWNrT3V0O1xyXG4gICAgICAgICAgZGF0YS5zdW1tYXJ5ID0gYEhvdGVsIGJvb2tpbmcgLSAgJHtkZXRhaWwuaG90ZWxOYW1lfWA7XHJcbiAgICAgICAgICBkYXRhLmRlc2NyaXB0aW9uID0gW1xyXG4gICAgICAgICAgICBgSG90ZWw6ICR7ZGV0YWlsLmhvdGVsTmFtZX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQXJyaXZhbDogJHttb21lbnQoZGV0YWlsLmNoZWNrSW4pLmZvcm1hdChkYXRlRm9ybWF0KX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgRGVwYXJ0dXJlOiAke21vbWVudChkZXRhaWwuY2hlY2tPdXQpLmZvcm1hdChkYXRlRm9ybWF0KX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQm9va2luZyBSZWY6ICR7Ym9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2V9YFxyXG4gICAgICAgICAgXS5qb2luKCcnKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWw6XHJcbiAgICAgICAgICBkYXRhLmJhc2tldElkID0gYmFza2V0SXRlbS5pZDtcclxuICAgICAgICAgIGRhdGEuc2VydmljZVR5cGUgPSBzZXJ2aWNlLnR5cGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIGRhdGEuZFN0YXJ0ID0gZGV0YWlsPy5vdXR3YXJkRGV0YWlsLmRlcGFydHVyZURhdGVUaW1lO1xyXG4gICAgICAgICAgZGF0YS5kRW5kID0gZGV0YWlsPy5vdXR3YXJkRGV0YWlsLmFycml2YWxEYXRlVGltZTtcclxuICAgICAgICAgIGRhdGEubG9jYXRpb25Gcm9tID0gZGV0YWlsLm91dHdhcmREZXRhaWwuZGVwYXJ0dXJlU3RhdGlvbk5hbWU7XHJcbiAgICAgICAgICBkYXRhLmxvY2F0aW9uVG8gPSBkZXRhaWwub3V0d2FyZERldGFpbC5hcnJpdmFsRGF0ZVRpbWU7XHJcbiAgICAgICAgICBkYXRhLnN1bW1hcnkgPSBgVHJhaW4gQm9va2luZyAtIEZyb20gJHtkZXRhaWwub3V0d2FyZERldGFpbC5kZXBhcnR1cmVTdGF0aW9uTmFtZX0gdG8gJHtkZXRhaWwub3V0d2FyZERldGFpbC5hcnJpdmFsU3RhdGlvbk5hbWV9YDtcclxuICAgICAgICAgIGRhdGEuZGVzY3JpcHRpb24gPSBbXHJcbiAgICAgICAgICAgIGBGcm9tICR7ZGV0YWlsLm91dHdhcmREZXRhaWwuZGVwYXJ0dXJlU3RhdGlvbk5hbWV9XFxyXFxuYCxcclxuICAgICAgICAgICAgYFRvICR7ZGV0YWlsLm91dHdhcmREZXRhaWwuYXJyaXZhbFN0YXRpb25OYW1lfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBEZXBhcnR1cmUgJHttb21lbnQoZGV0YWlsLm91dHdhcmREZXRhaWwuZGVwYXJ0dXJlRGF0ZVRpbWUpLmZvcm1hdChcclxuICAgICAgICAgICAgICBkYXRlRm9ybWF0XHJcbiAgICAgICAgICAgICl9XFxyXFxuYCxcclxuICAgICAgICAgICAgYEFycml2YWwgJHttb21lbnQoZGV0YWlsLm91dHdhcmREZXRhaWwuYXJyaXZhbERhdGVUaW1lKS5mb3JtYXQoXHJcbiAgICAgICAgICAgICAgZGF0ZUZvcm1hdFxyXG4gICAgICAgICAgICApfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBCb29raW5nIFJlZjogJHtib29raW5nVGhpcmRQYXJ0eVJlZmVyZW5jZX1gXHJcbiAgICAgICAgICBdLmpvaW4oJycpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5QYXJraW5nOlxyXG4gICAgICAgICAgZGF0YS5iYXNrZXRJZCA9IGJhc2tldEl0ZW0uaWQ7XHJcbiAgICAgICAgICBkYXRhLnNlcnZpY2VUeXBlID0gc2VydmljZS50eXBlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICBkYXRhLmRTdGFydCA9IGRldGFpbD8uYXJyaXZhbERhdGV0aW1lO1xyXG4gICAgICAgICAgZGF0YS5kRW5kID0gZGV0YWlsPy5kZXBhcnREYXRldGltZTtcclxuICAgICAgICAgIGRhdGEuc3VtbWFyeSA9IGBBaXJwb3J0IHBhcmtpbmcgLSAke2RldGFpbC5uYW1lfWA7XHJcbiAgICAgICAgICBkYXRhLmRlc2NyaXB0aW9uID0gW1xyXG4gICAgICAgICAgICBgQWlycG9ydCBQYXJraW5nOiAke2RldGFpbC5uYW1lfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBCb29raW5nIFJlZjogJHtib29raW5nVGhpcmRQYXJ0eVJlZmVyZW5jZX1gXHJcbiAgICAgICAgICBdLmpvaW4oJycpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5SYWlsOlxyXG4gICAgICAgICAgZGF0YS5iYXNrZXRJZCA9IGJhc2tldEl0ZW0uaWQ7XHJcbiAgICAgICAgICBkYXRhLnNlcnZpY2VUeXBlID0gc2VydmljZS50eXBlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICBkYXRhLmRTdGFydCA9IGRldGFpbD8ub3V0d2FyZERldGFpbC5kZXBhcnR1cmVEYXRlVGltZTtcclxuICAgICAgICAgIGRhdGEuZEVuZCA9IGRldGFpbD8ub3V0d2FyZERldGFpbC5hcnJpdmFsRGF0ZVRpbWU7XHJcbiAgICAgICAgICBkYXRhLmxvY2F0aW9uRnJvbSA9IGRldGFpbC5vdXR3YXJkRGV0YWlsLmRlcGFydHVyZVN0YXRpb25OYW1lO1xyXG4gICAgICAgICAgZGF0YS5sb2NhdGlvblRvID0gZGV0YWlsLm91dHdhcmREZXRhaWwuYXJyaXZhbERhdGVUaW1lO1xyXG4gICAgICAgICAgZGF0YS5zdW1tYXJ5ID0gYFRyYWluIEJvb2tpbmcgLSBGcm9tICR7ZGV0YWlsLm91dHdhcmREZXRhaWwuZGVwYXJ0dXJlU3RhdGlvbk5hbWV9IHRvICR7ZGV0YWlsLm91dHdhcmREZXRhaWwuYXJyaXZhbFN0YXRpb25OYW1lfWA7XHJcbiAgICAgICAgICBkYXRhLmRlc2NyaXB0aW9uID0gW1xyXG4gICAgICAgICAgICBgRnJvbSAke2RldGFpbC5vdXR3YXJkRGV0YWlsLmRlcGFydHVyZVN0YXRpb25OYW1lfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBUbyAke2RldGFpbC5vdXR3YXJkRGV0YWlsLmFycml2YWxTdGF0aW9uTmFtZX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgRGVwYXJ0dXJlICR7bW9tZW50KGRldGFpbC5vdXR3YXJkRGV0YWlsLmRlcGFydHVyZURhdGVUaW1lKS5mb3JtYXQoXHJcbiAgICAgICAgICAgICAgZGF0ZUZvcm1hdFxyXG4gICAgICAgICAgICApfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBBcnJpdmFsICR7bW9tZW50KGRldGFpbC5vdXR3YXJkRGV0YWlsLmFycml2YWxEYXRlVGltZSkuZm9ybWF0KFxyXG4gICAgICAgICAgICAgIGRhdGVGb3JtYXRcclxuICAgICAgICAgICAgKX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQm9va2luZyBSZWY6ICR7Ym9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2V9YFxyXG4gICAgICAgICAgXS5qb2luKCcnKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBib2R5Q29udGVudC5wdXNoKFxyXG4gICAgICAgIFtcclxuICAgICAgICAgICdCRUdJTjpWRVZFTlRcXHJcXG4nLFxyXG4gICAgICAgICAgZGF0YS5kU3RhcnRcclxuICAgICAgICAgICAgPyBgRFRTVEFSVDoke21vbWVudChkYXRhLmRTdGFydCkuZm9ybWF0KCdZWVlZTU1ERFRISG1tc3MnKX1cXHJcXG5gXHJcbiAgICAgICAgICAgIDogJycsXHJcbiAgICAgICAgICBkYXRhLmRFbmRcclxuICAgICAgICAgICAgPyBgRFRFTkQ6JHttb21lbnQoZGF0YS5kRW5kKS5mb3JtYXQoJ1lZWVlNTUREVEhIbW1zcycpfVxcclxcbmBcclxuICAgICAgICAgICAgOiAnJyxcclxuICAgICAgICAgICdPUkdBTklaRVI7Q049XCJEbyBub3QgcmVwbHkgdG8gdGhpcyBlbWFpbFwiOm1haWx0bzpkb19ub3RfcmVwbHlAc2Fic2NvcnAuY29tXFxyXFxuJyxcclxuICAgICAgICAgIGRhdGEubG9jYXRpb25UbyAmJiBkYXRhLmxvY2F0aW9uRnJvbVxyXG4gICAgICAgICAgICA/IGBMT0NBVElPTjogJHtkYXRhLmxvY2F0aW9uVG99IHRvICR7ZGF0YS5sb2NhdGlvbkZyb219IFxcclxcbmBcclxuICAgICAgICAgICAgOiAnJyxcclxuICAgICAgICAgICdUUkFOU1A6T1BBUVVFXFxyXFxuJyxcclxuICAgICAgICAgICdTRVFVRU5DRTowXFxyXFxuJyxcclxuICAgICAgICAgIGBVSUQ6JHtkYXRhLnNlcnZpY2VUeXBlfV8ke2luZGV4fV8ke2RhdGEuYmFza2V0SWR9QHNhYnNjb3JwLmNvbVxcclxcbmAsXHJcbiAgICAgICAgICBgRFRTVEFNUDoke21vbWVudCgpLmZvcm1hdCgnWVlZWU1NRERUSEhtbXNzJyl9XFxyXFxuYCxcclxuICAgICAgICAgIGBERVNDUklQVElPTjoke2RhdGEuZGVzY3JpcHRpb259XFxyXFxuYCxcclxuICAgICAgICAgIGBTVU1NQVJZOiR7ZGF0YS5zdW1tYXJ5fVxcclxcbmAsXHJcbiAgICAgICAgICAnRU5EOlZFVkVOVFxcclxcbidcclxuICAgICAgICBdLmpvaW4oJycpXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gYm9keUNvbnRlbnQuam9pbignJyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzYyAtIGNyZWF0ZXMgYW4gZWxlbWVudCBpbiBtZW1vcnkgYW5kIHRyaWdnZXJzIGNsaWNrIGV2ZW50IHRvIGRvd25sb2FkIGljcyBmaWxlXHJcbiAgICovXHJcbiAgZG93bmxvYWRJY3MoZmlsZW5hbWU6IHN0cmluZywgdGV4dDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXHJcbiAgICAgICdocmVmJyxcclxuICAgICAgJ2RhdGE6dGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04LCcgKyBlbmNvZGVVUklDb21wb25lbnQodGV4dClcclxuICAgICk7XHJcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBmaWxlbmFtZSk7XHJcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgndGFyZ2V0JywgJ19ibGFuaycpO1xyXG4gICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgZWxlbWVudC5jbGljaygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gc3BsaXQgYSBzdHJpbmcgb24gY2FwaXRhbHNcclxuICAgKiBAcGFyYW0gcmF3U3RyaW5nIC0gdGhlIHN0cmluZyB3ZSB3YW50IHRvIHNwbGl0XHJcbiAgICogQHBhcmFtIGpvaW4gLSB3aGV0aGVyIG9yIG5vdCB0byBqb2luZyB0aGUgc3BsaXQgaW50byBvbmUgc3RyaW5nLCBzZXBlcmF0ZWQgYnkgYSBzcGFjZVxyXG4gICAqIEByZXR1cm5zIHN0cmluZy9zdHJpbmdbXVxyXG4gICAqL1xyXG4gIHNwbGl0U3RyaW5nT25DYXBpdGFscyhcclxuICAgIHJhd1N0cmluZzogc3RyaW5nLFxyXG4gICAgam9pbjogYm9vbGVhbiA9IGZhbHNlXHJcbiAgKTogc3RyaW5nIHwgc3RyaW5nW10ge1xyXG4gICAgY29uc3Qgc3BsaXRTdHJpbmcgPSByYXdTdHJpbmcuc3BsaXQoLyg/PVtBLVpdKS8pO1xyXG5cclxuICAgIGlmIChqb2luKSB7XHJcbiAgICAgIHJldHVybiBzcGxpdFN0cmluZy5qb2luKCcgJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHNwbGl0U3RyaW5nO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlRmxpZ2h0RmlsdGVycyhcclxuICAgIGpvdXJuZXlzOiBGbGlnaHRJdGluZXJhcnlbXSxcclxuICAgIGRlZmF1bHRGaWx0ZXJzOiBGbGlnaHRGaWx0ZXJzXHJcbiAgKTogRmxpZ2h0RmlsdGVycyB7XHJcbiAgICByZXR1cm4gam91cm5leXMucmVkdWNlKFxyXG4gICAgICAoZmlsdGVyczogRmxpZ2h0RmlsdGVycywgcmVzdWx0MTogRmxpZ2h0SXRpbmVyYXJ5KTogRmxpZ2h0RmlsdGVycyA9PiB7XHJcbiAgICAgICAgY29uc3Qgb3V0U3RvcHMgPSByZXN1bHQxLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxO1xyXG4gICAgICAgIGZpbHRlcnMuc3RvcHNbb3V0U3RvcHNdID0gZmlsdGVycy5zdG9wc1tvdXRTdG9wc10gfHwge1xyXG4gICAgICAgICAgZGlzcGxheTpcclxuICAgICAgICAgICAgb3V0U3RvcHMgPT09IDBcclxuICAgICAgICAgICAgICA/ICdEaXJlY3QnXHJcbiAgICAgICAgICAgICAgOiBgJHtvdXRTdG9wc30gc3RvcGAgKyAob3V0U3RvcHMgIT09IDEgPyAncycgOiAnJyksXHJcbiAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXHJcbiAgICAgICAgICB2YWx1ZTogb3V0U3RvcHMgKyAxXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgaW5TdG9wcyA9IHJlc3VsdDEuaW5ib3VuZEZsaWdodHNcclxuICAgICAgICAgID8gcmVzdWx0MS5pbmJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXHJcbiAgICAgICAgICA6IDA7XHJcbiAgICAgICAgY29uc3QgdG90YWxTdG9wcyA9IGluU3RvcHMgPiBvdXRTdG9wcyA/IGluU3RvcHMgOiBvdXRTdG9wcztcclxuICAgICAgICBmaWx0ZXJzLnRvdGFsU3RvcHNbdG90YWxTdG9wc10gPSBmaWx0ZXJzLnRvdGFsU3RvcHNbdG90YWxTdG9wc10gfHwge1xyXG4gICAgICAgICAgZGlzcGxheTpcclxuICAgICAgICAgICAgdG90YWxTdG9wcyA9PT0gMFxyXG4gICAgICAgICAgICAgID8gJ0RpcmVjdCdcclxuICAgICAgICAgICAgICA6IGAke3RvdGFsU3RvcHN9IHN0b3BgICsgKHRvdGFsU3RvcHMgIT09IDEgPyAncycgOiAnJyksXHJcbiAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXHJcbiAgICAgICAgICB2YWx1ZTogdG90YWxTdG9wcyArIDFcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCB1cGRhdGVGbGlnaHRJdGVtcyA9IChmbGlnaHQ6IEZsaWdodEpvdXJuZXkpOiB2b2lkID0+IHtcclxuICAgICAgICAgIGZpbHRlcnMuY2xhc3Nlc1tmbGlnaHQuY2FiaW5DbGFzc10gPSBmaWx0ZXJzLmNsYXNzZXNbXHJcbiAgICAgICAgICAgIGZsaWdodC5jYWJpbkNsYXNzXHJcbiAgICAgICAgICBdIHx8IHtcclxuICAgICAgICAgICAgZGlzcGxheTogZmxpZ2h0LmNhYmluQ2xhc3MsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgdmFsdWU6IGZsaWdodC5jYWJpbkNsYXNzXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgZmlsdGVycy5haXJsaW5lc1tmbGlnaHQubWFya2V0aW5nQ2Fycmllcl0gPSBmaWx0ZXJzLmFpcmxpbmVzW1xyXG4gICAgICAgICAgICBmbGlnaHQubWFya2V0aW5nQ2FycmllclxyXG4gICAgICAgICAgXSB8fCB7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsaWdodC5tYXJrZXRpbmdDYXJyaWVyTmFtZSxcclxuICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICB2YWx1ZTogZmxpZ2h0Lm1hcmtldGluZ0NhcnJpZXJcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXN1bHQxLm91dGJvdW5kRmxpZ2h0cy5mb3JFYWNoKHVwZGF0ZUZsaWdodEl0ZW1zKTtcclxuICAgICAgICBjb25zdCBiYWdnYWdlQXJyYXk6IG51bWJlcltdID0gcmVzdWx0MS5iYWdnYWdlQWxsb3dhbmNlLm1hcChcclxuICAgICAgICAgIChiYWdnYWdlQWxsb3dhbmNlOiBCYWdnYWdlQWxsb3dhbmNlKSA9PiBiYWdnYWdlQWxsb3dhbmNlLnF0eVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgYmFnZ2FnZTogbnVtYmVyID0gYmFnZ2FnZUFycmF5Lmxlbmd0aFxyXG4gICAgICAgICAgPyBNYXRoLm1pbiguLi5iYWdnYWdlQXJyYXkpXHJcbiAgICAgICAgICA6IDA7XHJcbiAgICAgICAgZmlsdGVycy5iYWdnYWdlW2JhZ2dhZ2VdID0gZmlsdGVycy5iYWdnYWdlW2JhZ2dhZ2VdIHx8IHtcclxuICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICAgIGRpc3BsYXk6IGAke2JhZ2dhZ2V9IGJhZyR7YmFnZ2FnZSA+IDEgPyAncycgOiAnJ31gLFxyXG4gICAgICAgICAgdmFsdWU6IGJhZ2dhZ2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGluZGV4ZWRGbGlnaHQgPSAoXHJcbiAgICAgICAgICBmbGlnaHRzOiBGbGlnaHRKb3VybmV5W10sXHJcbiAgICAgICAgICBmaWx0ZXJBdHRyaWJ1dGU6IEZsaWdodEZpbHRlcnNSZWNvcmRLZXlzLFxyXG4gICAgICAgICAgZmxpZ2h0QXR0cmlidXRlOiBrZXlvZiBGbGlnaHRKb3VybmV5LFxyXG4gICAgICAgICAgZmxpZ2h0QXR0cmlidXRlTmFtZToga2V5b2YgRmxpZ2h0Sm91cm5leSxcclxuICAgICAgICAgIGluZGV4OiBudW1iZXJcclxuICAgICAgICApOiB2b2lkID0+IHtcclxuICAgICAgICAgIGNvbnN0IHRlbXA6IHN0cmluZyA9XHJcbiAgICAgICAgICAgIGZsaWdodHMgJiYgZmxpZ2h0c1tpbmRleF1cclxuICAgICAgICAgICAgICA/IGZsaWdodHNbaW5kZXhdW2ZsaWdodEF0dHJpYnV0ZV1cclxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcclxuICAgICAgICAgIGlmICh0ZW1wICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZmlsdGVyc1tmaWx0ZXJBdHRyaWJ1dGVdW3RlbXBdID0gZmlsdGVyc1tmaWx0ZXJBdHRyaWJ1dGVdW3RlbXBdIHx8IHtcclxuICAgICAgICAgICAgICB2YWx1ZTogZmxpZ2h0c1tpbmRleF1bZmxpZ2h0QXR0cmlidXRlXSxcclxuICAgICAgICAgICAgICBkaXNwbGF5OiBmbGlnaHRzW2luZGV4XVtmbGlnaHRBdHRyaWJ1dGVOYW1lXSxcclxuICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2VcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGluZGV4ZWRGbGlnaHQoXHJcbiAgICAgICAgICByZXN1bHQxLm91dGJvdW5kRmxpZ2h0cyxcclxuICAgICAgICAgICdkZXBhdHVyZUFpcnBvcnQnLFxyXG4gICAgICAgICAgJ29yaWdpbkFpcnBvcnQnLFxyXG4gICAgICAgICAgJ29yaWdpbkFpcnBvcnROYW1lJyxcclxuICAgICAgICAgIDBcclxuICAgICAgICApO1xyXG4gICAgICAgIGluZGV4ZWRGbGlnaHQoXHJcbiAgICAgICAgICByZXN1bHQxLm91dGJvdW5kRmxpZ2h0cyxcclxuICAgICAgICAgICdhcnJpdmFsQWlycG9ydCcsXHJcbiAgICAgICAgICAnZGVzdGluYXRpb25BaXJwb3J0JyxcclxuICAgICAgICAgICdkZXN0aW5hdGlvbkFpcnBvcnROYW1lJyxcclxuICAgICAgICAgIHJlc3VsdDEub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBmaWx0ZXJzLnByaWNlLm1pbiA9XHJcbiAgICAgICAgICBmaWx0ZXJzLnByaWNlLm1pbiA8IHJlc3VsdDEudG90YWwucHJpY2VcclxuICAgICAgICAgICAgPyBmaWx0ZXJzLnByaWNlLm1pblxyXG4gICAgICAgICAgICA6IHJlc3VsdDEudG90YWwucHJpY2U7XHJcblxyXG4gICAgICAgIGZpbHRlcnMucHJpY2UubWF4ID1cclxuICAgICAgICAgIGZpbHRlcnMucHJpY2UubWF4ID4gcmVzdWx0MS50b3RhbC5wcmljZVxyXG4gICAgICAgICAgICA/IGZpbHRlcnMucHJpY2UubWF4XHJcbiAgICAgICAgICAgIDogcmVzdWx0MS50b3RhbC5wcmljZTtcclxuXHJcbiAgICAgICAgZmlsdGVycy5kdXJhdGlvbi5taW4gPVxyXG4gICAgICAgICAgZmlsdGVycy5kdXJhdGlvbi5taW4gPCByZXN1bHQxLm91dGJvdW5kVG90YWxEdXJhdGlvblxyXG4gICAgICAgICAgICA/IGZpbHRlcnMuZHVyYXRpb24ubWluXHJcbiAgICAgICAgICAgIDogcmVzdWx0MS5vdXRib3VuZFRvdGFsRHVyYXRpb247XHJcblxyXG4gICAgICAgIGZpbHRlcnMuZHVyYXRpb24ubWF4ID1cclxuICAgICAgICAgIGZpbHRlcnMuZHVyYXRpb24ubWF4ID4gcmVzdWx0MS5vdXRib3VuZFRvdGFsRHVyYXRpb25cclxuICAgICAgICAgICAgPyBmaWx0ZXJzLmR1cmF0aW9uLm1heFxyXG4gICAgICAgICAgICA6IHJlc3VsdDEub3V0Ym91bmRUb3RhbER1cmF0aW9uO1xyXG5cclxuICAgICAgICBjb25zdCBkZXBhcnRUaW1lID0gbW9tZW50KFxyXG4gICAgICAgICAgcmVzdWx0MS5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmdcclxuICAgICAgICApLmdldCgnaG91cicpO1xyXG5cclxuICAgICAgICBmaWx0ZXJzLmRlcGFydHVyZVRpbWUubWluID1cclxuICAgICAgICAgIGZpbHRlcnMuZGVwYXJ0dXJlVGltZS5taW4gPCBkZXBhcnRUaW1lXHJcbiAgICAgICAgICAgID8gZmlsdGVycy5kZXBhcnR1cmVUaW1lLm1pblxyXG4gICAgICAgICAgICA6IGRlcGFydFRpbWU7XHJcbiAgICAgICAgZmlsdGVycy5kZXBhcnR1cmVUaW1lLm1heCA9XHJcbiAgICAgICAgICBmaWx0ZXJzLmRlcGFydHVyZVRpbWUubWF4ID4gZGVwYXJ0VGltZVxyXG4gICAgICAgICAgICA/IGZpbHRlcnMuZGVwYXJ0dXJlVGltZS5tYXhcclxuICAgICAgICAgICAgOiBkZXBhcnRUaW1lO1xyXG5cclxuICAgICAgICBjb25zdCBhcnJpdmFsVGltZSA9IG1vbWVudChcclxuICAgICAgICAgIHJlc3VsdDEub3V0Ym91bmRGbGlnaHRzW3Jlc3VsdDEub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFdXHJcbiAgICAgICAgICAgIC5kYXRlVGltZUFycml2aW5nXHJcbiAgICAgICAgKS5nZXQoJ2hvdXInKTtcclxuXHJcbiAgICAgICAgZmlsdGVycy5hcnJpdmFsVGltZS5taW4gPVxyXG4gICAgICAgICAgZmlsdGVycy5hcnJpdmFsVGltZS5taW4gPCBhcnJpdmFsVGltZVxyXG4gICAgICAgICAgICA/IGZpbHRlcnMuYXJyaXZhbFRpbWUubWluXHJcbiAgICAgICAgICAgIDogYXJyaXZhbFRpbWU7XHJcbiAgICAgICAgZmlsdGVycy5hcnJpdmFsVGltZS5tYXggPVxyXG4gICAgICAgICAgZmlsdGVycy5hcnJpdmFsVGltZS5tYXggPiBhcnJpdmFsVGltZVxyXG4gICAgICAgICAgICA/IGZpbHRlcnMuYXJyaXZhbFRpbWUubWF4XHJcbiAgICAgICAgICAgIDogYXJyaXZhbFRpbWU7XHJcblxyXG4gICAgICAgIGlmIChyZXN1bHQxLmluYm91bmRGbGlnaHRzICYmIHJlc3VsdDEuaW5ib3VuZEZsaWdodHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgZmlsdGVycy5yZXR1cm5EdXJhdGlvbi5taW4gPVxyXG4gICAgICAgICAgICBmaWx0ZXJzLnJldHVybkR1cmF0aW9uLm1pbiA8IHJlc3VsdDEuaW5ib3VuZFRvdGFsRHVyYXRpb25cclxuICAgICAgICAgICAgICA/IGZpbHRlcnMucmV0dXJuRHVyYXRpb24ubWluXHJcbiAgICAgICAgICAgICAgOiByZXN1bHQxLmluYm91bmRUb3RhbER1cmF0aW9uO1xyXG5cclxuICAgICAgICAgIGZpbHRlcnMucmV0dXJuRHVyYXRpb24ubWF4ID1cclxuICAgICAgICAgICAgZmlsdGVycy5yZXR1cm5EdXJhdGlvbi5tYXggPiByZXN1bHQxLmluYm91bmRUb3RhbER1cmF0aW9uXHJcbiAgICAgICAgICAgICAgPyBmaWx0ZXJzLnJldHVybkR1cmF0aW9uLm1heFxyXG4gICAgICAgICAgICAgIDogcmVzdWx0MS5pbmJvdW5kVG90YWxEdXJhdGlvbjtcclxuXHJcbiAgICAgICAgICBjb25zdCBkZXBhcnRUaW1lUmV0dXJuID1cclxuICAgICAgICAgICAgcmVzdWx0MSAmJiByZXN1bHQxLmluYm91bmRGbGlnaHRzICYmIHJlc3VsdDEuaW5ib3VuZEZsaWdodHNbMF1cclxuICAgICAgICAgICAgICA/IG1vbWVudChyZXN1bHQxLmluYm91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKS5nZXQoJ2hvdXInKVxyXG4gICAgICAgICAgICAgIDogLTE7XHJcblxyXG4gICAgICAgICAgZmlsdGVycy5yZXR1cm5EZXBhcnR1cmVUaW1lLm1pbiA9XHJcbiAgICAgICAgICAgIGZpbHRlcnMucmV0dXJuRGVwYXJ0dXJlVGltZS5taW4gPCBkZXBhcnRUaW1lUmV0dXJuXHJcbiAgICAgICAgICAgICAgPyBmaWx0ZXJzLnJldHVybkRlcGFydHVyZVRpbWUubWluXHJcbiAgICAgICAgICAgICAgOiBkZXBhcnRUaW1lUmV0dXJuO1xyXG4gICAgICAgICAgZmlsdGVycy5yZXR1cm5EZXBhcnR1cmVUaW1lLm1heCA9XHJcbiAgICAgICAgICAgIGZpbHRlcnMucmV0dXJuRGVwYXJ0dXJlVGltZS5tYXggPiBkZXBhcnRUaW1lUmV0dXJuXHJcbiAgICAgICAgICAgICAgPyBmaWx0ZXJzLnJldHVybkRlcGFydHVyZVRpbWUubWF4XHJcbiAgICAgICAgICAgICAgOiBkZXBhcnRUaW1lUmV0dXJuO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGFycml2YWxUaW1lUmV0dXJuID0gbW9tZW50KFxyXG4gICAgICAgICAgICByZXN1bHQxLm91dGJvdW5kRmxpZ2h0c1tyZXN1bHQxLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXVxyXG4gICAgICAgICAgICAgIC5kYXRlVGltZUFycml2aW5nXHJcbiAgICAgICAgICApLmdldCgnaG91cicpO1xyXG5cclxuICAgICAgICAgIGZpbHRlcnMucmV0dXJuQXJyaXZhbFRpbWUubWluID1cclxuICAgICAgICAgICAgZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZS5taW4gPCBhcnJpdmFsVGltZVJldHVyblxyXG4gICAgICAgICAgICAgID8gZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZS5taW5cclxuICAgICAgICAgICAgICA6IGFycml2YWxUaW1lUmV0dXJuO1xyXG4gICAgICAgICAgZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZS5tYXggPVxyXG4gICAgICAgICAgICBmaWx0ZXJzLnJldHVybkFycml2YWxUaW1lLm1heCA+IGFycml2YWxUaW1lUmV0dXJuXHJcbiAgICAgICAgICAgICAgPyBmaWx0ZXJzLnJldHVybkFycml2YWxUaW1lLm1heFxyXG4gICAgICAgICAgICAgIDogYXJyaXZhbFRpbWVSZXR1cm47XHJcblxyXG4gICAgICAgICAgKHJlc3VsdDEuaW5ib3VuZEZsaWdodHMgfHwgW10pLmZvckVhY2godXBkYXRlRmxpZ2h0SXRlbXMpO1xyXG4gICAgICAgICAgaW5kZXhlZEZsaWdodChcclxuICAgICAgICAgICAgcmVzdWx0MS5pbmJvdW5kRmxpZ2h0cyxcclxuICAgICAgICAgICAgJ2RlcGF0dXJlUmV0dXJuQWlycG9ydCcsXHJcbiAgICAgICAgICAgICdvcmlnaW5BaXJwb3J0JyxcclxuICAgICAgICAgICAgJ29yaWdpbkFpcnBvcnROYW1lJyxcclxuICAgICAgICAgICAgMFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGluZGV4ZWRGbGlnaHQoXHJcbiAgICAgICAgICAgIHJlc3VsdDEuaW5ib3VuZEZsaWdodHMsXHJcbiAgICAgICAgICAgICdhcnJpdmFsUmV0dXJuQWlycG9ydCcsXHJcbiAgICAgICAgICAgICdkZXN0aW5hdGlvbkFpcnBvcnQnLFxyXG4gICAgICAgICAgICAnZGVzdGluYXRpb25BaXJwb3J0TmFtZScsXHJcbiAgICAgICAgICAgIHJlc3VsdDEuaW5ib3VuZEZsaWdodHMubGVuZ3RoIC0gMVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZpbHRlcnM7XHJcbiAgICAgIH0sXHJcbiAgICAgIHRoaXMuY2xvbmUoZGVmYXVsdEZpbHRlcnMpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbWFwT3Zlck9iamVjdDxWPihcclxuICAgIGl0ZW1zOiBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyLCBWPixcclxuICAgIGNhbGxiYWNrOiAodmFsdWU6IFYsIGtleT86IHN0cmluZyB8IG51bWJlcikgPT4gVlxyXG4gICk6IFJlY29yZDxzdHJpbmcgfCBudW1iZXIsIFY+IHtcclxuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhpdGVtcykucmVkdWNlKFxyXG4gICAgICAoYWNjdW06IFJlY29yZDxzdHJpbmcgfCBudW1iZXIsIFY+LCBlbnRyaWVzOiBbc3RyaW5nIHwgbnVtYmVyLCBWXSkgPT4ge1xyXG4gICAgICAgIGFjY3VtW2VudHJpZXNbMF1dID0gY2FsbGJhY2soZW50cmllc1sxXSwgZW50cmllc1swXSk7XHJcbiAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICB9LFxyXG4gICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyLCBWPlxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG5vcm1hbGlzZU1pbnV0ZVRvQmFzZTEwKG1pbjogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBNYXRoLnJvdW5kKChtaW4gKiAxMDApIC8gNjApO1xyXG4gIH1cclxuXHJcbiAgT0JURmxpZ2h0Q2FiaW5DbGFzc1RvRmxpZ2h0Q2FiaW5DbGFzcyhcclxuICAgIHZhbHVlOiBPQlRGbGlnaHRDYWJpbkNsYXNzXHJcbiAgKTogTWFpbkZsaWdodENhYmluQ2xhc3Mge1xyXG4gICAgY29uc3QgT0JURmxpZ2h0Q2FiaW5DbGFzc1RvRmxpZ2h0Q2FiaW5DbGFzczogUmVjb3JkPFxyXG4gICAgICBPQlRGbGlnaHRDYWJpbkNsYXNzLFxyXG4gICAgICBNYWluRmxpZ2h0Q2FiaW5DbGFzc1xyXG4gICAgPiA9IHtcclxuICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3NdOiBGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzLFxyXG4gICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzc0JyYW5kZWRdOiBGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzLFxyXG4gICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215RmxleGldOiBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aSxcclxuICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teUZsZXhpQnJhbmRlZF06IEZsaWdodENhYmluQ2xhc3MuRWNvbm9teUZsZXhpLFxyXG4gICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215Tm9CYWdzXTogRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215Tm9CYWdzLFxyXG4gICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215Tm9CYWdzQnJhbmRlZF06XHJcbiAgICAgICAgRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215Tm9CYWdzLFxyXG4gICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZF06XHJcbiAgICAgICAgRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZCxcclxuICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWRCcmFuZGVkXTpcclxuICAgICAgICBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkLFxyXG4gICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdF06IEZsaWdodENhYmluQ2xhc3MuRmlyc3QsXHJcbiAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkZpcnN0QnJhbmRlZF06IEZsaWdodENhYmluQ2xhc3MuRmlyc3QsXHJcbiAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215XTogRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teSxcclxuICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXlCcmFuZGVkXTpcclxuICAgICAgICBGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIE9CVEZsaWdodENhYmluQ2xhc3NUb0ZsaWdodENhYmluQ2xhc3NbdmFsdWVdO1xyXG4gIH1cclxuICBGbGlnaHRDYWJpbkNsYXNzVG9CcmFuZGVkT0JURmxpZ2h0Q2FiaW5DbGFzcyhcclxuICAgIHZhbHVlOiBGbGlnaHRHcm91cHMsXHJcbiAgICBpc0JyYW5kZWQ6IGJvb2xlYW5cclxuICApOiBPQlRGbGlnaHRDYWJpbkNsYXNzIHtcclxuICAgIGNvbnN0IHR5cGVzOiBSZWNvcmQ8RmxpZ2h0R3JvdXBzLCBPQlRGbGlnaHRDYWJpbkNsYXNzPiA9IGlzQnJhbmRlZFxyXG4gICAgICA/IHtcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215XTpcclxuICAgICAgICAgICAgT0JURmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teUJyYW5kZWQsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtQnVzaW5lc3NdOlxyXG4gICAgICAgICAgICBPQlRGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzQnJhbmRlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkxpdGVFY29ub215XTpcclxuICAgICAgICAgICAgT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZEJyYW5kZWQsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215XTpcclxuICAgICAgICAgICAgT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZEJyYW5kZWQsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRmlyc3RdOiBPQlRGbGlnaHRDYWJpbkNsYXNzLkZpcnN0QnJhbmRlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkXTpcclxuICAgICAgICAgICAgT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZEJyYW5kZWQsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teV06XHJcbiAgICAgICAgICAgIE9CVEZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXlCcmFuZGVkLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuRWNvbm9teUZsZXhpXTpcclxuICAgICAgICAgICAgT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215RmxleGlCcmFuZGVkLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFnc106XHJcbiAgICAgICAgICAgIE9CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFnc0JyYW5kZWQsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzc106IE9CVEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3NCcmFuZGVkLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuRmlyc3RdOiBPQlRGbGlnaHRDYWJpbkNsYXNzLkZpcnN0QnJhbmRlZFxyXG4gICAgICAgIH1cclxuICAgICAgOiB7XHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teV06IE9CVEZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXksXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtQnVzaW5lc3NdOiBPQlRGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuTGl0ZUVjb25vbXldOiBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuRWNvbm9teV06IE9CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWQsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRmlyc3RdOiBPQlRGbGlnaHRDYWJpbkNsYXNzLkZpcnN0LFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWRdOlxyXG4gICAgICAgICAgICBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXldOiBPQlRGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215LFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuRWNvbm9teUZsZXhpXTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215RmxleGksXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215Tm9CYWdzXTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215Tm9CYWdzLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3NdOiBPQlRGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuRmlyc3RdOiBPQlRGbGlnaHRDYWJpbkNsYXNzLkZpcnN0XHJcbiAgICAgICAgfTtcclxuICAgIHJldHVybiB0eXBlc1t2YWx1ZV07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBjb252ZXJ0IGZyb20gbWV0cmVzIHRvIG1pbGVzXHJcbiAgICogQHBhcmFtIG1ldHJlcyAtIHRoZSBhbW91bnQgb2YgbWV0cmVzIHRvIGNvbnZlcnRcclxuICAgKiBAcGFyYW0gZGVjaW1hbFBsYWNlcyAtIHRoZSBhbW91bnQgb2YgZC5wIHRvIGNvbnZlcnQgdG8sIGlmIG5lZ2F0aXZlIChkZWZhdWx0KSBkb2VzIG5vdCByZXN0cmljdCB0aGUgZGVjaW1hbCBwbGFjZXNcclxuICAgKi9cclxuICBjb252ZXJ0TWV0cmVzVG9NaWxlcyhtZXRyZXM6IG51bWJlciwgZGVjaW1hbFBsYWNlczogbnVtYmVyID0gLTEpOiBudW1iZXIge1xyXG4gICAgY29uc3QgbWlsZXMgPSBtZXRyZXMgLyBNRVRSRVNfVE9fTUlMRVNfQ09OVkVSU0lPTjtcclxuXHJcbiAgICBpZiAoZGVjaW1hbFBsYWNlcyA+PSAwKSB7XHJcbiAgICAgIHJldHVybiBOdW1iZXIobWlsZXMudG9GaXhlZChkZWNpbWFsUGxhY2VzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG1pbGVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gY29udmVydCBzZWNvbmRzIHRvIGhvdXJzXHJcbiAgICogQHBhcmFtIHNlY29uZHMgLSB0byBjb252ZXJ0XHJcbiAgICogQHBhcmFtIGRlY2ltYWxQbGFjZXMgLSB0aGUgYW1vdW50IG9mIGQucCB0byBjb252ZXJ0IHRvLCBpZiBuZWdhdGl2ZSAoZGVmYXVsdCkgZG9lcyBub3QgcmVzdHJpY3QgdGhlIGRlY2ltYWwgcGxhY2VzXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBjb252ZXJ0U2Vjb25kc1RvSG91cnMoc2Vjb25kczogbnVtYmVyLCBkZWNpbWFsUGxhY2VzOiBudW1iZXIgPSAtMSk6IG51bWJlciB7XHJcbiAgICBjb25zdCBob3VycyA9IHNlY29uZHMgLyBUSU1FX0JBU0UgLyBUSU1FX0JBU0U7XHJcblxyXG4gICAgaWYgKGRlY2ltYWxQbGFjZXMgPj0gMCkge1xyXG4gICAgICByZXR1cm4gTnVtYmVyKGhvdXJzLnRvRml4ZWQoZGVjaW1hbFBsYWNlcykpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBob3VycztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGNvbnZlcnQgc2Vjb25kcyB0byBtaW5zXHJcbiAgICogQHBhcmFtIHNlY29uZHMgLSB0byBjb252ZXJ0XHJcbiAgICogQHBhcmFtIGRlY2ltYWxQbGFjZXMgLSB0aGUgYW1vdW50IG9mIGQucCB0byBjb252ZXJ0IHRvLCBpZiBuZWdhdGl2ZSAoZGVmYXVsdCkgZG9lcyBub3QgcmVzdHJpY3QgdGhlIGRlY2ltYWwgcGxhY2VzXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBjb252ZXJ0U2Vjb25kc1RvTWlucyhzZWNvbmRzOiBudW1iZXIsIGRlY2ltYWxQbGFjZXM6IG51bWJlciA9IC0xKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGhvdXJzID0gc2Vjb25kcyAvIFRJTUVfQkFTRTtcclxuXHJcbiAgICBpZiAoZGVjaW1hbFBsYWNlcyA+PSAwKSB7XHJcbiAgICAgIHJldHVybiBOdW1iZXIoaG91cnMudG9GaXhlZChkZWNpbWFsUGxhY2VzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhvdXJzO1xyXG4gIH1cclxuXHJcbiAgYWRkUmFpbEFjdGlvblJ1bGVzKFxyXG4gICAgZmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgcnVsZXM6IFJ1bGVzW11cclxuICApOiBPQlRSYWlsSm91cm5leUZhcmUge1xyXG4gICAgcmV0dXJuIHJ1bGVzLnJlZHVjZSgoZmFyZTE6IE9CVFJhaWxKb3VybmV5RmFyZSwgcnVsZTogUnVsZXMpID0+IHtcclxuICAgICAgaWYgKGlzU2V0KHJ1bGU/LnVuYXZhaWxhYmxlKSkge1xyXG4gICAgICAgIGZhcmUxLnVuYXZhaWxhYmxlID0gcnVsZS51bmF2YWlsYWJsZSBhcyBib29sZWFuO1xyXG4gICAgICAgIGZhcmUxLnVuYXZhaWxhYmxlTWVzc2FnZSA9IHJ1bGUudW5hdmFpbGFibGVNZXNzYWdlIGFzIHN0cmluZztcclxuICAgICAgfVxyXG4gICAgICBpZiAoaXNTZXQocnVsZT8ucmVxdWlyZXNSZWFzb24pKSB7XHJcbiAgICAgICAgZmFyZTEucmVxdWlyZXNSZWFzb24gPSBydWxlLnJlcXVpcmVzUmVhc29uIGFzIGJvb2xlYW47XHJcbiAgICAgICAgZmFyZTEucmVxdWlyZXNSZWFzb25NZXNzYWdlID0gcnVsZS5yZXF1aXJlc1JlYXNvbk1lc3NhZ2UgYXMgc3RyaW5nO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmYXJlMTtcclxuICAgIH0sIGZhcmUpO1xyXG4gIH1cclxuXHJcbiAgbWFwPFQ+KG9iajogUmVjb3JkPHN0cmluZywgVD4sIGZ1bmM6IChuZXh0OiBUKSA9PiBUKTogUmVjb3JkPHN0cmluZywgVD4ge1xyXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXHJcbiAgICAgIHt9LFxyXG4gICAgICAuLi5PYmplY3QuZW50cmllcyhvYmopLm1hcCgoW2tleSwgdmFsdWVdOiBbc3RyaW5nLCBUXSk6IFJlY29yZDxcclxuICAgICAgICBzdHJpbmcsXHJcbiAgICAgICAgVFxyXG4gICAgICA+ID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgW2tleV06IGZ1bmModmFsdWUpXHJcbiAgICAgICAgfTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBtZXJnZU9iamVjdHM8VD4oLi4ub2JqczogVFtdKTogVCB7XHJcbiAgICByZXR1cm4gb2Jqcy5yZWR1Y2UoKGN1cnJlbnQ6IFQsIG5leHQ6IFQpID0+IHtcclxuICAgICAgcmV0dXJuIF8ubWVyZ2UoY3VycmVudCwgbmV4dCkgYXMgVDtcclxuICAgIH0sIHt9IGFzIFQpO1xyXG4gIH1cclxuXHJcbiAgaW50ZXJjZXB0TWV0aG9kQ2FsbHM8VCBleHRlbmRzIG9iamVjdD4oXHJcbiAgICBvYmo6IFQsXHJcbiAgICBmbjogKHByb3A6IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbCwgYXJnOiBhbnlbXSkgPT4gYW55XHJcbiAgKTogVCB7XHJcbiAgICByZXR1cm4gbmV3IFByb3h5KG9iaiwge1xyXG4gICAgICBnZXQodGFyZ2V0OiBhbnksIHByb3A6IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0W3Byb3BdID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICByZXR1cm4gbmV3IFByb3h5KHRhcmdldFtwcm9wXSwge1xyXG4gICAgICAgICAgICBhcHBseTogKHRhcmdldDEsIHRoaXNBcmcsIGFyZ3VtZW50c0xpc3QpID0+IHtcclxuICAgICAgICAgICAgICBmbihwcm9wLCBhcmd1bWVudHNMaXN0KTtcclxuICAgICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseSh0YXJnZXQxLCB0aGlzQXJnLCBhcmd1bWVudHNMaXN0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3ApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSkgYXMgdW5rbm93biBhcyBUO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IHRoZSBwcmV2aW91cyBxdWFydGVyIGhvdXIgZS5nLiBpZiAyOSBtaW5zIC0gcmV0dXJuIDE1XHJcbiAgICogQHBhcmFtIGRhdGVUaW1lIC0gZGF0ZS90aW1lIGluIG1vbWVudCBmb3JtYXRcclxuICAgKiBAcmV0dXJucyBtb21lbnRcclxuICAgKi9cclxuICBnZXRSb3VuZGVkRG93blF1YXJ0ZXJIb3VyKGRhdGVUaW1lOiBtb21lbnQuTW9tZW50KTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICBjb25zdCBtaW5zID0gZGF0ZVRpbWUubWludXRlcygpO1xyXG5cclxuICAgIGlmIChtaW5zIDw9IDE1KSB7XHJcbiAgICAgIGRhdGVUaW1lLnNldCgnbWludXRlcycsIDApO1xyXG4gICAgfSBlbHNlIGlmIChtaW5zIDw9IDMwKSB7XHJcbiAgICAgIGRhdGVUaW1lLnNldCgnbWludXRlcycsIDE1KTtcclxuICAgIH0gZWxzZSBpZiAobWlucyA8PSA0NSkge1xyXG4gICAgICBkYXRlVGltZS5zZXQoJ21pbnV0ZXMnLCAzMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkYXRlVGltZS5zZXQoJ21pbnV0ZXMnLCA0NSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRhdGVUaW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IHJvdW5kZWQgdXAgcXVhcnRlciBob3VyIGUuZy4gaWYgMjkgLSByZXR1cm4gMzBcclxuICAgKiBAcGFyYW0gZGF0ZVRpbWUgLSBkYXRlL3RpbWUgaW4gbW9tZW50IGZvcm1hdFxyXG4gICAqIEByZXR1cm5zIG1vbWVudFxyXG4gICAqL1xyXG4gIGdldFJvdW5kZWRVcFF1YXJ0ZXJIb3VyKGRhdGVUaW1lOiBtb21lbnQuTW9tZW50KTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICBjb25zdCBtaW5zID0gZGF0ZVRpbWUubWludXRlcygpO1xyXG5cclxuICAgIGlmIChtaW5zIDw9IDE1KSB7XHJcbiAgICAgIGRhdGVUaW1lLnNldCgnbWludXRlcycsIDE1KTtcclxuICAgIH0gZWxzZSBpZiAobWlucyA8PSAzMCkge1xyXG4gICAgICBkYXRlVGltZS5zZXQoJ21pbnV0ZXMnLCAzMCk7XHJcbiAgICB9IGVsc2UgaWYgKG1pbnMgPD0gNDUpIHtcclxuICAgICAgZGF0ZVRpbWUuc2V0KCdtaW51dGVzJywgNDUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGF0ZVRpbWUuc2V0KCdtaW51dGVzJywgMCk7XHJcbiAgICAgIGRhdGVUaW1lLmFkZCgxLCAnaG91cicpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkYXRlVGltZTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzU2V0KG9iajogYW55KTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbDtcclxufVxyXG4iXX0=