ets-fe-ng-sdk 17.0.430 → 18.0.0

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 (186) hide show
  1. package/esm2022/lib/Reusables/reusable-comps/find-item/find-item.component.mjs +4 -4
  2. package/esm2022/lib/Reusables/reusable-comps/find-item/find-item.module.mjs +4 -4
  3. package/esm2022/lib/Reusables/reusable-comps/watermark/watermark.component.mjs +3 -3
  4. package/esm2022/lib/Reusables/reusable-pages/extra-pages/extra-pages-routing.module.mjs +4 -4
  5. package/esm2022/lib/Reusables/reusable-pages/extra-pages/extra-pages.module.mjs +4 -4
  6. package/esm2022/lib/Reusables/reusable-pages/logger/logger-routing.module.mjs +4 -4
  7. package/esm2022/lib/Reusables/reusable-pages/logger/logger.component.mjs +4 -4
  8. package/esm2022/lib/Reusables/reusable-pages/logger/logger.interface.mjs +1 -1
  9. package/esm2022/lib/Reusables/reusable-pages/logger/logger.module.mjs +4 -4
  10. package/esm2022/lib/Reusables/reusable-pages/logger/logger.service.mjs +3 -3
  11. package/esm2022/lib/Reusables/reusable-pages/page-not-found/page-not-found.component.mjs +3 -3
  12. package/esm2022/lib/Reusables/reusable-pages/reset/reset-routing.module.mjs +4 -4
  13. package/esm2022/lib/Reusables/reusable-pages/reset/reset.component.mjs +4 -4
  14. package/esm2022/lib/Reusables/reusable-pages/reset/reset.module.mjs +4 -4
  15. package/esm2022/lib/Reusables/reusable-pages/robot/robot-routing.module.mjs +4 -4
  16. package/esm2022/lib/Reusables/reusable-pages/robot/robot.component.mjs +3 -3
  17. package/esm2022/lib/Reusables/reusable-pages/robot/robot.module.mjs +4 -4
  18. package/esm2022/lib/Reusables/reusable-pages/timeout-tester/timeout-tester-routing.module.mjs +4 -4
  19. package/esm2022/lib/Reusables/reusable-pages/timeout-tester/timeout-tester.component.mjs +4 -4
  20. package/esm2022/lib/Reusables/reusable-pages/timeout-tester/timeout-tester.module.mjs +4 -4
  21. package/esm2022/lib/Reusables/reusable-pages/user-activity/ua-extras/user-activity.service.mjs +3 -3
  22. package/esm2022/lib/Reusables/reusable-pages/version/version-routing.module.mjs +4 -4
  23. package/esm2022/lib/Reusables/reusable-pages/version/version.component.mjs +3 -3
  24. package/esm2022/lib/Reusables/reusable-pages/version/version.module.mjs +4 -4
  25. package/esm2022/lib/Reusables/reusable-pages/version/version.service.mjs +4 -4
  26. package/esm2022/lib/Services/Interceptors/authentication-interceptor.service.mjs +5 -5
  27. package/esm2022/lib/Services/Interceptors/global-error-handler.service.mjs +3 -3
  28. package/esm2022/lib/Services/Interceptors/logger-interceptor.service.mjs +5 -5
  29. package/esm2022/lib/Services/Interceptors/request-loader-interceptor.service.mjs +5 -5
  30. package/esm2022/lib/Services/Interceptors/request-timeout.service.mjs +4 -4
  31. package/esm2022/lib/Services/api.service.mjs +4 -4
  32. package/esm2022/lib/Services/app.service.mjs +3 -3
  33. package/esm2022/lib/Services/base.effect.mjs +3 -3
  34. package/esm2022/lib/Services/base.facade.service.mjs +1 -1
  35. package/esm2022/lib/Services/base.service.mjs +4 -4
  36. package/esm2022/lib/Services/cache/cache-updater.service.mjs +3 -3
  37. package/esm2022/lib/Services/cache/cache.service.mjs +4 -4
  38. package/esm2022/lib/Services/cache/local-cache.service.mjs +4 -4
  39. package/esm2022/lib/Services/cache/saver.service.mjs +3 -3
  40. package/esm2022/lib/Services/debouncer.service.mjs +4 -4
  41. package/esm2022/lib/Services/htmler.service.mjs +3 -3
  42. package/esm2022/lib/Services/input.service.mjs +4 -4
  43. package/esm2022/lib/Services/page-loader.service.mjs +7 -7
  44. package/esm2022/lib/Services/page.service.mjs +3 -3
  45. package/esm2022/lib/Services/route.service.mjs +4 -4
  46. package/esm2022/lib/Services/service-worker/check-for-update.service.mjs +4 -4
  47. package/esm2022/lib/Services/service-worker/handle-unrecoverable-state.service.mjs +3 -3
  48. package/esm2022/lib/Services/service-worker/log-update.service.mjs +4 -4
  49. package/esm2022/lib/Services/service-worker/prompt-update.service.mjs +3 -3
  50. package/esm2022/lib/Services/service-worker/service-worker.service.mjs +4 -4
  51. package/esm2022/lib/Services/storage.service.mjs +4 -4
  52. package/esm2022/lib/Services/theme.service.mjs +3 -3
  53. package/esm2022/lib/Services/translation.service.mjs +4 -4
  54. package/esm2022/lib/Services/utility.service.mjs +4 -4
  55. package/esm2022/lib/Services/window-security.service.mjs +4 -4
  56. package/esm2022/lib/Shared/classes/page-loader.class.mjs +1 -1
  57. package/esm2022/lib/Shared/components/add-item/add-item.component.mjs +3 -3
  58. package/esm2022/lib/Shared/components/autocomplete/autocomplete-td-rf/autocomplete-td-rf.component.mjs +4 -4
  59. package/esm2022/lib/Shared/components/autocomplete/autocomplete.component.mjs +4 -4
  60. package/esm2022/lib/Shared/components/autocomplete/autocomplete.service.mjs +4 -4
  61. package/esm2022/lib/Shared/components/btn/btn-lg/btn-lg.component.mjs +3 -3
  62. package/esm2022/lib/Shared/components/btn/btn-link/btn-link.component.mjs +3 -3
  63. package/esm2022/lib/Shared/components/btn/btn.component.mjs +4 -4
  64. package/esm2022/lib/Shared/components/btn/btn.service.mjs +4 -4
  65. package/esm2022/lib/Shared/components/btn/details-btn/details-btn.component.mjs +3 -3
  66. package/esm2022/lib/Shared/components/card/card.component.mjs +3 -3
  67. package/esm2022/lib/Shared/components/confirm-dialog/confirm-dialog.component.mjs +3 -3
  68. package/esm2022/lib/Shared/components/confirm-dialog/confirm-dialog.service.mjs +4 -4
  69. package/esm2022/lib/Shared/components/core/button/button.component.mjs +3 -3
  70. package/esm2022/lib/Shared/components/documents-name-display/documents-name-display.component.mjs +4 -4
  71. package/esm2022/lib/Shared/components/editable-text-case/editable-text-case.component.mjs +4 -4
  72. package/esm2022/lib/Shared/components/export-table/export-table.component.mjs +4 -4
  73. package/esm2022/lib/Shared/components/fields-to-display/fields-to-display.component.mjs +4 -4
  74. package/esm2022/lib/Shared/components/file-upload/file-upload.component.mjs +4 -4
  75. package/esm2022/lib/Shared/components/form-error/form-error.component.mjs +4 -4
  76. package/esm2022/lib/Shared/components/form-generator/form-generated-value/form-generated-value.component.mjs +6 -6
  77. package/esm2022/lib/Shared/components/form-generator/form-generator.base.component.mjs +11 -2
  78. package/esm2022/lib/Shared/components/form-generator/form-generator.component.mjs +4 -4
  79. package/esm2022/lib/Shared/components/form-generator/form-generator.service.mjs +3 -3
  80. package/esm2022/lib/Shared/components/form-link/form-link.component.mjs +3 -3
  81. package/esm2022/lib/Shared/components/form-tab-headers/form-tab-headers.component.mjs +3 -3
  82. package/esm2022/lib/Shared/components/index-comp-layout/index-comp-layout.component.mjs +7 -7
  83. package/esm2022/lib/Shared/components/info-dialog/info-dialog.component.mjs +4 -4
  84. package/esm2022/lib/Shared/components/info-dialog/info-dialog.service.mjs +4 -4
  85. package/esm2022/lib/Shared/components/info-icon/info-icon.component.mjs +3 -3
  86. package/esm2022/lib/Shared/components/input/date-input/date-input.component.mjs +5 -5
  87. package/esm2022/lib/Shared/components/input/day-hour-min-input/day-hour-min-input.component.mjs +4 -4
  88. package/esm2022/lib/Shared/components/input/input-base.component.mjs +4 -4
  89. package/esm2022/lib/Shared/components/input/input-basic.component.mjs +4 -4
  90. package/esm2022/lib/Shared/components/input/input-control.component.mjs +3 -3
  91. package/esm2022/lib/Shared/components/input/input-label/input-label.component.mjs +3 -3
  92. package/esm2022/lib/Shared/components/input/input-td-rf.component.mjs +4 -4
  93. package/esm2022/lib/Shared/components/input/input.component.mjs +3 -3
  94. package/esm2022/lib/Shared/components/input/input.service.mjs +4 -4
  95. package/esm2022/lib/Shared/components/input/inputs-pipes.pipe.mjs +26 -26
  96. package/esm2022/lib/Shared/components/input/validation-message/validation-message.component.mjs +6 -6
  97. package/esm2022/lib/Shared/components/input/validation-message/validation-message.service.mjs +3 -3
  98. package/esm2022/lib/Shared/components/input/year-month-td-rf/year-month-td-rf.component.mjs +3 -3
  99. package/esm2022/lib/Shared/components/input-NgModel/input-ngmodel.component.mjs +4 -4
  100. package/esm2022/lib/Shared/components/input-NgModel/validation-message-ngmodel/validation-message-ngmodel.component.mjs +3 -3
  101. package/esm2022/lib/Shared/components/input-table/input-table.component.mjs +4 -4
  102. package/esm2022/lib/Shared/components/input-table/input-table.service.mjs +3 -3
  103. package/esm2022/lib/Shared/components/label/label.component.mjs +3 -3
  104. package/esm2022/lib/Shared/components/loader/loader-animations/blinking-blocks/blinking-blocks.component.mjs +3 -3
  105. package/esm2022/lib/Shared/components/loader/loader-animations/bouncing-ball/bouncing-ball.component.mjs +3 -3
  106. package/esm2022/lib/Shared/components/loader/loader-animations/fading-bars/fading-bars.component.mjs +3 -3
  107. package/esm2022/lib/Shared/components/loader/loader-animations/fading-circles/fading-circles.component.mjs +3 -3
  108. package/esm2022/lib/Shared/components/loader/loader-animations/ring-ripples/ring-ripples.component.mjs +3 -3
  109. package/esm2022/lib/Shared/components/loader/loader.component.mjs +3 -3
  110. package/esm2022/lib/Shared/components/loader/spinner.component.mjs +3 -3
  111. package/esm2022/lib/Shared/components/modal/modal-body.directive.mjs +3 -3
  112. package/esm2022/lib/Shared/components/modal/modal-footer.directive.mjs +3 -3
  113. package/esm2022/lib/Shared/components/modal/modal.component.mjs +3 -3
  114. package/esm2022/lib/Shared/components/modal-form/modal-form.component.mjs +3 -3
  115. package/esm2022/lib/Shared/components/modal-header/modal-header.component.mjs +3 -3
  116. package/esm2022/lib/Shared/components/narration-history-comp/narration-history-comp.component.mjs +4 -4
  117. package/esm2022/lib/Shared/components/notifications/notifications.component.mjs +3 -3
  118. package/esm2022/lib/Shared/components/notifications/notifications.service.mjs +3 -3
  119. package/esm2022/lib/Shared/components/page-center-body/page-center-body.component.mjs +3 -3
  120. package/esm2022/lib/Shared/components/page-template/page-template.component.mjs +4 -4
  121. package/esm2022/lib/Shared/components/page-to-component/page-to-component.component.mjs +6 -6
  122. package/esm2022/lib/Shared/components/page-to-component/page-to-component.directive.mjs +3 -3
  123. package/esm2022/lib/Shared/components/page-to-component/page-to-component.service.mjs +3 -3
  124. package/esm2022/lib/Shared/components/paginator/paginator.component.mjs +4 -4
  125. package/esm2022/lib/Shared/components/phone-number/phone-number.component.mjs +4 -4
  126. package/esm2022/lib/Shared/components/phone-number/phone-number.model.mjs +1 -1
  127. package/esm2022/lib/Shared/components/phone-number/phone-number.service.mjs +3 -3
  128. package/esm2022/lib/Shared/components/rich-text-editor/rich-text-editor.component.mjs +12 -12
  129. package/esm2022/lib/Shared/components/rich-text-editor-rf/rich-text-editor-rf.component.mjs +12 -12
  130. package/esm2022/lib/Shared/components/row-actions/row-actions.component.mjs +3 -3
  131. package/esm2022/lib/Shared/components/svg-icon/svg-icon.component.mjs +3 -3
  132. package/esm2022/lib/Shared/components/svg-icon/svg-icon.service.mjs +3 -3
  133. package/esm2022/lib/Shared/components/table-https/table-https.component.mjs +4 -4
  134. package/esm2022/lib/Shared/components/table-input/table-input-row/table-input-row.component.mjs +3 -3
  135. package/esm2022/lib/Shared/components/table-input/table-input.component.mjs +4 -4
  136. package/esm2022/lib/Shared/components/table-plain/table-base.component.mjs +4 -4
  137. package/esm2022/lib/Shared/components/table-plain/table-plain.component.mjs +4 -4
  138. package/esm2022/lib/Shared/components/table-plain/table-plain.service.mjs +3 -3
  139. package/esm2022/lib/Shared/components/table-plain/table.pipe.mjs +20 -20
  140. package/esm2022/lib/Shared/components/text/text.component.mjs +3 -3
  141. package/esm2022/lib/Shared/components/text-area-modal/text-area-modal.component.mjs +3 -3
  142. package/esm2022/lib/Shared/components/text-area-modal/text-area-modal.service.mjs +3 -3
  143. package/esm2022/lib/Shared/components/text-case-1/text-case-1.component.mjs +4 -4
  144. package/esm2022/lib/Shared/components/text-case-2/text-case-2.component.mjs +3 -3
  145. package/esm2022/lib/Shared/components/text-case-2/text-case.service.mjs +4 -4
  146. package/esm2022/lib/Shared/components/text-case-input/text-case-input.component.mjs +3 -3
  147. package/esm2022/lib/Shared/components/toggle-input-form/toggle-input-form.component.mjs +3 -3
  148. package/esm2022/lib/Shared/components/translator-case/translator-case.component.mjs +3 -3
  149. package/esm2022/lib/Shared/components/vertical-nav/vertical-nav.component.mjs +4 -4
  150. package/esm2022/lib/Shared/components/view-form-buttons/view-form-buttons.component.mjs +3 -3
  151. package/esm2022/lib/Shared/components/webcam-media/webcam-media.component.mjs +4 -4
  152. package/esm2022/lib/Shared/directives/commafy-number.directive.mjs +3 -3
  153. package/esm2022/lib/Shared/directives/drag-drop-file-upload.directive.mjs +4 -4
  154. package/esm2022/lib/Shared/directives/form-invalid-class.directive.mjs +3 -3
  155. package/esm2022/lib/Shared/directives/index.directive.mjs +23 -23
  156. package/esm2022/lib/Shared/directives/input-formatter.directive.mjs +14 -14
  157. package/esm2022/lib/Shared/directives/integer-only.directive.mjs +4 -4
  158. package/esm2022/lib/Shared/directives/mHref.directive.mjs +3 -3
  159. package/esm2022/lib/Shared/directives/negative-number-only.directive.mjs +4 -4
  160. package/esm2022/lib/Shared/directives/responsiveness.directive.mjs +20 -20
  161. package/esm2022/lib/Shared/directives/translator.directive.mjs +4 -4
  162. package/esm2022/lib/Shared/models/form.class.mjs +1 -1
  163. package/esm2022/lib/Shared/pipes/form-invalid-class.pipe.mjs +3 -3
  164. package/esm2022/lib/Shared/pipes/paginator.pipe.mjs +3 -3
  165. package/esm2022/lib/Shared/pipes/translate.pipe.mjs +7 -7
  166. package/esm2022/lib/Shared/pipes/utility.pipe.mjs +134 -134
  167. package/esm2022/lib/Shared/prototypes/prototypes.mjs +1 -1
  168. package/esm2022/lib/Shared/shared.module.mjs +4 -4
  169. package/esm2022/lib/authentication/web-user/web-user-authentication.guard.mjs +1 -1
  170. package/esm2022/lib/authentication/web-user/web-user-authentication.interceptor.mjs +1 -1
  171. package/esm2022/lib/authentication/web-user/web-user-authentication.service.mjs +3 -3
  172. package/esm2022/lib/authentication/web-user/web-user-forgot-password.component.mjs +4 -4
  173. package/esm2022/lib/authentication/web-user/web-user-login.component.mjs +4 -4
  174. package/esm2022/lib/authentication/web-user/web-user-reset-password.component.mjs +4 -4
  175. package/esm2022/lib/configs/base-functions.mjs +1 -1
  176. package/fesm2022/ets-fe-ng-sdk.mjs +766 -758
  177. package/fesm2022/ets-fe-ng-sdk.mjs.map +1 -1
  178. package/lib/Services/utility.service.d.ts +5 -5
  179. package/lib/Shared/components/btn/btn.component.d.ts +3 -3
  180. package/lib/Shared/components/form-generator/form-generated-value/form-generated-value.component.d.ts +1 -1
  181. package/lib/Shared/components/form-generator/form-generator.base.component.d.ts +3 -0
  182. package/lib/Shared/components/index-comp-layout/index-comp-layout.component.d.ts +1 -1
  183. package/lib/Shared/components/input/input-base.component.d.ts +3 -7
  184. package/lib/Shared/components/table-https/table-https.component.d.ts +3 -3
  185. package/lib/Shared/components/text-case-2/text-case.service.d.ts +1 -1
  186. package/package.json +1 -1
@@ -18,10 +18,10 @@ export class ArraySplitter {
18
18
  transform(arr, arrLength, startIndex, endIndex) {
19
19
  return arr ? arr.slice(startIndex, endIndex) : [];
20
20
  }
21
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: ArraySplitter, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
22
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: ArraySplitter, isStandalone: true, name: "arraySplitter" }); }
21
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ArraySplitter, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
22
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: ArraySplitter, isStandalone: true, name: "arraySplitter" }); }
23
23
  }
24
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: ArraySplitter, decorators: [{
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ArraySplitter, decorators: [{
25
25
  type: Pipe,
26
26
  args: [{
27
27
  name: 'arraySplitter',
@@ -32,10 +32,10 @@ export class GenderPipe {
32
32
  transform(value) {
33
33
  return value == 'M' ? 'Male' : value == 'F' ? 'Female' : value;
34
34
  }
35
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: GenderPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
36
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: GenderPipe, isStandalone: true, name: "gender" }); }
35
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: GenderPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
36
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: GenderPipe, isStandalone: true, name: "gender" }); }
37
37
  }
38
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: GenderPipe, decorators: [{
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: GenderPipe, decorators: [{
39
39
  type: Pipe,
40
40
  args: [{
41
41
  name: 'gender',
@@ -49,10 +49,10 @@ export class RoundPipe {
49
49
  transform(value) {
50
50
  return Math.round(value);
51
51
  }
52
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: RoundPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
53
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: RoundPipe, isStandalone: true, name: "round" }); }
52
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: RoundPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
53
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: RoundPipe, isStandalone: true, name: "round" }); }
54
54
  }
55
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: RoundPipe, decorators: [{
55
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: RoundPipe, decorators: [{
56
56
  type: Pipe,
57
57
  args: [{
58
58
  name: 'round',
@@ -68,10 +68,10 @@ export class SecondsToTimePipe {
68
68
  constructor(uS) {
69
69
  this.uS = uS;
70
70
  }
71
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: SecondsToTimePipe, deps: [{ token: i1.UtilityService }], target: i0.ɵɵFactoryTarget.Pipe }); }
72
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: SecondsToTimePipe, isStandalone: true, name: "secondsToTime" }); }
71
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: SecondsToTimePipe, deps: [{ token: i1.UtilityService }], target: i0.ɵɵFactoryTarget.Pipe }); }
72
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: SecondsToTimePipe, isStandalone: true, name: "secondsToTime" }); }
73
73
  }
74
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: SecondsToTimePipe, decorators: [{
74
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: SecondsToTimePipe, decorators: [{
75
75
  type: Pipe,
76
76
  args: [{
77
77
  name: 'secondsToTime',
@@ -89,10 +89,10 @@ export class CustomDatePipe {
89
89
  constructor(datePipe) {
90
90
  this.datePipe = datePipe;
91
91
  }
92
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: CustomDatePipe, deps: [{ token: i2.DatePipe }], target: i0.ɵɵFactoryTarget.Pipe }); }
93
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: CustomDatePipe, isStandalone: true, name: "customDate" }); }
92
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: CustomDatePipe, deps: [{ token: i2.DatePipe }], target: i0.ɵɵFactoryTarget.Pipe }); }
93
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: CustomDatePipe, isStandalone: true, name: "customDate" }); }
94
94
  }
95
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: CustomDatePipe, decorators: [{
95
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: CustomDatePipe, decorators: [{
96
96
  type: Pipe,
97
97
  args: [{ name: 'customDate', standalone: true }]
98
98
  }], ctorParameters: () => [{ type: i2.DatePipe }] });
@@ -104,10 +104,10 @@ export class HasValuePipe {
104
104
  // debugger;
105
105
  return fieldsToCheckFor?.length ? fieldsToCheckFor.some((x) => !!value[x]) : !isEmpty(value);
106
106
  }
107
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: HasValuePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
108
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: HasValuePipe, isStandalone: true, name: "hasValue" }); }
107
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: HasValuePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
108
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: HasValuePipe, isStandalone: true, name: "hasValue" }); }
109
109
  }
110
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: HasValuePipe, decorators: [{
110
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: HasValuePipe, decorators: [{
111
111
  type: Pipe,
112
112
  args: [{
113
113
  name: 'hasValue',
@@ -121,10 +121,10 @@ export class CodeTitleDescPipe {
121
121
  let foundObj = codeTitleArray?.find((x) => x.code === code);
122
122
  return EVFunctions.strConcatenator2(code, foundObj?.description || foundObj?.title, ' - ');
123
123
  }
124
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: CodeTitleDescPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
125
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: CodeTitleDescPipe, isStandalone: true, name: "codeTitleDesc" }); }
124
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: CodeTitleDescPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
125
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: CodeTitleDescPipe, isStandalone: true, name: "codeTitleDesc" }); }
126
126
  }
127
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: CodeTitleDescPipe, decorators: [{
127
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: CodeTitleDescPipe, decorators: [{
128
128
  type: Pipe,
129
129
  args: [{
130
130
  name: 'codeTitleDesc',
@@ -142,10 +142,10 @@ export class HasFormValuePipe {
142
142
  const val = formGroup.getRawValue();
143
143
  return (fieldsToCheckFor?.length ? fieldsToCheckFor : Object.keys(val)).some((x) => val[x] != null);
144
144
  }
145
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: HasFormValuePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
146
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: HasFormValuePipe, isStandalone: true, name: "hasFormValue" }); }
145
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: HasFormValuePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
146
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: HasFormValuePipe, isStandalone: true, name: "hasFormValue" }); }
147
147
  }
148
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: HasFormValuePipe, decorators: [{
148
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: HasFormValuePipe, decorators: [{
149
149
  type: Pipe,
150
150
  args: [{
151
151
  name: 'hasFormValue',
@@ -176,10 +176,10 @@ export class ObjectToLabelsPipe {
176
176
  constructor(uS) {
177
177
  this.uS = uS;
178
178
  }
179
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: ObjectToLabelsPipe, deps: [{ token: i1.UtilityService }], target: i0.ɵɵFactoryTarget.Pipe }); }
180
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: ObjectToLabelsPipe, isStandalone: true, name: "objectToLabels" }); }
179
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ObjectToLabelsPipe, deps: [{ token: i1.UtilityService }], target: i0.ɵɵFactoryTarget.Pipe }); }
180
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: ObjectToLabelsPipe, isStandalone: true, name: "objectToLabels" }); }
181
181
  }
182
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: ObjectToLabelsPipe, decorators: [{
182
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ObjectToLabelsPipe, decorators: [{
183
183
  type: Pipe,
184
184
  args: [{
185
185
  name: 'objectToLabels',
@@ -205,10 +205,10 @@ export class GetValueLabel {
205
205
  return value;
206
206
  return value + ' - ' + item[labelField] || item['title'];
207
207
  }
208
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: GetValueLabel, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
209
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: GetValueLabel, isStandalone: true, name: "getValueLabel" }); }
208
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: GetValueLabel, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
209
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: GetValueLabel, isStandalone: true, name: "getValueLabel" }); }
210
210
  }
211
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: GetValueLabel, decorators: [{
211
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: GetValueLabel, decorators: [{
212
212
  type: Pipe,
213
213
  args: [{
214
214
  name: 'getValueLabel',
@@ -219,10 +219,10 @@ export class ValueFormatterPipe {
219
219
  async transform(val, formatter) {
220
220
  return formatter ? formatter(val) : val;
221
221
  }
222
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: ValueFormatterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
223
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: ValueFormatterPipe, isStandalone: true, name: "valueFormatter" }); }
222
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ValueFormatterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
223
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: ValueFormatterPipe, isStandalone: true, name: "valueFormatter" }); }
224
224
  }
225
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: ValueFormatterPipe, decorators: [{
225
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ValueFormatterPipe, decorators: [{
226
226
  type: Pipe,
227
227
  args: [{
228
228
  name: 'valueFormatter',
@@ -233,10 +233,10 @@ class CFunctionCaller {
233
233
  transform(func, param1, param2, param3) {
234
234
  return func ? func(param1, param2, param3) : null;
235
235
  }
236
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: CFunctionCaller, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
237
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: CFunctionCaller, providedIn: 'root' }); }
236
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: CFunctionCaller, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
237
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: CFunctionCaller, providedIn: 'root' }); }
238
238
  }
239
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: CFunctionCaller, decorators: [{
239
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: CFunctionCaller, decorators: [{
240
240
  type: Injectable,
241
241
  args: [{ providedIn: 'root' }]
242
242
  }] });
@@ -275,10 +275,10 @@ export class FunctionCaller {
275
275
  // const fs = ( ) => {};
276
276
  // this.transform(fs);
277
277
  }
278
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: FunctionCaller, deps: [{ token: CFunctionCaller }], target: i0.ɵɵFactoryTarget.Pipe }); }
279
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: FunctionCaller, isStandalone: true, name: "functionCaller" }); }
278
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FunctionCaller, deps: [{ token: CFunctionCaller }], target: i0.ɵɵFactoryTarget.Pipe }); }
279
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: FunctionCaller, isStandalone: true, name: "functionCaller" }); }
280
280
  }
281
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: FunctionCaller, decorators: [{
281
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FunctionCaller, decorators: [{
282
282
  type: Pipe,
283
283
  args: [{
284
284
  name: 'functionCaller',
@@ -290,10 +290,10 @@ export class FunctionCaller1 {
290
290
  this.f = f;
291
291
  this.transform = this.f.transform;
292
292
  }
293
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: FunctionCaller1, deps: [{ token: CFunctionCaller }], target: i0.ɵɵFactoryTarget.Pipe }); }
294
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: FunctionCaller1, isStandalone: true, name: "functionCaller1" }); }
293
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FunctionCaller1, deps: [{ token: CFunctionCaller }], target: i0.ɵɵFactoryTarget.Pipe }); }
294
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: FunctionCaller1, isStandalone: true, name: "functionCaller1" }); }
295
295
  }
296
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: FunctionCaller1, decorators: [{
296
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FunctionCaller1, decorators: [{
297
297
  type: Pipe,
298
298
  args: [{
299
299
  name: 'functionCaller1',
@@ -305,10 +305,10 @@ export class FunctionCaller2 {
305
305
  this.f = f;
306
306
  this.transform = this.f.transform;
307
307
  }
308
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: FunctionCaller2, deps: [{ token: CFunctionCaller }], target: i0.ɵɵFactoryTarget.Pipe }); }
309
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: FunctionCaller2, isStandalone: true, name: "functionCaller2" }); }
308
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FunctionCaller2, deps: [{ token: CFunctionCaller }], target: i0.ɵɵFactoryTarget.Pipe }); }
309
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: FunctionCaller2, isStandalone: true, name: "functionCaller2" }); }
310
310
  }
311
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: FunctionCaller2, decorators: [{
311
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FunctionCaller2, decorators: [{
312
312
  type: Pipe,
313
313
  args: [{
314
314
  name: 'functionCaller2',
@@ -320,10 +320,10 @@ export class FunctionCaller3 {
320
320
  this.f = f;
321
321
  this.transform = this.f.transform;
322
322
  }
323
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: FunctionCaller3, deps: [{ token: CFunctionCaller }], target: i0.ɵɵFactoryTarget.Pipe }); }
324
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: FunctionCaller3, isStandalone: true, name: "functionCaller3" }); }
323
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FunctionCaller3, deps: [{ token: CFunctionCaller }], target: i0.ɵɵFactoryTarget.Pipe }); }
324
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: FunctionCaller3, isStandalone: true, name: "functionCaller3" }); }
325
325
  }
326
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: FunctionCaller3, decorators: [{
326
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FunctionCaller3, decorators: [{
327
327
  type: Pipe,
328
328
  args: [{
329
329
  name: 'functionCaller3',
@@ -336,10 +336,10 @@ export class HttpListCaller {
336
336
  // console.log('ran functionCaller', httpObservable);
337
337
  return httpObservable();
338
338
  }
339
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: HttpListCaller, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
340
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: HttpListCaller, isStandalone: true, name: "httpListCaller" }); }
339
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: HttpListCaller, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
340
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: HttpListCaller, isStandalone: true, name: "httpListCaller" }); }
341
341
  }
342
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: HttpListCaller, decorators: [{
342
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: HttpListCaller, decorators: [{
343
343
  type: Pipe,
344
344
  args: [{
345
345
  name: 'httpListCaller',
@@ -352,10 +352,10 @@ export class HttpListCaller1 {
352
352
  return httpObservable(param);
353
353
  // return param ? httpObservable(param) : null;
354
354
  }
355
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: HttpListCaller1, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
356
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: HttpListCaller1, isStandalone: true, name: "httpListCaller1" }); }
355
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: HttpListCaller1, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
356
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: HttpListCaller1, isStandalone: true, name: "httpListCaller1" }); }
357
357
  }
358
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: HttpListCaller1, decorators: [{
358
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: HttpListCaller1, decorators: [{
359
359
  type: Pipe,
360
360
  args: [{
361
361
  name: 'httpListCaller1',
@@ -368,10 +368,10 @@ export class HttpListCaller2 {
368
368
  return httpObservable(param1, param2);
369
369
  // return param1 ? (param2 ? httpObservable(param1, param2) : null) : null;
370
370
  }
371
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: HttpListCaller2, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
372
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: HttpListCaller2, isStandalone: true, name: "httpListCaller2" }); }
371
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: HttpListCaller2, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
372
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: HttpListCaller2, isStandalone: true, name: "httpListCaller2" }); }
373
373
  }
374
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: HttpListCaller2, decorators: [{
374
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: HttpListCaller2, decorators: [{
375
375
  type: Pipe,
376
376
  args: [{
377
377
  name: 'httpListCaller2',
@@ -382,10 +382,10 @@ export class IsShowPage {
382
382
  transform(type) {
383
383
  return type == EPageType.showPage ? true : false;
384
384
  }
385
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: IsShowPage, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
386
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: IsShowPage, isStandalone: true, name: "isShowPage" }); }
385
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: IsShowPage, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
386
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: IsShowPage, isStandalone: true, name: "isShowPage" }); }
387
387
  }
388
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: IsShowPage, decorators: [{
388
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: IsShowPage, decorators: [{
389
389
  type: Pipe,
390
390
  args: [{
391
391
  name: 'isShowPage',
@@ -396,10 +396,10 @@ export class IsClonePage {
396
396
  transform(type) {
397
397
  return type == EPageType.clonePage ? true : null;
398
398
  }
399
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: IsClonePage, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
400
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: IsClonePage, isStandalone: true, name: "isClonePage" }); }
399
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: IsClonePage, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
400
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: IsClonePage, isStandalone: true, name: "isClonePage" }); }
401
401
  }
402
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: IsClonePage, decorators: [{
402
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: IsClonePage, decorators: [{
403
403
  type: Pipe,
404
404
  args: [{
405
405
  name: 'isClonePage',
@@ -447,10 +447,10 @@ export class FilterArrayPipe {
447
447
  return res;
448
448
  // });
449
449
  }
450
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: FilterArrayPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
451
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: FilterArrayPipe, isStandalone: true, name: "filterArray" }); }
450
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FilterArrayPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
451
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: FilterArrayPipe, isStandalone: true, name: "filterArray" }); }
452
452
  }
453
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: FilterArrayPipe, decorators: [{
453
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FilterArrayPipe, decorators: [{
454
454
  type: Pipe,
455
455
  args: [{
456
456
  name: 'filterArray',
@@ -505,10 +505,10 @@ export class FilterFormArrayGroupPipe {
505
505
  return res;
506
506
  // });
507
507
  }
508
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: FilterFormArrayGroupPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
509
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: FilterFormArrayGroupPipe, isStandalone: true, name: "filterFormArrayGroup" }); }
508
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FilterFormArrayGroupPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
509
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: FilterFormArrayGroupPipe, isStandalone: true, name: "filterFormArrayGroup" }); }
510
510
  }
511
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: FilterFormArrayGroupPipe, decorators: [{
511
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FilterFormArrayGroupPipe, decorators: [{
512
512
  type: Pipe,
513
513
  args: [{
514
514
  name: 'filterFormArrayGroup',
@@ -531,10 +531,10 @@ export class FilterFormArrayControlPipe {
531
531
  constructor(uS) {
532
532
  this.uS = uS;
533
533
  }
534
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: FilterFormArrayControlPipe, deps: [{ token: i1.UtilityService }], target: i0.ɵɵFactoryTarget.Pipe }); }
535
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: FilterFormArrayControlPipe, isStandalone: true, name: "filterFormArrayControl" }); }
534
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FilterFormArrayControlPipe, deps: [{ token: i1.UtilityService }], target: i0.ɵɵFactoryTarget.Pipe }); }
535
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: FilterFormArrayControlPipe, isStandalone: true, name: "filterFormArrayControl" }); }
536
536
  }
537
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: FilterFormArrayControlPipe, decorators: [{
537
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FilterFormArrayControlPipe, decorators: [{
538
538
  type: Pipe,
539
539
  args: [{
540
540
  name: 'filterFormArrayControl',
@@ -570,10 +570,10 @@ export class SortPipe {
570
570
  return arr.sort((x, y) => (direction ? y - x : x - y));
571
571
  }
572
572
  }
573
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: SortPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
574
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: SortPipe, isStandalone: true, name: "sort" }); }
573
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: SortPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
574
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: SortPipe, isStandalone: true, name: "sort" }); }
575
575
  }
576
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: SortPipe, decorators: [{
576
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: SortPipe, decorators: [{
577
577
  type: Pipe,
578
578
  args: [{
579
579
  name: 'sort',
@@ -590,10 +590,10 @@ export class RefresherPipe {
590
590
  transform(value, refresher) {
591
591
  return value;
592
592
  }
593
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: RefresherPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
594
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: RefresherPipe, isStandalone: true, name: "refresher" }); }
593
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: RefresherPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
594
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: RefresherPipe, isStandalone: true, name: "refresher" }); }
595
595
  }
596
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: RefresherPipe, decorators: [{
596
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: RefresherPipe, decorators: [{
597
597
  type: Pipe,
598
598
  args: [{
599
599
  name: 'refresher',
@@ -604,10 +604,10 @@ export class ToAnyPipe {
604
604
  transform(value, isArray = false) {
605
605
  return isArray ? value : value;
606
606
  }
607
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: ToAnyPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
608
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: ToAnyPipe, isStandalone: true, name: "toAny" }); }
607
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ToAnyPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
608
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: ToAnyPipe, isStandalone: true, name: "toAny" }); }
609
609
  }
610
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: ToAnyPipe, decorators: [{
610
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ToAnyPipe, decorators: [{
611
611
  type: Pipe,
612
612
  args: [{
613
613
  name: 'toAny',
@@ -618,10 +618,10 @@ export class ToAnyArrayPipe {
618
618
  transform(value) {
619
619
  return value;
620
620
  }
621
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: ToAnyArrayPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
622
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: ToAnyArrayPipe, isStandalone: true, name: "toAnyArray" }); }
621
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ToAnyArrayPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
622
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: ToAnyArrayPipe, isStandalone: true, name: "toAnyArray" }); }
623
623
  }
624
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: ToAnyArrayPipe, decorators: [{
624
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ToAnyArrayPipe, decorators: [{
625
625
  type: Pipe,
626
626
  args: [{
627
627
  name: 'toAnyArray',
@@ -637,10 +637,10 @@ export class TrimPipe {
637
637
  transform(value) {
638
638
  return value?.trim();
639
639
  }
640
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: TrimPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
641
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: TrimPipe, isStandalone: true, name: "trim" }); }
640
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: TrimPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
641
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: TrimPipe, isStandalone: true, name: "trim" }); }
642
642
  }
643
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: TrimPipe, decorators: [{
643
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: TrimPipe, decorators: [{
644
644
  type: Pipe,
645
645
  args: [{
646
646
  name: 'trim',
@@ -657,10 +657,10 @@ export class TrimTextPipe {
657
657
  transform(value, length) {
658
658
  return !value || length == null || value.length < length ? value : value.substring(0, length) + '...';
659
659
  }
660
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: TrimTextPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
661
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: TrimTextPipe, isStandalone: true, name: "trimText" }); }
660
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: TrimTextPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
661
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: TrimTextPipe, isStandalone: true, name: "trimText" }); }
662
662
  }
663
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: TrimTextPipe, decorators: [{
663
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: TrimTextPipe, decorators: [{
664
664
  type: Pipe,
665
665
  args: [{
666
666
  name: 'trimText',
@@ -674,10 +674,10 @@ export class XOrYPipe {
674
674
  constructor(uS) {
675
675
  this.uS = uS;
676
676
  }
677
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: XOrYPipe, deps: [{ token: i1.UtilityService }], target: i0.ɵɵFactoryTarget.Pipe }); }
678
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: XOrYPipe, isStandalone: true, name: "xOrY" }); }
677
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: XOrYPipe, deps: [{ token: i1.UtilityService }], target: i0.ɵɵFactoryTarget.Pipe }); }
678
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: XOrYPipe, isStandalone: true, name: "xOrY" }); }
679
679
  }
680
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: XOrYPipe, decorators: [{
680
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: XOrYPipe, decorators: [{
681
681
  type: Pipe,
682
682
  args: [{
683
683
  name: 'xOrY',
@@ -688,10 +688,10 @@ export class ReplaceAllPipe {
688
688
  transform(text, search, replacement) {
689
689
  return text ? text.split(search).join(replacement) : text;
690
690
  }
691
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: ReplaceAllPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
692
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: ReplaceAllPipe, isStandalone: true, name: "replaceAll" }); }
691
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ReplaceAllPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
692
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: ReplaceAllPipe, isStandalone: true, name: "replaceAll" }); }
693
693
  }
694
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: ReplaceAllPipe, decorators: [{
694
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ReplaceAllPipe, decorators: [{
695
695
  type: Pipe,
696
696
  args: [{
697
697
  name: 'replaceAll',
@@ -709,10 +709,10 @@ export class ValueOrXPipe {
709
709
  // console.log(value)
710
710
  return value == null || value == undefined ? replacement : value;
711
711
  }
712
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: ValueOrXPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
713
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: ValueOrXPipe, isStandalone: true, name: "valueOrX" }); }
712
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ValueOrXPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
713
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: ValueOrXPipe, isStandalone: true, name: "valueOrX" }); }
714
714
  }
715
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: ValueOrXPipe, decorators: [{
715
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ValueOrXPipe, decorators: [{
716
716
  type: Pipe,
717
717
  args: [{
718
718
  name: 'valueOrX',
@@ -723,10 +723,10 @@ export class StrConcatenatorPipe {
723
723
  transform(text1, text2, joiner = ' - ') {
724
724
  return EVFunctions.strConcatenator2(text1, text2, joiner);
725
725
  }
726
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: StrConcatenatorPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
727
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: StrConcatenatorPipe, isStandalone: true, name: "strConcatenator" }); }
726
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: StrConcatenatorPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
727
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: StrConcatenatorPipe, isStandalone: true, name: "strConcatenator" }); }
728
728
  }
729
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: StrConcatenatorPipe, decorators: [{
729
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: StrConcatenatorPipe, decorators: [{
730
730
  type: Pipe,
731
731
  args: [{
732
732
  name: 'strConcatenator',
@@ -754,10 +754,10 @@ export class FormValuePipe {
754
754
  constructor(uS) {
755
755
  this.uS = uS;
756
756
  }
757
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: FormValuePipe, deps: [{ token: i1.UtilityService }], target: i0.ɵɵFactoryTarget.Pipe }); }
758
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: FormValuePipe, isStandalone: true, name: "formValue" }); }
757
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FormValuePipe, deps: [{ token: i1.UtilityService }], target: i0.ɵɵFactoryTarget.Pipe }); }
758
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: FormValuePipe, isStandalone: true, name: "formValue" }); }
759
759
  }
760
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: FormValuePipe, decorators: [{
760
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FormValuePipe, decorators: [{
761
761
  type: Pipe,
762
762
  args: [{
763
763
  name: 'formValue',
@@ -772,10 +772,10 @@ export class FieldToLabelPipe {
772
772
  constructor(uS) {
773
773
  this.uS = uS;
774
774
  }
775
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: FieldToLabelPipe, deps: [{ token: i1.UtilityService }], target: i0.ɵɵFactoryTarget.Pipe }); }
776
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: FieldToLabelPipe, isStandalone: true, name: "fieldToLabel" }); }
775
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FieldToLabelPipe, deps: [{ token: i1.UtilityService }], target: i0.ɵɵFactoryTarget.Pipe }); }
776
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: FieldToLabelPipe, isStandalone: true, name: "fieldToLabel" }); }
777
777
  }
778
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: FieldToLabelPipe, decorators: [{
778
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FieldToLabelPipe, decorators: [{
779
779
  type: Pipe,
780
780
  args: [{
781
781
  name: 'fieldToLabel',
@@ -786,10 +786,10 @@ export class TyperPipe {
786
786
  transform(value, sample) {
787
787
  return value;
788
788
  }
789
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: TyperPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
790
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: TyperPipe, isStandalone: true, name: "typer" }); }
789
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: TyperPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
790
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: TyperPipe, isStandalone: true, name: "typer" }); }
791
791
  }
792
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: TyperPipe, decorators: [{
792
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: TyperPipe, decorators: [{
793
793
  type: Pipe,
794
794
  args: [{ name: 'typer', standalone: true }]
795
795
  }] });
@@ -840,10 +840,10 @@ export class FilterArrayByStringPipe {
840
840
  return ret;
841
841
  }
842
842
  }
843
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: FilterArrayByStringPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
844
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: FilterArrayByStringPipe, isStandalone: true, name: "filterArrayByString" }); }
843
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FilterArrayByStringPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
844
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: FilterArrayByStringPipe, isStandalone: true, name: "filterArrayByString" }); }
845
845
  }
846
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: FilterArrayByStringPipe, decorators: [{
846
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FilterArrayByStringPipe, decorators: [{
847
847
  type: Pipe,
848
848
  args: [{
849
849
  name: 'filterArrayByString',
@@ -863,10 +863,10 @@ export class RemoveUsedOptionsPipe {
863
863
  else
864
864
  return arr.filter((x) => formArray.some((f) => f == x));
865
865
  }
866
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: RemoveUsedOptionsPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
867
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: RemoveUsedOptionsPipe, isStandalone: true, name: "removeUsedOptions" }); }
866
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: RemoveUsedOptionsPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
867
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: RemoveUsedOptionsPipe, isStandalone: true, name: "removeUsedOptions" }); }
868
868
  }
869
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: RemoveUsedOptionsPipe, decorators: [{
869
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: RemoveUsedOptionsPipe, decorators: [{
870
870
  type: Pipe,
871
871
  args: [{ name: 'removeUsedOptions', standalone: true }]
872
872
  }] });
@@ -883,10 +883,10 @@ export class RemoveUsedOptionsReactivePipe {
883
883
  else
884
884
  return arr.filter((x) => formArray.some((f) => f == x));
885
885
  }
886
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: RemoveUsedOptionsReactivePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
887
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: RemoveUsedOptionsReactivePipe, isStandalone: true, name: "removeUsedOptionsReactive" }); }
886
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: RemoveUsedOptionsReactivePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
887
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: RemoveUsedOptionsReactivePipe, isStandalone: true, name: "removeUsedOptionsReactive" }); }
888
888
  }
889
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: RemoveUsedOptionsReactivePipe, decorators: [{
889
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: RemoveUsedOptionsReactivePipe, decorators: [{
890
890
  type: Pipe,
891
891
  args: [{ name: 'removeUsedOptionsReactive', standalone: true }]
892
892
  }] });
@@ -894,10 +894,10 @@ export class ObjectToArrayPipe {
894
894
  transform(value) {
895
895
  return Object.values(value);
896
896
  }
897
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: ObjectToArrayPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
898
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: ObjectToArrayPipe, isStandalone: true, name: "objectToArray" }); }
897
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ObjectToArrayPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
898
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: ObjectToArrayPipe, isStandalone: true, name: "objectToArray" }); }
899
899
  }
900
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: ObjectToArrayPipe, decorators: [{
900
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ObjectToArrayPipe, decorators: [{
901
901
  type: Pipe,
902
902
  args: [{ name: 'objectToArray', standalone: true }]
903
903
  }] });
@@ -905,10 +905,10 @@ export class FormSchemaToTableColumnsPipe {
905
905
  transform(value) {
906
906
  return value?.map((x) => ({ f: x.field, t: x.label })) || [];
907
907
  }
908
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: FormSchemaToTableColumnsPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
909
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: FormSchemaToTableColumnsPipe, isStandalone: true, name: "formSchemaToCols" }); }
908
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FormSchemaToTableColumnsPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
909
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: FormSchemaToTableColumnsPipe, isStandalone: true, name: "formSchemaToCols" }); }
910
910
  }
911
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: FormSchemaToTableColumnsPipe, decorators: [{
911
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FormSchemaToTableColumnsPipe, decorators: [{
912
912
  type: Pipe,
913
913
  args: [{ name: 'formSchemaToCols', standalone: true }]
914
914
  }] });
@@ -932,10 +932,10 @@ export class ResponsiveValPipe {
932
932
  constructor(responsive) {
933
933
  this.responsive = responsive;
934
934
  }
935
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: ResponsiveValPipe, deps: [{ token: i3.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Pipe }); }
936
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: ResponsiveValPipe, isStandalone: true, name: "responsiveVal" }); }
935
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ResponsiveValPipe, deps: [{ token: i3.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Pipe }); }
936
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: ResponsiveValPipe, isStandalone: true, name: "responsiveVal" }); }
937
937
  }
938
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: ResponsiveValPipe, decorators: [{
938
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ResponsiveValPipe, decorators: [{
939
939
  type: Pipe,
940
940
  args: [{
941
941
  name: 'responsiveVal',
@@ -986,11 +986,11 @@ const comps = [
986
986
  ];
987
987
  const modules = [];
988
988
  export class UtilityPipesModule {
989
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: UtilityPipesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
990
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: UtilityPipesModule, imports: [CommonModule, ArraySplitter, CustomDatePipe, FieldToLabelPipe, FilterArrayByStringPipe, FilterArrayPipe, FilterFormArrayGroupPipe, FormInvalidClassPipe, FormSchemaToTableColumnsPipe, FormValuePipe, FunctionCaller, FunctionCaller1, FunctionCaller2, FunctionCaller3, GenderPipe, GetValueLabel, HasFormValuePipe, HasValuePipe, CodeTitleDescPipe, HttpListCaller, HttpListCaller1, HttpListCaller2, IsClonePage, IsShowPage, ObjectToArrayPipe, RefresherPipe, RemoveUsedOptionsPipe, ReplaceAllPipe, ResponsiveValPipe, RoundPipe, SecondsToTimePipe, SortPipe, StrConcatenatorPipe, ToAnyArrayPipe, ToAnyPipe, SDKTranslatePipe, TrimPipe, TrimTextPipe, ValueFormatterPipe, ValueOrXPipe, XOrYPipe], exports: [ArraySplitter, CustomDatePipe, FieldToLabelPipe, FilterArrayByStringPipe, FilterArrayPipe, FilterFormArrayGroupPipe, FormInvalidClassPipe, FormSchemaToTableColumnsPipe, FormValuePipe, FunctionCaller, FunctionCaller1, FunctionCaller2, FunctionCaller3, GenderPipe, GetValueLabel, HasFormValuePipe, HasValuePipe, CodeTitleDescPipe, HttpListCaller, HttpListCaller1, HttpListCaller2, IsClonePage, IsShowPage, ObjectToArrayPipe, RefresherPipe, RemoveUsedOptionsPipe, ReplaceAllPipe, ResponsiveValPipe, RoundPipe, SecondsToTimePipe, SortPipe, StrConcatenatorPipe, ToAnyArrayPipe, ToAnyPipe, SDKTranslatePipe, TrimPipe, TrimTextPipe, ValueFormatterPipe, ValueOrXPipe, XOrYPipe] }); }
991
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: UtilityPipesModule, imports: [CommonModule, modules] }); }
989
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: UtilityPipesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
990
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: UtilityPipesModule, imports: [CommonModule, ArraySplitter, CustomDatePipe, FieldToLabelPipe, FilterArrayByStringPipe, FilterArrayPipe, FilterFormArrayGroupPipe, FormInvalidClassPipe, FormSchemaToTableColumnsPipe, FormValuePipe, FunctionCaller, FunctionCaller1, FunctionCaller2, FunctionCaller3, GenderPipe, GetValueLabel, HasFormValuePipe, HasValuePipe, CodeTitleDescPipe, HttpListCaller, HttpListCaller1, HttpListCaller2, IsClonePage, IsShowPage, ObjectToArrayPipe, RefresherPipe, RemoveUsedOptionsPipe, ReplaceAllPipe, ResponsiveValPipe, RoundPipe, SecondsToTimePipe, SortPipe, StrConcatenatorPipe, ToAnyArrayPipe, ToAnyPipe, SDKTranslatePipe, TrimPipe, TrimTextPipe, ValueFormatterPipe, ValueOrXPipe, XOrYPipe], exports: [ArraySplitter, CustomDatePipe, FieldToLabelPipe, FilterArrayByStringPipe, FilterArrayPipe, FilterFormArrayGroupPipe, FormInvalidClassPipe, FormSchemaToTableColumnsPipe, FormValuePipe, FunctionCaller, FunctionCaller1, FunctionCaller2, FunctionCaller3, GenderPipe, GetValueLabel, HasFormValuePipe, HasValuePipe, CodeTitleDescPipe, HttpListCaller, HttpListCaller1, HttpListCaller2, IsClonePage, IsShowPage, ObjectToArrayPipe, RefresherPipe, RemoveUsedOptionsPipe, ReplaceAllPipe, ResponsiveValPipe, RoundPipe, SecondsToTimePipe, SortPipe, StrConcatenatorPipe, ToAnyArrayPipe, ToAnyPipe, SDKTranslatePipe, TrimPipe, TrimTextPipe, ValueFormatterPipe, ValueOrXPipe, XOrYPipe] }); }
991
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: UtilityPipesModule, imports: [CommonModule, modules] }); }
992
992
  }
993
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: UtilityPipesModule, decorators: [{
993
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: UtilityPipesModule, decorators: [{
994
994
  type: NgModule,
995
995
  args: [{
996
996
  imports: [CommonModule, ...modules, ...comps],
@@ -998,4 +998,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
998
998
  providers: [],
999
999
  }]
1000
1000
  }] });
1001
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXRzLWZlLW5nLXNkay9zcmMvbGliL1NoYXJlZC9waXBlcy91dGlsaXR5LnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFJMUUsT0FBTyxFQUFFLFNBQVMsRUFBcUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRixPQUFPLEVBQXNCLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRFLE9BQU8sT0FBTyxNQUFNLHFCQUFxQixDQUFDO0FBRTFDLFdBQVc7QUFDWCxPQUFPLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXBDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7QUFFakUsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBSzdCLE1BQU0sT0FBTyxhQUFhO0lBQ3hCLFNBQVMsQ0FBSSxHQUFRLEVBQUUsU0FBaUIsRUFBRSxVQUFrQixFQUFFLFFBQWlCO1FBQzdFLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3BELENBQUM7OEdBSFUsYUFBYTs0R0FBYixhQUFhOzsyRkFBYixhQUFhO2tCQUp6QixJQUFJO21CQUFDO29CQUNKLElB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UUFBUSxFQXlJUixtQkFBbUIsRUEvRW5CLGNBQWMsRUFWZCxTQUFTLEVBK1RwQixnQkFBZ0IsRUEzU0wsUUFBUSxFQWVSLFlBQVksRUExWFosa0JBQWtCLEVBK1psQixZQUFZLEVBckJaLFFBQVEsYUF0aUJSLGFBQWEsRUF5Q2IsY0FBYyxFQXlrQmQsZ0JBQWdCLEVBbUJoQix1QkFBdUIsRUF0VnZCLGVBQWUsRUF1RGYsd0JBQXdCLEVBZ2JuQyxvQkFBb0IsRUFwRFQsNEJBQTRCLEVBNUk1QixhQUFhLEVBNVpiLGNBQWMsRUF3Q2QsZUFBZSxFQVFmLGVBQWUsRUFRZixlQUFlLEVBeE9mLFVBQVUsRUE0SFYsYUFBYSxFQTdDYixnQkFBZ0IsRUFsQ2hCLFlBQVksRUFjWixpQkFBaUIsRUFxTGpCLGNBQWMsRUFZZCxlQUFlLEVBV2YsZUFBZSxFQW9CZixXQUFXLEVBVFgsVUFBVSxFQStiVixpQkFBaUIsRUF2UGpCLGFBQWEsRUErTWIscUJBQXFCLEVBbElyQixjQUFjLEVBMkxkLGlCQUFpQixFQXp0QmpCLFNBQVMsRUFZVCxpQkFBaUIsRUFvYWpCLFFBQVEsRUF5SVIsbUJBQW1CLEVBL0VuQixjQUFjLEVBVmQsU0FBUyxFQStUcEIsZ0JBQWdCLEVBM1NMLFFBQVEsRUFlUixZQUFZLEVBMVhaLGtCQUFrQixFQStabEIsWUFBWSxFQXJCWixRQUFROytHQXlSUixrQkFBa0IsWUFKbkIsWUFBWSxFQUFLLE9BQU87OzJGQUl2QixrQkFBa0I7a0JBTDlCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDO29CQUM3QyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLE9BQU8sQ0FBQztvQkFDL0IsU0FBUyxFQUFFLEVBQUU7aUJBQ2QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUsIERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdGFibGUsIE5nTW9kdWxlLCBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vU2VydmljZXMvdXRpbGl0eS5zZXJ2aWNlJztcbmltcG9ydCB7IEVQYWdlVHlwZSwgSU9iamVjdExpdGVyYWwsIElUYWJsZUNvbCwgVHlwZU9mIH0gZnJvbSAnLi4vbW9kZWxzL2luZGV4Lm1vZGVsJztcbmltcG9ydCB7IEJyZWFrcG9pbnRPYnNlcnZlciwgQnJlYWtwb2ludHMgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcbmltcG9ydCB7IElGb3JtU2NoZW1hIH0gZnJvbSAnLi4vbW9kZWxzL2Zvcm0tc2NoZW1hLm1vZGVsJztcbmltcG9ydCBUaW1lQWdvIGZyb20gJ2phdmFzY3JpcHQtdGltZS1hZ28nO1xuXG4vLyBFbmdsaXNoLlxuaW1wb3J0IGVuIGZyb20gJ2phdmFzY3JpcHQtdGltZS1hZ28vbG9jYWxlL2VuJztcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgSVRleHRDYXNlMiB9IGZyb20gJy4uL2NvbXBvbmVudHMvdGV4dC1jYXNlLTIvdGV4dC1jYXNlLTIuY29tcG9uZW50JztcbmltcG9ydCB7IFNES1RyYW5zbGF0ZVBpcGUgfSBmcm9tICcuL3RyYW5zbGF0ZS5waXBlJztcbmltcG9ydCB7IEVWRnVuY3Rpb25zIH0gZnJvbSAnLi4vLi4vY29uZmlncy9iYXNlLWZ1bmN0aW9ucyc7XG5pbXBvcnQgeyBGb3JtSW52YWxpZENsYXNzUGlwZSB9IGZyb20gJy4vZm9ybS1pbnZhbGlkLWNsYXNzLnBpcGUnO1xuXG5UaW1lQWdvLmFkZERlZmF1bHRMb2NhbGUoZW4pO1xuQFBpcGUoe1xuICBuYW1lOiAnYXJyYXlTcGxpdHRlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEFycmF5U3BsaXR0ZXIgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtPFQ+KGFycjogVFtdLCBhcnJMZW5ndGg6IG51bWJlciwgc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleD86IG51bWJlcikge1xuICAgIHJldHVybiBhcnIgPyBhcnIuc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpIDogW107XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnZ2VuZGVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgR2VuZGVyUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0odmFsdWU6IHN0cmluZykge1xuICAgIHJldHVybiB2YWx1ZSA9PSAnTScgPyAnTWFsZScgOiB2YWx1ZSA9PSAnRicgPyAnRmVtYWxlJyA6IHZhbHVlO1xuICB9XG59XG5AUGlwZSh7XG4gIG5hbWU6ICdyb3VuZCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFJvdW5kUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAvKipcbiAgICogVXNlIHRoZSBNYXRoLnJvdW5kIGZ1bmN0aW9uXG4gICAqL1xuICB0cmFuc2Zvcm0odmFsdWU6IG51bWJlcikge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlKTtcbiAgfVxufVxuQFBpcGUoe1xuICBuYW1lOiAnc2Vjb25kc1RvVGltZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFNlY29uZHNUb1RpbWVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgY29uc3QgdGltZUxlZnQgPSB0aGlzLnVTLnNlY29uZHNUb0hvdXJNaW5TZWModmFsdWUpO1xuICAgIHJldHVybiBgJHt0aW1lTGVmdC5ob3VycyA/IHRpbWVMZWZ0LmhvdXJzICsgJ2hycycgOiAnJ31cbiAgJHt0aW1lTGVmdC5taW5zID8gdGltZUxlZnQubWlucyArICdtaW4nIDogJyd9ICR7dGltZUxlZnQuc2VjcyA/IHRpbWVMZWZ0LnNlY3MgKyAncycgOiAnJ31gO1xuICB9XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB1UzogVXRpbGl0eVNlcnZpY2UpIHt9XG59XG5jb25zdCB0aW1lQWdvID0gbmV3IFRpbWVBZ28oJ2VuLVVTJyk7XG5AUGlwZSh7IG5hbWU6ICdjdXN0b21EYXRlJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIEN1c3RvbURhdGVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybShkYXRlOiBzdHJpbmcsIHNob3dUaW1lID0gZmFsc2UpIHtcbiAgICByZXR1cm4gdGltZUFnby5mb3JtYXQobmV3IERhdGUoZGF0ZSkpO1xuICB9XG4gIHRyYW5zZm9ybTIoZGF0ZTogc3RyaW5nLCBmb3JtYXRTdHI6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCBmb3JtYXRTdHIpO1xuICB9XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBkYXRlUGlwZTogRGF0ZVBpcGUpIHt9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2hhc1ZhbHVlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgSGFzVmFsdWVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGZpZWxkcyBpbiBhIG9iamVjdCBoYXMgYW55IHZhbHVlXG4gICAqL1xuICB0cmFuc2Zvcm08VD4odmFsdWU6IFQsIGZpZWxkc1RvQ2hlY2tGb3I/OiAoa2V5b2YgVClbXSk6IGJvb2xlYW4ge1xuICAgIC8vIGRlYnVnZ2VyO1xuICAgIHJldHVybiBmaWVsZHNUb0NoZWNrRm9yPy5sZW5ndGggPyBmaWVsZHNUb0NoZWNrRm9yLnNvbWUoKHgpID0+ICEhdmFsdWVbeF0pIDogIWlzRW1wdHkodmFsdWUpO1xuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2NvZGVUaXRsZURlc2MnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBDb2RlVGl0bGVEZXNjUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0oXG4gICAgY29kZVRpdGxlQXJyYXk6IHtcbiAgICAgIGNvZGU6IHN0cmluZztcbiAgICAgIHRpdGxlPzogc3RyaW5nO1xuICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgfVtdLFxuICAgIGNvZGU6IHN0cmluZyxcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAoIWNvZGUpIHJldHVybiAnJztcbiAgICBsZXQgZm91bmRPYmogPSBjb2RlVGl0bGVBcnJheT8uZmluZCgoeCkgPT4geC5jb2RlID09PSBjb2RlKTtcblxuICAgIHJldHVybiBFVkZ1bmN0aW9ucy5zdHJDb25jYXRlbmF0b3IyKGNvZGUsIGZvdW5kT2JqPy5kZXNjcmlwdGlvbiB8fCBmb3VuZE9iaj8udGl0bGUsICcgLSAnKTtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdoYXNGb3JtVmFsdWUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBIYXNGb3JtVmFsdWVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGZpZWxkcyBpbiBhIGZvcm1ncm91cCBvYmplY3QgaGFzIGFueSB2YWx1ZVxuICAgKi9cbiAgdHJhbnNmb3JtPFRWYWx1ZSwgVEZvcm0gZXh0ZW5kcyB7IGdldFJhd1ZhbHVlOiAoKSA9PiBUVmFsdWUgfT4oZm9ybUdyb3VwOiBURm9ybSwgZmllbGRzVG9DaGVja0Zvcj86IChrZXlvZiBUVmFsdWUpW10sIHJlZnJlc2hlcj8pOiBib29sZWFuIHtcbiAgICAvLyBjb25zb2xlLmxvZygndmFsJyk7XG4gICAgaWYgKCFmb3JtR3JvdXApIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCB2YWwgPSBmb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKTtcbiAgICByZXR1cm4gKGZpZWxkc1RvQ2hlY2tGb3I/Lmxlbmd0aCA/IGZpZWxkc1RvQ2hlY2tGb3IgOiBPYmplY3Qua2V5cyh2YWwpKS5zb21lKCh4KSA9PiB2YWxbeF0gIT0gbnVsbCk7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnb2JqZWN0VG9MYWJlbHMnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBPYmplY3RUb0xhYmVsc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgb2JqZWN0IHRvIGFuIGFycmF5IG9mIGxhYmVsc1xuICAgKiBAcGFyYW0gdmFsdWVcbiAgICogQHBhcmFtIGN1c3RvbUZpZWxkTWFwXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICB0cmFuc2Zvcm08VD4odmFsdWU6IFQsIGN1c3RvbUZpZWxkTWFwPzogeyBbayBpbiBrZXlvZiBUXTogUGFydGlhbDxJVGV4dENhc2UyPiB9LCBleGNsdXNpb25MaXN0PzogeyBbeDogc3RyaW5nXTogYm9vbGVhbiB9KTogSVRleHRDYXNlMltdIHtcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICBjb25zdCBfZXhjbHVzaW9uTGlzdDogeyBbeDogc3RyaW5nXTogYm9vbGVhbiB9ID0ge1xuICAgICAgaWQ6IHRydWUsXG4gICAgICAuLi5leGNsdXNpb25MaXN0LFxuICAgIH07XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXModmFsdWUgfHwge30pXG4gICAgICAuZmlsdGVyKCh4KSA9PiAhX2V4Y2x1c2lvbkxpc3RbeF0pXG4gICAgICAubWFwKChmKSA9PiAoe1xuICAgICAgICAuLi5jdXN0b21GaWVsZE1hcD8uW2ZdLFxuICAgICAgICBsYWJlbDogY3VzdG9tRmllbGRNYXA/LltmXT8ubGFiZWwgfHwgdGhpcy51Uy5mb3JtYXRGaWVsZChmKSxcbiAgICAgICAgdmFsdWU6IHZhbHVlW2ZdLFxuICAgICAgfSkpO1xuICB9XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB1UzogVXRpbGl0eVNlcnZpY2UpIHt9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2dldFZhbHVlTGFiZWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBHZXRWYWx1ZUxhYmVsIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIHN0cmluZyBpbnRvIGEgU2VsZWN0IG9wdGlvblxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IgaW4gdGhlIG9wdGlvbnMgbGlzdFxuICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgbGlzdCBvZiBpdGVtcyB0byBzZWFyY2ggaW5cbiAgICogQHBhcmFtIGxhYmVsRmllbGQgVGhlIGZpZWxkIHRoYXQgaG9sZHMgdGhlIGRlc2NyaXB0aW9uIGZpZWxkXG4gICAqIEBwYXJhbSB2YWx1ZUZpZWxkIFRoZSBmaWVsZCB0aGF0IGhvbGRzIHRoZSB2YWx1ZSBmaWVsZFxuICAgKiBAcmV0dXJucyBBIGNvbmNhdGVuYXRpb24gb2YgdGhlIHZhbHVlIGFuZCBkZXNjcmlwdGlvbiAodmFsdWUgLSBkZXNjcmlwdGlvbilcbiAgICovXG4gIHRyYW5zZm9ybSh2YWx1ZTogc3RyaW5nLCBvcHRpb25zOiBhbnlbXSwgbGFiZWxGaWVsZCA9ICdkZXNjcmlwdGlvbicsIHZhbHVlRmllbGQgPSAnY29kZScpOiBzdHJpbmcge1xuICAgIGlmICghdmFsdWUpIHJldHVybiAnJztcbiAgICBpZiAoIW9wdGlvbnMpIHJldHVybiB2YWx1ZTtcbiAgICBjb25zdCBpdGVtID0gb3B0aW9ucy5maW5kKCh4KSA9PiB4W3ZhbHVlRmllbGRdID09IHZhbHVlKTtcbiAgICBpZiAoIWl0ZW0pIHJldHVybiB2YWx1ZTtcbiAgICByZXR1cm4gdmFsdWUgKyAnIC0gJyArIGl0ZW1bbGFiZWxGaWVsZF0gfHwgaXRlbVsndGl0bGUnXTtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICd2YWx1ZUZvcm1hdHRlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFZhbHVlRm9ybWF0dGVyUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICBhc3luYyB0cmFuc2Zvcm08VCwgUiA9IHN0cmluZz4odmFsOiBULCBmb3JtYXR0ZXI6ICh2YWx1ZTogVCkgPT4gUiB8IFByb21pc2U8Uj4gfCBPYnNlcnZhYmxlPFI+KSB7XG4gICAgcmV0dXJuIGZvcm1hdHRlciA/IGZvcm1hdHRlcih2YWwpIDogdmFsO1xuICB9XG59XG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuY2xhc3MgQ0Z1bmN0aW9uQ2FsbGVyIHtcbiAgLy8gdHJhbnNmb3JtPFQsIFA+KGZ1bmM6ICguLi5hcmdzOiBQW10pID0+IFQsIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGZ1bmM+KSB7XG4gIC8vICAgcmV0dXJuIGZ1bmMgPyBmdW5jKC4uLmFyZ3MpIDogbnVsbDtcbiAgLy8gfVxuXG4gIC8qKlxuICAgKiBDYWxscyBhIGZ1bmN0aW9uIGluIHRoZSB0ZW1wbGF0ZVxuICAgKiBAcGFyYW0gZnVuYyBGdW5jdGlvbiB0byBiZSBjYWxsZWRcbiAgICogQHBhcmFtIGFyZ3NcbiAgICogQHJldHVybnNcbiAgICovXG4gIHRyYW5zZm9ybTxUPihmdW5jOiAoKSA9PiBUKTogVDtcbiAgdHJhbnNmb3JtPFQsIFAxPihmdW5jOiAocGFyYW0xPzogUDEpID0+IFQsIHBhcmFtMTogUDEpOiBUO1xuICB0cmFuc2Zvcm08VCwgUDEsIFAyPihmdW5jOiAocGFyYW0xPzogUDEsIHBhcmFtMj86IFAyKSA9PiBULCBwYXJhbTE6IFAxLCBwYXJhbTI6IFAyKTogVDtcbiAgdHJhbnNmb3JtPFQsIFAxLCBQMiwgUDM+KGZ1bmM6IChwYXJhbTE/OiBQMSwgcGFyYW0yPzogUDIsIHBhcmFtMz86IFAzKSA9PiBULCBwYXJhbTE6IFAxLCBwYXJhbTI6IFAyLCBwYXJhbTM6IFAzKTogVDtcbiAgdHJhbnNmb3JtPFQsIFAxLCBQMiwgUDM+KGZ1bmM6IChwYXJhbTE/OiBQMSwgcGFyYW0yPzogUDIsIHBhcmFtMz86IFAzKSA9PiBULCBwYXJhbTE/OiBQMSwgcGFyYW0yPzogUDIsIHBhcmFtMz86IFAzKSB7XG4gICAgcmV0dXJuIGZ1bmMgPyBmdW5jKHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMpIDogbnVsbDtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdmdW5jdGlvbkNhbGxlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEZ1bmN0aW9uQ2FsbGVyIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIC8vIC8qKlxuICAvLyAgKiBDYWxscyBhIGZ1bmN0aW9uIGluIHRoZSB0ZW1wbGF0ZVxuICAvLyAgKiBAcGFyYW0gZnVuYyBGdW5jdGlvbiB0byBiZSBjYWxsZWRcbiAgLy8gICogQHBhcmFtIGFyZ3NcbiAgLy8gICogQHJldHVybnNcbiAgLy8gICovXG4gIC8vIHRyYW5zZm9ybTxUPihmdW5jOiAoKSA9PiBUKTogVDtcbiAgLy8gdHJhbnNmb3JtPFQsIFAxPihmdW5jOiAocGFyYW0xPzogUDEpID0+IFQsIHBhcmFtMTogUDEpOiBUO1xuICAvLyB0cmFuc2Zvcm08VCwgUDEsIFAyPihmdW5jOiAocGFyYW0xPzogUDEsIHBhcmFtMj86IFAyKSA9PiBULCBwYXJhbTE6IFAxLCBwYXJhbTI6IFAyKTogVDtcbiAgLy8gdHJhbnNmb3JtPFQsIFAxLCBQMiwgUDM+KFxuICAvLyAgIGZ1bmM6IChwYXJhbTE/OiBQMSwgcGFyYW0yPzogUDIsIHBhcmFtMz86IFAzKSA9PiBULFxuICAvLyAgIHBhcmFtMTogUDEsXG4gIC8vICAgcGFyYW0yOiBQMixcbiAgLy8gICBwYXJhbTM6IFAzXG4gIC8vICk6IFQ7XG4gIC8vIHRyYW5zZm9ybTxULCBQMSwgUDIsIFAzPihcbiAgLy8gICBmdW5jOiAocGFyYW0xPzogUDEsIHBhcmFtMj86IFAyLCBwYXJhbTM/OiBQMykgPT4gVCxcbiAgLy8gICBwYXJhbTE/OiBQMSxcbiAgLy8gICBwYXJhbTI/OiBQMixcbiAgLy8gICBwYXJhbTM/OiBQM1xuICAvLyApIHtcbiAgLy8gLy8gdHJhbnNmb3JtPFQsIFA+KGZ1bmM6ICguLi5hcmdzOiBQW10pID0+IFQsIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGZ1bmM+KSB7XG4gIC8vICAgcmV0dXJuIGZ1bmMgPyBmdW5jKC4uLmFyZ3MpIDogbnVsbDtcbiAgLy8gfVxuICAvLyBjb25zdHJ1Y3RvcigpIHtcbiAgLy8gICBjb25zdCBmID0gKGE6IHN0cmluZywgYjpudW1iZXIpID0+IHt9O1xuICAvLyAgIHRoaXMudHJhbnNmb3JtKGYsICB7IGQ6NDQgfSwnZGRkJywpO1xuICAvLyB9XG5cbiAgY29uc3RydWN0b3IocHVibGljIGY6IENGdW5jdGlvbkNhbGxlcikge1xuICAgIC8vIGNvbnN0IGZzID0gKCApID0+IHt9O1xuICAgIC8vIHRoaXMudHJhbnNmb3JtKGZzKTtcbiAgfVxuICB0cmFuc2Zvcm0gPSB0aGlzLmYudHJhbnNmb3JtO1xufVxuQFBpcGUoe1xuICBuYW1lOiAnZnVuY3Rpb25DYWxsZXIxJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgRnVuY3Rpb25DYWxsZXIxIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBmOiBDRnVuY3Rpb25DYWxsZXIpIHt9XG4gIHRyYW5zZm9ybSA9IHRoaXMuZi50cmFuc2Zvcm07XG59XG5AUGlwZSh7XG4gIG5hbWU6ICdmdW5jdGlvbkNhbGxlcjInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBGdW5jdGlvbkNhbGxlcjIgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgY29uc3RydWN0b3IocHVibGljIGY6IENGdW5jdGlvbkNhbGxlcikge31cbiAgdHJhbnNmb3JtID0gdGhpcy5mLnRyYW5zZm9ybTtcbn1cbkBQaXBlKHtcbiAgbmFtZTogJ2Z1bmN0aW9uQ2FsbGVyMycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEZ1bmN0aW9uQ2FsbGVyMyBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgZjogQ0Z1bmN0aW9uQ2FsbGVyKSB7fVxuICB0cmFuc2Zvcm0gPSB0aGlzLmYudHJhbnNmb3JtO1xufVxuQFBpcGUoe1xuICBuYW1lOiAnaHR0cExpc3RDYWxsZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBIdHRwTGlzdENhbGxlciBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAvLyB0cmFuc2Zvcm08VD4oaHR0cE9ic2VydmFibGU6IGFueSkge1xuICB0cmFuc2Zvcm08VD4oaHR0cE9ic2VydmFibGU6ICgpID0+IE9ic2VydmFibGU8VD4pIHtcbiAgICAvLyBjb25zb2xlLmxvZygncmFuIGZ1bmN0aW9uQ2FsbGVyJywgaHR0cE9ic2VydmFibGUpO1xuICAgIHJldHVybiBodHRwT2JzZXJ2YWJsZSgpO1xuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2h0dHBMaXN0Q2FsbGVyMScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEh0dHBMaXN0Q2FsbGVyMSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm08VD4oaHR0cE9ic2VydmFibGU6IChwYXJhbTogYW55KSA9PiBPYnNlcnZhYmxlPFQ+LCBwYXJhbTogYW55KSB7XG4gICAgLy8gY29uc29sZS5sb2coJ3JhbiBmdW5jdGlvbkNhbGxlcjEnLCBodHRwT2JzZXJ2YWJsZSk7XG4gICAgcmV0dXJuIGh0dHBPYnNlcnZhYmxlKHBhcmFtKTtcbiAgICAvLyByZXR1cm4gcGFyYW0gPyBodHRwT2JzZXJ2YWJsZShwYXJhbSkgOiBudWxsO1xuICB9XG59XG5AUGlwZSh7XG4gIG5hbWU6ICdodHRwTGlzdENhbGxlcjInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBIdHRwTGlzdENhbGxlcjIgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtPFQ+KGh0dHBPYnNlcnZhYmxlOiAocGFyYW0xOiBzdHJpbmcsIHBhcmFtMjogc3RyaW5nKSA9PiBPYnNlcnZhYmxlPFQ+LCBwYXJhbTE6IHN0cmluZywgcGFyYW0yOiBzdHJpbmcpIHtcbiAgICAvLyBjb25zb2xlLmxvZygncmFuIGh0dHBMaXN0Q2FsbGVyMicsIGh0dHBPYnNlcnZhYmxlKTtcbiAgICByZXR1cm4gaHR0cE9ic2VydmFibGUocGFyYW0xLCBwYXJhbTIpO1xuICAgIC8vIHJldHVybiBwYXJhbTEgPyAocGFyYW0yID8gaHR0cE9ic2VydmFibGUocGFyYW0xLCBwYXJhbTIpIDogbnVsbCkgOiBudWxsO1xuICB9XG59XG5AUGlwZSh7XG4gIG5hbWU6ICdpc1Nob3dQYWdlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgSXNTaG93UGFnZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0odHlwZTogRVBhZ2VUeXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgPT0gRVBhZ2VUeXBlLnNob3dQYWdlID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG59XG5AUGlwZSh7XG4gIG5hbWU6ICdpc0Nsb25lUGFnZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIElzQ2xvbmVQYWdlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybSh0eXBlOiBFUGFnZVR5cGUpIHtcbiAgICByZXR1cm4gdHlwZSA9PSBFUGFnZVR5cGUuY2xvbmVQYWdlID8gdHJ1ZSA6IG51bGw7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnZmlsdGVyQXJyYXknLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBGaWx0ZXJBcnJheVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBhcnIgQXJyYXkgb2YgaXRlbXMgdG8gZmlsdGVyXG4gICAqIEBwYXJhbSB2YWx1ZSBGaWx0ZXIgdmFsdWVcbiAgICogQHBhcmFtIGZpbHRlckZ1bmN0aW9uIEZpbHRlciBmdW5jdGlvbiB0byBwYXNzIGluIGl0ZXJhdG9yXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICB0cmFuc2Zvcm08VCBleHRlbmRzIHsgW3g6IHN0cmluZ106IGFueSB9PihcbiAgICBhcnI6IFRbXSxcbiAgICB2YWx1ZTogeyBbeCBpbiBrZXlvZiBQYXJ0aWFsPFQ+XTogYW55IH0sXG4gICAgZmlsdGVyRnVuY3Rpb24/OiAodmFsdWU6IFQsIGluZGV4PzogbnVtYmVyLCBhcnJheT86IFRbXSkgPT4gYm9vbGVhbixcbiAgKSB7XG4gICAgLy8gcmV0dXJuIHRoaXMudVMudGltZUNvZGVCbG9jaygnaW5saW5lIGNvbXBhcmlzb24nLCAoKSA9PiB7XG4gICAgaWYgKHZhbHVlID09IG51bGwgfHwgIU9iamVjdC52YWx1ZXModmFsdWUpLmZpbHRlcigoeCkgPT4geCkubGVuZ3RoIHx8ICFhcnIgfHwgIWFyci5sZW5ndGgpIHJldHVybiBhcnI7XG4gICAgLy8gZGVidWdnZXI7XG4gICAgaWYgKGZpbHRlckZ1bmN0aW9uKSByZXR1cm4gYXJyLmZpbHRlcihmaWx0ZXJGdW5jdGlvbik7XG5cbiAgICAvLyNyZWdpb24gaGFuZGxlIGZpbHRlciB2YWx1ZVxuICAgIGNvbnN0IHZhbHVlTWFwOiB7XG4gICAgICBrZXk6IHN0cmluZztcbiAgICAgIHZhbHVlOiBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyO1xuICAgICAgdHlwZTogVHlwZU9mO1xuICAgIH1bXSA9IFtdO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHZhbHVlKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpICYmIHZhbHVlW2tleV0gIT0gbnVsbCkge1xuICAgICAgICBjb25zdCB2YWwgPSB7IGtleSwgdmFsdWU6IHZhbHVlW2tleV0sIHR5cGU6IHR5cGVvZiB2YWx1ZVtrZXldIH07XG4gICAgICAgIGlmICh2YWwudHlwZSA9PSAnZnVuY3Rpb24nIHx8IHZhbC50eXBlID09ICdvYmplY3QnKSBjb250aW51ZTtcbiAgICAgICAgaWYgKHZhbC50eXBlID09ICdzdHJpbmcnKSB2YWwudmFsdWUgPSAodmFsLnZhbHVlIGFzIHN0cmluZyk/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhbHVlTWFwLnB1c2godmFsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICBjb25zdCByZXMgPSBhcnIuZmlsdGVyKCh4KSA9PiB7XG4gICAgICBjb25zdCBmb3JtR29ydXBWYWx1ZSA9IHg7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiB2YWx1ZU1hcCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKGtleS50eXBlID09ICdzdHJpbmcnICYmIChmb3JtR29ydXBWYWx1ZVtrZXkua2V5XSBhcyBzdHJpbmcpPy50b0xvd2VyQ2FzZSgpPy5pbmNsdWRlcyhrZXkudmFsdWUgYXMgc3RyaW5nKSkgfHxcbiAgICAgICAgICBmb3JtR29ydXBWYWx1ZVtrZXkua2V5XSA9PSBrZXkudmFsdWVcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICAgIC8vIGNvbnNvbGUubG9nKHJlcylcbiAgICByZXR1cm4gcmVzO1xuICAgIC8vIH0pO1xuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2ZpbHRlckZvcm1BcnJheUdyb3VwJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyRm9ybUFycmF5R3JvdXBQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gYXJyIEFycmF5IG9mIEZvcm1Hcm91cHMgdG8gZmlsdGVyXG4gICAqIEBwYXJhbSBxdWVyeU9iamVjdCBGaWx0ZXIgdmFsdWVcbiAgICogQHBhcmFtIGZpbHRlckZ1bmN0aW9uIEZpbHRlciBmdW5jdGlvbiB0byBwYXNzIGluIGl0ZXJhdG9yXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICB0cmFuc2Zvcm08VEdyb3VwIGV4dGVuZHMgRm9ybUdyb3VwPihcbiAgICBhcnI6IFRHcm91cFtdLFxuICAgIHF1ZXJ5T2JqZWN0OiB7IFt4OiBzdHJpbmddOiBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyIH0sXG4gICAgZmlsdGVyRnVuY3Rpb24/OiAodmFsdWU6IFRHcm91cCwgaW5kZXg/OiBudW1iZXIsIGFycmF5PzogVEdyb3VwW10pID0+IGJvb2xlYW4sXG4gICkge1xuICAgIC8vIHJldHVybiB0aGlzLnVTLnRpbWVDb2RlQmxvY2soJ2lubGluZSBjb21wYXJpc29uJywgKCkgPT4ge1xuICAgIGlmIChxdWVyeU9iamVjdCA9PSBudWxsIHx8ICFPYmplY3QudmFsdWVzKHF1ZXJ5T2JqZWN0KS5maWx0ZXIoKHgpID0+IHgpLmxlbmd0aCB8fCAhYXJyIHx8ICFhcnIubGVuZ3RoKVxuICAgICAgcmV0dXJuIGFycjtcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICBpZiAoZmlsdGVyRnVuY3Rpb24pIHJldHVybiBhcnIuZmlsdGVyKGZpbHRlckZ1bmN0aW9uKTtcblxuICAgIGNvbnN0IHZhbHVlTWFwOiB7XG4gICAgICBrZXk6IHN0cmluZztcbiAgICAgIHZhbHVlOiBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyO1xuICAgICAgdHlwZTogVHlwZU9mO1xuICAgIH1bXSA9IHRoaXMucXVlcnlNYXBwZXIocXVlcnlPYmplY3QpO1xuXG4gICAgY29uc3QgcmVzID0gYXJyLmZpbHRlcih0aGlzLmZpbHRlckZ1bmModmFsdWVNYXApKTtcbiAgICAvLyBjb25zb2xlLmxvZyhyZXMpXG4gICAgcmV0dXJuIHJlcztcbiAgICAvLyB9KTtcbiAgfVxuICBxdWVyeU1hcHBlciA9IChxdWVyeTogSU9iamVjdExpdGVyYWwpID0+IHtcbiAgICBpZiAocXVlcnkgPT0gbnVsbCB8fCAhT2JqZWN0LnZhbHVlcyhxdWVyeSkuZmlsdGVyKCh4KSA9PiB4KS5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHF1ZXJ5T2JqZWN0OiB7XG4gICAgICBrZXk6IHN0cmluZztcbiAgICAgIHZhbHVlOiBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyO1xuICAgICAgdHlwZTogVHlwZU9mO1xuICAgIH1bXSA9IFtdO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHF1ZXJ5KVxuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChxdWVyeSwga2V5KSAmJiBxdWVyeVtrZXldICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgdmFsID0geyBrZXksIHZhbHVlOiBxdWVyeVtrZXldLCB0eXBlOiB0eXBlb2YgcXVlcnlba2V5XSB9O1xuICAgICAgICBpZiAodmFsLnR5cGUgPT0gJ2Z1bmN0aW9uJyB8fCB2YWwudHlwZSA9PSAnb2JqZWN0JykgY29udGludWU7XG4gICAgICAgIGlmICh2YWwudHlwZSA9PSAnc3RyaW5nJykgdmFsLnZhbHVlID0gKHZhbC52YWx1ZSBhcyBzdHJpbmcpPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBxdWVyeU9iamVjdC5wdXNoKHZhbCk7XG4gICAgICB9XG4gICAgcmV0dXJuIHF1ZXJ5T2JqZWN0O1xuICB9O1xuXG4gIGZpbHRlckZ1bmMgPVxuICAgIChcbiAgICAgIHF1ZXJ5T2JqZWN0OiB7XG4gICAgICAgIGtleTogc3RyaW5nO1xuICAgICAgICB2YWx1ZTogc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlcjtcbiAgICAgICAgdHlwZTogVHlwZU9mO1xuICAgICAgfVtdLFxuICAgICkgPT5cbiAgICA8VEdyb3VwIGV4dGVuZHMgRm9ybUdyb3VwPihncm91cDogVEdyb3VwKTogYm9vbGVhbiA9PiB7XG4gICAgICBjb25zdCBmb3JtR29ydXBWYWx1ZSA9IGdyb3VwLmdldFJhd1ZhbHVlKCk7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBxdWVyeU9iamVjdCB8fCBbXSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKGtleS50eXBlID09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAoZm9ybUdvcnVwVmFsdWVba2V5LmtleV0gYXMgc3RyaW5nKT8udG9Mb3dlckNhc2UoKT8uaW5jbHVkZXMoa2V5LnZhbHVlIGFzIHN0cmluZykpIHx8XG4gICAgICAgICAgZm9ybUdvcnVwVmFsdWVba2V5LmtleV0gPT0ga2V5LnZhbHVlXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdmaWx0ZXJGb3JtQXJyYXlDb250cm9sJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyRm9ybUFycmF5Q29udHJvbFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBhcnIgQXJyYXkgb2YgRm9ybUdyb3VwcyB0byBmaWx0ZXJcbiAgICogQHBhcmFtIHZhbHVlIEZpbHRlciB2YWx1ZVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgdHJhbnNmb3JtPFRDb250cm9sIGV4dGVuZHMgQWJzdHJhY3RDb250cm9sPGFueT4gPSBhbnk+KGFycjogVENvbnRyb2xbXSwgdmFsdWU6IHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXIpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCAhYXJyIHx8ICFhcnIubGVuZ3RoKSByZXR1cm4gYXJyO1xuICAgIC8vIGRlYnVnZ2VyO1xuICAgIHJldHVybiBhcnIuZmlsdGVyKCh4KSA9PiB4LnZhbHVlID09IHZhbHVlKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB1UzogVXRpbGl0eVNlcnZpY2UpIHt9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ3NvcnQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBTb3J0UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGFyclxuICAgKiBAcGFyYW0gZGlyZWN0aW9uIDAgLSBhc2NlbmRpbmcgb3JkZXIuIDEgLSBkZXNjZW5kaW5nIG9yZGVyXG4gICAqIEBwYXJhbSBzb3J0RmllbGRcbiAgICogQHJldHVybnNcbiAgICovXG4gIHRyYW5zZm9ybTxUPihhcnI6IFRbXSwgZGlyZWN0aW9uOiAwIHwgMSA9IDAsIHNvcnRGaWVsZD86IGtleW9mIFQpIHtcbiAgICAvLyAgICBjb25zb2xlLmxvZygnU09SVFRFUicsIGFyciwgZGlyZWN0aW9uLCBzb3J0RmllbGQpO1xuICAgIC8vIGRlYnVnZ2VyO1xuICAgIGlmICghYXJyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGRpcmVjdGlvbiA+IC0xICYmIGRpcmVjdGlvbiA8IDIpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvcnQoYXJyLCBkaXJlY3Rpb24sIHNvcnRGaWVsZCBhcyBhbnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYXJyO1xuICAgIH1cbiAgfVxuICBzb3J0PFQ+KGFycjogVFtdLCBkaXJlY3Rpb246IDAgfCAxLCBzb3J0RmllbGQ/OiBzdHJpbmcpIHtcbiAgICBpZiAoc29ydEZpZWxkKSB7XG4gICAgICByZXR1cm4gYXJyLnNvcnQzKHNvcnRGaWVsZCBhcyBhbnksIGRpcmVjdGlvbiA/IHRydWUgOiBmYWxzZSkgYXMgVFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYXJyLnNvcnQoKHg6IGFueSwgeTogYW55KSA9PiAoZGlyZWN0aW9uID8geSAtIHggOiB4IC0geSkpO1xuICAgIH1cbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdyZWZyZXNoZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBSZWZyZXNoZXJQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgdmFsdWUgd2hlbiB0aGUgcmVmcmVzaGVyIHZhbHVlIGNoYW5nZXNcbiAgICogQHBhcmFtIHZhbHVlIFZhbHVlIHRvIGJlIHJldHVybmVkXG4gICAqIEBwYXJhbSByZWZyZXNoZXIgUmVmcmVzaGVyIHZhbHVlIGZvciB1cGRhdGluZyB0aGUgdmFsdWVcbiAgICogQHJldHVybnNcbiAgICovXG4gIHRyYW5zZm9ybTxUPih2YWx1ZTogVCwgcmVmcmVzaGVyPzogYW55KSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5AUGlwZSh7XG4gIG5hbWU6ICd0b0FueScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFRvQW55UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0odmFsdWU6IGFueSwgaXNBcnJheSA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIGlzQXJyYXkgPyAodmFsdWUgYXMgYW55W10pIDogdmFsdWU7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAndG9BbnlBcnJheScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFRvQW55QXJyYXlQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybSh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIHZhbHVlIGFzIGFueVtdO1xuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ3RyaW0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBUcmltUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAvKipcbiAgICogVHJpbXMgYSBzdHJpbmdcbiAgICogQHBhcmFtIHZhbHVlIFN0cmluZyB0byB0cmltXG4gICAqIEByZXR1cm5zIFRyaW1tZWQgc3RyaW5nXG4gICAqL1xuICB0cmFuc2Zvcm0odmFsdWU6IHN0cmluZykge1xuICAgIHJldHVybiB2YWx1ZT8udHJpbSgpO1xuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ3RyaW1UZXh0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgVHJpbVRleHRQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIC8qKlxuICAgKiBUcmltcyBhIHN0cmluZyBiYXNlZCBvbiBhIHNwZWNpZmllZCBsZW5ndGhcbiAgICogQHBhcmFtIHZhbHVlIFN0cmluZyB0byB0cmltXG4gICAqIEBwYXJhbSBsZW5ndGggTGVuZ3RoIHRvIGJlZ2luIHRyaW1taW5nXG4gICAqIEByZXR1cm5zIFRyaW1tZWQgc3RyaW5nXG4gICAqL1xuICB0cmFuc2Zvcm0odmFsdWU6IHN0cmluZywgbGVuZ3RoOiBudW1iZXIpIHtcbiAgICByZXR1cm4gIXZhbHVlIHx8IGxlbmd0aCA9PSBudWxsIHx8IHZhbHVlLmxlbmd0aCA8IGxlbmd0aCA/IHZhbHVlIDogdmFsdWUuc3Vic3RyaW5nKDAsIGxlbmd0aCkgKyAnLi4uJztcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICd4T3JZJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgWE9yWVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtKHg6IHN0cmluZywgeSA9ICctJykge1xuICAgIHJldHVybiB0aGlzLnVTLnhPclkoeCwgeSk7XG4gIH1cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB1UzogVXRpbGl0eVNlcnZpY2UpIHt9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ3JlcGxhY2VBbGwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBSZXBsYWNlQWxsUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0odGV4dDogc3RyaW5nLCBzZWFyY2g6IHN0cmluZywgcmVwbGFjZW1lbnQ6IHN0cmluZykge1xuICAgIHJldHVybiB0ZXh0ID8gdGV4dC5zcGxpdChzZWFyY2gpLmpvaW4ocmVwbGFjZW1lbnQpIDogdGV4dDtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICd2YWx1ZU9yWCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFZhbHVlT3JYUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIFZhcmlhYmxlIHRoYXQgaG9sZHMgdGhlIHZhbHVlIHRvIGJlIGNoZWNrZWQgZm9yIGVtcHRpbmVzc1xuICAgKiBAcGFyYW0gcmVwbGFjZW1lbnQgVGhpcyBpcyB0aGUgdmFsdWUgdGhhdCB3aWxsIGJlIHNldCBpZiB0aGUgc3ViamVjdCBmaWVsZCBpcyBlbXB0eVxuICAgKiBAcmV0dXJucyBSZXR1cm4gdGhlIHZhbHVlIG9yIHRoZSByZXBsYWNlbWVudCB2YWx1ZSBpZiB2YWx1ZSBpcyBlbXB0eVxuICAgKi9cbiAgdHJhbnNmb3JtPFQ+KHZhbHVlOiBULCByZXBsYWNlbWVudDogc3RyaW5nID0gJy0nKSB7XG4gICAgLy8gY29uc29sZS5sb2codmFsdWUpXG4gICAgcmV0dXJuIHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT0gdW5kZWZpbmVkID8gcmVwbGFjZW1lbnQgOiB2YWx1ZTtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdzdHJDb25jYXRlbmF0b3InLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBTdHJDb25jYXRlbmF0b3JQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybTxUPih0ZXh0MT86IHN0cmluZyB8IG51bGwsIHRleHQyPzogc3RyaW5nIHwgbnVsbCwgam9pbmVyOiBzdHJpbmcgPSAnIC0gJykge1xuICAgIHJldHVybiBFVkZ1bmN0aW9ucy5zdHJDb25jYXRlbmF0b3IyKHRleHQxLCB0ZXh0Miwgam9pbmVyKTtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdmb3JtVmFsdWUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtVmFsdWVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybShmb3JtVmFsdWUsIGZvcm1TY2hlbWE/OiBJRm9ybVNjaGVtYVtdKTogc3RyaW5nO1xuICB0cmFuc2Zvcm08VD4oZm9ybVZhbHVlOiBULCBmb3JtU2NoZW1hPzogKGtleW9mIFQpW10pOiBzdHJpbmc7XG4gIHRyYW5zZm9ybTxUPihmb3JtVmFsdWU6IFQsIGZvcm1TY2hlbWE/OiAoSUZvcm1TY2hlbWEgfCBrZXlvZiBUKVtdKTogc3RyaW5nIHtcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICByZXR1cm4gZm9ybVZhbHVlXG4gICAgICA/IChmb3JtU2NoZW1hPy5sZW5ndGggJiYgdHlwZW9mIGZvcm1TY2hlbWFbMF0gIT0gJ3N0cmluZydcbiAgICAgICAgICA/IGZvcm1TY2hlbWEubWFwKChmaWVsZDogSUZvcm1TY2hlbWEpID0+IHtcbiAgICAgICAgICAgICAgLy8gZGVidWdnZXI7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbCA9XG4gICAgICAgICAgICAgICAgZmllbGQudHlwZSA9PSAnc2VsZWN0JyB8fCBmaWVsZC50eXBlID09ICdhdXRvY29tcGxldGUnID8gZmllbGQuc2VsZWN0ZWRPcHRpb25MYWJlbCB8fCBmb3JtVmFsdWVbZmllbGQuZmllbGRdIDogZm9ybVZhbHVlW2ZpZWxkLmZpZWxkXTtcbiAgICAgICAgICAgICAgcmV0dXJuIHZhbCAhPSBudWxsID8gYCR7ZmllbGQubGFiZWx9OiAke3ZhbH1gIDogbnVsbDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiAoZm9ybVNjaGVtYSB8fCBPYmplY3Qua2V5cyhmb3JtVmFsdWUpKS5tYXAoKHgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsID0gZm9ybVZhbHVlW3hdO1xuICAgICAgICAgICAgICByZXR1cm4gYCR7dGhpcy51Uy5mb3JtYXRGaWVsZCh4KX06ICR7dmFsICE9IG51bGwgPyB2YWwgOiAnLSd9YDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKCh4KSA9PiB4KVxuICAgICAgICAgIC5qb2luKCdcXG4nKVxuICAgICAgOiAnJztcbiAgfVxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdVM6IFV0aWxpdHlTZXJ2aWNlKSB7fVxufVxuQFBpcGUoe1xuICBuYW1lOiAnZmllbGRUb0xhYmVsJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgRmllbGRUb0xhYmVsUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0oZmllbGROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIGRlYnVnZ2VyO1xuICAgIHJldHVybiB0aGlzLnVTLmZvcm1hdEZpZWxkKGZpZWxkTmFtZSk7XG4gIH1cbiAgY29uc3RydWN0b3IocHVibGljIHVTOiBVdGlsaXR5U2VydmljZSkge31cbn1cblxuQFBpcGUoeyBuYW1lOiAndHlwZXInLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgVHlwZXJQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybTxUPih2YWx1ZTogYW55LCBzYW1wbGU6IFQpIHtcbiAgICByZXR1cm4gdmFsdWUgYXMgVDtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdmaWx0ZXJBcnJheUJ5U3RyaW5nJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyQXJyYXlCeVN0cmluZ1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgLyoqXG4gICAqIEZpbHRlciBhcnJheSB1c2luZyBhIHBpcGVcbiAgICogQHBhcmFtIGFyciBBcnJheSB0byBmaWx0ZXJcbiAgICogQHBhcmFtIHZhbHVlIFZhbHVlIHRvIGZpbHRlciBmb3JcbiAgICogQHBhcmFtIGtleXMgRmllbGRzIHRvIGNoZWNrIGZvciBtYXRjaCBpblxuICAgKiBAcGFyYW0gZmlsdGVyRnVuY3Rpb24gRml0bGVyIGZ1bmN0aW9uIHRvIHVzZSBpbnN0ZWFkIG9mIHZhbHVlIGFuZCBrZXlzXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICB0cmFuc2Zvcm08VD4oYXJyOiBUW10sIHZhbHVlOiBzdHJpbmcsIGtleXM6IChrZXlvZiBUKVtdLCBmaWx0ZXJGdW5jdGlvbj86ICh2YWx1ZTogVCwgaW5kZXg/OiBudW1iZXIsIGFycmF5PzogVFtdKSA9PiBib29sZWFuKSB7XG4gICAgaWYgKCFhcnIpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIGFycjtcbiAgICBpZiAoZmlsdGVyRnVuY3Rpb24pIHJldHVybiBhcnIuZmlsdGVyKGZpbHRlckZ1bmN0aW9uKTtcbiAgICBlbHNlIHtcbiAgICAgIC8vIGRlYnVnZ2VyO1xuICAgICAgY29uc3QgdmwgPSB2YWx1ZT8udG9TdHJpbmcoKT8udHJpbSgpPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgcmV0OiBUW10gPSBbXTtcbiAgICAgIGNvbnN0IGFkZGVkTWFwOiB7IFtpZDogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XG4gICAgICBjb25zdCBpZEZpZWxkID0ga2V5c1swXSBhcyBzdHJpbmc7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBhcnIpIHtcbiAgICAgICAgICBpZiAoYWRkZWRNYXBbaXRlbVtpZEZpZWxkXV0pIGNvbnRpbnVlO1xuICAgICAgICAgIGlmICgoPHN0cmluZz5pdGVtW2tleV0pPy50b1N0cmluZygpPy50b0xvd2VyQ2FzZSgpPy5zdGFydHNXaXRoKHZsKSkge1xuICAgICAgICAgICAgcmV0LnB1c2goaXRlbSk7XG4gICAgICAgICAgICBhZGRlZE1hcFtpdGVtW2lkRmllbGRdXSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBhcnIpIHtcbiAgICAgICAgICBpZiAoYWRkZWRNYXBbaXRlbVtpZEZpZWxkXV0pIGNvbnRpbnVlO1xuICAgICAgICAgIGlmICgoPHN0cmluZz5pdGVtW2tleV0pPy50b1N0cmluZygpPy50b0xvd2VyQ2FzZSgpPy5pbmNsdWRlcyh2bCkpIHtcbiAgICAgICAgICAgIHJldC5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgYWRkZWRNYXBbaXRlbVtpZEZpZWxkXV0gPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc29sZS5sb2coJ2ZpbHRlciByZXN1bHQnLCByZXQpO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gIH1cbn1cblxuQFBpcGUoeyBuYW1lOiAncmVtb3ZlVXNlZE9wdGlvbnMnLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgUmVtb3ZlVXNlZE9wdGlvbnNQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybTxUT3B0aW9uLCBURm9ybUFycmF5PihcbiAgICBhcnI6IFRPcHRpb25bXSxcbiAgICBmb3JtQXJyYXk6IFRGb3JtQXJyYXlbXSxcbiAgICBmb3JtOiBURm9ybUFycmF5LFxuICAgIGFyckZpZWxkTmFtZT86IGtleW9mIFRPcHRpb24sXG4gICAgZm9ybUZpZWxkTmFtZT86IGtleW9mIFRGb3JtQXJyYXksXG4gICk6IFRPcHRpb25bXSB7XG4gICAgaWYgKCFhcnI/Lmxlbmd0aCB8fCAhZm9ybUFycmF5Py5sZW5ndGgpIHJldHVybiBbXTtcbiAgICBpZiAoYXJyRmllbGROYW1lICYmIGZvcm1GaWVsZE5hbWUpXG4gICAgICByZXR1cm4gYXJyLmZpbHRlcihcbiAgICAgICAgKHgpID0+ICFmb3JtQXJyYXkuc29tZSgoZikgPT4gZm9ybVtmb3JtRmllbGROYW1lXSAhPSAoeFthcnJGaWVsZE5hbWVdIGFzIGFueSkgJiYgZltmb3JtRmllbGROYW1lXSA9PSAoeFthcnJGaWVsZE5hbWVdIGFzIGFueSkpLFxuICAgICAgKTtcbiAgICBlbHNlIGlmIChhcnJGaWVsZE5hbWUgJiYgIWZvcm1GaWVsZE5hbWUpIHJldHVybiBhcnIuZmlsdGVyKCh4KSA9PiAhZm9ybUFycmF5LnNvbWUoKGYpID0+IGYgPT0gKHhbYXJyRmllbGROYW1lXSBhcyBhbnkpKSk7XG4gICAgZWxzZSBpZiAoIWFyckZpZWxkTmFtZSAmJiBmb3JtRmllbGROYW1lKSByZXR1cm4gYXJyLmZpbHRlcigoeCkgPT4gIWZvcm1BcnJheS5zb21lKChmKSA9PiBmW2Zvcm1GaWVsZE5hbWVdID09ICh4IGFzIGFueSkpKTtcbiAgICBlbHNlIHJldHVybiBhcnIuZmlsdGVyKCh4KSA9PiBmb3JtQXJyYXkuc29tZSgoZikgPT4gZiA9PSAoeCBhcyBhbnkpKSk7XG4gIH1cbn1cblxuQFBpcGUoeyBuYW1lOiAncmVtb3ZlVXNlZE9wdGlvbnNSZWFjdGl2ZScsIHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBSZW1vdmVVc2VkT3B0aW9uc1JlYWN0aXZlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm08VE9wdGlvbiwgVEZvcm1BcnJheSBleHRlbmRzIHsgdmFsdWU/OiBhbnkgfVtdPihcbiAgICBhcnI6IFRPcHRpb25bXSxcbiAgICBmb3JtQXJyYXk6IFRGb3JtQXJyYXlbXSxcbiAgICBmb3JtOiBURm9ybUFycmF5LFxuICAgIGFyckZpZWxkTmFtZT86IGtleW9mIFRPcHRpb24sXG4gICAgZm9ybUZpZWxkTmFtZT86IGtleW9mIFRGb3JtQXJyYXksXG4gICk6IFRPcHRpb25bXSB7XG4gICAgaWYgKCFhcnI/Lmxlbmd0aCB8fCAhZm9ybUFycmF5Py5sZW5ndGgpIHJldHVybiBbXTtcbiAgICBpZiAoYXJyRmllbGROYW1lICYmIGZvcm1GaWVsZE5hbWUpXG4gICAgICByZXR1cm4gYXJyLmZpbHRlcihcbiAgICAgICAgKHgpID0+ICFmb3JtQXJyYXkuc29tZSgoZikgPT4gZm9ybVtmb3JtRmllbGROYW1lXSAhPSAoeFthcnJGaWVsZE5hbWVdIGFzIGFueSkgJiYgZltmb3JtRmllbGROYW1lXSA9PSAoeFthcnJGaWVsZE5hbWVdIGFzIGFueSkpLFxuICAgICAgKTtcbiAgICBlbHNlIGlmIChhcnJGaWVsZE5hbWUgJiYgIWZvcm1GaWVsZE5hbWUpIHJldHVybiBhcnIuZmlsdGVyKCh4KSA9PiAhZm9ybUFycmF5LnNvbWUoKGYpID0+IGYgPT0gKHhbYXJyRmllbGROYW1lXSBhcyBhbnkpKSk7XG4gICAgZWxzZSBpZiAoIWFyckZpZWxkTmFtZSAmJiBmb3JtRmllbGROYW1lKSByZXR1cm4gYXJyLmZpbHRlcigoeCkgPT4gIWZvcm1BcnJheS5zb21lKChmKSA9PiBmW2Zvcm1GaWVsZE5hbWVdID09ICh4IGFzIGFueSkpKTtcbiAgICBlbHNlIHJldHVybiBhcnIuZmlsdGVyKCh4KSA9PiBmb3JtQXJyYXkuc29tZSgoZikgPT4gZiA9PSAoeCBhcyBhbnkpKSk7XG4gIH1cbn1cblxuQFBpcGUoeyBuYW1lOiAnb2JqZWN0VG9BcnJheScsIHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBPYmplY3RUb0FycmF5UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm08VD4odmFsdWU6IHsgW3g6IHN0cmluZ106IFQgfSk6IFRbXSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModmFsdWUpO1xuICB9XG59XG5cbkBQaXBlKHsgbmFtZTogJ2Zvcm1TY2hlbWFUb0NvbHMnLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgRm9ybVNjaGVtYVRvVGFibGVDb2x1bW5zUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0odmFsdWU6IElGb3JtU2NoZW1hW10pOiBJVGFibGVDb2xbXSB7XG4gICAgcmV0dXJuIHZhbHVlPy5tYXAoKHgpID0+ICh7IGY6IHguZmllbGQsIHQ6IHgubGFiZWwgfSkpIHx8IFtdO1xuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ3Jlc3BvbnNpdmVWYWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBSZXNwb25zaXZlVmFsUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAvLyBzdWI6U3Vic2NyaXB0aW9uXG4gIHRyYW5zZm9ybTxUPihjb25maWc6IHtcbiAgICBYU21hbGw/OiBUO1xuICAgIFNtYWxsPzogVDtcbiAgICBNZWRpdW0/OiBUO1xuICAgIExhcmdlPzogVDtcbiAgICBYTGFyZ2U/OiBUO1xuICAgIEhhbmRzZXQ/OiBUO1xuICAgIFRhYmxldD86IFQ7XG4gICAgV2ViPzogVDtcbiAgICBIYW5kc2V0UG9ydHJhaXQ/OiBUO1xuICAgIFRhYmxldFBvcnRyYWl0PzogVDtcbiAgICBXZWJQb3J0cmFpdD86IFQ7XG4gICAgSGFuZHNldExhbmRzY2FwZT86IFQ7XG4gICAgVGFibGV0TGFuZHNjYXBlPzogVDtcbiAgICBXZWJMYW5kc2NhcGU/OiBUO1xuICB9KTogVCB7XG4gICAgLy8gZGVidWdnZXI7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gY29uZmlnKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywga2V5KSkge1xuICAgICAgICBpZiAodGhpcy5yZXNwb25zaXZlLmlzTWF0Y2hlZChCcmVha3BvaW50c1trZXldKSkgcmV0dXJuIGNvbmZpZ1trZXldO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhjb25maWcpWzBdO1xuICAgIC8vICB0aGlzLnN1Yj0gdGhpcy5yZXNwb25zaXZlLm9ic2VydmUocj0+e1xuXG4gICAgLy8gIH0pXG4gIH1cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy8gdGhpcy5zdWIuXG4gIH1cbiAgY29uc3RydWN0b3IocHVibGljIHJlc3BvbnNpdmU6IEJyZWFrcG9pbnRPYnNlcnZlcikge31cbn1cblxuY29uc3QgY29tcHMgPSBbXG4gIEFycmF5U3BsaXR0ZXIsXG4gIEN1c3RvbURhdGVQaXBlLFxuICBGaWVsZFRvTGFiZWxQaXBlLFxuICBGaWx0ZXJBcnJheUJ5U3RyaW5nUGlwZSxcbiAgRmlsdGVyQXJyYXlQaXBlLFxuICBGaWx0ZXJGb3JtQXJyYXlHcm91cFBpcGUsXG4gIEZvcm1JbnZhbGlkQ2xhc3NQaXBlLFxuICBGb3JtU2NoZW1hVG9UYWJsZUNvbHVtbnNQaXBlLFxuICBGb3JtVmFsdWVQaXBlLFxuICBGdW5jdGlvbkNhbGxlcixcbiAgRnVuY3Rpb25DYWxsZXIxLFxuICBGdW5jdGlvbkNhbGxlcjIsXG4gIEZ1bmN0aW9uQ2FsbGVyMyxcbiAgR2VuZGVyUGlwZSxcbiAgR2V0VmFsdWVMYWJlbCxcbiAgSGFzRm9ybVZhbHVlUGlwZSxcbiAgSGFzVmFsdWVQaXBlLFxuICBDb2RlVGl0bGVEZXNjUGlwZSxcbiAgSHR0cExpc3RDYWxsZXIsXG4gIEh0dHBMaXN0Q2FsbGVyMSxcbiAgSHR0cExpc3RDYWxsZXIyLFxuICBJc0Nsb25lUGFnZSxcbiAgSXNTaG93UGFnZSxcbiAgT2JqZWN0VG9BcnJheVBpcGUsXG4gIFJlZnJlc2hlclBpcGUsXG4gIFJlbW92ZVVzZWRPcHRpb25zUGlwZSxcbiAgUmVwbGFjZUFsbFBpcGUsXG4gIFJlc3BvbnNpdmVWYWxQaXBlLFxuICBSb3VuZFBpcGUsXG4gIFNlY29uZHNUb1RpbWVQaXBlLFxuICBTb3J0UGlwZSxcbiAgU3RyQ29uY2F0ZW5hdG9yUGlwZSxcbiAgVG9BbnlBcnJheVBpcGUsXG4gIFRvQW55UGlwZSxcbiAgU0RLVHJhbnNsYXRlUGlwZSxcbiAgVHJpbVBpcGUsXG4gIFRyaW1UZXh0UGlwZSxcbiAgVmFsdWVGb3JtYXR0ZXJQaXBlLFxuICBWYWx1ZU9yWFBpcGUsXG4gIFhPcllQaXBlLFxuXTtcbmNvbnN0IG1vZHVsZXMgPSBbXTtcbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIC4uLm1vZHVsZXMsIC4uLmNvbXBzXSxcbiAgZXhwb3J0czogWy4uLmNvbXBzLCAuLi5tb2R1bGVzXSxcbiAgcHJvdmlkZXJzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgVXRpbGl0eVBpcGVzTW9kdWxlIHt9XG4iXX0=
1001
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXRzLWZlLW5nLXNkay9zcmMvbGliL1NoYXJlZC9waXBlcy91dGlsaXR5LnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFJMUUsT0FBTyxFQUFFLFNBQVMsRUFBcUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRixPQUFPLEVBQXNCLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRFLE9BQU8sT0FBTyxNQUFNLHFCQUFxQixDQUFDO0FBRTFDLFdBQVc7QUFDWCxPQUFPLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXBDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7QUFFakUsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBSzdCLE1BQU0sT0FBTyxhQUFhO0lBQ3hCLFNBQVMsQ0FBSSxHQUFRLEVBQUUsU0FBaUIsRUFBRSxVQUFrQixFQUFFLFFBQWlCO1FBQzdFLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3BELENBQUM7OEdBSFUsYUFBYTs0R0FBYixhQUFhOzsyRkFBYixhQUFhO2tCQUp6QixJQUFJO21CQUFDO29CQUNKLElB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RSxHQUFHLEtBQUssQ0FBQztvQkFDN0MsT0FBTyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxPQUFPLENBQUM7b0JBQy9CLFNBQVMsRUFBRSxFQUFFO2lCQUNkIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBOZ01vZHVsZSwgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBVdGlsaXR5U2VydmljZSB9IGZyb20gJy4uLy4uL1NlcnZpY2VzL3V0aWxpdHkuc2VydmljZSc7XG5pbXBvcnQgeyBFUGFnZVR5cGUsIElPYmplY3RMaXRlcmFsLCBJVGFibGVDb2wsIFR5cGVPZiB9IGZyb20gJy4uL21vZGVscy9pbmRleC5tb2RlbCc7XG5pbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIsIEJyZWFrcG9pbnRzIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XG5pbXBvcnQgeyBJRm9ybVNjaGVtYSB9IGZyb20gJy4uL21vZGVscy9mb3JtLXNjaGVtYS5tb2RlbCc7XG5pbXBvcnQgVGltZUFnbyBmcm9tICdqYXZhc2NyaXB0LXRpbWUtYWdvJztcblxuLy8gRW5nbGlzaC5cbmltcG9ydCBlbiBmcm9tICdqYXZhc2NyaXB0LXRpbWUtYWdvL2xvY2FsZS9lbic7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IElUZXh0Q2FzZTIgfSBmcm9tICcuLi9jb21wb25lbnRzL3RleHQtY2FzZS0yL3RleHQtY2FzZS0yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTREtUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi90cmFuc2xhdGUucGlwZSc7XG5pbXBvcnQgeyBFVkZ1bmN0aW9ucyB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvYmFzZS1mdW5jdGlvbnMnO1xuaW1wb3J0IHsgRm9ybUludmFsaWRDbGFzc1BpcGUgfSBmcm9tICcuL2Zvcm0taW52YWxpZC1jbGFzcy5waXBlJztcblxuVGltZUFnby5hZGREZWZhdWx0TG9jYWxlKGVuKTtcbkBQaXBlKHtcbiAgbmFtZTogJ2FycmF5U3BsaXR0ZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBBcnJheVNwbGl0dGVyIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybTxUPihhcnI6IFRbXSwgYXJyTGVuZ3RoOiBudW1iZXIsIHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg/OiBudW1iZXIpIHtcbiAgICByZXR1cm4gYXJyID8gYXJyLnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4KSA6IFtdO1xuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2dlbmRlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEdlbmRlclBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtKHZhbHVlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdmFsdWUgPT0gJ00nID8gJ01hbGUnIDogdmFsdWUgPT0gJ0YnID8gJ0ZlbWFsZScgOiB2YWx1ZTtcbiAgfVxufVxuQFBpcGUoe1xuICBuYW1lOiAncm91bmQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBSb3VuZFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgLyoqXG4gICAqIFVzZSB0aGUgTWF0aC5yb3VuZCBmdW5jdGlvblxuICAgKi9cbiAgdHJhbnNmb3JtKHZhbHVlOiBudW1iZXIpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSk7XG4gIH1cbn1cbkBQaXBlKHtcbiAgbmFtZTogJ3NlY29uZHNUb1RpbWUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBTZWNvbmRzVG9UaW1lUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0odmFsdWU6IG51bWJlcikge1xuICAgIGNvbnN0IHRpbWVMZWZ0ID0gdGhpcy51Uy5zZWNvbmRzVG9Ib3VyTWluU2VjKHZhbHVlKTtcbiAgICByZXR1cm4gYCR7dGltZUxlZnQuaG91cnMgPyB0aW1lTGVmdC5ob3VycyArICdocnMnIDogJyd9XG4gICR7dGltZUxlZnQubWlucyA/IHRpbWVMZWZ0Lm1pbnMgKyAnbWluJyA6ICcnfSAke3RpbWVMZWZ0LnNlY3MgPyB0aW1lTGVmdC5zZWNzICsgJ3MnIDogJyd9YDtcbiAgfVxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdVM6IFV0aWxpdHlTZXJ2aWNlKSB7fVxufVxuY29uc3QgdGltZUFnbyA9IG5ldyBUaW1lQWdvKCdlbi1VUycpO1xuQFBpcGUoeyBuYW1lOiAnY3VzdG9tRGF0ZScsIHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBDdXN0b21EYXRlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0oZGF0ZTogc3RyaW5nLCBzaG93VGltZSA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIHRpbWVBZ28uZm9ybWF0KG5ldyBEYXRlKGRhdGUpKTtcbiAgfVxuICB0cmFuc2Zvcm0yKGRhdGU6IHN0cmluZywgZm9ybWF0U3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgZm9ybWF0U3RyKTtcbiAgfVxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZGF0ZVBpcGU6IERhdGVQaXBlKSB7fVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdoYXNWYWx1ZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEhhc1ZhbHVlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBmaWVsZHMgaW4gYSBvYmplY3QgaGFzIGFueSB2YWx1ZVxuICAgKi9cbiAgdHJhbnNmb3JtPFQ+KHZhbHVlOiBULCBmaWVsZHNUb0NoZWNrRm9yPzogKGtleW9mIFQpW10pOiBib29sZWFuIHtcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICByZXR1cm4gZmllbGRzVG9DaGVja0Zvcj8ubGVuZ3RoID8gZmllbGRzVG9DaGVja0Zvci5zb21lKCh4KSA9PiAhIXZhbHVlW3hdKSA6ICFpc0VtcHR5KHZhbHVlKTtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdjb2RlVGl0bGVEZXNjJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgQ29kZVRpdGxlRGVzY1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtKFxuICAgIGNvZGVUaXRsZUFycmF5OiB7XG4gICAgICBjb2RlOiBzdHJpbmc7XG4gICAgICB0aXRsZT86IHN0cmluZztcbiAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIH1bXSxcbiAgICBjb2RlOiBzdHJpbmcsXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKCFjb2RlKSByZXR1cm4gJyc7XG4gICAgbGV0IGZvdW5kT2JqID0gY29kZVRpdGxlQXJyYXk/LmZpbmQoKHgpID0+IHguY29kZSA9PT0gY29kZSk7XG5cbiAgICByZXR1cm4gRVZGdW5jdGlvbnMuc3RyQ29uY2F0ZW5hdG9yMihjb2RlLCBmb3VuZE9iaj8uZGVzY3JpcHRpb24gfHwgZm91bmRPYmo/LnRpdGxlLCAnIC0gJyk7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnaGFzRm9ybVZhbHVlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgSGFzRm9ybVZhbHVlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBmaWVsZHMgaW4gYSBmb3JtZ3JvdXAgb2JqZWN0IGhhcyBhbnkgdmFsdWVcbiAgICovXG4gIHRyYW5zZm9ybTxUVmFsdWUsIFRGb3JtIGV4dGVuZHMgeyBnZXRSYXdWYWx1ZTogKCkgPT4gVFZhbHVlIH0+KGZvcm1Hcm91cDogVEZvcm0sIGZpZWxkc1RvQ2hlY2tGb3I/OiAoa2V5b2YgVFZhbHVlKVtdLCByZWZyZXNoZXI/KTogYm9vbGVhbiB7XG4gICAgLy8gY29uc29sZS5sb2coJ3ZhbCcpO1xuICAgIGlmICghZm9ybUdyb3VwKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgdmFsID0gZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG4gICAgcmV0dXJuIChmaWVsZHNUb0NoZWNrRm9yPy5sZW5ndGggPyBmaWVsZHNUb0NoZWNrRm9yIDogT2JqZWN0LmtleXModmFsKSkuc29tZSgoeCkgPT4gdmFsW3hdICE9IG51bGwpO1xuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ29iamVjdFRvTGFiZWxzJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgT2JqZWN0VG9MYWJlbHNQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIG9iamVjdCB0byBhbiBhcnJheSBvZiBsYWJlbHNcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqIEBwYXJhbSBjdXN0b21GaWVsZE1hcFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgdHJhbnNmb3JtPFQ+KHZhbHVlOiBULCBjdXN0b21GaWVsZE1hcD86IHsgW2sgaW4ga2V5b2YgVF06IFBhcnRpYWw8SVRleHRDYXNlMj4gfSwgZXhjbHVzaW9uTGlzdD86IHsgW3g6IHN0cmluZ106IGJvb2xlYW4gfSk6IElUZXh0Q2FzZTJbXSB7XG4gICAgLy8gZGVidWdnZXI7XG4gICAgY29uc3QgX2V4Y2x1c2lvbkxpc3Q6IHsgW3g6IHN0cmluZ106IGJvb2xlYW4gfSA9IHtcbiAgICAgIGlkOiB0cnVlLFxuICAgICAgLi4uZXhjbHVzaW9uTGlzdCxcbiAgICB9O1xuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHZhbHVlIHx8IHt9KVxuICAgICAgLmZpbHRlcigoeCkgPT4gIV9leGNsdXNpb25MaXN0W3hdKVxuICAgICAgLm1hcCgoZikgPT4gKHtcbiAgICAgICAgLi4uY3VzdG9tRmllbGRNYXA/LltmXSxcbiAgICAgICAgbGFiZWw6IGN1c3RvbUZpZWxkTWFwPy5bZl0/LmxhYmVsIHx8IHRoaXMudVMuZm9ybWF0RmllbGQoZiksXG4gICAgICAgIHZhbHVlOiB2YWx1ZVtmXSxcbiAgICAgIH0pKTtcbiAgfVxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdVM6IFV0aWxpdHlTZXJ2aWNlKSB7fVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdnZXRWYWx1ZUxhYmVsJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgR2V0VmFsdWVMYWJlbCBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAvKipcbiAgICogQ29udmVydHMgYSBzdHJpbmcgaW50byBhIFNlbGVjdCBvcHRpb25cbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yIGluIHRoZSBvcHRpb25zIGxpc3RcbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIGxpc3Qgb2YgaXRlbXMgdG8gc2VhcmNoIGluXG4gICAqIEBwYXJhbSBsYWJlbEZpZWxkIFRoZSBmaWVsZCB0aGF0IGhvbGRzIHRoZSBkZXNjcmlwdGlvbiBmaWVsZFxuICAgKiBAcGFyYW0gdmFsdWVGaWVsZCBUaGUgZmllbGQgdGhhdCBob2xkcyB0aGUgdmFsdWUgZmllbGRcbiAgICogQHJldHVybnMgQSBjb25jYXRlbmF0aW9uIG9mIHRoZSB2YWx1ZSBhbmQgZGVzY3JpcHRpb24gKHZhbHVlIC0gZGVzY3JpcHRpb24pXG4gICAqL1xuICB0cmFuc2Zvcm0odmFsdWU6IHN0cmluZywgb3B0aW9uczogYW55W10sIGxhYmVsRmllbGQgPSAnZGVzY3JpcHRpb24nLCB2YWx1ZUZpZWxkID0gJ2NvZGUnKTogc3RyaW5nIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gJyc7XG4gICAgaWYgKCFvcHRpb25zKSByZXR1cm4gdmFsdWU7XG4gICAgY29uc3QgaXRlbSA9IG9wdGlvbnMuZmluZCgoeCkgPT4geFt2YWx1ZUZpZWxkXSA9PSB2YWx1ZSk7XG4gICAgaWYgKCFpdGVtKSByZXR1cm4gdmFsdWU7XG4gICAgcmV0dXJuIHZhbHVlICsgJyAtICcgKyBpdGVtW2xhYmVsRmllbGRdIHx8IGl0ZW1bJ3RpdGxlJ107XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAndmFsdWVGb3JtYXR0ZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBWYWx1ZUZvcm1hdHRlclBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgYXN5bmMgdHJhbnNmb3JtPFQsIFIgPSBzdHJpbmc+KHZhbDogVCwgZm9ybWF0dGVyOiAodmFsdWU6IFQpID0+IFIgfCBQcm9taXNlPFI+IHwgT2JzZXJ2YWJsZTxSPikge1xuICAgIHJldHVybiBmb3JtYXR0ZXIgPyBmb3JtYXR0ZXIodmFsKSA6IHZhbDtcbiAgfVxufVxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmNsYXNzIENGdW5jdGlvbkNhbGxlciB7XG4gIC8vIHRyYW5zZm9ybTxULCBQPihmdW5jOiAoLi4uYXJnczogUFtdKSA9PiBULCAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBmdW5jPikge1xuICAvLyAgIHJldHVybiBmdW5jID8gZnVuYyguLi5hcmdzKSA6IG51bGw7XG4gIC8vIH1cblxuICAvKipcbiAgICogQ2FsbHMgYSBmdW5jdGlvbiBpbiB0aGUgdGVtcGxhdGVcbiAgICogQHBhcmFtIGZ1bmMgRnVuY3Rpb24gdG8gYmUgY2FsbGVkXG4gICAqIEBwYXJhbSBhcmdzXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICB0cmFuc2Zvcm08VD4oZnVuYzogKCkgPT4gVCk6IFQ7XG4gIHRyYW5zZm9ybTxULCBQMT4oZnVuYzogKHBhcmFtMT86IFAxKSA9PiBULCBwYXJhbTE6IFAxKTogVDtcbiAgdHJhbnNmb3JtPFQsIFAxLCBQMj4oZnVuYzogKHBhcmFtMT86IFAxLCBwYXJhbTI/OiBQMikgPT4gVCwgcGFyYW0xOiBQMSwgcGFyYW0yOiBQMik6IFQ7XG4gIHRyYW5zZm9ybTxULCBQMSwgUDIsIFAzPihmdW5jOiAocGFyYW0xPzogUDEsIHBhcmFtMj86IFAyLCBwYXJhbTM/OiBQMykgPT4gVCwgcGFyYW0xOiBQMSwgcGFyYW0yOiBQMiwgcGFyYW0zOiBQMyk6IFQ7XG4gIHRyYW5zZm9ybTxULCBQMSwgUDIsIFAzPihmdW5jOiAocGFyYW0xPzogUDEsIHBhcmFtMj86IFAyLCBwYXJhbTM/OiBQMykgPT4gVCwgcGFyYW0xPzogUDEsIHBhcmFtMj86IFAyLCBwYXJhbTM/OiBQMykge1xuICAgIHJldHVybiBmdW5jID8gZnVuYyhwYXJhbTEsIHBhcmFtMiwgcGFyYW0zKSA6IG51bGw7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnZnVuY3Rpb25DYWxsZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBGdW5jdGlvbkNhbGxlciBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAvLyAvKipcbiAgLy8gICogQ2FsbHMgYSBmdW5jdGlvbiBpbiB0aGUgdGVtcGxhdGVcbiAgLy8gICogQHBhcmFtIGZ1bmMgRnVuY3Rpb24gdG8gYmUgY2FsbGVkXG4gIC8vICAqIEBwYXJhbSBhcmdzXG4gIC8vICAqIEByZXR1cm5zXG4gIC8vICAqL1xuICAvLyB0cmFuc2Zvcm08VD4oZnVuYzogKCkgPT4gVCk6IFQ7XG4gIC8vIHRyYW5zZm9ybTxULCBQMT4oZnVuYzogKHBhcmFtMT86IFAxKSA9PiBULCBwYXJhbTE6IFAxKTogVDtcbiAgLy8gdHJhbnNmb3JtPFQsIFAxLCBQMj4oZnVuYzogKHBhcmFtMT86IFAxLCBwYXJhbTI/OiBQMikgPT4gVCwgcGFyYW0xOiBQMSwgcGFyYW0yOiBQMik6IFQ7XG4gIC8vIHRyYW5zZm9ybTxULCBQMSwgUDIsIFAzPihcbiAgLy8gICBmdW5jOiAocGFyYW0xPzogUDEsIHBhcmFtMj86IFAyLCBwYXJhbTM/OiBQMykgPT4gVCxcbiAgLy8gICBwYXJhbTE6IFAxLFxuICAvLyAgIHBhcmFtMjogUDIsXG4gIC8vICAgcGFyYW0zOiBQM1xuICAvLyApOiBUO1xuICAvLyB0cmFuc2Zvcm08VCwgUDEsIFAyLCBQMz4oXG4gIC8vICAgZnVuYzogKHBhcmFtMT86IFAxLCBwYXJhbTI/OiBQMiwgcGFyYW0zPzogUDMpID0+IFQsXG4gIC8vICAgcGFyYW0xPzogUDEsXG4gIC8vICAgcGFyYW0yPzogUDIsXG4gIC8vICAgcGFyYW0zPzogUDNcbiAgLy8gKSB7XG4gIC8vIC8vIHRyYW5zZm9ybTxULCBQPihmdW5jOiAoLi4uYXJnczogUFtdKSA9PiBULCAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBmdW5jPikge1xuICAvLyAgIHJldHVybiBmdW5jID8gZnVuYyguLi5hcmdzKSA6IG51bGw7XG4gIC8vIH1cbiAgLy8gY29uc3RydWN0b3IoKSB7XG4gIC8vICAgY29uc3QgZiA9IChhOiBzdHJpbmcsIGI6bnVtYmVyKSA9PiB7fTtcbiAgLy8gICB0aGlzLnRyYW5zZm9ybShmLCAgeyBkOjQ0IH0sJ2RkZCcsKTtcbiAgLy8gfVxuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBmOiBDRnVuY3Rpb25DYWxsZXIpIHtcbiAgICAvLyBjb25zdCBmcyA9ICggKSA9PiB7fTtcbiAgICAvLyB0aGlzLnRyYW5zZm9ybShmcyk7XG4gIH1cbiAgdHJhbnNmb3JtID0gdGhpcy5mLnRyYW5zZm9ybTtcbn1cbkBQaXBlKHtcbiAgbmFtZTogJ2Z1bmN0aW9uQ2FsbGVyMScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEZ1bmN0aW9uQ2FsbGVyMSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgZjogQ0Z1bmN0aW9uQ2FsbGVyKSB7fVxuICB0cmFuc2Zvcm0gPSB0aGlzLmYudHJhbnNmb3JtO1xufVxuQFBpcGUoe1xuICBuYW1lOiAnZnVuY3Rpb25DYWxsZXIyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgRnVuY3Rpb25DYWxsZXIyIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBmOiBDRnVuY3Rpb25DYWxsZXIpIHt9XG4gIHRyYW5zZm9ybSA9IHRoaXMuZi50cmFuc2Zvcm07XG59XG5AUGlwZSh7XG4gIG5hbWU6ICdmdW5jdGlvbkNhbGxlcjMnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBGdW5jdGlvbkNhbGxlcjMgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgY29uc3RydWN0b3IocHVibGljIGY6IENGdW5jdGlvbkNhbGxlcikge31cbiAgdHJhbnNmb3JtID0gdGhpcy5mLnRyYW5zZm9ybTtcbn1cbkBQaXBlKHtcbiAgbmFtZTogJ2h0dHBMaXN0Q2FsbGVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgSHR0cExpc3RDYWxsZXIgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgLy8gdHJhbnNmb3JtPFQ+KGh0dHBPYnNlcnZhYmxlOiBhbnkpIHtcbiAgdHJhbnNmb3JtPFQ+KGh0dHBPYnNlcnZhYmxlOiAoKSA9PiBPYnNlcnZhYmxlPFQ+KSB7XG4gICAgLy8gY29uc29sZS5sb2coJ3JhbiBmdW5jdGlvbkNhbGxlcicsIGh0dHBPYnNlcnZhYmxlKTtcbiAgICByZXR1cm4gaHR0cE9ic2VydmFibGUoKTtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdodHRwTGlzdENhbGxlcjEnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBIdHRwTGlzdENhbGxlcjEgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtPFQ+KGh0dHBPYnNlcnZhYmxlOiAocGFyYW06IGFueSkgPT4gT2JzZXJ2YWJsZTxUPiwgcGFyYW06IGFueSkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdyYW4gZnVuY3Rpb25DYWxsZXIxJywgaHR0cE9ic2VydmFibGUpO1xuICAgIHJldHVybiBodHRwT2JzZXJ2YWJsZShwYXJhbSk7XG4gICAgLy8gcmV0dXJuIHBhcmFtID8gaHR0cE9ic2VydmFibGUocGFyYW0pIDogbnVsbDtcbiAgfVxufVxuQFBpcGUoe1xuICBuYW1lOiAnaHR0cExpc3RDYWxsZXIyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgSHR0cExpc3RDYWxsZXIyIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybTxUPihodHRwT2JzZXJ2YWJsZTogKHBhcmFtMTogc3RyaW5nLCBwYXJhbTI6IHN0cmluZykgPT4gT2JzZXJ2YWJsZTxUPiwgcGFyYW0xOiBzdHJpbmcsIHBhcmFtMjogc3RyaW5nKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ3JhbiBodHRwTGlzdENhbGxlcjInLCBodHRwT2JzZXJ2YWJsZSk7XG4gICAgcmV0dXJuIGh0dHBPYnNlcnZhYmxlKHBhcmFtMSwgcGFyYW0yKTtcbiAgICAvLyByZXR1cm4gcGFyYW0xID8gKHBhcmFtMiA/IGh0dHBPYnNlcnZhYmxlKHBhcmFtMSwgcGFyYW0yKSA6IG51bGwpIDogbnVsbDtcbiAgfVxufVxuQFBpcGUoe1xuICBuYW1lOiAnaXNTaG93UGFnZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIElzU2hvd1BhZ2UgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtKHR5cGU6IEVQYWdlVHlwZSkge1xuICAgIHJldHVybiB0eXBlID09IEVQYWdlVHlwZS5zaG93UGFnZSA/IHRydWUgOiBmYWxzZTtcbiAgfVxufVxuQFBpcGUoe1xuICBuYW1lOiAnaXNDbG9uZVBhZ2UnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBJc0Nsb25lUGFnZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0odHlwZTogRVBhZ2VUeXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgPT0gRVBhZ2VUeXBlLmNsb25lUGFnZSA/IHRydWUgOiBudWxsO1xuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2ZpbHRlckFycmF5JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyQXJyYXlQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gYXJyIEFycmF5IG9mIGl0ZW1zIHRvIGZpbHRlclxuICAgKiBAcGFyYW0gdmFsdWUgRmlsdGVyIHZhbHVlXG4gICAqIEBwYXJhbSBmaWx0ZXJGdW5jdGlvbiBGaWx0ZXIgZnVuY3Rpb24gdG8gcGFzcyBpbiBpdGVyYXRvclxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgdHJhbnNmb3JtPFQgZXh0ZW5kcyB7IFt4OiBzdHJpbmddOiBhbnkgfT4oXG4gICAgYXJyOiBUW10sXG4gICAgdmFsdWU6IHsgW3ggaW4ga2V5b2YgUGFydGlhbDxUPl06IGFueSB9LFxuICAgIGZpbHRlckZ1bmN0aW9uPzogKHZhbHVlOiBULCBpbmRleD86IG51bWJlciwgYXJyYXk/OiBUW10pID0+IGJvb2xlYW4sXG4gICkge1xuICAgIC8vIHJldHVybiB0aGlzLnVTLnRpbWVDb2RlQmxvY2soJ2lubGluZSBjb21wYXJpc29uJywgKCkgPT4ge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8ICFPYmplY3QudmFsdWVzKHZhbHVlKS5maWx0ZXIoKHgpID0+IHgpLmxlbmd0aCB8fCAhYXJyIHx8ICFhcnIubGVuZ3RoKSByZXR1cm4gYXJyO1xuICAgIC8vIGRlYnVnZ2VyO1xuICAgIGlmIChmaWx0ZXJGdW5jdGlvbikgcmV0dXJuIGFyci5maWx0ZXIoZmlsdGVyRnVuY3Rpb24pO1xuXG4gICAgLy8jcmVnaW9uIGhhbmRsZSBmaWx0ZXIgdmFsdWVcbiAgICBjb25zdCB2YWx1ZU1hcDoge1xuICAgICAga2V5OiBzdHJpbmc7XG4gICAgICB2YWx1ZTogc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlcjtcbiAgICAgIHR5cGU6IFR5cGVPZjtcbiAgICB9W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB2YWx1ZSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSAmJiB2YWx1ZVtrZXldICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgdmFsID0geyBrZXksIHZhbHVlOiB2YWx1ZVtrZXldLCB0eXBlOiB0eXBlb2YgdmFsdWVba2V5XSB9O1xuICAgICAgICBpZiAodmFsLnR5cGUgPT0gJ2Z1bmN0aW9uJyB8fCB2YWwudHlwZSA9PSAnb2JqZWN0JykgY29udGludWU7XG4gICAgICAgIGlmICh2YWwudHlwZSA9PSAnc3RyaW5nJykgdmFsLnZhbHVlID0gKHZhbC52YWx1ZSBhcyBzdHJpbmcpPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB2YWx1ZU1hcC5wdXNoKHZhbCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgY29uc3QgcmVzID0gYXJyLmZpbHRlcigoeCkgPT4ge1xuICAgICAgY29uc3QgZm9ybUdvcnVwVmFsdWUgPSB4O1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgdmFsdWVNYXApIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChrZXkudHlwZSA9PSAnc3RyaW5nJyAmJiAoZm9ybUdvcnVwVmFsdWVba2V5LmtleV0gYXMgc3RyaW5nKT8udG9Mb3dlckNhc2UoKT8uaW5jbHVkZXMoa2V5LnZhbHVlIGFzIHN0cmluZykpIHx8XG4gICAgICAgICAgZm9ybUdvcnVwVmFsdWVba2V5LmtleV0gPT0ga2V5LnZhbHVlXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgICAvLyBjb25zb2xlLmxvZyhyZXMpXG4gICAgcmV0dXJuIHJlcztcbiAgICAvLyB9KTtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdmaWx0ZXJGb3JtQXJyYXlHcm91cCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEZpbHRlckZvcm1BcnJheUdyb3VwUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGFyciBBcnJheSBvZiBGb3JtR3JvdXBzIHRvIGZpbHRlclxuICAgKiBAcGFyYW0gcXVlcnlPYmplY3QgRmlsdGVyIHZhbHVlXG4gICAqIEBwYXJhbSBmaWx0ZXJGdW5jdGlvbiBGaWx0ZXIgZnVuY3Rpb24gdG8gcGFzcyBpbiBpdGVyYXRvclxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgdHJhbnNmb3JtPFRHcm91cCBleHRlbmRzIEZvcm1Hcm91cD4oXG4gICAgYXJyOiBUR3JvdXBbXSxcbiAgICBxdWVyeU9iamVjdDogeyBbeDogc3RyaW5nXTogc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlciB9LFxuICAgIGZpbHRlckZ1bmN0aW9uPzogKHZhbHVlOiBUR3JvdXAsIGluZGV4PzogbnVtYmVyLCBhcnJheT86IFRHcm91cFtdKSA9PiBib29sZWFuLFxuICApIHtcbiAgICAvLyByZXR1cm4gdGhpcy51Uy50aW1lQ29kZUJsb2NrKCdpbmxpbmUgY29tcGFyaXNvbicsICgpID0+IHtcbiAgICBpZiAocXVlcnlPYmplY3QgPT0gbnVsbCB8fCAhT2JqZWN0LnZhbHVlcyhxdWVyeU9iamVjdCkuZmlsdGVyKCh4KSA9PiB4KS5sZW5ndGggfHwgIWFyciB8fCAhYXJyLmxlbmd0aClcbiAgICAgIHJldHVybiBhcnI7XG4gICAgLy8gZGVidWdnZXI7XG4gICAgaWYgKGZpbHRlckZ1bmN0aW9uKSByZXR1cm4gYXJyLmZpbHRlcihmaWx0ZXJGdW5jdGlvbik7XG5cbiAgICBjb25zdCB2YWx1ZU1hcDoge1xuICAgICAga2V5OiBzdHJpbmc7XG4gICAgICB2YWx1ZTogc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlcjtcbiAgICAgIHR5cGU6IFR5cGVPZjtcbiAgICB9W10gPSB0aGlzLnF1ZXJ5TWFwcGVyKHF1ZXJ5T2JqZWN0KTtcblxuICAgIGNvbnN0IHJlcyA9IGFyci5maWx0ZXIodGhpcy5maWx0ZXJGdW5jKHZhbHVlTWFwKSk7XG4gICAgLy8gY29uc29sZS5sb2cocmVzKVxuICAgIHJldHVybiByZXM7XG4gICAgLy8gfSk7XG4gIH1cbiAgcXVlcnlNYXBwZXIgPSAocXVlcnk6IElPYmplY3RMaXRlcmFsKSA9PiB7XG4gICAgaWYgKHF1ZXJ5ID09IG51bGwgfHwgIU9iamVjdC52YWx1ZXMocXVlcnkpLmZpbHRlcigoeCkgPT4geCkubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBxdWVyeU9iamVjdDoge1xuICAgICAga2V5OiBzdHJpbmc7XG4gICAgICB2YWx1ZTogc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlcjtcbiAgICAgIHR5cGU6IFR5cGVPZjtcbiAgICB9W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBxdWVyeSlcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocXVlcnksIGtleSkgJiYgcXVlcnlba2V5XSAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHsga2V5LCB2YWx1ZTogcXVlcnlba2V5XSwgdHlwZTogdHlwZW9mIHF1ZXJ5W2tleV0gfTtcbiAgICAgICAgaWYgKHZhbC50eXBlID09ICdmdW5jdGlvbicgfHwgdmFsLnR5cGUgPT0gJ29iamVjdCcpIGNvbnRpbnVlO1xuICAgICAgICBpZiAodmFsLnR5cGUgPT0gJ3N0cmluZycpIHZhbC52YWx1ZSA9ICh2YWwudmFsdWUgYXMgc3RyaW5nKT8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcXVlcnlPYmplY3QucHVzaCh2YWwpO1xuICAgICAgfVxuICAgIHJldHVybiBxdWVyeU9iamVjdDtcbiAgfTtcblxuICBmaWx0ZXJGdW5jID1cbiAgICAoXG4gICAgICBxdWVyeU9iamVjdDoge1xuICAgICAgICBrZXk6IHN0cmluZztcbiAgICAgICAgdmFsdWU6IHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXI7XG4gICAgICAgIHR5cGU6IFR5cGVPZjtcbiAgICAgIH1bXSxcbiAgICApID0+XG4gICAgPFRHcm91cCBleHRlbmRzIEZvcm1Hcm91cD4oZ3JvdXA6IFRHcm91cCk6IGJvb2xlYW4gPT4ge1xuICAgICAgY29uc3QgZm9ybUdvcnVwVmFsdWUgPSBncm91cC5nZXRSYXdWYWx1ZSgpO1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgcXVlcnlPYmplY3QgfHwgW10pIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChrZXkudHlwZSA9PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgKGZvcm1Hb3J1cFZhbHVlW2tleS5rZXldIGFzIHN0cmluZyk/LnRvTG93ZXJDYXNlKCk/LmluY2x1ZGVzKGtleS52YWx1ZSBhcyBzdHJpbmcpKSB8fFxuICAgICAgICAgIGZvcm1Hb3J1cFZhbHVlW2tleS5rZXldID09IGtleS52YWx1ZVxuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnZmlsdGVyRm9ybUFycmF5Q29udHJvbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEZpbHRlckZvcm1BcnJheUNvbnRyb2xQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gYXJyIEFycmF5IG9mIEZvcm1Hcm91cHMgdG8gZmlsdGVyXG4gICAqIEBwYXJhbSB2YWx1ZSBGaWx0ZXIgdmFsdWVcbiAgICogQHJldHVybnNcbiAgICovXG4gIHRyYW5zZm9ybTxUQ29udHJvbCBleHRlbmRzIEFic3RyYWN0Q29udHJvbDxhbnk+ID0gYW55PihhcnI6IFRDb250cm9sW10sIHZhbHVlOiBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyKSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwgfHwgIWFyciB8fCAhYXJyLmxlbmd0aCkgcmV0dXJuIGFycjtcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICByZXR1cm4gYXJyLmZpbHRlcigoeCkgPT4geC52YWx1ZSA9PSB2YWx1ZSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdVM6IFV0aWxpdHlTZXJ2aWNlKSB7fVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdzb3J0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgU29ydFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBhcnJcbiAgICogQHBhcmFtIGRpcmVjdGlvbiAwIC0gYXNjZW5kaW5nIG9yZGVyLiAxIC0gZGVzY2VuZGluZyBvcmRlclxuICAgKiBAcGFyYW0gc29ydEZpZWxkXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICB0cmFuc2Zvcm08VD4oYXJyOiBUW10sIGRpcmVjdGlvbjogMCB8IDEgPSAwLCBzb3J0RmllbGQ/OiBrZXlvZiBUKSB7XG4gICAgLy8gICAgY29uc29sZS5sb2coJ1NPUlRURVInLCBhcnIsIGRpcmVjdGlvbiwgc29ydEZpZWxkKTtcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICBpZiAoIWFycikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChkaXJlY3Rpb24gPiAtMSAmJiBkaXJlY3Rpb24gPCAyKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb3J0KGFyciwgZGlyZWN0aW9uLCBzb3J0RmllbGQgYXMgYW55KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGFycjtcbiAgICB9XG4gIH1cbiAgc29ydDxUPihhcnI6IFRbXSwgZGlyZWN0aW9uOiAwIHwgMSwgc29ydEZpZWxkPzogc3RyaW5nKSB7XG4gICAgaWYgKHNvcnRGaWVsZCkge1xuICAgICAgcmV0dXJuIGFyci5zb3J0Myhzb3J0RmllbGQgYXMgYW55LCBkaXJlY3Rpb24gPyB0cnVlIDogZmFsc2UpIGFzIFRbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGFyci5zb3J0KCh4OiBhbnksIHk6IGFueSkgPT4gKGRpcmVjdGlvbiA/IHkgLSB4IDogeCAtIHkpKTtcbiAgICB9XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAncmVmcmVzaGVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgUmVmcmVzaGVyUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAvKipcbiAgICogUmV0dXJucyBhIHZhbHVlIHdoZW4gdGhlIHJlZnJlc2hlciB2YWx1ZSBjaGFuZ2VzXG4gICAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSB0byBiZSByZXR1cm5lZFxuICAgKiBAcGFyYW0gcmVmcmVzaGVyIFJlZnJlc2hlciB2YWx1ZSBmb3IgdXBkYXRpbmcgdGhlIHZhbHVlXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICB0cmFuc2Zvcm08VD4odmFsdWU6IFQsIHJlZnJlc2hlcj86IGFueSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuQFBpcGUoe1xuICBuYW1lOiAndG9BbnknLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBUb0FueVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtKHZhbHVlOiBhbnksIGlzQXJyYXkgPSBmYWxzZSkge1xuICAgIHJldHVybiBpc0FycmF5ID8gKHZhbHVlIGFzIGFueVtdKSA6IHZhbHVlO1xuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ3RvQW55QXJyYXknLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBUb0FueUFycmF5UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0odmFsdWU6IGFueSkge1xuICAgIHJldHVybiB2YWx1ZSBhcyBhbnlbXTtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICd0cmltJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgVHJpbVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgLyoqXG4gICAqIFRyaW1zIGEgc3RyaW5nXG4gICAqIEBwYXJhbSB2YWx1ZSBTdHJpbmcgdG8gdHJpbVxuICAgKiBAcmV0dXJucyBUcmltbWVkIHN0cmluZ1xuICAgKi9cbiAgdHJhbnNmb3JtKHZhbHVlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdmFsdWU/LnRyaW0oKTtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICd0cmltVGV4dCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFRyaW1UZXh0UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAvKipcbiAgICogVHJpbXMgYSBzdHJpbmcgYmFzZWQgb24gYSBzcGVjaWZpZWQgbGVuZ3RoXG4gICAqIEBwYXJhbSB2YWx1ZSBTdHJpbmcgdG8gdHJpbVxuICAgKiBAcGFyYW0gbGVuZ3RoIExlbmd0aCB0byBiZWdpbiB0cmltbWluZ1xuICAgKiBAcmV0dXJucyBUcmltbWVkIHN0cmluZ1xuICAgKi9cbiAgdHJhbnNmb3JtKHZhbHVlOiBzdHJpbmcsIGxlbmd0aDogbnVtYmVyKSB7XG4gICAgcmV0dXJuICF2YWx1ZSB8fCBsZW5ndGggPT0gbnVsbCB8fCB2YWx1ZS5sZW5ndGggPCBsZW5ndGggPyB2YWx1ZSA6IHZhbHVlLnN1YnN0cmluZygwLCBsZW5ndGgpICsgJy4uLic7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAneE9yWScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFhPcllQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybSh4OiBzdHJpbmcsIHkgPSAnLScpIHtcbiAgICByZXR1cm4gdGhpcy51Uy54T3JZKHgsIHkpO1xuICB9XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdVM6IFV0aWxpdHlTZXJ2aWNlKSB7fVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdyZXBsYWNlQWxsJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgUmVwbGFjZUFsbFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtKHRleHQ6IHN0cmluZywgc2VhcmNoOiBzdHJpbmcsIHJlcGxhY2VtZW50OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGV4dCA/IHRleHQuc3BsaXQoc2VhcmNoKS5qb2luKHJlcGxhY2VtZW50KSA6IHRleHQ7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAndmFsdWVPclgnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBWYWx1ZU9yWFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBWYXJpYWJsZSB0aGF0IGhvbGRzIHRoZSB2YWx1ZSB0byBiZSBjaGVja2VkIGZvciBlbXB0aW5lc3NcbiAgICogQHBhcmFtIHJlcGxhY2VtZW50IFRoaXMgaXMgdGhlIHZhbHVlIHRoYXQgd2lsbCBiZSBzZXQgaWYgdGhlIHN1YmplY3QgZmllbGQgaXMgZW1wdHlcbiAgICogQHJldHVybnMgUmV0dXJuIHRoZSB2YWx1ZSBvciB0aGUgcmVwbGFjZW1lbnQgdmFsdWUgaWYgdmFsdWUgaXMgZW1wdHlcbiAgICovXG4gIHRyYW5zZm9ybTxUPih2YWx1ZTogVCwgcmVwbGFjZW1lbnQ6IHN0cmluZyA9ICctJykge1xuICAgIC8vIGNvbnNvbGUubG9nKHZhbHVlKVxuICAgIHJldHVybiB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09IHVuZGVmaW5lZCA/IHJlcGxhY2VtZW50IDogdmFsdWU7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnc3RyQ29uY2F0ZW5hdG9yJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgU3RyQ29uY2F0ZW5hdG9yUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm08VD4odGV4dDE/OiBzdHJpbmcgfCBudWxsLCB0ZXh0Mj86IHN0cmluZyB8IG51bGwsIGpvaW5lcjogc3RyaW5nID0gJyAtICcpIHtcbiAgICByZXR1cm4gRVZGdW5jdGlvbnMuc3RyQ29uY2F0ZW5hdG9yMih0ZXh0MSwgdGV4dDIsIGpvaW5lcik7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnZm9ybVZhbHVlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybVZhbHVlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0oZm9ybVZhbHVlLCBmb3JtU2NoZW1hPzogSUZvcm1TY2hlbWFbXSk6IHN0cmluZztcbiAgdHJhbnNmb3JtPFQ+KGZvcm1WYWx1ZTogVCwgZm9ybVNjaGVtYT86IChrZXlvZiBUKVtdKTogc3RyaW5nO1xuICB0cmFuc2Zvcm08VD4oZm9ybVZhbHVlOiBULCBmb3JtU2NoZW1hPzogKElGb3JtU2NoZW1hIHwga2V5b2YgVClbXSk6IHN0cmluZyB7XG4gICAgLy8gZGVidWdnZXI7XG4gICAgcmV0dXJuIGZvcm1WYWx1ZVxuICAgICAgPyAoZm9ybVNjaGVtYT8ubGVuZ3RoICYmIHR5cGVvZiBmb3JtU2NoZW1hWzBdICE9ICdzdHJpbmcnXG4gICAgICAgICAgPyBmb3JtU2NoZW1hLm1hcCgoZmllbGQ6IElGb3JtU2NoZW1hKSA9PiB7XG4gICAgICAgICAgICAgIC8vIGRlYnVnZ2VyO1xuICAgICAgICAgICAgICBjb25zdCB2YWwgPVxuICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPT0gJ3NlbGVjdCcgfHwgZmllbGQudHlwZSA9PSAnYXV0b2NvbXBsZXRlJyA/IGZpZWxkLnNlbGVjdGVkT3B0aW9uTGFiZWwgfHwgZm9ybVZhbHVlW2ZpZWxkLmZpZWxkXSA6IGZvcm1WYWx1ZVtmaWVsZC5maWVsZF07XG4gICAgICAgICAgICAgIHJldHVybiB2YWwgIT0gbnVsbCA/IGAke2ZpZWxkLmxhYmVsfTogJHt2YWx9YCA6IG51bGw7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogKGZvcm1TY2hlbWEgfHwgT2JqZWN0LmtleXMoZm9ybVZhbHVlKSkubWFwKCh4KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbCA9IGZvcm1WYWx1ZVt4XTtcbiAgICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMudVMuZm9ybWF0RmllbGQoeCl9OiAke3ZhbCAhPSBudWxsID8gdmFsIDogJy0nfWA7XG4gICAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgICAgLmZpbHRlcigoeCkgPT4geClcbiAgICAgICAgICAuam9pbignXFxuJylcbiAgICAgIDogJyc7XG4gIH1cbiAgY29uc3RydWN0b3IocHVibGljIHVTOiBVdGlsaXR5U2VydmljZSkge31cbn1cbkBQaXBlKHtcbiAgbmFtZTogJ2ZpZWxkVG9MYWJlbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEZpZWxkVG9MYWJlbFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtKGZpZWxkTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICByZXR1cm4gdGhpcy51Uy5mb3JtYXRGaWVsZChmaWVsZE5hbWUpO1xuICB9XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB1UzogVXRpbGl0eVNlcnZpY2UpIHt9XG59XG5cbkBQaXBlKHsgbmFtZTogJ3R5cGVyJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIFR5cGVyUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm08VD4odmFsdWU6IGFueSwgc2FtcGxlOiBUKSB7XG4gICAgcmV0dXJuIHZhbHVlIGFzIFQ7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnZmlsdGVyQXJyYXlCeVN0cmluZycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEZpbHRlckFycmF5QnlTdHJpbmdQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIC8qKlxuICAgKiBGaWx0ZXIgYXJyYXkgdXNpbmcgYSBwaXBlXG4gICAqIEBwYXJhbSBhcnIgQXJyYXkgdG8gZmlsdGVyXG4gICAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSB0byBmaWx0ZXIgZm9yXG4gICAqIEBwYXJhbSBrZXlzIEZpZWxkcyB0byBjaGVjayBmb3IgbWF0Y2ggaW5cbiAgICogQHBhcmFtIGZpbHRlckZ1bmN0aW9uIEZpdGxlciBmdW5jdGlvbiB0byB1c2UgaW5zdGVhZCBvZiB2YWx1ZSBhbmQga2V5c1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgdHJhbnNmb3JtPFQ+KGFycjogVFtdLCB2YWx1ZTogc3RyaW5nLCBrZXlzOiAoa2V5b2YgVClbXSwgZmlsdGVyRnVuY3Rpb24/OiAodmFsdWU6IFQsIGluZGV4PzogbnVtYmVyLCBhcnJheT86IFRbXSkgPT4gYm9vbGVhbikge1xuICAgIGlmICghYXJyKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGlmICghdmFsdWUpIHJldHVybiBhcnI7XG4gICAgaWYgKGZpbHRlckZ1bmN0aW9uKSByZXR1cm4gYXJyLmZpbHRlcihmaWx0ZXJGdW5jdGlvbik7XG4gICAgZWxzZSB7XG4gICAgICAvLyBkZWJ1Z2dlcjtcbiAgICAgIGNvbnN0IHZsID0gdmFsdWU/LnRvU3RyaW5nKCk/LnRyaW0oKT8udG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IHJldDogVFtdID0gW107XG4gICAgICBjb25zdCBhZGRlZE1hcDogeyBbaWQ6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xuICAgICAgY29uc3QgaWRGaWVsZCA9IGtleXNbMF0gYXMgc3RyaW5nO1xuICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXJyKSB7XG4gICAgICAgICAgaWYgKGFkZGVkTWFwW2l0ZW1baWRGaWVsZF1dKSBjb250aW51ZTtcbiAgICAgICAgICBpZiAoKDxzdHJpbmc+aXRlbVtrZXldKT8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKT8uc3RhcnRzV2l0aCh2bCkpIHtcbiAgICAgICAgICAgIHJldC5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgYWRkZWRNYXBbaXRlbVtpZEZpZWxkXV0gPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXJyKSB7XG4gICAgICAgICAgaWYgKGFkZGVkTWFwW2l0ZW1baWRGaWVsZF1dKSBjb250aW51ZTtcbiAgICAgICAgICBpZiAoKDxzdHJpbmc+aXRlbVtrZXldKT8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKT8uaW5jbHVkZXModmwpKSB7XG4gICAgICAgICAgICByZXQucHVzaChpdGVtKTtcbiAgICAgICAgICAgIGFkZGVkTWFwW2l0ZW1baWRGaWVsZF1dID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnNvbGUubG9nKCdmaWx0ZXIgcmVzdWx0JywgcmV0KTtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICB9XG59XG5cbkBQaXBlKHsgbmFtZTogJ3JlbW92ZVVzZWRPcHRpb25zJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIFJlbW92ZVVzZWRPcHRpb25zUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm08VE9wdGlvbiwgVEZvcm1BcnJheT4oXG4gICAgYXJyOiBUT3B0aW9uW10sXG4gICAgZm9ybUFycmF5OiBURm9ybUFycmF5W10sXG4gICAgZm9ybTogVEZvcm1BcnJheSxcbiAgICBhcnJGaWVsZE5hbWU/OiBrZXlvZiBUT3B0aW9uLFxuICAgIGZvcm1GaWVsZE5hbWU/OiBrZXlvZiBURm9ybUFycmF5LFxuICApOiBUT3B0aW9uW10ge1xuICAgIGlmICghYXJyPy5sZW5ndGggfHwgIWZvcm1BcnJheT8ubGVuZ3RoKSByZXR1cm4gW107XG4gICAgaWYgKGFyckZpZWxkTmFtZSAmJiBmb3JtRmllbGROYW1lKVxuICAgICAgcmV0dXJuIGFyci5maWx0ZXIoXG4gICAgICAgICh4KSA9PiAhZm9ybUFycmF5LnNvbWUoKGYpID0+IGZvcm1bZm9ybUZpZWxkTmFtZV0gIT0gKHhbYXJyRmllbGROYW1lXSBhcyBhbnkpICYmIGZbZm9ybUZpZWxkTmFtZV0gPT0gKHhbYXJyRmllbGROYW1lXSBhcyBhbnkpKSxcbiAgICAgICk7XG4gICAgZWxzZSBpZiAoYXJyRmllbGROYW1lICYmICFmb3JtRmllbGROYW1lKSByZXR1cm4gYXJyLmZpbHRlcigoeCkgPT4gIWZvcm1BcnJheS5zb21lKChmKSA9PiBmID09ICh4W2FyckZpZWxkTmFtZV0gYXMgYW55KSkpO1xuICAgIGVsc2UgaWYgKCFhcnJGaWVsZE5hbWUgJiYgZm9ybUZpZWxkTmFtZSkgcmV0dXJuIGFyci5maWx0ZXIoKHgpID0+ICFmb3JtQXJyYXkuc29tZSgoZikgPT4gZltmb3JtRmllbGROYW1lXSA9PSAoeCBhcyBhbnkpKSk7XG4gICAgZWxzZSByZXR1cm4gYXJyLmZpbHRlcigoeCkgPT4gZm9ybUFycmF5LnNvbWUoKGYpID0+IGYgPT0gKHggYXMgYW55KSkpO1xuICB9XG59XG5cbkBQaXBlKHsgbmFtZTogJ3JlbW92ZVVzZWRPcHRpb25zUmVhY3RpdmUnLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgUmVtb3ZlVXNlZE9wdGlvbnNSZWFjdGl2ZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtPFRPcHRpb24sIFRGb3JtQXJyYXkgZXh0ZW5kcyB7IHZhbHVlPzogYW55IH1bXT4oXG4gICAgYXJyOiBUT3B0aW9uW10sXG4gICAgZm9ybUFycmF5OiBURm9ybUFycmF5W10sXG4gICAgZm9ybTogVEZvcm1BcnJheSxcbiAgICBhcnJGaWVsZE5hbWU/OiBrZXlvZiBUT3B0aW9uLFxuICAgIGZvcm1GaWVsZE5hbWU/OiBrZXlvZiBURm9ybUFycmF5LFxuICApOiBUT3B0aW9uW10ge1xuICAgIGlmICghYXJyPy5sZW5ndGggfHwgIWZvcm1BcnJheT8ubGVuZ3RoKSByZXR1cm4gW107XG4gICAgaWYgKGFyckZpZWxkTmFtZSAmJiBmb3JtRmllbGROYW1lKVxuICAgICAgcmV0dXJuIGFyci5maWx0ZXIoXG4gICAgICAgICh4KSA9PiAhZm9ybUFycmF5LnNvbWUoKGYpID0+IGZvcm1bZm9ybUZpZWxkTmFtZV0gIT0gKHhbYXJyRmllbGROYW1lXSBhcyBhbnkpICYmIGZbZm9ybUZpZWxkTmFtZV0gPT0gKHhbYXJyRmllbGROYW1lXSBhcyBhbnkpKSxcbiAgICAgICk7XG4gICAgZWxzZSBpZiAoYXJyRmllbGROYW1lICYmICFmb3JtRmllbGROYW1lKSByZXR1cm4gYXJyLmZpbHRlcigoeCkgPT4gIWZvcm1BcnJheS5zb21lKChmKSA9PiBmID09ICh4W2FyckZpZWxkTmFtZV0gYXMgYW55KSkpO1xuICAgIGVsc2UgaWYgKCFhcnJGaWVsZE5hbWUgJiYgZm9ybUZpZWxkTmFtZSkgcmV0dXJuIGFyci5maWx0ZXIoKHgpID0+ICFmb3JtQXJyYXkuc29tZSgoZikgPT4gZltmb3JtRmllbGROYW1lXSA9PSAoeCBhcyBhbnkpKSk7XG4gICAgZWxzZSByZXR1cm4gYXJyLmZpbHRlcigoeCkgPT4gZm9ybUFycmF5LnNvbWUoKGYpID0+IGYgPT0gKHggYXMgYW55KSkpO1xuICB9XG59XG5cbkBQaXBlKHsgbmFtZTogJ29iamVjdFRvQXJyYXknLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgT2JqZWN0VG9BcnJheVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtPFQ+KHZhbHVlOiB7IFt4OiBzdHJpbmddOiBUIH0pOiBUW10ge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHZhbHVlKTtcbiAgfVxufVxuXG5AUGlwZSh7IG5hbWU6ICdmb3JtU2NoZW1hVG9Db2xzJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIEZvcm1TY2hlbWFUb1RhYmxlQ29sdW1uc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtKHZhbHVlOiBJRm9ybVNjaGVtYVtdKTogSVRhYmxlQ29sW10ge1xuICAgIHJldHVybiB2YWx1ZT8ubWFwKCh4KSA9PiAoeyBmOiB4LmZpZWxkLCB0OiB4LmxhYmVsIH0pKSB8fCBbXTtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdyZXNwb25zaXZlVmFsJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgUmVzcG9uc2l2ZVZhbFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgLy8gc3ViOlN1YnNjcmlwdGlvblxuICB0cmFuc2Zvcm08VD4oY29uZmlnOiB7XG4gICAgWFNtYWxsPzogVDtcbiAgICBTbWFsbD86IFQ7XG4gICAgTWVkaXVtPzogVDtcbiAgICBMYXJnZT86IFQ7XG4gICAgWExhcmdlPzogVDtcbiAgICBIYW5kc2V0PzogVDtcbiAgICBUYWJsZXQ/OiBUO1xuICAgIFdlYj86IFQ7XG4gICAgSGFuZHNldFBvcnRyYWl0PzogVDtcbiAgICBUYWJsZXRQb3J0cmFpdD86IFQ7XG4gICAgV2ViUG9ydHJhaXQ/OiBUO1xuICAgIEhhbmRzZXRMYW5kc2NhcGU/OiBUO1xuICAgIFRhYmxldExhbmRzY2FwZT86IFQ7XG4gICAgV2ViTGFuZHNjYXBlPzogVDtcbiAgfSk6IFQge1xuICAgIC8vIGRlYnVnZ2VyO1xuICAgIGZvciAoY29uc3Qga2V5IGluIGNvbmZpZykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIGtleSkpIHtcbiAgICAgICAgaWYgKHRoaXMucmVzcG9uc2l2ZS5pc01hdGNoZWQoQnJlYWtwb2ludHNba2V5XSkpIHJldHVybiBjb25maWdba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoY29uZmlnKVswXTtcbiAgICAvLyAgdGhpcy5zdWI9IHRoaXMucmVzcG9uc2l2ZS5vYnNlcnZlKHI9PntcblxuICAgIC8vICB9KVxuICB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIHRoaXMuc3ViLlxuICB9XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZXNwb25zaXZlOiBCcmVha3BvaW50T2JzZXJ2ZXIpIHt9XG59XG5cbmNvbnN0IGNvbXBzID0gW1xuICBBcnJheVNwbGl0dGVyLFxuICBDdXN0b21EYXRlUGlwZSxcbiAgRmllbGRUb0xhYmVsUGlwZSxcbiAgRmlsdGVyQXJyYXlCeVN0cmluZ1BpcGUsXG4gIEZpbHRlckFycmF5UGlwZSxcbiAgRmlsdGVyRm9ybUFycmF5R3JvdXBQaXBlLFxuICBGb3JtSW52YWxpZENsYXNzUGlwZSxcbiAgRm9ybVNjaGVtYVRvVGFibGVDb2x1bW5zUGlwZSxcbiAgRm9ybVZhbHVlUGlwZSxcbiAgRnVuY3Rpb25DYWxsZXIsXG4gIEZ1bmN0aW9uQ2FsbGVyMSxcbiAgRnVuY3Rpb25DYWxsZXIyLFxuICBGdW5jdGlvbkNhbGxlcjMsXG4gIEdlbmRlclBpcGUsXG4gIEdldFZhbHVlTGFiZWwsXG4gIEhhc0Zvcm1WYWx1ZVBpcGUsXG4gIEhhc1ZhbHVlUGlwZSxcbiAgQ29kZVRpdGxlRGVzY1BpcGUsXG4gIEh0dHBMaXN0Q2FsbGVyLFxuICBIdHRwTGlzdENhbGxlcjEsXG4gIEh0dHBMaXN0Q2FsbGVyMixcbiAgSXNDbG9uZVBhZ2UsXG4gIElzU2hvd1BhZ2UsXG4gIE9iamVjdFRvQXJyYXlQaXBlLFxuICBSZWZyZXNoZXJQaXBlLFxuICBSZW1vdmVVc2VkT3B0aW9uc1BpcGUsXG4gIFJlcGxhY2VBbGxQaXBlLFxuICBSZXNwb25zaXZlVmFsUGlwZSxcbiAgUm91bmRQaXBlLFxuICBTZWNvbmRzVG9UaW1lUGlwZSxcbiAgU29ydFBpcGUsXG4gIFN0ckNvbmNhdGVuYXRvclBpcGUsXG4gIFRvQW55QXJyYXlQaXBlLFxuICBUb0FueVBpcGUsXG4gIFNES1RyYW5zbGF0ZVBpcGUsXG4gIFRyaW1QaXBlLFxuICBUcmltVGV4dFBpcGUsXG4gIFZhbHVlRm9ybWF0dGVyUGlwZSxcbiAgVmFsdWVPclhQaXBlLFxuICBYT3JZUGlwZSxcbl07XG5jb25zdCBtb2R1bGVzID0gW107XG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCAuLi5tb2R1bGVzLCAuLi5jb21wc10sXG4gIGV4cG9ydHM6IFsuLi5jb21wcywgLi4ubW9kdWxlc10sXG4gIHByb3ZpZGVyczogW10sXG59KVxuZXhwb3J0IGNsYXNzIFV0aWxpdHlQaXBlc01vZHVsZSB7fVxuIl19