ngx-tethys 18.0.7 → 18.1.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/alert/alert.component.d.ts +11 -19
  3. package/anchor/anchor.component.d.ts +1 -3
  4. package/badge/badge.component.d.ts +12 -3
  5. package/date-picker/lib/date/date-table-cell.component.d.ts +1 -1
  6. package/date-picker/lib/popups/date-popup.component.d.ts +0 -1
  7. package/date-picker/lib/popups/inner-popup.component.d.ts +2 -1
  8. package/date-range/date-range.component.d.ts +2 -8
  9. package/divider/divider.component.d.ts +8 -2
  10. package/esm2022/action/action.component.mjs +3 -4
  11. package/esm2022/alert/alert.component.mjs +55 -81
  12. package/esm2022/anchor/anchor-link.component.mjs +15 -7
  13. package/esm2022/anchor/anchor.component.mjs +17 -9
  14. package/esm2022/arrow-switcher/arrow-switcher.component.mjs +4 -5
  15. package/esm2022/autocomplete/autocomplete.component.mjs +5 -5
  16. package/esm2022/avatar/avatar-list/avatar-list.component.mjs +4 -4
  17. package/esm2022/avatar/avatar.component.mjs +4 -4
  18. package/esm2022/back-top/back-top.component.mjs +4 -4
  19. package/esm2022/badge/badge.component.mjs +3 -4
  20. package/esm2022/breadcrumb/breadcrumb.component.mjs +4 -6
  21. package/esm2022/button/button-icon.component.mjs +4 -4
  22. package/esm2022/button/button.component.mjs +4 -4
  23. package/esm2022/calendar/calendar-header.component.mjs +4 -4
  24. package/esm2022/calendar/calendar.component.mjs +3 -4
  25. package/esm2022/card/header.component.mjs +4 -4
  26. package/esm2022/carousel/carousel.component.mjs +4 -4
  27. package/esm2022/cascader/cascader-li.component.mjs +4 -4
  28. package/esm2022/cascader/cascader-search-option.component.mjs +4 -4
  29. package/esm2022/cascader/cascader.component.mjs +5 -7
  30. package/esm2022/checkbox/checkbox.component.mjs +5 -5
  31. package/esm2022/collapse/collapse-item.component.mjs +4 -4
  32. package/esm2022/color-picker/color-picker-panel.component.mjs +4 -4
  33. package/esm2022/comment/comment.component.mjs +4 -4
  34. package/esm2022/date-picker/date-picker.component.mjs +5 -6
  35. package/esm2022/date-picker/lib/calendar/calendar-footer.component.mjs +3 -4
  36. package/esm2022/date-picker/lib/date/date-header.component.mjs +4 -4
  37. package/esm2022/date-picker/lib/date/date-table-cell.component.mjs +4 -4
  38. package/esm2022/date-picker/lib/date/date-table.component.mjs +4 -4
  39. package/esm2022/date-picker/lib/date-carousel/date-carousel.component.mjs +5 -5
  40. package/esm2022/date-picker/lib/decade/decade-header.component.mjs +4 -4
  41. package/esm2022/date-picker/lib/decade/decade-table.component.mjs +4 -4
  42. package/esm2022/date-picker/lib/month/month-header.component.mjs +4 -4
  43. package/esm2022/date-picker/lib/month/month-table.component.mjs +4 -4
  44. package/esm2022/date-picker/lib/popups/date-popup.component.mjs +4 -18
  45. package/esm2022/date-picker/lib/popups/inner-popup.component.mjs +3 -8
  46. package/esm2022/date-picker/lib/quarter/quarter-table.component.mjs +4 -4
  47. package/esm2022/date-picker/lib/year/year-header.component.mjs +4 -4
  48. package/esm2022/date-picker/lib/year/year-table.component.mjs +4 -4
  49. package/esm2022/date-picker/month-picker.component.mjs +4 -5
  50. package/esm2022/date-picker/picker.component.mjs +4 -14
  51. package/esm2022/date-picker/quarter-picker.component.mjs +4 -5
  52. package/esm2022/date-picker/range-picker.component.mjs +4 -5
  53. package/esm2022/date-picker/week-picker.component.mjs +4 -5
  54. package/esm2022/date-picker/year-picker.component.mjs +4 -5
  55. package/esm2022/date-range/date-range.component.mjs +4 -4
  56. package/esm2022/date-range/optional-dates/optional-dates.component.mjs +3 -6
  57. package/esm2022/dialog/footer/dialog-footer.component.mjs +4 -4
  58. package/esm2022/dialog/header/dialog-header.component.mjs +4 -4
  59. package/esm2022/divider/divider.component.mjs +21 -13
  60. package/esm2022/dropdown/dropdown-menu.component.mjs +11 -7
  61. package/esm2022/empty/empty.component.mjs +4 -4
  62. package/esm2022/form/form-group-error/form-group-error.component.mjs +4 -4
  63. package/esm2022/form/form-group.component.mjs +4 -4
  64. package/esm2022/form/from-group-footer/form-group-footer.component.mjs +4 -4
  65. package/esm2022/guider/guider-hint/guider-hint.component.mjs +4 -4
  66. package/esm2022/image/preview/image-preview.component.mjs +3 -4
  67. package/esm2022/input/input-group.component.mjs +4 -4
  68. package/esm2022/input/input-search.component.mjs +3 -4
  69. package/esm2022/input/input.component.mjs +4 -4
  70. package/esm2022/layout/header.component.mjs +4 -4
  71. package/esm2022/layout/sidebar-header.component.mjs +4 -4
  72. package/esm2022/layout/sidebar.component.mjs +81 -71
  73. package/esm2022/list/list-item-meta.component.mjs +4 -4
  74. package/esm2022/loading/loading.component.mjs +3 -4
  75. package/esm2022/mention/suggestions/suggestions.component.mjs +4 -4
  76. package/esm2022/menu/group/menu-group.component.mjs +4 -4
  77. package/esm2022/menu/item/menu-item.component.mjs +3 -4
  78. package/esm2022/message/message-container.component.mjs +13 -5
  79. package/esm2022/message/message.component.mjs +3 -4
  80. package/esm2022/nav/icon-nav/icon-nav-link.directive.mjs +4 -5
  81. package/esm2022/nav/nav.component.mjs +4 -6
  82. package/esm2022/notify/notify-container.component.mjs +4 -4
  83. package/esm2022/notify/notify.component.mjs +4 -4
  84. package/esm2022/pagination/pagination.component.mjs +4 -4
  85. package/esm2022/popover/header/popover-header.component.mjs +4 -4
  86. package/esm2022/progress/progress-circle.component.mjs +4 -7
  87. package/esm2022/progress/progress.component.mjs +5 -8
  88. package/esm2022/property/property-item.component.mjs +4 -4
  89. package/esm2022/property-operation/property-operation.component.mjs +4 -4
  90. package/esm2022/radio/radio.component.mjs +5 -5
  91. package/esm2022/rate/rate.component.mjs +5 -5
  92. package/esm2022/resizable/resize-handle.component.mjs +10 -7
  93. package/esm2022/resizable/resize-handles.component.mjs +12 -5
  94. package/esm2022/result/result.component.mjs +4 -4
  95. package/esm2022/segment/segment-item.component.mjs +4 -4
  96. package/esm2022/segment/segment.component.mjs +4 -5
  97. package/esm2022/select/custom-select/custom-select.component.mjs +6 -8
  98. package/esm2022/select/native-select/native-select.component.mjs +5 -6
  99. package/esm2022/shared/option/list-option/list-option.component.mjs +3 -4
  100. package/esm2022/shared/option/option.component.mjs +3 -4
  101. package/esm2022/shared/select/select-control/select-control.component.mjs +5 -5
  102. package/esm2022/skeleton/stylized/bullet-list.component.mjs +8 -9
  103. package/esm2022/skeleton/stylized/list.component.mjs +8 -9
  104. package/esm2022/skeleton/stylized/paragraph.component.mjs +8 -9
  105. package/esm2022/slide/slide-header/slide-header.component.mjs +4 -4
  106. package/esm2022/space/space.component.mjs +4 -4
  107. package/esm2022/statistic/statistic.component.mjs +4 -4
  108. package/esm2022/stepper/stepper.component.mjs +5 -5
  109. package/esm2022/switch/switch.component.mjs +6 -6
  110. package/esm2022/table/table-skeleton.component.mjs +4 -7
  111. package/esm2022/table/table.component.mjs +5 -7
  112. package/esm2022/tabs/tab-content.component.mjs +9 -9
  113. package/esm2022/tabs/tabs.component.mjs +4 -7
  114. package/esm2022/time-picker/inner/inner-time-picker.component.mjs +3 -4
  115. package/esm2022/time-picker/time-picker-panel.component.mjs +5 -8
  116. package/esm2022/time-picker/time-picker.component.mjs +5 -15
  117. package/esm2022/timeline/timeline-item.component.mjs +4 -4
  118. package/esm2022/timeline/timeline.component.mjs +9 -9
  119. package/esm2022/tooltip/tooltip.component.mjs +4 -4
  120. package/esm2022/transfer/transfer-list.component.mjs +4 -4
  121. package/esm2022/transfer/transfer.component.mjs +4 -4
  122. package/esm2022/tree/tree-node.component.mjs +4 -4
  123. package/esm2022/tree/tree.component.mjs +5 -7
  124. package/esm2022/tree-select/tree-select.component.mjs +7 -10
  125. package/esm2022/typography/text/text.component.mjs +3 -4
  126. package/esm2022/version.mjs +2 -2
  127. package/esm2022/vote/vote.component.mjs +4 -4
  128. package/fesm2022/ngx-tethys-action.mjs +3 -3
  129. package/fesm2022/ngx-tethys-action.mjs.map +1 -1
  130. package/fesm2022/ngx-tethys-alert.mjs +54 -80
  131. package/fesm2022/ngx-tethys-alert.mjs.map +1 -1
  132. package/fesm2022/ngx-tethys-anchor.mjs +29 -13
  133. package/fesm2022/ngx-tethys-anchor.mjs.map +1 -1
  134. package/fesm2022/ngx-tethys-arrow-switcher.mjs +4 -4
  135. package/fesm2022/ngx-tethys-arrow-switcher.mjs.map +1 -1
  136. package/fesm2022/ngx-tethys-autocomplete.mjs +4 -4
  137. package/fesm2022/ngx-tethys-autocomplete.mjs.map +1 -1
  138. package/fesm2022/ngx-tethys-avatar.mjs +5 -5
  139. package/fesm2022/ngx-tethys-avatar.mjs.map +1 -1
  140. package/fesm2022/ngx-tethys-back-top.mjs +3 -3
  141. package/fesm2022/ngx-tethys-back-top.mjs.map +1 -1
  142. package/fesm2022/ngx-tethys-badge.mjs +3 -3
  143. package/fesm2022/ngx-tethys-badge.mjs.map +1 -1
  144. package/fesm2022/ngx-tethys-breadcrumb.mjs +3 -5
  145. package/fesm2022/ngx-tethys-breadcrumb.mjs.map +1 -1
  146. package/fesm2022/ngx-tethys-button.mjs +5 -5
  147. package/fesm2022/ngx-tethys-button.mjs.map +1 -1
  148. package/fesm2022/ngx-tethys-calendar.mjs +5 -5
  149. package/fesm2022/ngx-tethys-calendar.mjs.map +1 -1
  150. package/fesm2022/ngx-tethys-card.mjs +3 -3
  151. package/fesm2022/ngx-tethys-card.mjs.map +1 -1
  152. package/fesm2022/ngx-tethys-carousel.mjs +3 -3
  153. package/fesm2022/ngx-tethys-carousel.mjs.map +1 -1
  154. package/fesm2022/ngx-tethys-cascader.mjs +8 -10
  155. package/fesm2022/ngx-tethys-cascader.mjs.map +1 -1
  156. package/fesm2022/ngx-tethys-checkbox.mjs +4 -4
  157. package/fesm2022/ngx-tethys-checkbox.mjs.map +1 -1
  158. package/fesm2022/ngx-tethys-collapse.mjs +3 -3
  159. package/fesm2022/ngx-tethys-collapse.mjs.map +1 -1
  160. package/fesm2022/ngx-tethys-color-picker.mjs +3 -3
  161. package/fesm2022/ngx-tethys-color-picker.mjs.map +1 -1
  162. package/fesm2022/ngx-tethys-comment.mjs +3 -3
  163. package/fesm2022/ngx-tethys-comment.mjs.map +1 -1
  164. package/fesm2022/ngx-tethys-date-picker.mjs +51 -79
  165. package/fesm2022/ngx-tethys-date-picker.mjs.map +1 -1
  166. package/fesm2022/ngx-tethys-date-range.mjs +5 -7
  167. package/fesm2022/ngx-tethys-date-range.mjs.map +1 -1
  168. package/fesm2022/ngx-tethys-dialog.mjs +5 -5
  169. package/fesm2022/ngx-tethys-dialog.mjs.map +1 -1
  170. package/fesm2022/ngx-tethys-divider.mjs +20 -12
  171. package/fesm2022/ngx-tethys-divider.mjs.map +1 -1
  172. package/fesm2022/ngx-tethys-dropdown.mjs +10 -6
  173. package/fesm2022/ngx-tethys-dropdown.mjs.map +1 -1
  174. package/fesm2022/ngx-tethys-empty.mjs +3 -3
  175. package/fesm2022/ngx-tethys-empty.mjs.map +1 -1
  176. package/fesm2022/ngx-tethys-form.mjs +7 -7
  177. package/fesm2022/ngx-tethys-form.mjs.map +1 -1
  178. package/fesm2022/ngx-tethys-guider.mjs +3 -3
  179. package/fesm2022/ngx-tethys-guider.mjs.map +1 -1
  180. package/fesm2022/ngx-tethys-image.mjs +3 -3
  181. package/fesm2022/ngx-tethys-image.mjs.map +1 -1
  182. package/fesm2022/ngx-tethys-input.mjs +7 -7
  183. package/fesm2022/ngx-tethys-input.mjs.map +1 -1
  184. package/fesm2022/ngx-tethys-layout.mjs +84 -74
  185. package/fesm2022/ngx-tethys-layout.mjs.map +1 -1
  186. package/fesm2022/ngx-tethys-list.mjs +3 -3
  187. package/fesm2022/ngx-tethys-list.mjs.map +1 -1
  188. package/fesm2022/ngx-tethys-loading.mjs +3 -3
  189. package/fesm2022/ngx-tethys-loading.mjs.map +1 -1
  190. package/fesm2022/ngx-tethys-mention.mjs +3 -3
  191. package/fesm2022/ngx-tethys-mention.mjs.map +1 -1
  192. package/fesm2022/ngx-tethys-menu.mjs +5 -5
  193. package/fesm2022/ngx-tethys-menu.mjs.map +1 -1
  194. package/fesm2022/ngx-tethys-message.mjs +14 -6
  195. package/fesm2022/ngx-tethys-message.mjs.map +1 -1
  196. package/fesm2022/ngx-tethys-nav.mjs +6 -8
  197. package/fesm2022/ngx-tethys-nav.mjs.map +1 -1
  198. package/fesm2022/ngx-tethys-notify.mjs +5 -5
  199. package/fesm2022/ngx-tethys-notify.mjs.map +1 -1
  200. package/fesm2022/ngx-tethys-pagination.mjs +3 -3
  201. package/fesm2022/ngx-tethys-pagination.mjs.map +1 -1
  202. package/fesm2022/ngx-tethys-popover.mjs +3 -3
  203. package/fesm2022/ngx-tethys-popover.mjs.map +1 -1
  204. package/fesm2022/ngx-tethys-progress.mjs +6 -12
  205. package/fesm2022/ngx-tethys-progress.mjs.map +1 -1
  206. package/fesm2022/ngx-tethys-property-operation.mjs +3 -3
  207. package/fesm2022/ngx-tethys-property-operation.mjs.map +1 -1
  208. package/fesm2022/ngx-tethys-property.mjs +3 -3
  209. package/fesm2022/ngx-tethys-property.mjs.map +1 -1
  210. package/fesm2022/ngx-tethys-radio.mjs +4 -4
  211. package/fesm2022/ngx-tethys-radio.mjs.map +1 -1
  212. package/fesm2022/ngx-tethys-rate.mjs +4 -4
  213. package/fesm2022/ngx-tethys-rate.mjs.map +1 -1
  214. package/fesm2022/ngx-tethys-resizable.mjs +21 -9
  215. package/fesm2022/ngx-tethys-resizable.mjs.map +1 -1
  216. package/fesm2022/ngx-tethys-result.mjs +3 -3
  217. package/fesm2022/ngx-tethys-result.mjs.map +1 -1
  218. package/fesm2022/ngx-tethys-segment.mjs +6 -6
  219. package/fesm2022/ngx-tethys-segment.mjs.map +1 -1
  220. package/fesm2022/ngx-tethys-select.mjs +9 -11
  221. package/fesm2022/ngx-tethys-select.mjs.map +1 -1
  222. package/fesm2022/ngx-tethys-shared.mjs +8 -8
  223. package/fesm2022/ngx-tethys-shared.mjs.map +1 -1
  224. package/fesm2022/ngx-tethys-skeleton.mjs +22 -22
  225. package/fesm2022/ngx-tethys-skeleton.mjs.map +1 -1
  226. package/fesm2022/ngx-tethys-slide.mjs +3 -3
  227. package/fesm2022/ngx-tethys-slide.mjs.map +1 -1
  228. package/fesm2022/ngx-tethys-space.mjs +3 -3
  229. package/fesm2022/ngx-tethys-space.mjs.map +1 -1
  230. package/fesm2022/ngx-tethys-statistic.mjs +3 -3
  231. package/fesm2022/ngx-tethys-statistic.mjs.map +1 -1
  232. package/fesm2022/ngx-tethys-stepper.mjs +4 -4
  233. package/fesm2022/ngx-tethys-stepper.mjs.map +1 -1
  234. package/fesm2022/ngx-tethys-switch.mjs +5 -5
  235. package/fesm2022/ngx-tethys-switch.mjs.map +1 -1
  236. package/fesm2022/ngx-tethys-table.mjs +6 -11
  237. package/fesm2022/ngx-tethys-table.mjs.map +1 -1
  238. package/fesm2022/ngx-tethys-tabs.mjs +10 -13
  239. package/fesm2022/ngx-tethys-tabs.mjs.map +1 -1
  240. package/fesm2022/ngx-tethys-time-picker.mjs +9 -22
  241. package/fesm2022/ngx-tethys-time-picker.mjs.map +1 -1
  242. package/fesm2022/ngx-tethys-timeline.mjs +10 -10
  243. package/fesm2022/ngx-tethys-timeline.mjs.map +1 -1
  244. package/fesm2022/ngx-tethys-tooltip.mjs +3 -3
  245. package/fesm2022/ngx-tethys-tooltip.mjs.map +1 -1
  246. package/fesm2022/ngx-tethys-transfer.mjs +5 -5
  247. package/fesm2022/ngx-tethys-transfer.mjs.map +1 -1
  248. package/fesm2022/ngx-tethys-tree-select.mjs +6 -9
  249. package/fesm2022/ngx-tethys-tree-select.mjs.map +1 -1
  250. package/fesm2022/ngx-tethys-tree.mjs +6 -8
  251. package/fesm2022/ngx-tethys-tree.mjs.map +1 -1
  252. package/fesm2022/ngx-tethys-typography.mjs +3 -3
  253. package/fesm2022/ngx-tethys-typography.mjs.map +1 -1
  254. package/fesm2022/ngx-tethys-vote.mjs +3 -3
  255. package/fesm2022/ngx-tethys-vote.mjs.map +1 -1
  256. package/fesm2022/ngx-tethys.mjs +1 -1
  257. package/fesm2022/ngx-tethys.mjs.map +1 -1
  258. package/menu/group/menu-group.component.d.ts +42 -6
  259. package/package.json +1 -1
  260. package/pagination/pagination.component.d.ts +15 -5
  261. package/progress/progress-circle.component.d.ts +0 -1
  262. package/progress/progress.component.d.ts +0 -1
  263. package/property/property-item.component.d.ts +1 -4
  264. package/resizable/resize-handle.component.d.ts +1 -4
  265. package/schematics/version.d.ts +1 -1
  266. package/schematics/version.js +1 -1
  267. package/segment/segment.component.d.ts +1 -5
  268. package/shared/option/list-option/list-option.component.d.ts +5 -1
  269. package/skeleton/stylized/bullet-list.component.d.ts +9 -1
  270. package/table/table-skeleton.component.d.ts +10 -3
  271. package/tabs/tabs.component.d.ts +0 -1
  272. package/time-picker/time-picker-panel.component.d.ts +0 -1
  273. package/tree/tree-node.component.d.ts +10 -10
@@ -7,7 +7,7 @@ import { ThyTreeNodeCheckState } from './tree.class';
7
7
  import { ThyTreeService } from './tree.service';
8
8
  import { ThyLoading } from 'ngx-tethys/loading';
9
9
  import { ThyIcon } from 'ngx-tethys/icon';
10
- import { NgIf, NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';
10
+ import { NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';
11
11
  import { coerceBooleanProperty } from 'ngx-tethys/util';
12
12
  import * as i0 from "@angular/core";
13
13
  import * as i1 from "./tree.service";
@@ -155,11 +155,11 @@ export class ThyTreeNodeComponent {
155
155
  this.destroy$.complete();
156
156
  }
157
157
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ThyTreeNodeComponent, deps: [{ token: THY_TREE_ABSTRACT_TOKEN }, { token: i1.ThyTreeService }], target: i0.ɵɵFactoryTarget.Component }); }
158
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.0", type: ThyTreeNodeComponent, isStandalone: true, selector: "thy-tree-node", inputs: { node: "node", thyAsync: ["thyAsync", "thyAsync", coerceBooleanProperty], thyMultiple: ["thyMultiple", "thyMultiple", coerceBooleanProperty], thyDraggable: ["thyDraggable", "thyDraggable", coerceBooleanProperty], thyCheckable: ["thyCheckable", "thyCheckable", coerceBooleanProperty], thyClickBehavior: "thyClickBehavior", thyTitleTruncate: ["thyTitleTruncate", "thyTitleTruncate", coerceBooleanProperty], templateRef: "templateRef", emptyChildrenTemplateRef: "emptyChildrenTemplateRef", thyItemSize: ["thyItemSize", "thyItemSize", numberAttribute], thyIndent: ["thyIndent", "thyIndent", numberAttribute] }, outputs: { thyOnClick: "thyOnClick", thyDblClick: "thyDblClick", thyOnExpandChange: "thyOnExpandChange", thyOnCheckboxChange: "thyOnCheckboxChange" }, host: { properties: { "class.thy-tree-node": "this.thyTreeNodeClass", "class": "this.itemClass" } }, queries: [{ propertyName: "childrenTreeTemplateRef", first: true, predicate: ["childrenTree"], descendants: true }], viewQueries: [{ propertyName: "treeNodeWrapper", first: true, predicate: ["treeNodeWrapper"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #treeNodeWrapper\n class=\"thy-tree-node-wrapper\"\n [class.active]=\"root.isSelected(node)\"\n [class.disabled]=\"node.isDisabled\"\n [class.expand]=\"node.children.length\"\n [style.height]=\"thyItemSize + 'px'\"\n (click)=\"clickNode($event)\"\n>\n <span class=\"thy-tree-index\" [style.width.px]=\"node.level * thyIndent\"></span>\n <span class=\"thy-tree-drag-icon\">\n <thy-icon thyIconName=\"drag\"></thy-icon>\n </span>\n <span class=\"thy-tree-expand\" (click)=\"expandNode($event)\">\n <ng-container *ngIf=\"isShowExpand(node)\">\n <ng-container *ngIf=\"(node.children && node.children.length > 0) || thyAsync || emptyChildrenTemplateRef\">\n <thy-icon\n *ngIf=\"root.thyIcons?.expand && root.thyIcons?.collapse; else defaultIcon\"\n class=\"thy-tree-expand-icon\"\n [thyIconName]=\"node.isExpanded ? root.thyIcons.expand : root.thyIcons.collapse\"\n ></thy-icon>\n <ng-template #defaultIcon>\n <thy-icon class=\"thy-tree-expand-icon\" [class.collapse]=\"!node.isExpanded\" thyIconName=\"caret-right-down\"></thy-icon>\n </ng-template>\n </ng-container>\n </ng-container>\n </span>\n\n <span class=\"thy-tree-node-content\" (dblclick)=\"dbClickNode($event)\">\n <input\n *ngIf=\"thyCheckable\"\n type=\"checkbox\"\n class=\"thy-tree-node-check\"\n [class.form-check-indeterminate]=\"node.isChecked === checkState.indeterminate\"\n [class.form-unchecked]=\"node.isChecked === checkState.unchecked\"\n [checked]=\"node.isChecked === checkState.checked\"\n [disabled]=\"node.isDisabled\"\n (click)=\"clickNodeCheck($event)\"\n />\n <ng-container *ngIf=\"!templateRef\">\n <ng-container *ngIf=\"nodeIcon\">\n <span class=\"thy-tree-node-icon\"> <i [ngClass]=\"nodeIcon\" [ngStyle]=\"nodeIconStyle\"></i></span>\n </ng-container>\n <span [title]=\"node.title\" class=\"thy-tree-node-title\" [class.truncate]=\"thyTitleTruncate\"> {{ node.title }}</span>\n </ng-container>\n <ng-container *ngIf=\"templateRef\">\n <ng-template\n [ngTemplateOutlet]=\"templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: node, node: node, origin: node?.origin }\"\n ></ng-template>\n </ng-container>\n </span>\n</div>\n<ng-container *ngIf=\"thyAsync\">\n <thy-loading *ngIf=\"node.isLoading\" [thyDone]=\"!node.isLoading\"></thy-loading>\n</ng-container>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ThyLoading, selector: "thy-loading", inputs: ["thyDone", "thyTip", "thyIsMask"] }], encapsulation: i0.ViewEncapsulation.None }); }
158
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: ThyTreeNodeComponent, isStandalone: true, selector: "thy-tree-node", inputs: { node: "node", thyAsync: ["thyAsync", "thyAsync", coerceBooleanProperty], thyMultiple: ["thyMultiple", "thyMultiple", coerceBooleanProperty], thyDraggable: ["thyDraggable", "thyDraggable", coerceBooleanProperty], thyCheckable: ["thyCheckable", "thyCheckable", coerceBooleanProperty], thyClickBehavior: "thyClickBehavior", thyTitleTruncate: ["thyTitleTruncate", "thyTitleTruncate", coerceBooleanProperty], templateRef: "templateRef", emptyChildrenTemplateRef: "emptyChildrenTemplateRef", thyItemSize: ["thyItemSize", "thyItemSize", numberAttribute], thyIndent: ["thyIndent", "thyIndent", numberAttribute] }, outputs: { thyOnClick: "thyOnClick", thyDblClick: "thyDblClick", thyOnExpandChange: "thyOnExpandChange", thyOnCheckboxChange: "thyOnCheckboxChange" }, host: { properties: { "class.thy-tree-node": "this.thyTreeNodeClass", "class": "this.itemClass" } }, queries: [{ propertyName: "childrenTreeTemplateRef", first: true, predicate: ["childrenTree"], descendants: true }], viewQueries: [{ propertyName: "treeNodeWrapper", first: true, predicate: ["treeNodeWrapper"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #treeNodeWrapper\n class=\"thy-tree-node-wrapper\"\n [class.active]=\"root.isSelected(node)\"\n [class.disabled]=\"node.isDisabled\"\n [class.expand]=\"node.children.length\"\n [style.height]=\"thyItemSize + 'px'\"\n (click)=\"clickNode($event)\"\n >\n <span class=\"thy-tree-index\" [style.width.px]=\"node.level * thyIndent\"></span>\n <span class=\"thy-tree-drag-icon\">\n <thy-icon thyIconName=\"drag\"></thy-icon>\n </span>\n <span class=\"thy-tree-expand\" (click)=\"expandNode($event)\">\n @if (isShowExpand(node)) {\n @if ((node.children && node.children.length > 0) || thyAsync || emptyChildrenTemplateRef) {\n @if (root.thyIcons?.expand && root.thyIcons?.collapse) {\n <thy-icon\n class=\"thy-tree-expand-icon\"\n [thyIconName]=\"node.isExpanded ? root.thyIcons.expand : root.thyIcons.collapse\"\n ></thy-icon>\n } @else {\n <thy-icon class=\"thy-tree-expand-icon\" [class.collapse]=\"!node.isExpanded\" thyIconName=\"caret-right-down\"></thy-icon>\n }\n }\n }\n </span>\n\n <span class=\"thy-tree-node-content\" (dblclick)=\"dbClickNode($event)\">\n @if (thyCheckable) {\n <input\n type=\"checkbox\"\n class=\"thy-tree-node-check\"\n [class.form-check-indeterminate]=\"node.isChecked === checkState.indeterminate\"\n [class.form-unchecked]=\"node.isChecked === checkState.unchecked\"\n [checked]=\"node.isChecked === checkState.checked\"\n [disabled]=\"node.isDisabled\"\n (click)=\"clickNodeCheck($event)\"\n />\n }\n @if (!templateRef) {\n @if (nodeIcon) {\n <span class=\"thy-tree-node-icon\"> <i [ngClass]=\"nodeIcon\" [ngStyle]=\"nodeIconStyle\"></i></span>\n }\n <span [title]=\"node.title\" class=\"thy-tree-node-title\" [class.truncate]=\"thyTitleTruncate\"> {{ node.title }}</span>\n }\n @if (templateRef) {\n <ng-template\n [ngTemplateOutlet]=\"templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: node, node: node, origin: node?.origin }\"\n ></ng-template>\n }\n </span>\n</div>\n@if (thyAsync) {\n @if (node.isLoading) {\n <thy-loading [thyDone]=\"!node.isLoading\"></thy-loading>\n }\n}\n", dependencies: [{ kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ThyLoading, selector: "thy-loading", inputs: ["thyDone", "thyTip", "thyIsMask"] }], encapsulation: i0.ViewEncapsulation.None }); }
159
159
  }
160
160
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ThyTreeNodeComponent, decorators: [{
161
161
  type: Component,
162
- args: [{ selector: 'thy-tree-node', encapsulation: ViewEncapsulation.None, standalone: true, imports: [NgIf, ThyIcon, NgClass, NgStyle, NgTemplateOutlet, ThyLoading], template: "<div\n #treeNodeWrapper\n class=\"thy-tree-node-wrapper\"\n [class.active]=\"root.isSelected(node)\"\n [class.disabled]=\"node.isDisabled\"\n [class.expand]=\"node.children.length\"\n [style.height]=\"thyItemSize + 'px'\"\n (click)=\"clickNode($event)\"\n>\n <span class=\"thy-tree-index\" [style.width.px]=\"node.level * thyIndent\"></span>\n <span class=\"thy-tree-drag-icon\">\n <thy-icon thyIconName=\"drag\"></thy-icon>\n </span>\n <span class=\"thy-tree-expand\" (click)=\"expandNode($event)\">\n <ng-container *ngIf=\"isShowExpand(node)\">\n <ng-container *ngIf=\"(node.children && node.children.length > 0) || thyAsync || emptyChildrenTemplateRef\">\n <thy-icon\n *ngIf=\"root.thyIcons?.expand && root.thyIcons?.collapse; else defaultIcon\"\n class=\"thy-tree-expand-icon\"\n [thyIconName]=\"node.isExpanded ? root.thyIcons.expand : root.thyIcons.collapse\"\n ></thy-icon>\n <ng-template #defaultIcon>\n <thy-icon class=\"thy-tree-expand-icon\" [class.collapse]=\"!node.isExpanded\" thyIconName=\"caret-right-down\"></thy-icon>\n </ng-template>\n </ng-container>\n </ng-container>\n </span>\n\n <span class=\"thy-tree-node-content\" (dblclick)=\"dbClickNode($event)\">\n <input\n *ngIf=\"thyCheckable\"\n type=\"checkbox\"\n class=\"thy-tree-node-check\"\n [class.form-check-indeterminate]=\"node.isChecked === checkState.indeterminate\"\n [class.form-unchecked]=\"node.isChecked === checkState.unchecked\"\n [checked]=\"node.isChecked === checkState.checked\"\n [disabled]=\"node.isDisabled\"\n (click)=\"clickNodeCheck($event)\"\n />\n <ng-container *ngIf=\"!templateRef\">\n <ng-container *ngIf=\"nodeIcon\">\n <span class=\"thy-tree-node-icon\"> <i [ngClass]=\"nodeIcon\" [ngStyle]=\"nodeIconStyle\"></i></span>\n </ng-container>\n <span [title]=\"node.title\" class=\"thy-tree-node-title\" [class.truncate]=\"thyTitleTruncate\"> {{ node.title }}</span>\n </ng-container>\n <ng-container *ngIf=\"templateRef\">\n <ng-template\n [ngTemplateOutlet]=\"templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: node, node: node, origin: node?.origin }\"\n ></ng-template>\n </ng-container>\n </span>\n</div>\n<ng-container *ngIf=\"thyAsync\">\n <thy-loading *ngIf=\"node.isLoading\" [thyDone]=\"!node.isLoading\"></thy-loading>\n</ng-container>\n" }]
162
+ args: [{ selector: 'thy-tree-node', encapsulation: ViewEncapsulation.None, standalone: true, imports: [ThyIcon, NgClass, NgStyle, NgTemplateOutlet, ThyLoading], template: "<div\n #treeNodeWrapper\n class=\"thy-tree-node-wrapper\"\n [class.active]=\"root.isSelected(node)\"\n [class.disabled]=\"node.isDisabled\"\n [class.expand]=\"node.children.length\"\n [style.height]=\"thyItemSize + 'px'\"\n (click)=\"clickNode($event)\"\n >\n <span class=\"thy-tree-index\" [style.width.px]=\"node.level * thyIndent\"></span>\n <span class=\"thy-tree-drag-icon\">\n <thy-icon thyIconName=\"drag\"></thy-icon>\n </span>\n <span class=\"thy-tree-expand\" (click)=\"expandNode($event)\">\n @if (isShowExpand(node)) {\n @if ((node.children && node.children.length > 0) || thyAsync || emptyChildrenTemplateRef) {\n @if (root.thyIcons?.expand && root.thyIcons?.collapse) {\n <thy-icon\n class=\"thy-tree-expand-icon\"\n [thyIconName]=\"node.isExpanded ? root.thyIcons.expand : root.thyIcons.collapse\"\n ></thy-icon>\n } @else {\n <thy-icon class=\"thy-tree-expand-icon\" [class.collapse]=\"!node.isExpanded\" thyIconName=\"caret-right-down\"></thy-icon>\n }\n }\n }\n </span>\n\n <span class=\"thy-tree-node-content\" (dblclick)=\"dbClickNode($event)\">\n @if (thyCheckable) {\n <input\n type=\"checkbox\"\n class=\"thy-tree-node-check\"\n [class.form-check-indeterminate]=\"node.isChecked === checkState.indeterminate\"\n [class.form-unchecked]=\"node.isChecked === checkState.unchecked\"\n [checked]=\"node.isChecked === checkState.checked\"\n [disabled]=\"node.isDisabled\"\n (click)=\"clickNodeCheck($event)\"\n />\n }\n @if (!templateRef) {\n @if (nodeIcon) {\n <span class=\"thy-tree-node-icon\"> <i [ngClass]=\"nodeIcon\" [ngStyle]=\"nodeIconStyle\"></i></span>\n }\n <span [title]=\"node.title\" class=\"thy-tree-node-title\" [class.truncate]=\"thyTitleTruncate\"> {{ node.title }}</span>\n }\n @if (templateRef) {\n <ng-template\n [ngTemplateOutlet]=\"templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: node, node: node, origin: node?.origin }\"\n ></ng-template>\n }\n </span>\n</div>\n@if (thyAsync) {\n @if (node.isLoading) {\n <thy-loading [thyDone]=\"!node.isLoading\"></thy-loading>\n }\n}\n" }]
163
163
  }], ctorParameters: () => [{ type: undefined, decorators: [{
164
164
  type: Inject,
165
165
  args: [THY_TREE_ABSTRACT_TOKEN]
@@ -213,4 +213,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
213
213
  type: Input,
214
214
  args: [{ transform: numberAttribute }]
215
215
  }] } });
216
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ub2RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90cmVlL3RyZWUtbm9kZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvdHJlZS90cmVlLW5vZGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUlMLE1BQU0sRUFFTixXQUFXLEVBQ1gsU0FBUyxFQUNULGlCQUFpQixFQUNqQixlQUFlLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSx1QkFBdUIsRUFBNEIsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxFQUFvQixxQkFBcUIsRUFBb0IsTUFBTSxjQUFjLENBQUM7QUFDekYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQUV4RCxNQUFNLDJCQUEyQixHQUE0QiwrQkFBK0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBRWhIOzs7O0dBSUc7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O3VCQUFDLE9BQU87Z0JBS21CLFdBQVc7c0JBQWpELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO2dCQUtFLFNBQVM7c0JBQS9DLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbm9ybWFsaXplUGFzc2l2ZUxpc3RlbmVyT3B0aW9ucyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XG5pbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBudW1iZXJBdHRyaWJ1dGVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFRIWV9UUkVFX0FCU1RSQUNUX1RPS0VOLCBUaHlUcmVlQWJzdHJhY3RDb21wb25lbnQgfSBmcm9tICcuL3RyZWUtYWJzdHJhY3QnO1xuaW1wb3J0IHsgVGh5VHJlZU5vZGUgfSBmcm9tICcuL3RyZWUtbm9kZS5jbGFzcyc7XG5pbXBvcnQgeyBUaHlUcmVlRW1pdEV2ZW50LCBUaHlUcmVlTm9kZUNoZWNrU3RhdGUsIFRoeUNsaWNrQmVoYXZpb3IgfSBmcm9tICcuL3RyZWUuY2xhc3MnO1xuaW1wb3J0IHsgVGh5VHJlZVNlcnZpY2UgfSBmcm9tICcuL3RyZWUuc2VydmljZSc7XG5pbXBvcnQgeyBUaHlMb2FkaW5nIH0gZnJvbSAnbmd4LXRldGh5cy9sb2FkaW5nJztcbmltcG9ydCB7IFRoeUljb24gfSBmcm9tICduZ3gtdGV0aHlzL2ljb24nO1xuaW1wb3J0IHsgTmdJZiwgTmdDbGFzcywgTmdTdHlsZSwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICduZ3gtdGV0aHlzL3V0aWwnO1xuXG5jb25zdCBwYXNzaXZlRXZlbnRMaXN0ZW5lck9wdGlvbnMgPSA8QWRkRXZlbnRMaXN0ZW5lck9wdGlvbnM+bm9ybWFsaXplUGFzc2l2ZUxpc3RlbmVyT3B0aW9ucyh7IHBhc3NpdmU6IHRydWUgfSk7XG5cbi8qKlxuICog5qCR5b2i5o6n5Lu255qE6IqC54K557uE5Lu2XG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgdGh5LXRyZWUtbm9kZVxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RoeS10cmVlLW5vZGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90cmVlLW5vZGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmdJZiwgVGh5SWNvbiwgTmdDbGFzcywgTmdTdHlsZSwgTmdUZW1wbGF0ZU91dGxldCwgVGh5TG9hZGluZ11cbn0pXG5leHBvcnQgY2xhc3MgVGh5VHJlZU5vZGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgICAvKipcbiAgICAgKiBub2RlIOiKgueCueWxleeOsOaJgOmcgOeahOaVsOaNrlxuICAgICAqL1xuICAgIEBJbnB1dCgpIG5vZGU6IFRoeVRyZWVOb2RlO1xuXG4gICAgLyoqXG4gICAgICog6K6+572uIFRyZWVOb2RlIOaYr+WQpuaUr+aMgeW8guatpeWKoOi9vVxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pIHRoeUFzeW5jID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva4gVHJlZU5vZGUg5piv5ZCm5pSv5oyB5aSa6YCJ6IqC54K5XG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSkgdGh5TXVsdGlwbGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOiuvue9riBUcmVlTm9kZSDmmK/lkKbmlK/mjIHmi5bmi73mjpLluo9cbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KSB0aHlEcmFnZ2FibGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOiuvue9riBUcmVlTm9kZSDmmK/lkKbmlK/mjIEgQ2hlY2tib3gg6YCJ5oupXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSkgdGh5Q2hlY2thYmxlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDngrnlh7voioLngrnnmoTooYzkuLrvvIxgZGVmYXVsdGAg5Li66YCJ5Lit5b2T5YmN6IqC54K577yMYHNlbGVjdENoZWNrYm94YCDkuLrpgInkuK3oioLngrnnmoQgQ2hlY2tib3jvvIwgYHRoeUNoZWNrYWJsZWAg5Li6IHRydWUg5pe255Sf5pWI44CCXG4gICAgICogQGRlZmF1bHQgZGVmYXVsdFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeUNsaWNrQmVoYXZpb3I6IFRoeUNsaWNrQmVoYXZpb3I7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7oioLngrnlkI3np7DmmK/lkKbmlK/mjIHotoXlh7rmiKrlj5ZcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pIHRoeVRpdGxlVHJ1bmNhdGU6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiDorr7nva4gVHJlZU5vZGUg55qE5riy5p+T5qih5p2/XG4gICAgICovXG4gICAgQElucHV0KCkgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7lrZDnmoTnqbrmlbDmja7muLLmn5PmqKHmnb9cbiAgICAgKi9cbiAgICBASW5wdXQoKSBlbXB0eUNoaWxkcmVuVGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiDorr7nva4gbm9kZSDngrnlh7vkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25DbGljazogRXZlbnRFbWl0dGVyPFRoeVRyZWVFbWl0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlUcmVlRW1pdEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog5Y+M5Ye7IG5vZGUg5LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeURibENsaWNrOiBFdmVudEVtaXR0ZXI8VGh5VHJlZUVtaXRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVRyZWVFbWl0RXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDngrnlh7vlsZXlvIDop6blj5Hkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25FeHBhbmRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUaHlUcmVlRW1pdEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5VHJlZUVtaXRFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIOiuvue9riBjaGVjayDpgInmi6nkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25DaGVja2JveENoYW5nZTogRXZlbnRFbWl0dGVyPFRoeVRyZWVFbWl0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlUcmVlRW1pdEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog6K6+572uIGNoaWxkcmVuVHJlZSDnmoTmuLLmn5PmqKHmnb9cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKCdjaGlsZHJlblRyZWUnKSBjaGlsZHJlblRyZWVUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBUaGUgbmF0aXZlIGA8ZGl2IGNsYXNzPVwidGh5LXRyZWUtbm9kZS13cmFwcGVyIHRoeS1zb3J0YWJsZS1pdGVtXCI+PC9kaXY+YCBlbGVtZW50LiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3RyZWVOb2RlV3JhcHBlcicsIHsgc3RhdGljOiB0cnVlIH0pIHRyZWVOb2RlV3JhcHBlcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRoeS10cmVlLW5vZGUnKSB0aHlUcmVlTm9kZUNsYXNzID0gdHJ1ZTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MnKSBpdGVtQ2xhc3M6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIOW8gOWQr+iZmuaLn+a7muWKqOaXtu+8jOWNleihjOiKgueCueeahOmrmOW6pu+8jOW9k2B0aHlTaXplYOS4umBkZWZhdWx0YOaXtu+8jOivpeWPguaVsOaJjeeUn+aViFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIHRoeUl0ZW1TaXplID0gNDQ7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7oioLngrnnvKnov5vot53nprvvvIznvKnov5vot53nprsgPSB0aHlJbmRlbnQgKiBub2RlLmxldmVsXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgdGh5SW5kZW50ID0gMjU7XG5cbiAgICBwdWJsaWMgZ2V0IG5vZGVJY29uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2RlLm9yaWdpbi5pY29uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbm9kZUljb25TdHlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZS5vcmlnaW4uaWNvblN0eWxlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgY2hlY2tTdGF0ZSA9IFRoeVRyZWVOb2RlQ2hlY2tTdGF0ZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KFRIWV9UUkVFX0FCU1RSQUNUX1RPS0VOKSBwdWJsaWMgcm9vdDogVGh5VHJlZUFic3RyYWN0Q29tcG9uZW50LFxuICAgICAgICBwdWJsaWMgdGh5VHJlZVNlcnZpY2U6IFRoeVRyZWVTZXJ2aWNlXG4gICAgKSB7fVxuXG4gICAgcHVibGljIGNsaWNrTm9kZShldmVudDogRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMubm9kZS5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZE5vZGUoZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMudGh5Q2hlY2thYmxlICYmIHRoaXMudGh5Q2xpY2tCZWhhdmlvciA9PT0gJ3NlbGVjdENoZWNrYm94Jykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xpY2tOb2RlQ2hlY2soZXZlbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yb290LnRoeU11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm9vdC50b2dnbGVUcmVlTm9kZSh0aGlzLm5vZGUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm9vdC5zZWxlY3RUcmVlTm9kZSh0aGlzLm5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRoeU9uQ2xpY2suZW1pdCh7XG4gICAgICAgICAgICBldmVudE5hbWU6ICdjbGljaycsXG4gICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgICBub2RlOiB0aGlzLm5vZGVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGRiQ2xpY2tOb2RlKGV2ZW50OiBFdmVudCkge1xuICAgICAgICB0aGlzLnRoeURibENsaWNrLmVtaXQoe1xuICAgICAgICAgICAgZXZlbnROYW1lOiAnZGJjbGljaycsXG4gICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgICBub2RlOiB0aGlzLm5vZGVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsaWNrTm9kZUNoZWNrKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKHRoaXMubm9kZS5pc0NoZWNrZWQgPT09IFRoeVRyZWVOb2RlQ2hlY2tTdGF0ZS51bmNoZWNrZWQpIHtcbiAgICAgICAgICAgIHRoaXMubm9kZS5zZXRDaGVja2VkKHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubm9kZS5pc0NoZWNrZWQgPT09IFRoeVRyZWVOb2RlQ2hlY2tTdGF0ZS5jaGVja2VkKSB7XG4gICAgICAgICAgICB0aGlzLm5vZGUuc2V0Q2hlY2tlZChmYWxzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5ub2RlLmlzQ2hlY2tlZCA9PT0gVGh5VHJlZU5vZGVDaGVja1N0YXRlLmluZGV0ZXJtaW5hdGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm5vZGUuY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZUNoaWxkcmVuID0gdGhpcy5ub2RlLmNoaWxkcmVuLmZpbHRlcihpdGVtID0+ICFpdGVtLmlzRGlzYWJsZWQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQWxsQWN0aXZlQ2hpbGRyZW5DaGVja2VkID0gYWN0aXZlQ2hpbGRyZW4uZXZlcnkoaXRlbSA9PiBpdGVtLmlzQ2hlY2tlZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlLnNldENoZWNrZWQoIWlzQWxsQWN0aXZlQ2hpbGRyZW5DaGVja2VkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlLnNldENoZWNrZWQodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50aHlPbkNoZWNrYm94Q2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgZXZlbnROYW1lOiAnY2hlY2tib3hDaGFuZ2UnLFxuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgbm9kZTogdGhpcy5ub2RlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBleHBhbmROb2RlKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5ub2RlLnNldEV4cGFuZGVkKCF0aGlzLm5vZGUuaXNFeHBhbmRlZCk7XG4gICAgICAgIGlmICh0aGlzLnJvb3QudGh5U2hvd0V4cGFuZCkge1xuICAgICAgICAgICAgdGhpcy50aHlPbkV4cGFuZENoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgICAgICBldmVudE5hbWU6ICdleHBhbmQnLFxuICAgICAgICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICAgICAgICBub2RlOiB0aGlzLm5vZGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMudGh5QXN5bmMgJiYgdGhpcy5ub2RlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZS5zZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGlzU2hvd0V4cGFuZChub2RlOiBUaHlUcmVlTm9kZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5yb290LmlzU2hvd0V4cGFuZChub2RlKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pdGVtQ2xhc3MgPSB0aGlzLm5vZGU/Lml0ZW1DbGFzcz8uam9pbignICcpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMubm9kZSAmJiAhY2hhbmdlcy5ub2RlLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy5pdGVtQ2xhc3MgPSBjaGFuZ2VzPy5ub2RlPy5jdXJyZW50VmFsdWUuaXRlbUNsYXNzPy5qb2luKCcgJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gICN0cmVlTm9kZVdyYXBwZXJcbiAgY2xhc3M9XCJ0aHktdHJlZS1ub2RlLXdyYXBwZXJcIlxuICBbY2xhc3MuYWN0aXZlXT1cInJvb3QuaXNTZWxlY3RlZChub2RlKVwiXG4gIFtjbGFzcy5kaXNhYmxlZF09XCJub2RlLmlzRGlzYWJsZWRcIlxuICBbY2xhc3MuZXhwYW5kXT1cIm5vZGUuY2hpbGRyZW4ubGVuZ3RoXCJcbiAgW3N0eWxlLmhlaWdodF09XCJ0aHlJdGVtU2l6ZSArICdweCdcIlxuICAoY2xpY2spPVwiY2xpY2tOb2RlKCRldmVudClcIlxuPlxuICA8c3BhbiBjbGFzcz1cInRoeS10cmVlLWluZGV4XCIgW3N0eWxlLndpZHRoLnB4XT1cIm5vZGUubGV2ZWwgKiB0aHlJbmRlbnRcIj48L3NwYW4+XG4gIDxzcGFuICBjbGFzcz1cInRoeS10cmVlLWRyYWctaWNvblwiPlxuICAgIDx0aHktaWNvbiB0aHlJY29uTmFtZT1cImRyYWdcIj48L3RoeS1pY29uPlxuICA8L3NwYW4+XG4gIDxzcGFuIGNsYXNzPVwidGh5LXRyZWUtZXhwYW5kXCIgKGNsaWNrKT1cImV4cGFuZE5vZGUoJGV2ZW50KVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1Nob3dFeHBhbmQobm9kZSlcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHx8IHRoeUFzeW5jIHx8IGVtcHR5Q2hpbGRyZW5UZW1wbGF0ZVJlZlwiPlxuICAgICAgICA8dGh5LWljb25cbiAgICAgICAgICAqbmdJZj1cInJvb3QudGh5SWNvbnM/LmV4cGFuZCAmJiByb290LnRoeUljb25zPy5jb2xsYXBzZTsgZWxzZSBkZWZhdWx0SWNvblwiXG4gICAgICAgICAgY2xhc3M9XCJ0aHktdHJlZS1leHBhbmQtaWNvblwiXG4gICAgICAgICAgW3RoeUljb25OYW1lXT1cIm5vZGUuaXNFeHBhbmRlZCA/IHJvb3QudGh5SWNvbnMuZXhwYW5kIDogcm9vdC50aHlJY29ucy5jb2xsYXBzZVwiXG4gICAgICAgID48L3RoeS1pY29uPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRJY29uPlxuICAgICAgICAgIDx0aHktaWNvbiBjbGFzcz1cInRoeS10cmVlLWV4cGFuZC1pY29uXCIgW2NsYXNzLmNvbGxhcHNlXT1cIiFub2RlLmlzRXhwYW5kZWRcIiB0aHlJY29uTmFtZT1cImNhcmV0LXJpZ2h0LWRvd25cIj48L3RoeS1pY29uPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvc3Bhbj5cblxuICA8c3BhbiBjbGFzcz1cInRoeS10cmVlLW5vZGUtY29udGVudFwiIChkYmxjbGljayk9XCJkYkNsaWNrTm9kZSgkZXZlbnQpXCI+XG4gICAgPGlucHV0XG4gICAgICAqbmdJZj1cInRoeUNoZWNrYWJsZVwiXG4gICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgY2xhc3M9XCJ0aHktdHJlZS1ub2RlLWNoZWNrXCJcbiAgICAgIFtjbGFzcy5mb3JtLWNoZWNrLWluZGV0ZXJtaW5hdGVdPVwibm9kZS5pc0NoZWNrZWQgPT09IGNoZWNrU3RhdGUuaW5kZXRlcm1pbmF0ZVwiXG4gICAgICBbY2xhc3MuZm9ybS11bmNoZWNrZWRdPVwibm9kZS5pc0NoZWNrZWQgPT09IGNoZWNrU3RhdGUudW5jaGVja2VkXCJcbiAgICAgIFtjaGVja2VkXT1cIm5vZGUuaXNDaGVja2VkID09PSBjaGVja1N0YXRlLmNoZWNrZWRcIlxuICAgICAgW2Rpc2FibGVkXT1cIm5vZGUuaXNEaXNhYmxlZFwiXG4gICAgICAoY2xpY2spPVwiY2xpY2tOb2RlQ2hlY2soJGV2ZW50KVwiXG4gICAgLz5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRlbXBsYXRlUmVmXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZUljb25cIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aHktdHJlZS1ub2RlLWljb25cIj4gPGkgW25nQ2xhc3NdPVwibm9kZUljb25cIiBbbmdTdHlsZV09XCJub2RlSWNvblN0eWxlXCI+PC9pPjwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPHNwYW4gW3RpdGxlXT1cIm5vZGUudGl0bGVcIiBjbGFzcz1cInRoeS10cmVlLW5vZGUtdGl0bGVcIiBbY2xhc3MudHJ1bmNhdGVdPVwidGh5VGl0bGVUcnVuY2F0ZVwiPiB7eyBub2RlLnRpdGxlIH19PC9zcGFuPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0ZW1wbGF0ZVJlZlwiPlxuICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRlbXBsYXRlUmVmXCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBub2RlLCBub2RlOiBub2RlLCBvcmlnaW46IG5vZGU/Lm9yaWdpbiB9XCJcbiAgICAgID48L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L3NwYW4+XG48L2Rpdj5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJ0aHlBc3luY1wiPlxuICA8dGh5LWxvYWRpbmcgKm5nSWY9XCJub2RlLmlzTG9hZGluZ1wiIFt0aHlEb25lXT1cIiFub2RlLmlzTG9hZGluZ1wiPjwvdGh5LWxvYWRpbmc+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
216
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ub2RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90cmVlL3RyZWUtbm9kZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvdHJlZS90cmVlLW5vZGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUlMLE1BQU0sRUFFTixXQUFXLEVBQ1gsU0FBUyxFQUNULGlCQUFpQixFQUNqQixlQUFlLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSx1QkFBdUIsRUFBNEIsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxFQUFvQixxQkFBcUIsRUFBb0IsTUFBTSxjQUFjLENBQUM7QUFDekYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBRXhELE1BQU0sMkJBQTJCLEdBQTRCLCtCQUErQixDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFFaEg7Ozs7R0FJRztBQVFILE1BQU0s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LEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO2dCQUtFLFNBQVM7c0JBQS9DLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbm9ybWFsaXplUGFzc2l2ZUxpc3RlbmVyT3B0aW9ucyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XG5pbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBudW1iZXJBdHRyaWJ1dGVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFRIWV9UUkVFX0FCU1RSQUNUX1RPS0VOLCBUaHlUcmVlQWJzdHJhY3RDb21wb25lbnQgfSBmcm9tICcuL3RyZWUtYWJzdHJhY3QnO1xuaW1wb3J0IHsgVGh5VHJlZU5vZGUgfSBmcm9tICcuL3RyZWUtbm9kZS5jbGFzcyc7XG5pbXBvcnQgeyBUaHlUcmVlRW1pdEV2ZW50LCBUaHlUcmVlTm9kZUNoZWNrU3RhdGUsIFRoeUNsaWNrQmVoYXZpb3IgfSBmcm9tICcuL3RyZWUuY2xhc3MnO1xuaW1wb3J0IHsgVGh5VHJlZVNlcnZpY2UgfSBmcm9tICcuL3RyZWUuc2VydmljZSc7XG5pbXBvcnQgeyBUaHlMb2FkaW5nIH0gZnJvbSAnbmd4LXRldGh5cy9sb2FkaW5nJztcbmltcG9ydCB7IFRoeUljb24gfSBmcm9tICduZ3gtdGV0aHlzL2ljb24nO1xuaW1wb3J0IHsgTmdDbGFzcywgTmdTdHlsZSwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICduZ3gtdGV0aHlzL3V0aWwnO1xuXG5jb25zdCBwYXNzaXZlRXZlbnRMaXN0ZW5lck9wdGlvbnMgPSA8QWRkRXZlbnRMaXN0ZW5lck9wdGlvbnM+bm9ybWFsaXplUGFzc2l2ZUxpc3RlbmVyT3B0aW9ucyh7IHBhc3NpdmU6IHRydWUgfSk7XG5cbi8qKlxuICog5qCR5b2i5o6n5Lu255qE6IqC54K557uE5Lu2XG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgdGh5LXRyZWUtbm9kZVxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RoeS10cmVlLW5vZGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90cmVlLW5vZGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbVGh5SWNvbiwgTmdDbGFzcywgTmdTdHlsZSwgTmdUZW1wbGF0ZU91dGxldCwgVGh5TG9hZGluZ11cbn0pXG5leHBvcnQgY2xhc3MgVGh5VHJlZU5vZGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgICAvKipcbiAgICAgKiBub2RlIOiKgueCueWxleeOsOaJgOmcgOeahOaVsOaNrlxuICAgICAqL1xuICAgIEBJbnB1dCgpIG5vZGU6IFRoeVRyZWVOb2RlO1xuXG4gICAgLyoqXG4gICAgICog6K6+572uIFRyZWVOb2RlIOaYr+WQpuaUr+aMgeW8guatpeWKoOi9vVxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pIHRoeUFzeW5jID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva4gVHJlZU5vZGUg5piv5ZCm5pSv5oyB5aSa6YCJ6IqC54K5XG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSkgdGh5TXVsdGlwbGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOiuvue9riBUcmVlTm9kZSDmmK/lkKbmlK/mjIHmi5bmi73mjpLluo9cbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KSB0aHlEcmFnZ2FibGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOiuvue9riBUcmVlTm9kZSDmmK/lkKbmlK/mjIEgQ2hlY2tib3gg6YCJ5oupXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSkgdGh5Q2hlY2thYmxlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDngrnlh7voioLngrnnmoTooYzkuLrvvIxgZGVmYXVsdGAg5Li66YCJ5Lit5b2T5YmN6IqC54K577yMYHNlbGVjdENoZWNrYm94YCDkuLrpgInkuK3oioLngrnnmoQgQ2hlY2tib3jvvIwgYHRoeUNoZWNrYWJsZWAg5Li6IHRydWUg5pe255Sf5pWI44CCXG4gICAgICogQGRlZmF1bHQgZGVmYXVsdFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeUNsaWNrQmVoYXZpb3I6IFRoeUNsaWNrQmVoYXZpb3I7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7oioLngrnlkI3np7DmmK/lkKbmlK/mjIHotoXlh7rmiKrlj5ZcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pIHRoeVRpdGxlVHJ1bmNhdGU6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiDorr7nva4gVHJlZU5vZGUg55qE5riy5p+T5qih5p2/XG4gICAgICovXG4gICAgQElucHV0KCkgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7lrZDnmoTnqbrmlbDmja7muLLmn5PmqKHmnb9cbiAgICAgKi9cbiAgICBASW5wdXQoKSBlbXB0eUNoaWxkcmVuVGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiDorr7nva4gbm9kZSDngrnlh7vkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25DbGljazogRXZlbnRFbWl0dGVyPFRoeVRyZWVFbWl0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlUcmVlRW1pdEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog5Y+M5Ye7IG5vZGUg5LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeURibENsaWNrOiBFdmVudEVtaXR0ZXI8VGh5VHJlZUVtaXRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVRyZWVFbWl0RXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDngrnlh7vlsZXlvIDop6blj5Hkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25FeHBhbmRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUaHlUcmVlRW1pdEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5VHJlZUVtaXRFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIOiuvue9riBjaGVjayDpgInmi6nkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25DaGVja2JveENoYW5nZTogRXZlbnRFbWl0dGVyPFRoeVRyZWVFbWl0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlUcmVlRW1pdEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog6K6+572uIGNoaWxkcmVuVHJlZSDnmoTmuLLmn5PmqKHmnb9cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKCdjaGlsZHJlblRyZWUnKSBjaGlsZHJlblRyZWVUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBUaGUgbmF0aXZlIGA8ZGl2IGNsYXNzPVwidGh5LXRyZWUtbm9kZS13cmFwcGVyIHRoeS1zb3J0YWJsZS1pdGVtXCI+PC9kaXY+YCBlbGVtZW50LiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3RyZWVOb2RlV3JhcHBlcicsIHsgc3RhdGljOiB0cnVlIH0pIHRyZWVOb2RlV3JhcHBlcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRoeS10cmVlLW5vZGUnKSB0aHlUcmVlTm9kZUNsYXNzID0gdHJ1ZTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MnKSBpdGVtQ2xhc3M6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIOW8gOWQr+iZmuaLn+a7muWKqOaXtu+8jOWNleihjOiKgueCueeahOmrmOW6pu+8jOW9k2B0aHlTaXplYOS4umBkZWZhdWx0YOaXtu+8jOivpeWPguaVsOaJjeeUn+aViFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIHRoeUl0ZW1TaXplID0gNDQ7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7oioLngrnnvKnov5vot53nprvvvIznvKnov5vot53nprsgPSB0aHlJbmRlbnQgKiBub2RlLmxldmVsXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgdGh5SW5kZW50ID0gMjU7XG5cbiAgICBwdWJsaWMgZ2V0IG5vZGVJY29uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2RlLm9yaWdpbi5pY29uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbm9kZUljb25TdHlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZS5vcmlnaW4uaWNvblN0eWxlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgY2hlY2tTdGF0ZSA9IFRoeVRyZWVOb2RlQ2hlY2tTdGF0ZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KFRIWV9UUkVFX0FCU1RSQUNUX1RPS0VOKSBwdWJsaWMgcm9vdDogVGh5VHJlZUFic3RyYWN0Q29tcG9uZW50LFxuICAgICAgICBwdWJsaWMgdGh5VHJlZVNlcnZpY2U6IFRoeVRyZWVTZXJ2aWNlXG4gICAgKSB7fVxuXG4gICAgcHVibGljIGNsaWNrTm9kZShldmVudDogRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMubm9kZS5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZE5vZGUoZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMudGh5Q2hlY2thYmxlICYmIHRoaXMudGh5Q2xpY2tCZWhhdmlvciA9PT0gJ3NlbGVjdENoZWNrYm94Jykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xpY2tOb2RlQ2hlY2soZXZlbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yb290LnRoeU11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm9vdC50b2dnbGVUcmVlTm9kZSh0aGlzLm5vZGUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm9vdC5zZWxlY3RUcmVlTm9kZSh0aGlzLm5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRoeU9uQ2xpY2suZW1pdCh7XG4gICAgICAgICAgICBldmVudE5hbWU6ICdjbGljaycsXG4gICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgICBub2RlOiB0aGlzLm5vZGVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGRiQ2xpY2tOb2RlKGV2ZW50OiBFdmVudCkge1xuICAgICAgICB0aGlzLnRoeURibENsaWNrLmVtaXQoe1xuICAgICAgICAgICAgZXZlbnROYW1lOiAnZGJjbGljaycsXG4gICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgICBub2RlOiB0aGlzLm5vZGVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsaWNrTm9kZUNoZWNrKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKHRoaXMubm9kZS5pc0NoZWNrZWQgPT09IFRoeVRyZWVOb2RlQ2hlY2tTdGF0ZS51bmNoZWNrZWQpIHtcbiAgICAgICAgICAgIHRoaXMubm9kZS5zZXRDaGVja2VkKHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubm9kZS5pc0NoZWNrZWQgPT09IFRoeVRyZWVOb2RlQ2hlY2tTdGF0ZS5jaGVja2VkKSB7XG4gICAgICAgICAgICB0aGlzLm5vZGUuc2V0Q2hlY2tlZChmYWxzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5ub2RlLmlzQ2hlY2tlZCA9PT0gVGh5VHJlZU5vZGVDaGVja1N0YXRlLmluZGV0ZXJtaW5hdGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm5vZGUuY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZUNoaWxkcmVuID0gdGhpcy5ub2RlLmNoaWxkcmVuLmZpbHRlcihpdGVtID0+ICFpdGVtLmlzRGlzYWJsZWQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQWxsQWN0aXZlQ2hpbGRyZW5DaGVja2VkID0gYWN0aXZlQ2hpbGRyZW4uZXZlcnkoaXRlbSA9PiBpdGVtLmlzQ2hlY2tlZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlLnNldENoZWNrZWQoIWlzQWxsQWN0aXZlQ2hpbGRyZW5DaGVja2VkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlLnNldENoZWNrZWQodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50aHlPbkNoZWNrYm94Q2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgZXZlbnROYW1lOiAnY2hlY2tib3hDaGFuZ2UnLFxuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgbm9kZTogdGhpcy5ub2RlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBleHBhbmROb2RlKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5ub2RlLnNldEV4cGFuZGVkKCF0aGlzLm5vZGUuaXNFeHBhbmRlZCk7XG4gICAgICAgIGlmICh0aGlzLnJvb3QudGh5U2hvd0V4cGFuZCkge1xuICAgICAgICAgICAgdGhpcy50aHlPbkV4cGFuZENoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgICAgICBldmVudE5hbWU6ICdleHBhbmQnLFxuICAgICAgICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICAgICAgICBub2RlOiB0aGlzLm5vZGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMudGh5QXN5bmMgJiYgdGhpcy5ub2RlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZS5zZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGlzU2hvd0V4cGFuZChub2RlOiBUaHlUcmVlTm9kZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5yb290LmlzU2hvd0V4cGFuZChub2RlKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pdGVtQ2xhc3MgPSB0aGlzLm5vZGU/Lml0ZW1DbGFzcz8uam9pbignICcpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMubm9kZSAmJiAhY2hhbmdlcy5ub2RlLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy5pdGVtQ2xhc3MgPSBjaGFuZ2VzPy5ub2RlPy5jdXJyZW50VmFsdWUuaXRlbUNsYXNzPy5qb2luKCcgJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gICN0cmVlTm9kZVdyYXBwZXJcbiAgY2xhc3M9XCJ0aHktdHJlZS1ub2RlLXdyYXBwZXJcIlxuICBbY2xhc3MuYWN0aXZlXT1cInJvb3QuaXNTZWxlY3RlZChub2RlKVwiXG4gIFtjbGFzcy5kaXNhYmxlZF09XCJub2RlLmlzRGlzYWJsZWRcIlxuICBbY2xhc3MuZXhwYW5kXT1cIm5vZGUuY2hpbGRyZW4ubGVuZ3RoXCJcbiAgW3N0eWxlLmhlaWdodF09XCJ0aHlJdGVtU2l6ZSArICdweCdcIlxuICAoY2xpY2spPVwiY2xpY2tOb2RlKCRldmVudClcIlxuICA+XG4gIDxzcGFuIGNsYXNzPVwidGh5LXRyZWUtaW5kZXhcIiBbc3R5bGUud2lkdGgucHhdPVwibm9kZS5sZXZlbCAqIHRoeUluZGVudFwiPjwvc3Bhbj5cbiAgPHNwYW4gIGNsYXNzPVwidGh5LXRyZWUtZHJhZy1pY29uXCI+XG4gICAgPHRoeS1pY29uIHRoeUljb25OYW1lPVwiZHJhZ1wiPjwvdGh5LWljb24+XG4gIDwvc3Bhbj5cbiAgPHNwYW4gY2xhc3M9XCJ0aHktdHJlZS1leHBhbmRcIiAoY2xpY2spPVwiZXhwYW5kTm9kZSgkZXZlbnQpXCI+XG4gICAgQGlmIChpc1Nob3dFeHBhbmQobm9kZSkpIHtcbiAgICAgIEBpZiAoKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB8fCB0aHlBc3luYyB8fCBlbXB0eUNoaWxkcmVuVGVtcGxhdGVSZWYpIHtcbiAgICAgICAgQGlmIChyb290LnRoeUljb25zPy5leHBhbmQgJiYgcm9vdC50aHlJY29ucz8uY29sbGFwc2UpIHtcbiAgICAgICAgICA8dGh5LWljb25cbiAgICAgICAgICAgIGNsYXNzPVwidGh5LXRyZWUtZXhwYW5kLWljb25cIlxuICAgICAgICAgICAgW3RoeUljb25OYW1lXT1cIm5vZGUuaXNFeHBhbmRlZCA/IHJvb3QudGh5SWNvbnMuZXhwYW5kIDogcm9vdC50aHlJY29ucy5jb2xsYXBzZVwiXG4gICAgICAgICAgPjwvdGh5LWljb24+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDx0aHktaWNvbiBjbGFzcz1cInRoeS10cmVlLWV4cGFuZC1pY29uXCIgW2NsYXNzLmNvbGxhcHNlXT1cIiFub2RlLmlzRXhwYW5kZWRcIiB0aHlJY29uTmFtZT1cImNhcmV0LXJpZ2h0LWRvd25cIj48L3RoeS1pY29uPlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICA8L3NwYW4+XG5cbiAgPHNwYW4gY2xhc3M9XCJ0aHktdHJlZS1ub2RlLWNvbnRlbnRcIiAoZGJsY2xpY2spPVwiZGJDbGlja05vZGUoJGV2ZW50KVwiPlxuICAgIEBpZiAodGh5Q2hlY2thYmxlKSB7XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgY2xhc3M9XCJ0aHktdHJlZS1ub2RlLWNoZWNrXCJcbiAgICAgICAgW2NsYXNzLmZvcm0tY2hlY2staW5kZXRlcm1pbmF0ZV09XCJub2RlLmlzQ2hlY2tlZCA9PT0gY2hlY2tTdGF0ZS5pbmRldGVybWluYXRlXCJcbiAgICAgICAgW2NsYXNzLmZvcm0tdW5jaGVja2VkXT1cIm5vZGUuaXNDaGVja2VkID09PSBjaGVja1N0YXRlLnVuY2hlY2tlZFwiXG4gICAgICAgIFtjaGVja2VkXT1cIm5vZGUuaXNDaGVja2VkID09PSBjaGVja1N0YXRlLmNoZWNrZWRcIlxuICAgICAgICBbZGlzYWJsZWRdPVwibm9kZS5pc0Rpc2FibGVkXCJcbiAgICAgICAgKGNsaWNrKT1cImNsaWNrTm9kZUNoZWNrKCRldmVudClcIlxuICAgICAgICAvPlxuICAgIH1cbiAgICBAaWYgKCF0ZW1wbGF0ZVJlZikge1xuICAgICAgQGlmIChub2RlSWNvbikge1xuICAgICAgICA8c3BhbiBjbGFzcz1cInRoeS10cmVlLW5vZGUtaWNvblwiPiA8aSBbbmdDbGFzc109XCJub2RlSWNvblwiIFtuZ1N0eWxlXT1cIm5vZGVJY29uU3R5bGVcIj48L2k+PC9zcGFuPlxuICAgICAgfVxuICAgICAgPHNwYW4gW3RpdGxlXT1cIm5vZGUudGl0bGVcIiBjbGFzcz1cInRoeS10cmVlLW5vZGUtdGl0bGVcIiBbY2xhc3MudHJ1bmNhdGVdPVwidGh5VGl0bGVUcnVuY2F0ZVwiPiB7eyBub2RlLnRpdGxlIH19PC9zcGFuPlxuICAgIH1cbiAgICBAaWYgKHRlbXBsYXRlUmVmKSB7XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVSZWZcIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IG5vZGUsIG5vZGU6IG5vZGUsIG9yaWdpbjogbm9kZT8ub3JpZ2luIH1cIlxuICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgfVxuICA8L3NwYW4+XG48L2Rpdj5cbkBpZiAodGh5QXN5bmMpIHtcbiAgQGlmIChub2RlLmlzTG9hZGluZykge1xuICAgIDx0aHktbG9hZGluZyBbdGh5RG9uZV09XCIhbm9kZS5pc0xvYWRpbmdcIj48L3RoeS1sb2FkaW5nPlxuICB9XG59XG4iXX0=
@@ -9,7 +9,7 @@ import { ThyTreeNode } from './tree-node.class';
9
9
  import { ThyTreeDropPosition, ThyTreeIcons } from './tree.class';
10
10
  import { ThyTreeService } from './tree.service';
11
11
  import { ThyTreeNodeComponent } from './tree-node.component';
12
- import { NgIf, NgFor, DOCUMENT } from '@angular/common';
12
+ import { DOCUMENT } from '@angular/common';
13
13
  import { CdkDrag, CdkDropList } from '@angular/cdk/drag-drop';
14
14
  import { filter, startWith, takeUntil } from 'rxjs/operators';
15
15
  import { Subject } from 'rxjs';
@@ -522,7 +522,7 @@ export class ThyTree {
522
522
  this.destroy$.complete();
523
523
  }
524
524
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ThyTree, deps: [{ token: i1.ThyTreeService }, { token: i0.ChangeDetectorRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component }); }
525
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.0", type: ThyTree, isStandalone: true, selector: "thy-tree", inputs: { thyNodes: "thyNodes", thyShowExpand: "thyShowExpand", thyMultiple: ["thyMultiple", "thyMultiple", coerceBooleanProperty], thyDraggable: ["thyDraggable", "thyDraggable", coerceBooleanProperty], thyCheckable: ["thyCheckable", "thyCheckable", coerceBooleanProperty], thyClickBehavior: "thyClickBehavior", thyCheckStateResolve: "thyCheckStateResolve", thyAsync: ["thyAsync", "thyAsync", coerceBooleanProperty], thyType: "thyType", thyIcons: "thyIcons", thySize: "thySize", thyVirtualScroll: ["thyVirtualScroll", "thyVirtualScroll", coerceBooleanProperty], thyItemSize: ["thyItemSize", "thyItemSize", numberAttribute], thyTitleTruncate: ["thyTitleTruncate", "thyTitleTruncate", coerceBooleanProperty], thySelectedKeys: "thySelectedKeys", thyExpandedKeys: "thyExpandedKeys", thyExpandAll: ["thyExpandAll", "thyExpandAll", coerceBooleanProperty], thyIndent: ["thyIndent", "thyIndent", numberAttribute], thyBeforeDragStart: "thyBeforeDragStart", thyBeforeDragDrop: "thyBeforeDragDrop" }, outputs: { viewport: "viewport", thyOnClick: "thyOnClick", thyOnCheckboxChange: "thyOnCheckboxChange", thyOnExpandChange: "thyOnExpandChange", thyOnDragDrop: "thyOnDragDrop", thyDblClick: "thyDblClick" }, host: { properties: { "class.thy-multiple-selection-list": "this.thyMultiple", "class.thy-tree-draggable": "this.thyDraggable", "class.thy-virtual-scrolling-tree": "this.thyVirtualScroll", "class.thy-tree": "this.thyTreeClass", "class.thy-tree-dragging": "this.dragging" } }, providers: [
525
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: ThyTree, isStandalone: true, selector: "thy-tree", inputs: { thyNodes: "thyNodes", thyShowExpand: "thyShowExpand", thyMultiple: ["thyMultiple", "thyMultiple", coerceBooleanProperty], thyDraggable: ["thyDraggable", "thyDraggable", coerceBooleanProperty], thyCheckable: ["thyCheckable", "thyCheckable", coerceBooleanProperty], thyClickBehavior: "thyClickBehavior", thyCheckStateResolve: "thyCheckStateResolve", thyAsync: ["thyAsync", "thyAsync", coerceBooleanProperty], thyType: "thyType", thyIcons: "thyIcons", thySize: "thySize", thyVirtualScroll: ["thyVirtualScroll", "thyVirtualScroll", coerceBooleanProperty], thyItemSize: ["thyItemSize", "thyItemSize", numberAttribute], thyTitleTruncate: ["thyTitleTruncate", "thyTitleTruncate", coerceBooleanProperty], thySelectedKeys: "thySelectedKeys", thyExpandedKeys: "thyExpandedKeys", thyExpandAll: ["thyExpandAll", "thyExpandAll", coerceBooleanProperty], thyIndent: ["thyIndent", "thyIndent", numberAttribute], thyBeforeDragStart: "thyBeforeDragStart", thyBeforeDragDrop: "thyBeforeDragDrop" }, outputs: { viewport: "viewport", thyOnClick: "thyOnClick", thyOnCheckboxChange: "thyOnCheckboxChange", thyOnExpandChange: "thyOnExpandChange", thyOnDragDrop: "thyOnDragDrop", thyDblClick: "thyDblClick" }, host: { properties: { "class.thy-multiple-selection-list": "this.thyMultiple", "class.thy-tree-draggable": "this.thyDraggable", "class.thy-virtual-scrolling-tree": "this.thyVirtualScroll", "class.thy-tree": "this.thyTreeClass", "class.thy-tree-dragging": "this.dragging" } }, providers: [
526
526
  {
527
527
  provide: NG_VALUE_ACCESSOR,
528
528
  useExisting: forwardRef(() => ThyTree),
@@ -533,7 +533,7 @@ export class ThyTree {
533
533
  useExisting: forwardRef(() => ThyTree)
534
534
  },
535
535
  ThyTreeService
536
- ], queries: [{ propertyName: "templateRef", first: true, predicate: ["treeNodeTemplate"], descendants: true, static: true }, { propertyName: "emptyChildrenTemplate", first: true, predicate: ["emptyChildrenTemplate"], descendants: true, static: true }], viewQueries: [{ propertyName: "viewport", first: true, predicate: ["viewport"], descendants: true }, { propertyName: "cdkDrags", predicate: CdkDrag, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<cdk-virtual-scroll-viewport\n #viewport\n *ngIf=\"thyVirtualScroll\"\n [itemSize]=\"thyItemSize\"\n [style.height]=\"'100%'\"\n cdkDropList\n [cdkDropListAutoScrollStep]=\"6\"\n [cdkDropListData]=\"flattenTreeNodes\"\n [cdkDropListSortingDisabled]=\"true\"\n (cdkDropListDropped)=\"onListDropped($event)\"\n >\n <div class=\"virtual-trees-container\">\n <thy-tree-node\n *cdkVirtualFor=\"let node of flattenTreeNodes; trackBy: trackByFn; let i = index\"\n cdkDrag\n [cdkDragData]=\"node\"\n [cdkDragDisabled]=\"!thyDraggable || !(node | treeNodeDraggable : thyBeforeDragStart)\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n (cdkDragEnded)=\"onDragEnded($event)\"\n (cdkDragMoved)=\"emitDragMoved($event)\"\n [node]=\"node\"\n [templateRef]=\"templateRef\"\n [emptyChildrenTemplateRef]=\"emptyChildrenTemplate\"\n [thyAsync]=\"thyAsync\"\n [thyDraggable]=\"thyDraggable\"\n [thyCheckable]=\"thyCheckable\"\n [thyMultiple]=\"thyMultiple\"\n [thyClickBehavior]=\"thyClickBehavior\"\n [thyTitleTruncate]=\"thyTitleTruncate\"\n [thyItemSize]=\"thyItemSize\"\n [thyIndent]=\"thyIndent\"\n (thyOnClick)=\"thyOnClick.emit($event)\"\n (thyDblClick)=\"thyDblClick.emit($event)\"\n (thyOnExpandChange)=\"eventTriggerChanged($event)\"\n (thyOnCheckboxChange)=\"eventTriggerChanged($event)\">\n </thy-tree-node>\n </div>\n</cdk-virtual-scroll-viewport>\n\n<div\n *ngIf=\"!thyVirtualScroll\"\n cdkDropList\n [cdkDropListAutoScrollStep]=\"6\"\n [cdkDropListData]=\"flattenTreeNodes\"\n [cdkDropListSortingDisabled]=\"true\"\n (cdkDropListDropped)=\"onListDropped($event)\">\n <thy-tree-node\n *ngFor=\"let node of flattenTreeNodes; trackBy: trackByFn; let i = index\"\n cdkDrag\n [cdkDragData]=\"node\"\n [cdkDragDisabled]=\"!thyDraggable || !(node | treeNodeDraggable : thyBeforeDragStart)\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n (cdkDragEnded)=\"onDragEnded($event)\"\n (cdkDragMoved)=\"emitDragMoved($event)\"\n [node]=\"node\"\n [templateRef]=\"templateRef\"\n [emptyChildrenTemplateRef]=\"emptyChildrenTemplate\"\n [thyAsync]=\"thyAsync\"\n [thyDraggable]=\"thyDraggable\"\n [thyCheckable]=\"thyCheckable\"\n [thyMultiple]=\"thyMultiple\"\n [thyTitleTruncate]=\"thyTitleTruncate\"\n [thyItemSize]=\"thyItemSize\"\n [thyClickBehavior]=\"thyClickBehavior\"\n [thyIndent]=\"thyIndent\"\n (thyOnClick)=\"thyOnClick.emit($event)\"\n (thyDblClick)=\"thyDblClick.emit($event)\"\n (thyOnExpandChange)=\"eventTriggerChanged($event)\"\n (thyOnCheckboxChange)=\"thyOnCheckboxChange.emit($event)\">\n </thy-tree-node>\n</div>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "component", type: CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: ThyTreeNodeComponent, selector: "thy-tree-node", inputs: ["node", "thyAsync", "thyMultiple", "thyDraggable", "thyCheckable", "thyClickBehavior", "thyTitleTruncate", "templateRef", "emptyChildrenTemplateRef", "thyItemSize", "thyIndent"], outputs: ["thyOnClick", "thyDblClick", "thyOnExpandChange", "thyOnCheckboxChange"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: ThyTreeNodeDraggablePipe, name: "treeNodeDraggable" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
536
+ ], queries: [{ propertyName: "templateRef", first: true, predicate: ["treeNodeTemplate"], descendants: true, static: true }, { propertyName: "emptyChildrenTemplate", first: true, predicate: ["emptyChildrenTemplate"], descendants: true, static: true }], viewQueries: [{ propertyName: "viewport", first: true, predicate: ["viewport"], descendants: true }, { propertyName: "cdkDrags", predicate: CdkDrag, descendants: true }], usesOnChanges: true, ngImport: i0, template: "@if (thyVirtualScroll) {\n <cdk-virtual-scroll-viewport\n #viewport\n [itemSize]=\"thyItemSize\"\n [style.height]=\"'100%'\"\n cdkDropList\n [cdkDropListAutoScrollStep]=\"6\"\n [cdkDropListData]=\"flattenTreeNodes\"\n [cdkDropListSortingDisabled]=\"true\"\n (cdkDropListDropped)=\"onListDropped($event)\"\n >\n <div class=\"virtual-trees-container\">\n <thy-tree-node\n *cdkVirtualFor=\"let node of flattenTreeNodes; trackBy: trackByFn; let i = index\"\n cdkDrag\n [cdkDragData]=\"node\"\n [cdkDragDisabled]=\"!thyDraggable || !(node | treeNodeDraggable : thyBeforeDragStart)\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n (cdkDragEnded)=\"onDragEnded($event)\"\n (cdkDragMoved)=\"emitDragMoved($event)\"\n [node]=\"node\"\n [templateRef]=\"templateRef\"\n [emptyChildrenTemplateRef]=\"emptyChildrenTemplate\"\n [thyAsync]=\"thyAsync\"\n [thyDraggable]=\"thyDraggable\"\n [thyCheckable]=\"thyCheckable\"\n [thyMultiple]=\"thyMultiple\"\n [thyClickBehavior]=\"thyClickBehavior\"\n [thyTitleTruncate]=\"thyTitleTruncate\"\n [thyItemSize]=\"thyItemSize\"\n [thyIndent]=\"thyIndent\"\n (thyOnClick)=\"thyOnClick.emit($event)\"\n (thyDblClick)=\"thyDblClick.emit($event)\"\n (thyOnExpandChange)=\"eventTriggerChanged($event)\"\n (thyOnCheckboxChange)=\"eventTriggerChanged($event)\">\n </thy-tree-node>\n </div>\n </cdk-virtual-scroll-viewport>\n}\n\n@if (!thyVirtualScroll) {\n <div\n cdkDropList\n [cdkDropListAutoScrollStep]=\"6\"\n [cdkDropListData]=\"flattenTreeNodes\"\n [cdkDropListSortingDisabled]=\"true\"\n (cdkDropListDropped)=\"onListDropped($event)\">\n @for (node of flattenTreeNodes; track trackByFn(i, node); let i = $index) {\n <thy-tree-node\n cdkDrag\n [cdkDragData]=\"node\"\n [cdkDragDisabled]=\"!thyDraggable || !(node | treeNodeDraggable : thyBeforeDragStart)\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n (cdkDragEnded)=\"onDragEnded($event)\"\n (cdkDragMoved)=\"emitDragMoved($event)\"\n [node]=\"node\"\n [templateRef]=\"templateRef\"\n [emptyChildrenTemplateRef]=\"emptyChildrenTemplate\"\n [thyAsync]=\"thyAsync\"\n [thyDraggable]=\"thyDraggable\"\n [thyCheckable]=\"thyCheckable\"\n [thyMultiple]=\"thyMultiple\"\n [thyTitleTruncate]=\"thyTitleTruncate\"\n [thyItemSize]=\"thyItemSize\"\n [thyClickBehavior]=\"thyClickBehavior\"\n [thyIndent]=\"thyIndent\"\n (thyOnClick)=\"thyOnClick.emit($event)\"\n (thyDblClick)=\"thyDblClick.emit($event)\"\n (thyOnExpandChange)=\"eventTriggerChanged($event)\"\n (thyOnCheckboxChange)=\"thyOnCheckboxChange.emit($event)\">\n </thy-tree-node>\n }\n </div>\n}\n", dependencies: [{ kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "component", type: CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: ThyTreeNodeComponent, selector: "thy-tree-node", inputs: ["node", "thyAsync", "thyMultiple", "thyDraggable", "thyCheckable", "thyClickBehavior", "thyTitleTruncate", "templateRef", "emptyChildrenTemplateRef", "thyItemSize", "thyIndent"], outputs: ["thyOnClick", "thyDblClick", "thyOnExpandChange", "thyOnCheckboxChange"] }, { kind: "pipe", type: ThyTreeNodeDraggablePipe, name: "treeNodeDraggable" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
537
537
  }
538
538
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ThyTree, decorators: [{
539
539
  type: Component,
@@ -549,16 +549,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
549
549
  },
550
550
  ThyTreeService
551
551
  ], standalone: true, imports: [
552
- NgIf,
553
552
  CdkDrag,
554
553
  CdkDropList,
555
554
  CdkVirtualScrollViewport,
556
555
  CdkFixedSizeVirtualScroll,
557
556
  CdkVirtualForOf,
558
557
  ThyTreeNodeComponent,
559
- NgFor,
560
558
  ThyTreeNodeDraggablePipe
561
- ], template: "<cdk-virtual-scroll-viewport\n #viewport\n *ngIf=\"thyVirtualScroll\"\n [itemSize]=\"thyItemSize\"\n [style.height]=\"'100%'\"\n cdkDropList\n [cdkDropListAutoScrollStep]=\"6\"\n [cdkDropListData]=\"flattenTreeNodes\"\n [cdkDropListSortingDisabled]=\"true\"\n (cdkDropListDropped)=\"onListDropped($event)\"\n >\n <div class=\"virtual-trees-container\">\n <thy-tree-node\n *cdkVirtualFor=\"let node of flattenTreeNodes; trackBy: trackByFn; let i = index\"\n cdkDrag\n [cdkDragData]=\"node\"\n [cdkDragDisabled]=\"!thyDraggable || !(node | treeNodeDraggable : thyBeforeDragStart)\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n (cdkDragEnded)=\"onDragEnded($event)\"\n (cdkDragMoved)=\"emitDragMoved($event)\"\n [node]=\"node\"\n [templateRef]=\"templateRef\"\n [emptyChildrenTemplateRef]=\"emptyChildrenTemplate\"\n [thyAsync]=\"thyAsync\"\n [thyDraggable]=\"thyDraggable\"\n [thyCheckable]=\"thyCheckable\"\n [thyMultiple]=\"thyMultiple\"\n [thyClickBehavior]=\"thyClickBehavior\"\n [thyTitleTruncate]=\"thyTitleTruncate\"\n [thyItemSize]=\"thyItemSize\"\n [thyIndent]=\"thyIndent\"\n (thyOnClick)=\"thyOnClick.emit($event)\"\n (thyDblClick)=\"thyDblClick.emit($event)\"\n (thyOnExpandChange)=\"eventTriggerChanged($event)\"\n (thyOnCheckboxChange)=\"eventTriggerChanged($event)\">\n </thy-tree-node>\n </div>\n</cdk-virtual-scroll-viewport>\n\n<div\n *ngIf=\"!thyVirtualScroll\"\n cdkDropList\n [cdkDropListAutoScrollStep]=\"6\"\n [cdkDropListData]=\"flattenTreeNodes\"\n [cdkDropListSortingDisabled]=\"true\"\n (cdkDropListDropped)=\"onListDropped($event)\">\n <thy-tree-node\n *ngFor=\"let node of flattenTreeNodes; trackBy: trackByFn; let i = index\"\n cdkDrag\n [cdkDragData]=\"node\"\n [cdkDragDisabled]=\"!thyDraggable || !(node | treeNodeDraggable : thyBeforeDragStart)\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n (cdkDragEnded)=\"onDragEnded($event)\"\n (cdkDragMoved)=\"emitDragMoved($event)\"\n [node]=\"node\"\n [templateRef]=\"templateRef\"\n [emptyChildrenTemplateRef]=\"emptyChildrenTemplate\"\n [thyAsync]=\"thyAsync\"\n [thyDraggable]=\"thyDraggable\"\n [thyCheckable]=\"thyCheckable\"\n [thyMultiple]=\"thyMultiple\"\n [thyTitleTruncate]=\"thyTitleTruncate\"\n [thyItemSize]=\"thyItemSize\"\n [thyClickBehavior]=\"thyClickBehavior\"\n [thyIndent]=\"thyIndent\"\n (thyOnClick)=\"thyOnClick.emit($event)\"\n (thyDblClick)=\"thyDblClick.emit($event)\"\n (thyOnExpandChange)=\"eventTriggerChanged($event)\"\n (thyOnCheckboxChange)=\"thyOnCheckboxChange.emit($event)\">\n </thy-tree-node>\n</div>\n" }]
559
+ ], template: "@if (thyVirtualScroll) {\n <cdk-virtual-scroll-viewport\n #viewport\n [itemSize]=\"thyItemSize\"\n [style.height]=\"'100%'\"\n cdkDropList\n [cdkDropListAutoScrollStep]=\"6\"\n [cdkDropListData]=\"flattenTreeNodes\"\n [cdkDropListSortingDisabled]=\"true\"\n (cdkDropListDropped)=\"onListDropped($event)\"\n >\n <div class=\"virtual-trees-container\">\n <thy-tree-node\n *cdkVirtualFor=\"let node of flattenTreeNodes; trackBy: trackByFn; let i = index\"\n cdkDrag\n [cdkDragData]=\"node\"\n [cdkDragDisabled]=\"!thyDraggable || !(node | treeNodeDraggable : thyBeforeDragStart)\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n (cdkDragEnded)=\"onDragEnded($event)\"\n (cdkDragMoved)=\"emitDragMoved($event)\"\n [node]=\"node\"\n [templateRef]=\"templateRef\"\n [emptyChildrenTemplateRef]=\"emptyChildrenTemplate\"\n [thyAsync]=\"thyAsync\"\n [thyDraggable]=\"thyDraggable\"\n [thyCheckable]=\"thyCheckable\"\n [thyMultiple]=\"thyMultiple\"\n [thyClickBehavior]=\"thyClickBehavior\"\n [thyTitleTruncate]=\"thyTitleTruncate\"\n [thyItemSize]=\"thyItemSize\"\n [thyIndent]=\"thyIndent\"\n (thyOnClick)=\"thyOnClick.emit($event)\"\n (thyDblClick)=\"thyDblClick.emit($event)\"\n (thyOnExpandChange)=\"eventTriggerChanged($event)\"\n (thyOnCheckboxChange)=\"eventTriggerChanged($event)\">\n </thy-tree-node>\n </div>\n </cdk-virtual-scroll-viewport>\n}\n\n@if (!thyVirtualScroll) {\n <div\n cdkDropList\n [cdkDropListAutoScrollStep]=\"6\"\n [cdkDropListData]=\"flattenTreeNodes\"\n [cdkDropListSortingDisabled]=\"true\"\n (cdkDropListDropped)=\"onListDropped($event)\">\n @for (node of flattenTreeNodes; track trackByFn(i, node); let i = $index) {\n <thy-tree-node\n cdkDrag\n [cdkDragData]=\"node\"\n [cdkDragDisabled]=\"!thyDraggable || !(node | treeNodeDraggable : thyBeforeDragStart)\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n (cdkDragEnded)=\"onDragEnded($event)\"\n (cdkDragMoved)=\"emitDragMoved($event)\"\n [node]=\"node\"\n [templateRef]=\"templateRef\"\n [emptyChildrenTemplateRef]=\"emptyChildrenTemplate\"\n [thyAsync]=\"thyAsync\"\n [thyDraggable]=\"thyDraggable\"\n [thyCheckable]=\"thyCheckable\"\n [thyMultiple]=\"thyMultiple\"\n [thyTitleTruncate]=\"thyTitleTruncate\"\n [thyItemSize]=\"thyItemSize\"\n [thyClickBehavior]=\"thyClickBehavior\"\n [thyIndent]=\"thyIndent\"\n (thyOnClick)=\"thyOnClick.emit($event)\"\n (thyDblClick)=\"thyDblClick.emit($event)\"\n (thyOnExpandChange)=\"eventTriggerChanged($event)\"\n (thyOnCheckboxChange)=\"thyOnCheckboxChange.emit($event)\">\n </thy-tree-node>\n }\n </div>\n}\n" }]
562
560
  }], ctorParameters: () => [{ type: i1.ThyTreeService }, { type: i0.ChangeDetectorRef }, { type: Document, decorators: [{
563
561
  type: Inject,
564
562
  args: [DOCUMENT]
@@ -651,4 +649,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
651
649
  type: ViewChildren,
652
650
  args: [CdkDrag]
653
651
  }] } });
654
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHJlZS90cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy90cmVlL3RyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlHLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFDTCxlQUFlLEVBSWYsTUFBTSxFQUNOLFNBQVMsRUFFVCxXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFDWixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBS0gsbUJBQW1CLEVBRW5CLFlBQVksRUFHZixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxF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aGVscGVycyB9IGZyb20gJ25neC10ZXRoeXMvdXRpbCc7XG5pbXBvcnQgeyB1c2VIb3N0UmVuZGVyZXIgfSBmcm9tICdAdGV0aHlzL2Nkay9kb20nO1xuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LCBDZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsLCBDZGtWaXJ0dWFsRm9yT2YgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBudW1iZXJBdHRyaWJ1dGUsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUSFlfVFJFRV9BQlNUUkFDVF9UT0tFTiB9IGZyb20gJy4vdHJlZS1hYnN0cmFjdCc7XG5pbXBvcnQgeyBUaHlUcmVlTm9kZSB9IGZyb20gJy4vdHJlZS1ub2RlLmNsYXNzJztcbmltcG9ydCB7XG4gICAgVGh5VHJlZUJlZm9yZURyYWdEcm9wQ29udGV4dCxcbiAgICBUaHlUcmVlQmVmb3JlRHJhZ1N0YXJ0Q29udGV4dCxcbiAgICBUaHlDbGlja0JlaGF2aW9yLFxuICAgIFRoeVRyZWVEcmFnRHJvcEV2ZW50LFxuICAgIFRoeVRyZWVEcm9wUG9zaXRpb24sXG4gICAgVGh5VHJlZUVtaXRFdmVudCxcbiAgICBUaHlUcmVlSWNvbnMsXG4gICAgVGh5VHJlZU5vZGVDaGVja1N0YXRlLFxuICAgIFRoeVRyZWVOb2RlRGF0YVxufSBmcm9tICcuL3RyZWUuY2xhc3MnO1xuaW1wb3J0IHsgVGh5VHJlZVNlcnZpY2UgfSBmcm9tICcuL3RyZWUuc2VydmljZSc7XG5pbXBvcnQgeyBUaHlUcmVlTm9kZUNvbXBvbmVudCB9IGZyb20gJy4vdHJlZS1ub2RlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ0lmLCBOZ0ZvciwgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2RrRHJhZywgQ2RrRHJhZ0Ryb3AsIENka0RyYWdFbmQsIENka0RyYWdNb3ZlLCBDZGtEcmFnU3RhcnQsIENka0Ryb3BMaXN0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBhdWRpdFRpbWUsIGZpbHRlciwgc3RhcnRXaXRoLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUaHlUcmVlTm9kZURyYWdnYWJsZVBpcGUgfSBmcm9tICcuL3RyZWUucGlwZSc7XG5cbnR5cGUgVGh5VHJlZVNpemUgPSAnc20nIHwgJ2RlZmF1bHQnO1xuXG50eXBlIFRoeVRyZWVUeXBlID0gJ2RlZmF1bHQnIHwgJ2VzcGVjaWFsJztcblxuY29uc3QgdHJlZVR5cGVDbGFzc01hcCA9IHtcbiAgICBkZWZhdWx0OiBbJ3RoeS10cmVlLWRlZmF1bHQnXSxcbiAgICBlc3BlY2lhbDogWyd0aHktdHJlZS1lc3BlY2lhbCddXG59O1xuXG5jb25zdCB0cmVlSXRlbVNpemVNYXAgPSB7XG4gICAgZGVmYXVsdDogNDQsXG4gICAgc206IDQyXG59O1xuXG4vKipcbiAqIOagkeW9ouaOp+S7tue7hOS7tlxuICogQG5hbWUgdGh5LXRyZWVcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0aHktdHJlZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RyZWUuY29tcG9uZW50Lmh0bWwnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVGh5VHJlZSksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBUSFlfVFJFRV9BQlNUUkFDVF9UT0tFTixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRoeVRyZWUpXG4gICAgICAgIH0sXG4gICAgICAgIFRoeVRyZWVTZXJ2aWNlXG4gICAgXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdJZixcbiAgICAgICAgQ2RrRHJhZyxcbiAgICAgICAgQ2RrRHJvcExpc3QsXG4gICAgICAgIENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCxcbiAgICAgICAgQ2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbCxcbiAgICAgICAgQ2RrVmlydHVhbEZvck9mLFxuICAgICAgICBUaHlUcmVlTm9kZUNvbXBvbmVudCxcbiAgICAgICAgTmdGb3IsXG4gICAgICAgIFRoeVRyZWVOb2RlRHJhZ2dhYmxlUGlwZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgVGh5VHJlZSBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIF90ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIHByaXZhdGUgX2VtcHR5Q2hpbGRyZW5UZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIHByaXZhdGUgX2RyYWdnYWJsZSA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfZXhwYW5kZWRLZXlzOiAoc3RyaW5nIHwgbnVtYmVyKVtdO1xuXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRLZXlzOiAoc3RyaW5nIHwgbnVtYmVyKVtdO1xuXG4gICAgcHJpdmF0ZSBob3N0UmVuZGVyZXIgPSB1c2VIb3N0UmVuZGVyZXIoKTtcblxuICAgIHByaXZhdGUgX29uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICAgcHJpdmF0ZSBfb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKF86IGFueSkgPT4ge307XG5cbiAgICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8vIOe8k+WtmCBFbGVtZW50IOWSjCBEcmFnUmVmIOeahOWFs+ezu++8jOaWueS+v+WcqCBJdGVtIOaLluWKqOaXtuafpeaJvlxuICAgIHByaXZhdGUgbm9kZURyYWdzTWFwID0gbmV3IE1hcDxIVE1MRWxlbWVudCwgQ2RrRHJhZzxUaHlUcmVlTm9kZT4+KCk7XG5cbiAgICBwcml2YXRlIG5vZGVEcmFnTW92ZWQgPSBuZXcgU3ViamVjdDxDZGtEcmFnTW92ZT4oKTtcblxuICAgIC8vIHByaXZhdGUgc3RhcnREcmFnTm9kZUV4cGFuZGVkOiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSBzdGFydERyYWdOb2RlQ2xvbmU6IFRoeVRyZWVOb2RlO1xuXG4gICAgLy8gTm9kZSDmi5bliqjnu4/ov4fnm67moIfml7bkuLTml7borrDlvZXnm67moIdpZOS7peWPiuebuOWvueW6lOebruagh+eahOS9jee9rlxuICAgIHByaXZhdGUgbm9kZURyb3BUYXJnZXQ6IHtcbiAgICAgICAgcG9zaXRpb24/OiBUaHlUcmVlRHJvcFBvc2l0aW9uO1xuICAgICAgICBrZXk/OiBudW1iZXIgfCBzdHJpbmc7XG4gICAgfTtcblxuICAgIHByaXZhdGUgZHJvcEVudGVyUHJlZGljYXRlPzogKGNvbnRleHQ6IHsgc291cmNlOiBUaHlUcmVlTm9kZTsgdGFyZ2V0OiBUaHlUcmVlTm9kZTsgZHJvcFBvc2l0aW9uOiBUaHlUcmVlRHJvcFBvc2l0aW9uIH0pID0+IGJvb2xlYW4gPVxuICAgICAgICBjb250ZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdGhpcy5pc1Nob3dFeHBhbmQoY29udGV4dC50YXJnZXQpIHx8ICghdGhpcy5pc1Nob3dFeHBhbmQoY29udGV4dC50YXJnZXQpICYmIGNvbnRleHQuZHJvcFBvc2l0aW9uICE9PSBUaHlUcmVlRHJvcFBvc2l0aW9uLmluKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfTtcblxuICAgIHB1YmxpYyBfc2VsZWN0aW9uTW9kZWw6IFNlbGVjdGlvbk1vZGVsPFRoeVRyZWVOb2RlPjtcblxuICAgIHB1YmxpYyBnZXQgdHJlZU5vZGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50aHlUcmVlU2VydmljZS50cmVlTm9kZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGZsYXR0ZW5UcmVlTm9kZXM6IFRoeVRyZWVOb2RlW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIOiZmuaLn+WMlua7muWKqOeahOinhuWPo1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBAVmlld0NoaWxkKCd2aWV3cG9ydCcsIHsgc3RhdGljOiBmYWxzZSB9KSB2aWV3cG9ydDogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuXG4gICAgLyoqXG4gICAgICogVHJlZU5vZGUg5bGV546w5omA6ZyA55qE5pWw5o2uXG4gICAgICogQHR5cGUgVGh5VHJlZU5vZGVEYXRhW11cbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlOb2RlczogVGh5VHJlZU5vZGVEYXRhW107XG5cbiAgICAvKipcbiAgICAgKiDorr7nva4gVHJlZU5vZGUg5piv5ZCm5pSv5oyB5bGV5byAXG4gICAgICogQHR5cGUgYm9vbGVhbiB8IEZ1bmN0aW9uXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5U2hvd0V4cGFuZDogYm9vbGVhbiB8ICgoXzogVGh5VHJlZU5vZGVEYXRhKSA9PiBib29sZWFuKSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7mmK/lkKbmlK/mjIHlpJrpgInoioLngrlcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoYGNsYXNzLnRoeS1tdWx0aXBsZS1zZWxlY3Rpb24tbGlzdGApXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSlcbiAgICB0aHlNdWx0aXBsZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog6K6+572uIFRyZWVOb2RlIOaYr+WQpuaUr+aMgeaLluaLveaOkuW6j1xuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy50aHktdHJlZS1kcmFnZ2FibGUnKVxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pXG4gICAgc2V0IHRoeURyYWdnYWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9kcmFnZ2FibGUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgdGh5RHJhZ2dhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZHJhZ2dhYmxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9riBUcmVlTm9kZSDmmK/lkKbmlK/mjIEgQ2hlY2tib3gg6YCJ5oupXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KSB0aHlDaGVja2FibGU6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiDngrnlh7voioLngrnnmoTooYzkuLrvvIxgZGVmYXVsdGAg5Li66YCJ5Lit5b2T5YmN6IqC54K577yMYHNlbGVjdENoZWNrYm94YCDkuLrpgInkuK3oioLngrnnmoQgQ2hlY2tib3jvvIwgYHRoeUNoZWNrYWJsZWAg5Li6IHRydWUg5pe255Sf5pWI44CCXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5Q2xpY2tCZWhhdmlvcjogVGh5Q2xpY2tCZWhhdmlvciA9ICdkZWZhdWx0JztcblxuICAgIC8qKlxuICAgICAqIOiuvue9riBjaGVjayDnirbmgIHnmoTorqHnrpfnrZbnlaVcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzZXQgdGh5Q2hlY2tTdGF0ZVJlc29sdmUocmVzb2x2ZTogKG5vZGU6IFRoeVRyZWVOb2RlKSA9PiBUaHlUcmVlTm9kZUNoZWNrU3RhdGUpIHtcbiAgICAgICAgaWYgKHJlc29sdmUpIHtcbiAgICAgICAgICAgIHRoaXMudGh5VHJlZVNlcnZpY2Uuc2V0Q2hlY2tTdGF0ZVJlc29sdmUocmVzb2x2ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva4gVHJlZU5vZGUg5piv5ZCm5pSv5oyB5byC5q2l5Yqg6L29XG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSkgdGh5QXN5bmMgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX3RoeVR5cGU6IFRoeVRyZWVUeXBlID0gJ2RlZmF1bHQnO1xuXG4gICAgLyoqXG4gICAgICog6K6+572u5LiN5ZCM5bGV56S657G75Z6L55qEIFRyZWXvvIxgZGVmYXVsdGAg5Li65bCP566t5aS05bGV56S677yMIGBlc3BlY2lhbGAg5Li6IOWKoOWHj+WPt+Wbvuagh+WxleekulxuICAgICAqIEB0eXBlIFRoeVRyZWVUeXBlXG4gICAgICogQGRlZmF1bHQgZGVmYXVsdFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeVR5cGUodHlwZTogVGh5VHJlZVR5cGUpIHtcbiAgICAgICAgdGhpcy5fdGh5VHlwZSA9IHR5cGU7XG4gICAgICAgIGlmICh0eXBlID09PSAnZXNwZWNpYWwnKSB7XG4gICAgICAgICAgICB0aGlzLnRoeUljb25zID0geyBleHBhbmQ6ICdtaW51cy1zcXVhcmUnLCBjb2xsYXBzZTogJ3BsdXMtc3F1YXJlJyB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHRoeVR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aHlUeXBlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruS4jeWQjCBUcmVlIOWxleW8gOaKmOWPoOeahOWbvuagh++8jGBleHBhbmRgIOS4uuWxleW8gOeKtuaAgeeahOWbvuagh++8jGBjb2xsYXBzZWAg5Li65oqY5Y+g54q25oCB55qE5Zu+5qCHXG4gICAgICogQHR5cGUgeyBleHBhbmQ6IHN0cmluZywgY29sbGFwc2U6IHN0cmluZyB9XG4gICAgICovXG4gICAgQElucHV0KCkgdGh5SWNvbnM6IFRoeVRyZWVJY29ucyA9IHt9O1xuXG4gICAgcHJpdmF0ZSBfdGh5U2l6ZTogVGh5VHJlZVNpemUgPSAnZGVmYXVsdCc7XG4gICAgLyoqXG4gICAgICog5pSv5oyBIGBzbWAgfCBgZGVmYXVsdGAg5Lik56eN5aSn5bCP77yM6buY6K6k5YC85Li6IGBkZWZhdWx0YFxuICAgICAqIEB0eXBlIFRoeVRyZWVTaXplXG4gICAgICogQGRlZmF1bHQgZGVmYXVsdFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeVNpemUoc2l6ZTogVGh5VHJlZVNpemUpIHtcbiAgICAgICAgdGhpcy5fdGh5U2l6ZSA9IHNpemU7XG4gICAgICAgIGlmICh0aGlzLl90aHlTaXplKSB7XG4gICAgICAgICAgICB0aGlzLl90aHlJdGVtU2l6ZSA9IHRyZWVJdGVtU2l6ZU1hcFt0aGlzLl90aHlTaXplXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3RoeUl0ZW1TaXplID0gdHJlZUl0ZW1TaXplTWFwLmRlZmF1bHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgdGh5U2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RoeVNpemU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5piv5ZCm5byA5ZCv6Jma5ouf5rua5YqoXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy50aHktdmlydHVhbC1zY3JvbGxpbmctdHJlZScpXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSlcbiAgICB0aHlWaXJ0dWFsU2Nyb2xsID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF90aHlJdGVtU2l6ZSA9IDQ0O1xuXG4gICAgLyoqXG4gICAgICog5byA5ZCv6Jma5ouf5rua5Yqo5pe277yM5Y2V6KGM6IqC54K555qE6auY5bqm77yM5b2TYHRoeVNpemVg5Li6YGRlZmF1bHRg5pe277yM6K+l5Y+C5pWw5omN55Sf5pWIXG4gICAgICogQGRlZmF1bHQgNDRcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KVxuICAgIHNldCB0aHlJdGVtU2l6ZShpdGVtU2l6ZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLnRoeVNpemUgIT09ICdkZWZhdWx0Jykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZXR0aW5nIHRoeVNpemUgYW5kIHRoeUl0ZW1TaXplIGF0IHRoZSBzYW1lIHRpbWUgaXMgbm90IGFsbG93ZWQnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90aHlJdGVtU2l6ZSA9IGl0ZW1TaXplO1xuICAgIH1cblxuICAgIGdldCB0aHlJdGVtU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RoeUl0ZW1TaXplO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruiKgueCueWQjeensOaYr+WQpuaUr+aMgei2heWHuuaIquWPllxuICAgICAqIEB0eXBlIGJvb2xlYW5cbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KSB0aHlUaXRsZVRydW5jYXRlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIOW3sumAieS4reeahCBub2RlIOiKgueCuembhuWQiFxuICAgICAqIEBkZWZhdWx0IFtdXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5U2VsZWN0ZWRLZXlzOiBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIOWxleW8gOaMh+WumueahOagkeiKgueCuVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeUV4cGFuZGVkS2V5czogKHN0cmluZyB8IG51bWJlcilbXTtcblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuWxleW8gOaJgOacieagkeiKgueCuVxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pIHRoeUV4cGFuZEFsbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog6K6+572u57yp6L+b6Led56a777yM57yp6L+b6Led56a7ID0gdGh5SW5kZW50ICogbm9kZS5sZXZlbFxuICAgICAqIEB0eXBlIG51bWJlclxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIHRoeUluZGVudCA9IDI1O1xuXG4gICAgLyoqXG4gICAgICog5ouW5ou95LmL5YmN55qE5Zue6LCD77yM5Ye95pWw6L+U5ZueIGZhbHNlIOWImemYu+atouaLluaLvVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeUJlZm9yZURyYWdTdGFydDogKGNvbnRleHQ6IFRoeVRyZWVCZWZvcmVEcmFnU3RhcnRDb250ZXh0KSA9PiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICog5ouW5pS+5Yiw5YWD57Sg5pe25Zue6LCD77yM5Ye95pWw6L+U5ZueIGZhbHNlIOWImemYu+atouaLluaUvuWIsOW9k+WJjeWFg+e0oFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeUJlZm9yZURyYWdEcm9wOiAoY29udGV4dDogVGh5VHJlZUJlZm9yZURyYWdEcm9wQ29udGV4dCkgPT4gYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIOiuvue9ruWtkCBUcmVlTm9kZSDngrnlh7vkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25DbGljazogRXZlbnRFbWl0dGVyPFRoeVRyZWVFbWl0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlUcmVlRW1pdEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog6K6+572uIGNoZWNrIOmAieaLqeS6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPbkNoZWNrYm94Q2hhbmdlOiBFdmVudEVtaXR0ZXI8VGh5VHJlZUVtaXRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVRyZWVFbWl0RXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7ngrnlh7vlsZXlvIDop6blj5Hkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25FeHBhbmRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUaHlUcmVlRW1pdEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5VHJlZUVtaXRFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIOiuvue9riBUcmVlTm9kZSDmi5bmi73kuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25EcmFnRHJvcDogRXZlbnRFbWl0dGVyPFRoeVRyZWVEcmFnRHJvcEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5VHJlZURyYWdEcm9wRXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDlj4zlh7sgVHJlZU5vZGUg5LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeURibENsaWNrOiBFdmVudEVtaXR0ZXI8VGh5VHJlZUVtaXRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVRyZWVFbWl0RXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva4gVHJlZU5vZGUg55qE5riy5p+T5qih5p2/XG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgndHJlZU5vZGVUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgc2V0IHRlbXBsYXRlUmVmKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgICAgIGlmICh0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5fdGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCB0ZW1wbGF0ZVJlZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlUmVmO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruWtkOeahOepuuaVsOaNrua4suafk+aooeadv1xuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ2VtcHR5Q2hpbGRyZW5UZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pIGVtcHR5Q2hpbGRyZW5UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBzZXQgZW1wdHlDaGlsZHJlblRlbXBsYXRlUmVmKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgICAgIGlmICh0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5fZW1wdHlDaGlsZHJlblRlbXBsYXRlUmVmID0gdGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgZW1wdHlDaGlsZHJlblRlbXBsYXRlUmVmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW1wdHlDaGlsZHJlblRlbXBsYXRlUmVmO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MudGh5LXRyZWUnKVxuICAgIHRoeVRyZWVDbGFzcyA9IHRydWU7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRoeS10cmVlLWRyYWdnaW5nJylcbiAgICBkcmFnZ2luZzogYm9vbGVhbjtcblxuICAgIEBWaWV3Q2hpbGRyZW4oQ2RrRHJhZykgY2RrRHJhZ3M6IFF1ZXJ5TGlzdDxDZGtEcmFnPFRoeVRyZWVOb2RlPj47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHRoeVRyZWVTZXJ2aWNlOiBUaHlUcmVlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudFxuICAgICkge31cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbml0VGh5Tm9kZXMoKTtcbiAgICAgICAgdGhpcy5fc2V0VHJlZVR5cGUoKTtcbiAgICAgICAgdGhpcy5fc2V0VHJlZVNpemUoKTtcbiAgICAgICAgdGhpcy5faW5zdGFuY2VTZWxlY3Rpb25Nb2RlbCgpO1xuICAgICAgICB0aGlzLl9zZWxlY3RUcmVlTm9kZXModGhpcy50aHlTZWxlY3RlZEtleXMpO1xuXG4gICAgICAgIHRoaXMudGh5VHJlZVNlcnZpY2UuZmxhdHRlbk5vZGVzJC5zdWJzY3JpYmUoZmxhdHRlblRyZWVOb2RlcyA9PiB7XG4gICAgICAgICAgICB0aGlzLmZsYXR0ZW5UcmVlTm9kZXMgPSBmbGF0dGVuVHJlZU5vZGVzO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jZGtEcmFncy5jaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShzdGFydFdpdGgodGhpcy5jZGtEcmFncyksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRyYWdzOiBRdWVyeUxpc3Q8Q2RrRHJhZzxUaHlUcmVlTm9kZT4+KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlRHJhZ3NNYXAuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICBkcmFncy5mb3JFYWNoKGRyYWcgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZHJhZy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjZGtEcmFnIOWPmOWMluaXtu+8jOe8k+WtmCBFbGVtZW50IOS4jiBEcmFnUmVmIOeahOWFs+ezu++8jOaWueS+vyBEcmFnIE1vdmUg5pe25p+l5om+XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vZGVEcmFnc01hcC5zZXQoZHJhZy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIGRyYWcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm5vZGVEcmFnTW92ZWRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIC8vIGF1ZGl0VGltZSgzMCksXG4gICAgICAgICAgICAgICAgLy8gIGF1ZGl0VGltZSDlj6/og73kvJrlr7zoh7Tmi5bliqjnu5PmnZ/lkI7ku43nhLbmiafooYwgbW92ZWQg77yM5omA5Lul6YCa6L+H5Yik5patIGRyYWdnaW5nIOeKtuaAgeadpei/h+a7pOaXoOaViCBtb3ZlZFxuICAgICAgICAgICAgICAgIGZpbHRlcigoZXZlbnQ6IENka0RyYWdNb3ZlKSA9PiBldmVudC5zb3VyY2UuX2RyYWdSZWYuaXNEcmFnZ2luZygpKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25EcmFnTW92ZWQoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlcy50aHlOb2RlcyAmJiAhY2hhbmdlcy50aHlOb2Rlcy5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRUaHlOb2RlcygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLnRoeVR5cGUgJiYgIWNoYW5nZXMudGh5VHlwZS5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFRyZWVUeXBlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXMudGh5TXVsdGlwbGUgJiYgIWNoYW5nZXMudGh5TXVsdGlwbGUuaXNGaXJzdENoYW5nZSgpKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnN0YW5jZVNlbGVjdGlvbk1vZGVsKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy50aHlTZWxlY3RlZEtleXMgJiYgIWNoYW5nZXMudGh5U2VsZWN0ZWRLZXlzLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRLZXlzID0gY2hhbmdlcy50aHlTZWxlY3RlZEtleXMuY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0VHJlZU5vZGVzKGNoYW5nZXMudGh5U2VsZWN0ZWRLZXlzLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy50aHlFeHBhbmRlZEtleXMgJiYgIWNoYW5nZXMudGh5RXhwYW5kZWRLZXlzLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlRXhwYW5kZWRLZXlzKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXMudGh5RXhwYW5kQWxsICYmICFjaGFuZ2VzLnRoeUV4cGFuZEFsbC5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUV4cGFuZGVkS2V5cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyVmlldyA9ICgpID0+IHt9O1xuXG4gICAgZXZlbnRUcmlnZ2VyQ2hhbmdlZChldmVudDogVGh5VHJlZUVtaXRFdmVudCk6IHZvaWQge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LmV2ZW50TmFtZSkge1xuICAgICAgICAgICAgY2FzZSAnZXhwYW5kJzpcbiAgICAgICAgICAgICAgICB0aGlzLnRoeU9uRXhwYW5kQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdjaGVja2JveENoYW5nZSc6XG4gICAgICAgICAgICAgICAgdGhpcy50aHlPbkNoZWNrYm94Q2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdFRoeU5vZGVzKCkge1xuICAgICAgICB0aGlzLl9leHBhbmRlZEtleXMgPSB0aGlzLmdldEV4cGFuZGVkTm9kZXMoKS5tYXAobm9kZSA9PiBub2RlLmtleSk7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkS2V5cyA9IHRoaXMuZ2V0U2VsZWN0ZWROb2RlcygpLm1hcChub2RlID0+IG5vZGUua2V5KTtcbiAgICAgICAgdGhpcy50aHlUcmVlU2VydmljZS5pbml0aWFsaXplVHJlZU5vZGVzKHRoaXMudGh5Tm9kZXMpO1xuICAgICAgICB0aGlzLmZsYXR0ZW5UcmVlTm9kZXMgPSB0aGlzLnRoeVRyZWVTZXJ2aWNlLmZsYXR0ZW5UcmVlTm9kZXM7XG4gICAgICAgIHRoaXMuX3NlbGVjdFRyZWVOb2Rlcyh0aGlzLl9zZWxlY3RlZEtleXMpO1xuICAgICAgICB0aGlzLl9oYW5kbGVFeHBhbmRlZEtleXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9oYW5kbGVFeHBhbmRlZEtleXMoKSB7XG4gICAgICAgIGlmICh0aGlzLnRoeUV4cGFuZGVkS2V5cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLl9leHBhbmRlZEtleXMgPSBoZWxwZXJzLmNvbmNhdEFycmF5KFxuICAgICAgICAgICAgICAgIHRoaXMudGh5RXhwYW5kZWRLZXlzLmZpbHRlcihrZXkgPT4gIXRoaXMuX2V4cGFuZGVkS2V5cy5pbmNsdWRlcyhrZXkpKSxcbiAgICAgICAgICAgICAgICB0aGlzLl9leHBhbmRlZEtleXNcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50aHlUcmVlU2VydmljZS5leHBhbmRUcmVlTm9kZXModGhpcy50aHlFeHBhbmRBbGwgfHwgdGhpcy5fZXhwYW5kZWRLZXlzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXRUcmVlVHlwZSgpIHtcbiAgICAgICAgaWYgKHRoaXMudGh5VHlwZSAmJiB0cmVlVHlwZUNsYXNzTWFwW3RoaXMudGh5VHlwZV0pIHtcbiAgICAgICAgICAgIHRyZWVUeXBlQ2xhc3NNYXBbdGhpcy50aHlUeXBlXS5mb3JFYWNoKGNsYXNzTmFtZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ob3N0UmVuZGVyZXIuYWRkQ2xhc3MoY2xhc3NOYW1lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0VHJlZVNpemUoKSB7XG4gICAgICAgIGlmICh0aGlzLnRoeVNpemUpIHtcbiAgICAgICAgICAgIHRoaXMuaG9zdFJlbmRlcmVyLmFkZENsYXNzKGB0aHktdHJlZS0ke3RoaXMudGh5U2l6ZX1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2luc3RhbmNlU2VsZWN0aW9uTW9kZWwoKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsID0gbmV3IFNlbGVjdGlvbk1vZGVsPGFueT4odGhpcy50aHlNdWx0aXBsZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2VsZWN0VHJlZU5vZGVzKGtleXM6IChzdHJpbmcgfCBudW1iZXIpW10pIHtcbiAgICAgICAgKGtleXMgfHwgW10pLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnRoeVRyZWVTZXJ2aWNlLmdldFRyZWVOb2RlKGtleSk7XG4gICAgICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0VHJlZU5vZGUodGhpcy50aHlUcmVlU2VydmljZS5nZXRUcmVlTm9kZShrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaXNTZWxlY3RlZChub2RlOiBUaHlUcmVlTm9kZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChub2RlKTtcbiAgICB9XG5cbiAgICB0b2dnbGVUcmVlTm9kZShub2RlOiBUaHlUcmVlTm9kZSkge1xuICAgICAgICBpZiAobm9kZSAmJiAhbm9kZS5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC50b2dnbGUobm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSB7XG4gICAgICAgIHJldHVybiBpdGVtLmtleSB8fCBpbmRleDtcbiAgICB9XG5cbiAgICBpc1Nob3dFeHBhbmQobm9kZTogVGh5VHJlZU5vZGUpIHtcbiAgICAgICAgaWYgKGhlbHBlcnMuaXNGdW5jdGlvbih0aGlzLnRoeVNob3dFeHBhbmQpKSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMudGh5U2hvd0V4cGFuZCBhcyBGdW5jdGlvbikobm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aHlTaG93RXhwYW5kO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogVGh5VHJlZU5vZGVEYXRhW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnRoeU5vZGVzID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9pbml0VGh5Tm9kZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgb25EcmFnU3RhcnRlZChldmVudDogQ2RrRHJhZ1N0YXJ0PFRoeVRyZWVOb2RlPikge1xuICAgICAgICB0aGlzLmRyYWdnaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdGFydERyYWdOb2RlQ2xvbmUgPSBPYmplY3QuYXNzaWduKHt9LCBldmVudC5zb3VyY2UuZGF0YSk7XG4gICAgICAgIGlmIChldmVudC5zb3VyY2UuZGF0YS5pc0V4cGFuZGVkKSB7XG4gICAgICAgICAgICBldmVudC5zb3VyY2UuZGF0YS5zZXRFeHBhbmRlZChmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlbWl0RHJhZ01vdmVkKGV2ZW50OiBDZGtEcmFnTW92ZSkge1xuICAgICAgICB0aGlzLm5vZGVEcmFnTW92ZWQubmV4dChldmVudCk7XG4gICAgfVxuXG4gICAgb25EcmFnTW92ZWQoZXZlbnQ6IENka0RyYWdNb3ZlPFRoeVRyZWVOb2RlPikge1xuICAgICAgICAvLyDpgJrov4fpvKDmoIfkvY3nva7mn6Xmib7lr7nlupTnmoTnm67moIcgSXRlbSDlhYPntKBcbiAgICAgICAgbGV0IGN1cnJlbnRQb2ludEVsZW1lbnQgPSB0aGlzLmRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZXZlbnQucG9pbnRlclBvc2l0aW9uLngsIGV2ZW50LnBvaW50ZXJQb3NpdGlvbi55KSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKCFjdXJyZW50UG9pbnRFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFudXBEcmFnQXJ0aWZhY3RzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRhcmdldEVsZW1lbnQgPSBjdXJyZW50UG9pbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygndGh5LXRyZWUtbm9kZScpXG4gICAgICAgICAgICA/IGN1cnJlbnRQb2ludEVsZW1lbnRcbiAgICAgICAgICAgIDogKGN1cnJlbnRQb2ludEVsZW1lbnQuY2xvc2VzdCgnLnRoeS10cmVlLW5vZGUnKSBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgIGlmICghdGFyZ2V0RWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhbnVwRHJhZ0FydGlmYWN0cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIOe8k+WtmOaUvue9ruebruagh0lkIOW5tuiuoeeul+m8oOagh+ebuOWvueW6lOeahOS9jee9rlxuICAgICAgICB0aGlzLm5vZGVEcm9wVGFyZ2V0ID0ge1xuICAgICAgICAgICAga2V5OiB0aGlzLm5vZGVEcmFnc01hcC5nZXQodGFyZ2V0RWxlbWVudCk/LmRhdGEua2V5LFxuICAgICAgICAgICAgcG9zaXRpb246IHRoaXMuZ2V0VGFyZ2V0UG9zaXRpb24odGFyZ2V0RWxlbWVudCwgZXZlbnQpXG4gICAgICAgIH07XG4gICAgICAgIC8vIOaJp+ihjOWklumDqOS8oOWFpeeahCBkcm9wRW50ZXJQcmVkaWNhdGUg5Yik5pat5piv5ZCm5YWB6K645ouW5YWl55uu5qCH6aG5XG4gICAgICAgIGlmICh0aGlzLmRyb3BFbnRlclByZWRpY2F0ZSkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0RHJhZ1JlZiA9IHRoaXMubm9kZURyYWdzTWFwLmdldCh0YXJnZXRFbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmRyb3BFbnRlclByZWRpY2F0ZSh7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogZXZlbnQuc291cmNlLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0RHJhZ1JlZi5kYXRhLFxuICAgICAgICAgICAgICAgICAgICBkcm9wUG9zaXRpb246IHRoaXMubm9kZURyb3BUYXJnZXQucG9zaXRpb25cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RHJvcFBvc2l0aW9uUGxhY2Vob2xkZXIodGFyZ2V0RWxlbWVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZURyb3BUYXJnZXQgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYW51cERyYWdBcnRpZmFjdHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0Ryb3BQb3NpdGlvblBsYWNlaG9sZGVyKHRhcmdldEVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25EcmFnRW5kZWQoZXZlbnQ6IENka0RyYWdFbmQ8VGh5VHJlZU5vZGU+KSB7XG4gICAgICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZTtcbiAgICAgICAgLy8g5ouW5ou957uT5p2f5ZCO5oGi5aSN5Y6f5aeL55qE5bGV5byA54q25oCBXG4gICAgICAgIGV2ZW50LnNvdXJjZS5kYXRhLnNldEV4cGFuZGVkKHRoaXMuc3RhcnREcmFnTm9kZUNsb25lLmlzRXhwYW5kZWQpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnREcmFnTm9kZUNsb25lID0gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25MaXN0RHJvcHBlZChldmVudDogQ2RrRHJhZ0Ryb3A8VGh5VHJlZU5vZGVbXSwgVGh5VHJlZU5vZGVbXSwgVGh5VHJlZU5vZGU+KSB7XG4gICAgICAgIGlmICghdGhpcy5ub2RlRHJvcFRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5pc1Nob3dFeHBhbmQodGhpcy5zdGFydERyYWdOb2RlQ2xvbmUpICYmIHRoaXMubm9kZURyb3BUYXJnZXQucG9zaXRpb24gPT09IFRoeVRyZWVEcm9wUG9zaXRpb24uaW4pIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYW51cERyYWdBcnRpZmFjdHMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNvdXJjZU5vZGUgPSB0aGlzLnN0YXJ0RHJhZ05vZGVDbG9uZTtcbiAgICAgICAgY29uc3Qgc291cmNlTm9kZVBhcmVudCA9IHNvdXJjZU5vZGUucGFyZW50Tm9kZTtcbiAgICAgICAgY29uc3QgdGFyZ2V0RHJhZ1JlZiA9IHRoaXMuY2RrRHJhZ3MuZmluZChpdGVtID0+IGl0ZW0uZGF0YT8ua2V5ID09PSB0aGlzLm5vZGVEcm9wVGFyZ2V0LmtleSk7XG4gICAgICAgIGNvbnN0IHRhcmdldE5vZGUgPSB0YXJnZXREcmFnUmVmPy5kYXRhO1xuICAgICAgICBjb25zdCB0YXJnZXROb2RlUGFyZW50ID0gdGFyZ2V0Tm9kZS5wYXJlbnROb2RlO1xuXG4gICAgICAgIGNvbnN0IGJlZm9yZURyYWdEcm9wQ29udGV4dDogVGh5VHJlZUJlZm9yZURyYWdEcm9wQ29udGV4dCA9IHtcbiAgICAgICAgICAgIHByZXZpb3VzSXRlbTogc291cmNlTm9kZSxcbiAgICAgICAgICAgIHByZXZpb3VzQ29udGFpbmVySXRlbXM6IHNvdXJjZU5vZGVQYXJlbnQ/LmNoaWxkcmVuLFxuICAgICAgICAgICAgaXRlbTogdGFyZ2V0Tm9kZSxcbiAgICAgICAgICAgIGNvbnRhaW5lckl0ZW1zOiB0YXJnZXROb2RlUGFyZW50Py5jaGlsZHJlbixcbiAgICAgICAgICAgIHBvc2l0aW9uOiB0aGlzLm5vZGVEcm9wVGFyZ2V0LnBvc2l0aW9uXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMudGh5QmVmb3JlRHJhZ0Ryb3AgJiYgIXRoaXMudGh5QmVmb3JlRHJhZ0Ryb3AoYmVmb3JlRHJhZ0Ryb3BDb250ZXh0KSkge1xuICAgICAgICAgICAgdGhpcy5jbGVhbnVwRHJhZ0FydGlmYWN0cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50aHlUcmVlU2VydmljZS5kZWxldGVUcmVlTm9kZShzb3VyY2VOb2RlKTtcblxuICAgICAgICBzd2l0Y2ggKHRoaXMubm9kZURyb3BUYXJnZXQucG9zaXRpb24pIHtcbiAgICAgICAgICAgIGNhc2UgJ2JlZm9yZSc6XG4gICAgICAgICAgICAgICAgY29uc3QgYmVmb3JlSW5zZXJ0SW5kZXggPSAodGFyZ2V0Tm9kZVBhcmVudD8uY2hpbGRyZW4gfHwgdGhpcy50cmVlTm9kZXMpLmluZGV4T2YodGFyZ2V0Tm9kZSk7XG4gICAgICAgICAgICAgICAgdGhpcy50aHlUcmVlU2VydmljZS5hZGRUcmVlTm9kZShzb3VyY2VOb2RlLCB0YXJnZXROb2RlUGFyZW50LCBiZWZvcmVJbnNlcnRJbmRleCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhZnRlcic6XG4gICAgICAgICAgICAgICAgY29uc3QgYWZ0ZXJJbnNlcnRJbmRleCA9ICh0YXJnZXROb2RlUGFyZW50Py5jaGlsZHJlbiB8fCB0aGlzLnRyZWVOb2RlcykuaW5kZXhPZih0YXJnZXROb2RlKSArIDE7XG4gICAgICAgICAgICAgICAgdGhpcy50aHlUcmVlU2VydmljZS5hZGRUcmVlTm9kZShzb3VyY2VOb2RlLCB0YXJnZXROb2RlUGFyZW50LCBhZnRlckluc2VydEluZGV4KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2luJzpcbiAgICAgICAgICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLmFkZFRyZWVOb2RlKHNvdXJjZU5vZGUsIHRhcmdldE5vZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50aHlUcmVlU2VydmljZS5zeW5jRmxhdHRlblRyZWVOb2RlcygpO1xuXG4gICAgICAgIGxldCBhZnRlcjogVGh5VHJlZU5vZGUgPSBudWxsO1xuICAgICAgICBsZXQgdGFyZ2U6IFRoeVRyZWVOb2RlID0gbnVsbDtcbiAgICAgICAgaWYgKGJlZm9yZURyYWdEcm9wQ29udGV4dC5wb3NpdGlvbiA9PT0gVGh5VHJlZURyb3BQb3NpdGlvbi5iZWZvcmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldENvbnRhaW5lck5vZGVzID0gdGFyZ2V0Tm9kZVBhcmVudD8uY2hpbGRyZW4gfHwgdGhpcy50cmVlTm9kZXM7XG4gICAgICAgICAgICBhZnRlciA9IHRhcmdldENvbnRhaW5lck5vZGVzW3RhcmdldENvbnRhaW5lck5vZGVzLmluZGV4T2YodGFyZ2V0Tm9kZSkgLSAyXTtcbiAgICAgICAgICAgIHRhcmdlID0gdGFyZ2V0Tm9kZVBhcmVudDtcbiAgICAgICAgfSBlbHNlIGlmIChiZWZvcmVEcmFnRHJvcENvbnRleHQucG9zaXRpb24gPT09IFRoeVRyZWVEcm9wUG9zaXRpb24uYWZ0ZXIpIHtcbiAgICAgICAgICAgIGFmdGVyID0gdGFyZ2V0Tm9kZTtcbiAgICAgICAgICAgIHRhcmdlID0gdGFyZ2V0Tm9kZVBhcmVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFmdGVyID0gdGFyZ2V0Tm9kZS5jaGlsZHJlbj8ubGVuZ3RoID4gMCA/IHRhcmdldE5vZGUuY2hpbGRyZW5bdGFyZ2V0Tm9kZS5jaGlsZHJlbi5sZW5ndGggLSAyXSA6IG51bGw7XG4gICAgICAgICAgICB0YXJnZSA9IHRhcmdldE5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRoeU9uRHJhZ0Ryb3AuZW1pdCh7XG4gICAgICAgICAgICBkcmFnTm9kZTogdGhpcy50aHlUcmVlU2VydmljZS5nZXRUcmVlTm9kZShzb3VyY2VOb2RlLmtleSksXG4gICAgICAgICAgICB0YXJnZXROb2RlOiB0YXJnZSxcbiAgICAgICAgICAgIGFmdGVyTm9kZTogYWZ0ZXJcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jbGVhbnVwRHJhZ0FydGlmYWN0cygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VGFyZ2V0UG9zaXRpb24odGFyZ2V0OiBIVE1MRWxlbWVudCwgZXZlbnQ6IENka0RyYWdNb3ZlKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldFJlY3QgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IGJlZm9yZU9yQWZ0ZXJHYXAgPSB0YXJnZXRSZWN0LmhlaWdodCAqIDAuMztcbiAgICAgICAgLy8g5bCGIE5vZGUg6auY5bqm5YiG5Li65LiK5Lit5LiL5LiJ5q6177yM5YW25Lit5LiK5LiL55qEIEdhcCDkuLogaGVpZ2h0IOeahCAzMCXvvIzpgJrov4fliKTmlq3pvKDmoIfkvY3nva7lnKjlk6rkuIDmrrUgZ2FwIOadpeiuoeeul+WvueW6lOeahOS9jee9rlxuICAgICAgICBpZiAoZXZlbnQucG9pbnRlclBvc2l0aW9uLnkgLSB0YXJnZXRSZWN0LnRvcCA8IGJlZm9yZU9yQWZ0ZXJHYXApIHtcbiAgICAgICAgICAgIHJldHVybiBUaHlUcmVlRHJvcFBvc2l0aW9uLmJlZm9yZTtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5wb2ludGVyUG9zaXRpb24ueSA+PSB0YXJnZXRSZWN0LmJvdHRvbSAtIGJlZm9yZU9yQWZ0ZXJHYXApIHtcbiAgICAgICAgICAgIHJldHVybiBUaHlUcmVlRHJvcFBvc2l0aW9uLmFmdGVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFRoeVRyZWVEcm9wUG9zaXRpb24uaW47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3dEcm9wUG9zaXRpb25QbGFjZWhvbGRlcih0YXJnZXRFbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgICAgICB0aGlzLmNsZWFudXBEcm9wUG9zaXRpb25QbGFjZWhvbGRlcigpO1xuICAgICAgICBpZiAodGhpcy5ub2RlRHJvcFRhcmdldCAmJiB0YXJnZXRFbGVtZW50KSB7XG4gICAgICAgICAgICB0YXJnZXRFbGVtZW50LmNsYXNzTGlzdC5hZGQoYGRyb3AtcG9zaXRpb24tJHt0aGlzLm5vZGVEcm9wVGFyZ2V0LnBvc2l0aW9ufWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhbnVwRHJvcFBvc2l0aW9uUGxhY2Vob2xkZXIoKSB7XG4gICAgICAgIHRoaXMuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRyb3AtcG9zaXRpb24tYmVmb3JlJykuZm9yRWFjaChlbGVtZW50ID0+IGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZHJvcC1wb3NpdGlvbi1iZWZvcmUnKSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRyb3AtcG9zaXRpb24tYWZ0ZXInKS5mb3JFYWNoKGVsZW1lbnQgPT4gZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdkcm9wLXBvc2l0aW9uLWFmdGVyJykpO1xuICAgICAgICB0aGlzLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kcm9wLXBvc2l0aW9uLWluJykuZm9yRWFjaChlbGVtZW50ID0+IGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZHJvcC1wb3NpdGlvbi1pbicpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFudXBEcmFnQXJ0aWZhY3RzKCkge1xuICAgICAgICB0aGlzLm5vZGVEcm9wVGFyZ2V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5jbGVhbnVwRHJvcFBvc2l0aW9uUGxhY2Vob2xkZXIoKTtcbiAgICB9XG5cbiAgICAvLyByZWdpb24gUHVibGljIEZ1bmN0aW9uc1xuXG4gICAgc2VsZWN0VHJlZU5vZGUobm9kZTogVGh5VHJlZU5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUgJiYgIW5vZGUuaXNEaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KG5vZGUpO1xuICAgICAgICAgICAgdGhpcy50aHlUcmVlU2VydmljZS5zeW5jRmxhdHRlblRyZWVOb2RlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Um9vdE5vZGVzKCk6IFRoeVRyZWVOb2RlW10ge1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlTm9kZXM7XG4gICAgfVxuXG4gICAgZ2V0VHJlZU5vZGUoa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGh5VHJlZVNlcnZpY2UuZ2V0VHJlZU5vZGUoa2V5KTtcbiAgICB9XG5cbiAgICBnZXRTZWxlY3RlZE5vZGUoKTogVGh5VHJlZU5vZGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwgPyB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXSA6IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0U2VsZWN0ZWROb2RlcygpOiBUaHlUcmVlTm9kZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGVsID8gdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQgOiBbXTtcbiAgICB9XG5cbiAgICBnZXRFeHBhbmRlZE5vZGVzKCk6IFRoeVRyZWVOb2RlW10ge1xuICAgICAgICByZXR1cm4gdGhpcy50aHlUcmVlU2VydmljZS5nZXRFeHBhbmRlZE5vZGVzKCk7XG4gICAgfVxuXG4gICAgZ2V0Q2hlY2tlZE5vZGVzKCk6IFRoeVRyZWVOb2RlW10ge1xuICAgICAgICByZXR1cm4gdGhpcy50aHlUcmVlU2VydmljZS5nZXRDaGVja2VkTm9kZXMoKTtcbiAgICB9XG5cbiAgICBhZGRUcmVlTm9kZShub2RlOiBUaHlUcmVlTm9kZURhdGEsIHBhcmVudD86IFRoeVRyZWVOb2RlLCBpbmRleCA9IC0xKSB7XG4gICAgICAgIHRoaXMudGh5VHJlZVNlcnZpY2UuYWRkVHJlZU5vZGUobmV3IFRoeVRyZWVOb2RlKG5vZGUsIG51bGwsIHRoaXMudGh5VHJlZVNlcnZpY2UpLCBwYXJlbnQsIGluZGV4KTtcbiAgICAgICAgdGhpcy50aHlUcmVlU2VydmljZS5zeW5jRmxhdHRlblRyZWVOb2RlcygpO1xuICAgIH1cblxuICAgIGRlbGV0ZVRyZWVOb2RlKG5vZGU6IFRoeVRyZWVOb2RlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQobm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnRvZ2dsZShub2RlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLmRlbGV0ZVRyZWVOb2RlKG5vZGUpO1xuICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLnN5bmNGbGF0dGVuVHJlZU5vZGVzKCk7XG4gICAgfVxuXG4gICAgZXhwYW5kQWxsTm9kZXMoKSB7XG4gICAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy5nZXRSb290Tm9kZXMoKTtcbiAgICAgICAgbm9kZXMuZm9yRWFjaChuID0+IG4uc2V0RXhwYW5kZWQodHJ1ZSwgdHJ1ZSkpO1xuICAgIH1cblxuICAgIGNvbGxhcHNlZEFsbE5vZGVzKCkge1xuICAgICAgICBjb25zdCBub2RlcyA9IHRoaXMuZ2V0Um9vdE5vZGVzKCk7XG4gICAgICAgIG5vZGVzLmZvckVhY2gobiA9PiBuLnNldEV4cGFuZGVkKGZhbHNlLCB0cnVlKSk7XG4gICAgfVxuXG4gICAgLy8gZW5kcmVnaW9uXG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG59XG4iLCI8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gICN2aWV3cG9ydFxuICAqbmdJZj1cInRoeVZpcnR1YWxTY3JvbGxcIlxuICBbaXRlbVNpemVdPVwidGh5SXRlbVNpemVcIlxuICBbc3R5bGUuaGVpZ2h0XT1cIicxMDAlJ1wiXG4gIGNka0Ryb3BMaXN0XG4gIFtjZGtEcm9wTGlzdEF1dG9TY3JvbGxTdGVwXT1cIjZcIlxuICBbY2RrRHJvcExpc3REYXRhXT1cImZsYXR0ZW5UcmVlTm9kZXNcIlxuICBbY2RrRHJvcExpc3RTb3J0aW5nRGlzYWJsZWRdPVwidHJ1ZVwiXG4gIChjZGtEcm9wTGlzdERyb3BwZWQpPVwib25MaXN0RHJvcHBlZCgkZXZlbnQpXCJcbiAgPlxuICA8ZGl2IGNsYXNzPVwidmlydHVhbC10cmVlcy1jb250YWluZXJcIj5cbiAgICA8dGh5LXRyZWUtbm9kZVxuICAgICAgKmNka1ZpcnR1YWxGb3I9XCJsZXQgbm9kZSBvZiBmbGF0dGVuVHJlZU5vZGVzOyB0cmFja0J5OiB0cmFja0J5Rm47IGxldCBpID0gaW5kZXhcIlxuICAgICAgY2RrRHJhZ1xuICAgICAgW2Nka0RyYWdEYXRhXT1cIm5vZGVcIlxuICAgICAgW2Nka0RyYWdEaXNhYmxlZF09XCIhdGh5RHJhZ2dhYmxlIHx8ICEobm9kZSB8IHRyZWVOb2RlRHJhZ2dhYmxlIDogdGh5QmVmb3JlRHJhZ1N0YXJ0KVwiXG4gICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwib25EcmFnU3RhcnRlZCgkZXZlbnQpXCJcbiAgICAgIChjZGtEcmFnRW5kZWQpPVwib25EcmFnRW5kZWQoJGV2ZW50KVwiXG4gICAgICAoY2RrRHJhZ01vdmVkKT1cImVtaXREcmFnTW92ZWQoJGV2ZW50KVwiXG4gICAgICBbbm9kZV09XCJub2RlXCJcbiAgICAgIFt0ZW1wbGF0ZVJlZl09XCJ0ZW1wbGF0ZVJlZlwiXG4gICAgICBbZW1wdHlDaGlsZHJlblRlbXBsYXRlUmVmXT1cImVtcHR5Q2hpbGRyZW5UZW1wbGF0ZVwiXG4gICAgICBbdGh5QXN5bmNdPVwidGh5QXN5bmNcIlxuICAgICAgW3RoeURyYWdnYWJsZV09XCJ0aHlEcmFnZ2FibGVcIlxuICAgICAgW3RoeUNoZWNrYWJsZV09XCJ0aHlDaGVja2FibGVcIlxuICAgICAgW3RoeU11bHRpcGxlXT1cInRoeU11bHRpcGxlXCJcbiAgICAgIFt0aHlDbGlja0JlaGF2aW9yXT1cInRoeUNsaWNrQmVoYXZpb3JcIlxuICAgICAgW3RoeVRpdGxlVHJ1bmNhdGVdPVwidGh5VGl0bGVUcnVuY2F0ZVwiXG4gICAgICBbdGh5SXRlbVNpemVdPVwidGh5SXRlbVNpemVcIlxuICAgICAgW3RoeUluZGVudF09XCJ0aHlJbmRlbnRcIlxuICAgICAgKHRoeU9uQ2xpY2spPVwidGh5T25DbGljay5lbWl0KCRldmVudClcIlxuICAgICAgKHRoeURibENsaWNrKT1cInRoeURibENsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAodGh5T25FeHBhbmRDaGFuZ2UpPVwiZXZlbnRUcmlnZ2VyQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICh0aHlPbkNoZWNrYm94Q2hhbmdlKT1cImV2ZW50VHJpZ2dlckNoYW5nZWQoJGV2ZW50KVwiPlxuICAgIDwvdGh5LXRyZWUtbm9kZT5cbiAgPC9kaXY+XG48L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cblxuPGRpdlxuICAqbmdJZj1cIiF0aHlWaXJ0dWFsU2Nyb2xsXCJcbiAgY2RrRHJvcExpc3RcbiAgW2Nka0Ryb3BMaXN0QXV0b1Njcm9sbFN0ZXBdPVwiNlwiXG4gIFtjZGtEcm9wTGlzdERhdGFdPVwiZmxhdHRlblRyZWVOb2Rlc1wiXG4gIFtjZGtEcm9wTGlzdFNvcnRpbmdEaXNhYmxlZF09XCJ0cnVlXCJcbiAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJvbkxpc3REcm9wcGVkKCRldmVudClcIj5cbiAgPHRoeS10cmVlLW5vZGVcbiAgICAqbmdGb3I9XCJsZXQgbm9kZSBvZiBmbGF0dGVuVHJlZU5vZGVzOyB0cmFja0J5OiB0cmFja0J5Rm47IGxldCBpID0gaW5kZXhcIlxuICAgIGNka0RyYWdcbiAgICBbY2RrRHJhZ0RhdGFdPVwibm9kZVwiXG4gICAgW2Nka0RyYWdEaXNhYmxlZF09XCIhdGh5RHJhZ2dhYmxlIHx8ICEobm9kZSB8IHRyZWVOb2RlRHJhZ2dhYmxlIDogdGh5QmVmb3JlRHJhZ1N0YXJ0KVwiXG4gICAgKGNka0RyYWdTdGFydGVkKT1cIm9uRHJhZ1N0YXJ0ZWQoJGV2ZW50KVwiXG4gICAgKGNka0RyYWdFbmRlZCk9XCJvbkRyYWdFbmRlZCgkZXZlbnQpXCJcbiAgICAoY2RrRHJhZ01vdmVkKT1cImVtaXREcmFnTW92ZWQoJGV2ZW50KVwiXG4gICAgW25vZGVdPVwibm9kZVwiXG4gICAgW3RlbXBsYXRlUmVmXT1cInRlbXBsYXRlUmVmXCJcbiAgICBbZW1wdHlDaGlsZHJlblRlbXBsYXRlUmVmXT1cImVtcHR5Q2hpbGRyZW5UZW1wbGF0ZVwiXG4gICAgW3RoeUFzeW5jXT1cInRoeUFzeW5jXCJcbiAgICBbdGh5RHJhZ2dhYmxlXT1cInRoeURyYWdnYWJsZVwiXG4gICAgW3RoeUNoZWNrYWJsZV09XCJ0aHlDaGVja2FibGVcIlxuICAgIFt0aHlNdWx0aXBsZV09XCJ0aHlNdWx0aXBsZVwiXG4gICAgW3RoeVRpdGxlVHJ1bmNhdGVdPVwidGh5VGl0bGVUcnVuY2F0ZVwiXG4gICAgW3RoeUl0ZW1TaXplXT1cInRoeUl0ZW1TaXplXCJcbiAgICBbdGh5Q2xpY2tCZWhhdmlvcl09XCJ0aHlDbGlja0JlaGF2aW9yXCJcbiAgICBbdGh5SW5kZW50XT1cInRoeUluZGVudFwiXG4gICAgKHRoeU9uQ2xpY2spPVwidGh5T25DbGljay5lbWl0KCRldmVudClcIlxuICAgICh0aHlEYmxDbGljayk9XCJ0aHlEYmxDbGljay5lbWl0KCRldmVudClcIlxuICAgICh0aHlPbkV4cGFuZENoYW5nZSk9XCJldmVudFRyaWdnZXJDaGFuZ2VkKCRldmVudClcIlxuICAgICh0aHlPbkNoZWNrYm94Q2hhbmdlKT1cInRoeU9uQ2hlY2tib3hDaGFuZ2UuZW1pdCgkZXZlbnQpXCI+XG4gIDwvdGh5LXRyZWUtbm9kZT5cbjwvZGl2PlxuIl19
652
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHJlZS90cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy90cmVlL3RyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlHLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFDTCxlQUFlLEVBSWYsTUFBTSxFQUNOLFNBQVMsRUFFVCxXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFDWixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBS0gsbUJBQW1CLEVBRW5CLFlBQVksRUFHZixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFD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QVNGLE9BQU87c0JBRFYsS0FBSztnQkFtQk4sZ0JBQWdCO3NCQUZmLFdBQVc7dUJBQUMsa0NBQWtDOztzQkFDOUMsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsRUFBRTtnQkFVdkMsV0FBVztzQkFEZCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRTtnQkFnQlEsZ0JBQWdCO3NCQUE1RCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLHFCQUFxQixFQUFFO2dCQU1sQyxlQUFlO3NCQUF2QixLQUFLO2dCQUtHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBS3VDLFlBQVk7c0JBQXhELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUscUJBQXFCLEVBQUU7Z0JBTUosU0FBUztzQkFBL0MsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUU7Z0JBSzVCLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFLRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBS0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFLRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBS0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUtHLGFBQWE7c0JBQXRCLE1BQU07Z0JBS0csV0FBVztzQkFBcEIsTUFBTTtnQkFNSCxXQUFXO3NCQURkLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQWNPLHFCQUFxQjtzQkFBN0UsWUFBWTt1QkFBQyx1QkFBdUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBWXZELFlBQVk7c0JBRFgsV0FBVzt1QkFBQyxnQkFBZ0I7Z0JBSTdCLFFBQVE7c0JBRFAsV0FBVzt1QkFBQyx5QkFBeUI7Z0JBR2YsUUFBUTtzQkFBOUIsWUFBWTt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5LCBoZWxwZXJzIH0gZnJvbSAnbmd4LXRldGh5cy91dGlsJztcbmltcG9ydCB7IHVzZUhvc3RSZW5kZXJlciB9IGZyb20gJ0B0ZXRoeXMvY2RrL2RvbSc7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsIENka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGwsIENka1ZpcnR1YWxGb3JPZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIG51bWJlckF0dHJpYnV0ZSxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRIWV9UUkVFX0FCU1RSQUNUX1RPS0VOIH0gZnJvbSAnLi90cmVlLWFic3RyYWN0JztcbmltcG9ydCB7IFRoeVRyZWVOb2RlIH0gZnJvbSAnLi90cmVlLW5vZGUuY2xhc3MnO1xuaW1wb3J0IHtcbiAgICBUaHlUcmVlQmVmb3JlRHJhZ0Ryb3BDb250ZXh0LFxuICAgIFRoeVRyZWVCZWZvcmVEcmFnU3RhcnRDb250ZXh0LFxuICAgIFRoeUNsaWNrQmVoYXZpb3IsXG4gICAgVGh5VHJlZURyYWdEcm9wRXZlbnQsXG4gICAgVGh5VHJlZURyb3BQb3NpdGlvbixcbiAgICBUaHlUcmVlRW1pdEV2ZW50LFxuICAgIFRoeVRyZWVJY29ucyxcbiAgICBUaHlUcmVlTm9kZUNoZWNrU3RhdGUsXG4gICAgVGh5VHJlZU5vZGVEYXRhXG59IGZyb20gJy4vdHJlZS5jbGFzcyc7XG5pbXBvcnQgeyBUaHlUcmVlU2VydmljZSB9IGZyb20gJy4vdHJlZS5zZXJ2aWNlJztcbmltcG9ydCB7IFRoeVRyZWVOb2RlQ29tcG9uZW50IH0gZnJvbSAnLi90cmVlLW5vZGUuY29tcG9uZW50JztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENka0RyYWcsIENka0RyYWdEcm9wLCBDZGtEcmFnRW5kLCBDZGtEcmFnTW92ZSwgQ2RrRHJhZ1N0YXJ0LCBDZGtEcm9wTGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgYXVkaXRUaW1lLCBmaWx0ZXIsIHN0YXJ0V2l0aCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVGh5VHJlZU5vZGVEcmFnZ2FibGVQaXBlIH0gZnJvbSAnLi90cmVlLnBpcGUnO1xuXG50eXBlIFRoeVRyZWVTaXplID0gJ3NtJyB8ICdkZWZhdWx0JztcblxudHlwZSBUaHlUcmVlVHlwZSA9ICdkZWZhdWx0JyB8ICdlc3BlY2lhbCc7XG5cbmNvbnN0IHRyZWVUeXBlQ2xhc3NNYXAgPSB7XG4gICAgZGVmYXVsdDogWyd0aHktdHJlZS1kZWZhdWx0J10sXG4gICAgZXNwZWNpYWw6IFsndGh5LXRyZWUtZXNwZWNpYWwnXVxufTtcblxuY29uc3QgdHJlZUl0ZW1TaXplTWFwID0ge1xuICAgIGRlZmF1bHQ6IDQ0LFxuICAgIHNtOiA0MlxufTtcblxuLyoqXG4gKiDmoJHlvaLmjqfku7bnu4Tku7ZcbiAqIEBuYW1lIHRoeS10cmVlXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndGh5LXRyZWUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRoeVRyZWUpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogVEhZX1RSRUVfQUJTVFJBQ1RfVE9LRU4sXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUaHlUcmVlKVxuICAgICAgICB9LFxuICAgICAgICBUaHlUcmVlU2VydmljZVxuICAgIF0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENka0RyYWcsXG4gICAgICAgIENka0Ryb3BMaXN0LFxuICAgICAgICBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsXG4gICAgICAgIENka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGwsXG4gICAgICAgIENka1ZpcnR1YWxGb3JPZixcbiAgICAgICAgVGh5VHJlZU5vZGVDb21wb25lbnQsXG4gICAgICAgIFRoeVRyZWVOb2RlRHJhZ2dhYmxlUGlwZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgVGh5VHJlZSBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIF90ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIHByaXZhdGUgX2VtcHR5Q2hpbGRyZW5UZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIHByaXZhdGUgX2RyYWdnYWJsZSA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfZXhwYW5kZWRLZXlzOiAoc3RyaW5nIHwgbnVtYmVyKVtdO1xuXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRLZXlzOiAoc3RyaW5nIHwgbnVtYmVyKVtdO1xuXG4gICAgcHJpdmF0ZSBob3N0UmVuZGVyZXIgPSB1c2VIb3N0UmVuZGVyZXIoKTtcblxuICAgIHByaXZhdGUgX29uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICAgcHJpdmF0ZSBfb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKF86IGFueSkgPT4ge307XG5cbiAgICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8vIOe8k+WtmCBFbGVtZW50IOWSjCBEcmFnUmVmIOeahOWFs+ezu++8jOaWueS+v+WcqCBJdGVtIOaLluWKqOaXtuafpeaJvlxuICAgIHByaXZhdGUgbm9kZURyYWdzTWFwID0gbmV3IE1hcDxIVE1MRWxlbWVudCwgQ2RrRHJhZzxUaHlUcmVlTm9kZT4+KCk7XG5cbiAgICBwcml2YXRlIG5vZGVEcmFnTW92ZWQgPSBuZXcgU3ViamVjdDxDZGtEcmFnTW92ZT4oKTtcblxuICAgIC8vIHByaXZhdGUgc3RhcnREcmFnTm9kZUV4cGFuZGVkOiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSBzdGFydERyYWdOb2RlQ2xvbmU6IFRoeVRyZWVOb2RlO1xuXG4gICAgLy8gTm9kZSDmi5bliqjnu4/ov4fnm67moIfml7bkuLTml7borrDlvZXnm67moIdpZOS7peWPiuebuOWvueW6lOebruagh+eahOS9jee9rlxuICAgIHByaXZhdGUgbm9kZURyb3BUYXJnZXQ6IHtcbiAgICAgICAgcG9zaXRpb24/OiBUaHlUcmVlRHJvcFBvc2l0aW9uO1xuICAgICAgICBrZXk/OiBudW1iZXIgfCBzdHJpbmc7XG4gICAgfTtcblxuICAgIHByaXZhdGUgZHJvcEVudGVyUHJlZGljYXRlPzogKGNvbnRleHQ6IHsgc291cmNlOiBUaHlUcmVlTm9kZTsgdGFyZ2V0OiBUaHlUcmVlTm9kZTsgZHJvcFBvc2l0aW9uOiBUaHlUcmVlRHJvcFBvc2l0aW9uIH0pID0+IGJvb2xlYW4gPVxuICAgICAgICBjb250ZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdGhpcy5pc1Nob3dFeHBhbmQoY29udGV4dC50YXJnZXQpIHx8ICghdGhpcy5pc1Nob3dFeHBhbmQoY29udGV4dC50YXJnZXQpICYmIGNvbnRleHQuZHJvcFBvc2l0aW9uICE9PSBUaHlUcmVlRHJvcFBvc2l0aW9uLmluKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfTtcblxuICAgIHB1YmxpYyBfc2VsZWN0aW9uTW9kZWw6IFNlbGVjdGlvbk1vZGVsPFRoeVRyZWVOb2RlPjtcblxuICAgIHB1YmxpYyBnZXQgdHJlZU5vZGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50aHlUcmVlU2VydmljZS50cmVlTm9kZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGZsYXR0ZW5UcmVlTm9kZXM6IFRoeVRyZWVOb2RlW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIOiZmuaLn+WMlua7muWKqOeahOinhuWPo1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBAVmlld0NoaWxkKCd2aWV3cG9ydCcsIHsgc3RhdGljOiBmYWxzZSB9KSB2aWV3cG9ydDogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuXG4gICAgLyoqXG4gICAgICogVHJlZU5vZGUg5bGV546w5omA6ZyA55qE5pWw5o2uXG4gICAgICogQHR5cGUgVGh5VHJlZU5vZGVEYXRhW11cbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlOb2RlczogVGh5VHJlZU5vZGVEYXRhW107XG5cbiAgICAvKipcbiAgICAgKiDorr7nva4gVHJlZU5vZGUg5piv5ZCm5pSv5oyB5bGV5byAXG4gICAgICogQHR5cGUgYm9vbGVhbiB8IEZ1bmN0aW9uXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5U2hvd0V4cGFuZDogYm9vbGVhbiB8ICgoXzogVGh5VHJlZU5vZGVEYXRhKSA9PiBib29sZWFuKSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7mmK/lkKbmlK/mjIHlpJrpgInoioLngrlcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoYGNsYXNzLnRoeS1tdWx0aXBsZS1zZWxlY3Rpb24tbGlzdGApXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSlcbiAgICB0aHlNdWx0aXBsZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog6K6+572uIFRyZWVOb2RlIOaYr+WQpuaUr+aMgeaLluaLveaOkuW6j1xuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy50aHktdHJlZS1kcmFnZ2FibGUnKVxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pXG4gICAgc2V0IHRoeURyYWdnYWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9kcmFnZ2FibGUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgdGh5RHJhZ2dhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZHJhZ2dhYmxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9riBUcmVlTm9kZSDmmK/lkKbmlK/mjIEgQ2hlY2tib3gg6YCJ5oupXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KSB0aHlDaGVja2FibGU6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiDngrnlh7voioLngrnnmoTooYzkuLrvvIxgZGVmYXVsdGAg5Li66YCJ5Lit5b2T5YmN6IqC54K577yMYHNlbGVjdENoZWNrYm94YCDkuLrpgInkuK3oioLngrnnmoQgQ2hlY2tib3jvvIwgYHRoeUNoZWNrYWJsZWAg5Li6IHRydWUg5pe255Sf5pWI44CCXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5Q2xpY2tCZWhhdmlvcjogVGh5Q2xpY2tCZWhhdmlvciA9ICdkZWZhdWx0JztcblxuICAgIC8qKlxuICAgICAqIOiuvue9riBjaGVjayDnirbmgIHnmoTorqHnrpfnrZbnlaVcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzZXQgdGh5Q2hlY2tTdGF0ZVJlc29sdmUocmVzb2x2ZTogKG5vZGU6IFRoeVRyZWVOb2RlKSA9PiBUaHlUcmVlTm9kZUNoZWNrU3RhdGUpIHtcbiAgICAgICAgaWYgKHJlc29sdmUpIHtcbiAgICAgICAgICAgIHRoaXMudGh5VHJlZVNlcnZpY2Uuc2V0Q2hlY2tTdGF0ZVJlc29sdmUocmVzb2x2ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva4gVHJlZU5vZGUg5piv5ZCm5pSv5oyB5byC5q2l5Yqg6L29XG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSkgdGh5QXN5bmMgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX3RoeVR5cGU6IFRoeVRyZWVUeXBlID0gJ2RlZmF1bHQnO1xuXG4gICAgLyoqXG4gICAgICog6K6+572u5LiN5ZCM5bGV56S657G75Z6L55qEIFRyZWXvvIxgZGVmYXVsdGAg5Li65bCP566t5aS05bGV56S677yMIGBlc3BlY2lhbGAg5Li6IOWKoOWHj+WPt+Wbvuagh+WxleekulxuICAgICAqIEB0eXBlIFRoeVRyZWVUeXBlXG4gICAgICogQGRlZmF1bHQgZGVmYXVsdFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeVR5cGUodHlwZTogVGh5VHJlZVR5cGUpIHtcbiAgICAgICAgdGhpcy5fdGh5VHlwZSA9IHR5cGU7XG4gICAgICAgIGlmICh0eXBlID09PSAnZXNwZWNpYWwnKSB7XG4gICAgICAgICAgICB0aGlzLnRoeUljb25zID0geyBleHBhbmQ6ICdtaW51cy1zcXVhcmUnLCBjb2xsYXBzZTogJ3BsdXMtc3F1YXJlJyB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHRoeVR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aHlUeXBlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruS4jeWQjCBUcmVlIOWxleW8gOaKmOWPoOeahOWbvuagh++8jGBleHBhbmRgIOS4uuWxleW8gOeKtuaAgeeahOWbvuagh++8jGBjb2xsYXBzZWAg5Li65oqY5Y+g54q25oCB55qE5Zu+5qCHXG4gICAgICogQHR5cGUgeyBleHBhbmQ6IHN0cmluZywgY29sbGFwc2U6IHN0cmluZyB9XG4gICAgICovXG4gICAgQElucHV0KCkgdGh5SWNvbnM6IFRoeVRyZWVJY29ucyA9IHt9O1xuXG4gICAgcHJpdmF0ZSBfdGh5U2l6ZTogVGh5VHJlZVNpemUgPSAnZGVmYXVsdCc7XG4gICAgLyoqXG4gICAgICog5pSv5oyBIGBzbWAgfCBgZGVmYXVsdGAg5Lik56eN5aSn5bCP77yM6buY6K6k5YC85Li6IGBkZWZhdWx0YFxuICAgICAqIEB0eXBlIFRoeVRyZWVTaXplXG4gICAgICogQGRlZmF1bHQgZGVmYXVsdFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeVNpemUoc2l6ZTogVGh5VHJlZVNpemUpIHtcbiAgICAgICAgdGhpcy5fdGh5U2l6ZSA9IHNpemU7XG4gICAgICAgIGlmICh0aGlzLl90aHlTaXplKSB7XG4gICAgICAgICAgICB0aGlzLl90aHlJdGVtU2l6ZSA9IHRyZWVJdGVtU2l6ZU1hcFt0aGlzLl90aHlTaXplXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3RoeUl0ZW1TaXplID0gdHJlZUl0ZW1TaXplTWFwLmRlZmF1bHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgdGh5U2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RoeVNpemU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5piv5ZCm5byA5ZCv6Jma5ouf5rua5YqoXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy50aHktdmlydHVhbC1zY3JvbGxpbmctdHJlZScpXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSlcbiAgICB0aHlWaXJ0dWFsU2Nyb2xsID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF90aHlJdGVtU2l6ZSA9IDQ0O1xuXG4gICAgLyoqXG4gICAgICog5byA5ZCv6Jma5ouf5rua5Yqo5pe277yM5Y2V6KGM6IqC54K555qE6auY5bqm77yM5b2TYHRoeVNpemVg5Li6YGRlZmF1bHRg5pe277yM6K+l5Y+C5pWw5omN55Sf5pWIXG4gICAgICogQGRlZmF1bHQgNDRcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KVxuICAgIHNldCB0aHlJdGVtU2l6ZShpdGVtU2l6ZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLnRoeVNpemUgIT09ICdkZWZhdWx0Jykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZXR0aW5nIHRoeVNpemUgYW5kIHRoeUl0ZW1TaXplIGF0IHRoZSBzYW1lIHRpbWUgaXMgbm90IGFsbG93ZWQnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90aHlJdGVtU2l6ZSA9IGl0ZW1TaXplO1xuICAgIH1cblxuICAgIGdldCB0aHlJdGVtU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RoeUl0ZW1TaXplO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruiKgueCueWQjeensOaYr+WQpuaUr+aMgei2heWHuuaIquWPllxuICAgICAqIEB0eXBlIGJvb2xlYW5cbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KSB0aHlUaXRsZVRydW5jYXRlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIOW3sumAieS4reeahCBub2RlIOiKgueCuembhuWQiFxuICAgICAqIEBkZWZhdWx0IFtdXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5U2VsZWN0ZWRLZXlzOiBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIOWxleW8gOaMh+WumueahOagkeiKgueCuVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeUV4cGFuZGVkS2V5czogKHN0cmluZyB8IG51bWJlcilbXTtcblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuWxleW8gOaJgOacieagkeiKgueCuVxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pIHRoeUV4cGFuZEFsbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog6K6+572u57yp6L+b6Led56a777yM57yp6L+b6Led56a7ID0gdGh5SW5kZW50ICogbm9kZS5sZXZlbFxuICAgICAqIEB0eXBlIG51bWJlclxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIHRoeUluZGVudCA9IDI1O1xuXG4gICAgLyoqXG4gICAgICog5ouW5ou95LmL5YmN55qE5Zue6LCD77yM5Ye95pWw6L+U5ZueIGZhbHNlIOWImemYu+atouaLluaLvVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeUJlZm9yZURyYWdTdGFydDogKGNvbnRleHQ6IFRoeVRyZWVCZWZvcmVEcmFnU3RhcnRDb250ZXh0KSA9PiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICog5ouW5pS+5Yiw5YWD57Sg5pe25Zue6LCD77yM5Ye95pWw6L+U5ZueIGZhbHNlIOWImemYu+atouaLluaUvuWIsOW9k+WJjeWFg+e0oFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeUJlZm9yZURyYWdEcm9wOiAoY29udGV4dDogVGh5VHJlZUJlZm9yZURyYWdEcm9wQ29udGV4dCkgPT4gYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIOiuvue9ruWtkCBUcmVlTm9kZSDngrnlh7vkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25DbGljazogRXZlbnRFbWl0dGVyPFRoeVRyZWVFbWl0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlUcmVlRW1pdEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog6K6+572uIGNoZWNrIOmAieaLqeS6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPbkNoZWNrYm94Q2hhbmdlOiBFdmVudEVtaXR0ZXI8VGh5VHJlZUVtaXRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVRyZWVFbWl0RXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7ngrnlh7vlsZXlvIDop6blj5Hkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25FeHBhbmRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUaHlUcmVlRW1pdEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5VHJlZUVtaXRFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIOiuvue9riBUcmVlTm9kZSDmi5bmi73kuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25EcmFnRHJvcDogRXZlbnRFbWl0dGVyPFRoeVRyZWVEcmFnRHJvcEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5VHJlZURyYWdEcm9wRXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDlj4zlh7sgVHJlZU5vZGUg5LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeURibENsaWNrOiBFdmVudEVtaXR0ZXI8VGh5VHJlZUVtaXRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVRyZWVFbWl0RXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva4gVHJlZU5vZGUg55qE5riy5p+T5qih5p2/XG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgndHJlZU5vZGVUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgc2V0IHRlbXBsYXRlUmVmKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgICAgIGlmICh0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5fdGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCB0ZW1wbGF0ZVJlZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlUmVmO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruWtkOeahOepuuaVsOaNrua4suafk+aooeadv1xuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ2VtcHR5Q2hpbGRyZW5UZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pIGVtcHR5Q2hpbGRyZW5UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBzZXQgZW1wdHlDaGlsZHJlblRlbXBsYXRlUmVmKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgICAgIGlmICh0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5fZW1wdHlDaGlsZHJlblRlbXBsYXRlUmVmID0gdGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgZW1wdHlDaGlsZHJlblRlbXBsYXRlUmVmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW1wdHlDaGlsZHJlblRlbXBsYXRlUmVmO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MudGh5LXRyZWUnKVxuICAgIHRoeVRyZWVDbGFzcyA9IHRydWU7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRoeS10cmVlLWRyYWdnaW5nJylcbiAgICBkcmFnZ2luZzogYm9vbGVhbjtcblxuICAgIEBWaWV3Q2hpbGRyZW4oQ2RrRHJhZykgY2RrRHJhZ3M6IFF1ZXJ5TGlzdDxDZGtEcmFnPFRoeVRyZWVOb2RlPj47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHRoeVRyZWVTZXJ2aWNlOiBUaHlUcmVlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudFxuICAgICkge31cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbml0VGh5Tm9kZXMoKTtcbiAgICAgICAgdGhpcy5fc2V0VHJlZVR5cGUoKTtcbiAgICAgICAgdGhpcy5fc2V0VHJlZVNpemUoKTtcbiAgICAgICAgdGhpcy5faW5zdGFuY2VTZWxlY3Rpb25Nb2RlbCgpO1xuICAgICAgICB0aGlzLl9zZWxlY3RUcmVlTm9kZXModGhpcy50aHlTZWxlY3RlZEtleXMpO1xuXG4gICAgICAgIHRoaXMudGh5VHJlZVNlcnZpY2UuZmxhdHRlbk5vZGVzJC5zdWJzY3JpYmUoZmxhdHRlblRyZWVOb2RlcyA9PiB7XG4gICAgICAgICAgICB0aGlzLmZsYXR0ZW5UcmVlTm9kZXMgPSBmbGF0dGVuVHJlZU5vZGVzO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jZGtEcmFncy5jaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShzdGFydFdpdGgodGhpcy5jZGtEcmFncyksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRyYWdzOiBRdWVyeUxpc3Q8Q2RrRHJhZzxUaHlUcmVlTm9kZT4+KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlRHJhZ3NNYXAuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICBkcmFncy5mb3JFYWNoKGRyYWcgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZHJhZy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjZGtEcmFnIOWPmOWMluaXtu+8jOe8k+WtmCBFbGVtZW50IOS4jiBEcmFnUmVmIOeahOWFs+ezu++8jOaWueS+vyBEcmFnIE1vdmUg5pe25p+l5om+XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vZGVEcmFnc01hcC5zZXQoZHJhZy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIGRyYWcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm5vZGVEcmFnTW92ZWRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIC8vIGF1ZGl0VGltZSgzMCksXG4gICAgICAgICAgICAgICAgLy8gIGF1ZGl0VGltZSDlj6/og73kvJrlr7zoh7Tmi5bliqjnu5PmnZ/lkI7ku43nhLbmiafooYwgbW92ZWQg77yM5omA5Lul6YCa6L+H5Yik5patIGRyYWdnaW5nIOeKtuaAgeadpei/h+a7pOaXoOaViCBtb3ZlZFxuICAgICAgICAgICAgICAgIGZpbHRlcigoZXZlbnQ6IENka0RyYWdNb3ZlKSA9PiBldmVudC5zb3VyY2UuX2RyYWdSZWYuaXNEcmFnZ2luZygpKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25EcmFnTW92ZWQoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlcy50aHlOb2RlcyAmJiAhY2hhbmdlcy50aHlOb2Rlcy5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRUaHlOb2RlcygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLnRoeVR5cGUgJiYgIWNoYW5nZXMudGh5VHlwZS5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFRyZWVUeXBlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXMudGh5TXVsdGlwbGUgJiYgIWNoYW5nZXMudGh5TXVsdGlwbGUuaXNGaXJzdENoYW5nZSgpKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnN0YW5jZVNlbGVjdGlvbk1vZGVsKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy50aHlTZWxlY3RlZEtleXMgJiYgIWNoYW5nZXMudGh5U2VsZWN0ZWRLZXlzLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRLZXlzID0gY2hhbmdlcy50aHlTZWxlY3RlZEtleXMuY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0VHJlZU5vZGVzKGNoYW5nZXMudGh5U2VsZWN0ZWRLZXlzLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy50aHlFeHBhbmRlZEtleXMgJiYgIWNoYW5nZXMudGh5RXhwYW5kZWRLZXlzLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlRXhwYW5kZWRLZXlzKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXMudGh5RXhwYW5kQWxsICYmICFjaGFuZ2VzLnRoeUV4cGFuZEFsbC5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUV4cGFuZGVkS2V5cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyVmlldyA9ICgpID0+IHt9O1xuXG4gICAgZXZlbnRUcmlnZ2VyQ2hhbmdlZChldmVudDogVGh5VHJlZUVtaXRFdmVudCk6IHZvaWQge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LmV2ZW50TmFtZSkge1xuICAgICAgICAgICAgY2FzZSAnZXhwYW5kJzpcbiAgICAgICAgICAgICAgICB0aGlzLnRoeU9uRXhwYW5kQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdjaGVja2JveENoYW5nZSc6XG4gICAgICAgICAgICAgICAgdGhpcy50aHlPbkNoZWNrYm94Q2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdFRoeU5vZGVzKCkge1xuICAgICAgICB0aGlzLl9leHBhbmRlZEtleXMgPSB0aGlzLmdldEV4cGFuZGVkTm9kZXMoKS5tYXAobm9kZSA9PiBub2RlLmtleSk7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkS2V5cyA9IHRoaXMuZ2V0U2VsZWN0ZWROb2RlcygpLm1hcChub2RlID0+IG5vZGUua2V5KTtcbiAgICAgICAgdGhpcy50aHlUcmVlU2VydmljZS5pbml0aWFsaXplVHJlZU5vZGVzKHRoaXMudGh5Tm9kZXMpO1xuICAgICAgICB0aGlzLmZsYXR0ZW5UcmVlTm9kZXMgPSB0aGlzLnRoeVRyZWVTZXJ2aWNlLmZsYXR0ZW5UcmVlTm9kZXM7XG4gICAgICAgIHRoaXMuX3NlbGVjdFRyZWVOb2Rlcyh0aGlzLl9zZWxlY3RlZEtleXMpO1xuICAgICAgICB0aGlzLl9oYW5kbGVFeHBhbmRlZEtleXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9oYW5kbGVFeHBhbmRlZEtleXMoKSB7XG4gICAgICAgIGlmICh0aGlzLnRoeUV4cGFuZGVkS2V5cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLl9leHBhbmRlZEtleXMgPSBoZWxwZXJzLmNvbmNhdEFycmF5KFxuICAgICAgICAgICAgICAgIHRoaXMudGh5RXhwYW5kZWRLZXlzLmZpbHRlcihrZXkgPT4gIXRoaXMuX2V4cGFuZGVkS2V5cy5pbmNsdWRlcyhrZXkpKSxcbiAgICAgICAgICAgICAgICB0aGlzLl9leHBhbmRlZEtleXNcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50aHlUcmVlU2VydmljZS5leHBhbmRUcmVlTm9kZXModGhpcy50aHlFeHBhbmRBbGwgfHwgdGhpcy5fZXhwYW5kZWRLZXlzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXRUcmVlVHlwZSgpIHtcbiAgICAgICAgaWYgKHRoaXMudGh5VHlwZSAmJiB0cmVlVHlwZUNsYXNzTWFwW3RoaXMudGh5VHlwZV0pIHtcbiAgICAgICAgICAgIHRyZWVUeXBlQ2xhc3NNYXBbdGhpcy50aHlUeXBlXS5mb3JFYWNoKGNsYXNzTmFtZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ob3N0UmVuZGVyZXIuYWRkQ2xhc3MoY2xhc3NOYW1lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0VHJlZVNpemUoKSB7XG4gICAgICAgIGlmICh0aGlzLnRoeVNpemUpIHtcbiAgICAgICAgICAgIHRoaXMuaG9zdFJlbmRlcmVyLmFkZENsYXNzKGB0aHktdHJlZS0ke3RoaXMudGh5U2l6ZX1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2luc3RhbmNlU2VsZWN0aW9uTW9kZWwoKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsID0gbmV3IFNlbGVjdGlvbk1vZGVsPGFueT4odGhpcy50aHlNdWx0aXBsZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2VsZWN0VHJlZU5vZGVzKGtleXM6IChzdHJpbmcgfCBudW1iZXIpW10pIHtcbiAgICAgICAgKGtleXMgfHwgW10pLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnRoeVRyZWVTZXJ2aWNlLmdldFRyZWVOb2RlKGtleSk7XG4gICAgICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0VHJlZU5vZGUodGhpcy50aHlUcmVlU2VydmljZS5nZXRUcmVlTm9kZShrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaXNTZWxlY3RlZChub2RlOiBUaHlUcmVlTm9kZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChub2RlKTtcbiAgICB9XG5cbiAgICB0b2dnbGVUcmVlTm9kZShub2RlOiBUaHlUcmVlTm9kZSkge1xuICAgICAgICBpZiAobm9kZSAmJiAhbm9kZS5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC50b2dnbGUobm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSB7XG4gICAgICAgIHJldHVybiBpdGVtLmtleSB8fCBpbmRleDtcbiAgICB9XG5cbiAgICBpc1Nob3dFeHBhbmQobm9kZTogVGh5VHJlZU5vZGUpIHtcbiAgICAgICAgaWYgKGhlbHBlcnMuaXNGdW5jdGlvbih0aGlzLnRoeVNob3dFeHBhbmQpKSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMudGh5U2hvd0V4cGFuZCBhcyBGdW5jdGlvbikobm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aHlTaG93RXhwYW5kO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogVGh5VHJlZU5vZGVEYXRhW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnRoeU5vZGVzID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9pbml0VGh5Tm9kZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgb25EcmFnU3RhcnRlZChldmVudDogQ2RrRHJhZ1N0YXJ0PFRoeVRyZWVOb2RlPikge1xuICAgICAgICB0aGlzLmRyYWdnaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdGFydERyYWdOb2RlQ2xvbmUgPSBPYmplY3QuYXNzaWduKHt9LCBldmVudC5zb3VyY2UuZGF0YSk7XG4gICAgICAgIGlmIChldmVudC5zb3VyY2UuZGF0YS5pc0V4cGFuZGVkKSB7XG4gICAgICAgICAgICBldmVudC5zb3VyY2UuZGF0YS5zZXRFeHBhbmRlZChmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlbWl0RHJhZ01vdmVkKGV2ZW50OiBDZGtEcmFnTW92ZSkge1xuICAgICAgICB0aGlzLm5vZGVEcmFnTW92ZWQubmV4dChldmVudCk7XG4gICAgfVxuXG4gICAgb25EcmFnTW92ZWQoZXZlbnQ6IENka0RyYWdNb3ZlPFRoeVRyZWVOb2RlPikge1xuICAgICAgICAvLyDpgJrov4fpvKDmoIfkvY3nva7mn6Xmib7lr7nlupTnmoTnm67moIcgSXRlbSDlhYPntKBcbiAgICAgICAgbGV0IGN1cnJlbnRQb2ludEVsZW1lbnQgPSB0aGlzLmRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZXZlbnQucG9pbnRlclBvc2l0aW9uLngsIGV2ZW50LnBvaW50ZXJQb3NpdGlvbi55KSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKCFjdXJyZW50UG9pbnRFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFudXBEcmFnQXJ0aWZhY3RzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRhcmdldEVsZW1lbnQgPSBjdXJyZW50UG9pbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygndGh5LXRyZWUtbm9kZScpXG4gICAgICAgICAgICA/IGN1cnJlbnRQb2ludEVsZW1lbnRcbiAgICAgICAgICAgIDogKGN1cnJlbnRQb2ludEVsZW1lbnQuY2xvc2VzdCgnLnRoeS10cmVlLW5vZGUnKSBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgIGlmICghdGFyZ2V0RWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhbnVwRHJhZ0FydGlmYWN0cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIOe8k+WtmOaUvue9ruebruagh0lkIOW5tuiuoeeul+m8oOagh+ebuOWvueW6lOeahOS9jee9rlxuICAgICAgICB0aGlzLm5vZGVEcm9wVGFyZ2V0ID0ge1xuICAgICAgICAgICAga2V5OiB0aGlzLm5vZGVEcmFnc01hcC5nZXQodGFyZ2V0RWxlbWVudCk/LmRhdGEua2V5LFxuICAgICAgICAgICAgcG9zaXRpb246IHRoaXMuZ2V0VGFyZ2V0UG9zaXRpb24odGFyZ2V0RWxlbWVudCwgZXZlbnQpXG4gICAgICAgIH07XG4gICAgICAgIC8vIOaJp+ihjOWklumDqOS8oOWFpeeahCBkcm9wRW50ZXJQcmVkaWNhdGUg5Yik5pat5piv5ZCm5YWB6K645ouW5YWl55uu5qCH6aG5XG4gICAgICAgIGlmICh0aGlzLmRyb3BFbnRlclByZWRpY2F0ZSkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0RHJhZ1JlZiA9IHRoaXMubm9kZURyYWdzTWFwLmdldCh0YXJnZXRFbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmRyb3BFbnRlclByZWRpY2F0ZSh7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogZXZlbnQuc291cmNlLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0RHJhZ1JlZi5kYXRhLFxuICAgICAgICAgICAgICAgICAgICBkcm9wUG9zaXRpb246IHRoaXMubm9kZURyb3BUYXJnZXQucG9zaXRpb25cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RHJvcFBvc2l0aW9uUGxhY2Vob2xkZXIodGFyZ2V0RWxlbWVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZURyb3BUYXJnZXQgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYW51cERyYWdBcnRpZmFjdHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0Ryb3BQb3NpdGlvblBsYWNlaG9sZGVyKHRhcmdldEVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25EcmFnRW5kZWQoZXZlbnQ6IENka0RyYWdFbmQ8VGh5VHJlZU5vZGU+KSB7XG4gICAgICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZTtcbiAgICAgICAgLy8g5ouW5ou957uT5p2f5ZCO5oGi5aSN5Y6f5aeL55qE5bGV5byA54q25oCBXG4gICAgICAgIGV2ZW50LnNvdXJjZS5kYXRhLnNldEV4cGFuZGVkKHRoaXMuc3RhcnREcmFnTm9kZUNsb25lLmlzRXhwYW5kZWQpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnREcmFnTm9kZUNsb25lID0gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25MaXN0RHJvcHBlZChldmVudDogQ2RrRHJhZ0Ryb3A8VGh5VHJlZU5vZGVbXSwgVGh5VHJlZU5vZGVbXSwgVGh5VHJlZU5vZGU+KSB7XG4gICAgICAgIGlmICghdGhpcy5ub2RlRHJvcFRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5pc1Nob3dFeHBhbmQodGhpcy5zdGFydERyYWdOb2RlQ2xvbmUpICYmIHRoaXMubm9kZURyb3BUYXJnZXQucG9zaXRpb24gPT09IFRoeVRyZWVEcm9wUG9zaXRpb24uaW4pIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYW51cERyYWdBcnRpZmFjdHMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNvdXJjZU5vZGUgPSB0aGlzLnN0YXJ0RHJhZ05vZGVDbG9uZTtcbiAgICAgICAgY29uc3Qgc291cmNlTm9kZVBhcmVudCA9IHNvdXJjZU5vZGUucGFyZW50Tm9kZTtcbiAgICAgICAgY29uc3QgdGFyZ2V0RHJhZ1JlZiA9IHRoaXMuY2RrRHJhZ3MuZmluZChpdGVtID0+IGl0ZW0uZGF0YT8ua2V5ID09PSB0aGlzLm5vZGVEcm9wVGFyZ2V0LmtleSk7XG4gICAgICAgIGNvbnN0IHRhcmdldE5vZGUgPSB0YXJnZXREcmFnUmVmPy5kYXRhO1xuICAgICAgICBjb25zdCB0YXJnZXROb2RlUGFyZW50ID0gdGFyZ2V0Tm9kZS5wYXJlbnROb2RlO1xuXG4gICAgICAgIGNvbnN0IGJlZm9yZURyYWdEcm9wQ29udGV4dDogVGh5VHJlZUJlZm9yZURyYWdEcm9wQ29udGV4dCA9IHtcbiAgICAgICAgICAgIHByZXZpb3VzSXRlbTogc291cmNlTm9kZSxcbiAgICAgICAgICAgIHByZXZpb3VzQ29udGFpbmVySXRlbXM6IHNvdXJjZU5vZGVQYXJlbnQ/LmNoaWxkcmVuLFxuICAgICAgICAgICAgaXRlbTogdGFyZ2V0Tm9kZSxcbiAgICAgICAgICAgIGNvbnRhaW5lckl0ZW1zOiB0YXJnZXROb2RlUGFyZW50Py5jaGlsZHJlbixcbiAgICAgICAgICAgIHBvc2l0aW9uOiB0aGlzLm5vZGVEcm9wVGFyZ2V0LnBvc2l0aW9uXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMudGh5QmVmb3JlRHJhZ0Ryb3AgJiYgIXRoaXMudGh5QmVmb3JlRHJhZ0Ryb3AoYmVmb3JlRHJhZ0Ryb3BDb250ZXh0KSkge1xuICAgICAgICAgICAgdGhpcy5jbGVhbnVwRHJhZ0FydGlmYWN0cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50aHlUcmVlU2VydmljZS5kZWxldGVUcmVlTm9kZShzb3VyY2VOb2RlKTtcblxuICAgICAgICBzd2l0Y2ggKHRoaXMubm9kZURyb3BUYXJnZXQucG9zaXRpb24pIHtcbiAgICAgICAgICAgIGNhc2UgJ2JlZm9yZSc6XG4gICAgICAgICAgICAgICAgY29uc3QgYmVmb3JlSW5zZXJ0SW5kZXggPSAodGFyZ2V0Tm9kZVBhcmVudD8uY2hpbGRyZW4gfHwgdGhpcy50cmVlTm9kZXMpLmluZGV4T2YodGFyZ2V0Tm9kZSk7XG4gICAgICAgICAgICAgICAgdGhpcy50aHlUcmVlU2VydmljZS5hZGRUcmVlTm9kZShzb3VyY2VOb2RlLCB0YXJnZXROb2RlUGFyZW50LCBiZWZvcmVJbnNlcnRJbmRleCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhZnRlcic6XG4gICAgICAgICAgICAgICAgY29uc3QgYWZ0ZXJJbnNlcnRJbmRleCA9ICh0YXJnZXROb2RlUGFyZW50Py5jaGlsZHJlbiB8fCB0aGlzLnRyZWVOb2RlcykuaW5kZXhPZih0YXJnZXROb2RlKSArIDE7XG4gICAgICAgICAgICAgICAgdGhpcy50aHlUcmVlU2VydmljZS5hZGRUcmVlTm9kZShzb3VyY2VOb2RlLCB0YXJnZXROb2RlUGFyZW50LCBhZnRlckluc2VydEluZGV4KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2luJzpcbiAgICAgICAgICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLmFkZFRyZWVOb2RlKHNvdXJjZU5vZGUsIHRhcmdldE5vZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50aHlUcmVlU2VydmljZS5zeW5jRmxhdHRlblRyZWVOb2RlcygpO1xuXG4gICAgICAgIGxldCBhZnRlcjogVGh5VHJlZU5vZGUgPSBudWxsO1xuICAgICAgICBsZXQgdGFyZ2U6IFRoeVRyZWVOb2RlID0gbnVsbDtcbiAgICAgICAgaWYgKGJlZm9yZURyYWdEcm9wQ29udGV4dC5wb3NpdGlvbiA9PT0gVGh5VHJlZURyb3BQb3NpdGlvbi5iZWZvcmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldENvbnRhaW5lck5vZGVzID0gdGFyZ2V0Tm9kZVBhcmVudD8uY2hpbGRyZW4gfHwgdGhpcy50cmVlTm9kZXM7XG4gICAgICAgICAgICBhZnRlciA9IHRhcmdldENvbnRhaW5lck5vZGVzW3RhcmdldENvbnRhaW5lck5vZGVzLmluZGV4T2YodGFyZ2V0Tm9kZSkgLSAyXTtcbiAgICAgICAgICAgIHRhcmdlID0gdGFyZ2V0Tm9kZVBhcmVudDtcbiAgICAgICAgfSBlbHNlIGlmIChiZWZvcmVEcmFnRHJvcENvbnRleHQucG9zaXRpb24gPT09IFRoeVRyZWVEcm9wUG9zaXRpb24uYWZ0ZXIpIHtcbiAgICAgICAgICAgIGFmdGVyID0gdGFyZ2V0Tm9kZTtcbiAgICAgICAgICAgIHRhcmdlID0gdGFyZ2V0Tm9kZVBhcmVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFmdGVyID0gdGFyZ2V0Tm9kZS5jaGlsZHJlbj8ubGVuZ3RoID4gMCA/IHRhcmdldE5vZGUuY2hpbGRyZW5bdGFyZ2V0Tm9kZS5jaGlsZHJlbi5sZW5ndGggLSAyXSA6IG51bGw7XG4gICAgICAgICAgICB0YXJnZSA9IHRhcmdldE5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRoeU9uRHJhZ0Ryb3AuZW1pdCh7XG4gICAgICAgICAgICBkcmFnTm9kZTogdGhpcy50aHlUcmVlU2VydmljZS5nZXRUcmVlTm9kZShzb3VyY2VOb2RlLmtleSksXG4gICAgICAgICAgICB0YXJnZXROb2RlOiB0YXJnZSxcbiAgICAgICAgICAgIGFmdGVyTm9kZTogYWZ0ZXJcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jbGVhbnVwRHJhZ0FydGlmYWN0cygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VGFyZ2V0UG9zaXRpb24odGFyZ2V0OiBIVE1MRWxlbWVudCwgZXZlbnQ6IENka0RyYWdNb3ZlKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldFJlY3QgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IGJlZm9yZU9yQWZ0ZXJHYXAgPSB0YXJnZXRSZWN0LmhlaWdodCAqIDAuMztcbiAgICAgICAgLy8g5bCGIE5vZGUg6auY5bqm5YiG5Li65LiK5Lit5LiL5LiJ5q6177yM5YW25Lit5LiK5LiL55qEIEdhcCDkuLogaGVpZ2h0IOeahCAzMCXvvIzpgJrov4fliKTmlq3pvKDmoIfkvY3nva7lnKjlk6rkuIDmrrUgZ2FwIOadpeiuoeeul+WvueW6lOeahOS9jee9rlxuICAgICAgICBpZiAoZXZlbnQucG9pbnRlclBvc2l0aW9uLnkgLSB0YXJnZXRSZWN0LnRvcCA8IGJlZm9yZU9yQWZ0ZXJHYXApIHtcbiAgICAgICAgICAgIHJldHVybiBUaHlUcmVlRHJvcFBvc2l0aW9uLmJlZm9yZTtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5wb2ludGVyUG9zaXRpb24ueSA+PSB0YXJnZXRSZWN0LmJvdHRvbSAtIGJlZm9yZU9yQWZ0ZXJHYXApIHtcbiAgICAgICAgICAgIHJldHVybiBUaHlUcmVlRHJvcFBvc2l0aW9uLmFmdGVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFRoeVRyZWVEcm9wUG9zaXRpb24uaW47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3dEcm9wUG9zaXRpb25QbGFjZWhvbGRlcih0YXJnZXRFbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgICAgICB0aGlzLmNsZWFudXBEcm9wUG9zaXRpb25QbGFjZWhvbGRlcigpO1xuICAgICAgICBpZiAodGhpcy5ub2RlRHJvcFRhcmdldCAmJiB0YXJnZXRFbGVtZW50KSB7XG4gICAgICAgICAgICB0YXJnZXRFbGVtZW50LmNsYXNzTGlzdC5hZGQoYGRyb3AtcG9zaXRpb24tJHt0aGlzLm5vZGVEcm9wVGFyZ2V0LnBvc2l0aW9ufWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhbnVwRHJvcFBvc2l0aW9uUGxhY2Vob2xkZXIoKSB7XG4gICAgICAgIHRoaXMuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRyb3AtcG9zaXRpb24tYmVmb3JlJykuZm9yRWFjaChlbGVtZW50ID0+IGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZHJvcC1wb3NpdGlvbi1iZWZvcmUnKSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRyb3AtcG9zaXRpb24tYWZ0ZXInKS5mb3JFYWNoKGVsZW1lbnQgPT4gZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdkcm9wLXBvc2l0aW9uLWFmdGVyJykpO1xuICAgICAgICB0aGlzLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kcm9wLXBvc2l0aW9uLWluJykuZm9yRWFjaChlbGVtZW50ID0+IGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZHJvcC1wb3NpdGlvbi1pbicpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFudXBEcmFnQXJ0aWZhY3RzKCkge1xuICAgICAgICB0aGlzLm5vZGVEcm9wVGFyZ2V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5jbGVhbnVwRHJvcFBvc2l0aW9uUGxhY2Vob2xkZXIoKTtcbiAgICB9XG5cbiAgICAvLyByZWdpb24gUHVibGljIEZ1bmN0aW9uc1xuXG4gICAgc2VsZWN0VHJlZU5vZGUobm9kZTogVGh5VHJlZU5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUgJiYgIW5vZGUuaXNEaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KG5vZGUpO1xuICAgICAgICAgICAgdGhpcy50aHlUcmVlU2VydmljZS5zeW5jRmxhdHRlblRyZWVOb2RlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Um9vdE5vZGVzKCk6IFRoeVRyZWVOb2RlW10ge1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlTm9kZXM7XG4gICAgfVxuXG4gICAgZ2V0VHJlZU5vZGUoa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGh5VHJlZVNlcnZpY2UuZ2V0VHJlZU5vZGUoa2V5KTtcbiAgICB9XG5cbiAgICBnZXRTZWxlY3RlZE5vZGUoKTogVGh5VHJlZU5vZGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwgPyB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXSA6IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0U2VsZWN0ZWROb2RlcygpOiBUaHlUcmVlTm9kZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGVsID8gdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQgOiBbXTtcbiAgICB9XG5cbiAgICBnZXRFeHBhbmRlZE5vZGVzKCk6IFRoeVRyZWVOb2RlW10ge1xuICAgICAgICByZXR1cm4gdGhpcy50aHlUcmVlU2VydmljZS5nZXRFeHBhbmRlZE5vZGVzKCk7XG4gICAgfVxuXG4gICAgZ2V0Q2hlY2tlZE5vZGVzKCk6IFRoeVRyZWVOb2RlW10ge1xuICAgICAgICByZXR1cm4gdGhpcy50aHlUcmVlU2VydmljZS5nZXRDaGVja2VkTm9kZXMoKTtcbiAgICB9XG5cbiAgICBhZGRUcmVlTm9kZShub2RlOiBUaHlUcmVlTm9kZURhdGEsIHBhcmVudD86IFRoeVRyZWVOb2RlLCBpbmRleCA9IC0xKSB7XG4gICAgICAgIHRoaXMudGh5VHJlZVNlcnZpY2UuYWRkVHJlZU5vZGUobmV3IFRoeVRyZWVOb2RlKG5vZGUsIG51bGwsIHRoaXMudGh5VHJlZVNlcnZpY2UpLCBwYXJlbnQsIGluZGV4KTtcbiAgICAgICAgdGhpcy50aHlUcmVlU2VydmljZS5zeW5jRmxhdHRlblRyZWVOb2RlcygpO1xuICAgIH1cblxuICAgIGRlbGV0ZVRyZWVOb2RlKG5vZGU6IFRoeVRyZWVOb2RlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQobm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnRvZ2dsZShub2RlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLmRlbGV0ZVRyZWVOb2RlKG5vZGUpO1xuICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLnN5bmNGbGF0dGVuVHJlZU5vZGVzKCk7XG4gICAgfVxuXG4gICAgZXhwYW5kQWxsTm9kZXMoKSB7XG4gICAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy5nZXRSb290Tm9kZXMoKTtcbiAgICAgICAgbm9kZXMuZm9yRWFjaChuID0+IG4uc2V0RXhwYW5kZWQodHJ1ZSwgdHJ1ZSkpO1xuICAgIH1cblxuICAgIGNvbGxhcHNlZEFsbE5vZGVzKCkge1xuICAgICAgICBjb25zdCBub2RlcyA9IHRoaXMuZ2V0Um9vdE5vZGVzKCk7XG4gICAgICAgIG5vZGVzLmZvckVhY2gobiA9PiBuLnNldEV4cGFuZGVkKGZhbHNlLCB0cnVlKSk7XG4gICAgfVxuXG4gICAgLy8gZW5kcmVnaW9uXG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG59XG4iLCJAaWYgKHRoeVZpcnR1YWxTY3JvbGwpIHtcbiAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydFxuICAgICN2aWV3cG9ydFxuICAgIFtpdGVtU2l6ZV09XCJ0aHlJdGVtU2l6ZVwiXG4gICAgW3N0eWxlLmhlaWdodF09XCInMTAwJSdcIlxuICAgIGNka0Ryb3BMaXN0XG4gICAgW2Nka0Ryb3BMaXN0QXV0b1Njcm9sbFN0ZXBdPVwiNlwiXG4gICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJmbGF0dGVuVHJlZU5vZGVzXCJcbiAgICBbY2RrRHJvcExpc3RTb3J0aW5nRGlzYWJsZWRdPVwidHJ1ZVwiXG4gICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJvbkxpc3REcm9wcGVkKCRldmVudClcIlxuICAgID5cbiAgICA8ZGl2IGNsYXNzPVwidmlydHVhbC10cmVlcy1jb250YWluZXJcIj5cbiAgICAgIDx0aHktdHJlZS1ub2RlXG4gICAgICAgICpjZGtWaXJ0dWFsRm9yPVwibGV0IG5vZGUgb2YgZmxhdHRlblRyZWVOb2RlczsgdHJhY2tCeTogdHJhY2tCeUZuOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgY2RrRHJhZ1xuICAgICAgICBbY2RrRHJhZ0RhdGFdPVwibm9kZVwiXG4gICAgICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwiIXRoeURyYWdnYWJsZSB8fCAhKG5vZGUgfCB0cmVlTm9kZURyYWdnYWJsZSA6IHRoeUJlZm9yZURyYWdTdGFydClcIlxuICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwib25EcmFnU3RhcnRlZCgkZXZlbnQpXCJcbiAgICAgICAgKGNka0RyYWdFbmRlZCk9XCJvbkRyYWdFbmRlZCgkZXZlbnQpXCJcbiAgICAgICAgKGNka0RyYWdNb3ZlZCk9XCJlbWl0RHJhZ01vdmVkKCRldmVudClcIlxuICAgICAgICBbbm9kZV09XCJub2RlXCJcbiAgICAgICAgW3RlbXBsYXRlUmVmXT1cInRlbXBsYXRlUmVmXCJcbiAgICAgICAgW2VtcHR5Q2hpbGRyZW5UZW1wbGF0ZVJlZl09XCJlbXB0eUNoaWxkcmVuVGVtcGxhdGVcIlxuICAgICAgICBbdGh5QXN5bmNdPVwidGh5QXN5bmNcIlxuICAgICAgICBbdGh5RHJhZ2dhYmxlXT1cInRoeURyYWdnYWJsZVwiXG4gICAgICAgIFt0aHlDaGVja2FibGVdPVwidGh5Q2hlY2thYmxlXCJcbiAgICAgICAgW3RoeU11bHRpcGxlXT1cInRoeU11bHRpcGxlXCJcbiAgICAgICAgW3RoeUNsaWNrQmVoYXZpb3JdPVwidGh5Q2xpY2tCZWhhdmlvclwiXG4gICAgICAgIFt0aHlUaXRsZVRydW5jYXRlXT1cInRoeVRpdGxlVHJ1bmNhdGVcIlxuICAgICAgICBbdGh5SXRlbVNpemVdPVwidGh5SXRlbVNpemVcIlxuICAgICAgICBbdGh5SW5kZW50XT1cInRoeUluZGVudFwiXG4gICAgICAgICh0aHlPbkNsaWNrKT1cInRoeU9uQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKHRoeURibENsaWNrKT1cInRoeURibENsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICh0aHlPbkV4cGFuZENoYW5nZSk9XCJldmVudFRyaWdnZXJDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAodGh5T25DaGVja2JveENoYW5nZSk9XCJldmVudFRyaWdnZXJDaGFuZ2VkKCRldmVudClcIj5cbiAgICAgIDwvdGh5LXRyZWUtbm9kZT5cbiAgICA8L2Rpdj5cbiAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG59XG5cbkBpZiAoIXRoeVZpcnR1YWxTY3JvbGwpIHtcbiAgPGRpdlxuICAgIGNka0Ryb3BMaXN0XG4gICAgW2Nka0Ryb3BMaXN0QXV0b1Njcm9sbFN0ZXBdPVwiNlwiXG4gICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJmbGF0dGVuVHJlZU5vZGVzXCJcbiAgICBbY2RrRHJvcExpc3RTb3J0aW5nRGlzYWJsZWRdPVwidHJ1ZVwiXG4gICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJvbkxpc3REcm9wcGVkKCRldmVudClcIj5cbiAgICBAZm9yIChub2RlIG9mIGZsYXR0ZW5UcmVlTm9kZXM7IHRyYWNrIHRyYWNrQnlGbihpLCBub2RlKTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgIDx0aHktdHJlZS1ub2RlXG4gICAgICAgIGNka0RyYWdcbiAgICAgICAgW2Nka0RyYWdEYXRhXT1cIm5vZGVcIlxuICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cIiF0aHlEcmFnZ2FibGUgfHwgIShub2RlIHwgdHJlZU5vZGVEcmFnZ2FibGUgOiB0aHlCZWZvcmVEcmFnU3RhcnQpXCJcbiAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cIm9uRHJhZ1N0YXJ0ZWQoJGV2ZW50KVwiXG4gICAgICAgIChjZGtEcmFnRW5kZWQpPVwib25EcmFnRW5kZWQoJGV2ZW50KVwiXG4gICAgICAgIChjZGtEcmFnTW92ZWQpPVwiZW1pdERyYWdNb3ZlZCgkZXZlbnQpXCJcbiAgICAgICAgW25vZGVdPVwibm9kZVwiXG4gICAgICAgIFt0ZW1wbGF0ZVJlZl09XCJ0ZW1wbGF0ZVJlZlwiXG4gICAgICAgIFtlbXB0eUNoaWxkcmVuVGVtcGxhdGVSZWZdPVwiZW1wdHlDaGlsZHJlblRlbXBsYXRlXCJcbiAgICAgICAgW3RoeUFzeW5jXT1cInRoeUFzeW5jXCJcbiAgICAgICAgW3RoeURyYWdnYWJsZV09XCJ0aHlEcmFnZ2FibGVcIlxuICAgICAgICBbdGh5Q2hlY2thYmxlXT1cInRoeUNoZWNrYWJsZVwiXG4gICAgICAgIFt0aHlNdWx0aXBsZV09XCJ0aHlNdWx0aXBsZVwiXG4gICAgICAgIFt0aHlUaXRsZVRydW5jYXRlXT1cInRoeVRpdGxlVHJ1bmNhdGVcIlxuICAgICAgICBbdGh5SXRlbVNpemVdPVwidGh5SXRlbVNpemVcIlxuICAgICAgICBbdGh5Q2xpY2tCZWhhdmlvcl09XCJ0aHlDbGlja0JlaGF2aW9yXCJcbiAgICAgICAgW3RoeUluZGVudF09XCJ0aHlJbmRlbnRcIlxuICAgICAgICAodGh5T25DbGljayk9XCJ0aHlPbkNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICh0aHlEYmxDbGljayk9XCJ0aHlEYmxDbGljay5lbWl0KCRldmVudClcIlxuICAgICAgICAodGh5T25FeHBhbmRDaGFuZ2UpPVwiZXZlbnRUcmlnZ2VyQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgKHRoeU9uQ2hlY2tib3hDaGFuZ2UpPVwidGh5T25DaGVja2JveENoYW5nZS5lbWl0KCRldmVudClcIj5cbiAgICAgIDwvdGh5LXRyZWUtbm9kZT5cbiAgICB9XG4gIDwvZGl2PlxufVxuIl19