@tolle_/tolle-ui 18.2.29 → 18.2.30

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 (279) hide show
  1. package/esm2022/lib/accordion-item.component.mjs +5 -11
  2. package/esm2022/lib/accordion.component.mjs +4 -9
  3. package/esm2022/lib/alert-dialog-dynamic.component.mjs +5 -10
  4. package/esm2022/lib/alert-dialog.component.mjs +44 -59
  5. package/esm2022/lib/alert.component.mjs +5 -11
  6. package/esm2022/lib/aspect-ratio.component.mjs +119 -0
  7. package/esm2022/lib/attachment.component.mjs +334 -0
  8. package/esm2022/lib/avatar-fallback.component.mjs +3 -3
  9. package/esm2022/lib/avatar.component.mjs +4 -9
  10. package/esm2022/lib/badge.component.mjs +4 -9
  11. package/esm2022/lib/breadcrumb-item.component.mjs +3 -3
  12. package/esm2022/lib/breadcrumb-link.component.mjs +3 -3
  13. package/esm2022/lib/breadcrumb-separator.component.mjs +3 -3
  14. package/esm2022/lib/breadcrumb.component.mjs +3 -3
  15. package/esm2022/lib/bubble.component.mjs +301 -0
  16. package/esm2022/lib/button.component.mjs +5 -11
  17. package/esm2022/lib/calendar.component.mjs +5 -11
  18. package/esm2022/lib/card.component.mjs +14 -43
  19. package/esm2022/lib/carousel/carousel.component.mjs +5 -12
  20. package/esm2022/lib/chain-of-thought.component.mjs +380 -0
  21. package/esm2022/lib/chart-pie.component.mjs +386 -0
  22. package/esm2022/lib/chart.component.mjs +1146 -0
  23. package/esm2022/lib/chart.service.mjs +555 -0
  24. package/esm2022/lib/checkbox.component.mjs +5 -11
  25. package/esm2022/lib/checkpoint.component.mjs +134 -0
  26. package/esm2022/lib/collapsible.component.mjs +4 -11
  27. package/esm2022/lib/combobox.component.mjs +372 -0
  28. package/esm2022/lib/command-dialog.component.mjs +164 -0
  29. package/esm2022/lib/command.component.mjs +514 -0
  30. package/esm2022/lib/command.service.mjs +130 -0
  31. package/esm2022/lib/confirmation.component.mjs +219 -0
  32. package/esm2022/lib/context-menu-trigger.directive.mjs +36 -0
  33. package/esm2022/lib/context-menu.component.mjs +460 -0
  34. package/esm2022/lib/context-menu.service.mjs +121 -0
  35. package/esm2022/lib/context.component.mjs +377 -0
  36. package/esm2022/lib/conversation.component.mjs +442 -0
  37. package/esm2022/lib/country-selector.component.mjs +5 -11
  38. package/esm2022/lib/data-table.component.mjs +59 -12
  39. package/esm2022/lib/date-picker.component.mjs +251 -198
  40. package/esm2022/lib/date-range-picker.component.mjs +224 -116
  41. package/esm2022/lib/date-time-picker.component.mjs +506 -0
  42. package/esm2022/lib/direction.component.mjs +79 -0
  43. package/esm2022/lib/dropdown-item.component.mjs +3 -3
  44. package/esm2022/lib/dropdown-label.component.mjs +3 -3
  45. package/esm2022/lib/dropdown-menu.component.mjs +3 -3
  46. package/esm2022/lib/dropdown-separator.component.mjs +3 -3
  47. package/esm2022/lib/dropdown-trigger.directive.mjs +6 -4
  48. package/esm2022/lib/empty-state.component.mjs +4 -9
  49. package/esm2022/lib/field.component.mjs +394 -0
  50. package/esm2022/lib/hover-card.component.mjs +6 -16
  51. package/esm2022/lib/inline-citation.component.mjs +263 -0
  52. package/esm2022/lib/input-group.component.mjs +418 -0
  53. package/esm2022/lib/input.component.mjs +5 -11
  54. package/esm2022/lib/item.component.mjs +243 -0
  55. package/esm2022/lib/kbd.component.mjs +82 -0
  56. package/esm2022/lib/label.component.mjs +4 -9
  57. package/esm2022/lib/marker.component.mjs +135 -0
  58. package/esm2022/lib/masked-input.component.mjs +5 -11
  59. package/esm2022/lib/menubar.component.mjs +683 -0
  60. package/esm2022/lib/message-scroller.component.mjs +353 -0
  61. package/esm2022/lib/message-scroller.service.mjs +157 -0
  62. package/esm2022/lib/message.component.mjs +228 -0
  63. package/esm2022/lib/model-selector.component.mjs +310 -0
  64. package/esm2022/lib/multi-select.component.mjs +155 -72
  65. package/esm2022/lib/native-select.component.mjs +201 -0
  66. package/esm2022/lib/navigation-menu.component.mjs +642 -0
  67. package/esm2022/lib/otp-group.component.mjs +3 -3
  68. package/esm2022/lib/otp-slot.component.mjs +4 -9
  69. package/esm2022/lib/otp.component.mjs +5 -11
  70. package/esm2022/lib/pagination.component.mjs +7 -10
  71. package/esm2022/lib/plan.component.mjs +335 -0
  72. package/esm2022/lib/popover-content.component.mjs +4 -9
  73. package/esm2022/lib/popover.component.mjs +15 -13
  74. package/esm2022/lib/progress.component.mjs +4 -9
  75. package/esm2022/lib/prompt-input.component.mjs +526 -0
  76. package/esm2022/lib/queue.component.mjs +280 -0
  77. package/esm2022/lib/radio-group.component.mjs +6 -13
  78. package/esm2022/lib/radio-item.component.mjs +4 -9
  79. package/esm2022/lib/range-calendar.component.mjs +5 -11
  80. package/esm2022/lib/reasoning.component.mjs +335 -0
  81. package/esm2022/lib/resizable.component.mjs +219 -0
  82. package/esm2022/lib/segment.component.mjs +17 -7
  83. package/esm2022/lib/select-group.component.mjs +4 -8
  84. package/esm2022/lib/select-item.component.mjs +4 -9
  85. package/esm2022/lib/select-separator.component.mjs +4 -8
  86. package/esm2022/lib/select.component.mjs +133 -49
  87. package/esm2022/lib/separator.component.mjs +4 -9
  88. package/esm2022/lib/sheet.component.mjs +38 -56
  89. package/esm2022/lib/shimmer.component.mjs +84 -0
  90. package/esm2022/lib/sidebar.component.mjs +11 -1
  91. package/esm2022/lib/skeleton.component.mjs +4 -9
  92. package/esm2022/lib/sources.component.mjs +452 -0
  93. package/esm2022/lib/spinner.component.mjs +68 -0
  94. package/esm2022/lib/suggestion.component.mjs +207 -0
  95. package/esm2022/lib/switch.component.mjs +5 -11
  96. package/esm2022/lib/table.component.mjs +213 -0
  97. package/esm2022/lib/tabs.component.mjs +4 -11
  98. package/esm2022/lib/tag-input.component.mjs +5 -11
  99. package/esm2022/lib/task.component.mjs +359 -0
  100. package/esm2022/lib/textarea.component.mjs +5 -11
  101. package/esm2022/lib/theme.service.mjs +17 -6
  102. package/esm2022/lib/time-picker.component.mjs +923 -0
  103. package/esm2022/lib/toast.service.mjs +3 -2
  104. package/esm2022/lib/toaster.component.mjs +76 -39
  105. package/esm2022/lib/toggle-group.component.mjs +4 -9
  106. package/esm2022/lib/toggle.component.mjs +5 -11
  107. package/esm2022/lib/tool.component.mjs +462 -0
  108. package/esm2022/lib/typography.component.mjs +83 -0
  109. package/esm2022/lib/utils/color.mjs +140 -19
  110. package/esm2022/public-api.mjs +61 -1
  111. package/fesm2022/tolle-ui.mjs +16453 -1024
  112. package/fesm2022/tolle-ui.mjs.map +1 -1
  113. package/lib/alert-dialog.component.d.ts +10 -2
  114. package/lib/aspect-ratio.component.d.ts +20 -0
  115. package/lib/attachment.component.d.ts +101 -0
  116. package/lib/bubble.component.d.ts +112 -0
  117. package/lib/chain-of-thought.component.d.ts +166 -0
  118. package/lib/chart-pie.component.d.ts +108 -0
  119. package/lib/chart.component.d.ts +369 -0
  120. package/lib/chart.service.d.ts +222 -0
  121. package/lib/checkpoint.component.d.ts +51 -0
  122. package/lib/combobox.component.d.ts +90 -0
  123. package/lib/command-dialog.component.d.ts +53 -0
  124. package/lib/command.component.d.ts +189 -0
  125. package/lib/command.service.d.ts +67 -0
  126. package/lib/confirmation.component.d.ts +70 -0
  127. package/lib/context-menu-trigger.directive.d.ts +12 -0
  128. package/lib/context-menu.component.d.ts +41 -0
  129. package/lib/context-menu.service.d.ts +38 -0
  130. package/lib/context.component.d.ts +134 -0
  131. package/lib/conversation.component.d.ts +165 -0
  132. package/lib/data-table.component.d.ts +26 -1
  133. package/lib/date-picker.component.d.ts +72 -11
  134. package/lib/date-range-picker.component.d.ts +63 -6
  135. package/lib/date-time-picker.component.d.ts +119 -0
  136. package/lib/direction.component.d.ts +45 -0
  137. package/lib/field.component.d.ts +201 -0
  138. package/lib/inline-citation.component.d.ts +103 -0
  139. package/lib/input-group.component.d.ts +150 -0
  140. package/lib/item.component.d.ts +154 -0
  141. package/lib/kbd.component.d.ts +50 -0
  142. package/lib/marker.component.d.ts +58 -0
  143. package/lib/menubar.component.d.ts +247 -0
  144. package/lib/message-scroller.component.d.ts +159 -0
  145. package/lib/message-scroller.service.d.ts +73 -0
  146. package/lib/message.component.d.ts +128 -0
  147. package/lib/model-selector.component.d.ts +103 -0
  148. package/lib/multi-select.component.d.ts +66 -14
  149. package/lib/native-select.component.d.ts +57 -0
  150. package/lib/navigation-menu.component.d.ts +230 -0
  151. package/lib/plan.component.d.ts +120 -0
  152. package/lib/popover.component.d.ts +1 -0
  153. package/lib/prompt-input.component.d.ts +194 -0
  154. package/lib/queue.component.d.ts +106 -0
  155. package/lib/reasoning.component.d.ts +127 -0
  156. package/lib/resizable.component.d.ts +43 -0
  157. package/lib/segment.component.d.ts +13 -3
  158. package/lib/select.component.d.ts +37 -5
  159. package/lib/sheet.component.d.ts +3 -0
  160. package/lib/shimmer.component.d.ts +38 -0
  161. package/lib/sidebar.component.d.ts +2 -0
  162. package/lib/sources.component.d.ts +156 -0
  163. package/lib/spinner.component.d.ts +29 -0
  164. package/lib/suggestion.component.d.ts +96 -0
  165. package/lib/table.component.d.ts +106 -0
  166. package/lib/task.component.d.ts +151 -0
  167. package/lib/theme.service.d.ts +9 -0
  168. package/lib/time-picker.component.d.ts +243 -0
  169. package/lib/toast.service.d.ts +3 -1
  170. package/lib/toaster.component.d.ts +26 -9
  171. package/lib/tool.component.d.ts +158 -0
  172. package/lib/typography.component.d.ts +32 -0
  173. package/lib/utils/color.d.ts +19 -5
  174. package/package.json +1 -1
  175. package/public-api.d.ts +50 -0
  176. package/registry/docs-content.json +8480 -1542
  177. package/registry/llms-full.txt +2679 -319
  178. package/registry/llms.txt +43 -4
  179. package/registry/manifest.json +9090 -1742
  180. package/registry/r/accordion-item.json +1 -1
  181. package/registry/r/accordion.json +1 -1
  182. package/registry/r/alert-dialog-dynamic.json +1 -1
  183. package/registry/r/alert-dialog.json +1 -1
  184. package/registry/r/alert.json +1 -1
  185. package/registry/r/attachment.json +23 -0
  186. package/registry/r/avatar-fallback.json +1 -1
  187. package/registry/r/avatar.json +1 -1
  188. package/registry/r/badge.json +1 -1
  189. package/registry/r/breadcrumb-item.json +1 -1
  190. package/registry/r/breadcrumb-link.json +1 -1
  191. package/registry/r/breadcrumb-separator.json +1 -1
  192. package/registry/r/breadcrumb.json +1 -1
  193. package/registry/r/bubble.json +23 -0
  194. package/registry/r/button.json +1 -1
  195. package/registry/r/calendar.json +1 -1
  196. package/registry/r/card.json +1 -1
  197. package/registry/r/carousel.json +1 -1
  198. package/registry/r/chain-of-thought.json +23 -0
  199. package/registry/r/chart-pie.json +30 -0
  200. package/registry/r/chart.json +28 -0
  201. package/registry/r/checkbox.json +1 -1
  202. package/registry/r/checkpoint.json +23 -0
  203. package/registry/r/collapsible.json +1 -1
  204. package/registry/r/combobox.json +31 -0
  205. package/registry/r/command-dialog.json +21 -0
  206. package/registry/r/command.json +26 -0
  207. package/registry/r/confirmation.json +23 -0
  208. package/registry/r/context.json +26 -0
  209. package/registry/r/conversation.json +23 -0
  210. package/registry/r/country-selector.json +1 -1
  211. package/registry/r/data-table.json +1 -1
  212. package/registry/r/date-picker.json +4 -4
  213. package/registry/r/date-range-picker.json +3 -3
  214. package/registry/r/date-time-picker.json +28 -0
  215. package/registry/r/direction.json +16 -0
  216. package/registry/r/dropdown-item.json +1 -1
  217. package/registry/r/dropdown-label.json +1 -1
  218. package/registry/r/dropdown-menu.json +1 -1
  219. package/registry/r/dropdown-separator.json +1 -1
  220. package/registry/r/dropdown-trigger.json +1 -1
  221. package/registry/r/empty-state.json +1 -1
  222. package/registry/r/field.json +23 -0
  223. package/registry/r/hover-card.json +1 -1
  224. package/registry/r/inline-citation.json +26 -0
  225. package/registry/r/input-group.json +23 -0
  226. package/registry/r/input.json +1 -1
  227. package/registry/r/item.json +23 -0
  228. package/registry/r/kbd.json +23 -0
  229. package/registry/r/label.json +1 -1
  230. package/registry/r/marker.json +23 -0
  231. package/registry/r/masked-input.json +1 -1
  232. package/registry/r/menubar.json +24 -0
  233. package/registry/r/message-scroller.json +26 -0
  234. package/registry/r/message.json +23 -0
  235. package/registry/r/model-selector.json +32 -0
  236. package/registry/r/multi-select.json +2 -2
  237. package/registry/r/native-select.json +23 -0
  238. package/registry/r/navigation-menu.json +24 -0
  239. package/registry/r/otp-group.json +1 -1
  240. package/registry/r/otp-slot.json +1 -1
  241. package/registry/r/otp.json +1 -1
  242. package/registry/r/pagination.json +3 -2
  243. package/registry/r/plan.json +23 -0
  244. package/registry/r/popover-content.json +1 -1
  245. package/registry/r/popover.json +1 -1
  246. package/registry/r/progress.json +1 -1
  247. package/registry/r/prompt-input.json +23 -0
  248. package/registry/r/queue.json +23 -0
  249. package/registry/r/radio-group.json +1 -1
  250. package/registry/r/radio-item.json +1 -1
  251. package/registry/r/range-calendar.json +1 -1
  252. package/registry/r/reasoning.json +23 -0
  253. package/registry/r/segment.json +1 -1
  254. package/registry/r/select-group.json +1 -1
  255. package/registry/r/select-item.json +1 -1
  256. package/registry/r/select-separator.json +1 -1
  257. package/registry/r/select.json +4 -3
  258. package/registry/r/separator.json +1 -1
  259. package/registry/r/sheet.json +1 -1
  260. package/registry/r/shimmer.json +23 -0
  261. package/registry/r/sidebar.json +1 -1
  262. package/registry/r/skeleton.json +1 -1
  263. package/registry/r/sources.json +23 -0
  264. package/registry/r/spinner.json +23 -0
  265. package/registry/r/suggestion.json +23 -0
  266. package/registry/r/switch.json +1 -1
  267. package/registry/r/table.json +21 -0
  268. package/registry/r/tabs.json +1 -1
  269. package/registry/r/tag-input.json +1 -1
  270. package/registry/r/task.json +23 -0
  271. package/registry/r/textarea.json +1 -1
  272. package/registry/r/time-picker.json +24 -0
  273. package/registry/r/toaster.json +2 -2
  274. package/registry/r/toggle-group.json +1 -1
  275. package/registry/r/toggle.json +1 -1
  276. package/registry/r/tool.json +23 -0
  277. package/registry/r/typography.json +23 -0
  278. package/registry/registry.json +915 -22
  279. package/theme.css +109 -8
@@ -378,22 +378,17 @@ export class CountrySelectorComponent {
378
378
  </p>
379
379
  </ng-container>
380
380
  </div>
381
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: PopoverComponent, selector: "tolle-popover", inputs: ["placement"], outputs: ["onOpen", "onClose"] }, { kind: "component", type: InputComponent, selector: "tolle-input", inputs: ["id", "label", "hint", "errorMessage", "type", "placeholder", "size", "containerClass", "class", "disabled", "readonly", "error", "hideHintOnFocus"] }] });
381
+ `, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: PopoverComponent, selector: "tolle-popover", inputs: ["placement"], outputs: ["onOpen", "onClose"] }, { kind: "component", type: InputComponent, selector: "tolle-input", inputs: ["id", "label", "hint", "errorMessage", "type", "placeholder", "size", "containerClass", "class", "disabled", "readonly", "error", "hideHintOnFocus"] }] });
382
382
  }
383
383
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CountrySelectorComponent, decorators: [{
384
384
  type: Component,
385
- args: [{
386
- selector: 'tolle-country-selector',
387
- standalone: true,
388
- imports: [CommonModule, FormsModule, PopoverComponent, InputComponent],
389
- providers: [
385
+ args: [{ selector: 'tolle-country-selector', standalone: true, imports: [CommonModule, FormsModule, PopoverComponent, InputComponent], providers: [
390
386
  {
391
387
  provide: NG_VALUE_ACCESSOR,
392
388
  useExisting: forwardRef(() => CountrySelectorComponent),
393
389
  multi: true,
394
390
  },
395
- ],
396
- template: `
391
+ ], template: `
397
392
  <div class="flex w-full flex-col gap-1.5">
398
393
  <label *ngIf="label" [for]="id" [class]="computedLabelClass">
399
394
  {{ label }}
@@ -497,8 +492,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
497
492
  </p>
498
493
  </ng-container>
499
494
  </div>
500
- `,
501
- }]
495
+ `, styles: [":host{display:block}\n"] }]
502
496
  }], propDecorators: { id: [{
503
497
  type: Input
504
498
  }], label: [{
@@ -542,4 +536,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
542
536
  type: ViewChild,
543
537
  args: ['searchInput', { read: ElementRef }]
544
538
  }] } });
545
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRyeS1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90b2xsZS9zcmMvbGliL2NvdW50cnktc2VsZWN0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFVBQVUsRUFDVixNQUFNLEVBRU4sU0FBUyxFQUNULFVBQVUsRUFDVixpQkFBaUIsRUFDakIsTUFBTSxFQUNOLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsWUFBWSxFQUFtQixNQUFNLDJCQUEyQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sWUFBWSxDQUFDOzs7O0FBdUhoQyxNQUFNLE9BQU8sd0JBQXdCO0lBQzFCLEVBQUUsR0FBRyxvQkFBb0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDbkUsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNYLElBQUksR0FBRyxFQUFFLENBQUM7SUFDVixZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDZCxlQUFlLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQztJQUMvQixLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ1gsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLElBQUksR0FBbUMsU0FBUyxDQUFDO0lBQ2pELGtCQUFrQixHQUFHLElBQUksQ0FBQztJQUMxQixXQUFXLEdBQWlELFdBQVcsQ0FBQztJQUN4RSxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQ2hCLGVBQWUsQ0FBc0I7SUFFcEMsUUFBUSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDbkMsYUFBYSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFDekMsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFFNUIsT0FBTyxDQUFvQjtJQUNELFdBQVcsQ0FBMkI7SUFFOUUsbUJBQW1CLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDbEQsU0FBUyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNqQyxHQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFeEMsS0FBSyxHQUFRLElBQUksQ0FBQztJQUNsQixlQUFlLEdBQVEsSUFBSSxDQUFDO0lBQzVCLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFDakIsZUFBZSxHQUFVLEVBQUUsQ0FBQztJQUM1QixTQUFTLEdBQUcsS0FBSyxDQUFDO0lBRWxCLHVFQUF1RTtJQUN2RSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFakIsUUFBUSxHQUFRLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQUN6QixTQUFTLEdBQVEsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBRWhCLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFFbEIsUUFBUTtRQUNOLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQztRQUMxRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUM1RCxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLGtCQUFrQixDQUM3QyxDQUFDO1lBQ0YsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDekQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxvQkFBb0I7UUFDdEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDM0YsT0FBTyxFQUFFLENBQ1AsNkVBQTZFLEVBQzdFLCtCQUErQixFQUMvQix3QkFBd0IsRUFDeEIsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksa0JBQWtCLEVBQ3hDLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLGtCQUFrQixFQUN4QyxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxtQkFBbUIsRUFDOUMsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLElBQUkscUJBQXFCO1FBQzNDLGtCQUFrQjtRQUNsQixZQUFZO1FBQ1osY0FBYztRQUNkLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSTtZQUNuQyw0QkFBNEI7WUFDNUIsc0JBQXNCO1lBQ3RCLDRCQUE0QjtZQUM1Qiw2QkFBNkI7WUFDN0IsYUFBYTtZQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHFDQUFxQyxDQUFDLENBQUMsQ0FBQyxpQ0FBaUM7U0FDdkY7UUFDRCxtREFBbUQ7UUFDbkQsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUMvQixPQUFPLElBQUk7WUFDVCxRQUFRO1lBQ1IsY0FBYztZQUNkLGVBQWU7WUFDZixhQUFhO1lBQ2IsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLG1CQUFtQjtTQUMzRCxFQUNILENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxxQkFBcUI7UUFDMUQsY0FBYztRQUNkLElBQUksQ0FBQyxLQUFLLElBQUk7WUFDWixvQkFBb0I7WUFDcEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLE9BQU8sSUFBSSxxQkFBcUI7U0FDdEUsRUFDRCxJQUFJLENBQUMsUUFBUSxJQUFJLGlEQUFpRCxFQUNsRSxJQUFJLENBQUMsUUFBUSxJQUFJLDhCQUE4QixFQUMvQyxJQUFJLENBQUMsS0FBSyxDQUNYLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxrQkFBa0I7UUFDcEIsT0FBTyxFQUFFLENBQ1Asa0ZBQWtGLEVBQ2xGLElBQUksQ0FBQyxRQUFRLElBQUksWUFBWSxDQUM5QixDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sRUFBRSxDQUNQLG1GQUFtRixFQUNuRixJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQ3hDLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFDeEUsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxZQUFZLENBQ2pELENBQUM7SUFDSixDQUFDO0lBRUQsWUFBWSxDQUFDLE9BQVksRUFBRSxLQUFhO1FBQ3RDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsU0FBUyxLQUFLLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDekUsTUFBTSxRQUFRLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDNUMsT0FBTyxFQUFFLENBQ1AsNkdBQTZHLEVBQzdHLFVBQVUsQ0FBQyxDQUFDLENBQUMsa0NBQWtDLENBQUMsQ0FBQyxDQUFDLG9DQUFvQztRQUN0Rix5Q0FBeUM7UUFDekMsUUFBUSxJQUFJLGtDQUFrQyxDQUMvQyxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksa0JBQWtCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU07WUFDNUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsV0FBVyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3pDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDWCxDQUFDO0lBRUQsVUFBVSxDQUFDLFVBQWtCO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxzQkFBc0IsR0FBRyxVQUFVLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQWE7UUFDM0IsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FDOUQsQ0FBQyxDQUFDLEVBQUUsQ0FDRixDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDckMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQzNCLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUM3QyxDQUFDO1FBQ0YsK0RBQStEO1FBQy9ELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELGFBQWEsQ0FBQyxPQUFZO1FBQ3hCLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDO1FBQy9CLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxjQUFjLENBQUMsT0FBWTtRQUNqQyxRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN6QixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxPQUFPLENBQUM7WUFDakIsS0FBSyxXQUFXO2dCQUNkLE9BQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQztZQUMzQixLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDO1lBQzFCLEtBQUssTUFBTTtnQkFDVCxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDdEI7Z0JBQ0UsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsYUFBYTtRQUNYLDBFQUEwRTtRQUMxRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZTtZQUNqQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDO1lBQ3JGLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNQLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakYsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzlCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsb0VBQW9FO0lBRTVELGdCQUFnQjtRQUN0QixPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDekUsQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU87UUFDbkIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1FBQ25DLElBQUksRUFBRTtZQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxDQUFDLENBQUM7O1lBQ25ELEtBQUssQ0FBQyxlQUFlLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDO1lBQUUsT0FBTztRQUNqQyxRQUFRO2FBQ0wsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsV0FBVyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDeEQsRUFBRSxjQUFjLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRU8sVUFBVSxDQUFDLEtBQWE7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTTtZQUFFLE9BQU87UUFDekMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDO1lBQy9CLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ25ELENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUM3QixvQ0FBb0M7UUFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFTyxZQUFZO1FBQ2xCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMscUJBQXFCO1FBQ2xELFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFvQjtRQUNuQyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBQzNDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNO1lBQUUsT0FBTyxDQUFDLDZDQUE2QztRQUMvRSxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDO1FBQ3RCLElBQUksR0FBRyxLQUFLLFdBQVcsSUFBSSxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxPQUFPLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssTUFBTSxJQUFJLEdBQUcsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUNsSCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixDQUFDO2FBQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pGLDZFQUE2RTtZQUM3RSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRUQsMkVBQTJFO0lBQzNFLDRFQUE0RTtJQUM1RSxlQUFlLENBQUMsS0FBb0I7UUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTTtZQUFFLE9BQU87UUFDbEMsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDbEIsS0FBSyxXQUFXO2dCQUFFLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUFDLE1BQU07WUFDcEUsS0FBSyxTQUFTO2dCQUFFLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQUMsTUFBTTtZQUNuRSxLQUFLLE9BQU87Z0JBQUUsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFBQyxNQUFNO1lBQ2pFLEtBQUssUUFBUTtnQkFDWCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3JCLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO2dCQUMxQyxNQUFNO1FBQ1YsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsS0FBVTtRQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDakUsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLFFBQVE7b0JBQUUsT0FBTyxDQUFDLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxTQUFTLENBQUM7Z0JBQzFFLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxXQUFXO29CQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUM7Z0JBQ25FLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxVQUFVO29CQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUM7Z0JBQ2pFLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxNQUFNO29CQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUM7Z0JBQ3pELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQzlCLENBQUM7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxFQUFPO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUM3QixDQUFDO3dHQXBTVSx3QkFBd0I7NEZBQXhCLHdCQUF3QixraEJBakh4QjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsd0JBQXdCLENBQUM7Z0JBQ3ZELEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRixzTUFpSWlDLFVBQVUsNkJBaElsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3R1QsMkRBaEhTLFlBQVksK1BBQUUsV0FBVywrVkFBRSxnQkFBZ0IsaUhBQUUsY0FBYzs7NEZBa0gxRCx3QkFBd0I7a0JBckhwQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsQ0FBQztvQkFDdEUsU0FBUyxFQUFFO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHlCQUF5QixDQUFDOzRCQUN2RCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjtvQkFDRCxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0dUO2lCQUNGOzhCQUVVLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBRWUsT0FBTztzQkFBNUIsU0FBUzt1QkFBQyxTQUFTO2dCQUM0QixXQUFXO3NCQUExRCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBmb3J3YXJkUmVmLFxuICBpbmplY3QsXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkLFxuICBFbGVtZW50UmVmLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiwgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVSZXNvdXJjZVVybCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgQ291bnRyeUNvZGVzU2VydmljZSB9IGZyb20gJy4vY291bnRyeS1jb2Rlcy5zZXJ2aWNlJztcbmltcG9ydCB7IFBvcG92ZXJDb21wb25lbnQgfSBmcm9tICcuL3BvcG92ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuL3V0aWxzL2NuJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtY291bnRyeS1zZWxlY3RvcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBQb3BvdmVyQ29tcG9uZW50LCBJbnB1dENvbXBvbmVudF0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ291bnRyeVNlbGVjdG9yQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsIGZsZXgtY29sIGdhcC0xLjVcIj5cbiAgICAgIDxsYWJlbCAqbmdJZj1cImxhYmVsXCIgW2Zvcl09XCJpZFwiIFtjbGFzc109XCJjb21wdXRlZExhYmVsQ2xhc3NcIj5cbiAgICAgICAge3sgbGFiZWwgfX1cbiAgICAgIDwvbGFiZWw+XG5cbiAgICAgIDx0b2xsZS1wb3BvdmVyXG4gICAgICAgICNwb3BvdmVyXG4gICAgICAgIFtwbGFjZW1lbnRdPVwiJ2JvdHRvbS1zdGFydCdcIlxuICAgICAgICAob25PcGVuKT1cIm9uUG9wb3Zlck9wZW4oKVwiXG4gICAgICAgIChvbkNsb3NlKT1cIm9uUG9wb3ZlckNsb3NlKClcIj5cbiAgICAgICAgPGRpdiB0cmlnZ2VyIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbaWRdPVwiaWRcIlxuICAgICAgICAgICAgcm9sZT1cImNvbWJvYm94XCJcbiAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJsaXN0Ym94XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwicG9wb3Zlcj8uaXNPcGVuXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF09XCJwb3BvdmVyPy5pc09wZW4gPyBhY3RpdmVEZXNjZW5kYW50SWQgOiBudWxsXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbY2xhc3NdPVwiY29tcHV0ZWRUcmlnZ2VyQ2xhc3NcIlxuICAgICAgICAgICAgKGJsdXIpPVwib25CbHVyKClcIlxuICAgICAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoKVwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJvblRyaWdnZXJLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImVycm9yXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiZXJyb3IgJiYgZXJyb3JNZXNzYWdlID8gaWQgKyAnLWVycm9yJyA6IG51bGxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZENvdW50cnlcIlxuICAgICAgICAgICAgICAgIFtzcmNdPVwiZ2V0RmxhZ1VybChzZWxlY3RlZENvdW50cnkuZmxhZylcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaC00IHctNiBmbGV4LXNocmluay0wIHJvdW5kZWQtc20gYm9yZGVyIGJvcmRlci1ib3JkZXIgb2JqZWN0LWNvdmVyXCJcbiAgICAgICAgICAgICAgICBbYWx0XT1cInNlbGVjdGVkQ291bnRyeS5uYW1lXCIgLz5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzZWxlY3RlZENvdW50cnkgJiYgc2hvd05hbWVcIiBjbGFzcz1cInRydW5jYXRlIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAge3sgc2VsZWN0ZWRDb3VudHJ5Lm5hbWUgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFzZWxlY3RlZENvdW50cnlcIiBjbGFzcz1cInRydW5jYXRlIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuICAgICAgICAgICAgICAgIHt7IHBsYWNlaG9sZGVyIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGkgW2NsYXNzXT1cImljb25DbGFzc1wiPjwvaT5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZmxleCBtaW4tdy1bMzAwcHhdIG1heC13LVs0MDBweF0gZmxleC1jb2wgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1ib3JkZXIgYmctcG9wb3ZlciB0ZXh0LXBvcG92ZXItZm9yZWdyb3VuZCBzaGFkb3ctbWRcIlxuICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0aWNreSB0b3AtMCB6LTEwIGJvcmRlci1iIGJvcmRlci1ib3JkZXIgYmctcG9wb3ZlciBwLTIgc2hhZG93LXNtXCI+XG4gICAgICAgICAgICA8dG9sbGUtaW5wdXRcbiAgICAgICAgICAgICAgc2l6ZT1cInNtXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggY291bnRyeS4uLlwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoUXVlcnlcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJDb3VudHJpZXMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uU2VhcmNoS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgICAjc2VhcmNoSW5wdXQ+XG4gICAgICAgICAgICAgIDxpIHByZWZpeCBjbGFzcz1cInJpLXNlYXJjaC1saW5lXCI+PC9pPlxuICAgICAgICAgICAgPC90b2xsZS1pbnB1dD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgcm9sZT1cImxpc3Rib3hcIiBjbGFzcz1cIm1heC1oLVszMDBweF0gb3ZlcmZsb3cteS1hdXRvIHAtMVwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY291bnRyeSBvZiBzaGFkb3dDb3VudHJpZXM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgICBbaWRdPVwiaWQgKyAnLW9wdGlvbi0nICsgaVwiXG4gICAgICAgICAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cInNlbGVjdGVkQ291bnRyeT8uaXNvQWxwaGEyID09PSBjb3VudHJ5Lmlzb0FscGhhMlwiXG4gICAgICAgICAgICAgIFthdHRyLmRhdGEtaGlnaGxpZ2h0ZWRdPVwiaSA9PT0gYWN0aXZlSW5kZXggPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0Q291bnRyeShjb3VudHJ5KVwiXG4gICAgICAgICAgICAgIFtjbGFzc109XCJnZXRJdGVtQ2xhc3MoY291bnRyeSwgaSlcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBnYXAtM1wiPlxuICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgIFtzcmNdPVwiZ2V0RmxhZ1VybChjb3VudHJ5LmZsYWcpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaC00IHctNiBmbGV4LXNocmluay0wIHJvdW5kZWQtc20gYm9yZGVyIGJvcmRlci1ib3JkZXIgb2JqZWN0LWNvdmVyXCJcbiAgICAgICAgICAgICAgICAgIFthbHRdPVwiY291bnRyeS5uYW1lXCIgLz5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXgtMSB0cnVuY2F0ZSB0ZXh0LXNtXCI+e3sgY291bnRyeS5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj57eyBjb3VudHJ5LmRpYWxDb2RlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkQ291bnRyeT8uaXNvQWxwaGEyID09PSBjb3VudHJ5Lmlzb0FscGhhMlwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInJpLWNoZWNrLWxpbmUgdGV4dC1wcmltYXJ5XCI+PC9pPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAqbmdJZj1cInNoYWRvd0NvdW50cmllcy5sZW5ndGggPT09IDBcIlxuICAgICAgICAgICAgICBjbGFzcz1cInB5LTYgdGV4dC1jZW50ZXIgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cbiAgICAgICAgICAgICAgTm8gY291bnRyaWVzIGZvdW5kLlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC90b2xsZS1wb3BvdmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWRpc2FibGVkXCI+XG4gICAgICAgIDxwXG4gICAgICAgICAgKm5nSWY9XCJoaW50ICYmICFlcnJvclwiXG4gICAgICAgICAgY2xhc3M9XCJweC0xIHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi0yMDBcIlxuICAgICAgICAgIFtjbGFzcy5vcGFjaXR5LTBdPVwiaXNGb2N1c2VkICYmIGhpZGVIaW50T25Gb2N1c1wiPlxuICAgICAgICAgIHt7IGhpbnQgfX1cbiAgICAgICAgPC9wPlxuICAgICAgICA8cFxuICAgICAgICAgICpuZ0lmPVwiZXJyb3IgJiYgZXJyb3JNZXNzYWdlXCJcbiAgICAgICAgICBbaWRdPVwiaWQgKyAnLWVycm9yJ1wiXG4gICAgICAgICAgY2xhc3M9XCJweC0xIHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1kZXN0cnVjdGl2ZVwiPlxuICAgICAgICAgIHt7IGVycm9yTWVzc2FnZSB9fVxuICAgICAgICA8L3A+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgQ291bnRyeVNlbGVjdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIEBJbnB1dCgpIGlkID0gYGNvdW50cnktc2VsZWN0b3ItJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSl9YDtcbiAgQElucHV0KCkgbGFiZWwgPSAnJztcbiAgQElucHV0KCkgaGludCA9ICcnO1xuICBASW5wdXQoKSBlcnJvck1lc3NhZ2UgPSAnJztcbiAgQElucHV0KCkgZXJyb3IgPSBmYWxzZTtcbiAgQElucHV0KCkgaGlkZUhpbnRPbkZvY3VzID0gdHJ1ZTtcbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnU2VsZWN0IGNvdW50cnknO1xuICBASW5wdXQoKSBjbGFzcyA9ICcnO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuICBASW5wdXQoKSBzaXplOiAneHMnIHwgJ3NtJyB8ICdkZWZhdWx0JyB8ICdsZycgPSAnZGVmYXVsdCc7XG4gIEBJbnB1dCgpIGRlZmF1bHRDb3VudHJ5Q29kZSA9ICdHSCc7XG4gIEBJbnB1dCgpIHJldHVyblZhbHVlOiAnb2JqZWN0JyB8ICdpc29BbHBoYTInIHwgJ2RpYWxDb2RlJyB8ICduYW1lJyA9ICdpc29BbHBoYTInO1xuICBASW5wdXQoKSBzaG93TmFtZSA9IHRydWU7XG4gIEBJbnB1dCgpIGV4dGVybmFsRm9jdXNlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICBAT3V0cHV0KCkgb25TZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9uRm9jdXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBvbkJsdXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQFZpZXdDaGlsZCgncG9wb3ZlcicpIHBvcG92ZXIhOiBQb3BvdmVyQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdzZWFyY2hJbnB1dCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBzZWFyY2hJbnB1dD86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gIHByaXZhdGUgY291bnRyeUNvZGVzU2VydmljZSA9IGluamVjdChDb3VudHJ5Q29kZXNTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzYW5pdGl6ZXIgPSBpbmplY3QoRG9tU2FuaXRpemVyKTtcbiAgcHJpdmF0ZSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gIHZhbHVlOiBhbnkgPSBudWxsO1xuICBzZWxlY3RlZENvdW50cnk6IGFueSA9IG51bGw7XG4gIHNlYXJjaFF1ZXJ5ID0gJyc7XG4gIHNoYWRvd0NvdW50cmllczogYW55W10gPSBbXTtcbiAgaXNGb2N1c2VkID0gZmFsc2U7XG5cbiAgLy8gS2V5Ym9hcmQgbmF2aWdhdGlvbiAoYWN0aXZlLWRlc2NlbmRhbnQpIHN0YXRlIG92ZXIgdGhlIGZpbHRlcmVkIHJvd3NcbiAgYWN0aXZlSW5kZXggPSAtMTtcblxuICBvbkNoYW5nZTogYW55ID0gKCkgPT4ge307XG4gIG9uVG91Y2hlZDogYW55ID0gKCkgPT4ge307XG5cbiAgcHJvdGVjdGVkIGNuID0gY247XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zaGFkb3dDb3VudHJpZXMgPSB0aGlzLmNvdW50cnlDb2Rlc1NlcnZpY2UuY291bnRyaWVzO1xuICAgIGlmICh0aGlzLmRlZmF1bHRDb3VudHJ5Q29kZSAmJiAhdGhpcy52YWx1ZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZENvdW50cnkgPSB0aGlzLmNvdW50cnlDb2Rlc1NlcnZpY2UuY291bnRyaWVzLmZpbmQoXG4gICAgICAgIGMgPT4gYy5pc29BbHBoYTIgPT09IHRoaXMuZGVmYXVsdENvdW50cnlDb2RlXG4gICAgICApO1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb3VudHJ5KSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmdldFJldHVyblZhbHVlKHRoaXMuc2VsZWN0ZWRDb3VudHJ5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgY29tcHV0ZWRUcmlnZ2VyQ2xhc3MoKSB7XG4gICAgY29uc3QgZm9jdXNlZCA9IHRoaXMuZXh0ZXJuYWxGb2N1c2VkICE9PSB1bmRlZmluZWQgPyB0aGlzLmV4dGVybmFsRm9jdXNlZCA6IHRoaXMuaXNGb2N1c2VkO1xuICAgIHJldHVybiBjbihcbiAgICAgICdmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGJvcmRlciB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAnLFxuICAgICAgJ2JnLWJhY2tncm91bmQgdGV4dC1mb3JlZ3JvdW5kJyxcbiAgICAgICdib3JkZXItaW5wdXQgc2hhZG93LXNtJyxcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ3hzJyAmJiAnaC04IHB4LTIgdGV4dC14cycsXG4gICAgICB0aGlzLnNpemUgPT09ICdzbScgJiYgJ2gtOSBweC0zIHRleHQtc20nLFxuICAgICAgdGhpcy5zaXplID09PSAnZGVmYXVsdCcgJiYgJ2gtMTAgcHgtMyB0ZXh0LXNtJyxcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ2xnJyAmJiAnaC0xMSBweC00IHRleHQtYmFzZScsXG4gICAgICAvLyBSb3VuZGVkIGNvcm5lcnNcbiAgICAgICdyb3VuZGVkLW1kJyxcbiAgICAgIC8vIEZvY3VzIHN0YXRlXG4gICAgICAhKHRoaXMucmVhZG9ubHkgfHwgdGhpcy5kaXNhYmxlZCkgJiYgW1xuICAgICAgICAnZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUnLFxuICAgICAgICAnZm9jdXMtdmlzaWJsZTpyaW5nLTQnLFxuICAgICAgICAnZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvMzAnLFxuICAgICAgICAnZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0wJyxcbiAgICAgICAgJ3NoYWRvdy1ub25lJyxcbiAgICAgICAgdGhpcy5lcnJvciA/ICdmb2N1cy12aXNpYmxlOmJvcmRlci1kZXN0cnVjdGl2ZS84MCcgOiAnZm9jdXMtdmlzaWJsZTpib3JkZXItcHJpbWFyeS84MCcsXG4gICAgICBdLFxuICAgICAgLy8gRXh0ZXJuYWwgZm9jdXMgc3RhdGUgKHdoZW4gY29udHJvbGxlZCBieSBwYXJlbnQpXG4gICAgICAhKHRoaXMucmVhZG9ubHkgfHwgdGhpcy5kaXNhYmxlZCkgJiZcbiAgICAgICAgZm9jdXNlZCAmJiBbXG4gICAgICAgICAgJ3JpbmctNCcsXG4gICAgICAgICAgJ3JpbmctcmluZy8zMCcsXG4gICAgICAgICAgJ3Jpbmctb2Zmc2V0LTAnLFxuICAgICAgICAgICdzaGFkb3ctbm9uZScsXG4gICAgICAgICAgdGhpcy5lcnJvciA/ICdib3JkZXItZGVzdHJ1Y3RpdmUvODAnIDogJ2JvcmRlci1wcmltYXJ5LzgwJyxcbiAgICAgICAgXSxcbiAgICAgICEodGhpcy5yZWFkb25seSB8fCB0aGlzLmRpc2FibGVkKSAmJiAnaG92ZXI6Ym9yZGVyLWFjY2VudCcsXG4gICAgICAvLyBFcnJvciBzdGF0ZVxuICAgICAgdGhpcy5lcnJvciAmJiBbXG4gICAgICAgICdib3JkZXItZGVzdHJ1Y3RpdmUnLFxuICAgICAgICAhKHRoaXMucmVhZG9ubHkgfHwgdGhpcy5kaXNhYmxlZCkgJiYgZm9jdXNlZCAmJiAncmluZy1kZXN0cnVjdGl2ZS8zMCcsXG4gICAgICBdLFxuICAgICAgdGhpcy5kaXNhYmxlZCAmJiAnY3Vyc29yLW5vdC1hbGxvd2VkIG9wYWNpdHktNTAgYm9yZGVyLW9wYWNpdHktNTAnLFxuICAgICAgdGhpcy5yZWFkb25seSAmJiAnY3Vyc29yLWRlZmF1bHQgYm9yZGVyLWRhc2hlZCcsXG4gICAgICB0aGlzLmNsYXNzXG4gICAgKTtcbiAgfVxuXG4gIGdldCBjb21wdXRlZExhYmVsQ2xhc3MoKSB7XG4gICAgcmV0dXJuIGNuKFxuICAgICAgJ3RleHQtc20gZm9udC1tZWRpdW0gdGV4dC1mb3JlZ3JvdW5kIGxlYWRpbmctbm9uZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMjAwJyxcbiAgICAgIHRoaXMuZGlzYWJsZWQgJiYgJ29wYWNpdHktNTAnXG4gICAgKTtcbiAgfVxuXG4gIGdldCBpY29uQ2xhc3MoKSB7XG4gICAgcmV0dXJuIGNuKFxuICAgICAgJ3JpLWFycm93LWRvd24tcy1saW5lIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBtbC0yIHRyYW5zaXRpb24tdHJhbnNmb3JtIGR1cmF0aW9uLTIwMCcsXG4gICAgICB0aGlzLnBvcG92ZXI/LmlzT3BlbiA/ICdyb3RhdGUtMTgwJyA6ICcnLFxuICAgICAgdGhpcy5zaXplID09PSAneHMnIHx8IHRoaXMuc2l6ZSA9PT0gJ3NtJyA/ICd0ZXh0LVsxNHB4XScgOiAndGV4dC1bMThweF0nLFxuICAgICAgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkgJiYgJ29wYWNpdHktMzAnXG4gICAgKTtcbiAgfVxuXG4gIGdldEl0ZW1DbGFzcyhjb3VudHJ5OiBhbnksIGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5zZWxlY3RlZENvdW50cnk/Lmlzb0FscGhhMiA9PT0gY291bnRyeS5pc29BbHBoYTI7XG4gICAgY29uc3QgaXNBY3RpdmUgPSBpbmRleCA9PT0gdGhpcy5hY3RpdmVJbmRleDtcbiAgICByZXR1cm4gY24oXG4gICAgICAnZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB4LTMgcHktMiBjdXJzb3ItcG9pbnRlciB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0xNTAgcm91bmRlZC1zbSB3LWZ1bGwnLFxuICAgICAgaXNTZWxlY3RlZCA/ICdiZy1hY2NlbnQgdGV4dC1hY2NlbnQtZm9yZWdyb3VuZCcgOiAnaG92ZXI6YmctYWNjZW50LzUwIHRleHQtZm9yZWdyb3VuZCcsXG4gICAgICAvLyBBY3RpdmUtZGVzY2VuZGFudCAoa2V5Ym9hcmQpIGhpZ2hsaWdodFxuICAgICAgaXNBY3RpdmUgJiYgJ2JnLWFjY2VudCB0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kJ1xuICAgICk7XG4gIH1cblxuICBnZXQgYWN0aXZlRGVzY2VuZGFudElkKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUluZGV4ID49IDAgJiYgdGhpcy5hY3RpdmVJbmRleCA8IHRoaXMuc2hhZG93Q291bnRyaWVzLmxlbmd0aFxuICAgICAgPyBgJHt0aGlzLmlkfS1vcHRpb24tJHt0aGlzLmFjdGl2ZUluZGV4fWBcbiAgICAgIDogbnVsbDtcbiAgfVxuXG4gIGdldEZsYWdVcmwoZmxhZ0Jhc2U2NDogc3RyaW5nKTogU2FmZVJlc291cmNlVXJsIHtcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKCdkYXRhOmltYWdlLyo7YmFzZTY0LCcgKyBmbGFnQmFzZTY0KTtcbiAgfVxuXG4gIGZpbHRlckNvdW50cmllcyhxdWVyeTogc3RyaW5nKSB7XG4gICAgY29uc3QgZmlsdGVyID0gKHF1ZXJ5IHx8ICcnKS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICB0aGlzLnNoYWRvd0NvdW50cmllcyA9IHRoaXMuY291bnRyeUNvZGVzU2VydmljZS5jb3VudHJpZXMuZmlsdGVyKFxuICAgICAgYyA9PlxuICAgICAgICBjLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXIpIHx8XG4gICAgICAgIGMuZGlhbENvZGUuaW5jbHVkZXMoZmlsdGVyKSB8fFxuICAgICAgICBjLmlzb0FscGhhMi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlcilcbiAgICApO1xuICAgIC8vIFJlLWFuY2hvciB0aGUgYWN0aXZlIHJvdyB0byB0aGUgZmlyc3QgbWF0Y2ggYWZ0ZXIgZmlsdGVyaW5nLlxuICAgIHRoaXMuYWN0aXZlSW5kZXggPSB0aGlzLnNoYWRvd0NvdW50cmllcy5sZW5ndGggPyAwIDogLTE7XG4gICAgdGhpcy5zeW5jQWN0aXZlRGVzY2VuZGFudCgpO1xuICB9XG5cbiAgc2VsZWN0Q291bnRyeShjb3VudHJ5OiBhbnkpIHtcbiAgICB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IGNvdW50cnk7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0UmV0dXJuVmFsdWUoY291bnRyeSk7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICB0aGlzLm9uU2VsZWN0LmVtaXQoY291bnRyeSk7XG4gICAgdGhpcy5wb3BvdmVyLmNsb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldFJldHVyblZhbHVlKGNvdW50cnk6IGFueSkge1xuICAgIHN3aXRjaCAodGhpcy5yZXR1cm5WYWx1ZSkge1xuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgcmV0dXJuIGNvdW50cnk7XG4gICAgICBjYXNlICdpc29BbHBoYTInOlxuICAgICAgICByZXR1cm4gY291bnRyeS5pc29BbHBoYTI7XG4gICAgICBjYXNlICdkaWFsQ29kZSc6XG4gICAgICAgIHJldHVybiBjb3VudHJ5LmRpYWxDb2RlO1xuICAgICAgY2FzZSAnbmFtZSc6XG4gICAgICAgIHJldHVybiBjb3VudHJ5Lm5hbWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gY291bnRyeS5pc29BbHBoYTI7XG4gICAgfVxuICB9XG5cbiAgb25Gb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLmlzRm9jdXNlZCA9IHRydWU7XG4gICAgdGhpcy5vbkZvY3VzQ2hhbmdlLmVtaXQoKTtcbiAgfVxuXG4gIG9uQmx1cigpOiB2b2lkIHtcbiAgICB0aGlzLmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgdGhpcy5vbkJsdXJDaGFuZ2UuZW1pdCgpO1xuICB9XG5cbiAgb25Qb3BvdmVyT3BlbigpIHtcbiAgICAvLyBBbmNob3IgdGhlIGFjdGl2ZSByb3cgdG8gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBjb3VudHJ5IChvciB0aGUgZmlyc3QpLlxuICAgIGNvbnN0IHNlbElkeCA9IHRoaXMuc2VsZWN0ZWRDb3VudHJ5XG4gICAgICA/IHRoaXMuc2hhZG93Q291bnRyaWVzLmZpbmRJbmRleChjID0+IGMuaXNvQWxwaGEyID09PSB0aGlzLnNlbGVjdGVkQ291bnRyeS5pc29BbHBoYTIpXG4gICAgICA6IC0xO1xuICAgIHRoaXMuYWN0aXZlSW5kZXggPSBzZWxJZHggPj0gMCA/IHNlbElkeCA6ICh0aGlzLnNoYWRvd0NvdW50cmllcy5sZW5ndGggPyAwIDogLTEpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5nZXRTZWFyY2hJbnB1dEVsKCk/LmZvY3VzKCk7XG4gICAgICB0aGlzLnN5bmNBY3RpdmVEZXNjZW5kYW50KCk7XG4gICAgICB0aGlzLnNjcm9sbEFjdGl2ZUludG9WaWV3KCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBvblBvcG92ZXJDbG9zZSgpIHtcbiAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gJyc7XG4gICAgdGhpcy5maWx0ZXJDb3VudHJpZXMoJycpO1xuICAgIHRoaXMuYWN0aXZlSW5kZXggPSAtMTtcbiAgICB0aGlzLm9uQmx1cigpO1xuICB9XG5cbiAgLy8gLS0tLSBLZXlib2FyZCBuYXZpZ2F0aW9uIChXQUktQVJJQSBsaXN0Ym94L2NvbWJvYm94IHBhdHRlcm4pIC0tLS1cblxuICBwcml2YXRlIGdldFNlYXJjaElucHV0RWwoKTogSFRNTElucHV0RWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnNlYXJjaElucHV0Py5uYXRpdmVFbGVtZW50Py5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpID8/IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHN5bmNBY3RpdmVEZXNjZW5kYW50KCkge1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5nZXRTZWFyY2hJbnB1dEVsKCk7XG4gICAgaWYgKCFpbnB1dCkgcmV0dXJuO1xuICAgIGNvbnN0IGlkID0gdGhpcy5hY3RpdmVEZXNjZW5kYW50SWQ7XG4gICAgaWYgKGlkKSBpbnB1dC5zZXRBdHRyaWJ1dGUoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcsIGlkKTtcbiAgICBlbHNlIGlucHV0LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50Jyk7XG4gIH1cblxuICBwcml2YXRlIHNjcm9sbEFjdGl2ZUludG9WaWV3KCkge1xuICAgIGlmICh0aGlzLmFjdGl2ZUluZGV4IDwgMCkgcmV0dXJuO1xuICAgIGRvY3VtZW50XG4gICAgICAuZ2V0RWxlbWVudEJ5SWQoYCR7dGhpcy5pZH0tb3B0aW9uLSR7dGhpcy5hY3RpdmVJbmRleH1gKVxuICAgICAgPy5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiAnbmVhcmVzdCcgfSk7XG4gIH1cblxuICBwcml2YXRlIG1vdmVBY3RpdmUoZGVsdGE6IG51bWJlcikge1xuICAgIGlmICghdGhpcy5zaGFkb3dDb3VudHJpZXMubGVuZ3RoKSByZXR1cm47XG4gICAgY29uc3QgbmV4dCA9IHRoaXMuYWN0aXZlSW5kZXggPCAwXG4gICAgICA/IChkZWx0YSA+IDAgPyAwIDogdGhpcy5zaGFkb3dDb3VudHJpZXMubGVuZ3RoIC0gMSlcbiAgICAgIDogdGhpcy5hY3RpdmVJbmRleCArIGRlbHRhO1xuICAgIC8vIENsYW1wIChubyB3cmFwLCBtYXRjaGluZyBzaGFkY24pLlxuICAgIHRoaXMuYWN0aXZlSW5kZXggPSBNYXRoLm1heCgwLCBNYXRoLm1pbihuZXh0LCB0aGlzLnNoYWRvd0NvdW50cmllcy5sZW5ndGggLSAxKSk7XG4gICAgdGhpcy5zeW5jQWN0aXZlRGVzY2VuZGFudCgpO1xuICAgIHRoaXMuc2Nyb2xsQWN0aXZlSW50b1ZpZXcoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2VsZWN0QWN0aXZlKCkge1xuICAgIGNvbnN0IGNvdW50cnkgPSB0aGlzLnNoYWRvd0NvdW50cmllc1t0aGlzLmFjdGl2ZUluZGV4XTtcbiAgICBpZiAoIWNvdW50cnkpIHJldHVybjtcbiAgICB0aGlzLnNlbGVjdENvdW50cnkoY291bnRyeSk7IC8vIGNsb3NlcyB0aGUgcG9wb3ZlclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuaWQpPy5mb2N1cygpO1xuICB9XG5cbiAgb25UcmlnZ2VyS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHJldHVybjtcbiAgICBpZiAodGhpcy5wb3BvdmVyPy5pc09wZW4pIHJldHVybjsgLy8gb25jZSBvcGVuLCBmb2N1cyBtb3ZlcyB0byB0aGUgc2VhcmNoIGlucHV0XG4gICAgY29uc3Qga2V5ID0gZXZlbnQua2V5O1xuICAgIGlmIChrZXkgPT09ICdBcnJvd0Rvd24nIHx8IGtleSA9PT0gJ0Fycm93VXAnIHx8IGtleSA9PT0gJ0VudGVyJyB8fCBrZXkgPT09ICcgJyB8fCBrZXkgPT09ICdIb21lJyB8fCBrZXkgPT09ICdFbmQnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5wb3BvdmVyLm9wZW4oKTtcbiAgICB9IGVsc2UgaWYgKGtleS5sZW5ndGggPT09IDEgJiYgIWV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50Lm1ldGFLZXkgJiYgIWV2ZW50LmFsdEtleSkge1xuICAgICAgLy8gQW55IHByaW50YWJsZSBjaGFyYWN0ZXIgb3BlbnMgdGhlIHBvcG92ZXIgKGZvY3VzIG1vdmVzIHRvIHRoZSBzZWFyY2ggYm94KS5cbiAgICAgIHRoaXMucG9wb3Zlci5vcGVuKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gS2V5ZG93biB3aGlsZSB0aGUgc2VhcmNoIGlucHV0IGlzIGZvY3VzZWQuIEFycm93cy9FbnRlci9Fc2NhcGUgZHJpdmUgdGhlXG4gIC8vIGxpc3Q7IG90aGVyIGtleXMgKGluY2wuIEhvbWUvRW5kIGZvciBjYXJldCkgZmFsbCB0aHJvdWdoIHRvIHRleHQgZWRpdGluZy5cbiAgb25TZWFyY2hLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLnBvcG92ZXI/LmlzT3BlbikgcmV0dXJuO1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOiBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyB0aGlzLm1vdmVBY3RpdmUoMSk7IGJyZWFrO1xuICAgICAgY2FzZSAnQXJyb3dVcCc6IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IHRoaXMubW92ZUFjdGl2ZSgtMSk7IGJyZWFrO1xuICAgICAgY2FzZSAnRW50ZXInOiBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyB0aGlzLnNlbGVjdEFjdGl2ZSgpOyBicmVhaztcbiAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMucG9wb3Zlci5jbG9zZSgpO1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmlkKT8uZm9jdXMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZENvdW50cnkgPSB0aGlzLmNvdW50cnlDb2Rlc1NlcnZpY2UuY291bnRyaWVzLmZpbmQoYyA9PiB7XG4gICAgICAgIGlmICh0aGlzLnJldHVyblZhbHVlID09PSAnb2JqZWN0JykgcmV0dXJuIGMuaXNvQWxwaGEyID09PSB2YWx1ZS5pc29BbHBoYTI7XG4gICAgICAgIGlmICh0aGlzLnJldHVyblZhbHVlID09PSAnaXNvQWxwaGEyJykgcmV0dXJuIGMuaXNvQWxwaGEyID09PSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMucmV0dXJuVmFsdWUgPT09ICdkaWFsQ29kZScpIHJldHVybiBjLmRpYWxDb2RlID09PSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMucmV0dXJuVmFsdWUgPT09ICduYW1lJykgcmV0dXJuIGMubmFtZSA9PT0gdmFsdWU7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG59XG4iXX0=
539
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRyeS1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90b2xsZS9zcmMvbGliL2NvdW50cnktc2VsZWN0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFVBQVUsRUFDVixNQUFNLEVBRU4sU0FBUyxFQUNULFVBQVUsRUFDVixpQkFBaUIsRUFDakIsTUFBTSxFQUNOLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsWUFBWSxFQUFtQixNQUFNLDJCQUEyQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sWUFBWSxDQUFDOzs7O0FBd0hoQyxNQUFNLE9BQU8sd0JBQXdCO0lBQzFCLEVBQUUsR0FBRyxvQkFBb0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDbkUsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNYLElBQUksR0FBRyxFQUFFLENBQUM7SUFDVixZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDZCxlQUFlLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCLFdBQVcsR0FBRyxnQkFBZ0Is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LFdBQ1AsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsQ0FBQyxhQUMzRDt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSx5QkFBeUIsQ0FBQzs0QkFDdkQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0YsWUFDUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3R1Q7OEJBR1EsRUFBRTtzQkFBVixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFFSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFFZSxPQUFPO3NCQUE1QixTQUFTO3VCQUFDLFNBQVM7Z0JBQzRCLFdBQVc7c0JBQTFELFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIGZvcndhcmRSZWYsXG4gIGluamVjdCxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SLCBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZVJlc291cmNlVXJsIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBDb3VudHJ5Q29kZXNTZXJ2aWNlIH0gZnJvbSAnLi9jb3VudHJ5LWNvZGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJy4vcG9wb3Zlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW5wdXRDb21wb25lbnQgfSBmcm9tICcuL2lucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4vdXRpbHMvY24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0b2xsZS1jb3VudHJ5LXNlbGVjdG9yJyxcbiAgc3R5bGVzOiBbJzpob3N0IHsgZGlzcGxheTogYmxvY2s7IH0nXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIFBvcG92ZXJDb21wb25lbnQsIElucHV0Q29tcG9uZW50XSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDb3VudHJ5U2VsZWN0b3JDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGwgZmxleC1jb2wgZ2FwLTEuNVwiPlxuICAgICAgPGxhYmVsICpuZ0lmPVwibGFiZWxcIiBbZm9yXT1cImlkXCIgW2NsYXNzXT1cImNvbXB1dGVkTGFiZWxDbGFzc1wiPlxuICAgICAgICB7eyBsYWJlbCB9fVxuICAgICAgPC9sYWJlbD5cblxuICAgICAgPHRvbGxlLXBvcG92ZXJcbiAgICAgICAgI3BvcG92ZXJcbiAgICAgICAgW3BsYWNlbWVudF09XCInYm90dG9tLXN0YXJ0J1wiXG4gICAgICAgIChvbk9wZW4pPVwib25Qb3BvdmVyT3BlbigpXCJcbiAgICAgICAgKG9uQ2xvc2UpPVwib25Qb3BvdmVyQ2xvc2UoKVwiPlxuICAgICAgICA8ZGl2IHRyaWdnZXIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtpZF09XCJpZFwiXG4gICAgICAgICAgICByb2xlPVwiY29tYm9ib3hcIlxuICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cImxpc3Rib3hcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJwb3BvdmVyPy5pc09wZW5cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50XT1cInBvcG92ZXI/LmlzT3BlbiA/IGFjdGl2ZURlc2NlbmRhbnRJZCA6IG51bGxcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJjb21wdXRlZFRyaWdnZXJDbGFzc1wiXG4gICAgICAgICAgICAoYmx1cik9XCJvbkJsdXIoKVwiXG4gICAgICAgICAgICAoZm9jdXMpPVwib25Gb2N1cygpXCJcbiAgICAgICAgICAgIChrZXlkb3duKT1cIm9uVHJpZ2dlcktleURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiZXJyb3JcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJlcnJvciAmJiBlcnJvck1lc3NhZ2UgPyBpZCArICctZXJyb3InIDogbnVsbFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHRydW5jYXRlXCI+XG4gICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkQ291bnRyeVwiXG4gICAgICAgICAgICAgICAgW3NyY109XCJnZXRGbGFnVXJsKHNlbGVjdGVkQ291bnRyeS5mbGFnKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJoLTQgdy02IGZsZXgtc2hyaW5rLTAgcm91bmRlZC1zbSBib3JkZXIgYm9yZGVyLWJvcmRlciBvYmplY3QtY292ZXJcIlxuICAgICAgICAgICAgICAgIFthbHRdPVwic2VsZWN0ZWRDb3VudHJ5Lm5hbWVcIiAvPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNlbGVjdGVkQ291bnRyeSAmJiBzaG93TmFtZVwiIGNsYXNzPVwidHJ1bmNhdGUgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICB7eyBzZWxlY3RlZENvdW50cnkubmFtZSB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXNlbGVjdGVkQ291bnRyeVwiIGNsYXNzPVwidHJ1bmNhdGUgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICAgICAge3sgcGxhY2Vob2xkZXIgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8aSBbY2xhc3NdPVwiaWNvbkNsYXNzXCI+PC9pPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJmbGV4IG1pbi13LVszMDBweF0gbWF4LXctWzQwMHB4XSBmbGV4LWNvbCBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWJvcmRlciBiZy1wb3BvdmVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIHNoYWRvdy1tZFwiXG4gICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RpY2t5IHRvcC0wIHotMTAgYm9yZGVyLWIgYm9yZGVyLWJvcmRlciBiZy1wb3BvdmVyIHAtMiBzaGFkb3ctc21cIj5cbiAgICAgICAgICAgIDx0b2xsZS1pbnB1dFxuICAgICAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBjb3VudHJ5Li4uXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hRdWVyeVwiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckNvdW50cmllcygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGtleWRvd24pPVwib25TZWFyY2hLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbFwiXG4gICAgICAgICAgICAgICNzZWFyY2hJbnB1dD5cbiAgICAgICAgICAgICAgPGkgcHJlZml4IGNsYXNzPVwicmktc2VhcmNoLWxpbmVcIj48L2k+XG4gICAgICAgICAgICA8L3RvbGxlLWlucHV0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiByb2xlPVwibGlzdGJveFwiIGNsYXNzPVwibWF4LWgtWzMwMHB4XSBvdmVyZmxvdy15LWF1dG8gcC0xXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb3VudHJ5IG9mIHNoYWRvd0NvdW50cmllczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAgIFtpZF09XCJpZCArICctb3B0aW9uLScgKyBpXCJcbiAgICAgICAgICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwic2VsZWN0ZWRDb3VudHJ5Py5pc29BbHBoYTIgPT09IGNvdW50cnkuaXNvQWxwaGEyXCJcbiAgICAgICAgICAgICAgW2F0dHIuZGF0YS1oaWdobGlnaHRlZF09XCJpID09PSBhY3RpdmVJbmRleCA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RDb3VudHJ5KGNvdW50cnkpXCJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cImdldEl0ZW1DbGFzcyhjb3VudHJ5LCBpKVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGdhcC0zXCI+XG4gICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgW3NyY109XCJnZXRGbGFnVXJsKGNvdW50cnkuZmxhZylcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoLTQgdy02IGZsZXgtc2hyaW5rLTAgcm91bmRlZC1zbSBib3JkZXIgYm9yZGVyLWJvcmRlciBvYmplY3QtY292ZXJcIlxuICAgICAgICAgICAgICAgICAgW2FsdF09XCJjb3VudHJ5Lm5hbWVcIiAvPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmxleC0xIHRydW5jYXRlIHRleHQtc21cIj57eyBjb3VudHJ5Lm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPnt7IGNvdW50cnkuZGlhbENvZGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRDb3VudHJ5Py5pc29BbHBoYTIgPT09IGNvdW50cnkuaXNvQWxwaGEyXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicmktY2hlY2stbGluZSB0ZXh0LXByaW1hcnlcIj48L2k+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICpuZ0lmPVwic2hhZG93Q291bnRyaWVzLmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwicHktNiB0ZXh0LWNlbnRlciB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuICAgICAgICAgICAgICBObyBjb3VudHJpZXMgZm91bmQuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3RvbGxlLXBvcG92ZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZGlzYWJsZWRcIj5cbiAgICAgICAgPHBcbiAgICAgICAgICAqbmdJZj1cImhpbnQgJiYgIWVycm9yXCJcbiAgICAgICAgICBjbGFzcz1cInB4LTEgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmQgdHJhbnNpdGlvbi1vcGFjaXR5IGR1cmF0aW9uLTIwMFwiXG4gICAgICAgICAgW2NsYXNzLm9wYWNpdHktMF09XCJpc0ZvY3VzZWQgJiYgaGlkZUhpbnRPbkZvY3VzXCI+XG4gICAgICAgICAge3sgaGludCB9fVxuICAgICAgICA8L3A+XG4gICAgICAgIDxwXG4gICAgICAgICAgKm5nSWY9XCJlcnJvciAmJiBlcnJvck1lc3NhZ2VcIlxuICAgICAgICAgIFtpZF09XCJpZCArICctZXJyb3InXCJcbiAgICAgICAgICBjbGFzcz1cInB4LTEgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LWRlc3RydWN0aXZlXCI+XG4gICAgICAgICAge3sgZXJyb3JNZXNzYWdlIH19XG4gICAgICAgIDwvcD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBDb3VudHJ5U2VsZWN0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgQElucHV0KCkgaWQgPSBgY291bnRyeS1zZWxlY3Rvci0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCA5KX1gO1xuICBASW5wdXQoKSBsYWJlbCA9ICcnO1xuICBASW5wdXQoKSBoaW50ID0gJyc7XG4gIEBJbnB1dCgpIGVycm9yTWVzc2FnZSA9ICcnO1xuICBASW5wdXQoKSBlcnJvciA9IGZhbHNlO1xuICBASW5wdXQoKSBoaWRlSGludE9uRm9jdXMgPSB0cnVlO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICdTZWxlY3QgY291bnRyeSc7XG4gIEBJbnB1dCgpIGNsYXNzID0gJyc7XG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNpemU6ICd4cycgfCAnc20nIHwgJ2RlZmF1bHQnIHwgJ2xnJyA9ICdkZWZhdWx0JztcbiAgQElucHV0KCkgZGVmYXVsdENvdW50cnlDb2RlID0gJ0dIJztcbiAgQElucHV0KCkgcmV0dXJuVmFsdWU6ICdvYmplY3QnIHwgJ2lzb0FscGhhMicgfCAnZGlhbENvZGUnIHwgJ25hbWUnID0gJ2lzb0FscGhhMic7XG4gIEBJbnB1dCgpIHNob3dOYW1lID0gdHJ1ZTtcbiAgQElucHV0KCkgZXh0ZXJuYWxGb2N1c2VkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gIEBPdXRwdXQoKSBvblNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb25Gb2N1c0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIG9uQmx1ckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBAVmlld0NoaWxkKCdwb3BvdmVyJykgcG9wb3ZlciE6IFBvcG92ZXJDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaElucHV0JywgeyByZWFkOiBFbGVtZW50UmVmIH0pIHNlYXJjaElucHV0PzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgcHJpdmF0ZSBjb3VudHJ5Q29kZXNTZXJ2aWNlID0gaW5qZWN0KENvdW50cnlDb2Rlc1NlcnZpY2UpO1xuICBwcml2YXRlIHNhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xuICBwcml2YXRlIGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgdmFsdWU6IGFueSA9IG51bGw7XG4gIHNlbGVjdGVkQ291bnRyeTogYW55ID0gbnVsbDtcbiAgc2VhcmNoUXVlcnkgPSAnJztcbiAgc2hhZG93Q291bnRyaWVzOiBhbnlbXSA9IFtdO1xuICBpc0ZvY3VzZWQgPSBmYWxzZTtcblxuICAvLyBLZXlib2FyZCBuYXZpZ2F0aW9uIChhY3RpdmUtZGVzY2VuZGFudCkgc3RhdGUgb3ZlciB0aGUgZmlsdGVyZWQgcm93c1xuICBhY3RpdmVJbmRleCA9IC0xO1xuXG4gIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7fTtcbiAgb25Ub3VjaGVkOiBhbnkgPSAoKSA9PiB7fTtcblxuICBwcm90ZWN0ZWQgY24gPSBjbjtcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNoYWRvd0NvdW50cmllcyA9IHRoaXMuY291bnRyeUNvZGVzU2VydmljZS5jb3VudHJpZXM7XG4gICAgaWYgKHRoaXMuZGVmYXVsdENvdW50cnlDb2RlICYmICF0aGlzLnZhbHVlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IHRoaXMuY291bnRyeUNvZGVzU2VydmljZS5jb3VudHJpZXMuZmluZChcbiAgICAgICAgYyA9PiBjLmlzb0FscGhhMiA9PT0gdGhpcy5kZWZhdWx0Q291bnRyeUNvZGVcbiAgICAgICk7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZENvdW50cnkpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0UmV0dXJuVmFsdWUodGhpcy5zZWxlY3RlZENvdW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBjb21wdXRlZFRyaWdnZXJDbGFzcygpIHtcbiAgICBjb25zdCBmb2N1c2VkID0gdGhpcy5leHRlcm5hbEZvY3VzZWQgIT09IHVuZGVmaW5lZCA/IHRoaXMuZXh0ZXJuYWxGb2N1c2VkIDogdGhpcy5pc0ZvY3VzZWQ7XG4gICAgcmV0dXJuIGNuKFxuICAgICAgJ2ZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gYm9yZGVyIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMCcsXG4gICAgICAnYmctYmFja2dyb3VuZCB0ZXh0LWZvcmVncm91bmQnLFxuICAgICAgJ2JvcmRlci1pbnB1dCBzaGFkb3ctc20nLFxuICAgICAgdGhpcy5zaXplID09PSAneHMnICYmICdoLTggcHgtMiB0ZXh0LXhzJyxcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ3NtJyAmJiAnaC05IHB4LTMgdGV4dC1zbScsXG4gICAgICB0aGlzLnNpemUgPT09ICdkZWZhdWx0JyAmJiAnaC0xMCBweC0zIHRleHQtc20nLFxuICAgICAgdGhpcy5zaXplID09PSAnbGcnICYmICdoLTExIHB4LTQgdGV4dC1iYXNlJyxcbiAgICAgIC8vIFJvdW5kZWQgY29ybmVyc1xuICAgICAgJ3JvdW5kZWQtbWQnLFxuICAgICAgLy8gRm9jdXMgc3RhdGVcbiAgICAgICEodGhpcy5yZWFkb25seSB8fCB0aGlzLmRpc2FibGVkKSAmJiBbXG4gICAgICAgICdmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZScsXG4gICAgICAgICdmb2N1cy12aXNpYmxlOnJpbmctNCcsXG4gICAgICAgICdmb2N1cy12aXNpYmxlOnJpbmctcmluZy8zMCcsXG4gICAgICAgICdmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTAnLFxuICAgICAgICAnc2hhZG93LW5vbmUnLFxuICAgICAgICB0aGlzLmVycm9yID8gJ2ZvY3VzLXZpc2libGU6Ym9yZGVyLWRlc3RydWN0aXZlLzgwJyA6ICdmb2N1cy12aXNpYmxlOmJvcmRlci1wcmltYXJ5LzgwJyxcbiAgICAgIF0sXG4gICAgICAvLyBFeHRlcm5hbCBmb2N1cyBzdGF0ZSAod2hlbiBjb250cm9sbGVkIGJ5IHBhcmVudClcbiAgICAgICEodGhpcy5yZWFkb25seSB8fCB0aGlzLmRpc2FibGVkKSAmJlxuICAgICAgICBmb2N1c2VkICYmIFtcbiAgICAgICAgICAncmluZy00JyxcbiAgICAgICAgICAncmluZy1yaW5nLzMwJyxcbiAgICAgICAgICAncmluZy1vZmZzZXQtMCcsXG4gICAgICAgICAgJ3NoYWRvdy1ub25lJyxcbiAgICAgICAgICB0aGlzLmVycm9yID8gJ2JvcmRlci1kZXN0cnVjdGl2ZS84MCcgOiAnYm9yZGVyLXByaW1hcnkvODAnLFxuICAgICAgICBdLFxuICAgICAgISh0aGlzLnJlYWRvbmx5IHx8IHRoaXMuZGlzYWJsZWQpICYmICdob3Zlcjpib3JkZXItYWNjZW50JyxcbiAgICAgIC8vIEVycm9yIHN0YXRlXG4gICAgICB0aGlzLmVycm9yICYmIFtcbiAgICAgICAgJ2JvcmRlci1kZXN0cnVjdGl2ZScsXG4gICAgICAgICEodGhpcy5yZWFkb25seSB8fCB0aGlzLmRpc2FibGVkKSAmJiBmb2N1c2VkICYmICdyaW5nLWRlc3RydWN0aXZlLzMwJyxcbiAgICAgIF0sXG4gICAgICB0aGlzLmRpc2FibGVkICYmICdjdXJzb3Itbm90LWFsbG93ZWQgb3BhY2l0eS01MCBib3JkZXItb3BhY2l0eS01MCcsXG4gICAgICB0aGlzLnJlYWRvbmx5ICYmICdjdXJzb3ItZGVmYXVsdCBib3JkZXItZGFzaGVkJyxcbiAgICAgIHRoaXMuY2xhc3NcbiAgICApO1xuICB9XG5cbiAgZ2V0IGNvbXB1dGVkTGFiZWxDbGFzcygpIHtcbiAgICByZXR1cm4gY24oXG4gICAgICAndGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWZvcmVncm91bmQgbGVhZGluZy1ub25lIHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi0yMDAnLFxuICAgICAgdGhpcy5kaXNhYmxlZCAmJiAnb3BhY2l0eS01MCdcbiAgICApO1xuICB9XG5cbiAgZ2V0IGljb25DbGFzcygpIHtcbiAgICByZXR1cm4gY24oXG4gICAgICAncmktYXJyb3ctZG93bi1zLWxpbmUgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIG1sLTIgdHJhbnNpdGlvbi10cmFuc2Zvcm0gZHVyYXRpb24tMjAwJyxcbiAgICAgIHRoaXMucG9wb3Zlcj8uaXNPcGVuID8gJ3JvdGF0ZS0xODAnIDogJycsXG4gICAgICB0aGlzLnNpemUgPT09ICd4cycgfHwgdGhpcy5zaXplID09PSAnc20nID8gJ3RleHQtWzE0cHhdJyA6ICd0ZXh0LVsxOHB4XScsXG4gICAgICAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSAmJiAnb3BhY2l0eS0zMCdcbiAgICApO1xuICB9XG5cbiAgZ2V0SXRlbUNsYXNzKGNvdW50cnk6IGFueSwgaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkQ291bnRyeT8uaXNvQWxwaGEyID09PSBjb3VudHJ5Lmlzb0FscGhhMjtcbiAgICBjb25zdCBpc0FjdGl2ZSA9IGluZGV4ID09PSB0aGlzLmFjdGl2ZUluZGV4O1xuICAgIHJldHVybiBjbihcbiAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtMyBweS0yIGN1cnNvci1wb2ludGVyIHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTE1MCByb3VuZGVkLXNtIHctZnVsbCcsXG4gICAgICBpc1NlbGVjdGVkID8gJ2JnLWFjY2VudCB0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kJyA6ICdob3ZlcjpiZy1hY2NlbnQvNTAgdGV4dC1mb3JlZ3JvdW5kJyxcbiAgICAgIC8vIEFjdGl2ZS1kZXNjZW5kYW50IChrZXlib2FyZCkgaGlnaGxpZ2h0XG4gICAgICBpc0FjdGl2ZSAmJiAnYmctYWNjZW50IHRleHQtYWNjZW50LWZvcmVncm91bmQnXG4gICAgKTtcbiAgfVxuXG4gIGdldCBhY3RpdmVEZXNjZW5kYW50SWQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlSW5kZXggPj0gMCAmJiB0aGlzLmFjdGl2ZUluZGV4IDwgdGhpcy5zaGFkb3dDb3VudHJpZXMubGVuZ3RoXG4gICAgICA/IGAke3RoaXMuaWR9LW9wdGlvbi0ke3RoaXMuYWN0aXZlSW5kZXh9YFxuICAgICAgOiBudWxsO1xuICB9XG5cbiAgZ2V0RmxhZ1VybChmbGFnQmFzZTY0OiBzdHJpbmcpOiBTYWZlUmVzb3VyY2VVcmwge1xuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoJ2RhdGE6aW1hZ2UvKjtiYXNlNjQsJyArIGZsYWdCYXNlNjQpO1xuICB9XG5cbiAgZmlsdGVyQ291bnRyaWVzKHF1ZXJ5OiBzdHJpbmcpIHtcbiAgICBjb25zdCBmaWx0ZXIgPSAocXVlcnkgfHwgJycpLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIHRoaXMuc2hhZG93Q291bnRyaWVzID0gdGhpcy5jb3VudHJ5Q29kZXNTZXJ2aWNlLmNvdW50cmllcy5maWx0ZXIoXG4gICAgICBjID0+XG4gICAgICAgIGMubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlcikgfHxcbiAgICAgICAgYy5kaWFsQ29kZS5pbmNsdWRlcyhmaWx0ZXIpIHx8XG4gICAgICAgIGMuaXNvQWxwaGEyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyKVxuICAgICk7XG4gICAgLy8gUmUtYW5jaG9yIHRoZSBhY3RpdmUgcm93IHRvIHRoZSBmaXJzdCBtYXRjaCBhZnRlciBmaWx0ZXJpbmcuXG4gICAgdGhpcy5hY3RpdmVJbmRleCA9IHRoaXMuc2hhZG93Q291bnRyaWVzLmxlbmd0aCA/IDAgOiAtMTtcbiAgICB0aGlzLnN5bmNBY3RpdmVEZXNjZW5kYW50KCk7XG4gIH1cblxuICBzZWxlY3RDb3VudHJ5KGNvdW50cnk6IGFueSkge1xuICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5ID0gY291bnRyeTtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5nZXRSZXR1cm5WYWx1ZShjb3VudHJ5KTtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgIHRoaXMub25TZWxlY3QuZW1pdChjb3VudHJ5KTtcbiAgICB0aGlzLnBvcG92ZXIuY2xvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmV0dXJuVmFsdWUoY291bnRyeTogYW55KSB7XG4gICAgc3dpdGNoICh0aGlzLnJldHVyblZhbHVlKSB7XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICByZXR1cm4gY291bnRyeTtcbiAgICAgIGNhc2UgJ2lzb0FscGhhMic6XG4gICAgICAgIHJldHVybiBjb3VudHJ5Lmlzb0FscGhhMjtcbiAgICAgIGNhc2UgJ2RpYWxDb2RlJzpcbiAgICAgICAgcmV0dXJuIGNvdW50cnkuZGlhbENvZGU7XG4gICAgICBjYXNlICduYW1lJzpcbiAgICAgICAgcmV0dXJuIGNvdW50cnkubmFtZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBjb3VudHJ5Lmlzb0FscGhhMjtcbiAgICB9XG4gIH1cblxuICBvbkZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICB0aGlzLm9uRm9jdXNDaGFuZ2UuZW1pdCgpO1xuICB9XG5cbiAgb25CbHVyKCk6IHZvaWQge1xuICAgIHRoaXMuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICB0aGlzLm9uQmx1ckNoYW5nZS5lbWl0KCk7XG4gIH1cblxuICBvblBvcG92ZXJPcGVuKCkge1xuICAgIC8vIEFuY2hvciB0aGUgYWN0aXZlIHJvdyB0byB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNvdW50cnkgKG9yIHRoZSBmaXJzdCkuXG4gICAgY29uc3Qgc2VsSWR4ID0gdGhpcy5zZWxlY3RlZENvdW50cnlcbiAgICAgID8gdGhpcy5zaGFkb3dDb3VudHJpZXMuZmluZEluZGV4KGMgPT4gYy5pc29BbHBoYTIgPT09IHRoaXMuc2VsZWN0ZWRDb3VudHJ5Lmlzb0FscGhhMilcbiAgICAgIDogLTE7XG4gICAgdGhpcy5hY3RpdmVJbmRleCA9IHNlbElkeCA+PSAwID8gc2VsSWR4IDogKHRoaXMuc2hhZG93Q291bnRyaWVzLmxlbmd0aCA/IDAgOiAtMSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmdldFNlYXJjaElucHV0RWwoKT8uZm9jdXMoKTtcbiAgICAgIHRoaXMuc3luY0FjdGl2ZURlc2NlbmRhbnQoKTtcbiAgICAgIHRoaXMuc2Nyb2xsQWN0aXZlSW50b1ZpZXcoKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIG9uUG9wb3ZlckNsb3NlKCkge1xuICAgIHRoaXMuc2VhcmNoUXVlcnkgPSAnJztcbiAgICB0aGlzLmZpbHRlckNvdW50cmllcygnJyk7XG4gICAgdGhpcy5hY3RpdmVJbmRleCA9IC0xO1xuICAgIHRoaXMub25CbHVyKCk7XG4gIH1cblxuICAvLyAtLS0tIEtleWJvYXJkIG5hdmlnYXRpb24gKFdBSS1BUklBIGxpc3Rib3gvY29tYm9ib3ggcGF0dGVybikgLS0tLVxuXG4gIHByaXZhdGUgZ2V0U2VhcmNoSW5wdXRFbCgpOiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuc2VhcmNoSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykgPz8gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgc3luY0FjdGl2ZURlc2NlbmRhbnQoKSB7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLmdldFNlYXJjaElucHV0RWwoKTtcbiAgICBpZiAoIWlucHV0KSByZXR1cm47XG4gICAgY29uc3QgaWQgPSB0aGlzLmFjdGl2ZURlc2NlbmRhbnRJZDtcbiAgICBpZiAoaWQpIGlucHV0LnNldEF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50JywgaWQpO1xuICAgIGVsc2UgaW5wdXQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnKTtcbiAgfVxuXG4gIHByaXZhdGUgc2Nyb2xsQWN0aXZlSW50b1ZpZXcoKSB7XG4gICAgaWYgKHRoaXMuYWN0aXZlSW5kZXggPCAwKSByZXR1cm47XG4gICAgZG9jdW1lbnRcbiAgICAgIC5nZXRFbGVtZW50QnlJZChgJHt0aGlzLmlkfS1vcHRpb24tJHt0aGlzLmFjdGl2ZUluZGV4fWApXG4gICAgICA/LnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICduZWFyZXN0JyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbW92ZUFjdGl2ZShkZWx0YTogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLnNoYWRvd0NvdW50cmllcy5sZW5ndGgpIHJldHVybjtcbiAgICBjb25zdCBuZXh0ID0gdGhpcy5hY3RpdmVJbmRleCA8IDBcbiAgICAgID8gKGRlbHRhID4gMCA/IDAgOiB0aGlzLnNoYWRvd0NvdW50cmllcy5sZW5ndGggLSAxKVxuICAgICAgOiB0aGlzLmFjdGl2ZUluZGV4ICsgZGVsdGE7XG4gICAgLy8gQ2xhbXAgKG5vIHdyYXAsIG1hdGNoaW5nIHNoYWRjbikuXG4gICAgdGhpcy5hY3RpdmVJbmRleCA9IE1hdGgubWF4KDAsIE1hdGgubWluKG5leHQsIHRoaXMuc2hhZG93Q291bnRyaWVzLmxlbmd0aCAtIDEpKTtcbiAgICB0aGlzLnN5bmNBY3RpdmVEZXNjZW5kYW50KCk7XG4gICAgdGhpcy5zY3JvbGxBY3RpdmVJbnRvVmlldygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RBY3RpdmUoKSB7XG4gICAgY29uc3QgY291bnRyeSA9IHRoaXMuc2hhZG93Q291bnRyaWVzW3RoaXMuYWN0aXZlSW5kZXhdO1xuICAgIGlmICghY291bnRyeSkgcmV0dXJuO1xuICAgIHRoaXMuc2VsZWN0Q291bnRyeShjb3VudHJ5KTsgLy8gY2xvc2VzIHRoZSBwb3BvdmVyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5pZCk/LmZvY3VzKCk7XG4gIH1cblxuICBvblRyaWdnZXJLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLnBvcG92ZXI/LmlzT3BlbikgcmV0dXJuOyAvLyBvbmNlIG9wZW4sIGZvY3VzIG1vdmVzIHRvIHRoZSBzZWFyY2ggaW5wdXRcbiAgICBjb25zdCBrZXkgPSBldmVudC5rZXk7XG4gICAgaWYgKGtleSA9PT0gJ0Fycm93RG93bicgfHwga2V5ID09PSAnQXJyb3dVcCcgfHwga2V5ID09PSAnRW50ZXInIHx8IGtleSA9PT0gJyAnIHx8IGtleSA9PT0gJ0hvbWUnIHx8IGtleSA9PT0gJ0VuZCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnBvcG92ZXIub3BlbigpO1xuICAgIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA9PT0gMSAmJiAhZXZlbnQuY3RybEtleSAmJiAhZXZlbnQubWV0YUtleSAmJiAhZXZlbnQuYWx0S2V5KSB7XG4gICAgICAvLyBBbnkgcHJpbnRhYmxlIGNoYXJhY3RlciBvcGVucyB0aGUgcG9wb3ZlciAoZm9jdXMgbW92ZXMgdG8gdGhlIHNlYXJjaCBib3gpLlxuICAgICAgdGhpcy5wb3BvdmVyLm9wZW4oKTtcbiAgICB9XG4gIH1cblxuICAvLyBLZXlkb3duIHdoaWxlIHRoZSBzZWFyY2ggaW5wdXQgaXMgZm9jdXNlZC4gQXJyb3dzL0VudGVyL0VzY2FwZSBkcml2ZSB0aGVcbiAgLy8gbGlzdDsgb3RoZXIga2V5cyAoaW5jbC4gSG9tZS9FbmQgZm9yIGNhcmV0KSBmYWxsIHRocm91Z2ggdG8gdGV4dCBlZGl0aW5nLlxuICBvblNlYXJjaEtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMucG9wb3Zlcj8uaXNPcGVuKSByZXR1cm47XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IHRoaXMubW92ZUFjdGl2ZSgxKTsgYnJlYWs7XG4gICAgICBjYXNlICdBcnJvd1VwJzogZXZlbnQucHJldmVudERlZmF1bHQoKTsgdGhpcy5tb3ZlQWN0aXZlKC0xKTsgYnJlYWs7XG4gICAgICBjYXNlICdFbnRlcic6IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IHRoaXMuc2VsZWN0QWN0aXZlKCk7IGJyZWFrO1xuICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5wb3BvdmVyLmNsb3NlKCk7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuaWQpPy5mb2N1cygpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IHRoaXMuY291bnRyeUNvZGVzU2VydmljZS5jb3VudHJpZXMuZmluZChjID0+IHtcbiAgICAgICAgaWYgKHRoaXMucmV0dXJuVmFsdWUgPT09ICdvYmplY3QnKSByZXR1cm4gYy5pc29BbHBoYTIgPT09IHZhbHVlLmlzb0FscGhhMjtcbiAgICAgICAgaWYgKHRoaXMucmV0dXJuVmFsdWUgPT09ICdpc29BbHBoYTInKSByZXR1cm4gYy5pc29BbHBoYTIgPT09IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5yZXR1cm5WYWx1ZSA9PT0gJ2RpYWxDb2RlJykgcmV0dXJuIGMuZGlhbENvZGUgPT09IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5yZXR1cm5WYWx1ZSA9PT0gJ25hbWUnKSByZXR1cm4gYy5uYW1lID09PSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5ID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cbn1cbiJdfQ==
@@ -24,6 +24,43 @@ export class DataTableComponent {
24
24
  maxHeight;
25
25
  // Draws a physical border around the table itself (not the whole component).
26
26
  bordered = true;
27
+ // --- Background Colors ---
28
+ // All of these take Tailwind class strings (e.g. 'bg-card', 'bg-muted/40') so
29
+ // they stay theme-token aware and follow dark mode, matching `col.class`.
30
+ /** Background for the table surface, behind both header and rows. */
31
+ tableBackground = '';
32
+ /**
33
+ * Background for the header row. Must be opaque when `stickyHeader` is on,
34
+ * otherwise rows scroll visibly through the header — hence the default
35
+ * `bg-background` rather than transparent.
36
+ */
37
+ headerBackground = 'bg-background';
38
+ /** Alternating row backgrounds. Applied to odd rows only. */
39
+ striped = false;
40
+ /** Background applied to odd rows when `striped` is on. */
41
+ stripeBackground = 'bg-muted/30';
42
+ /**
43
+ * Per-row background, resolved against the row's own data — e.g.
44
+ * `[rowBackground]="r => r.overdue ? 'bg-destructive/10' : ''"`.
45
+ * Takes precedence over `striped`.
46
+ */
47
+ rowBackground;
48
+ /**
49
+ * A sticky header with no background lets rows scroll visibly through it, so
50
+ * fall back to an opaque default if a consumer clears `headerBackground`.
51
+ */
52
+ get resolvedHeaderBackground() {
53
+ if (this.stickyHeader && !this.headerBackground)
54
+ return 'bg-background';
55
+ return this.headerBackground;
56
+ }
57
+ /** Resolves the background for a body row: per-row callback wins over striping. */
58
+ getRowBackground(row, index) {
59
+ const custom = this.rowBackground?.(row, index);
60
+ if (custom)
61
+ return custom;
62
+ return this.striped && index % 2 === 1 ? this.stripeBackground : '';
63
+ }
27
64
  // --- Column Hiding Settings ---
28
65
  allowColumnHiding = true;
29
66
  showSettings = true;
@@ -180,7 +217,7 @@ export class DataTableComponent {
180
217
  return this.cellTemplates?.find(t => t.name === key);
181
218
  }
182
219
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DataTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
183
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: DataTableComponent, isStandalone: true, selector: "tolle-data-table", inputs: { data: "data", columns: "columns", searchable: "searchable", paginate: "paginate", pageSizeOptions: "pageSizeOptions", pageSize: "pageSize", expandable: "expandable", size: "size", stickyHeader: "stickyHeader", maxHeight: "maxHeight", bordered: "bordered", allowColumnHiding: "allowColumnHiding", showSettings: "showSettings", expandedTemplate: "expandedTemplate" }, queries: [{ propertyName: "cellTemplates", predicate: TolleCellDirective }], usesOnChanges: true, ngImport: i0, template: `
220
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: DataTableComponent, isStandalone: true, selector: "tolle-data-table", inputs: { data: "data", columns: "columns", searchable: "searchable", paginate: "paginate", pageSizeOptions: "pageSizeOptions", pageSize: "pageSize", expandable: "expandable", size: "size", stickyHeader: "stickyHeader", maxHeight: "maxHeight", bordered: "bordered", tableBackground: "tableBackground", headerBackground: "headerBackground", striped: "striped", stripeBackground: "stripeBackground", rowBackground: "rowBackground", allowColumnHiding: "allowColumnHiding", showSettings: "showSettings", expandedTemplate: "expandedTemplate" }, queries: [{ propertyName: "cellTemplates", predicate: TolleCellDirective }], usesOnChanges: true, ngImport: i0, template: `
184
221
  <div class="h-full flex flex-col w-full">
185
222
  <div class="flex items-center justify-between py-2 flex-none">
186
223
  <div *ngIf="searchable" class="w-full max-w-sm">
@@ -220,18 +257,18 @@ export class DataTableComponent {
220
257
  </tolle-popover>
221
258
  </div>
222
259
 
223
- <div [class]="cn('flex-1 min-h-0 overflow-hidden relative w-full', bordered ? 'rounded-md border border-border' : '')">
260
+ <div [class]="cn('flex-1 min-h-0 overflow-hidden relative w-full', bordered ? 'rounded-md border border-border' : '', tableBackground)">
224
261
  <div class="overflow-auto w-full h-full" [style.max-height]="maxHeight">
225
262
 
226
263
  <table class="w-full table-auto border-collapse">
227
- <thead class="border-b border-border bg-background">
264
+ <thead [class]="cn('border-b border-border', resolvedHeaderBackground)">
228
265
  <tr>
229
- <th *ngIf="expandable" scope="col" [class]="cn('px-4', size === 'xs' ? 'w-[32px]' : 'w-[48px]', stickyHeader ? 'sticky top-0 z-10 bg-background' : '')"></th>
266
+ <th *ngIf="expandable" scope="col" [class]="cn('px-4', size === 'xs' ? 'w-[32px]' : 'w-[48px]', stickyHeader ? 'sticky top-0 z-10 ' + resolvedHeaderBackground : '')"></th>
230
267
 
231
268
  <th *ngFor="let col of activeColumns"
232
269
  scope="col"
233
270
  [attr.aria-sort]="sortKey === col.key ? (sortDir === 'asc' ? 'ascending' : (sortDir === 'desc' ? 'descending' : 'none')) : 'none'"
234
- [class]="cn('text-left font-medium text-foreground',headerPaddingClass,fontSizeClass, col.class, stickyHeader ? 'sticky top-0 z-10 bg-background shadow-sm' : '')">
271
+ [class]="cn('text-left font-medium text-foreground',headerPaddingClass,fontSizeClass, col.class, stickyHeader ? 'sticky top-0 z-10 shadow-sm ' + resolvedHeaderBackground : '')">
235
272
 
236
273
  <button *ngIf="col.sortable; else plainHeader"
237
274
  type="button"
@@ -250,7 +287,7 @@ export class DataTableComponent {
250
287
 
251
288
  <tbody class="divide-y divide-border">
252
289
  <ng-container *ngFor="let row of pagedData; let i = index">
253
- <tr class="hover:bg-muted/50 transition-colors">
290
+ <tr [class]="cn('transition-colors', getRowBackground(row, i), 'hover:bg-muted/50')">
254
291
  <td *ngIf="expandable" class="px-4">
255
292
  <button (click)="toggleRow(i)"
256
293
  [attr.aria-label]="expandedRows.has(i) ? 'Collapse row' : 'Expand row'"
@@ -376,18 +413,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
376
413
  </tolle-popover>
377
414
  </div>
378
415
 
379
- <div [class]="cn('flex-1 min-h-0 overflow-hidden relative w-full', bordered ? 'rounded-md border border-border' : '')">
416
+ <div [class]="cn('flex-1 min-h-0 overflow-hidden relative w-full', bordered ? 'rounded-md border border-border' : '', tableBackground)">
380
417
  <div class="overflow-auto w-full h-full" [style.max-height]="maxHeight">
381
418
 
382
419
  <table class="w-full table-auto border-collapse">
383
- <thead class="border-b border-border bg-background">
420
+ <thead [class]="cn('border-b border-border', resolvedHeaderBackground)">
384
421
  <tr>
385
- <th *ngIf="expandable" scope="col" [class]="cn('px-4', size === 'xs' ? 'w-[32px]' : 'w-[48px]', stickyHeader ? 'sticky top-0 z-10 bg-background' : '')"></th>
422
+ <th *ngIf="expandable" scope="col" [class]="cn('px-4', size === 'xs' ? 'w-[32px]' : 'w-[48px]', stickyHeader ? 'sticky top-0 z-10 ' + resolvedHeaderBackground : '')"></th>
386
423
 
387
424
  <th *ngFor="let col of activeColumns"
388
425
  scope="col"
389
426
  [attr.aria-sort]="sortKey === col.key ? (sortDir === 'asc' ? 'ascending' : (sortDir === 'desc' ? 'descending' : 'none')) : 'none'"
390
- [class]="cn('text-left font-medium text-foreground',headerPaddingClass,fontSizeClass, col.class, stickyHeader ? 'sticky top-0 z-10 bg-background shadow-sm' : '')">
427
+ [class]="cn('text-left font-medium text-foreground',headerPaddingClass,fontSizeClass, col.class, stickyHeader ? 'sticky top-0 z-10 shadow-sm ' + resolvedHeaderBackground : '')">
391
428
 
392
429
  <button *ngIf="col.sortable; else plainHeader"
393
430
  type="button"
@@ -406,7 +443,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
406
443
 
407
444
  <tbody class="divide-y divide-border">
408
445
  <ng-container *ngFor="let row of pagedData; let i = index">
409
- <tr class="hover:bg-muted/50 transition-colors">
446
+ <tr [class]="cn('transition-colors', getRowBackground(row, i), 'hover:bg-muted/50')">
410
447
  <td *ngIf="expandable" class="px-4">
411
448
  <button (click)="toggleRow(i)"
412
449
  [attr.aria-label]="expandedRows.has(i) ? 'Collapse row' : 'Expand row'"
@@ -503,6 +540,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
503
540
  type: Input
504
541
  }], bordered: [{
505
542
  type: Input
543
+ }], tableBackground: [{
544
+ type: Input
545
+ }], headerBackground: [{
546
+ type: Input
547
+ }], striped: [{
548
+ type: Input
549
+ }], stripeBackground: [{
550
+ type: Input
551
+ }], rowBackground: [{
552
+ type: Input
506
553
  }], allowColumnHiding: [{
507
554
  type: Input
508
555
  }], showSettings: [{
@@ -513,4 +560,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
513
560
  }], expandedTemplate: [{
514
561
  type: Input
515
562
  }] } });
516
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90b2xsZS9zcmMvbGliL2RhdGEtdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQUUsS0FBSyxFQUNILGVBQWUsRUFDN0IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7OztBQStLekQsTUFBTSxPQUFPLGtCQUFrQjtJQUNwQixJQUFJLEdBQVUsRUFBRSxDQUFDO0lBQ2pCLE9BQU8sR0FBa0IsRUFBRSxDQUFDO0lBQzVCLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDbEIsUUFBUSxHQUFHLElBQUksQ0FBQztJQUNoQixlQUFlLEdBQWEsRUFBRSxDQUFBO0lBQzlCLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDZCxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBRW5CLElBQUksR0FBbUMsU0FBUyxDQUFDO0lBQ2pELFlBQVksR0FBRyxLQUFLLENBQUM7SUFDckIsU0FBUyxDQUFVO0lBRTVCLDZF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Qjt3QkFDdkIsaUJBQWlCO3FCQUNsQixZQUNTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnSlQ7OEJBR1EsSUFBSTtzQkFBWixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFHRyxRQUFRO3NCQUFoQixLQUFLO2dCQUdHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQVcrQixhQUFhO3NCQUFqRCxlQUFlO3VCQUFDLGtCQUFrQjtnQkFDMUIsZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLCBDb250ZW50Q2hpbGRyZW4sIFF1ZXJ5TGlzdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGNuIH0gZnJvbSAnLi91dGlscy9jbic7XG5pbXBvcnQgeyBQYWdpbmF0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9wYWdpbmF0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUb2xsZUNlbGxEaXJlY3RpdmUgfSBmcm9tICcuL3RvbGxlLWNlbGwuZGlyZWN0aXZlJztcbmltcG9ydCB7IElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJy4vcG9wb3Zlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9wb3ZlckNvbnRlbnRDb21wb25lbnQgfSBmcm9tICcuL3BvcG92ZXItY29udGVudC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuL2NoZWNrYm94LmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVDb2x1bW4ge1xuICBrZXk6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgc29ydGFibGU/OiBib29sZWFuO1xuICBjbGFzcz86IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtZGF0YS10YWJsZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHN0eWxlczogW2BcbiAgICA6aG9zdCB7IGRpc3BsYXk6IGJsb2NrOyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyB9XG4gICAgdGFibGUgeyB3aWR0aDogMTAwJTsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgZGlzcGxheTogdGFibGU7IH1cbiAgICB0aGVhZCB7IGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cDsgfVxuICAgIHRib2R5IHsgZGlzcGxheTogdGFibGUtcm93LWdyb3VwOyB9XG4gICAgdHIgeyBkaXNwbGF5OiB0YWJsZS1yb3c7IH1cbiAgICB0aCwgdGQgeyBkaXNwbGF5OiB0YWJsZS1jZWxsOyB9XG4gIGBdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFBhZ2luYXRpb25Db21wb25lbnQsXG4gICAgSW5wdXRDb21wb25lbnQsXG4gICAgUG9wb3ZlckNvbXBvbmVudCxcbiAgICBQb3BvdmVyQ29udGVudENvbXBvbmVudCxcbiAgICBDaGVja2JveENvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiaC1mdWxsIGZsZXggZmxleC1jb2wgdy1mdWxsXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB5LTIgZmxleC1ub25lXCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzZWFyY2hhYmxlXCIgY2xhc3M9XCJ3LWZ1bGwgbWF4LXctc21cIj5cbiAgICAgICAgICA8dG9sbGUtaW5wdXRcbiAgICAgICAgICAgIFtzaXplXT1cInNpemUgPT09ICdsZycgPyAnZGVmYXVsdCcgOiAnc20nXCJcbiAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJGaWx0ZXIgcmVjb3Jkc1wiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkZpbHRlciByZWNvcmRzLi4uXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGVybVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblNlYXJjaCgpXCI+XG4gICAgICAgICAgICA8aSBwcmVmaXggY2xhc3M9XCJyaS1zZWFyY2gtbGluZVwiPjwvaT5cbiAgICAgICAgICA8L3RvbGxlLWlucHV0PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8dG9sbGUtcG9wb3ZlciAqbmdJZj1cImFsbG93Q29sdW1uSGlkaW5nICYmIHNob3dTZXR0aW5nc1wiIGNsYXNzPVwibWwtYXV0b1wiPlxuICAgICAgICAgIDxidXR0b24gdHJpZ2dlclxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNuKFxuICAgICAgICAgICAgICAnbWwtYXV0byBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItaW5wdXQgYmctYmFja2dyb3VuZCBweC0zIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIHRyYW5zaXRpb24tY29sb3JzIG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZycsXG4gICAgICAgICAgICAgIHNpemUgPT09ICd4cycgPyAnaC03IHRleHQteHMnIDogJ2gtOSB0ZXh0LXNtJ1xuICAgICAgICAgICAgKVwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJyaS1zZXR0aW5ncy0zLWxpbmVcIj48L2k+XG4gICAgICAgICAgICBWaWV3XG4gICAgICAgICAgICA8aSBjbGFzcz1cInJpLWFycm93LWRvd24tcy1saW5lIG1sLTEgb3BhY2l0eS01MFwiPjwvaT5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8dG9sbGUtcG9wb3Zlci1jb250ZW50IGNsYXNzPVwidy01NiBwLTAgYmctYmFja2dyb3VuZCBib3JkZXItYm9yZGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC0yIGJvcmRlci1iIGJvcmRlci1ib3JkZXJcIj5cbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBweC0yXCI+VG9nZ2xlIENvbHVtbnM8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTIgbWF4LWgtWzMwMHB4XSBvdmVyZmxvdy15LWF1dG8gc3BhY2UteS0xXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTIgcHktMS41IHJvdW5kZWQtc20gaG92ZXI6YmctYWNjZW50IGN1cnNvci1wb2ludGVyIHRleHQtc20gdHJhbnNpdGlvbi1jb2xvcnNcIj5cbiAgICAgICAgICAgICAgICA8dG9sbGUtY2hlY2tib3ggW25nTW9kZWxdPVwiY29sdW1uVmlzaWJpbGl0eVtjb2wua2V5XVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInRvZ2dsZUNvbHVtbihjb2wua2V5KVwiLz5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBjb2wubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3RvbGxlLXBvcG92ZXItY29udGVudD5cbiAgICAgICAgPC90b2xsZS1wb3BvdmVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgW2NsYXNzXT1cImNuKCdmbGV4LTEgbWluLWgtMCBvdmVyZmxvdy1oaWRkZW4gcmVsYXRpdmUgdy1mdWxsJywgYm9yZGVyZWQgPyAncm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWJvcmRlcicgOiAnJylcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gdy1mdWxsIGgtZnVsbFwiIFtzdHlsZS5tYXgtaGVpZ2h0XT1cIm1heEhlaWdodFwiPlxuXG4gICAgICAgICAgPHRhYmxlIGNsYXNzPVwidy1mdWxsIHRhYmxlLWF1dG8gYm9yZGVyLWNvbGxhcHNlXCI+XG4gICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJib3JkZXItYiBib3JkZXItYm9yZGVyIGJnLWJhY2tncm91bmRcIj5cbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgPHRoICpuZ0lmPVwiZXhwYW5kYWJsZVwiIHNjb3BlPVwiY29sXCIgW2NsYXNzXT1cImNuKCdweC00Jywgc2l6ZSA9PT0gJ3hzJyA/ICd3LVszMnB4XScgOiAndy1bNDhweF0nLCBzdGlja3lIZWFkZXIgPyAnc3RpY2t5IHRvcC0wIHotMTAgYmctYmFja2dyb3VuZCcgOiAnJylcIj48L3RoPlxuXG4gICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29sIG9mIGFjdGl2ZUNvbHVtbnNcIlxuICAgICAgICAgICAgICAgICAgc2NvcGU9XCJjb2xcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zb3J0XT1cInNvcnRLZXkgPT09IGNvbC5rZXkgPyAoc29ydERpciA9PT0gJ2FzYycgPyAnYXNjZW5kaW5nJyA6IChzb3J0RGlyID09PSAnZGVzYycgPyAnZGVzY2VuZGluZycgOiAnbm9uZScpKSA6ICdub25lJ1wiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY24oJ3RleHQtbGVmdCBmb250LW1lZGl1bSB0ZXh0LWZvcmVncm91bmQnLGhlYWRlclBhZGRpbmdDbGFzcyxmb250U2l6ZUNsYXNzLCBjb2wuY2xhc3MsIHN0aWNreUhlYWRlciA/ICdzdGlja3kgdG9wLTAgei0xMCBiZy1iYWNrZ3JvdW5kIHNoYWRvdy1zbScgOiAnJylcIj5cblxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJjb2wuc29ydGFibGU7IGVsc2UgcGxhaW5IZWFkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU29ydChjb2wua2V5KVwiXG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIGN1cnNvci1wb2ludGVyIHNlbGVjdC1ub25lIGZvY3VzLXZpc2libGU6b3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1yaW5nIHJvdW5kZWQtc21cIj5cbiAgICAgICAgICAgICAgICAgIHt7IGNvbC5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cImdldFNvcnRJY29uKGNvbC5rZXkpXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNwbGFpbkhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIHt7IGNvbC5sYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90aGVhZD5cblxuICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiZGl2aWRlLXkgZGl2aWRlLWJvcmRlclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm93IG9mIHBhZ2VkRGF0YTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJob3ZlcjpiZy1tdXRlZC81MCB0cmFuc2l0aW9uLWNvbG9yc1wiPlxuICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cImV4cGFuZGFibGVcIiBjbGFzcz1cInB4LTRcIj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInRvZ2dsZVJvdyhpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZXhwYW5kZWRSb3dzLmhhcyhpKSA/ICdDb2xsYXBzZSByb3cnIDogJ0V4cGFuZCByb3cnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJleHBhbmRlZFJvd3MuaGFzKGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNuKFxuICAgICAgICAgICAgICAgICAgICAgICdyb3VuZGVkLW1kIGhvdmVyOmJnLWFjY2VudCB0cmFuc2l0aW9uLWNvbG9ycyBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZycsXG4gICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9PT0gJ3hzJyA/ICdoLTYgdy02JyA6ICdoLTggdy04J1xuICAgICAgICAgICAgICAgICAgICApXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJleHBhbmRlZFJvd3MuaGFzKGkpXG4gICAgICAgICAgICAgICAgPyAncmktYXJyb3ctZG93bi1zLWxpbmUnXG4gICAgICAgICAgICAgICAgOiAncmktYXJyb3ctcmlnaHQtcy1saW5lJ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L3RkPlxuXG4gICAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2wgb2YgYWN0aXZlQ29sdW1uc1wiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjbignYWxpZ24tbWlkZGxlJyxjZWxsUGFkZGluZ0NsYXNzLGZvbnRTaXplQ2xhc3MsY29sLmNsYXNzKVwiPlxuXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0VGVtcGxhdGUoY29sLmtleSkgYXMgY2VsbDsgZWxzZSBkZWZhdWx0Q2VsbFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjZWxsLnRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93W2NvbC5rZXldLCByb3c6IHJvdyB9XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdENlbGw+XG4gICAgICAgICAgICAgICAgICAgIHt7IHJvd1tjb2wua2V5XSB9fVxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8L3RyPlxuXG4gICAgICAgICAgICAgIDx0ciAqbmdJZj1cImV4cGFuZGVkUm93cy5oYXMoaSlcIiBjbGFzcz1cImJnLW11dGVkLzEwXCI+XG4gICAgICAgICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwiYWN0aXZlQ29sdW1ucy5sZW5ndGggKyAoZXhwYW5kYWJsZSA/IDEgOiAwKVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC0wXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC02IGJvcmRlci10IGJvcmRlci1kYXNoZWQgYm9yZGVyLWJvcmRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZXhwYW5kZWRUZW1wbGF0ZTsgZWxzZSBub0V4cGFuZGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJleHBhbmRlZFRlbXBsYXRlOyBjb250ZXh0OiB7IHJvdzogcm93IH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0V4cGFuZGVkPlxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmQgaXRhbGljXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBObyBkZXRhaWxzIGF2YWlsYWJsZS5cbiAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDx0ciAqbmdJZj1cInBhZ2VkRGF0YS5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwiYWN0aXZlQ29sdW1ucy5sZW5ndGggKyAoZXhwYW5kYWJsZSA/IDEgOiAwKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImgtMjQgdGV4dC1jZW50ZXIgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICAgICAgTm8gcmVzdWx0cyBmb3VuZC5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LW5vbmVcIj5cbiAgICAgICAgPHRvbGxlLXBhZ2luYXRpb25cbiAgICAgICAgICAqbmdJZj1cInBhZ2luYXRlICYmIGZpbHRlcmVkRGF0YS5sZW5ndGggPiAwXCJcbiAgICAgICAgICBbdG90YWxSZWNvcmRzXT1cImZpbHRlcmVkRGF0YS5sZW5ndGhcIlxuICAgICAgICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnZVNpemVPcHRpb25zXCJcbiAgICAgICAgICBbY3VycmVudFBhZ2VdPVwiY3VycmVudFBhZ2VcIlxuICAgICAgICAgIFtjdXJyZW50UGFnZVNpemVdPVwicGFnZVNpemVcIlxuICAgICAgICAgIChvblBhZ2VOdW1iZXJDaGFuZ2UpPVwiaGFuZGxlUGFnZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAob25QYWdlU2l6ZUNoYW5nZSk9XCJoYW5kbGVQYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgPjwvdG9sbGUtcGFnaW5hdGlvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIERhdGFUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgZGF0YTogYW55W10gPSBbXTtcbiAgQElucHV0KCkgY29sdW1uczogVGFibGVDb2x1bW5bXSA9IFtdO1xuICBASW5wdXQoKSBzZWFyY2hhYmxlID0gdHJ1ZTtcbiAgQElucHV0KCkgcGFnaW5hdGUgPSB0cnVlO1xuICBASW5wdXQoKSBwYWdlU2l6ZU9wdGlvbnM6IG51bWJlcltdID0gW11cbiAgQElucHV0KCkgcGFnZVNpemUgPSAxMDtcbiAgQElucHV0KCkgZXhwYW5kYWJsZSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHNpemU6ICd4cycgfCAnc20nIHwgJ2RlZmF1bHQnIHwgJ2xnJyA9ICdkZWZhdWx0JztcbiAgQElucHV0KCkgc3RpY2t5SGVhZGVyID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1heEhlaWdodD86IHN0cmluZztcblxuICAvLyBEcmF3cyBhIHBoeXNpY2FsIGJvcmRlciBhcm91bmQgdGhlIHRhYmxlIGl0c2VsZiAobm90IHRoZSB3aG9sZSBjb21wb25lbnQpLlxuICBASW5wdXQoKSBib3JkZXJlZCA9IHRydWU7XG5cbiAgLy8gLS0tIENvbHVtbiBIaWRpbmcgU2V0dGluZ3MgLS0tXG4gIEBJbnB1dCgpIGFsbG93Q29sdW1uSGlkaW5nID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd1NldHRpbmdzID0gdHJ1ZTtcblxuICAvLyBUcmFjayB2aXNpYmlsaXR5IHN0YXRlXG4gIGNvbHVtblZpc2liaWxpdHk6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cbiAgLy8gRmlsdGVycyBjb2x1bW5zIGJhc2VkIG9uIHZpc2liaWxpdHkgc3RhdGVcbiAgZ2V0IGFjdGl2ZUNvbHVtbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maWx0ZXIoY29sID0+IHRoaXMuY29sdW1uVmlzaWJpbGl0eVtjb2wua2V5XSk7XG4gIH1cblxuICBleHBhbmRlZFJvd3MgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgQENvbnRlbnRDaGlsZHJlbihUb2xsZUNlbGxEaXJlY3RpdmUpIGNlbGxUZW1wbGF0ZXMhOiBRdWVyeUxpc3Q8VG9sbGVDZWxsRGlyZWN0aXZlPjtcbiAgQElucHV0KCkgZXhwYW5kZWRUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgZmlsdGVyZWREYXRhOiBhbnlbXSA9IFtdO1xuICBwYWdlZERhdGE6IGFueVtdID0gW107XG4gIHNlYXJjaFRlcm0gPSAnJztcbiAgY3VycmVudFBhZ2UgPSAxO1xuICBzb3J0S2V5ID0gJyc7XG4gIHNvcnREaXI6ICdhc2MnIHwgJ2Rlc2MnIHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gU3R5bGUgR2V0dGVyc1xuICBnZXQgY2VsbFBhZGRpbmdDbGFzcygpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodGhpcy5zaXplKSB7XG4gICAgICBjYXNlICd4cyc6IHJldHVybiAncC0xIHB4LTQnO1xuICAgICAgY2FzZSAnc20nOiByZXR1cm4gJ3AtMiBweC00JztcbiAgICAgIGNhc2UgJ2xnJzogcmV0dXJuICdwLTYgcHgtNCc7XG4gICAgICBkZWZhdWx0OiByZXR1cm4gJ3AtNCc7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGhlYWRlclBhZGRpbmdDbGFzcygpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodGhpcy5zaXplKSB7XG4gICAgICBjYXNlICd4cyc6IHJldHVybiAnaC03IHB4LTQnO1xuICAgICAgY2FzZSAnc20nOiByZXR1cm4gJ2gtOSBweC00JztcbiAgICAgIGNhc2UgJ2xnJzogcmV0dXJuICdoLTE0IHB4LTQnO1xuICAgICAgZGVmYXVsdDogcmV0dXJuICdoLTEyIHB4LTQnO1xuICAgIH1cbiAgfVxuXG4gIGdldCBmb250U2l6ZUNsYXNzKCk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0aGlzLnNpemUpIHtcbiAgICAgIGNhc2UgJ3hzJzogcmV0dXJuICd0ZXh0LVsxMXB4XSc7XG4gICAgICBjYXNlICdzbSc6IHJldHVybiAndGV4dC14cyc7XG4gICAgICBjYXNlICdsZyc6IHJldHVybiAndGV4dC1iYXNlJztcbiAgICAgIGRlZmF1bHQ6IHJldHVybiAndGV4dC1zbSc7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGNuID0gY247XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pbml0aWFsaXplVmlzaWJpbGl0eSgpO1xuICAgIHRoaXMucmVmcmVzaFRhYmxlKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ2RhdGEnXSAmJiAhY2hhbmdlc1snZGF0YSddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTsgLy8gUmVzZXQgdG8gcGFnZSAxIHdoZW4gZGF0YSBjaGFuZ2VzXG4gICAgICB0aGlzLnJlZnJlc2hUYWJsZSgpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snY29sdW1ucyddKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVWaXNpYmlsaXR5KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplVmlzaWJpbGl0eSgpIHtcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgLy8gT25seSBzZXQgdHJ1ZSBpZiB1bmRlZmluZWQsIHByZXNlcnZlcyB1c2VyIHNlbGVjdGlvbiBvbiBvdGhlciBkYXRhIHJlZnJlc2hlc1xuICAgICAgaWYgKHRoaXMuY29sdW1uVmlzaWJpbGl0eVtjb2wua2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY29sdW1uVmlzaWJpbGl0eVtjb2wua2V5XSA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZWZyZXNoVGFibGUoKSB7XG4gICAgdGhpcy5hcHBseVNlYXJjaCgpO1xuICAgIHRoaXMuYXBwbHlTb3J0KCk7XG4gICAgdGhpcy51cGRhdGVQYWdlKCk7XG4gIH1cbiAgb25TZWFyY2goKSB7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XG4gICAgdGhpcy5yZWZyZXNoVGFibGUoKTtcbiAgfVxuXG4gIC8vIFRvZ2dsZSBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBjaGVja2JveCBpbiBwb3BvdmVyXG4gIHRvZ2dsZUNvbHVtbihrZXk6IHN0cmluZykge1xuICAgIHRoaXMuY29sdW1uVmlzaWJpbGl0eVtrZXldID0gIXRoaXMuY29sdW1uVmlzaWJpbGl0eVtrZXldO1xuICAgIC8vIE5vIGV4cGxpY2l0IHJlZnJlc2ggbmVlZGVkIGFzIHRoZSBnZXR0ZXIgJ2FjdGl2ZUNvbHVtbnMnIHdpbGwgYXV0b21hdGljYWxseSByZS1ldmFsdWF0ZVxuICAgIC8vIHdoZW4gY2hhbmdlIGRldGVjdGlvbiBydW5zIGFmdGVyIHRoZSBjbGljayBldmVudC5cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlTZWFyY2goKSB7XG4gICAgaWYgKCF0aGlzLnNlYXJjaFRlcm0pIHtcbiAgICAgIHRoaXMuZmlsdGVyZWREYXRhID1cbiAgICAgICAgWy4uLnRoaXMuZGF0YV07XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHEgPSB0aGlzLnNlYXJjaFRlcm0udG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IHRoaXMuZGF0YS5maWx0ZXIocm93ID0+XG4gICAgICBPYmplY3QudmFsdWVzKHJvdykuc29tZSh2YWwgPT4gU3RyaW5nKHZhbCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxKSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVNvcnQoKSB7XG4gICAgaWYgKCF0aGlzLnNvcnRLZXkgfHwgIXRoaXMuc29ydERpcikgcmV0dXJuO1xuICAgIHRoaXMuZmlsdGVyZWREYXRhLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IHZhbEEgPSBhW3RoaXMuc29ydEtleV07IGNvbnN0IHZhbEIgPSBiW3RoaXMuc29ydEtleV07XG4gICAgICBpZiAodmFsQSA8IHZhbEIpIHJldHVybiB0aGlzLnNvcnREaXIgPT09ICdhc2MnID8gLTEgOiAxO1xuICAgICAgaWYgKHZhbEEgPiB2YWxCKSByZXR1cm4gdGhpcy5zb3J0RGlyID09PSAnYXNjJyA/IDEgOiAtMTtcbiAgICAgIHJldHVybiAwO1xuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlUGFnZUNoYW5nZShuZXdQYWdlOiBudW1iZXIpIHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gbmV3UGFnZTtcbiAgICB0aGlzLnVwZGF0ZVBhZ2UoKTtcbiAgfVxuXG4gIGhhbmRsZVBhZ2VTaXplQ2hhbmdlKG5ld1NpemU6IG51bWJlcikge1xuICAgIGlmIChuZXdTaXplICE9PSB0aGlzLnBhZ2VTaXplKSB7XG4gICAgICB0aGlzLnBhZ2VTaXplID0gbmV3U2l6ZTtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxOyAvLyBSZXNldCB0byBwYWdlIDEgd2hlbiBzaXplIGNoYW5nZXNcbiAgICAgIHRoaXMudXBkYXRlUGFnZSgpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVBhZ2UoKSB7XG4gICAgaWYgKCF0aGlzLnBhZ2luYXRlKSB7XG4gICAgICB0aGlzLnBhZ2VkRGF0YSA9IHRoaXMuZmlsdGVyZWREYXRhO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gKHRoaXMuY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMucGFnZVNpemU7XG4gICAgY29uc3QgZW5kID0gc3RhcnQgKyB0aGlzLnBhZ2VTaXplO1xuXG4gICAgLy8gU2FmZXR5IGNoZWNrIGlmIGN1cnJlbnQgcGFnZSBpcyBvdXQgb2YgYm91bmRzIGFmdGVyIGZpbHRlcmluZ1xuICAgIGlmIChzdGFydCA+PSB0aGlzLmZpbHRlcmVkRGF0YS5sZW5ndGggJiYgdGhpcy5jdXJyZW50UGFnZSA+IDEpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xuICAgICAgdGhpcy51cGRhdGVQYWdlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wYWdlZERhdGEgPSB0aGlzLmZpbHRlcmVkRGF0YS5zbGljZShzdGFydCwgZW5kKTtcbiAgfVxuXG4gIHRvZ2dsZVNvcnQoa2V5OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5zb3J0S2V5ID09PSBrZXkpIHtcbiAgICAgIHRoaXMuc29ydERpciA9IHRoaXMuc29ydERpciA9PT0gJ2FzYycgPyAnZGVzYycgOiB0aGlzLnNvcnREaXIgPT09ICdkZXNjJyA/IG51bGwgOiAnYXNjJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zb3J0S2V5ID0ga2V5O1xuICAgICAgdGhpcy5zb3J0RGlyID0gJ2FzYyc7XG4gICAgfVxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxOyAvLyBSZXNldCB0byBwYWdlIDEgd2hlbiBzb3J0aW5nXG4gICAgdGhpcy5yZWZyZXNoVGFibGUoKTtcbiAgfVxuXG4gIGdldFNvcnRJY29uKGtleTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuc29ydEtleSAhPT0ga2V5IHx8ICF0aGlzLnNvcnREaXIpIHJldHVybiAncmktZXhwYW5kLXVwLWRvd24tbGluZSBvcGFjaXR5LTIwJzsgLy8gQ2hhbmdlZCBpY29uIGZvciBpbmFjdGl2ZSBzdGF0ZVxuICAgIHJldHVybiB0aGlzLnNvcnREaXIgPT09ICdhc2MnID8gJ3JpLWFycm93LXVwLWxpbmUgdGV4dC1mb3JlZ3JvdW5kJyA6ICdyaS1hcnJvdy1kb3duLWxpbmUgdGV4dC1mb3JlZ3JvdW5kJztcbiAgfVxuXG4gIHRvZ2dsZVJvdyhpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuZXhwYW5kZWRSb3dzLmhhcyhpbmRleCkpIHtcbiAgICAgIHRoaXMuZXhwYW5kZWRSb3dzLmRlbGV0ZShpbmRleCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5leHBhbmRlZFJvd3MuYWRkKGluZGV4KTtcbiAgICB9XG4gIH1cblxuICBnZXRUZW1wbGF0ZShrZXk6IHN0cmluZyk6IFRvbGxlQ2VsbERpcmVjdGl2ZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY2VsbFRlbXBsYXRlcz8uZmluZCh0ID0+IHQubmFtZSA9PT0ga2V5KTtcbiAgfVxufVxuIl19
563
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90b2xsZS9zcmMvbGliL2RhdGEtdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQUUsS0FBSyxFQUNILGVBQWUsRUFDN0IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7OztBQStLekQsTUFBTSxPQUFPLGtCQUFrQjtJQUNwQixJQUFJLEdBQVUsRUFBRSxDQUFDO0lBQ2pCLE9BQU8sR0FBa0IsRUFBRSxDQUFDO0lBQzVCLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDbEIsUUFBUSxHQUFHLElBQUksQ0FBQztJQUNoQixlQUFlLEdBQWEsRUFBRSxDQUFBO0lBQzlCLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDZCxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBRW5CLElBQUksR0FBbUMsU0FBUyxDQUFDO0lBQ2pELFlBQVksR0FBRyxLQUFLLENBQUM7SUFDckIsU0FBUyxDQUFVO0lBRTVCLDZF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RyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLElBQUk7c0JBQVosS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csUUFBUTtzQkFBaEIsS0FBSztnQkFPRyxlQUFlO3NCQUF2QixLQUFLO2dCQU9HLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRyxPQUFPO3NCQUFmLEtBQUs7Z0JBR0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQU9HLGFBQWE7c0JBQXJCLEtBQUs7Z0JBbUJHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQVcrQixhQUFhO3NCQUFqRCxlQUFlO3VCQUFDLGtCQUFrQjtnQkFDMUIsZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLCBDb250ZW50Q2hpbGRyZW4sIFF1ZXJ5TGlzdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGNuIH0gZnJvbSAnLi91dGlscy9jbic7XG5pbXBvcnQgeyBQYWdpbmF0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9wYWdpbmF0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUb2xsZUNlbGxEaXJlY3RpdmUgfSBmcm9tICcuL3RvbGxlLWNlbGwuZGlyZWN0aXZlJztcbmltcG9ydCB7IElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJy4vcG9wb3Zlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9wb3ZlckNvbnRlbnRDb21wb25lbnQgfSBmcm9tICcuL3BvcG92ZXItY29udGVudC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuL2NoZWNrYm94LmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVDb2x1bW4ge1xuICBrZXk6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgc29ydGFibGU/OiBib29sZWFuO1xuICBjbGFzcz86IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtZGF0YS10YWJsZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHN0eWxlczogW2BcbiAgICA6aG9zdCB7IGRpc3BsYXk6IGJsb2NrOyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyB9XG4gICAgdGFibGUgeyB3aWR0aDogMTAwJTsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgZGlzcGxheTogdGFibGU7IH1cbiAgICB0aGVhZCB7IGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cDsgfVxuICAgIHRib2R5IHsgZGlzcGxheTogdGFibGUtcm93LWdyb3VwOyB9XG4gICAgdHIgeyBkaXNwbGF5OiB0YWJsZS1yb3c7IH1cbiAgICB0aCwgdGQgeyBkaXNwbGF5OiB0YWJsZS1jZWxsOyB9XG4gIGBdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFBhZ2luYXRpb25Db21wb25lbnQsXG4gICAgSW5wdXRDb21wb25lbnQsXG4gICAgUG9wb3ZlckNvbXBvbmVudCxcbiAgICBQb3BvdmVyQ29udGVudENvbXBvbmVudCxcbiAgICBDaGVja2JveENvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiaC1mdWxsIGZsZXggZmxleC1jb2wgdy1mdWxsXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB5LTIgZmxleC1ub25lXCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzZWFyY2hhYmxlXCIgY2xhc3M9XCJ3LWZ1bGwgbWF4LXctc21cIj5cbiAgICAgICAgICA8dG9sbGUtaW5wdXRcbiAgICAgICAgICAgIFtzaXplXT1cInNpemUgPT09ICdsZycgPyAnZGVmYXVsdCcgOiAnc20nXCJcbiAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJGaWx0ZXIgcmVjb3Jkc1wiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkZpbHRlciByZWNvcmRzLi4uXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGVybVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblNlYXJjaCgpXCI+XG4gICAgICAgICAgICA8aSBwcmVmaXggY2xhc3M9XCJyaS1zZWFyY2gtbGluZVwiPjwvaT5cbiAgICAgICAgICA8L3RvbGxlLWlucHV0PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8dG9sbGUtcG9wb3ZlciAqbmdJZj1cImFsbG93Q29sdW1uSGlkaW5nICYmIHNob3dTZXR0aW5nc1wiIGNsYXNzPVwibWwtYXV0b1wiPlxuICAgICAgICAgIDxidXR0b24gdHJpZ2dlclxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNuKFxuICAgICAgICAgICAgICAnbWwtYXV0byBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItaW5wdXQgYmctYmFja2dyb3VuZCBweC0zIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIHRyYW5zaXRpb24tY29sb3JzIG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZycsXG4gICAgICAgICAgICAgIHNpemUgPT09ICd4cycgPyAnaC03IHRleHQteHMnIDogJ2gtOSB0ZXh0LXNtJ1xuICAgICAgICAgICAgKVwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJyaS1zZXR0aW5ncy0zLWxpbmVcIj48L2k+XG4gICAgICAgICAgICBWaWV3XG4gICAgICAgICAgICA8aSBjbGFzcz1cInJpLWFycm93LWRvd24tcy1saW5lIG1sLTEgb3BhY2l0eS01MFwiPjwvaT5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8dG9sbGUtcG9wb3Zlci1jb250ZW50IGNsYXNzPVwidy01NiBwLTAgYmctYmFja2dyb3VuZCBib3JkZXItYm9yZGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC0yIGJvcmRlci1iIGJvcmRlci1ib3JkZXJcIj5cbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBweC0yXCI+VG9nZ2xlIENvbHVtbnM8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTIgbWF4LWgtWzMwMHB4XSBvdmVyZmxvdy15LWF1dG8gc3BhY2UteS0xXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTIgcHktMS41IHJvdW5kZWQtc20gaG92ZXI6YmctYWNjZW50IGN1cnNvci1wb2ludGVyIHRleHQtc20gdHJhbnNpdGlvbi1jb2xvcnNcIj5cbiAgICAgICAgICAgICAgICA8dG9sbGUtY2hlY2tib3ggW25nTW9kZWxdPVwiY29sdW1uVmlzaWJpbGl0eVtjb2wua2V5XVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInRvZ2dsZUNvbHVtbihjb2wua2V5KVwiLz5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBjb2wubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3RvbGxlLXBvcG92ZXItY29udGVudD5cbiAgICAgICAgPC90b2xsZS1wb3BvdmVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgW2NsYXNzXT1cImNuKCdmbGV4LTEgbWluLWgtMCBvdmVyZmxvdy1oaWRkZW4gcmVsYXRpdmUgdy1mdWxsJywgYm9yZGVyZWQgPyAncm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWJvcmRlcicgOiAnJywgdGFibGVCYWNrZ3JvdW5kKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byB3LWZ1bGwgaC1mdWxsXCIgW3N0eWxlLm1heC1oZWlnaHRdPVwibWF4SGVpZ2h0XCI+XG5cbiAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ3LWZ1bGwgdGFibGUtYXV0byBib3JkZXItY29sbGFwc2VcIj5cbiAgICAgICAgICAgIDx0aGVhZCBbY2xhc3NdPVwiY24oJ2JvcmRlci1iIGJvcmRlci1ib3JkZXInLCByZXNvbHZlZEhlYWRlckJhY2tncm91bmQpXCI+XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIDx0aCAqbmdJZj1cImV4cGFuZGFibGVcIiBzY29wZT1cImNvbFwiIFtjbGFzc109XCJjbigncHgtNCcsIHNpemUgPT09ICd4cycgPyAndy1bMzJweF0nIDogJ3ctWzQ4cHhdJywgc3RpY2t5SGVhZGVyID8gJ3N0aWNreSB0b3AtMCB6LTEwICcgKyByZXNvbHZlZEhlYWRlckJhY2tncm91bmQgOiAnJylcIj48L3RoPlxuXG4gICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29sIG9mIGFjdGl2ZUNvbHVtbnNcIlxuICAgICAgICAgICAgICAgICAgc2NvcGU9XCJjb2xcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zb3J0XT1cInNvcnRLZXkgPT09IGNvbC5rZXkgPyAoc29ydERpciA9PT0gJ2FzYycgPyAnYXNjZW5kaW5nJyA6IChzb3J0RGlyID09PSAnZGVzYycgPyAnZGVzY2VuZGluZycgOiAnbm9uZScpKSA6ICdub25lJ1wiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY24oJ3RleHQtbGVmdCBmb250LW1lZGl1bSB0ZXh0LWZvcmVncm91bmQnLGhlYWRlclBhZGRpbmdDbGFzcyxmb250U2l6ZUNsYXNzLCBjb2wuY2xhc3MsIHN0aWNreUhlYWRlciA/ICdzdGlja3kgdG9wLTAgei0xMCBzaGFkb3ctc20gJyArIHJlc29sdmVkSGVhZGVyQmFja2dyb3VuZCA6ICcnKVwiPlxuXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImNvbC5zb3J0YWJsZTsgZWxzZSBwbGFpbkhlYWRlclwiXG4gICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTb3J0KGNvbC5rZXkpXCJcbiAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcgcm91bmRlZC1zbVwiPlxuICAgICAgICAgICAgICAgICAge3sgY29sLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiZ2V0U29ydEljb24oY29sLmtleSlcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3BsYWluSGVhZGVyPlxuICAgICAgICAgICAgICAgICAge3sgY29sLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L3RoZWFkPlxuXG4gICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJkaXZpZGUteSBkaXZpZGUtYm9yZGVyXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3cgb2YgcGFnZWREYXRhOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgIDx0ciBbY2xhc3NdPVwiY24oJ3RyYW5zaXRpb24tY29sb3JzJywgZ2V0Um93QmFja2dyb3VuZChyb3csIGkpLCAnaG92ZXI6YmctbXV0ZWQvNTAnKVwiPlxuICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cImV4cGFuZGFibGVcIiBjbGFzcz1cInB4LTRcIj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInRvZ2dsZVJvdyhpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZXhwYW5kZWRSb3dzLmhhcyhpKSA/ICdDb2xsYXBzZSByb3cnIDogJ0V4cGFuZCByb3cnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJleHBhbmRlZFJvd3MuaGFzKGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNuKFxuICAgICAgICAgICAgICAgICAgICAgICdyb3VuZGVkLW1kIGhvdmVyOmJnLWFjY2VudCB0cmFuc2l0aW9uLWNvbG9ycyBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZycsXG4gICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9PT0gJ3hzJyA/ICdoLTYgdy02JyA6ICdoLTggdy04J1xuICAgICAgICAgICAgICAgICAgICApXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJleHBhbmRlZFJvd3MuaGFzKGkpXG4gICAgICAgICAgICAgICAgPyAncmktYXJyb3ctZG93bi1zLWxpbmUnXG4gICAgICAgICAgICAgICAgOiAncmktYXJyb3ctcmlnaHQtcy1saW5lJ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L3RkPlxuXG4gICAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2wgb2YgYWN0aXZlQ29sdW1uc1wiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjbignYWxpZ24tbWlkZGxlJyxjZWxsUGFkZGluZ0NsYXNzLGZvbnRTaXplQ2xhc3MsY29sLmNsYXNzKVwiPlxuXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0VGVtcGxhdGUoY29sLmtleSkgYXMgY2VsbDsgZWxzZSBkZWZhdWx0Q2VsbFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjZWxsLnRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93W2NvbC5rZXldLCByb3c6IHJvdyB9XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdENlbGw+XG4gICAgICAgICAgICAgICAgICAgIHt7IHJvd1tjb2wua2V5XSB9fVxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8L3RyPlxuXG4gICAgICAgICAgICAgIDx0ciAqbmdJZj1cImV4cGFuZGVkUm93cy5oYXMoaSlcIiBjbGFzcz1cImJnLW11dGVkLzEwXCI+XG4gICAgICAgICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwiYWN0aXZlQ29sdW1ucy5sZW5ndGggKyAoZXhwYW5kYWJsZSA/IDEgOiAwKVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC0wXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC02IGJvcmRlci10IGJvcmRlci1kYXNoZWQgYm9yZGVyLWJvcmRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZXhwYW5kZWRUZW1wbGF0ZTsgZWxzZSBub0V4cGFuZGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJleHBhbmRlZFRlbXBsYXRlOyBjb250ZXh0OiB7IHJvdzogcm93IH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0V4cGFuZGVkPlxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmQgaXRhbGljXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBObyBkZXRhaWxzIGF2YWlsYWJsZS5cbiAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDx0ciAqbmdJZj1cInBhZ2VkRGF0YS5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwiYWN0aXZlQ29sdW1ucy5sZW5ndGggKyAoZXhwYW5kYWJsZSA/IDEgOiAwKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImgtMjQgdGV4dC1jZW50ZXIgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICAgICAgTm8gcmVzdWx0cyBmb3VuZC5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LW5vbmVcIj5cbiAgICAgICAgPHRvbGxlLXBhZ2luYXRpb25cbiAgICAgICAgICAqbmdJZj1cInBhZ2luYXRlICYmIGZpbHRlcmVkRGF0YS5sZW5ndGggPiAwXCJcbiAgICAgICAgICBbdG90YWxSZWNvcmRzXT1cImZpbHRlcmVkRGF0YS5sZW5ndGhcIlxuICAgICAgICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnZVNpemVPcHRpb25zXCJcbiAgICAgICAgICBbY3VycmVudFBhZ2VdPVwiY3VycmVudFBhZ2VcIlxuICAgICAgICAgIFtjdXJyZW50UGFnZVNpemVdPVwicGFnZVNpemVcIlxuICAgICAgICAgIChvblBhZ2VOdW1iZXJDaGFuZ2UpPVwiaGFuZGxlUGFnZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAob25QYWdlU2l6ZUNoYW5nZSk9XCJoYW5kbGVQYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgPjwvdG9sbGUtcGFnaW5hdGlvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIERhdGFUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgZGF0YTogYW55W10gPSBbXTtcbiAgQElucHV0KCkgY29sdW1uczogVGFibGVDb2x1bW5bXSA9IFtdO1xuICBASW5wdXQoKSBzZWFyY2hhYmxlID0gdHJ1ZTtcbiAgQElucHV0KCkgcGFnaW5hdGUgPSB0cnVlO1xuICBASW5wdXQoKSBwYWdlU2l6ZU9wdGlvbnM6IG51bWJlcltdID0gW11cbiAgQElucHV0KCkgcGFnZVNpemUgPSAxMDtcbiAgQElucHV0KCkgZXhwYW5kYWJsZSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHNpemU6ICd4cycgfCAnc20nIHwgJ2RlZmF1bHQnIHwgJ2xnJyA9ICdkZWZhdWx0JztcbiAgQElucHV0KCkgc3RpY2t5SGVhZGVyID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1heEhlaWdodD86IHN0cmluZztcblxuICAvLyBEcmF3cyBhIHBoeXNpY2FsIGJvcmRlciBhcm91bmQgdGhlIHRhYmxlIGl0c2VsZiAobm90IHRoZSB3aG9sZSBjb21wb25lbnQpLlxuICBASW5wdXQoKSBib3JkZXJlZCA9IHRydWU7XG5cbiAgLy8gLS0tIEJhY2tncm91bmQgQ29sb3JzIC0tLVxuICAvLyBBbGwgb2YgdGhlc2UgdGFrZSBUYWlsd2luZCBjbGFzcyBzdHJpbmdzIChlLmcuICdiZy1jYXJkJywgJ2JnLW11dGVkLzQwJykgc29cbiAgLy8gdGhleSBzdGF5IHRoZW1lLXRva2VuIGF3YXJlIGFuZCBmb2xsb3cgZGFyayBtb2RlLCBtYXRjaGluZyBgY29sLmNsYXNzYC5cblxuICAvKiogQmFja2dyb3VuZCBmb3IgdGhlIHRhYmxlIHN1cmZhY2UsIGJlaGluZCBib3RoIGhlYWRlciBhbmQgcm93cy4gKi9cbiAgQElucHV0KCkgdGFibGVCYWNrZ3JvdW5kID0gJyc7XG5cbiAgLyoqXG4gICAqIEJhY2tncm91bmQgZm9yIHRoZSBoZWFkZXIgcm93LiBNdXN0IGJlIG9wYXF1ZSB3aGVuIGBzdGlja3lIZWFkZXJgIGlzIG9uLFxuICAgKiBvdGhlcndpc2Ugcm93cyBzY3JvbGwgdmlzaWJseSB0aHJvdWdoIHRoZSBoZWFkZXIg4oCUIGhlbmNlIHRoZSBkZWZhdWx0XG4gICAqIGBiZy1iYWNrZ3JvdW5kYCByYXRoZXIgdGhhbiB0cmFuc3BhcmVudC5cbiAgICovXG4gIEBJbnB1dCgpIGhlYWRlckJhY2tncm91bmQgPSAnYmctYmFja2dyb3VuZCc7XG5cbiAgLyoqIEFsdGVybmF0aW5nIHJvdyBiYWNrZ3JvdW5kcy4gQXBwbGllZCB0byBvZGQgcm93cyBvbmx5LiAqL1xuICBASW5wdXQoKSBzdHJpcGVkID0gZmFsc2U7XG5cbiAgLyoqIEJhY2tncm91bmQgYXBwbGllZCB0byBvZGQgcm93cyB3aGVuIGBzdHJpcGVkYCBpcyBvbi4gKi9cbiAgQElucHV0KCkgc3RyaXBlQmFja2dyb3VuZCA9ICdiZy1tdXRlZC8zMCc7XG5cbiAgLyoqXG4gICAqIFBlci1yb3cgYmFja2dyb3VuZCwgcmVzb2x2ZWQgYWdhaW5zdCB0aGUgcm93J3Mgb3duIGRhdGEg4oCUIGUuZy5cbiAgICogYFtyb3dCYWNrZ3JvdW5kXT1cInIgPT4gci5vdmVyZHVlID8gJ2JnLWRlc3RydWN0aXZlLzEwJyA6ICcnXCJgLlxuICAgKiBUYWtlcyBwcmVjZWRlbmNlIG92ZXIgYHN0cmlwZWRgLlxuICAgKi9cbiAgQElucHV0KCkgcm93QmFja2dyb3VuZD86IChyb3c6IGFueSwgaW5kZXg6IG51bWJlcikgPT4gc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHN0aWNreSBoZWFkZXIgd2l0aCBubyBiYWNrZ3JvdW5kIGxldHMgcm93cyBzY3JvbGwgdmlzaWJseSB0aHJvdWdoIGl0LCBzb1xuICAgKiBmYWxsIGJhY2sgdG8gYW4gb3BhcXVlIGRlZmF1bHQgaWYgYSBjb25zdW1lciBjbGVhcnMgYGhlYWRlckJhY2tncm91bmRgLlxuICAgKi9cbiAgZ2V0IHJlc29sdmVkSGVhZGVyQmFja2dyb3VuZCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnN0aWNreUhlYWRlciAmJiAhdGhpcy5oZWFkZXJCYWNrZ3JvdW5kKSByZXR1cm4gJ2JnLWJhY2tncm91bmQnO1xuICAgIHJldHVybiB0aGlzLmhlYWRlckJhY2tncm91bmQ7XG4gIH1cblxuICAvKiogUmVzb2x2ZXMgdGhlIGJhY2tncm91bmQgZm9yIGEgYm9keSByb3c6IHBlci1yb3cgY2FsbGJhY2sgd2lucyBvdmVyIHN0cmlwaW5nLiAqL1xuICBnZXRSb3dCYWNrZ3JvdW5kKHJvdzogYW55LCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBjdXN0b20gPSB0aGlzLnJvd0JhY2tncm91bmQ/Lihyb3csIGluZGV4KTtcbiAgICBpZiAoY3VzdG9tKSByZXR1cm4gY3VzdG9tO1xuICAgIHJldHVybiB0aGlzLnN0cmlwZWQgJiYgaW5kZXggJSAyID09PSAxID8gdGhpcy5zdHJpcGVCYWNrZ3JvdW5kIDogJyc7XG4gIH1cblxuICAvLyAtLS0gQ29sdW1uIEhpZGluZyBTZXR0aW5ncyAtLS1cbiAgQElucHV0KCkgYWxsb3dDb2x1bW5IaWRpbmcgPSB0cnVlO1xuICBASW5wdXQoKSBzaG93U2V0dGluZ3MgPSB0cnVlO1xuXG4gIC8vIFRyYWNrIHZpc2liaWxpdHkgc3RhdGVcbiAgY29sdW1uVmlzaWJpbGl0eTogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblxuICAvLyBGaWx0ZXJzIGNvbHVtbnMgYmFzZWQgb24gdmlzaWJpbGl0eSBzdGF0ZVxuICBnZXQgYWN0aXZlQ29sdW1ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2wgPT4gdGhpcy5jb2x1bW5WaXNpYmlsaXR5W2NvbC5rZXldKTtcbiAgfVxuXG4gIGV4cGFuZGVkUm93cyA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuICBAQ29udGVudENoaWxkcmVuKFRvbGxlQ2VsbERpcmVjdGl2ZSkgY2VsbFRlbXBsYXRlcyE6IFF1ZXJ5TGlzdDxUb2xsZUNlbGxEaXJlY3RpdmU+O1xuICBASW5wdXQoKSBleHBhbmRlZFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcblxuICBmaWx0ZXJlZERhdGE6IGFueVtdID0gW107XG4gIHBhZ2VkRGF0YTogYW55W10gPSBbXTtcbiAgc2VhcmNoVGVybSA9ICcnO1xuICBjdXJyZW50UGFnZSA9IDE7XG4gIHNvcnRLZXkgPSAnJztcbiAgc29ydERpcjogJ2FzYycgfCAnZGVzYycgfCBudWxsID0gbnVsbDtcblxuICAvLyBTdHlsZSBHZXR0ZXJzXG4gIGdldCBjZWxsUGFkZGluZ0NsYXNzKCk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0aGlzLnNpemUpIHtcbiAgICAgIGNhc2UgJ3hzJzogcmV0dXJuICdwLTEgcHgtNCc7XG4gICAgICBjYXNlICdzbSc6IHJldHVybiAncC0yIHB4LTQnO1xuICAgICAgY2FzZSAnbGcnOiByZXR1cm4gJ3AtNiBweC00JztcbiAgICAgIGRlZmF1bHQ6IHJldHVybiAncC00JztcbiAgICB9XG4gIH1cblxuICBnZXQgaGVhZGVyUGFkZGluZ0NsYXNzKCk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0aGlzLnNpemUpIHtcbiAgICAgIGNhc2UgJ3hzJzogcmV0dXJuICdoLTcgcHgtNCc7XG4gICAgICBjYXNlICdzbSc6IHJldHVybiAnaC05IHB4LTQnO1xuICAgICAgY2FzZSAnbGcnOiByZXR1cm4gJ2gtMTQgcHgtNCc7XG4gICAgICBkZWZhdWx0OiByZXR1cm4gJ2gtMTIgcHgtNCc7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGZvbnRTaXplQ2xhc3MoKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHRoaXMuc2l6ZSkge1xuICAgICAgY2FzZSAneHMnOiByZXR1cm4gJ3RleHQtWzExcHhdJztcbiAgICAgIGNhc2UgJ3NtJzogcmV0dXJuICd0ZXh0LXhzJztcbiAgICAgIGNhc2UgJ2xnJzogcmV0dXJuICd0ZXh0LWJhc2UnO1xuICAgICAgZGVmYXVsdDogcmV0dXJuICd0ZXh0LXNtJztcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgY24gPSBjbjtcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluaXRpYWxpemVWaXNpYmlsaXR5KCk7XG4gICAgdGhpcy5yZWZyZXNoVGFibGUoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1snZGF0YSddICYmICFjaGFuZ2VzWydkYXRhJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxOyAvLyBSZXNldCB0byBwYWdlIDEgd2hlbiBkYXRhIGNoYW5nZXNcbiAgICAgIHRoaXMucmVmcmVzaFRhYmxlKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydjb2x1bW5zJ10pIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVZpc2liaWxpdHkoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVWaXNpYmlsaXR5KCkge1xuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAvLyBPbmx5IHNldCB0cnVlIGlmIHVuZGVmaW5lZCwgcHJlc2VydmVzIHVzZXIgc2VsZWN0aW9uIG9uIG90aGVyIGRhdGEgcmVmcmVzaGVzXG4gICAgICBpZiAodGhpcy5jb2x1bW5WaXNpYmlsaXR5W2NvbC5rZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5WaXNpYmlsaXR5W2NvbC5rZXldID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJlZnJlc2hUYWJsZSgpIHtcbiAgICB0aGlzLmFwcGx5U2VhcmNoKCk7XG4gICAgdGhpcy5hcHBseVNvcnQoKTtcbiAgICB0aGlzLnVwZGF0ZVBhZ2UoKTtcbiAgfVxuICBvblNlYXJjaCgpIHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcbiAgICB0aGlzLnJlZnJlc2hUYWJsZSgpO1xuICB9XG5cbiAgLy8gVG9nZ2xlIGZ1bmN0aW9uIHVzZWQgYnkgdGhlIGNoZWNrYm94IGluIHBvcG92ZXJcbiAgdG9nZ2xlQ29sdW1uKGtleTogc3RyaW5nKSB7XG4gICAgdGhpcy5jb2x1bW5WaXNpYmlsaXR5W2tleV0gPSAhdGhpcy5jb2x1bW5WaXNpYmlsaXR5W2tleV07XG4gICAgLy8gTm8gZXhwbGljaXQgcmVmcmVzaCBuZWVkZWQgYXMgdGhlIGdldHRlciAnYWN0aXZlQ29sdW1ucycgd2lsbCBhdXRvbWF0aWNhbGx5IHJlLWV2YWx1YXRlXG4gICAgLy8gd2hlbiBjaGFuZ2UgZGV0ZWN0aW9uIHJ1bnMgYWZ0ZXIgdGhlIGNsaWNrIGV2ZW50LlxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVNlYXJjaCgpIHtcbiAgICBpZiAoIXRoaXMuc2VhcmNoVGVybSkge1xuICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPVxuICAgICAgICBbLi4udGhpcy5kYXRhXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcSA9IHRoaXMuc2VhcmNoVGVybS50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMuZmlsdGVyZWREYXRhID0gdGhpcy5kYXRhLmZpbHRlcihyb3cgPT5cbiAgICAgIE9iamVjdC52YWx1ZXMocm93KS5zb21lKHZhbCA9PiBTdHJpbmcodmFsKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHEpKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5U29ydCgpIHtcbiAgICBpZiAoIXRoaXMuc29ydEtleSB8fCAhdGhpcy5zb3J0RGlyKSByZXR1cm47XG4gICAgdGhpcy5maWx0ZXJlZERhdGEuc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgdmFsQSA9IGFbdGhpcy5zb3J0S2V5XTsgY29uc3QgdmFsQiA9IGJbdGhpcy5zb3J0S2V5XTtcbiAgICAgIGlmICh2YWxBIDwgdmFsQikgcmV0dXJuIHRoaXMuc29ydERpciA9PT0gJ2FzYycgPyAtMSA6IDE7XG4gICAgICBpZiAodmFsQSA+IHZhbEIpIHJldHVybiB0aGlzLnNvcnREaXIgPT09ICdhc2MnID8gMSA6IC0xO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVQYWdlQ2hhbmdlKG5ld1BhZ2U6IG51bWJlcikge1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSBuZXdQYWdlO1xuICAgIHRoaXMudXBkYXRlUGFnZSgpO1xuICB9XG5cbiAgaGFuZGxlUGFnZVNpemVDaGFuZ2UobmV3U2l6ZTogbnVtYmVyKSB7XG4gICAgaWYgKG5ld1NpemUgIT09IHRoaXMucGFnZVNpemUpIHtcbiAgICAgIHRoaXMucGFnZVNpemUgPSBuZXdTaXplO1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7IC8vIFJlc2V0IHRvIHBhZ2UgMSB3aGVuIHNpemUgY2hhbmdlc1xuICAgICAgdGhpcy51cGRhdGVQYWdlKCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlUGFnZSgpIHtcbiAgICBpZiAoIXRoaXMucGFnaW5hdGUpIHtcbiAgICAgIHRoaXMucGFnZWREYXRhID0gdGhpcy5maWx0ZXJlZERhdGE7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5wYWdlU2l6ZTtcbiAgICBjb25zdCBlbmQgPSBzdGFydCArIHRoaXMucGFnZVNpemU7XG5cbiAgICAvLyBTYWZldHkgY2hlY2sgaWYgY3VycmVudCBwYWdlIGlzIG91dCBvZiBib3VuZHMgYWZ0ZXIgZmlsdGVyaW5nXG4gICAgaWYgKHN0YXJ0ID49IHRoaXMuZmlsdGVyZWREYXRhLmxlbmd0aCAmJiB0aGlzLmN1cnJlbnRQYWdlID4gMSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XG4gICAgICB0aGlzLnVwZGF0ZVBhZ2UoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBhZ2VkRGF0YSA9IHRoaXMuZmlsdGVyZWREYXRhLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICB9XG5cbiAgdG9nZ2xlU29ydChrZXk6IHN0cmluZykge1xuICAgIGlmICh0aGlzLnNvcnRLZXkgPT09IGtleSkge1xuICAgICAgdGhpcy5zb3J0RGlyID0gdGhpcy5zb3J0RGlyID09PSAnYXNjJyA/ICdkZXNjJyA6IHRoaXMuc29ydERpciA9PT0gJ2Rlc2MnID8gbnVsbCA6ICdhc2MnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNvcnRLZXkgPSBrZXk7XG4gICAgICB0aGlzLnNvcnREaXIgPSAnYXNjJztcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7IC8vIFJlc2V0IHRvIHBhZ2UgMSB3aGVuIHNvcnRpbmdcbiAgICB0aGlzLnJlZnJlc2hUYWJsZSgpO1xuICB9XG5cbiAgZ2V0U29ydEljb24oa2V5OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5zb3J0S2V5ICE9PSBrZXkgfHwgIXRoaXMuc29ydERpcikgcmV0dXJuICdyaS1leHBhbmQtdXAtZG93bi1saW5lIG9wYWNpdHktMjAnOyAvLyBDaGFuZ2VkIGljb24gZm9yIGluYWN0aXZlIHN0YXRlXG4gICAgcmV0dXJuIHRoaXMuc29ydERpciA9PT0gJ2FzYycgPyAncmktYXJyb3ctdXAtbGluZSB0ZXh0LWZvcmVncm91bmQnIDogJ3JpLWFycm93LWRvd24tbGluZSB0ZXh0LWZvcmVncm91bmQnO1xuICB9XG5cbiAgdG9nZ2xlUm93KGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5leHBhbmRlZFJvd3MuaGFzKGluZGV4KSkge1xuICAgICAgdGhpcy5leHBhbmRlZFJvd3MuZGVsZXRlKGluZGV4KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmV4cGFuZGVkUm93cy5hZGQoaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIGdldFRlbXBsYXRlKGtleTogc3RyaW5nKTogVG9sbGVDZWxsRGlyZWN0aXZlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jZWxsVGVtcGxhdGVzPy5maW5kKHQgPT4gdC5uYW1lID09PSBrZXkpO1xuICB9XG59XG4iXX0=