@tetacom/ng-components 1.1.9 → 1.1.11

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 (253) hide show
  1. package/.eslintrc.json +37 -0
  2. package/common/service/dynamic-component.service.d.ts +4 -4
  3. package/common/service/overlay-container.service.d.ts +2 -2
  4. package/common/util/array-util.d.ts +2 -2
  5. package/common/util/dom-util.d.ts +1 -1
  6. package/component/accordion/accordion/accordion.component.d.ts +1 -4
  7. package/component/accordion/accordion-item/accordion-item.component.d.ts +5 -6
  8. package/component/date-picker/base-calendar.d.ts +7 -7
  9. package/component/date-picker/base-picker.d.ts +3 -3
  10. package/component/date-picker/date-picker/date-calendar/date-calendar.component.d.ts +3 -3
  11. package/component/date-picker/date-range/date-range.component.d.ts +5 -5
  12. package/component/date-picker/date-range/range-calendar/range-calendar.component.d.ts +3 -3
  13. package/component/dropdown/dropdown-base.d.ts +2 -2
  14. package/component/file-upload/file-upload-area/file-upload-area.component.d.ts +8 -10
  15. package/component/filter/contarct/filter-item.d.ts +17 -16
  16. package/component/input/input/input.component.d.ts +5 -8
  17. package/component/property-grid/property-grid/property-grid.component.d.ts +3 -3
  18. package/component/select/select/select.component.d.ts +8 -9
  19. package/component/table/base/cell-component-base.d.ts +23 -13
  20. package/component/table/cell/cell.component.d.ts +5 -11
  21. package/component/table/cell-host/cell-host.component.d.ts +6 -6
  22. package/component/table/contract/i-cell-instance.d.ts +2 -1
  23. package/component/table/contract/public-api.d.ts +1 -0
  24. package/component/table/contract/table-column.d.ts +48 -39
  25. package/component/table/contract/table-row.d.ts +8 -0
  26. package/component/table/default/boolean-cell/boolean-cell.component.d.ts +1 -2
  27. package/component/table/default/date-cell/date-cell.component.d.ts +2 -3
  28. package/component/table/default/date-time-cell/date-time-cell.component.d.ts +2 -3
  29. package/component/table/default/list-cell/list-cell.component.d.ts +5 -7
  30. package/component/table/default/numeric-cell/numeric-cell.component.d.ts +1 -3
  31. package/component/table/default/string-cell/string-cell.component.d.ts +2 -3
  32. package/component/table/service/table.service.d.ts +32 -31
  33. package/component/table/table/table.component.d.ts +11 -10
  34. package/component/table/table-body/table-body.component.d.ts +13 -11
  35. package/component/table/table-head/table-head.component.d.ts +2 -2
  36. package/component/table/table.module.d.ts +1 -1
  37. package/directive/context-menu/context-menu.directive.d.ts +4 -5
  38. package/directive/drag-drop/drag.directive.d.ts +4 -4
  39. package/directive/drag-sort/drag-sort-container.directive.d.ts +2 -3
  40. package/directive/dynamic-content-base.directive.d.ts +8 -9
  41. package/directive/hint/hint.directive.d.ts +5 -5
  42. package/directive/tooltip/tooltip.directive.d.ts +3 -3
  43. package/esm2022/common/service/click.service.mjs +3 -3
  44. package/esm2022/common/service/dynamic-component.service.mjs +6 -6
  45. package/esm2022/common/service/overlay-container.service.mjs +6 -6
  46. package/esm2022/common/util/array-util.mjs +6 -5
  47. package/esm2022/common/util/dom-util.mjs +4 -3
  48. package/esm2022/common/util/position-util.mjs +10 -5
  49. package/esm2022/component/accordion/accordion/accordion.component.mjs +6 -10
  50. package/esm2022/component/accordion/accordion-content.directive.mjs +3 -3
  51. package/esm2022/component/accordion/accordion-head/accordion-head.component.mjs +3 -3
  52. package/esm2022/component/accordion/accordion-item/accordion-item.component.mjs +7 -9
  53. package/esm2022/component/accordion/accordion.module.mjs +4 -4
  54. package/esm2022/component/autocomplete/autocomplete/autocomplete.component.mjs +3 -3
  55. package/esm2022/component/autocomplete/autocomplete.module.mjs +4 -4
  56. package/esm2022/component/avatar/avatar/avatar.component.mjs +3 -3
  57. package/esm2022/component/avatar/avatar.module.mjs +4 -4
  58. package/esm2022/component/button/button/button.component.mjs +3 -3
  59. package/esm2022/component/button/button.module.mjs +4 -4
  60. package/esm2022/component/chart-3d/chart-3d.module.mjs +4 -4
  61. package/esm2022/component/chart-3d/chart3d/chart3d.component.mjs +3 -3
  62. package/esm2022/component/checkbox/checkbox/checkbox.component.mjs +5 -5
  63. package/esm2022/component/checkbox/checkbox.module.mjs +4 -4
  64. package/esm2022/component/date-picker/base-calendar.mjs +55 -21
  65. package/esm2022/component/date-picker/base-picker.mjs +4 -4
  66. package/esm2022/component/date-picker/date-picker/date-calendar/date-calendar.component.mjs +11 -9
  67. package/esm2022/component/date-picker/date-picker/date-picker.component.mjs +5 -5
  68. package/esm2022/component/date-picker/date-picker.module.mjs +4 -4
  69. package/esm2022/component/date-picker/date-range/date-range.component.mjs +11 -11
  70. package/esm2022/component/date-picker/date-range/range-calendar/range-calendar.component.mjs +14 -12
  71. package/esm2022/component/date-picker/day-picker/day-item/day-item.component.mjs +3 -3
  72. package/esm2022/component/date-picker/day-picker/day-picker.component.mjs +3 -3
  73. package/esm2022/component/date-picker/month-picker/month-picker.component.mjs +3 -3
  74. package/esm2022/component/date-picker/year-picker/scroll-to-selected-year.directive.mjs +3 -3
  75. package/esm2022/component/date-picker/year-picker/year-picker.component.mjs +3 -3
  76. package/esm2022/component/delimiter/delimiter/delimiter.component.mjs +3 -3
  77. package/esm2022/component/delimiter/delimiter.module.mjs +4 -4
  78. package/esm2022/component/divider/divider/divider.component.mjs +3 -3
  79. package/esm2022/component/divider/divider.module.mjs +4 -4
  80. package/esm2022/component/dropdown/dropdown/dropdown.component.mjs +3 -3
  81. package/esm2022/component/dropdown/dropdown-base.mjs +20 -16
  82. package/esm2022/component/dropdown/dropdown-content.directive.mjs +3 -3
  83. package/esm2022/component/dropdown/dropdown-head.directive.mjs +3 -3
  84. package/esm2022/component/dropdown/dropdown.directive.mjs +3 -3
  85. package/esm2022/component/dropdown/dropdown.module.mjs +4 -4
  86. package/esm2022/component/dynamic-component/dynamic-component.module.mjs +4 -4
  87. package/esm2022/component/dynamic-component/popup-content/popup-content.component.mjs +3 -3
  88. package/esm2022/component/expand-card/expand-card/expand-card.component.mjs +3 -3
  89. package/esm2022/component/expand-card/expand-card.module.mjs +4 -4
  90. package/esm2022/component/expand-card/expand-item/expand-item.component.mjs +3 -3
  91. package/esm2022/component/expand-panel/expand-panel/expand-panel.component.mjs +3 -3
  92. package/esm2022/component/expand-panel/expand-panel-content.directive.mjs +3 -3
  93. package/esm2022/component/expand-panel/expand-panel-head.directive.mjs +3 -3
  94. package/esm2022/component/expand-panel/expand-panel.module.mjs +4 -4
  95. package/esm2022/component/file-upload/file-item/file-item.component.mjs +3 -3
  96. package/esm2022/component/file-upload/file-upload-area/file-upload-area.component.mjs +12 -12
  97. package/esm2022/component/file-upload/file-upload.module.mjs +4 -4
  98. package/esm2022/component/filter/boolean-filter/boolean-filter.component.mjs +3 -3
  99. package/esm2022/component/filter/contarct/filter-item.mjs +1 -1
  100. package/esm2022/component/filter/date-filter/date-filter.component.mjs +3 -3
  101. package/esm2022/component/filter/filter-host/filter-host.component.mjs +3 -3
  102. package/esm2022/component/filter/filter.module.mjs +4 -4
  103. package/esm2022/component/filter/list-filter/list-filter.component.mjs +3 -3
  104. package/esm2022/component/filter/numeric-filter/numeric-filter.component.mjs +3 -3
  105. package/esm2022/component/filter/string-filter/string-filter.component.mjs +3 -3
  106. package/esm2022/component/icon/icon/icon.component.mjs +3 -3
  107. package/esm2022/component/icon/icon-file/icon-file.component.mjs +3 -3
  108. package/esm2022/component/icon/icon-file/icon-file.module.mjs +4 -4
  109. package/esm2022/component/icon/icon-sprite.directive.mjs +3 -3
  110. package/esm2022/component/icon/icon.module.mjs +4 -4
  111. package/esm2022/component/icon/icon.service.mjs +3 -3
  112. package/esm2022/component/input/color-input/color-input.component.mjs +7 -9
  113. package/esm2022/component/input/form-group-title/form-group-title.component.mjs +3 -3
  114. package/esm2022/component/input/input/input.component.mjs +7 -9
  115. package/esm2022/component/input/input.module.mjs +4 -4
  116. package/esm2022/component/input/text-field/text-field.component.mjs +3 -3
  117. package/esm2022/component/message/message/message.component.mjs +3 -3
  118. package/esm2022/component/message/message-host/message-host.component.mjs +3 -3
  119. package/esm2022/component/message/message.module.mjs +4 -4
  120. package/esm2022/component/message/message.service.mjs +3 -3
  121. package/esm2022/component/modal/dialog/dialog.component.mjs +3 -3
  122. package/esm2022/component/modal/dialog.service.mjs +3 -3
  123. package/esm2022/component/modal/modal-container/modal-container.component.mjs +3 -3
  124. package/esm2022/component/modal/modal.module.mjs +4 -4
  125. package/esm2022/component/modal/modal.service.mjs +3 -3
  126. package/esm2022/component/pager/pager/pager.component.mjs +3 -3
  127. package/esm2022/component/pager/pager.module.mjs +4 -4
  128. package/esm2022/component/panel/panel/panel.component.mjs +3 -3
  129. package/esm2022/component/panel/panel.module.mjs +4 -4
  130. package/esm2022/component/progress-bar/progress-bar/progress-bar.component.mjs +3 -3
  131. package/esm2022/component/progress-bar/progress-bar.module.mjs +4 -4
  132. package/esm2022/component/property-grid/property-grid/property-grid-group/property-grid-group.component.mjs +3 -3
  133. package/esm2022/component/property-grid/property-grid/property-grid-item/property-grid-item.component.mjs +4 -20
  134. package/esm2022/component/property-grid/property-grid/property-grid-item-description.directive.mjs +3 -3
  135. package/esm2022/component/property-grid/property-grid/property-grid.component.mjs +12 -15
  136. package/esm2022/component/property-grid/property-grid.module.mjs +4 -4
  137. package/esm2022/component/radio/radio/radio.component.mjs +3 -3
  138. package/esm2022/component/radio/radio-button/radio-button.component.mjs +3 -3
  139. package/esm2022/component/radio/radio.module.mjs +4 -4
  140. package/esm2022/component/resize-panel/resize-panel/resize-panel.component.mjs +3 -3
  141. package/esm2022/component/resize-panel/resize-panel.module.mjs +4 -4
  142. package/esm2022/component/select/select/select.component.mjs +18 -20
  143. package/esm2022/component/select/select-option.directive.mjs +3 -3
  144. package/esm2022/component/select/select-value.directive.mjs +3 -3
  145. package/esm2022/component/select/select.module.mjs +4 -4
  146. package/esm2022/component/sidebar/sidebar/sidebar.component.mjs +3 -3
  147. package/esm2022/component/sidebar/sidebar.module.mjs +4 -4
  148. package/esm2022/component/switch/switch/switch.component.mjs +3 -3
  149. package/esm2022/component/switch/switch-button/switch-button.component.mjs +3 -3
  150. package/esm2022/component/switch/switch.module.mjs +4 -4
  151. package/esm2022/component/switch/switch.service.mjs +3 -3
  152. package/esm2022/component/table/base/cell-component-base.mjs +97 -40
  153. package/esm2022/component/table/base/head-cell-component-base.mjs +3 -3
  154. package/esm2022/component/table/cell/cell.component.mjs +6 -16
  155. package/esm2022/component/table/cell-host/cell-host.component.mjs +11 -11
  156. package/esm2022/component/table/contract/i-cell-coordinates.mjs +1 -1
  157. package/esm2022/component/table/contract/i-cell-event.mjs +1 -1
  158. package/esm2022/component/table/contract/i-cell-instance.mjs +1 -1
  159. package/esm2022/component/table/contract/i-cell-value.mjs +1 -1
  160. package/esm2022/component/table/contract/public-api.mjs +2 -1
  161. package/esm2022/component/table/contract/table-column.mjs +8 -5
  162. package/esm2022/component/table/contract/table-row.mjs +9 -0
  163. package/esm2022/component/table/default/boolean-cell/boolean-cell.component.mjs +8 -8
  164. package/esm2022/component/table/default/date-cell/date-cell.component.mjs +10 -10
  165. package/esm2022/component/table/default/date-time-cell/date-time-cell.component.mjs +5 -9
  166. package/esm2022/component/table/default/default-head-cell/default-head-cell.component.mjs +3 -3
  167. package/esm2022/component/table/default/list-cell/list-cell.component.mjs +9 -16
  168. package/esm2022/component/table/default/numeric-cell/numeric-cell.component.mjs +6 -18
  169. package/esm2022/component/table/default/string-cell/string-cell.component.mjs +6 -17
  170. package/esm2022/component/table/head-cell/head-cell.component.mjs +3 -3
  171. package/esm2022/component/table/head-cell-dropdown/head-cell-dropdown.component.mjs +3 -3
  172. package/esm2022/component/table/head-cell-host/head-cell-host.component.mjs +3 -3
  173. package/esm2022/component/table/selection-cell/selection-cell.component.mjs +3 -3
  174. package/esm2022/component/table/selection-head-cell/selection-head-cell.component.mjs +3 -3
  175. package/esm2022/component/table/service/table.service.mjs +106 -77
  176. package/esm2022/component/table/table/table.component.mjs +48 -44
  177. package/esm2022/component/table/table-body/table-body.component.mjs +36 -44
  178. package/esm2022/component/table/table-head/filter-dropdown-tab/filter-dropdown-tab.component.mjs +3 -3
  179. package/esm2022/component/table/table-head/main-dropdown-tab/main-dropdown-tab.component.mjs +3 -3
  180. package/esm2022/component/table/table-head/table-head.component.mjs +13 -14
  181. package/esm2022/component/table/table-head/visibility-dropdown-tab/visibility-dropdown-tab.component.mjs +3 -3
  182. package/esm2022/component/table/table-head-group/table-head-group.component.mjs +3 -3
  183. package/esm2022/component/table/table.module.mjs +11 -8
  184. package/esm2022/component/tabs/tab/tab.component.mjs +3 -3
  185. package/esm2022/component/tabs/tab-content.directive.mjs +3 -3
  186. package/esm2022/component/tabs/tab-title.directive.mjs +3 -3
  187. package/esm2022/component/tabs/tabs/tabs.component.mjs +3 -3
  188. package/esm2022/component/tabs/tabs.module.mjs +4 -4
  189. package/esm2022/component/theme-switch/theme-switch/theme-switch.component.mjs +3 -3
  190. package/esm2022/component/theme-switch/theme-switch.module.mjs +4 -4
  191. package/esm2022/component/theme-switch/theme-switch.service.mjs +3 -3
  192. package/esm2022/component/toggle/toggle/toggle.component.mjs +3 -3
  193. package/esm2022/component/toggle/toggle.module.mjs +4 -4
  194. package/esm2022/component/toolbar/toolbar/toolbar.component.mjs +3 -3
  195. package/esm2022/component/toolbar/toolbar.module.mjs +4 -4
  196. package/esm2022/component/tree/tree/tree.component.mjs +3 -3
  197. package/esm2022/component/tree/tree-item/tree-item.component.mjs +3 -3
  198. package/esm2022/component/tree/tree-item-toggle/tree-item-toggle.component.mjs +3 -3
  199. package/esm2022/component/tree/tree.module.mjs +4 -4
  200. package/esm2022/component/tree/tree.service.mjs +3 -3
  201. package/esm2022/directive/auto-position/auto-position.directive.mjs +3 -3
  202. package/esm2022/directive/auto-position/auto-position.module.mjs +4 -4
  203. package/esm2022/directive/click-outside/click-outside.directive.mjs +3 -3
  204. package/esm2022/directive/click-outside/click-outside.module.mjs +4 -4
  205. package/esm2022/directive/context-menu/context-menu.directive.mjs +10 -10
  206. package/esm2022/directive/context-menu/context-menu.module.mjs +4 -4
  207. package/esm2022/directive/disable-control/disable-control.directive.mjs +3 -3
  208. package/esm2022/directive/disable-control/disable-control.module.mjs +4 -4
  209. package/esm2022/directive/drag-drop/drag-container.directive.mjs +3 -3
  210. package/esm2022/directive/drag-drop/drag-drop.module.mjs +4 -4
  211. package/esm2022/directive/drag-drop/drag-drop.service.mjs +3 -3
  212. package/esm2022/directive/drag-drop/drag-placeholder.directive.mjs +3 -3
  213. package/esm2022/directive/drag-drop/drag-preview.directive.mjs +3 -3
  214. package/esm2022/directive/drag-drop/drag.directive.mjs +20 -16
  215. package/esm2022/directive/drag-sort/drag-sort-container.directive.mjs +6 -10
  216. package/esm2022/directive/drag-sort/drag-sort-item.directive.mjs +4 -4
  217. package/esm2022/directive/drag-sort/drag-sort.module.mjs +4 -4
  218. package/esm2022/directive/dynamic-content-base.directive.mjs +8 -10
  219. package/esm2022/directive/highlight/highlight.directive.mjs +3 -3
  220. package/esm2022/directive/highlight/highlight.module.mjs +4 -4
  221. package/esm2022/directive/hint/hint.directive.mjs +13 -10
  222. package/esm2022/directive/hint/hint.module.mjs +4 -4
  223. package/esm2022/directive/let/let.directive.mjs +3 -3
  224. package/esm2022/directive/let/let.module.mjs +4 -4
  225. package/esm2022/directive/loader/loader.directive.mjs +8 -10
  226. package/esm2022/directive/loader/loader.module.mjs +4 -4
  227. package/esm2022/directive/no-autofill/no-autofill.directive.mjs +3 -3
  228. package/esm2022/directive/no-autofill/no-autofill.module.mjs +4 -4
  229. package/esm2022/directive/only-number/only-number.directive.mjs +4 -8
  230. package/esm2022/directive/only-number/only-number.module.mjs +4 -4
  231. package/esm2022/directive/resize-drag/resize-drag.directive.mjs +3 -3
  232. package/esm2022/directive/resize-drag/resize-drag.module.mjs +4 -4
  233. package/esm2022/directive/scroll-into-view/scroll-into-view.directive.mjs +3 -3
  234. package/esm2022/directive/scroll-into-view/scroll-into-view.module.mjs +4 -4
  235. package/esm2022/directive/scrollable/scrollable/scrollable.component.mjs +3 -3
  236. package/esm2022/directive/scrollable/scrollable.directive.mjs +3 -3
  237. package/esm2022/directive/scrollable/scrollable.module.mjs +4 -4
  238. package/esm2022/directive/teta-template/teta-template.directive.mjs +3 -3
  239. package/esm2022/directive/teta-template/teta-template.module.mjs +4 -4
  240. package/esm2022/directive/tooltip/tooltip.directive.mjs +12 -13
  241. package/esm2022/directive/tooltip/tooltip.module.mjs +4 -4
  242. package/esm2022/locale/teta-config.service.mjs +3 -3
  243. package/esm2022/pipe/date-pipe/teta-date-pipe.module.mjs +4 -4
  244. package/esm2022/pipe/date-pipe/teta-date.pipe.mjs +3 -3
  245. package/esm2022/pipe/number-pipe/number-pipe.module.mjs +4 -4
  246. package/esm2022/pipe/number-pipe/number.pipe.mjs +3 -3
  247. package/esm2022/util/forms-util.mjs +11 -5
  248. package/fesm2022/tetacom-ng-components.mjs +1495 -1430
  249. package/fesm2022/tetacom-ng-components.mjs.map +1 -1
  250. package/package.json +6 -6
  251. package/style/dropdown.scss +3 -3
  252. package/style/table.scss +4 -0
  253. package/util/forms-util.d.ts +1 -1
@@ -1,24 +1,25 @@
1
1
  import { Injectable } from '@angular/core';
2
- import { TableColumn } from '../contract/table-column';
3
- import { FilterState } from '../../filter/contarct/filter-state';
2
+ import objectHash from 'object-hash';
4
3
  import { BehaviorSubject, Subject } from 'rxjs';
5
- import { ColumnReorderEvent } from '../contract/column-reorder-event';
6
4
  import { ArrayUtil } from '../../../common/util/array-util';
7
- import { StateUtil } from '../util/state-util';
8
- import { SelectType } from '../enum/select-type.enum';
9
- import { EditType } from '../enum/edit-type.enum';
10
- import { EditEvent } from '../enum/edit-event.enum';
11
- import { ListFilterType } from '../../filter/enum/list-filter-type.enum';
5
+ import { DateUtil } from '../../../util/date-util';
6
+ import { DateFilter } from '../../filter/contarct/date-filter';
7
+ import { DateFilterValue } from '../../filter/contarct/date-filter-value';
8
+ import { FilterState } from '../../filter/contarct/filter-state';
12
9
  import { ListFilter } from '../../filter/contarct/list-filter';
13
- import { FilterType } from '../../filter/enum/filter-type.enum';
14
- import { NumericFilterValue } from '../../filter/contarct/numeric-filter-value';
15
10
  import { NumericFilter } from '../../filter/contarct/numeric-filter';
11
+ import { NumericFilterValue } from '../../filter/contarct/numeric-filter-value';
16
12
  import { StringFilter } from '../../filter/contarct/string-filter';
17
- import { DateFilterValue } from '../../filter/contarct/date-filter-value';
18
- import { DateFilter } from '../../filter/contarct/date-filter';
19
- import { DateUtil } from '../../../util/date-util';
20
- import objectHash from 'object-hash';
13
+ import { FilterType } from '../../filter/enum/filter-type.enum';
14
+ import { ListFilterType } from '../../filter/enum/list-filter-type.enum';
15
+ import { ColumnReorderEvent } from '../contract/column-reorder-event';
16
+ import { TableColumn } from '../contract/table-column';
21
17
  import { TableColumnStore } from '../contract/table-column-store';
18
+ import { TableRow } from '../contract/table-row';
19
+ import { EditEvent } from '../enum/edit-event.enum';
20
+ import { EditType } from '../enum/edit-type.enum';
21
+ import { SelectType } from '../enum/select-type.enum';
22
+ import { StateUtil } from '../util/state-util';
22
23
  import * as i0 from "@angular/core";
23
24
  export class TableService {
24
25
  columns;
@@ -43,15 +44,16 @@ export class TableService {
43
44
  editEvent = EditEvent.doubleClick;
44
45
  rowEditable;
45
46
  trackRow = (index, row) => {
46
- if (row['id']) {
47
- return row['id'];
47
+ const rowId = row['id'];
48
+ if (rowId) {
49
+ return rowId;
48
50
  }
49
51
  return index;
50
52
  };
51
53
  get dragSource() {
52
54
  return this._dragSource;
53
55
  }
54
- initialColumnsHash;
56
+ initialColumnsHash = '';
55
57
  initialColumns = [];
56
58
  displayColumns = [];
57
59
  _columns = new BehaviorSubject([]);
@@ -99,7 +101,9 @@ export class TableService {
99
101
  this.scrollIndex = this._scrollIndex.asObservable();
100
102
  }
101
103
  setData(data) {
102
- this._displayData.next(data ? [...data] : []);
104
+ this._displayData.next(data?.map(item => new TableRow({
105
+ data: item,
106
+ })) ?? []);
103
107
  }
104
108
  setDict(dict) {
105
109
  this._dict.next(dict);
@@ -108,12 +112,12 @@ export class TableService {
108
112
  this._filterOptions.next(filterOptions);
109
113
  }
110
114
  setColumns(columns) {
111
- this.initialColumns = columns ? columns.map((_) => new TableColumn(_)) : [];
115
+ this.initialColumns = columns ? columns.map(_ => new TableColumn(_)) : [];
112
116
  const excludeKeys = [
113
117
  'editable',
114
118
  'cellComponent',
115
119
  'headCellComponent',
116
- 'headDropdownConfig'
120
+ 'headDropdownConfig',
117
121
  ];
118
122
  this.initialColumnsHash = objectHash(this.initialColumns, {
119
123
  algorithm: 'sha1',
@@ -139,30 +143,34 @@ export class TableService {
139
143
  this.saveColumnsState();
140
144
  }
141
145
  saveColumnsState() {
142
- if (this._cookieName) {
146
+ if (this._columnsCookieName) {
143
147
  localStorage.setItem(this._columnsCookieName, JSON.stringify({
144
148
  hash: this.initialColumnsHash,
145
- columns: this.displayColumns.map((_) => new TableColumnStore(_)),
149
+ columns: this.displayColumns.map(_ => new TableColumnStore(_)),
146
150
  }));
147
151
  }
148
152
  }
149
153
  clearColumnsState() {
150
- localStorage.removeItem(this._columnsCookieName);
154
+ if (this._columnsCookieName) {
155
+ localStorage.removeItem(this._columnsCookieName);
156
+ }
151
157
  }
152
158
  setDisplayColumns(columns) {
153
- this.displayColumns = columns ? columns.map((_) => new TableColumn(_)) : [];
159
+ this.displayColumns = columns ? columns.map(_ => new TableColumn(_)) : [];
154
160
  this._columns.next(this.displayColumns);
155
161
  }
156
162
  restoreColumns() {
157
- const savedColumns = JSON.parse(localStorage.getItem(this._columnsCookieName));
158
- if (savedColumns && savedColumns.hash === this.initialColumnsHash) {
159
- return this.restoreColumnsState(savedColumns.columns);
163
+ if (this._columnsCookieName) {
164
+ const savedColumns = JSON.parse(localStorage.getItem(this._columnsCookieName));
165
+ if (savedColumns && savedColumns.hash === this.initialColumnsHash) {
166
+ return this.restoreColumnsState(savedColumns.columns);
167
+ }
160
168
  }
161
169
  return null;
162
170
  }
163
171
  restoreColumnsState(columns) {
164
172
  return columns.map((column) => {
165
- const found = ArrayUtil.findRecursive(this.initialColumns, (item) => item.name === column.name, 'columns');
173
+ const found = ArrayUtil.findRecursive(this.initialColumns, item => item.name === column.name, 'columns');
166
174
  const resultColumn = new TableColumn(found);
167
175
  resultColumn.width = column.width;
168
176
  resultColumn.flex = column.flex;
@@ -174,7 +182,9 @@ export class TableService {
174
182
  });
175
183
  }
176
184
  setState(state) {
177
- state.save(this._cookieName);
185
+ if (this._cookieName) {
186
+ state.save(this._cookieName);
187
+ }
178
188
  this._state.next(state);
179
189
  }
180
190
  setCookieName(name) {
@@ -184,7 +194,9 @@ export class TableService {
184
194
  }
185
195
  restoreState() {
186
196
  let state;
187
- if (this._cookieName?.length > 0 && FilterState.restore(this._cookieName)) {
197
+ if (this._cookieName &&
198
+ this._cookieName?.length > 0 &&
199
+ FilterState.restore(this._cookieName)) {
188
200
  let newState = Object.assign(this._state.value, FilterState.restore(this._cookieName));
189
201
  newState = DateUtil.convertDateStringsToDates(newState);
190
202
  state = new FilterState(newState);
@@ -195,10 +207,12 @@ export class TableService {
195
207
  this.setState(state);
196
208
  }
197
209
  saveHiddenColumns(hiddenColumns) {
198
- localStorage.setItem(this._hiddenCookieName, JSON.stringify(hiddenColumns));
210
+ if (this._hiddenCookieName) {
211
+ localStorage.setItem(this._hiddenCookieName, JSON.stringify(hiddenColumns));
212
+ }
199
213
  }
200
214
  restoreHiddenColumns() {
201
- const hiddenColumns = localStorage.getItem(this._hiddenCookieName) || '[]';
215
+ const hiddenColumns = localStorage.getItem(this._hiddenCookieName ?? '') || '[]';
202
216
  this._hiddenColumns.next(JSON.parse(hiddenColumns));
203
217
  }
204
218
  sortAsc(sortEvent) {
@@ -276,11 +290,11 @@ export class TableService {
276
290
  lockPreviousColumns(column, element) {
277
291
  const flat = ArrayUtil.flatten(this.displayColumns, 'columns', true).sort((a, b) => Number(b.locked) - Number(a.locked));
278
292
  const index = flat.indexOf(column);
279
- const previous = flat.slice(0, index).filter((_) => _.flex > 0);
293
+ const previous = flat.slice(0, index).filter(_ => _.flex > 0);
280
294
  if (previous?.length > 0) {
281
295
  const tableElement = this.getTableElement(element);
282
296
  previous.forEach((item) => {
283
- const itemCol = tableElement.querySelector(`teta-head-cell[data-column=${item.name}]`);
297
+ const itemCol = tableElement?.querySelector(`teta-head-cell[data-column="${item.name}"]`);
284
298
  if (itemCol) {
285
299
  item.flex = 0;
286
300
  item.width = itemCol.clientWidth;
@@ -305,11 +319,14 @@ export class TableService {
305
319
  autosizeAllColumns(target) {
306
320
  const tableElement = this.getTableElement(target);
307
321
  const flat = ArrayUtil.flatten(this.displayColumns, 'columns', true);
308
- flat.forEach((col) => this.setColumnAutoWidth(col, tableElement));
322
+ flat.forEach(col => this.setColumnAutoWidth(col, tableElement));
309
323
  this._columns.next(this.displayColumns);
310
324
  this.saveColumnsState();
311
325
  }
312
326
  reorderColumn(column, insertBefore) {
327
+ if (!this._dragSource) {
328
+ return;
329
+ }
313
330
  const event = new ColumnReorderEvent(this._dragSource, column);
314
331
  if (event.source !== event.target) {
315
332
  const sourceParent = this.findParent(event.source, this.displayColumns);
@@ -340,7 +357,7 @@ export class TableService {
340
357
  this._currentEditCell = cellEvent;
341
358
  }
342
359
  else {
343
- if (this.boolOrFuncCallback(this.rowEditable)(this.getRowByIndex(cellEvent?.row))) {
360
+ if (this.boolOrFuncCallback(!!this.rowEditable)(this.getRowByIndex(cellEvent?.row)?.data)) {
344
361
  this._editRowStart.next(cellEvent);
345
362
  this._currentEditCell = cellEvent;
346
363
  }
@@ -356,12 +373,13 @@ export class TableService {
356
373
  const column = this.getColumnByName(cellEvent?.column);
357
374
  if (this.boolOrFuncCallback(column?.editable)({
358
375
  row: this.getRowByIndex(cellEvent?.row),
359
- column: column
376
+ column: column,
360
377
  })) {
361
378
  this._editCellStart.next(cellEvent);
362
379
  this._currentEditCell = cellEvent;
363
380
  const key = cellEvent?.event?.key;
364
- if (key && (key.length === 1 || (key === 'Delete' && !column.required))) {
381
+ if (key &&
382
+ (key.length === 1 || (key === 'Delete' && !column.required))) {
365
383
  this.clearValue(cellEvent);
366
384
  }
367
385
  }
@@ -375,23 +393,23 @@ export class TableService {
375
393
  }
376
394
  selectOrDeselectRow(row) {
377
395
  if (this._selectedRows.value.indexOf(row) >= 0) {
378
- this._selectedRows.next(this._selectedRows.value.filter((_) => _ !== row));
396
+ this._selectedRows.next(this._selectedRows.value.filter(_ => _ !== row));
379
397
  }
380
398
  else {
381
399
  this._selectedRows.next([...this._selectedRows.value, row]);
382
400
  }
383
401
  }
384
402
  selectRange(row) {
385
- const index = this._displayData.value.indexOf(row);
403
+ const index = this._displayData.value.findIndex(_ => _.data === row);
386
404
  let minIndex = this._selectedRows.value.reduce((prev, curr) => {
387
- const newIndex = this._displayData.value.indexOf(curr);
405
+ const newIndex = this._displayData.value.findIndex(_ => _.data === curr);
388
406
  if (newIndex < prev) {
389
407
  return newIndex;
390
408
  }
391
409
  return prev;
392
410
  }, this._displayData.value.length);
393
411
  let maxIndex = this._selectedRows.value.reduce((prev, curr) => {
394
- const newIndex = this._displayData.value.indexOf(curr);
412
+ const newIndex = this._displayData.value.findIndex(_ => _.data === curr);
395
413
  if (newIndex > prev) {
396
414
  return newIndex;
397
415
  }
@@ -406,7 +424,9 @@ export class TableService {
406
424
  if (minIndex < index && index < maxIndex) {
407
425
  maxIndex = index;
408
426
  }
409
- this._selectedRows.next([...this._displayData.value.slice(minIndex, maxIndex + 1)]);
427
+ this._selectedRows.next([
428
+ ...this._displayData.value.slice(minIndex, maxIndex + 1).map(_ => _.data),
429
+ ]);
410
430
  }
411
431
  selectRow(row) {
412
432
  if (this.selectType === SelectType.none) {
@@ -418,10 +438,10 @@ export class TableService {
418
438
  if (this.selectType === SelectType.none) {
419
439
  return;
420
440
  }
421
- this._selectedRows.next(this._selectedRows.value.filter((_) => _ !== row));
441
+ this._selectedRows.next(this._selectedRows.value.filter(_ => _ !== row));
422
442
  }
423
443
  selectAll() {
424
- this._selectedRows.next(this._displayData.value);
444
+ this._selectedRows.next(this._displayData.value.map(_ => _.data));
425
445
  }
426
446
  deselectAll() {
427
447
  this._selectedRows.next([]);
@@ -429,7 +449,8 @@ export class TableService {
429
449
  allRowsSelected() {
430
450
  if (this._displayData.value?.length &&
431
451
  this._selectedRows.value?.length &&
432
- this._displayData.value.every((_) => this._selectedRows.value.indexOf(_) >= 0)) {
452
+ this._displayData.value.every(_ => this._selectedRows.value.findIndex(selected => selected === _.data) >=
453
+ 0)) {
433
454
  return true;
434
455
  }
435
456
  else if (this._selectedRows.value == null ||
@@ -450,11 +471,12 @@ export class TableService {
450
471
  }
451
472
  setValue(cellValue) {
452
473
  let value;
453
- if (typeof cellValue.row === 'object' && typeof cellValue.column === 'object') {
474
+ if (typeof cellValue.row === 'object' &&
475
+ typeof cellValue.column === 'object') {
454
476
  value = {
455
- row: this.getRowIndex(cellValue.row),
477
+ row: this.getRowIndex(cellValue.row.data),
456
478
  column: cellValue.column.name,
457
- value: cellValue.value
479
+ value: cellValue.value,
458
480
  };
459
481
  }
460
482
  else {
@@ -463,10 +485,13 @@ export class TableService {
463
485
  this._valueSet.next(value);
464
486
  }
465
487
  getRowByIndex(rowIndex) {
466
- return this._displayData?.value[rowIndex];
488
+ if (rowIndex !== null && rowIndex !== undefined) {
489
+ return this._displayData?.value[rowIndex];
490
+ }
491
+ return undefined;
467
492
  }
468
493
  getRowIndex(row) {
469
- return this._displayData.value.indexOf(row);
494
+ return this._displayData.value.findIndex(_ => _.data === row);
470
495
  }
471
496
  getEventCell(event) {
472
497
  return event.composedPath().find((target) => {
@@ -486,7 +511,7 @@ export class TableService {
486
511
  const column = this.getColumnByName(nextCell?.column);
487
512
  if (this.boolOrFuncCallback(column.editable)({
488
513
  row: this.getRowByIndex(nextCell.row),
489
- column
514
+ column,
490
515
  })) {
491
516
  return nextCell;
492
517
  }
@@ -500,7 +525,7 @@ export class TableService {
500
525
  const column = this.getColumnByName(prevCell?.column);
501
526
  if (this.boolOrFuncCallback(column.editable)({
502
527
  row: this.getRowByIndex(prevCell.row),
503
- column
528
+ column,
504
529
  })) {
505
530
  return prevCell;
506
531
  }
@@ -520,7 +545,7 @@ export class TableService {
520
545
  }
521
546
  return {
522
547
  column: columns[colIndex]?.name,
523
- row: rowIndex
548
+ row: rowIndex,
524
549
  };
525
550
  }
526
551
  return null;
@@ -539,37 +564,39 @@ export class TableService {
539
564
  }
540
565
  return {
541
566
  column: columns[colIndex]?.name,
542
- row: rowIndex
567
+ row: rowIndex,
543
568
  };
544
569
  }
545
570
  return null;
546
571
  }
547
572
  getNextRowCell(coords) {
548
573
  const columns = this.getFlatColumns();
549
- let colIndex = columns.findIndex((col) => col.name === coords?.column);
550
- let rowIndex = coords?.row;
551
- if (colIndex >= 0 && rowIndex >= 0 && rowIndex < this._displayData.value.length - 1) {
574
+ const colIndex = columns.findIndex((col) => col.name === coords?.column);
575
+ const rowIndex = coords?.row;
576
+ if (colIndex >= 0 &&
577
+ rowIndex >= 0 &&
578
+ rowIndex < this._displayData.value.length - 1) {
552
579
  return {
553
580
  column: columns[colIndex]?.name,
554
- row: rowIndex + 1
581
+ row: rowIndex + 1,
555
582
  };
556
583
  }
557
584
  return null;
558
585
  }
559
586
  getPreviousRowCell(coords) {
560
587
  const columns = this.getFlatColumns();
561
- let colIndex = columns.findIndex((col) => col.name === coords?.column);
562
- let rowIndex = coords?.row;
588
+ const colIndex = columns.findIndex((col) => col.name === coords?.column);
589
+ const rowIndex = coords?.row;
563
590
  if (colIndex >= 0 && rowIndex > 1) {
564
591
  return {
565
592
  column: columns[colIndex]?.name,
566
- row: rowIndex - 1
593
+ row: rowIndex - 1,
567
594
  };
568
595
  }
569
596
  return null;
570
597
  }
571
598
  getColumnByName(columnName) {
572
- return ArrayUtil.findRecursive(this.displayColumns, (iterableNode) => columnName === iterableNode.name, 'columns');
599
+ return ArrayUtil.findRecursive(this.displayColumns, iterableNode => columnName === iterableNode.name, 'columns');
573
600
  }
574
601
  scrollToIndex(index) {
575
602
  this._scrollIndex.next(null);
@@ -587,20 +614,22 @@ export class TableService {
587
614
  };
588
615
  }
589
616
  getVisibleColumns() {
590
- const visible = ArrayUtil.flatten(this._columns.value, 'columns', true).filter((_) => this._hiddenColumns.value.indexOf(_.name) < 0);
617
+ const visible = ArrayUtil.flatten(this._columns.value, 'columns', true).filter(_ => this._hiddenColumns.value.indexOf(_.name) < 0);
591
618
  return visible.sort((a, b) => Number(b.locked) - Number(a.locked));
592
619
  }
593
620
  getCellInstance(coords) {
594
- return coords ? {
595
- row: this.getRowByIndex(coords.row),
596
- column: this.getColumnByName(coords.column)
597
- } : null;
621
+ return coords
622
+ ? {
623
+ row: this.getRowByIndex(coords.row),
624
+ column: this.getColumnByName(coords.column),
625
+ }
626
+ : null;
598
627
  }
599
628
  getFlatColumns() {
600
629
  return ArrayUtil.flatten(this.displayColumns, 'columns', true).sort((a, b) => Number(b.locked) - Number(a.locked));
601
630
  }
602
631
  findParent(column, columns) {
603
- const found = columns.find((x) => x.name === column.name);
632
+ const found = columns.find(x => x.name === column.name);
604
633
  if (found !== null && found !== undefined) {
605
634
  return columns;
606
635
  }
@@ -616,7 +645,7 @@ export class TableService {
616
645
  return null;
617
646
  }
618
647
  findParentColumn(column, columns) {
619
- const found = columns.find((x) => x.columns.indexOf(column) >= 0);
648
+ const found = columns.find(x => x.columns.indexOf(column) >= 0);
620
649
  if (found !== null && found !== undefined) {
621
650
  return found;
622
651
  }
@@ -640,13 +669,13 @@ export class TableService {
640
669
  setColumnAutoWidth(column, table) {
641
670
  const cells = table.querySelectorAll(`teta-cell[data-column="${column.name}"] .cell-text`);
642
671
  let maxWidth = 0;
643
- cells.forEach((cell) => {
672
+ cells.forEach(cell => {
644
673
  if (cell.scrollWidth > maxWidth) {
645
674
  maxWidth = cell.scrollWidth;
646
675
  }
647
676
  });
648
677
  const aggCells = table.querySelectorAll(`.aggregate-cell[data-column="${column.name}"] .cell-text`);
649
- aggCells?.forEach((cell) => {
678
+ aggCells?.forEach(cell => {
650
679
  if (cell.scrollWidth > maxWidth) {
651
680
  maxWidth = cell.scrollWidth;
652
681
  }
@@ -657,16 +686,16 @@ export class TableService {
657
686
  clearValue(event) {
658
687
  this.setValue({
659
688
  ...event,
660
- value: null
689
+ value: null,
661
690
  });
662
691
  }
663
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: TableService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
664
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: TableService, providedIn: 'root' });
692
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: TableService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
693
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: TableService, providedIn: 'root' });
665
694
  }
666
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: TableService, decorators: [{
695
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: TableService, decorators: [{
667
696
  type: Injectable,
668
697
  args: [{
669
698
  providedIn: 'root',
670
699
  }]
671
700
  }], ctorParameters: function () { return []; } });
672
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvdGFibGUvc2VydmljZS90YWJsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUMvRCxPQUFPLEVBQUMsZUFBZSxFQUFjLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUUxRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUVwRSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDMUQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ2xELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUN2RSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDN0QsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQzlELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQzlFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUNuRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDakUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBQ3hFLE9B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O1FBQzVDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDaEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFD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QkFDL0IsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7YUFDN0I7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FDckMsZ0NBQWdDLE1BQU0sQ0FBQyxJQUFJLGVBQWUsQ0FDM0QsQ0FBQztRQUNGLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN6QixJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxFQUFFO2dCQUMvQixRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQzthQUM3QjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7UUFDaEIsTUFBTSxDQUFDLEtBQUssR0FBRyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFTyxVQUFVLENBQUMsS0FBaUI7UUFDbEMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNaLEdBQUcsS0FBSztZQUNSLEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt1R0Fyd0JVLFlBQVk7MkdBQVosWUFBWSxjQUZYLE1BQU07OzJGQUVQLFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7SUNlbGxDb29yZGluYXRlc30gZnJvbSAnLi4vY29udHJhY3QvaS1jZWxsLWNvb3JkaW5hdGVzJztcbmltcG9ydCB7VGFibGVDb2x1bW59IGZyb20gJy4uL2NvbnRyYWN0L3RhYmxlLWNvbHVtbic7XG5pbXBvcnQge0ZpbHRlclN0YXRlfSBmcm9tICcuLi8uLi9maWx0ZXIvY29udGFyY3QvZmlsdGVyLXN0YXRlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7Q29sdW1uUmVzaXplRXZlbnR9IGZyb20gJy4uL2NvbnRyYWN0L2NvbHVtbi1yZXNpemUtZXZlbnQnO1xuaW1wb3J0IHtDb2x1bW5SZW9yZGVyRXZlbnR9IGZyb20gJy4uL2NvbnRyYWN0L2NvbHVtbi1yZW9yZGVyLWV2ZW50JztcbmltcG9ydCB7U29ydEV2ZW50fSBmcm9tICcuLi9jb250cmFjdC9zb3J0LWV2ZW50JztcbmltcG9ydCB7QXJyYXlVdGlsfSBmcm9tICcuLi8uLi8uLi9jb21tb24vdXRpbC9hcnJheS11dGlsJztcbmltcG9ydCB7U3RhdGVVdGlsfSBmcm9tICcuLi91dGlsL3N0YXRlLXV0aWwnO1xuaW1wb3J0IHtTZWxlY3RUeXBlfSBmcm9tICcuLi9lbnVtL3NlbGVjdC10eXBlLmVudW0nO1xuaW1wb3J0IHtFZGl0VHlwZX0gZnJvbSAnLi4vZW51bS9lZGl0LXR5cGUuZW51bSc7XG5pbXBvcnQge0VkaXRFdmVudH0gZnJvbSAnLi4vZW51bS9lZGl0LWV2ZW50LmVudW0nO1xuaW1wb3J0IHtMaXN0RmlsdGVyVHlwZX0gZnJvbSAnLi4vLi4vZmlsdGVyL2VudW0vbGlzdC1maWx0ZXItdHlwZS5lbnVtJztcbmltcG9ydCB7TGlzdEZpbHRlcn0gZnJvbSAnLi4vLi4vZmlsdGVyL2NvbnRhcmN0L2xpc3QtZmlsdGVyJztcbmltcG9ydCB7RmlsdGVyVHlwZX0gZnJvbSAnLi4vLi4vZmlsdGVyL2VudW0vZmlsdGVyLXR5cGUuZW51bSc7XG5pbXBvcnQge051bWVyaWNGaWx0ZXJWYWx1ZX0gZnJvbSAnLi4vLi4vZmlsdGVyL2NvbnRhcmN0L251bWVyaWMtZmlsdGVyLXZhbHVlJztcbmltcG9ydCB7TnVtZXJpY0ZpbHRlcn0gZnJvbSAnLi4vLi4vZmlsdGVyL2NvbnRhcmN0L251bWVyaWMtZmlsdGVyJztcbmltcG9ydCB7U3RyaW5nRmlsdGVyfSBmcm9tICcuLi8uLi9maWx0ZXIvY29udGFyY3Qvc3RyaW5nLWZpbHRlcic7XG5pbXBvcnQge0RhdGVGaWx0ZXJWYWx1ZX0gZnJvbSAnLi4vLi4vZmlsdGVyL2NvbnRhcmN0L2RhdGUtZmlsdGVyLXZhbHVlJztcbmltcG9ydCB7RGF0ZUZpbHRlcn0gZnJvbSAnLi4vLi4vZmlsdGVyL2NvbnRhcmN0L2RhdGUtZmlsdGVyJztcbmltcG9ydCB7SURpY3Rpb25hcnl9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9pLWRpY3Rpb25hcnknO1xuaW1wb3J0IHtJSWROYW1lfSBmcm9tICcuLi8uLi8uLi9jb21tb24vY29udHJhY3QvaS1pZC1uYW1lJztcbmltcG9ydCB7RGF0ZVV0aWx9IGZyb20gJy4uLy4uLy4uL3V0aWwvZGF0ZS11dGlsJztcbmltcG9ydCBvYmplY3RIYXNoIGZyb20gJ29iamVjdC1oYXNoJztcbmltcG9ydCB7VGFibGVDb2x1bW5TdG9yZX0gZnJvbSAnLi4vY29udHJhY3QvdGFibGUtY29sdW1uLXN0b3JlJztcbmltcG9ydCB7SUNlbGxWYWx1ZX0gZnJvbSAnLi4vY29udHJhY3QvaS1jZWxsLXZhbHVlJztcbmltcG9ydCB7SUNlbGxFdmVudH0gZnJvbSAnLi4vY29udHJhY3QvaS1jZWxsLWV2ZW50JztcbmltcG9ydCB7SUNlbGxJbnN0YW5jZSwgSUNlbGxJbnN0YW5jZVZhbHVlfSBmcm9tICcuLi9jb250cmFjdC9pLWNlbGwtaW5zdGFuY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVTZXJ2aWNlPFQ+IHtcbiAgY29sdW1uczogT2JzZXJ2YWJsZTxUYWJsZUNvbHVtbltdPjtcbiAgZGlzcGxheURhdGE6IE9ic2VydmFibGU8VFtdPjtcbiAgZGljdDogT2JzZXJ2YWJsZTxJRGljdGlvbmFyeTxJSWROYW1lPGFueT5bXT4+O1xuICBmaWx0ZXJPcHRpb25zOiBPYnNlcnZhYmxlPElEaWN0aW9uYXJ5PElJZE5hbWU8YW55PltdPj47XG4gIHN0YXRlOiBPYnNlcnZhYmxlPEZpbHRlclN0YXRlPjtcbiAgc2VsZWN0VHlwZTogU2VsZWN0VHlwZSA9IFNlbGVjdFR5cGUubW91c2U7XG4gIGVkaXRSb3dTdGFydDogT2JzZXJ2YWJsZTxJQ2VsbEV2ZW50PjtcbiAgZWRpdFJvd1N0b3A6IE9ic2VydmFibGU8SUNlbGxDb29yZGluYXRlcz47XG4gIGVkaXRDZWxsU3RhcnQ6IE9ic2VydmFibGU8SUNlbGxFdmVudD47XG4gIGVkaXRDZWxsU3RvcDogT2JzZXJ2YWJsZTxJQ2VsbENvb3JkaW5hdGVzPjtcbiAgdmFsdWVDaGFuZ2VkOiBPYnNlcnZhYmxlPElDZWxsQ29vcmRpbmF0ZXM+O1xuICB2YWx1ZVNldDogT2JzZXJ2YWJsZTxJQ2VsbFZhbHVlPjtcbiAgc3RhdGVDaGFuZ2VkOiBPYnNlcnZhYmxlPEZpbHRlclN0YXRlPjtcbiAgZmlsdGVyQ2xlYXI6IE9ic2VydmFibGU8VGFibGVDb2x1bW4+O1xuICBzZWxlY3RlZFJvd3M6IE9ic2VydmFibGU8VFtdPjtcbiAgYWN0aXZlUm93OiBPYnNlcnZhYmxlPFQ+O1xuICBoaWRkZW5Db2x1bW5zOiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcbiAgc2Nyb2xsSW5kZXg6IE9ic2VydmFibGU8bnVtYmVyPjtcblxuICBlZGl0VHlwZTogRWRpdFR5cGUgPSBFZGl0VHlwZS5jZWxsO1xuICBlZGl0RXZlbnQ6IEVkaXRFdmVudCA9IEVkaXRFdmVudC5kb3VibGVDbGljaztcbiAgcm93RWRpdGFibGU6IGJvb2xlYW4gfCAoKHJvdzogVCkgPT4gYm9vbGVhbik7XG4gIHRyYWNrUm93OiAoaW5kZXg6IG51bWJlciwgcm93OiBUKSA9PiBhbnkgPSAoaW5kZXg6IG51bWJlciwgcm93OiBUKSA9PiB7XG4gICAgaWYgKHJvd1snaWQnXSkge1xuICAgICAgcmV0dXJuIHJvd1snaWQnXTtcbiAgICB9XG4gICAgcmV0dXJuIGluZGV4O1xuICB9O1xuXG4gIGdldCBkcmFnU291cmNlKCkge1xuICAgIHJldHVybiB0aGlzLl9kcmFnU291cmNlO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsQ29sdW1uc0hhc2g6IHN0cmluZztcbiAgcHJpdmF0ZSBpbml0aWFsQ29sdW1uczogVGFibGVDb2x1bW5bXSA9IFtdO1xuICBwcml2YXRlIGRpc3BsYXlDb2x1bW5zOiBUYWJsZUNvbHVtbltdID0gW107XG4gIHByaXZhdGUgX2NvbHVtbnM6IEJlaGF2aW9yU3ViamVjdDxUYWJsZUNvbHVtbltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFibGVDb2x1bW5bXT4oW10pO1xuICBwcml2YXRlIF9oaWRkZW5Db2x1bW5zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pO1xuICBwcml2YXRlIF9kaXNwbGF5RGF0YTogQmVoYXZpb3JTdWJqZWN0PFRbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRbXT4oW10pO1xuICBwcml2YXRlIF9kaWN0OiBCZWhhdmlvclN1YmplY3Q8SURpY3Rpb25hcnk8SUlkTmFtZTxhbnk+W10+PiA9XG4gICAgbmV3IEJlaGF2aW9yU3ViamVjdDxJRGljdGlvbmFyeTxJSWROYW1lPGFueT5bXT4+KHt9KTtcbiAgcHJpdmF0ZSBfZmlsdGVyT3B0aW9uczogQmVoYXZpb3JTdWJqZWN0PElEaWN0aW9uYXJ5PElJZE5hbWU8YW55PltdPj4gPVxuICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8SURpY3Rpb25hcnk8SUlkTmFtZTxhbnk+W10+Pih7fSk7XG4gIHByaXZhdGUgX3N0YXRlOiBCZWhhdmlvclN1YmplY3Q8RmlsdGVyU3RhdGU+ID1cbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PEZpbHRlclN0YXRlPihuZXcgRmlsdGVyU3RhdGUoKSk7XG4gIHByaXZhdGUgX2Nvb2tpZU5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfaGlkZGVuQ29va2llTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIF9jb2x1bW5zQ29va2llTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIF9lZGl0Um93U3RhcnQgPSBuZXcgU3ViamVjdDxJQ2VsbEV2ZW50IHwgbnVsbD4oKTtcbiAgcHJpdmF0ZSBfZWRpdFJvd1N0b3AgPSBuZXcgU3ViamVjdDxJQ2VsbENvb3JkaW5hdGVzIHwgbnVsbD4oKTtcbiAgcHJpdmF0ZSBfZWRpdENlbGxTdGFydCA9IG5ldyBTdWJqZWN0PElDZWxsRXZlbnQgfCBudWxsPigpO1xuICBwcml2YXRlIF9lZGl0Q2VsbFN0b3AgPSBuZXcgU3ViamVjdDxJQ2VsbENvb3JkaW5hdGVzIHwgbnVsbD4oKTtcbiAgcHJpdmF0ZSBfdmFsdWVDaGFuZ2VkID0gbmV3IFN1YmplY3Q8SUNlbGxDb29yZGluYXRlcyB8IG51bGw+KCk7XG4gIHByaXZhdGUgX3ZhbHVlU2V0ID0gbmV3IFN1YmplY3Q8SUNlbGxWYWx1ZT4oKTtcbiAgcHJpdmF0ZSBfc3RhdGVDaGFuZ2VkID0gbmV3IFN1YmplY3Q8RmlsdGVyU3RhdGU+KCk7XG4gIHByaXZhdGUgX2ZpbHRlckNsZWFyID0gbmV3IFN1YmplY3Q8VGFibGVDb2x1bW4+KCk7XG4gIHByaXZhdGUgX2RyYWdTb3VyY2U6IFRhYmxlQ29sdW1uO1xuICBwcml2YXRlIF9zZWxlY3RlZFJvd3MgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRbXT4oW10pO1xuICBwcml2YXRlIF9hY3RpdmVSb3cgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFQ+KG51bGwpO1xuICBwcml2YXRlIF9zY3JvbGxJbmRleCA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcblxuICBwcml2YXRlIF9jdXJyZW50RWRpdENlbGw6IElDZWxsQ29vcmRpbmF0ZXM7XG5cbiAgZ2V0IGN1cnJlbnRFZGl0Q2VsbCgpOiBJQ2VsbENvb3JkaW5hdGVzIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEVkaXRDZWxsO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb2x1bW5zID0gdGhpcy5fY29sdW1ucy5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmRpc3BsYXlEYXRhID0gdGhpcy5fZGlzcGxheURhdGEuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5kaWN0ID0gdGhpcy5fZGljdC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmZpbHRlck9wdGlvbnMgPSB0aGlzLl9maWx0ZXJPcHRpb25zLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuc3RhdGUgPSB0aGlzLl9zdGF0ZS5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmVkaXRSb3dTdGFydCA9IHRoaXMuX2VkaXRSb3dTdGFydC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmVkaXRSb3dTdG9wID0gdGhpcy5fZWRpdFJvd1N0b3AuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5lZGl0Q2VsbFN0YXJ0ID0gdGhpcy5fZWRpdENlbGxTdGFydC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmVkaXRDZWxsU3RvcCA9IHRoaXMuX2VkaXRDZWxsU3RvcC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlZCA9IHRoaXMuX3ZhbHVlQ2hhbmdlZC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLnZhbHVlU2V0ID0gdGhpcy5fdmFsdWVTZXQuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZWQgPSB0aGlzLl9zdGF0ZUNoYW5nZWQuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5maWx0ZXJDbGVhciA9IHRoaXMuX2ZpbHRlckNsZWFyLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gdGhpcy5fc2VsZWN0ZWRSb3dzLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuYWN0aXZlUm93ID0gdGhpcy5fYWN0aXZlUm93LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuaGlkZGVuQ29sdW1ucyA9IHRoaXMuX2hpZGRlbkNvbHVtbnMuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5zY3JvbGxJbmRleCA9IHRoaXMuX3Njcm9sbEluZGV4LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgc2V0RGF0YShkYXRhOiBUW10pOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwbGF5RGF0YS5uZXh0KGRhdGEgPyBbLi4uZGF0YV0gOiBbXSk7XG4gIH1cblxuICBzZXREaWN0KGRpY3Q6IElEaWN0aW9uYXJ5PElJZE5hbWU8YW55PltdPik6IHZvaWQge1xuICAgIHRoaXMuX2RpY3QubmV4dChkaWN0KTtcbiAgfVxuXG4gIHNldEZpbHRlck9wdGlvbnMoZmlsdGVyT3B0aW9uczogSURpY3Rpb25hcnk8SUlkTmFtZTxhbnk+W10+KTogdm9pZCB7XG4gICAgdGhpcy5fZmlsdGVyT3B0aW9ucy5uZXh0KGZpbHRlck9wdGlvbnMpO1xuICB9XG5cbiAgc2V0Q29sdW1ucyhjb2x1bW5zOiBUYWJsZUNvbHVtbltdKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsQ29sdW1ucyA9IGNvbHVtbnMgPyBjb2x1bW5zLm1hcCgoXykgPT4gbmV3IFRhYmxlQ29sdW1uKF8pKSA6IFtdO1xuICAgIGNvbnN0IGV4Y2x1ZGVLZXlzID0gW1xuICAgICAgJ2VkaXRhYmxlJyxcbiAgICAgICdjZWxsQ29tcG9uZW50JyxcbiAgICAgICdoZWFkQ2VsbENvbXBvbmVudCcsXG4gICAgICAnaGVhZERyb3Bkb3duQ29uZmlnJ1xuICAgIF07XG4gICAgdGhpcy5pbml0aWFsQ29sdW1uc0hhc2ggPSBvYmplY3RIYXNoKHRoaXMuaW5pdGlhbENvbHVtbnMsIHtcbiAgICAgIGFsZ29yaXRobTogJ3NoYTEnLFxuICAgICAgaWdub3JlVW5rbm93bjogdHJ1ZSxcbiAgICAgIGV4Y2x1ZGVLZXlzOiAoa2V5KSA9PiB7XG4gICAgICAgIHJldHVybiBleGNsdWRlS2V5cy5pbmRleE9mKGtleSkgPj0gMDtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgY29uc3QgcmVzdG9yZWQgPSB0aGlzLnJlc3RvcmVDb2x1bW5zKCk7XG5cbiAgICBpZiAocmVzdG9yZWQpIHtcbiAgICAgIHRoaXMuc2V0RGlzcGxheUNvbHVtbnMocmVzdG9yZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldERpc3BsYXlDb2x1bW5zKHRoaXMuaW5pdGlhbENvbHVtbnMpO1xuICAgIH1cbiAgfVxuXG4gIHJlc3RvcmVEZWZhdWx0Q29sdW1ucygpIHtcbiAgICB0aGlzLnNldERpc3BsYXlDb2x1bW5zKHRoaXMuaW5pdGlhbENvbHVtbnMpO1xuICAgIHRoaXMuY2xlYXJDb2x1bW5zU3RhdGUoKTtcbiAgfVxuXG4gIHVwZGF0ZUNvbHVtbnMoY29sdW1uczogVGFibGVDb2x1bW5bXSk6IHZvaWQge1xuICAgIHRoaXMuc2V0RGlzcGxheUNvbHVtbnMoY29sdW1ucyk7XG4gICAgdGhpcy5zYXZlQ29sdW1uc1N0YXRlKCk7XG4gIH1cblxuICBzYXZlQ29sdW1uc1N0YXRlKCkge1xuICAgIGlmICh0aGlzLl9jb29raWVOYW1lKSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgICAgdGhpcy5fY29sdW1uc0Nvb2tpZU5hbWUsXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBoYXNoOiB0aGlzLmluaXRpYWxDb2x1bW5zSGFzaCxcbiAgICAgICAgICBjb2x1bW5zOiB0aGlzLmRpc3BsYXlDb2x1bW5zLm1hcCgoXykgPT4gbmV3IFRhYmxlQ29sdW1uU3RvcmUoXykpLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBjbGVhckNvbHVtbnNTdGF0ZSgpIHtcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLl9jb2x1bW5zQ29va2llTmFtZSk7XG4gIH1cblxuICBzZXREaXNwbGF5Q29sdW1ucyhjb2x1bW5zOiBUYWJsZUNvbHVtbltdKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwbGF5Q29sdW1ucyA9IGNvbHVtbnMgPyBjb2x1bW5zLm1hcCgoXykgPT4gbmV3IFRhYmxlQ29sdW1uKF8pKSA6IFtdO1xuICAgIHRoaXMuX2NvbHVtbnMubmV4dCh0aGlzLmRpc3BsYXlDb2x1bW5zKTtcbiAgfVxuXG4gIHJlc3RvcmVDb2x1bW5zKCkge1xuICAgIGNvbnN0IHNhdmVkQ29sdW1ucyA9IEpTT04ucGFyc2UoXG4gICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLl9jb2x1bW5zQ29va2llTmFtZSlcbiAgICApO1xuICAgIGlmIChzYXZlZENvbHVtbnMgJiYgc2F2ZWRDb2x1bW5zLmhhc2ggPT09IHRoaXMuaW5pdGlhbENvbHVtbnNIYXNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXN0b3JlQ29sdW1uc1N0YXRlKHNhdmVkQ29sdW1ucy5jb2x1bW5zKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXN0b3JlQ29sdW1uc1N0YXRlKGNvbHVtbnM6IFRhYmxlQ29sdW1uU3RvcmVbXSkge1xuICAgIHJldHVybiBjb2x1bW5zLm1hcCgoY29sdW1uOiBUYWJsZUNvbHVtblN0b3JlKSA9PiB7XG4gICAgICBjb25zdCBmb3VuZCA9IEFycmF5VXRpbC5maW5kUmVjdXJzaXZlKFxuICAgICAgICB0aGlzLmluaXRpYWxDb2x1bW5zLFxuICAgICAgICAoaXRlbSkgPT4gaXRlbS5uYW1lID09PSBjb2x1bW4ubmFtZSxcbiAgICAgICAgJ2NvbHVtbnMnXG4gICAgICApO1xuICAgICAgY29uc3QgcmVzdWx0Q29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKGZvdW5kKTtcbiAgICAgIHJlc3VsdENvbHVtbi53aWR0aCA9IGNvbHVtbi53aWR0aDtcbiAgICAgIHJlc3VsdENvbHVtbi5mbGV4ID0gY29sdW1uLmZsZXg7XG4gICAgICByZXN1bHRDb2x1bW4ubG9ja2VkID0gY29sdW1uLmxvY2tlZDtcbiAgICAgIGlmIChjb2x1bW4uY29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgICByZXN1bHRDb2x1bW4uY29sdW1ucyA9IHRoaXMucmVzdG9yZUNvbHVtbnNTdGF0ZShjb2x1bW4uY29sdW1ucyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0Q29sdW1uO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0U3RhdGUoc3RhdGU6IEZpbHRlclN0YXRlKTogdm9pZCB7XG4gICAgc3RhdGUuc2F2ZSh0aGlzLl9jb29raWVOYW1lKTtcbiAgICB0aGlzLl9zdGF0ZS5uZXh0KHN0YXRlKTtcbiAgfVxuXG4gIHNldENvb2tpZU5hbWUobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fY29va2llTmFtZSA9IG5hbWU7XG4gICAgdGhpcy5faGlkZGVuQ29va2llTmFtZSA9IGAke3RoaXMuX2Nvb2tpZU5hbWV9X2hpZGRlbl9jb2x1bW5zYDtcbiAgICB0aGlzLl9jb2x1bW5zQ29va2llTmFtZSA9IGAke3RoaXMuX2Nvb2tpZU5hbWV9X2NvbHVtbnNgO1xuICB9XG5cbiAgcmVzdG9yZVN0YXRlKCk6IHZvaWQge1xuICAgIGxldCBzdGF0ZTogRmlsdGVyU3RhdGU7XG4gICAgaWYgKHRoaXMuX2Nvb2tpZU5hbWU/Lmxlbmd0aCA+IDAgJiYgRmlsdGVyU3RhdGUucmVzdG9yZSh0aGlzLl9jb29raWVOYW1lKSkge1xuICAgICAgbGV0IG5ld1N0YXRlID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgdGhpcy5fc3RhdGUudmFsdWUsXG4gICAgICAgIEZpbHRlclN0YXRlLnJlc3RvcmUodGhpcy5fY29va2llTmFtZSlcbiAgICAgICk7XG4gICAgICBuZXdTdGF0ZSA9IERhdGVVdGlsLmNvbnZlcnREYXRlU3RyaW5nc1RvRGF0ZXMobmV3U3RhdGUpO1xuICAgICAgc3RhdGUgPSBuZXcgRmlsdGVyU3RhdGUobmV3U3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZSA9IG5ldyBGaWx0ZXJTdGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKHN0YXRlKTtcbiAgfVxuXG4gIHNhdmVIaWRkZW5Db2x1bW5zKGhpZGRlbkNvbHVtbnM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5faGlkZGVuQ29va2llTmFtZSwgSlNPTi5zdHJpbmdpZnkoaGlkZGVuQ29sdW1ucykpO1xuICB9XG5cbiAgcmVzdG9yZUhpZGRlbkNvbHVtbnMoKTogdm9pZCB7XG4gICAgY29uc3QgaGlkZGVuQ29sdW1ucyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuX2hpZGRlbkNvb2tpZU5hbWUpIHx8ICdbXSc7XG4gICAgdGhpcy5faGlkZGVuQ29sdW1ucy5uZXh0KEpTT04ucGFyc2UoaGlkZGVuQ29sdW1ucykpO1xuICB9XG5cbiAgc29ydEFzYyhzb3J0RXZlbnQ6IFNvcnRFdmVudCk6IHZvaWQge1xuICAgIGlmIChzb3J0RXZlbnQuY29sdW1uLnNvcnRhYmxlKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKFN0YXRlVXRpbC5zb3J0QXNjKHNvcnRFdmVudCwgdGhpcy5fc3RhdGUudmFsdWUpKTtcbiAgICB9XG4gIH1cblxuICBzb3J0RGVzYyhzb3J0RXZlbnQ6IFNvcnRFdmVudCk6IHZvaWQge1xuICAgIGlmIChzb3J0RXZlbnQuY29sdW1uLnNvcnRhYmxlKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKFN0YXRlVXRpbC5zb3J0RGVzYyhzb3J0RXZlbnQsIHRoaXMuX3N0YXRlLnZhbHVlKSk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJTb3J0KGNvbHVtbjogVGFibGVDb2x1bW4pOiB2b2lkIHtcbiAgICB0aGlzLnNldFN0YXRlKFN0YXRlVXRpbC5jbGVhclNvcnQoY29sdW1uLCB0aGlzLl9zdGF0ZS52YWx1ZSkpO1xuICB9XG5cbiAgY2xlYXJBbGxTb3J0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0U3RhdGUoU3RhdGVVdGlsLmNsZWFyQWxsU29ydCh0aGlzLl9zdGF0ZS52YWx1ZSkpO1xuICB9XG5cbiAgY2xlYXJGaWx0ZXIoY29sdW1uOiBUYWJsZUNvbHVtbikge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fc3RhdGUudmFsdWU7XG4gICAgaWYgKGNvbHVtbiAhPT0gbnVsbCAmJiBjb2x1bW4gIT09IHVuZGVmaW5lZCAmJiBjb2x1bW4uZmlsdGVyYWJsZSkge1xuICAgICAgc3dpdGNoIChjb2x1bW4uZmlsdGVyVHlwZSkge1xuICAgICAgICBjYXNlIEZpbHRlclR5cGUuZGF0ZTpcbiAgICAgICAgICBzdGF0ZS5hZGREYXRlRmlsdGVyKFxuICAgICAgICAgICAgbmV3IERhdGVGaWx0ZXIoe1xuICAgICAgICAgICAgICBuYW1lOiBjb2x1bW4ubmFtZSxcbiAgICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5maWx0ZXJGaWVsZCxcbiAgICAgICAgICAgICAgdmFsdWU6IG5ldyBEYXRlRmlsdGVyVmFsdWUoKSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBGaWx0ZXJUeXBlLnN0cmluZzpcbiAgICAgICAgICBzdGF0ZS5hZGRTdHJpbmdGaWx0ZXIoXG4gICAgICAgICAgICBuZXcgU3RyaW5nRmlsdGVyKHtcbiAgICAgICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4uZmlsdGVyRmllbGQsXG4gICAgICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBGaWx0ZXJUeXBlLm51bWJlcjpcbiAgICAgICAgICBzdGF0ZS5hZGROdW1lcmljRmlsdGVyKFxuICAgICAgICAgICAgbmV3IE51bWVyaWNGaWx0ZXIoe1xuICAgICAgICAgICAgICBuYW1lOiBjb2x1bW4ubmFtZSxcbiAgICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5maWx0ZXJGaWVsZCxcbiAgICAgICAgICAgICAgdmFsdWU6IG5ldyBOdW1lcmljRmlsdGVyVmFsdWUoKSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBGaWx0ZXJUeXBlLmxpc3Q6XG4gICAgICAgICAgc3RhdGUuYWRkTGlzdEZpbHRlcihcbiAgICAgICAgICAgIG5ldyBMaXN0RmlsdGVyKHtcbiAgICAgICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4uZmlsdGVyRmllbGQsXG4gICAgICAgICAgICAgIHZhbHVlOiBbXSxcbiAgICAgICAgICAgICAgdHlwZTogTGlzdEZpbHRlclR5cGUuTm9uZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUobmV3IEZpbHRlclN0YXRlKHN0YXRlKSk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJBbGxGaWx0ZXJzKCkge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fc3RhdGUudmFsdWU7XG4gICAgc3RhdGUuc3RyaW5nRmlsdGVycyA9IFtdO1xuICAgIHN0YXRlLmxpc3RGaWx0ZXJzID0gW107XG4gICAgc3RhdGUubnVtZXJpY0ZpbHRlcnMgPSBbXTtcbiAgICBzdGF0ZS5kYXRlRmlsdGVycyA9IFtdO1xuICAgIHRoaXMuc2V0U3RhdGUobmV3IEZpbHRlclN0YXRlKHN0YXRlKSk7XG4gIH1cblxuICBwaW5Db2x1bW4oY29sdW1uOiBUYWJsZUNvbHVtbik6IHZvaWQge1xuICAgIHRoaXMuZGlzcGxheUNvbHVtbnMuZm9yRWFjaCgoY29sOiBUYWJsZUNvbHVtbikgPT4ge1xuICAgICAgaWYgKGNvbC5uYW1lID09PSBjb2x1bW4ubmFtZSkge1xuICAgICAgICBjb2wubG9ja2VkID0gIWNvbC5sb2NrZWQ7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVDb2x1bW5zKHRoaXMuZGlzcGxheUNvbHVtbnMpO1xuICB9XG5cbiAgZHJhZ1N0YXJ0KGNvbHVtbjogVGFibGVDb2x1bW4pOiB2b2lkIHtcbiAgICB0aGlzLl9kcmFnU291cmNlID0gY29sdW1uO1xuICB9XG5cbiAgbG9ja1ByZXZpb3VzQ29sdW1ucyhjb2x1bW46IFRhYmxlQ29sdW1uLCBlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIGNvbnN0IGZsYXQgPSBBcnJheVV0aWwuZmxhdHRlbih0aGlzLmRpc3BsYXlDb2x1bW5zLCAnY29sdW1ucycsIHRydWUpLnNvcnQoXG4gICAgICAoYSwgYikgPT4gTnVtYmVyKGIubG9ja2VkKSAtIE51bWJlcihhLmxvY2tlZClcbiAgICApO1xuICAgIGNvbnN0IGluZGV4ID0gZmxhdC5pbmRleE9mKGNvbHVtbik7XG4gICAgY29uc3QgcHJldmlvdXMgPSBmbGF0LnNsaWNlKDAsIGluZGV4KS5maWx0ZXIoKF8pID0+IF8uZmxleCA+IDApO1xuICAgIGlmIChwcmV2aW91cz8ubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgdGFibGVFbGVtZW50ID0gdGhpcy5nZXRUYWJsZUVsZW1lbnQoZWxlbWVudCk7XG4gICAgICBwcmV2aW91cy5mb3JFYWNoKChpdGVtOiBUYWJsZUNvbHVtbikgPT4ge1xuICAgICAgICBjb25zdCBpdGVtQ29sID0gdGFibGVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgYHRldGEtaGVhZC1jZWxsW2RhdGEtY29sdW1uPSR7aXRlbS5uYW1lfV1gXG4gICAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmIChpdGVtQ29sKSB7XG4gICAgICAgICAgaXRlbS5mbGV4ID0gMDtcbiAgICAgICAgICBpdGVtLndpZHRoID0gaXRlbUNvbC5jbGllbnRXaWR0aDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmVzaXplQ29sdW1uKGV2ZW50OiBDb2x1bW5SZXNpemVFdmVudCkge1xuICAgIGlmIChldmVudC5jb2x1bW4gIT09IG51bGwgJiYgZXZlbnQuY29sdW1uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGV2ZW50LmNvbHVtbi53aWR0aCA9IGV2ZW50Lm5ld1dpZHRoIDwgNTAgPyA1MCA6IGV2ZW50Lm5ld1dpZHRoO1xuICAgICAgZXZlbnQuY29sdW1uLmZsZXggPSAwO1xuICAgIH1cbiAgICB0aGlzLl9jb2x1bW5zLm5leHQodGhpcy5kaXNwbGF5Q29sdW1ucyk7XG4gICAgdGhpcy5zYXZlQ29sdW1uc1N0YXRlKCk7XG4gIH1cblxuICBhdXRvc2l6ZUNvbHVtbihjb2x1bW46IFRhYmxlQ29sdW1uLCB0YXJnZXQ6IEhUTUxFbGVtZW50KSB7XG4gICAgY29uc3QgdGFibGVFbGVtZW50ID0gdGhpcy5nZXRUYWJsZUVsZW1lbnQodGFyZ2V0KTtcbiAgICB0aGlzLnNldENvbHVtbkF1dG9XaWR0aChjb2x1bW4sIHRhYmxlRWxlbWVudCBhcyBIVE1MRWxlbWVudCk7XG4gICAgdGhpcy5fY29sdW1ucy5uZXh0KHRoaXMuZGlzcGxheUNvbHVtbnMpO1xuICAgIHRoaXMuc2F2ZUNvbHVtbnNTdGF0ZSgpO1xuICB9XG5cbiAgYXV0b3NpemVBbGxDb2x1bW5zKHRhcmdldDogSFRNTEVsZW1lbnQpIHtcbiAgICBjb25zdCB0YWJsZUVsZW1lbnQgPSB0aGlzLmdldFRhYmxlRWxlbWVudCh0YXJnZXQpO1xuICAgIGNvbnN0IGZsYXQgPSBBcnJheVV0aWwuZmxhdHRlbih0aGlzLmRpc3BsYXlDb2x1bW5zLCAnY29sdW1ucycsIHRydWUpO1xuICAgIGZsYXQuZm9yRWFjaCgoY29sKSA9PlxuICAgICAgdGhpcy5zZXRDb2x1bW5BdXRvV2lkdGgoY29sLCB0YWJsZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpXG4gICAgKTtcbiAgICB0aGlzLl9jb2x1bW5zLm5leHQodGhpcy5kaXNwbGF5Q29sdW1ucyk7XG4gICAgdGhpcy5zYXZlQ29sdW1uc1N0YXRlKCk7XG4gIH1cblxuICByZW9yZGVyQ29sdW1uKGNvbHVtbjogVGFibGVDb2x1bW4sIGluc2VydEJlZm9yZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGV2ZW50ID0gbmV3IENvbHVtblJlb3JkZXJFdmVudCh0aGlzLl9kcmFnU291cmNlLCBjb2x1bW4pO1xuICAgIGlmIChldmVudC5zb3VyY2UgIT09IGV2ZW50LnRhcmdldCkge1xuICAgICAgY29uc3Qgc291cmNlUGFyZW50ID0gdGhpcy5maW5kUGFyZW50KGV2ZW50LnNvdXJjZSwgdGhpcy5kaXNwbGF5Q29sdW1ucyk7XG4gICAgICBjb25zdCB0YXJnZXRQYXJlbnQgPSB0aGlzLmZpbmRQYXJlbnQoZXZlbnQudGFyZ2V0LCB0aGlzLmRpc3BsYXlDb2x1bW5zKTtcblxuICAgICAgaWYgKHNvdXJjZVBhcmVudCAmJiB0YXJnZXRQYXJlbnQpIHtcbiAgICAgICAgY29uc3Qgc291cmNlSW5kZXggPSBzb3VyY2VQYXJlbnQuaW5kZXhPZihldmVudC5zb3VyY2UpO1xuICAgICAgICBzb3VyY2VQYXJlbnQuc3BsaWNlKHNvdXJjZUluZGV4LCAxKTtcbiAgICAgICAgbGV0IHRhcmdldEluZGV4ID0gdGFyZ2V0UGFyZW50LmluZGV4T2YoZXZlbnQudGFyZ2V0KTtcbiAgICAgICAgaWYgKCFpbnNlcnRCZWZvcmUpIHtcbiAgICAgICAgICB0YXJnZXRJbmRleCA9IHRhcmdldEluZGV4ICsgMTtcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXRQYXJlbnQuc3BsaWNlKHRhcmdldEluZGV4LCAwLCBldmVudC5zb3VyY2UpO1xuICAgICAgICBldmVudC5zb3VyY2UubG9ja2VkID0gZXZlbnQudGFyZ2V0LmxvY2tlZDtcblxuICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbnModGhpcy5kaXNwbGF5Q29sdW1ucyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0Q29sdW1uUGFyZW50KGNvbHVtbjogVGFibGVDb2x1bW4pIHtcbiAgICByZXR1cm4gdGhpcy5maW5kUGFyZW50Q29sdW1uKGNvbHVtbiwgdGhpcy5kaXNwbGF5Q29sdW1ucyk7XG4gIH1cblxuICBzdGFydEVkaXRSb3coY2VsbEV2ZW50OiBJQ2VsbEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRFZGl0Q2VsbD8ucm93ICE9PSBjZWxsRXZlbnQ/LnJvdykge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnRFZGl0Q2VsbCAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuX2VkaXRSb3dTdG9wLm5leHQodGhpcy5fY3VycmVudEVkaXRDZWxsKTtcbiAgICAgIH1cbiAgICAgIGlmIChjZWxsRXZlbnQgPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5fZWRpdFJvd1N0YXJ0Lm5leHQoY2VsbEV2ZW50KTtcbiAgICAgICAgdGhpcy5fY3VycmVudEVkaXRDZWxsID0gY2VsbEV2ZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuYm9vbE9yRnVuY0NhbGxiYWNrPFQ+KHRoaXMucm93RWRpdGFibGUpKFxuICAgICAgICAgICAgdGhpcy5nZXRSb3dCeUluZGV4KGNlbGxFdmVudD8ucm93KVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5fZWRpdFJvd1N0YXJ0Lm5leHQoY2VsbEV2ZW50KTtcbiAgICAgICAgICB0aGlzLl9jdXJyZW50RWRpdENlbGwgPSBjZWxsRXZlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGFydEVkaXRDZWxsKGNlbGxFdmVudDogSUNlbGxFdmVudCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuX2N1cnJlbnRFZGl0Q2VsbD8uY29sdW1uICE9PSBjZWxsRXZlbnQ/LmNvbHVtbiB8fFxuICAgICAgdGhpcy5fY3VycmVudEVkaXRDZWxsPy5yb3cgIT09IGNlbGxFdmVudD8ucm93XG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudEVkaXRDZWxsICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5fZWRpdENlbGxTdG9wLm5leHQodGhpcy5fY3VycmVudEVkaXRDZWxsKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uQnlOYW1lKGNlbGxFdmVudD8uY29sdW1uKTtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5ib29sT3JGdW5jQ2FsbGJhY2s8SUNlbGxJbnN0YW5jZTxUPj4oY29sdW1uPy5lZGl0YWJsZSkoe1xuICAgICAgICAgIHJvdzogdGhpcy5nZXRSb3dCeUluZGV4KGNlbGxFdmVudD8ucm93KSxcbiAgICAgICAgICBjb2x1bW46IGNvbHVtblxuICAgICAgICB9KVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuX2VkaXRDZWxsU3RhcnQubmV4dChjZWxsRXZlbnQpO1xuICAgICAgICB0aGlzLl9jdXJyZW50RWRpdENlbGwgPSBjZWxsRXZlbnQ7XG4gICAgICAgIGNvbnN0IGtleSA9IChjZWxsRXZlbnQ/LmV2ZW50IGFzIEtleWJvYXJkRXZlbnQpPy5rZXk7XG4gICAgICAgIGlmIChrZXkgJiYgKGtleS5sZW5ndGggPT09IDEgfHwgKGtleSA9PT0gJ0RlbGV0ZScgJiYgIWNvbHVtbi5yZXF1aXJlZCkpKSB7XG4gICAgICAgICAgdGhpcy5jbGVhclZhbHVlKGNlbGxFdmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRBY3RpdmVSb3cocm93OiBUKTogdm9pZCB7XG4gICAgdGhpcy5fYWN0aXZlUm93Lm5leHQocm93KTtcbiAgfVxuXG4gIHNlbGVjdFJvd3Mocm93czogVFtdKTogdm9pZCB7XG4gICAgdGhpcy5fc2VsZWN0ZWRSb3dzLm5leHQocm93cyk7XG4gIH1cblxuICBzZWxlY3RPckRlc2VsZWN0Um93KHJvdzogVCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9zZWxlY3RlZFJvd3MudmFsdWUuaW5kZXhPZihyb3cpID49IDApIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkUm93cy5uZXh0KFxuICAgICAgICB0aGlzLl9zZWxlY3RlZFJvd3MudmFsdWUuZmlsdGVyKChfKSA9PiBfICE9PSByb3cpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZFJvd3MubmV4dChbLi4udGhpcy5fc2VsZWN0ZWRSb3dzLnZhbHVlLCByb3ddKTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RSYW5nZShyb3c6IFQpOiB2b2lkIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2Rpc3BsYXlEYXRhLnZhbHVlLmluZGV4T2Yocm93KTtcbiAgICBsZXQgbWluSW5kZXggPSB0aGlzLl9zZWxlY3RlZFJvd3MudmFsdWUucmVkdWNlKChwcmV2LCBjdXJyKSA9PiB7XG4gICAgICBjb25zdCBuZXdJbmRleCA9IHRoaXMuX2Rpc3BsYXlEYXRhLnZhbHVlLmluZGV4T2YoY3Vycik7XG4gICAgICBpZiAobmV3SW5kZXggPCBwcmV2KSB7XG4gICAgICAgIHJldHVybiBuZXdJbmRleDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcmV2O1xuICAgIH0sIHRoaXMuX2Rpc3BsYXlEYXRhLnZhbHVlLmxlbmd0aCk7XG4gICAgbGV0IG1heEluZGV4ID0gdGhpcy5fc2VsZWN0ZWRSb3dzLnZhbHVlLnJlZHVjZSgocHJldiwgY3VycikgPT4ge1xuICAgICAgY29uc3QgbmV3SW5kZXggPSB0aGlzLl9kaXNwbGF5RGF0YS52YWx1ZS5pbmRleE9mKGN1cnIpO1xuICAgICAgaWYgKG5ld0luZGV4ID4gcHJldikge1xuICAgICAgICByZXR1cm4gbmV3SW5kZXg7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJldjtcbiAgICB9LCAwKTtcbiAgICBpZiAoaW5kZXggPiBtYXhJbmRleCkge1xuICAgICAgbWF4SW5kZXggPSBpbmRleDtcbiAgICB9XG4gICAgaWYgKGluZGV4IDwgbWluSW5kZXgpIHtcbiAgICAgIG1pbkluZGV4ID0gaW5kZXg7XG4gICAgfVxuICAgIGlmIChtaW5JbmRleCA8IGluZGV4ICYmIGluZGV4IDwgbWF4SW5kZXgpIHtcbiAgICAgIG1heEluZGV4ID0gaW5kZXg7XG4gICAgfVxuICAgIHRoaXMuX3NlbGVjdGVkUm93cy5uZXh0KFsuLi50aGlzLl9kaXNwbGF5RGF0YS52YWx1ZS5zbGljZShtaW5JbmRleCwgbWF4SW5kZXggKyAxKV0pO1xuICB9XG5cbiAgc2VsZWN0Um93KHJvdzogVCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdFR5cGUgPT09IFNlbGVjdFR5cGUubm9uZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9zZWxlY3RlZFJvd3MubmV4dChbLi4udGhpcy5fc2VsZWN0ZWRSb3dzLnZhbHVlLCByb3ddKTtcbiAgfVxuXG4gIGRlc2VsZWN0Um93KHJvdzogVCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdFR5cGUgPT09IFNlbGVjdFR5cGUubm9uZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9zZWxlY3RlZFJvd3MubmV4dChcbiAgICAgIHRoaXMuX3NlbGVjdGVkUm93cy52YWx1ZS5maWx0ZXIoKF8pID0+IF8gIT09IHJvdylcbiAgICApO1xuICB9XG5cbiAgc2VsZWN0QWxsKCkge1xuICAgIHRoaXMuX3NlbGVjdGVkUm93cy5uZXh0KHRoaXMuX2Rpc3BsYXlEYXRhLnZhbHVlKTtcbiAgfVxuXG4gIGRlc2VsZWN0QWxsKCkge1xuICAgIHRoaXMuX3NlbGVjdGVkUm93cy5uZXh0KFtdKTtcbiAgfVxuXG4gIGFsbFJvd3NTZWxlY3RlZCgpOiBib29sZWFuIHwgbnVsbCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5fZGlzcGxheURhdGEudmFsdWU/Lmxlbmd0aCAmJlxuICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dzLnZhbHVlPy5sZW5ndGggJiZcbiAgICAgIHRoaXMuX2Rpc3BsYXlEYXRhLnZhbHVlLmV2ZXJ5KFxuICAgICAgICAoXykgPT4gdGhpcy5fc2VsZWN0ZWRSb3dzLnZhbHVlLmluZGV4T2YoXykgPj0gMFxuICAgICAgKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuX3NlbGVjdGVkUm93cy52YWx1ZSA9PSBudWxsIHx8XG4gICAgICB0aGlzLl9zZWxlY3RlZFJvd3MudmFsdWUubGVuZ3RoID09PSAwXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc2V0SGlkZGVuQ29sdW1ucyh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICB0aGlzLnNhdmVIaWRkZW5Db2x1bW5zKHZhbHVlKTtcbiAgICB0aGlzLl9oaWRkZW5Db2x1bW5zLm5leHQodmFsdWUpO1xuICB9XG5cbiAgY29sdW1uSXNIaWRkZW4oY29sdW1uOiBUYWJsZUNvbHVtbikge1xuICAgIHJldHVybiB0aGlzLl9oaWRkZW5Db2x1bW5zLnZhbHVlLmluZGV4T2YoY29sdW1uLm5hbWUpID49IDA7XG4gIH1cblxuICBjaGFuZ2VWYWx1ZShjb29yZGluYXRlczogSUNlbGxDb29yZGluYXRlcyk6IHZvaWQge1xuICAgIHRoaXMuX3ZhbHVlQ2hhbmdlZC5uZXh0KGNvb3JkaW5hdGVzKTtcbiAgfVxuXG4gIHNldFZhbHVlKGNlbGxWYWx1ZTogSUNlbGxWYWx1ZSk6IHZvaWQ7XG4gIHNldFZhbHVlKGNlbGxWYWx1ZTogSUNlbGxJbnN0YW5jZVZhbHVlPFQ+KTogdm9pZDtcbiAgc2V0VmFsdWUoY2VsbFZhbHVlOiBJQ2VsbFZhbHVlIHwgSUNlbGxJbnN0YW5jZVZhbHVlPFQ+KTogdm9pZCB7XG4gICAgbGV0IHZhbHVlOiBJQ2VsbFZhbHVlO1xuICAgIGlmICh0eXBlb2YgY2VsbFZhbHVlLnJvdyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGNlbGxWYWx1ZS5jb2x1bW4gPT09ICdvYmplY3QnKSB7XG4gICAgICB2YWx1ZSA9IHtcbiAgICAgICAgcm93OiB0aGlzLmdldFJvd0luZGV4KGNlbGxWYWx1ZS5yb3cpLFxuICAgICAgICBjb2x1bW46IGNlbGxWYWx1ZS5jb2x1bW4ubmFtZSxcbiAgICAgICAgdmFsdWU6IGNlbGxWYWx1ZS52YWx1ZVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSBjZWxsVmFsdWUgYXMgSUNlbGxWYWx1ZTtcbiAgICB9XG4gICAgdGhpcy5fdmFsdWVTZXQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBnZXRSb3dCeUluZGV4KHJvd0luZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzcGxheURhdGE/LnZhbHVlW3Jvd0luZGV4XTtcbiAgfVxuXG4gIGdldFJvd0luZGV4KHJvdzogVCkge1xuICAgIHJldHVybiB0aGlzLl9kaXNwbGF5RGF0YS52YWx1ZS5pbmRleE9mKHJvdyk7XG4gIH1cblxuICBnZXRFdmVudENlbGwoZXZlbnQ6IEV2ZW50KTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gZXZlbnQuY29tcG9zZWRQYXRoKCkuZmluZCgodGFyZ2V0OiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgcmV0dXJuIHRhcmdldC50YWdOYW1lPy50b0xvd2VyQ2FzZSgpID09PSAndGV0YS1jZWxsJztcbiAgICB9KSBhcyBIVE1MRWxlbWVudDtcbiAgfVxuXG4gIGdldEV2ZW50Um93KGV2ZW50OiBFdmVudCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIGV2ZW50LmNvbXBvc2VkUGF0aCgpLmZpbmQoKHRhcmdldDogSFRNTEVsZW1lbnQpID0+IHtcbiAgICAgIHJldHVybiB0YXJnZXQ/LmdldEF0dHJpYnV0ZSAmJiB0YXJnZXQ/LmdldEF0dHJpYnV0ZSgnZGF0YS1yb3cnKTtcbiAgICB9KSBhcyBIVE1MRWxlbWVudDtcbiAgfVxuXG4gIGdldE5leHRFZGl0YWJsZUNlbGwoY29vcmRzOiBJQ2VsbENvb3JkaW5hdGVzKTogSUNlbGxDb29yZGluYXRlcyB7XG4gICAgY29uc3QgbmV4dENlbGwgPSB0aGlzLmdldE5leHRDZWxsKGNvb3Jkcyk7XG4gICAgaWYgKCFuZXh0Q2VsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uQnlOYW1lKG5leHRDZWxsPy5jb2x1bW4pO1xuICAgIGlmICh0aGlzLmJvb2xPckZ1bmNDYWxsYmFjazxJQ2VsbEluc3RhbmNlPFQ+Pihjb2x1bW4uZWRpdGFibGUpKHtcbiAgICAgIHJvdzogdGhpcy5nZXRSb3dCeUluZGV4KG5leHRDZWxsLnJvdyksXG4gICAgICBjb2x1bW5cbiAgICB9KSkge1xuICAgICAgcmV0dXJuIG5leHRDZWxsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXROZXh0RWRpdGFibGVDZWxsKG5leHRDZWxsKTtcbiAgfVxuXG4gIGdldFByZXZpb3VzRWRpdGFibGVDZWxsKGNvb3JkczogSUNlbGxDb29yZGluYXRlcyk6IElDZWxsQ29vcmRpbmF0ZXMge1xuICAgIGNvbnN0IHByZXZDZWxsID0gdGhpcy5nZXRQcmV2aW91c0NlbGwoY29vcmRzKTtcbiAgICBpZiAoIXByZXZDZWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5nZXRDb2x1bW5CeU5hbWUocHJldkNlbGw/LmNvbHVtbik7XG4gICAgaWYgKHRoaXMuYm9vbE9yRnVuY0NhbGxiYWNrPElDZWxsSW5zdGFuY2U8VD4+KGNvbHVtbi5lZGl0YWJsZSkoe1xuICAgICAgcm93OiB0aGlzLmdldFJvd0J5SW5kZXgocHJldkNlbGwucm93KSxcbiAgICAgIGNvbHVtblxuICAgIH0pKSB7XG4gICAgICByZXR1cm4gcHJldkNlbGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFByZXZpb3VzRWRpdGFibGVDZWxsKHByZXZDZWxsKTtcbiAgfVxuXG4gIGdldE5leHRDZWxsKGNvb3JkczogSUNlbGxDb29yZGluYXRlcyk6IElDZWxsQ29vcmRpbmF0ZXMge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdldEZsYXRDb2x1bW5zKCk7XG4gICAgbGV0IGNvbEluZGV4ID0gY29sdW1ucy5maW5kSW5kZXgoKGNvbDogVGFibGVDb2x1bW4pID0+IGNvbC5uYW1lID09PSBjb29yZHM/LmNvbHVtbik7XG4gICAgbGV0IHJvd0luZGV4ID0gY29vcmRzPy5yb3c7XG4gICAgaWYgKGNvbEluZGV4ID49IDAgJiYgcm93SW5kZXggPj0gMCkge1xuICAgICAgaWYgKGNvbEluZGV4ID09PSBjb2x1bW5zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgY29sSW5kZXggPSAwO1xuICAgICAgICByb3dJbmRleCA9IHJvd0luZGV4ICsgMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbEluZGV4ID0gY29sSW5kZXggKyAxO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sdW1uOiBjb2x1bW5zW2NvbEluZGV4XT8ubmFtZSxcbiAgICAgICAgcm93OiByb3dJbmRleFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXRQcmV2aW91c0NlbGwoY29vcmRzOiBJQ2VsbENvb3JkaW5hdGVzKTogSUNlbGxDb29yZGluYXRlcyB7XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ2V0RmxhdENvbHVtbnMoKTtcbiAgICBsZXQgY29sSW5kZXggPSBjb2x1bW5zLmZpbmRJbmRleCgoY29sOiBUYWJsZUNvbHVtbikgPT4gY29sLm5hbWUgPT09IGNvb3Jkcz8uY29sdW1uKTtcbiAgICBsZXQgcm93SW5kZXggPSBjb29yZHM/LnJvdztcbiAgICBpZiAoY29sSW5kZXggPj0gMCAmJiByb3dJbmRleCA+PSAwKSB7XG4gICAgICBpZiAoY29sSW5kZXggPT09IDApIHtcbiAgICAgICAgY29sSW5kZXggPSBjb2x1bW5zLmxlbmd0aCAtIDE7XG4gICAgICAgIHJvd0luZGV4ID0gcm93SW5kZXggLSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29sSW5kZXggPSBjb2xJbmRleCAtIDE7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2x1bW46IGNvbHVtbnNbY29sSW5kZXhdPy5uYW1lLFxuICAgICAgICByb3c6IHJvd0luZGV4XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGdldE5leHRSb3dDZWxsKGNvb3JkczogSUNlbGxDb29yZGluYXRlcyk6IElDZWxsQ29vcmRpbmF0ZXMge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdldEZsYXRDb2x1bW5zKCk7XG4gICAgbGV0IGNvbEluZGV4ID0gY29sdW1ucy5maW5kSW5kZXgoKGNvbDogVGFibGVDb2x1bW4pID0+IGNvbC5uYW1lID09PSBjb29yZHM/LmNvbHVtbik7XG4gICAgbGV0IHJvd0luZGV4ID0gY29vcmRzPy5yb3c7XG4gICAgaWYgKGNvbEluZGV4ID49IDAgJiYgcm93SW5kZXggPj0gMCAmJiByb3dJbmRleCA8IHRoaXMuX2Rpc3BsYXlEYXRhLnZhbHVlLmxlbmd0aCAtIDEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbHVtbjogY29sdW1uc1tjb2xJbmRleF0/Lm5hbWUsXG4gICAgICAgIHJvdzogcm93SW5kZXggKyAxXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGdldFByZXZpb3VzUm93Q2VsbChjb29yZHM6IElDZWxsQ29vcmRpbmF0ZXMpIHtcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRGbGF0Q29sdW1ucygpO1xuICAgIGxldCBjb2xJbmRleCA9IGNvbHVtbnMuZmluZEluZGV4KChjb2w6IFRhYmxlQ29sdW1uKSA9PiBjb2wubmFtZSA9PT0gY29vcmRzPy5jb2x1bW4pO1xuICAgIGxldCByb3dJbmRleCA9IGNvb3Jkcz8ucm93O1xuICAgIGlmIChjb2xJbmRleCA+PSAwICYmIHJvd0luZGV4ID4gMSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sdW1uOiBjb2x1bW5zW2NvbEluZGV4XT8ubmFtZSxcbiAgICAgICAgcm93OiByb3dJbmRleCAtIDFcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0Q29sdW1uQnlOYW1lKGNvbHVtbk5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBBcnJheVV0aWwuZmluZFJlY3Vyc2l2ZShcbiAgICAgIHRoaXMuZGlzcGxheUNvbHVtbnMsXG4gICAgICAoaXRlcmFibGVOb2RlKSA9PiBjb2x1bW5OYW1lID09PSBpdGVyYWJsZU5vZGUubmFtZSxcbiAgICAgICdjb2x1bW5zJ1xuICAgICk7XG4gIH1cblxuICBzY3JvbGxUb0luZGV4KGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLl9zY3JvbGxJbmRleC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX3Njcm9sbEluZGV4Lm5leHQoaW5kZXgpO1xuICB9XG5cbiAgYm9vbE9yRnVuY0NhbGxiYWNrPE0+KHZhcmlhYmxlOiBib29sZWFuIHwgKChyb3c6IE0pID0+IGJvb2xlYW4pKSB7XG4gICAgcmV0dXJuIChhcmdzOiBNKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHZhcmlhYmxlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmlzRnVuY3Rpb24odmFyaWFibGUpKSB7XG4gICAgICAgIHJldHVybiAodmFyaWFibGUgYXMgKHJvdzogTSkgPT4gYm9vbGVhbikoYXJncyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9XG5cbiAgZ2V0VmlzaWJsZUNvbHVtbnMoKSB7XG4gICAgY29uc3QgdmlzaWJsZSA9IEFycmF5VXRpbC5mbGF0dGVuKHRoaXMuX2NvbHVtbnMudmFsdWUsICdjb2x1bW5zJywgdHJ1ZSkuZmlsdGVyKFxuICAgICAgKF8pID0+IHRoaXMuX2hpZGRlbkNvbHVtbnMudmFsdWUuaW5kZXhPZihfLm5hbWUpIDwgMFxuICAgICk7XG4gICAgcmV0dXJuIHZpc2libGUuc29ydCgoYSwgYikgPT4gTnVtYmVyKGIubG9ja2VkKSAtIE51bWJlcihhLmxvY2tlZCkpO1xuICB9XG5cbiAgZ2V0Q2VsbEluc3RhbmNlKGNvb3JkczogSUNlbGxDb29yZGluYXRlcyk6IElDZWxsSW5zdGFuY2U8VD4ge1xuICAgIHJldHVybiBjb29yZHMgPyB7XG4gICAgICByb3c6IHRoaXMuZ2V0Um93QnlJbmRleChjb29yZHMucm93KSxcbiAgICAgIGNvbHVtbjogdGhpcy5nZXRDb2x1bW5CeU5hbWUoY29vcmRzLmNvbHVtbilcbiAgICB9IDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmxhdENvbHVtbnMoKSB7XG4gICAgcmV0dXJuIEFycmF5VXRpbC5mbGF0dGVuKHRoaXMuZGlzcGxheUNvbHVtbnMsICdjb2x1bW5zJywgdHJ1ZSkuc29ydChcbiAgICAgIChhLCBiKSA9PiBOdW1iZXIoYi5sb2NrZWQpIC0gTnVtYmVyKGEubG9ja2VkKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGZpbmRQYXJlbnQoXG4gICAgY29sdW1uOiBUYWJsZUNvbHVtbixcbiAgICBjb2x1bW5zOiBUYWJsZUNvbHVtbltdXG4gICk6IFRhYmxlQ29sdW1uW10gfCBudWxsIHtcbiAgICBjb25zdCBmb3VuZCA9IGNvbHVtbnMuZmluZCgoeCkgPT4geC5uYW1lID09PSBjb2x1bW4ubmFtZSk7XG4gICAgaWYgKGZvdW5kICE9PSBudWxsICYmIGZvdW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjb2x1bW5zO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IGNvbHVtbnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBjb25zdCBjb2wgPSBjb2x1bW5zW2ldO1xuICAgICAgaWYgKGNvbC5jb2x1bW5zICYmIGNvbC5jb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmZpbmRQYXJlbnQoY29sdW1uLCBjb2wuY29sdW1ucyk7XG4gICAgICAgIGlmIChyZXN1bHQgIT09IG51bGwgJiYgcmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kUGFyZW50Q29sdW1uKFxuICAgIGNvbHVtbjogVGFibGVDb2x1bW4sXG4gICAgY29sdW1uczogVGFibGVDb2x1bW5bXVxuICApOiBUYWJsZUNvbHVtbiB8IG51bGwge1xuICAgIGNvbnN0IGZvdW5kID0gY29sdW1ucy5maW5kKCh4KSA9PiB4LmNvbHVtbnMuaW5kZXhPZihjb2x1bW4pID49IDApO1xuICAgIGlmIChmb3VuZCAhPT0gbnVsbCAmJiBmb3VuZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZm91bmQ7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwLCBsID0gY29sdW1ucy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGNvbnN0IGNvbCA9IGNvbHVtbnNbaV07XG4gICAgICBpZiAoY29sLmNvbHVtbnMgJiYgY29sLmNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZmluZFBhcmVudENvbHVtbihjb2x1bW4sIGNvbC5jb2x1bW5zKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCAmJiByZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXRUYWJsZUVsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICByZXR1cm4gZWxlbWVudC5jbG9zZXN0KCd0ZXRhLXRhYmxlJyk7XG4gIH1cblxuICBwcml2YXRlIGlzRnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICByZXR1cm4gISEob2JqICYmIG9iaj8uY29uc3RydWN0b3IgJiYgb2JqPy5jYWxsICYmIG9iaj8uYXBwbHkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb2x1bW5BdXRvV2lkdGgoY29sdW1uOiBUYWJsZUNvbHVtbiwgdGFibGU6IEhUTUxFbGVtZW50KSB7XG4gICAgY29uc3QgY2VsbHMgPSB0YWJsZS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYHRldGEtY2VsbFtkYXRhLWNvbHVtbj1cIiR7Y29sdW1uLm5hbWV9XCJdIC5jZWxsLXRleHRgXG4gICAgKTtcbiAgICBsZXQgbWF4V2lkdGggPSAwO1xuICAgIGNlbGxzLmZvckVhY2goKGNlbGwpID0+IHtcbiAgICAgIGlmIChjZWxsLnNjcm9sbFdpZHRoID4gbWF4V2lkdGgpIHtcbiAgICAgICAgbWF4V2lkdGggPSBjZWxsLnNjcm9sbFdpZHRoO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGFnZ0NlbGxzID0gdGFibGUucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuYWdncmVnYXRlLWNlbGxbZGF0YS1jb2x1bW49XCIke2NvbHVtbi5uYW1lfVwiXSAuY2VsbC10ZXh0YFxuICAgICk7XG4gICAgYWdnQ2VsbHM/LmZvckVhY2goKGNlbGwpID0+IHtcbiAgICAgIGlmIChjZWxsLnNjcm9sbFdpZHRoID4gbWF4V2lkdGgpIHtcbiAgICAgICAgbWF4V2lkdGggPSBjZWxsLnNjcm9sbFdpZHRoO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbHVtbi5mbGV4ID0gMDtcbiAgICBjb2x1bW4ud2lkdGggPSBtYXhXaWR0aCArIDIwO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclZhbHVlKGV2ZW50OiBJQ2VsbEV2ZW50KSB7XG4gICAgdGhpcy5zZXRWYWx1ZSh7XG4gICAgICAuLi5ldmVudCxcbiAgICAgIHZhbHVlOiBudWxsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
701
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvdGFibGUvc2VydmljZS90YWJsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxVQUFVLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSTVELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM1RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDakUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNoRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQU90RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFFB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QUFDO0lBRUQ7UUFDRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDNUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzlDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVB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Q0FBQyxXQUFXLEdBQUcsUUFBUSxFQUFFO2dCQUMvQixRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQzthQUM3QjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7UUFDaEIsTUFBTSxDQUFDLEtBQUssR0FBRyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFTyxVQUFVLENBQUMsS0FBaUI7UUFDbEMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNaLEdBQUcsS0FBSztZQUNSLEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt1R0FqMEJVLFlBQVk7MkdBQVosWUFBWSxjQUZYLE1BQU07OzJGQUVQLFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IG9iamVjdEhhc2ggZnJvbSAnb2JqZWN0LWhhc2gnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IElEaWN0aW9uYXJ5IH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2NvbnRyYWN0L2ktZGljdGlvbmFyeSc7XG5pbXBvcnQgeyBJSWROYW1lIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2NvbnRyYWN0L2ktaWQtbmFtZSc7XG5pbXBvcnQgeyBBcnJheVV0aWwgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vdXRpbC9hcnJheS11dGlsJztcbmltcG9ydCB7IERhdGVVdGlsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9kYXRlLXV0aWwnO1xuaW1wb3J0IHsgRGF0ZUZpbHRlciB9IGZyb20gJy4uLy4uL2ZpbHRlci9jb250YXJjdC9kYXRlLWZpbHRlcic7XG5pbXBvcnQgeyBEYXRlRmlsdGVyVmFsdWUgfSBmcm9tICcuLi8uLi9maWx0ZXIvY29udGFyY3QvZGF0ZS1maWx0ZXItdmFsdWUnO1xuaW1wb3J0IHsgRmlsdGVyU3RhdGUgfSBmcm9tICcuLi8uLi9maWx0ZXIvY29udGFyY3QvZmlsdGVyLXN0YXRlJztcbmltcG9ydCB7IExpc3RGaWx0ZXIgfSBmcm9tICcuLi8uLi9maWx0ZXIvY29udGFyY3QvbGlzdC1maWx0ZXInO1xuaW1wb3J0IHsgTnVtZXJpY0ZpbHRlciB9IGZyb20gJy4uLy4uL2ZpbHRlci9jb250YXJjdC9udW1lcmljLWZpbHRlcic7XG5pbXBvcnQgeyBOdW1lcmljRmlsdGVyVmFsdWUgfSBmcm9tICcuLi8uLi9maWx0ZXIvY29udGFyY3QvbnVtZXJpYy1maWx0ZXItdmFsdWUnO1xuaW1wb3J0IHsgU3RyaW5nRmlsdGVyIH0gZnJvbSAnLi4vLi4vZmlsdGVyL2NvbnRhcmN0L3N0cmluZy1maWx0ZXInO1xuaW1wb3J0IHsgRmlsdGVyVHlwZSB9IGZyb20gJy4uLy4uL2ZpbHRlci9lbnVtL2ZpbHRlci10eXBlLmVudW0nO1xuaW1wb3J0IHsgTGlzdEZpbHRlclR5cGUgfSBmcm9tICcuLi8uLi9maWx0ZXIvZW51bS9saXN0LWZpbHRlci10eXBlLmVudW0nO1xuaW1wb3J0IHsgQ29sdW1uUmVvcmRlckV2ZW50IH0gZnJvbSAnLi4vY29udHJhY3QvY29sdW1uLXJlb3JkZXItZXZlbnQnO1xuaW1wb3J0IHsgQ29sdW1uUmVzaXplRXZlbnQgfSBmcm9tICcuLi9jb250cmFjdC9jb2x1bW4tcmVzaXplLWV2ZW50JztcbmltcG9ydCB7IElDZWxsQ29vcmRpbmF0ZXMgfSBmcm9tICcuLi9jb250cmFjdC9pLWNlbGwtY29vcmRpbmF0ZXMnO1xuaW1wb3J0IHsgSUNlbGxFdmVudCB9IGZyb20gJy4uL2NvbnRyYWN0L2ktY2VsbC1ldmVudCc7XG5pbXBvcnQgeyBJQ2VsbEluc3RhbmNlLCBJQ2VsbEluc3RhbmNlVmFsdWUgfSBmcm9tICcuLi9jb250cmFjdC9pLWNlbGwtaW5zdGFuY2UnO1xuaW1wb3J0IHsgSUNlbGxWYWx1ZSB9IGZyb20gJy4uL2NvbnRyYWN0L2ktY2VsbC12YWx1ZSc7XG5pbXBvcnQgeyBTb3J0RXZlbnQgfSBmcm9tICcuLi9jb250cmFjdC9zb3J0LWV2ZW50JztcbmltcG9ydCB7IFRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vY29udHJhY3QvdGFibGUtY29sdW1uJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uU3RvcmUgfSBmcm9tICcuLi9jb250cmFjdC90YWJsZS1jb2x1bW4tc3RvcmUnO1xuaW1wb3J0IHsgVGFibGVSb3cgfSBmcm9tICcuLi9jb250cmFjdC90YWJsZS1yb3cnO1xuaW1wb3J0IHsgRWRpdEV2ZW50IH0gZnJvbSAnLi4vZW51bS9lZGl0LWV2ZW50LmVudW0nO1xuaW1wb3J0IHsgRWRpdFR5cGUgfSBmcm9tICcuLi9lbnVtL2VkaXQtdHlwZS5lbnVtJztcbmltcG9ydCB7IFNlbGVjdFR5cGUgfSBmcm9tICcuLi9lbnVtL3NlbGVjdC10eXBlLmVudW0nO1xuaW1wb3J0IHsgU3RhdGVVdGlsIH0gZnJvbSAnLi4vdXRpbC9zdGF0ZS11dGlsJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlU2VydmljZTxUPiB7XG4gIGNvbHVtbnM6IE9ic2VydmFibGU8VGFibGVDb2x1bW5bXT47XG4gIGRpc3BsYXlEYXRhOiBPYnNlcnZhYmxlPFRhYmxlUm93PFQ+W10+O1xuICBkaWN0OiBPYnNlcnZhYmxlPElEaWN0aW9uYXJ5PElJZE5hbWU8YW55PltdPj47XG4gIGZpbHRlck9wdGlvbnM6IE9ic2VydmFibGU8SURpY3Rpb25hcnk8SUlkTmFtZTxhbnk+W10+PjtcbiAgc3RhdGU6IE9ic2VydmFibGU8RmlsdGVyU3RhdGU+O1xuICBzZWxlY3RUeXBlOiBTZWxlY3RUeXBlID0gU2VsZWN0VHlwZS5tb3VzZTtcbiAgZWRpdFJvd1N0YXJ0OiBPYnNlcnZhYmxlPElDZWxsRXZlbnQgfCBudWxsPjtcbiAgZWRpdFJvd1N0b3A6IE9ic2VydmFibGU8SUNlbGxDb29yZGluYXRlcyB8IG51bGw+O1xuICBlZGl0Q2VsbFN0YXJ0OiBPYnNlcnZhYmxlPElDZWxsRXZlbnQgfCBudWxsPjtcbiAgZWRpdENlbGxTdG9wOiBPYnNlcnZhYmxlPElDZWxsQ29vcmRpbmF0ZXMgfCBudWxsPjtcbiAgdmFsdWVDaGFuZ2VkOiBPYnNlcnZhYmxlPElDZWxsQ29vcmRpbmF0ZXMgfCBudWxsPjtcbiAgdmFsdWVTZXQ6IE9ic2VydmFibGU8SUNlbGxWYWx1ZT47XG4gIHN0YXRlQ2hhbmdlZDogT2JzZXJ2YWJsZTxGaWx0ZXJTdGF0ZT47XG4gIGZpbHRlckNsZWFyOiBPYnNlcnZhYmxlPFRhYmxlQ29sdW1uPjtcbiAgc2VsZWN0ZWRSb3dzOiBPYnNlcnZhYmxlPFRbXT47XG4gIGFjdGl2ZVJvdzogT2JzZXJ2YWJsZTxUIHwgbnVsbD47XG4gIGhpZGRlbkNvbHVtbnM6IE9ic2VydmFibGU8c3RyaW5nW10+O1xuICBzY3JvbGxJbmRleDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuXG4gIGVkaXRUeXBlOiBFZGl0VHlwZSA9IEVkaXRUeXBlLmNlbGw7XG4gIGVkaXRFdmVudDogRWRpdEV2ZW50ID0gRWRpdEV2ZW50LmRvdWJsZUNsaWNrO1xuICByb3dFZGl0YWJsZT86IGJvb2xlYW4gfCAoKHJvdzogVCkgPT4gYm9vbGVhbik7XG4gIHRyYWNrUm93OiAoaW5kZXg6IG51bWJlciwgcm93OiBUKSA9PiBhbnkgPSAoaW5kZXg6IG51bWJlciwgcm93OiBUKSA9PiB7XG4gICAgY29uc3Qgcm93SWQgPSAocm93IGFzIGFueSlbJ2lkJ107XG4gICAgaWYgKHJvd0lkKSB7XG4gICAgICByZXR1cm4gcm93SWQ7XG4gICAgfVxuICAgIHJldHVybiBpbmRleDtcbiAgfTtcblxuICBnZXQgZHJhZ1NvdXJjZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZHJhZ1NvdXJjZTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbENvbHVtbnNIYXNoID0gJyc7XG4gIHByaXZhdGUgaW5pdGlhbENvbHVtbnM6IFRhYmxlQ29sdW1uW10gPSBbXTtcbiAgcHJpdmF0ZSBkaXNwbGF5Q29sdW1uczogVGFibGVDb2x1bW5bXSA9IFtdO1xuICBwcml2YXRlIF9jb2x1bW5zOiBCZWhhdmlvclN1YmplY3Q8VGFibGVDb2x1bW5bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRhYmxlQ29sdW1uW11cbiAgPihbXSk7XG4gIHByaXZhdGUgX2hpZGRlbkNvbHVtbnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPihbXSk7XG4gIHByaXZhdGUgX2Rpc3BsYXlEYXRhOiBCZWhhdmlvclN1YmplY3Q8VGFibGVSb3c8VD5bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRhYmxlUm93PFQ+W11cbiAgPihbXSk7XG4gIHByaXZhdGUgX2RpY3Q6IEJlaGF2aW9yU3ViamVjdDxJRGljdGlvbmFyeTxJSWROYW1lPGFueT5bXT4+ID1cbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PElEaWN0aW9uYXJ5PElJZE5hbWU8YW55PltdPj4oe30pO1xuICBwcml2YXRlIF9maWx0ZXJPcHRpb25zOiBCZWhhdmlvclN1YmplY3Q8SURpY3Rpb25hcnk8SUlkTmFtZTxhbnk+W10+PiA9XG4gICAgbmV3IEJlaGF2aW9yU3ViamVjdDxJRGljdGlvbmFyeTxJSWROYW1lPGFueT5bXT4+KHt9KTtcbiAgcHJpdmF0ZSBfc3RhdGU6IEJlaGF2aW9yU3ViamVjdDxGaWx0ZXJTdGF0ZT4gPVxuICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8RmlsdGVyU3RhdGU+KG5ldyBGaWx0ZXJTdGF0ZSgpKTtcbiAgcHJpdmF0ZSBfY29va2llTmFtZT86IHN0cmluZztcbiAgcHJpdmF0ZSBfaGlkZGVuQ29va2llTmFtZT86IHN0cmluZztcbiAgcHJpdmF0ZSBfY29sdW1uc0Nvb2tpZU5hbWU/OiBzdHJpbmc7XG4gIHByaXZhdGUgX2VkaXRSb3dTdGFydCA9IG5ldyBTdWJqZWN0PElDZWxsRXZlbnQgfCBudWxsPigpO1xuICBwcml2YXRlIF9lZGl0Um93U3RvcCA9IG5ldyBTdWJqZWN0PElDZWxsQ29vcmRpbmF0ZXMgfCBudWxsPigpO1xuICBwcml2YXRlIF9lZGl0Q2VsbFN0YXJ0ID0gbmV3IFN1YmplY3Q8SUNlbGxFdmVudCB8IG51bGw+KCk7XG4gIHByaXZhdGUgX2VkaXRDZWxsU3RvcCA9IG5ldyBTdWJqZWN0PElDZWxsQ29vcmRpbmF0ZXMgfCBudWxsPigpO1xuICBwcml2YXRlIF92YWx1ZUNoYW5nZWQgPSBuZXcgU3ViamVjdDxJQ2VsbENvb3JkaW5hdGVzIHwgbnVsbD4oKTtcbiAgcHJpdmF0ZSBfdmFsdWVTZXQgPSBuZXcgU3ViamVjdDxJQ2VsbFZhbHVlPigpO1xuICBwcml2YXRlIF9zdGF0ZUNoYW5nZWQgPSBuZXcgU3ViamVjdDxGaWx0ZXJTdGF0ZT4oKTtcbiAgcHJpdmF0ZSBfZmlsdGVyQ2xlYXIgPSBuZXcgU3ViamVjdDxUYWJsZUNvbHVtbj4oKTtcbiAgcHJpdmF0ZSBfZHJhZ1NvdXJjZT86IFRhYmxlQ29sdW1uO1xuICBwcml2YXRlIF9zZWxlY3RlZFJvd3MgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRbXT4oW10pO1xuICBwcml2YXRlIF9hY3RpdmVSb3cgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFQgfCBudWxsPihudWxsKTtcbiAgcHJpdmF0ZSBfc2Nyb2xsSW5kZXggPSBuZXcgU3ViamVjdDxudW1iZXIgfCBudWxsPigpO1xuXG4gIHByaXZhdGUgX2N1cnJlbnRFZGl0Q2VsbD86IElDZWxsQ29vcmRpbmF0ZXM7XG5cbiAgZ2V0IGN1cnJlbnRFZGl0Q2VsbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEVkaXRDZWxsO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb2x1bW5zID0gdGhpcy5fY29sdW1ucy5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmRpc3BsYXlEYXRhID0gdGhpcy5fZGlzcGxheURhdGEuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5kaWN0ID0gdGhpcy5fZGljdC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmZpbHRlck9wdGlvbnMgPSB0aGlzLl9maWx0ZXJPcHRpb25zLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuc3RhdGUgPSB0aGlzLl9zdGF0ZS5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmVkaXRSb3dTdGFydCA9IHRoaXMuX2VkaXRSb3dTdGFydC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmVkaXRSb3dTdG9wID0gdGhpcy5fZWRpdFJvd1N0b3AuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5lZGl0Q2VsbFN0YXJ0ID0gdGhpcy5fZWRpdENlbGxTdGFydC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmVkaXRDZWxsU3RvcCA9IHRoaXMuX2VkaXRDZWxsU3RvcC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlZCA9IHRoaXMuX3ZhbHVlQ2hhbmdlZC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLnZhbHVlU2V0ID0gdGhpcy5fdmFsdWVTZXQuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZWQgPSB0aGlzLl9zdGF0ZUNoYW5nZWQuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5maWx0ZXJDbGVhciA9IHRoaXMuX2ZpbHRlckNsZWFyLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gdGhpcy5fc2VsZWN0ZWRSb3dzLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuYWN0aXZlUm93ID0gdGhpcy5fYWN0aXZlUm93LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuaGlkZGVuQ29sdW1ucyA9IHRoaXMuX2hpZGRlbkNvbHVtbnMuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5zY3JvbGxJbmRleCA9IHRoaXMuX3Njcm9sbEluZGV4LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgc2V0RGF0YShkYXRhOiBUW10pOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwbGF5RGF0YS5uZXh0KFxuICAgICAgZGF0YT8ubWFwKFxuICAgICAgICBpdGVtID0+XG4gICAgICAgICAgbmV3IFRhYmxlUm93PFQ+KHtcbiAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgfSlcbiAgICAgICkgPz8gW11cbiAgICApO1xuICB9XG5cbiAgc2V0RGljdChkaWN0OiBJRGljdGlvbmFyeTxJSWROYW1lPGFueT5bXT4pOiB2b2lkIHtcbiAgICB0aGlzLl9kaWN0Lm5leHQoZGljdCk7XG4gIH1cblxuICBzZXRGaWx0ZXJPcHRpb25zKGZpbHRlck9wdGlvbnM6IElEaWN0aW9uYXJ5PElJZE5hbWU8YW55PltdPik6IHZvaWQge1xuICAgIHRoaXMuX2ZpbHRlck9wdGlvbnMubmV4dChmaWx0ZXJPcHRpb25zKTtcbiAgfVxuXG4gIHNldENvbHVtbnMoY29sdW1uczogVGFibGVDb2x1bW5bXSk6IHZvaWQge1xuICAgIHRoaXMuaW5pdGlhbENvbHVtbnMgPSBjb2x1bW5zID8gY29sdW1ucy5tYXAoXyA9PiBuZXcgVGFibGVDb2x1bW4oXykpIDogW107XG4gICAgY29uc3QgZXhjbHVkZUtleXMgPSBbXG4gICAgICAnZWRpdGFibGUnLFxuICAgICAgJ2NlbGxDb21wb25lbnQnLFxuICAgICAgJ2hlYWRDZWxsQ29tcG9uZW50JyxcbiAgICAgICdoZWFkRHJvcGRvd25Db25maWcnLFxuICAgIF07XG4gICAgdGhpcy5pbml0aWFsQ29sdW1uc0hhc2ggPSBvYmplY3RIYXNoKHRoaXMuaW5pdGlhbENvbHVtbnMsIHtcbiAgICAgIGFsZ29yaXRobTogJ3NoYTEnLFxuICAgICAgaWdub3JlVW5rbm93bjogdHJ1ZSxcbiAgICAgIGV4Y2x1ZGVLZXlzOiAoa2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIGV4Y2x1ZGVLZXlzLmluZGV4T2Yoa2V5KSA+PSAwO1xuICAgICAgfSxcbiAgICB9KTtcbiAgICBjb25zdCByZXN0b3JlZCA9IHRoaXMucmVzdG9yZUNvbHVtbnMoKTtcblxuICAgIGlmIChyZXN0b3JlZCkge1xuICAgICAgdGhpcy5zZXREaXNwbGF5Q29sdW1ucyhyZXN0b3JlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0RGlzcGxheUNvbHVtbnModGhpcy5pbml0aWFsQ29sdW1ucyk7XG4gICAgfVxuICB9XG5cbiAgcmVzdG9yZURlZmF1bHRDb2x1bW5zKCkge1xuICAgIHRoaXMuc2V0RGlzcGxheUNvbHVtbnModGhpcy5pbml0aWFsQ29sdW1ucyk7XG4gICAgdGhpcy5jbGVhckNvbHVtbnNTdGF0ZSgpO1xuICB9XG5cbiAgdXBkYXRlQ29sdW1ucyhjb2x1bW5zOiBUYWJsZUNvbHVtbltdKTogdm9pZCB7XG4gICAgdGhpcy5zZXREaXNwbGF5Q29sdW1ucyhjb2x1bW5zKTtcbiAgICB0aGlzLnNhdmVDb2x1bW5zU3RhdGUoKTtcbiAgfVxuXG4gIHNhdmVDb2x1bW5zU3RhdGUoKSB7XG4gICAgaWYgKHRoaXMuX2NvbHVtbnNDb29raWVOYW1lKSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgICAgdGhpcy5fY29sdW1uc0Nvb2tpZU5hbWUsXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBoYXNoOiB0aGlzLmluaXRpYWxDb2x1bW5zSGFzaCxcbiAgICAgICAgICBjb2x1bW5zOiB0aGlzLmRpc3BsYXlDb2x1bW5zLm1hcChfID0+IG5ldyBUYWJsZUNvbHVtblN0b3JlKF8pKSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJDb2x1bW5zU3RhdGUoKSB7XG4gICAgaWYgKHRoaXMuX2NvbHVtbnNDb29raWVOYW1lKSB7XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLl9jb2x1bW5zQ29va2llTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgc2V0RGlzcGxheUNvbHVtbnMoY29sdW1uczogVGFibGVDb2x1bW5bXSk6IHZvaWQge1xuICAgIHRoaXMuZGlzcGxheUNvbHVtbnMgPSBjb2x1bW5zID8gY29sdW1ucy5tYXAoXyA9PiBuZXcgVGFibGVDb2x1bW4oXykpIDogW107XG4gICAgdGhpcy5fY29sdW1ucy5uZXh0KHRoaXMuZGlzcGxheUNvbHVtbnMpO1xuICB9XG5cbiAgcmVzdG9yZUNvbHVtbnMoKSB7XG4gICAgaWYgKHRoaXMuX2NvbHVtbnNDb29raWVOYW1lKSB7XG4gICAgICBjb25zdCBzYXZlZENvbHVtbnMgPSBKU09OLnBhcnNlKFxuICAgICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLl9jb2x1bW5zQ29va2llTmFtZSlcbiAgICAgICk7XG4gICAgICBpZiAoc2F2ZWRDb2x1bW5zICYmIHNhdmVkQ29sdW1ucy5oYXNoID09PSB0aGlzLmluaXRpYWxDb2x1bW5zSGFzaCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXN0b3JlQ29sdW1uc1N0YXRlKHNhdmVkQ29sdW1ucy5jb2x1bW5zKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXN0b3JlQ29sdW1uc1N0YXRlKGNvbHVtbnM6IFRhYmxlQ29sdW1uU3RvcmVbXSkge1xuICAgIHJldHVybiBjb2x1bW5zLm1hcCgoY29sdW1uOiBUYWJsZUNvbHVtblN0b3JlKSA9PiB7XG4gICAgICBjb25zdCBmb3VuZCA9IEFycmF5VXRpbC5maW5kUmVjdXJzaXZlKFxuICAgICAgICB0aGlzLmluaXRpYWxDb2x1bW5zLFxuICAgICAgICBpdGVtID0+IGl0ZW0ubmFtZSA9PT0gY29sdW1uLm5hbWUsXG4gICAgICAgICdjb2x1bW5zJ1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlc3VsdENvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbihmb3VuZCk7XG4gICAgICByZXN1bHRDb2x1bW4ud2lkdGggPSBjb2x1bW4ud2lkdGg7XG4gICAgICByZXN1bHRDb2x1bW4uZmxleCA9IGNvbHVtbi5mbGV4O1xuICAgICAgcmVzdWx0Q29sdW1uLmxvY2tlZCA9IGNvbHVtbi5sb2NrZWQ7XG4gICAgICBpZiAoY29sdW1uLmNvbHVtbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVzdWx0Q29sdW1uLmNvbHVtbnMgPSB0aGlzLnJlc3RvcmVDb2x1bW5zU3RhdGUoY29sdW1uLmNvbHVtbnMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdENvbHVtbjtcbiAgICB9KTtcbiAgfVxuXG4gIHNldFN0YXRlKHN0YXRlOiBGaWx0ZXJTdGF0ZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jb29raWVOYW1lKSB7XG4gICAgICBzdGF0ZS5zYXZlKHRoaXMuX2Nvb2tpZU5hbWUpO1xuICAgIH1cbiAgICB0aGlzLl9zdGF0ZS5uZXh0KHN0YXRlKTtcbiAgfVxuXG4gIHNldENvb2tpZU5hbWUobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fY29va2llTmFtZSA9IG5hbWU7XG4gICAgdGhpcy5faGlkZGVuQ29va2llTmFtZSA9IGAke3RoaXMuX2Nvb2tpZU5hbWV9X2hpZGRlbl9jb2x1bW5zYDtcbiAgICB0aGlzLl9jb2x1bW5zQ29va2llTmFtZSA9IGAke3RoaXMuX2Nvb2tpZU5hbWV9X2NvbHVtbnNgO1xuICB9XG5cbiAgcmVzdG9yZVN0YXRlKCk6IHZvaWQge1xuICAgIGxldCBzdGF0ZTogRmlsdGVyU3RhdGU7XG4gICAgaWYgKFxuICAgICAgdGhpcy5fY29va2llTmFtZSAmJlxuICAgICAgdGhpcy5fY29va2llTmFtZT8ubGVuZ3RoID4gMCAmJlxuICAgICAgRmlsdGVyU3RhdGUucmVzdG9yZSh0aGlzLl9jb29raWVOYW1lKVxuICAgICkge1xuICAgICAgbGV0IG5ld1N0YXRlID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgdGhpcy5fc3RhdGUudmFsdWUsXG4gICAgICAgIEZpbHRlclN0YXRlLnJlc3RvcmUodGhpcy5fY29va2llTmFtZSlcbiAgICAgICk7XG4gICAgICBuZXdTdGF0ZSA9IERhdGVVdGlsLmNvbnZlcnREYXRlU3RyaW5nc1RvRGF0ZXMobmV3U3RhdGUpO1xuICAgICAgc3RhdGUgPSBuZXcgRmlsdGVyU3RhdGUobmV3U3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZSA9IG5ldyBGaWx0ZXJTdGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKHN0YXRlKTtcbiAgfVxuXG4gIHNhdmVIaWRkZW5Db2x1bW5zKGhpZGRlbkNvbHVtbnM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2hpZGRlbkNvb2tpZU5hbWUpIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgICB0aGlzLl9oaWRkZW5Db29raWVOYW1lLFxuICAgICAgICBKU09OLnN0cmluZ2lmeShoaWRkZW5Db2x1bW5zKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXN0b3JlSGlkZGVuQ29sdW1ucygpOiB2b2lkIHtcbiAgICBjb25zdCBoaWRkZW5Db2x1bW5zID1cbiAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuX2hpZGRlbkNvb2tpZU5hbWUgPz8gJycpIHx8ICdbXSc7XG4gICAgdGhpcy5faGlkZGVuQ29sdW1ucy5uZXh0KEpTT04ucGFyc2UoaGlkZGVuQ29sdW1ucykpO1xuICB9XG5cbiAgc29ydEFzYyhzb3J0RXZlbnQ6IFNvcnRFdmVudCk6IHZvaWQge1xuICAgIGlmIChzb3J0RXZlbnQuY29sdW1uLnNvcnRhYmxlKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKFN0YXRlVXRpbC5zb3J0QXNjKHNvcnRFdmVudCwgdGhpcy5fc3RhdGUudmFsdWUpKTtcbiAgICB9XG4gIH1cblxuICBzb3J0RGVzYyhzb3J0RXZlbnQ6IFNvcnRFdmVudCk6IHZvaWQge1xuICAgIGlmIChzb3J0RXZlbnQuY29sdW1uLnNvcnRhYmxlKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKFN0YXRlVXRpbC5zb3J0RGVzYyhzb3J0RXZlbnQsIHRoaXMuX3N0YXRlLnZhbHVlKSk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJTb3J0KGNvbHVtbjogVGFibGVDb2x1bW4pOiB2b2lkIHtcbiAgICB0aGlzLnNldFN0YXRlKFN0YXRlVXRpbC5jbGVhclNvcnQoY29sdW1uLCB0aGlzLl9zdGF0ZS52YWx1ZSkpO1xuICB9XG5cbiAgY2xlYXJBbGxTb3J0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0U3RhdGUoU3RhdGVVdGlsLmNsZWFyQWxsU29ydCh0aGlzLl9zdGF0ZS52YWx1ZSkpO1xuICB9XG5cbiAgY2xlYXJGaWx0ZXIoY29sdW1uOiBUYWJsZUNvbHVtbikge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fc3RhdGUudmFsdWU7XG4gICAgaWYgKGNvbHVtbiAhPT0gbnVsbCAmJiBjb2x1bW4gIT09IHVuZGVmaW5lZCAmJiBjb2x1bW4uZmlsdGVyYWJsZSkge1xuICAgICAgc3dpdGNoIChjb2x1bW4uZmlsdGVyVHlwZSkge1xuICAgICAgICBjYXNlIEZpbHRlclR5cGUuZGF0ZTpcbiAgICAgICAgICBzdGF0ZS5hZGREYXRlRmlsdGVyKFxuICAgICAgICAgICAgbmV3IERhdGVGaWx0ZXIoe1xuICAgICAgICAgICAgICBuYW1lOiBjb2x1bW4ubmFtZSxcbiAgICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5maWx0ZXJGaWVsZCxcbiAgICAgICAgICAgICAgdmFsdWU6IG5ldyBEYXRlRmlsdGVyVmFsdWUoKSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBGaWx0ZXJUeXBlLnN0cmluZzpcbiAgICAgICAgICBzdGF0ZS5hZGRTdHJpbmdGaWx0ZXIoXG4gICAgICAgICAgICBuZXcgU3RyaW5nRmlsdGVyKHtcbiAgICAgICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4uZmlsdGVyRmllbGQsXG4gICAgICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBGaWx0ZXJUeXBlLm51bWJlcjpcbiAgICAgICAgICBzdGF0ZS5hZGROdW1lcmljRmlsdGVyKFxuICAgICAgICAgICAgbmV3IE51bWVyaWNGaWx0ZXIoe1xuICAgICAgICAgICAgICBuYW1lOiBjb2x1bW4ubmFtZSxcbiAgICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5maWx0ZXJGaWVsZCxcbiAgICAgICAgICAgICAgdmFsdWU6IG5ldyBOdW1lcmljRmlsdGVyVmFsdWUoKSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBGaWx0ZXJUeXBlLmxpc3Q6XG4gICAgICAgICAgc3RhdGUuYWRkTGlzdEZpbHRlcihcbiAgICAgICAgICAgIG5ldyBMaXN0RmlsdGVyKHtcbiAgICAgICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4uZmlsdGVyRmllbGQsXG4gICAgICAgICAgICAgIHZhbHVlOiBbXSxcbiAgICAgICAgICAgICAgdHlwZTogTGlzdEZpbHRlclR5cGUuTm9uZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUobmV3IEZpbHRlclN0YXRlKHN0YXRlKSk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJBbGxGaWx0ZXJzKCkge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fc3RhdGUudmFsdWU7XG4gICAgc3RhdGUuc3RyaW5nRmlsdGVycyA9IFtdO1xuICAgIHN0YXRlLmxpc3RGaWx0ZXJzID0gW107XG4gICAgc3RhdGUubnVtZXJpY0ZpbHRlcnMgPSBbXTtcbiAgICBzdGF0ZS5kYXRlRmlsdGVycyA9IFtdO1xuICAgIHRoaXMuc2V0U3RhdGUobmV3IEZpbHRlclN0YXRlKHN0YXRlKSk7XG4gIH1cblxuICBwaW5Db2x1bW4oY29sdW1uOiBUYWJsZUNvbHVtbik6IHZvaWQge1xuICAgIHRoaXMuZGlzcGxheUNvbHVtbnMuZm9yRWFjaCgoY29sOiBUYWJsZUNvbHVtbikgPT4ge1xuICAgICAgaWYgKGNvbC5uYW1lID09PSBjb2x1bW4ubmFtZSkge1xuICAgICAgICBjb2wubG9ja2VkID0gIWNvbC5sb2NrZWQ7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVDb2x1bW5zKHRoaXMuZGlzcGxheUNvbHVtbnMpO1xuICB9XG5cbiAgZHJhZ1N0YXJ0KGNvbHVtbjogVGFibGVDb2x1bW4pOiB2b2lkIHtcbiAgICB0aGlzLl9kcmFnU291cmNlID0gY29sdW1uO1xuICB9XG5cbiAgbG9ja1ByZXZpb3VzQ29sdW1ucyhjb2x1bW46IFRhYmxlQ29sdW1uLCBlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIGNvbnN0IGZsYXQgPSBBcnJheVV0aWwuZmxhdHRlbih0aGlzLmRpc3BsYXlDb2x1bW5zLCAnY29sdW1ucycsIHRydWUpLnNvcnQoXG4gICAgICAoYSwgYikgPT4gTnVtYmVyKGIubG9ja2VkKSAtIE51bWJlcihhLmxvY2tlZClcbiAgICApO1xuICAgIGNvbnN0IGluZGV4ID0gZmxhdC5pbmRleE9mKGNvbHVtbik7XG4gICAgY29uc3QgcHJldmlvdXMgPSBmbGF0LnNsaWNlKDAsIGluZGV4KS5maWx0ZXIoXyA9PiBfLmZsZXggPiAwKTtcbiAgICBpZiAocHJldmlvdXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHRhYmxlRWxlbWVudCA9IHRoaXMuZ2V0VGFibGVFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgcHJldmlvdXMuZm9yRWFjaCgoaXRlbTogVGFibGVDb2x1bW4pID0+IHtcbiAgICAgICAgY29uc3QgaXRlbUNvbCA9IHRhYmxlRWxlbWVudD8ucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICBgdGV0YS1oZWFkLWNlbGxbZGF0YS1jb2x1bW49XCIke2l0ZW0ubmFtZX1cIl1gXG4gICAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmIChpdGVtQ29sKSB7XG4gICAgICAgICAgaXRlbS5mbGV4ID0gMDtcbiAgICAgICAgICBpdGVtLndpZHRoID0gaXRlbUNvbC5jbGllbnRXaWR0aDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmVzaXplQ29sdW1uKGV2ZW50OiBDb2x1bW5SZXNpemVFdmVudCkge1xuICAgIGlmIChldmVudC5jb2x1bW4gIT09IG51bGwgJiYgZXZlbnQuY29sdW1uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGV2ZW50LmNvbHVtbi53aWR0aCA9IGV2ZW50Lm5ld1dpZHRoIDwgNTAgPyA1MCA6IGV2ZW50Lm5ld1dpZHRoO1xuICAgICAgZXZlbnQuY29sdW1uLmZsZXggPSAwO1xuICAgIH1cbiAgICB0aGlzLl9jb2x1bW5zLm5leHQodGhpcy5kaXNwbGF5Q29sdW1ucyk7XG4gICAgdGhpcy5zYXZlQ29sdW1uc1N0YXRlKCk7XG4gIH1cblxuICBhdXRvc2l6ZUNvbHVtbihjb2x1bW46IFRhYmxlQ29sdW1uLCB0YXJnZXQ6IEhUTUxFbGVtZW50KSB7XG4gICAgY29uc3QgdGFibGVFbGVtZW50ID0gdGhpcy5nZXRUYWJsZUVsZW1lbnQodGFyZ2V0KTtcbiAgICB0aGlzLnNldENvbHVtbkF1dG9XaWR0aChjb2x1bW4sIHRhYmxlRWxlbWVudCBhcyBIVE1MRWxlbWVudCk7XG4gICAgdGhpcy5fY29sdW1ucy5uZXh0KHRoaXMuZGlzcGxheUNvbHVtbnMpO1xuICAgIHRoaXMuc2F2ZUNvbHVtbnNTdGF0ZSgpO1xuICB9XG5cbiAgYXV0b3NpemVBbGxDb2x1bW5zKHRhcmdldDogSFRNTEVsZW1lbnQpIHtcbiAgICBjb25zdCB0YWJsZUVsZW1lbnQgPSB0aGlzLmdldFRhYmxlRWxlbWVudCh0YXJnZXQpO1xuICAgIGNvbnN0IGZsYXQgPSBBcnJheVV0aWwuZmxhdHRlbih0aGlzLmRpc3BsYXlDb2x1bW5zLCAnY29sdW1ucycsIHRydWUpO1xuICAgIGZsYXQuZm9yRWFjaChjb2wgPT5cbiAgICAgIHRoaXMuc2V0Q29sdW1uQXV0b1dpZHRoKGNvbCwgdGFibGVFbGVtZW50IGFzIEhUTUxFbGVtZW50KVxuICAgICk7XG4gICAgdGhpcy5fY29sdW1ucy5uZXh0KHRoaXMuZGlzcGxheUNvbHVtbnMpO1xuICAgIHRoaXMuc2F2ZUNvbHVtbnNTdGF0ZSgpO1xuICB9XG5cbiAgcmVvcmRlckNvbHVtbihjb2x1bW46IFRhYmxlQ29sdW1uLCBpbnNlcnRCZWZvcmU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2RyYWdTb3VyY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZXZlbnQgPSBuZXcgQ29sdW1uUmVvcmRlckV2ZW50KHRoaXMuX2RyYWdTb3VyY2UsIGNvbHVtbik7XG4gICAgaWYgKGV2ZW50LnNvdXJjZSAhPT0gZXZlbnQudGFyZ2V0KSB7XG4gICAgICBjb25zdCBzb3VyY2VQYXJlbnQgPSB0aGlzLmZpbmRQYXJlbnQoZXZlbnQuc291cmNlLCB0aGlzLmRpc3BsYXlDb2x1bW5zKTtcbiAgICAgIGNvbnN0IHRhcmdldFBhcmVudCA9IHRoaXMuZmluZFBhcmVudChldmVudC50YXJnZXQsIHRoaXMuZGlzcGxheUNvbHVtbnMpO1xuXG4gICAgICBpZiAoc291cmNlUGFyZW50ICYmIHRhcmdldFBhcmVudCkge1xuICAgICAgICBjb25zdCBzb3VyY2VJbmRleCA9IHNvdXJjZVBhcmVudC5pbmRleE9mKGV2ZW50LnNvdXJjZSk7XG4gICAgICAgIHNvdXJjZVBhcmVudC5zcGxpY2Uoc291cmNlSW5kZXgsIDEpO1xuICAgICAgICBsZXQgdGFyZ2V0SW5kZXggPSB0YXJnZXRQYXJlbnQuaW5kZXhPZihldmVudC50YXJnZXQpO1xuICAgICAgICBpZiAoIWluc2VydEJlZm9yZSkge1xuICAgICAgICAgIHRhcmdldEluZGV4ID0gdGFyZ2V0SW5kZXggKyAxO1xuICAgICAgICB9XG4gICAgICAgIHRhcmdldFBhcmVudC5zcGxpY2UodGFyZ2V0SW5kZXgsIDAsIGV2ZW50LnNvdXJjZSk7XG4gICAgICAgIGV2ZW50LnNvdXJjZS5sb2NrZWQgPSBldmVudC50YXJnZXQubG9ja2VkO1xuXG4gICAgICAgIHRoaXMudXBkYXRlQ29sdW1ucyh0aGlzLmRpc3BsYXlDb2x1bW5zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRDb2x1bW5QYXJlbnQoY29sdW1uOiBUYWJsZUNvbHVtbikge1xuICAgIHJldHVybiB0aGlzLmZpbmRQYXJlbnRDb2x1bW4oY29sdW1uLCB0aGlzLmRpc3BsYXlDb2x1bW5zKTtcbiAgfVxuXG4gIHN0YXJ0RWRpdFJvdyhjZWxsRXZlbnQ6IElDZWxsRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEVkaXRDZWxsPy5yb3cgIT09IGNlbGxFdmVudD8ucm93KSB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudEVkaXRDZWxsICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5fZWRpdFJvd1N0b3AubmV4dCh0aGlzLl9jdXJyZW50RWRpdENlbGwpO1xuICAgICAgfVxuICAgICAgaWYgKGNlbGxFdmVudCA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9lZGl0Um93U3RhcnQubmV4dChjZWxsRXZlbnQpO1xuICAgICAgICB0aGlzLl9jdXJyZW50RWRpdENlbGwgPSBjZWxsRXZlbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5ib29sT3JGdW5jQ2FsbGJhY2s8VD4oISF0aGlzLnJvd0VkaXRhYmxlKShcbiAgICAgICAgICAgIHRoaXMuZ2V0Um93QnlJbmRleChjZWxsRXZlbnQ/LnJvdyk/LmRhdGFcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuX2VkaXRSb3dTdGFydC5uZXh0KGNlbGxFdmVudCk7XG4gICAgICAgICAgdGhpcy5fY3VycmVudEVkaXRDZWxsID0gY2VsbEV2ZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhcnRFZGl0Q2VsbChjZWxsRXZlbnQ6IElDZWxsRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLl9jdXJyZW50RWRpdENlbGw/LmNvbHVtbiAhPT0gY2VsbEV2ZW50Py5jb2x1bW4gfHxcbiAgICAgIHRoaXMuX2N1cnJlbnRFZGl0Q2VsbD8ucm93ICE9PSBjZWxsRXZlbnQ/LnJvd1xuICAgICkge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnRFZGl0Q2VsbCAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuX2VkaXRDZWxsU3RvcC5uZXh0KHRoaXMuX2N1cnJlbnRFZGl0Q2VsbCk7XG4gICAgICB9XG4gICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmdldENvbHVtbkJ5TmFtZShjZWxsRXZlbnQ/LmNvbHVtbik7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuYm9vbE9yRnVuY0NhbGxiYWNrPElDZWxsSW5zdGFuY2U8VD4+KGNvbHVtbj8uZWRpdGFibGUpKHtcbiAgICAgICAgICByb3c6IHRoaXMuZ2V0Um93QnlJbmRleChjZWxsRXZlbnQ/LnJvdyksXG4gICAgICAgICAgY29sdW1uOiBjb2x1bW4sXG4gICAgICAgIH0pXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5fZWRpdENlbGxTdGFydC5uZXh0KGNlbGxFdmVudCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRFZGl0Q2VsbCA9IGNlbGxFdmVudDtcbiAgICAgICAgY29uc3Qga2V5ID0gKGNlbGxFdmVudD8uZXZlbnQgYXMgS2V5Ym9hcmRFdmVudCk/LmtleTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGtleSAmJlxuICAgICAgICAgIChrZXkubGVuZ3RoID09PSAxIHx8IChrZXkgPT09ICdEZWxldGUnICYmICFjb2x1bW4ucmVxdWlyZWQpKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmNsZWFyVmFsdWUoY2VsbEV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldEFjdGl2ZVJvdyhyb3c6IFQpOiB2b2lkIHtcbiAgICB0aGlzLl9hY3RpdmVSb3cubmV4dChyb3cpO1xuICB9XG5cbiAgc2VsZWN0Um93cyhyb3dzOiBUW10pOiB2b2lkIHtcbiAgICB0aGlzLl9zZWxlY3RlZFJvd3MubmV4dChyb3dzKTtcbiAgfVxuXG4gIHNlbGVjdE9yRGVzZWxlY3RSb3cocm93OiBUKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3NlbGVjdGVkUm93cy52YWx1ZS5pbmRleE9mKHJvdykgPj0gMCkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dzLm5leHQodGhpcy5fc2VsZWN0ZWRSb3dzLnZhbHVlLmZpbHRlcihfID0+IF8gIT09IHJvdykpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZFJvd3MubmV4dChbLi4udGhpcy5fc2VsZWN0ZWRSb3dzLnZhbHVlLCByb3ddKTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RSYW5nZShyb3c6IFQpOiB2b2lkIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2Rpc3BsYXlEYXRhLnZhbHVlLmZpbmRJbmRleChfID0+IF8uZGF0YSA9PT0gcm93KTtcbiAgICBsZXQgbWluSW5kZXggPSB0aGlzLl9zZWxlY3RlZFJvd3MudmFsdWUucmVkdWNlKChwcmV2LCBjdXJyKSA9PiB7XG4gICAgICBjb25zdCBuZXdJbmRleCA9IHRoaXMuX2Rpc3BsYXlEYXRhLnZhbHVlLmZpbmRJbmRleChfID0+IF8uZGF0YSA9PT0gY3Vycik7XG4gICAgICBpZiAobmV3SW5kZXggPCBwcmV2KSB7XG4gICAgICAgIHJldHVybiBuZXdJbmRleDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcmV2O1xuICAgIH0sIHRoaXMuX2Rpc3BsYXlEYXRhLnZhbHVlLmxlbmd0aCk7XG4gICAgbGV0IG1heEluZGV4ID0gdGhpcy5fc2VsZWN0ZWRSb3dzLnZhbHVlLnJlZHVjZSgocHJldiwgY3VycikgPT4ge1xuICAgICAgY29uc3QgbmV3SW5kZXggPSB0aGlzLl9kaXNwbGF5RGF0YS52YWx1ZS5maW5kSW5kZXgoXyA9PiBfLmRhdGEgPT09IGN1cnIpO1xuICAgICAgaWYgKG5ld0luZGV4ID4gcHJldikge1xuICAgICAgICByZXR1cm4gbmV3SW5kZXg7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJldjtcbiAgICB9LCAwKTtcbiAgICBpZiAoaW5kZXggPiBtYXhJbmRleCkge1xuICAgICAgbWF4SW5kZXggPSBpbmRleDtcbiAgICB9XG4gICAgaWYgKGluZGV4IDwgbWluSW5kZXgpIHtcbiAgICAgIG1pbkluZGV4ID0gaW5kZXg7XG4gICAgfVxuICAgIGlmIChtaW5JbmRleCA8IGluZGV4ICYmIGluZGV4IDwgbWF4SW5kZXgpIHtcbiAgICAgIG1heEluZGV4ID0gaW5kZXg7XG4gICAgfVxuICAgIHRoaXMuX3NlbGVjdGVkUm93cy5uZXh0KFtcbiAgICAgIC4uLnRoaXMuX2Rpc3BsYXlEYXRhLnZhbHVlLnNsaWNlKG1pbkluZGV4LCBtYXhJbmRleCArIDEpLm1hcChfID0+IF8uZGF0YSksXG4gICAgXSk7XG4gIH1cblxuICBzZWxlY3RSb3cocm93OiBUKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0VHlwZSA9PT0gU2VsZWN0VHlwZS5ub25lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3NlbGVjdGVkUm93cy5uZXh0KFsuLi50aGlzLl9zZWxlY3RlZFJvd3MudmFsdWUsIHJvd10pO1xuICB9XG5cbiAgZGVzZWxlY3RSb3cocm93OiBUKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0VHlwZSA9PT0gU2VsZWN0VHlwZS5ub25lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3NlbGVjdGVkUm93cy5uZXh0KHRoaXMuX3NlbGVjdGVkUm93cy52YWx1ZS5maWx0ZXIoXyA9PiBfICE9PSByb3cpKTtcbiAgfVxuXG4gIHNlbGVjdEFsbCgpIHtcbiAgICB0aGlzLl9zZWxlY3RlZFJvd3MubmV4dCh0aGlzLl9kaXNwbGF5RGF0YS52YWx1ZS5tYXAoXyA9PiBfLmRhdGEpKTtcbiAgfVxuXG4gIGRlc2VsZWN0QWxsKCkge1xuICAgIHRoaXMuX3NlbGVjdGVkUm93cy5uZXh0KFtdKTtcbiAgfVxuXG4gIGFsbFJvd3NTZWxlY3RlZCgpOiBib29sZWFuIHwgbnVsbCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5fZGlzcGxheURhdGEudmFsdWU/Lmxlbmd0aCAmJlxuICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dzLnZhbHVlPy5sZW5ndGggJiZcbiAgICAgIHRoaXMuX2Rpc3BsYXlEYXRhLnZhbHVlLmV2ZXJ5KFxuICAgICAgICBfID0+XG4gICAgICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dzLnZhbHVlLmZpbmRJbmRleChzZWxlY3RlZCA9PiBzZWxlY3RlZCA9PT0gXy5kYXRhKSA+PVxuICAgICAgICAgIDBcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLl9zZWxlY3RlZFJvd3MudmFsdWUgPT0gbnVsbCB8fFxuICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dzLnZhbHVlLmxlbmd0aCA9PT0gMFxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHNldEhpZGRlbkNvbHVtbnModmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5zYXZlSGlkZGVuQ29sdW1ucyh2YWx1ZSk7XG4gICAgdGhpcy5faGlkZGVuQ29sdW1ucy5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIGNvbHVtbklzSGlkZGVuKGNvbHVtbjogVGFibGVDb2x1bW4pIHtcbiAgICByZXR1cm4gdGhpcy5faGlkZGVuQ29sdW1ucy52YWx1ZS5pbmRleE9mKGNvbHVtbi5uYW1lKSA+PSAwO1xuICB9XG5cbiAgY2hhbmdlVmFsdWUoY29vcmRpbmF0ZXM6IElDZWxsQ29vcmRpbmF0ZXMpOiB2b2lkIHtcbiAgICB0aGlzLl92YWx1ZUNoYW5nZWQubmV4dChjb29yZGluYXRlcyk7XG4gIH1cblxuICBzZXRWYWx1ZShjZWxsVmFsdWU6IElDZWxsVmFsdWUpOiB2b2lkO1xuICBzZXRWYWx1ZShjZWxsVmFsdWU6IElDZWxsSW5zdGFuY2VWYWx1ZTxUPik6IHZvaWQ7XG4gIHNldFZhbHVlKGNlbGxWYWx1ZTogSUNlbGxWYWx1ZSB8IElDZWxsSW5zdGFuY2VWYWx1ZTxUPik6IHZvaWQge1xuICAgIGxldCB2YWx1ZTogSUNlbGxWYWx1ZTtcbiAgICBpZiAoXG4gICAgICB0eXBlb2YgY2VsbFZhbHVlLnJvdyA9PT0gJ29iamVjdCcgJiZcbiAgICAgIHR5cGVvZiBjZWxsVmFsdWUuY29sdW1uID09PSAnb2JqZWN0J1xuICAgICkge1xuICAgICAgdmFsdWUgPSB7XG4gICAgICAgIHJvdzogdGhpcy5nZXRSb3dJbmRleChjZWxsVmFsdWUucm93LmRhdGEpLFxuICAgICAgICBjb2x1bW46IGNlbGxWYWx1ZS5jb2x1bW4ubmFtZSxcbiAgICAgICAgdmFsdWU6IGNlbGxWYWx1ZS52YWx1ZSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gY2VsbFZhbHVlIGFzIElDZWxsVmFsdWU7XG4gICAgfVxuICAgIHRoaXMuX3ZhbHVlU2V0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgZ2V0Um93QnlJbmRleChyb3dJbmRleD86IG51bWJlcik6IFRhYmxlUm93PFQ+IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAocm93SW5kZXggIT09IG51bGwgJiYgcm93SW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlEYXRhPy52YWx1ZVtyb3dJbmRleF07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRSb3dJbmRleChyb3c6IFQpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzcGxheURhdGEudmFsdWUuZmluZEluZGV4KF8gPT4gXy5kYXRhID09PSByb3cpO1xuICB9XG5cbiAgZ2V0RXZlbnRDZWxsKGV2ZW50OiBFdmVudCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIGV2ZW50LmNvbXBvc2VkUGF0aCgpLmZpbmQoKHRhcmdldDogYW55KSA9PiB7XG4gICAgICByZXR1cm4gdGFyZ2V0LnRhZ05hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICd0ZXRhLWNlbGwnO1xuICAgIH0pIGFzIEhUTUxFbGVtZW50O1xuICB9XG5cbiAgZ2V0RXZlbnRSb3coZXZlbnQ6IEV2ZW50KTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gZXZlbnQuY29tcG9zZWRQYXRoKCkuZmluZCgodGFyZ2V0OiBhbnkpID0+IHtcbiAgICAgIHJldHVybiB0YXJnZXQ/LmdldEF0dHJpYnV0ZSAmJiB0YXJnZXQ/LmdldEF0dHJpYnV0ZSgnZGF0YS1yb3cnKTtcbiAgICB9KSBhcyBIVE1MRWxlbWVudDtcbiAgfVxuXG4gIGdldE5leHRFZGl0YWJsZUNlbGwoY29vcmRzOiBJQ2VsbENvb3JkaW5hdGVzKTogSUNlbGxDb29yZGluYXRlcyB8IG51bGwge1xuICAgIGNvbnN0IG5leHRDZWxsID0gdGhpcy5nZXROZXh0Q2VsbChjb29yZHMpO1xuICAgIGlmICghbmV4dENlbGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmdldENvbHVtbkJ5TmFtZShuZXh0Q2VsbD8uY29sdW1uKTtcbiAgICBpZiAoXG4gICAgICB0aGlzLmJvb2xPckZ1bmNDYWxsYmFjazxJQ2VsbEluc3RhbmNlPFQ+Pihjb2x1bW4uZWRpdGFibGUpKHtcbiAgICAgICAgcm93OiB0aGlzLmdldFJvd0J5SW5kZXgobmV4dENlbGwucm93KSxcbiAgICAgICAgY29sdW1uLFxuICAgICAgfSlcbiAgICApIHtcbiAgICAgIHJldHVybiBuZXh0Q2VsbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0TmV4dEVkaXRhYmxlQ2VsbChuZXh0Q2VsbCk7XG4gIH1cblxuICBnZXRQcmV2aW91c0VkaXRhYmxlQ2VsbChjb29yZHM6IElDZWxsQ29vcmRpbmF0ZXMpOiBJQ2VsbENvb3JkaW5hdGVzIHwgbnVsbCB7XG4gICAgY29uc3QgcHJldkNlbGwgPSB0aGlzLmdldFByZXZpb3VzQ2VsbChjb29yZHMpO1xuICAgIGlmICghcHJldkNlbGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmdldENvbHVtbkJ5TmFtZShwcmV2Q2VsbD8uY29sdW1uKTtcbiAgICBpZiAoXG4gICAgICB0aGlzLmJvb2xPckZ1bmNDYWxsYmFjazxJQ2VsbEluc3RhbmNlPFQ+Pihjb2x1bW4uZWRpdGFibGUpKHtcbiAgICAgICAgcm93OiB0aGlzLmdldFJvd0J5SW5kZXgocHJldkNlbGwucm93KSxcbiAgICAgICAgY29sdW1uLFxuICAgICAgfSlcbiAgICApIHtcbiAgICAgIHJldHVybiBwcmV2Q2VsbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJldmlvdXNFZGl0YWJsZUNlbGwocHJldkNlbGwpO1xuICB9XG5cbiAgZ2V0TmV4dENlbGwoY29vcmRzOiBJQ2VsbENvb3JkaW5hdGVzKTogSUNlbGxDb29yZGluYXRlcyB8IG51bGwge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdldEZsYXRDb2x1bW5zKCk7XG4gICAgbGV0IGNvbEluZGV4ID0gY29sdW1ucy5maW5kSW5kZXgoXG4gICAgICAoY29sOiBUYWJsZUNvbHVtbikgPT4gY29sLm5hbWUgPT09IGNvb3Jkcz8uY29sdW1uXG4gICAgKTtcbiAgICBsZXQgcm93SW5kZXggPSBjb29yZHM/LnJvdztcbiAgICBpZiAoY29sSW5kZXggPj0gMCAmJiByb3dJbmRleCA+PSAwKSB7XG4gICAgICBpZiAoY29sSW5kZXggPT09IGNvbHVtbnMubGVuZ3RoIC0gMSkge1xuICAgICAgICBjb2xJbmRleCA9IDA7XG4gICAgICAgIHJvd0luZGV4ID0gcm93SW5kZXggKyAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29sSW5kZXggPSBjb2xJbmRleCArIDE7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2x1bW46IGNvbHVtbnNbY29sSW5kZXhdPy5uYW1lLFxuICAgICAgICByb3c6IHJvd0luZGV4LFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXRQcmV2aW91c0NlbGwoY29vcmRzOiBJQ2VsbENvb3JkaW5hdGVzKTogSUNlbGxDb29yZGluYXRlcyB8IG51bGwge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdldEZsYXRDb2x1bW5zKCk7XG4gICAgbGV0IGNvbEluZGV4ID0gY29sdW1ucy5maW5kSW5kZXgoXG4gICAgICAoY29sOiBUYWJsZUNvbHVtbikgPT4gY29sLm5hbWUgPT09IGNvb3Jkcz8uY29sdW1uXG4gICAgKTtcbiAgICBsZXQgcm93SW5kZXggPSBjb29yZHM/LnJvdztcbiAgICBpZiAoY29sSW5kZXggPj0gMCAmJiByb3dJbmRleCA+PSAwKSB7XG4gICAgICBpZiAoY29sSW5kZXggPT09IDApIHtcbiAgICAgICAgY29sSW5kZXggPSBjb2x1bW5zLmxlbmd0aCAtIDE7XG4gICAgICAgIHJvd0luZGV4ID0gcm93SW5kZXggLSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29sSW5kZXggPSBjb2xJbmRleCAtIDE7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2x1bW46IGNvbHVtbnNbY29sSW5kZXhdPy5uYW1lLFxuICAgICAgICByb3c6IHJvd0luZGV4LFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXROZXh0Um93Q2VsbChjb29yZHM6IElDZWxsQ29vcmRpbmF0ZXMpOiBJQ2VsbENvb3JkaW5hdGVzIHwgbnVsbCB7XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ2V0RmxhdENvbHVtbnMoKTtcbiAgICBjb25zdCBjb2xJbmRleCA9IGNvbHVtbnMuZmluZEluZGV4KFxuICAgICAgKGNvbDogVGFibGVDb2x1bW4pID0+IGNvbC5uYW1lID09PSBjb29yZHM/LmNvbHVtblxuICAgICk7XG4gICAgY29uc3Qgcm93SW5kZXggPSBjb29yZHM/LnJvdztcbiAgICBpZiAoXG4gICAgICBjb2xJbmRleCA+PSAwICYmXG4gICAgICByb3dJbmRleCA+PSAwICYmXG4gICAgICByb3dJbmRleCA8IHRoaXMuX2Rpc3BsYXlEYXRhLnZhbHVlLmxlbmd0aCAtIDFcbiAgICApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbHVtbjogY29sdW1uc1tjb2xJbmRleF0/Lm5hbWUsXG4gICAgICAgIHJvdzogcm93SW5kZXggKyAxLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXRQcmV2aW91c1Jvd0NlbGwoY29vcmRzOiBJQ2VsbENvb3JkaW5hdGVzKSB7XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ2V0RmxhdENvbHVtbnMoKTtcbiAgICBjb25zdCBjb2xJbmRleCA9IGNvbHVtbnMuZmluZEluZGV4KFxuICAgICAgKGNvbDogVGFibGVDb2x1bW4pID0+IGNvbC5uYW1lID09PSBjb29yZHM/LmNvbHVtblxuICAgICk7XG4gICAgY29uc3Qgcm93SW5kZXggPSBjb29yZHM/LnJvdztcbiAgICBpZiAoY29sSW5kZXggPj0gMCAmJiByb3dJbmRleCA+IDEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbHVtbjogY29sdW1uc1tjb2xJbmRleF0/Lm5hbWUsXG4gICAgICAgIHJvdzogcm93SW5kZXggLSAxLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXRDb2x1bW5CeU5hbWUoY29sdW1uTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIEFycmF5VXRpbC5maW5kUmVjdXJzaXZlKFxuICAgICAgdGhpcy5kaXNwbGF5Q29sdW1ucyxcbiAgICAgIGl0ZXJhYmxlTm9kZSA9PiBjb2x1bW5OYW1lID09PSBpdGVyYWJsZU5vZGUubmFtZSxcbiAgICAgICdjb2x1bW5zJ1xuICAgICk7XG4gIH1cblxuICBzY3JvbGxUb0luZGV4KGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLl9zY3JvbGxJbmRleC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX3Njcm9sbEluZGV4Lm5leHQoaW5kZXgpO1xuICB9XG5cbiAgYm9vbE9yRnVuY0NhbGxiYWNrPE0+KHZhcmlhYmxlOiBib29sZWFuIHwgKChyb3c6IE0gfCB1bmRlZmluZWQpID0+IGJvb2xlYW4pKSB7XG4gICAgcmV0dXJuIChhcmdzOiBNKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHZhcmlhYmxlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmlzRnVuY3Rpb24odmFyaWFibGUpKSB7XG4gICAgICAgIHJldHVybiAodmFyaWFibGUgYXMgKHJvdzogTSkgPT4gYm9vbGVhbikoYXJncyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9XG5cbiAgZ2V0VmlzaWJsZUNvbHVtbnMoKSB7XG4gICAgY29uc3QgdmlzaWJsZSA9IEFycmF5VXRpbC5mbGF0dGVuKFxuICAgICAgdGhpcy5fY29sdW1ucy52YWx1ZSxcbiAgICAgICdjb2x1bW5zJyxcbiAgICAgIHRydWVcbiAgICApLmZpbHRlcihfID0+IHRoaXMuX2hpZGRlbkNvbHVtbnMudmFsdWUuaW5kZXhPZihfLm5hbWUpIDwgMCk7XG4gICAgcmV0dXJuIHZpc2libGUuc29ydCgoYSwgYikgPT4gTnVtYmVyKGIubG9ja2VkKSAtIE51bWJlcihhLmxvY2tlZCkpO1xuICB9XG5cbiAgZ2V0Q2VsbEluc3RhbmNlKGNvb3JkczogSUNlbGxDb29yZGluYXRlcyk6IElDZWxsSW5zdGFuY2U8VD4gfCBudWxsIHtcbiAgICByZXR1cm4gY29vcmRzXG4gICAgICA/IHtcbiAgICAgICAgICByb3c6IHRoaXMuZ2V0Um93QnlJbmRleChjb29yZHMucm93KSxcbiAgICAgICAgICBjb2x1bW46IHRoaXMuZ2V0Q29sdW1uQnlOYW1lKGNvb3Jkcy5jb2x1bW4pLFxuICAgICAgICB9XG4gICAgICA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldEZsYXRDb2x1bW5zKCkge1xuICAgIHJldHVybiBBcnJheVV0aWwuZmxhdHRlbih0aGlzLmRpc3BsYXlDb2x1bW5zLCAnY29sdW1ucycsIHRydWUpLnNvcnQoXG4gICAgICAoYSwgYikgPT4gTnVtYmVyKGIubG9ja2VkKSAtIE51bWJlcihhLmxvY2tlZClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kUGFyZW50KFxuICAgIGNvbHVtbjogVGFibGVDb2x1bW4sXG4gICAgY29sdW1uczogVGFibGVDb2x1bW5bXVxuICApOiBUYWJsZUNvbHVtbltdIHwgbnVsbCB7XG4gICAgY29uc3QgZm91bmQgPSBjb2x1bW5zLmZpbmQoeCA9PiB4Lm5hbWUgPT09IGNvbHVtbi5uYW1lKTtcbiAgICBpZiAoZm91bmQgIT09IG51bGwgJiYgZm91bmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGNvbHVtbnM7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwLCBsID0gY29sdW1ucy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGNvbnN0IGNvbCA9IGNvbHVtbnNbaV07XG4gICAgICBpZiAoY29sLmNvbHVtbnMgJiYgY29sLmNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZmluZFBhcmVudChjb2x1bW4sIGNvbC5jb2x1bW5zKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCAmJiByZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGZpbmRQYXJlbnRDb2x1bW4oXG4gICAgY29sdW1uOiBUYWJsZUNvbHVtbixcbiAgICBjb2x1bW5zOiBUYWJsZUNvbHVtbltdXG4gICk6IFRhYmxlQ29sdW1uIHwgbnVsbCB7XG4gICAgY29uc3QgZm91bmQgPSBjb2x1bW5zLmZpbmQoeCA9PiB4LmNvbHVtbnMuaW5kZXhPZihjb2x1bW4pID49IDApO1xuICAgIGlmIChmb3VuZCAhPT0gbnVsbCAmJiBmb3VuZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZm91bmQ7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwLCBsID0gY29sdW1ucy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGNvbnN0IGNvbCA9IGNvbHVtbnNbaV07XG4gICAgICBpZiAoY29sLmNvbHVtbnMgJiYgY29sLmNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZmluZFBhcmVudENvbHVtbihjb2x1bW4sIGNvbC5jb2x1bW5zKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCAmJiByZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXRUYWJsZUVsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICByZXR1cm4gZWxlbWVudC5jbG9zZXN0KCd0ZXRhLXRhYmxlJyk7XG4gIH1cblxuICBwcml2YXRlIGlzRnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICByZXR1cm4gISEob2JqICYmIG9iaj8uY29uc3RydWN0b3IgJiYgb2JqPy5jYWxsICYmIG9iaj8uYXBwbHkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb2x1bW5BdXRvV2lkdGgoY29sdW1uOiBUYWJsZUNvbHVtbiwgdGFibGU6IEhUTUxFbGVtZW50KSB7XG4gICAgY29uc3QgY2VsbHMgPSB0YWJsZS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYHRldGEtY2VsbFtkYXRhLWNvbHVtbj1cIiR7Y29sdW1uLm5hbWV9XCJdIC5jZWxsLXRleHRgXG4gICAgKTtcbiAgICBsZXQgbWF4V2lkdGggPSAwO1xuICAgIGNlbGxzLmZvckVhY2goY2VsbCA9PiB7XG4gICAgICBpZiAoY2VsbC5zY3JvbGxXaWR0aCA+IG1heFdpZHRoKSB7XG4gICAgICAgIG1heFdpZHRoID0gY2VsbC5zY3JvbGxXaWR0aDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBhZ2dDZWxscyA9IHRhYmxlLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLmFnZ3JlZ2F0ZS1jZWxsW2RhdGEtY29sdW1uPVwiJHtjb2x1bW4ubmFtZX1cIl0gLmNlbGwtdGV4dGBcbiAgICApO1xuICAgIGFnZ0NlbGxzPy5mb3JFYWNoKGNlbGwgPT4ge1xuICAgICAgaWYgKGNlbGwuc2Nyb2xsV2lkdGggPiBtYXhXaWR0aCkge1xuICAgICAgICBtYXhXaWR0aCA9IGNlbGwuc2Nyb2xsV2lkdGg7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29sdW1uLmZsZXggPSAwO1xuICAgIGNvbHVtbi53aWR0aCA9IG1heFdpZHRoICsgMjA7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyVmFsdWUoZXZlbnQ6IElDZWxsRXZlbnQpIHtcbiAgICB0aGlzLnNldFZhbHVlKHtcbiAgICAgIC4uLmV2ZW50LFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==