@wavemaker/app-ng-runtime 11.4.1-next.141653 → 11.4.1-next.141654

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 (504) hide show
  1. app-ng-runtime/components/advanced/carousel/bundles/index.umd.js +12 -23
  2. app-ng-runtime/components/advanced/carousel/carousel-template/carousel-template.directive.d.ts +2 -4
  3. app-ng-runtime/components/advanced/carousel/carousel.directive.d.ts +2 -4
  4. app-ng-runtime/components/advanced/carousel/esm2020/carousel-template/carousel-template.directive.mjs +6 -11
  5. app-ng-runtime/components/advanced/carousel/esm2020/carousel.directive.mjs +6 -11
  6. app-ng-runtime/components/advanced/carousel/fesm2015/index.mjs +9 -20
  7. app-ng-runtime/components/advanced/carousel/fesm2015/index.mjs.map +1 -1
  8. app-ng-runtime/components/advanced/carousel/fesm2020/index.mjs +9 -16
  9. app-ng-runtime/components/advanced/carousel/fesm2020/index.mjs.map +1 -1
  10. app-ng-runtime/components/advanced/login/bundles/index.umd.js +21 -27
  11. app-ng-runtime/components/advanced/login/esm2020/login.component.mjs +8 -13
  12. app-ng-runtime/components/advanced/login/fesm2015/index.mjs +7 -13
  13. app-ng-runtime/components/advanced/login/fesm2015/index.mjs.map +1 -1
  14. app-ng-runtime/components/advanced/login/fesm2020/index.mjs +7 -11
  15. app-ng-runtime/components/advanced/login/fesm2020/index.mjs.map +1 -1
  16. app-ng-runtime/components/advanced/login/login.component.d.ts +2 -4
  17. app-ng-runtime/components/advanced/marquee/bundles/index.umd.js +8 -14
  18. app-ng-runtime/components/advanced/marquee/esm2020/marquee.directive.mjs +6 -11
  19. app-ng-runtime/components/advanced/marquee/fesm2015/index.mjs +5 -11
  20. app-ng-runtime/components/advanced/marquee/fesm2015/index.mjs.map +1 -1
  21. app-ng-runtime/components/advanced/marquee/fesm2020/index.mjs +5 -9
  22. app-ng-runtime/components/advanced/marquee/fesm2020/index.mjs.map +1 -1
  23. app-ng-runtime/components/advanced/marquee/marquee.directive.d.ts +2 -4
  24. app-ng-runtime/components/base/bundles/index.umd.js +31 -61
  25. app-ng-runtime/components/base/esm2020/widgets/common/base/base-container.component.mjs +4 -6
  26. app-ng-runtime/components/base/esm2020/widgets/common/base/base.component.mjs +5 -6
  27. app-ng-runtime/components/base/esm2020/widgets/common/base/dataset-aware-nav.component.mjs +3 -3
  28. app-ng-runtime/components/base/esm2020/widgets/common/container/container.directive.mjs +7 -11
  29. app-ng-runtime/components/base/esm2020/widgets/common/item-template/item-template.directive.mjs +7 -10
  30. app-ng-runtime/components/base/esm2020/widgets/common/lazy-load/lazy-load.directive.mjs +6 -10
  31. app-ng-runtime/components/base/esm2020/widgets/common/message/message.component.mjs +7 -11
  32. app-ng-runtime/components/base/esm2020/widgets/common/partial/partial.directive.mjs +7 -10
  33. app-ng-runtime/components/base/esm2020/widgets/common/repeat-template/repeat-template.directive.mjs +6 -11
  34. app-ng-runtime/components/base/fesm2015/index.mjs +32 -62
  35. app-ng-runtime/components/base/fesm2015/index.mjs.map +1 -1
  36. app-ng-runtime/components/base/fesm2020/index.mjs +32 -50
  37. app-ng-runtime/components/base/fesm2020/index.mjs.map +1 -1
  38. app-ng-runtime/components/base/widgets/common/base/base-container.component.d.ts +1 -2
  39. app-ng-runtime/components/base/widgets/common/base/base.component.d.ts +2 -3
  40. app-ng-runtime/components/base/widgets/common/base/dataset-aware-nav.component.d.ts +1 -2
  41. app-ng-runtime/components/base/widgets/common/container/container.directive.d.ts +2 -4
  42. app-ng-runtime/components/base/widgets/common/item-template/item-template.directive.d.ts +3 -4
  43. app-ng-runtime/components/base/widgets/common/lazy-load/lazy-load.directive.d.ts +2 -4
  44. app-ng-runtime/components/base/widgets/common/message/message.component.d.ts +2 -4
  45. app-ng-runtime/components/base/widgets/common/partial/partial.directive.d.ts +3 -4
  46. app-ng-runtime/components/base/widgets/common/repeat-template/repeat-template.directive.d.ts +2 -4
  47. app-ng-runtime/components/basic/default/anchor/anchor.component.d.ts +3 -4
  48. app-ng-runtime/components/basic/default/audio/audio.component.d.ts +2 -4
  49. app-ng-runtime/components/basic/default/bundles/index.umd.js +247 -290
  50. app-ng-runtime/components/basic/default/esm2020/anchor/anchor.component.mjs +7 -10
  51. app-ng-runtime/components/basic/default/esm2020/audio/audio.component.mjs +8 -13
  52. app-ng-runtime/components/basic/default/esm2020/html/html.directive.mjs +7 -11
  53. app-ng-runtime/components/basic/default/esm2020/icon/icon.component.mjs +9 -14
  54. app-ng-runtime/components/basic/default/esm2020/iframe/iframe.component.mjs +9 -13
  55. app-ng-runtime/components/basic/default/esm2020/label/label.directive.mjs +7 -11
  56. app-ng-runtime/components/basic/default/esm2020/picture/picture.directive.mjs +7 -11
  57. app-ng-runtime/components/basic/default/esm2020/spinner/spinner.component.mjs +9 -13
  58. app-ng-runtime/components/basic/default/esm2020/video/video.component.mjs +9 -13
  59. app-ng-runtime/components/basic/default/fesm2015/index.mjs +46 -89
  60. app-ng-runtime/components/basic/default/fesm2015/index.mjs.map +1 -1
  61. app-ng-runtime/components/basic/default/fesm2020/index.mjs +46 -73
  62. app-ng-runtime/components/basic/default/fesm2020/index.mjs.map +1 -1
  63. app-ng-runtime/components/basic/default/html/html.directive.d.ts +2 -4
  64. app-ng-runtime/components/basic/default/icon/icon.component.d.ts +2 -4
  65. app-ng-runtime/components/basic/default/iframe/iframe.component.d.ts +2 -4
  66. app-ng-runtime/components/basic/default/label/label.directive.d.ts +2 -4
  67. app-ng-runtime/components/basic/default/picture/picture.directive.d.ts +2 -4
  68. app-ng-runtime/components/basic/default/spinner/spinner.component.d.ts +2 -4
  69. app-ng-runtime/components/basic/default/video/video.component.d.ts +2 -4
  70. app-ng-runtime/components/basic/progress/bundles/index.umd.js +23 -32
  71. app-ng-runtime/components/basic/progress/esm2020/progress-bar/progress-bar.component.mjs +8 -12
  72. app-ng-runtime/components/basic/progress/esm2020/progress-circle/progress-circle.component.mjs +8 -13
  73. app-ng-runtime/components/basic/progress/fesm2015/index.mjs +12 -21
  74. app-ng-runtime/components/basic/progress/fesm2015/index.mjs.map +1 -1
  75. app-ng-runtime/components/basic/progress/fesm2020/index.mjs +12 -19
  76. app-ng-runtime/components/basic/progress/fesm2020/index.mjs.map +1 -1
  77. app-ng-runtime/components/basic/progress/progress-bar/progress-bar.component.d.ts +2 -4
  78. app-ng-runtime/components/basic/progress/progress-circle/progress-circle.component.d.ts +2 -4
  79. app-ng-runtime/components/basic/rich-text-editor/bundles/index.umd.js +14 -20
  80. app-ng-runtime/components/basic/rich-text-editor/esm2020/rich-text-editor.component.mjs +9 -13
  81. app-ng-runtime/components/basic/rich-text-editor/fesm2015/index.mjs +7 -13
  82. app-ng-runtime/components/basic/rich-text-editor/fesm2015/index.mjs.map +1 -1
  83. app-ng-runtime/components/basic/rich-text-editor/fesm2020/index.mjs +7 -11
  84. app-ng-runtime/components/basic/rich-text-editor/fesm2020/index.mjs.map +1 -1
  85. app-ng-runtime/components/basic/rich-text-editor/rich-text-editor.component.d.ts +2 -4
  86. app-ng-runtime/components/basic/search/bundles/index.umd.js +3 -6
  87. app-ng-runtime/components/basic/search/esm2020/search.component.mjs +6 -9
  88. app-ng-runtime/components/basic/search/fesm2015/index.mjs +4 -7
  89. app-ng-runtime/components/basic/search/fesm2015/index.mjs.map +1 -1
  90. app-ng-runtime/components/basic/search/fesm2020/index.mjs +4 -7
  91. app-ng-runtime/components/basic/search/fesm2020/index.mjs.map +1 -1
  92. app-ng-runtime/components/basic/search/search.component.d.ts +3 -4
  93. app-ng-runtime/components/chart/bundles/index.umd.js +4 -9
  94. app-ng-runtime/components/chart/chart.component.d.ts +3 -4
  95. app-ng-runtime/components/chart/esm2020/chart.component.mjs +7 -10
  96. app-ng-runtime/components/chart/fesm2015/index.mjs +5 -10
  97. app-ng-runtime/components/chart/fesm2015/index.mjs.map +1 -1
  98. app-ng-runtime/components/chart/fesm2020/index.mjs +5 -8
  99. app-ng-runtime/components/chart/fesm2020/index.mjs.map +1 -1
  100. app-ng-runtime/components/containers/accordion/accordion-pane/accordion-pane.component.d.ts +2 -4
  101. app-ng-runtime/components/containers/accordion/accordion.directive.d.ts +3 -4
  102. app-ng-runtime/components/containers/accordion/bundles/index.umd.js +56 -66
  103. app-ng-runtime/components/containers/accordion/esm2020/accordion-pane/accordion-pane.component.mjs +10 -14
  104. app-ng-runtime/components/containers/accordion/esm2020/accordion.directive.mjs +7 -10
  105. app-ng-runtime/components/containers/accordion/fesm2015/index.mjs +12 -22
  106. app-ng-runtime/components/containers/accordion/fesm2015/index.mjs.map +1 -1
  107. app-ng-runtime/components/containers/accordion/fesm2020/index.mjs +12 -18
  108. app-ng-runtime/components/containers/accordion/fesm2020/index.mjs.map +1 -1
  109. app-ng-runtime/components/containers/layout-grid/bundles/index.umd.js +12 -25
  110. app-ng-runtime/components/containers/layout-grid/esm2020/layout-grid-column/layout-grid-column.directive.mjs +7 -10
  111. app-ng-runtime/components/containers/layout-grid/esm2020/layout-grid-row/layout-grid-row.directive.mjs +6 -11
  112. app-ng-runtime/components/containers/layout-grid/esm2020/layout-grid.directive.mjs +6 -11
  113. app-ng-runtime/components/containers/layout-grid/fesm2015/index.mjs +13 -26
  114. app-ng-runtime/components/containers/layout-grid/fesm2015/index.mjs.map +1 -1
  115. app-ng-runtime/components/containers/layout-grid/fesm2020/index.mjs +13 -22
  116. app-ng-runtime/components/containers/layout-grid/fesm2020/index.mjs.map +1 -1
  117. app-ng-runtime/components/containers/layout-grid/layout-grid-column/layout-grid-column.directive.d.ts +3 -4
  118. app-ng-runtime/components/containers/layout-grid/layout-grid-row/layout-grid-row.directive.d.ts +2 -4
  119. app-ng-runtime/components/containers/layout-grid/layout-grid.directive.d.ts +2 -4
  120. app-ng-runtime/components/containers/linear-layout/bundles/index.umd.js +12 -23
  121. app-ng-runtime/components/containers/linear-layout/esm2020/linear-layout-item/linear-layout-item.directive.mjs +6 -11
  122. app-ng-runtime/components/containers/linear-layout/esm2020/linear-layout.directive.mjs +6 -11
  123. app-ng-runtime/components/containers/linear-layout/fesm2015/index.mjs +9 -20
  124. app-ng-runtime/components/containers/linear-layout/fesm2015/index.mjs.map +1 -1
  125. app-ng-runtime/components/containers/linear-layout/fesm2020/index.mjs +9 -16
  126. app-ng-runtime/components/containers/linear-layout/fesm2020/index.mjs.map +1 -1
  127. app-ng-runtime/components/containers/linear-layout/linear-layout-item/linear-layout-item.directive.d.ts +2 -4
  128. app-ng-runtime/components/containers/linear-layout/linear-layout.directive.d.ts +2 -4
  129. app-ng-runtime/components/containers/panel/bundles/index.umd.js +65 -71
  130. app-ng-runtime/components/containers/panel/esm2020/panel.component.mjs +12 -16
  131. app-ng-runtime/components/containers/panel/fesm2015/index.mjs +10 -16
  132. app-ng-runtime/components/containers/panel/fesm2015/index.mjs.map +1 -1
  133. app-ng-runtime/components/containers/panel/fesm2020/index.mjs +10 -14
  134. app-ng-runtime/components/containers/panel/fesm2020/index.mjs.map +1 -1
  135. app-ng-runtime/components/containers/panel/panel.component.d.ts +2 -4
  136. app-ng-runtime/components/containers/tabs/bundles/index.umd.js +57 -63
  137. app-ng-runtime/components/containers/tabs/esm2020/tab-pane/tab-pane.component.mjs +8 -12
  138. app-ng-runtime/components/containers/tabs/esm2020/tabs.component.mjs +7 -10
  139. app-ng-runtime/components/containers/tabs/fesm2015/index.mjs +12 -18
  140. app-ng-runtime/components/containers/tabs/fesm2015/index.mjs.map +1 -1
  141. app-ng-runtime/components/containers/tabs/fesm2020/index.mjs +12 -18
  142. app-ng-runtime/components/containers/tabs/fesm2020/index.mjs.map +1 -1
  143. app-ng-runtime/components/containers/tabs/tab-pane/tab-pane.component.d.ts +2 -4
  144. app-ng-runtime/components/containers/tabs/tabs.component.d.ts +3 -4
  145. app-ng-runtime/components/containers/tile/bundles/index.umd.js +8 -14
  146. app-ng-runtime/components/containers/tile/esm2020/tile.directive.mjs +6 -11
  147. app-ng-runtime/components/containers/tile/fesm2015/index.mjs +5 -11
  148. app-ng-runtime/components/containers/tile/fesm2015/index.mjs.map +1 -1
  149. app-ng-runtime/components/containers/tile/fesm2020/index.mjs +5 -9
  150. app-ng-runtime/components/containers/tile/fesm2020/index.mjs.map +1 -1
  151. app-ng-runtime/components/containers/tile/tile.directive.d.ts +2 -4
  152. app-ng-runtime/components/containers/wizard/bundles/index.umd.js +48 -57
  153. app-ng-runtime/components/containers/wizard/esm2020/wizard-step/wizard-step.directive.mjs +5 -10
  154. app-ng-runtime/components/containers/wizard/esm2020/wizard.component.mjs +10 -14
  155. app-ng-runtime/components/containers/wizard/fesm2015/index.mjs +11 -20
  156. app-ng-runtime/components/containers/wizard/fesm2015/index.mjs.map +1 -1
  157. app-ng-runtime/components/containers/wizard/fesm2020/index.mjs +11 -18
  158. app-ng-runtime/components/containers/wizard/fesm2020/index.mjs.map +1 -1
  159. app-ng-runtime/components/containers/wizard/wizard-step/wizard-step.directive.d.ts +2 -4
  160. app-ng-runtime/components/containers/wizard/wizard.component.d.ts +2 -4
  161. app-ng-runtime/components/data/card/bundles/index.umd.js +83 -106
  162. app-ng-runtime/components/data/card/card-actions/card-actions.directive.d.ts +2 -4
  163. app-ng-runtime/components/data/card/card-content/card-content.component.d.ts +2 -4
  164. app-ng-runtime/components/data/card/card-footer/card-footer.directive.d.ts +2 -4
  165. app-ng-runtime/components/data/card/card.component.d.ts +2 -4
  166. app-ng-runtime/components/data/card/esm2020/card-actions/card-actions.directive.mjs +6 -11
  167. app-ng-runtime/components/data/card/esm2020/card-content/card-content.component.mjs +6 -11
  168. app-ng-runtime/components/data/card/esm2020/card-footer/card-footer.directive.mjs +6 -11
  169. app-ng-runtime/components/data/card/esm2020/card.component.mjs +12 -18
  170. app-ng-runtime/components/data/card/fesm2015/index.mjs +23 -46
  171. app-ng-runtime/components/data/card/fesm2015/index.mjs.map +1 -1
  172. app-ng-runtime/components/data/card/fesm2020/index.mjs +23 -38
  173. app-ng-runtime/components/data/card/fesm2020/index.mjs.map +1 -1
  174. app-ng-runtime/components/data/form/bundles/index.umd.js +128 -137
  175. app-ng-runtime/components/data/form/esm2020/form-action/form-action.directive.mjs +4 -9
  176. app-ng-runtime/components/data/form/esm2020/form-field/form-field.directive.mjs +5 -8
  177. app-ng-runtime/components/data/form/esm2020/form.component.mjs +5 -8
  178. app-ng-runtime/components/data/form/fesm2015/index.mjs +20 -29
  179. app-ng-runtime/components/data/form/fesm2015/index.mjs.map +1 -1
  180. app-ng-runtime/components/data/form/fesm2020/index.mjs +20 -29
  181. app-ng-runtime/components/data/form/fesm2020/index.mjs.map +1 -1
  182. app-ng-runtime/components/data/form/form-action/form-action.directive.d.ts +2 -4
  183. app-ng-runtime/components/data/form/form-field/form-field.directive.d.ts +3 -4
  184. app-ng-runtime/components/data/form/form.component.d.ts +3 -4
  185. app-ng-runtime/components/data/list/bundles/index.umd.js +4 -7
  186. app-ng-runtime/components/data/list/esm2020/list.component.mjs +7 -10
  187. app-ng-runtime/components/data/list/fesm2015/index.mjs +4 -7
  188. app-ng-runtime/components/data/list/fesm2015/index.mjs.map +1 -1
  189. app-ng-runtime/components/data/list/fesm2020/index.mjs +4 -7
  190. app-ng-runtime/components/data/list/fesm2020/index.mjs.map +1 -1
  191. app-ng-runtime/components/data/list/list.component.d.ts +3 -4
  192. app-ng-runtime/components/data/live-table/bundles/index.umd.js +3 -6
  193. app-ng-runtime/components/data/live-table/esm2020/live-table.component.mjs +6 -9
  194. app-ng-runtime/components/data/live-table/fesm2015/index.mjs +4 -7
  195. app-ng-runtime/components/data/live-table/fesm2015/index.mjs.map +1 -1
  196. app-ng-runtime/components/data/live-table/fesm2020/index.mjs +4 -7
  197. app-ng-runtime/components/data/live-table/fesm2020/index.mjs.map +1 -1
  198. app-ng-runtime/components/data/live-table/live-table.component.d.ts +3 -4
  199. app-ng-runtime/components/data/pagination/bundles/index.umd.js +30 -34
  200. app-ng-runtime/components/data/pagination/esm2020/pagination.component.mjs +10 -14
  201. app-ng-runtime/components/data/pagination/fesm2015/index.mjs +8 -12
  202. app-ng-runtime/components/data/pagination/fesm2015/index.mjs.map +1 -1
  203. app-ng-runtime/components/data/pagination/fesm2020/index.mjs +8 -12
  204. app-ng-runtime/components/data/pagination/fesm2020/index.mjs.map +1 -1
  205. app-ng-runtime/components/data/pagination/pagination.component.d.ts +2 -4
  206. app-ng-runtime/components/data/table/bundles/index.umd.js +19 -37
  207. app-ng-runtime/components/data/table/esm2020/table-action/table-action.directive.mjs +4 -9
  208. app-ng-runtime/components/data/table/esm2020/table-column/table-column.directive.mjs +5 -8
  209. app-ng-runtime/components/data/table/esm2020/table-column-group/table-column-group.directive.mjs +4 -9
  210. app-ng-runtime/components/data/table/esm2020/table-row/table-row.directive.mjs +4 -9
  211. app-ng-runtime/components/data/table/esm2020/table-row-action/table-row-action.directive.mjs +4 -9
  212. app-ng-runtime/components/data/table/esm2020/table.component.mjs +6 -9
  213. app-ng-runtime/components/data/table/fesm2015/index.mjs +19 -37
  214. app-ng-runtime/components/data/table/fesm2015/index.mjs.map +1 -1
  215. app-ng-runtime/components/data/table/fesm2020/index.mjs +19 -37
  216. app-ng-runtime/components/data/table/fesm2020/index.mjs.map +1 -1
  217. app-ng-runtime/components/data/table/table-action/table-action.directive.d.ts +2 -4
  218. app-ng-runtime/components/data/table/table-column/table-column.directive.d.ts +3 -4
  219. app-ng-runtime/components/data/table/table-column-group/table-column-group.directive.d.ts +2 -4
  220. app-ng-runtime/components/data/table/table-row/table-row.directive.d.ts +2 -4
  221. app-ng-runtime/components/data/table/table-row-action/table-row-action.directive.d.ts +2 -4
  222. app-ng-runtime/components/data/table/table.component.d.ts +3 -4
  223. app-ng-runtime/components/dialogs/alert-dialog/alert-dialog.component.d.ts +2 -4
  224. app-ng-runtime/components/dialogs/alert-dialog/bundles/index.umd.js +40 -46
  225. app-ng-runtime/components/dialogs/alert-dialog/esm2020/alert-dialog.component.mjs +9 -15
  226. app-ng-runtime/components/dialogs/alert-dialog/fesm2015/index.mjs +8 -14
  227. app-ng-runtime/components/dialogs/alert-dialog/fesm2015/index.mjs.map +1 -1
  228. app-ng-runtime/components/dialogs/alert-dialog/fesm2020/index.mjs +8 -14
  229. app-ng-runtime/components/dialogs/alert-dialog/fesm2020/index.mjs.map +1 -1
  230. app-ng-runtime/components/dialogs/confirm-dialog/bundles/index.umd.js +16 -22
  231. app-ng-runtime/components/dialogs/confirm-dialog/confirm-dialog.component.d.ts +2 -4
  232. app-ng-runtime/components/dialogs/confirm-dialog/esm2020/confirm-dialog.component.mjs +8 -14
  233. app-ng-runtime/components/dialogs/confirm-dialog/fesm2015/index.mjs +7 -13
  234. app-ng-runtime/components/dialogs/confirm-dialog/fesm2015/index.mjs.map +1 -1
  235. app-ng-runtime/components/dialogs/confirm-dialog/fesm2020/index.mjs +7 -13
  236. app-ng-runtime/components/dialogs/confirm-dialog/fesm2020/index.mjs.map +1 -1
  237. app-ng-runtime/components/dialogs/default/base-dialog.d.ts +1 -2
  238. app-ng-runtime/components/dialogs/default/bundles/index.umd.js +25 -31
  239. app-ng-runtime/components/dialogs/default/dialog-footer/dialog-footer.directive.d.ts +2 -4
  240. app-ng-runtime/components/dialogs/default/esm2020/base-dialog.mjs +7 -8
  241. app-ng-runtime/components/dialogs/default/esm2020/dialog-footer/dialog-footer.directive.mjs +6 -11
  242. app-ng-runtime/components/dialogs/default/fesm2015/index.mjs +11 -17
  243. app-ng-runtime/components/dialogs/default/fesm2015/index.mjs.map +1 -1
  244. app-ng-runtime/components/dialogs/default/fesm2020/index.mjs +11 -15
  245. app-ng-runtime/components/dialogs/default/fesm2020/index.mjs.map +1 -1
  246. app-ng-runtime/components/dialogs/design-dialog/bundles/index.umd.js +17 -23
  247. app-ng-runtime/components/dialogs/design-dialog/dialog.component.d.ts +2 -4
  248. app-ng-runtime/components/dialogs/design-dialog/esm2020/dialog.component.mjs +8 -14
  249. app-ng-runtime/components/dialogs/design-dialog/fesm2015/index.mjs +7 -13
  250. app-ng-runtime/components/dialogs/design-dialog/fesm2015/index.mjs.map +1 -1
  251. app-ng-runtime/components/dialogs/design-dialog/fesm2020/index.mjs +7 -13
  252. app-ng-runtime/components/dialogs/design-dialog/fesm2020/index.mjs.map +1 -1
  253. app-ng-runtime/components/dialogs/iframe-dialog/bundles/index.umd.js +24 -30
  254. app-ng-runtime/components/dialogs/iframe-dialog/esm2020/iframe-dialog.component.mjs +10 -16
  255. app-ng-runtime/components/dialogs/iframe-dialog/fesm2015/index.mjs +9 -15
  256. app-ng-runtime/components/dialogs/iframe-dialog/fesm2015/index.mjs.map +1 -1
  257. app-ng-runtime/components/dialogs/iframe-dialog/fesm2020/index.mjs +9 -15
  258. app-ng-runtime/components/dialogs/iframe-dialog/fesm2020/index.mjs.map +1 -1
  259. app-ng-runtime/components/dialogs/iframe-dialog/iframe-dialog.component.d.ts +2 -4
  260. app-ng-runtime/components/dialogs/partial-dialog/bundles/index.umd.js +3 -8
  261. app-ng-runtime/components/dialogs/partial-dialog/esm2020/partial-dialog.component.mjs +5 -10
  262. app-ng-runtime/components/dialogs/partial-dialog/fesm2015/index.mjs +4 -9
  263. app-ng-runtime/components/dialogs/partial-dialog/fesm2015/index.mjs.map +1 -1
  264. app-ng-runtime/components/dialogs/partial-dialog/fesm2020/index.mjs +4 -9
  265. app-ng-runtime/components/dialogs/partial-dialog/fesm2020/index.mjs.map +1 -1
  266. app-ng-runtime/components/dialogs/partial-dialog/partial-dialog.component.d.ts +3 -4
  267. app-ng-runtime/components/input/calendar/bundles/index.umd.js +5 -10
  268. app-ng-runtime/components/input/calendar/calendar.component.d.ts +3 -4
  269. app-ng-runtime/components/input/calendar/esm2020/calendar.component.mjs +8 -11
  270. app-ng-runtime/components/input/calendar/fesm2015/index.mjs +6 -11
  271. app-ng-runtime/components/input/calendar/fesm2015/index.mjs.map +1 -1
  272. app-ng-runtime/components/input/calendar/fesm2020/index.mjs +6 -9
  273. app-ng-runtime/components/input/calendar/fesm2020/index.mjs.map +1 -1
  274. app-ng-runtime/components/input/chips/bundles/index.umd.js +87 -93
  275. app-ng-runtime/components/input/chips/chips.component.d.ts +2 -4
  276. app-ng-runtime/components/input/chips/esm2020/chips.component.mjs +9 -15
  277. app-ng-runtime/components/input/chips/fesm2015/index.mjs +8 -14
  278. app-ng-runtime/components/input/chips/fesm2015/index.mjs.map +1 -1
  279. app-ng-runtime/components/input/chips/fesm2020/index.mjs +8 -14
  280. app-ng-runtime/components/input/chips/fesm2020/index.mjs.map +1 -1
  281. app-ng-runtime/components/input/color-picker/bundles/index.umd.js +22 -28
  282. app-ng-runtime/components/input/color-picker/color-picker.component.d.ts +2 -4
  283. app-ng-runtime/components/input/color-picker/esm2020/color-picker.component.mjs +10 -14
  284. app-ng-runtime/components/input/color-picker/fesm2015/index.mjs +8 -14
  285. app-ng-runtime/components/input/color-picker/fesm2015/index.mjs.map +1 -1
  286. app-ng-runtime/components/input/color-picker/fesm2020/index.mjs +8 -12
  287. app-ng-runtime/components/input/color-picker/fesm2020/index.mjs.map +1 -1
  288. app-ng-runtime/components/input/currency/bundles/index.umd.js +4 -9
  289. app-ng-runtime/components/input/currency/currency.component.d.ts +3 -4
  290. app-ng-runtime/components/input/currency/esm2020/currency.component.mjs +7 -10
  291. app-ng-runtime/components/input/currency/fesm2015/index.mjs +5 -10
  292. app-ng-runtime/components/input/currency/fesm2015/index.mjs.map +1 -1
  293. app-ng-runtime/components/input/currency/fesm2020/index.mjs +5 -8
  294. app-ng-runtime/components/input/currency/fesm2020/index.mjs.map +1 -1
  295. app-ng-runtime/components/input/default/base-form.component.d.ts +1 -2
  296. app-ng-runtime/components/input/default/bundles/index.umd.js +575 -648
  297. app-ng-runtime/components/input/default/button/button.component.d.ts +2 -4
  298. app-ng-runtime/components/input/default/button-group/button-group.directive.d.ts +2 -4
  299. app-ng-runtime/components/input/default/checkbox/checkbox.component.d.ts +2 -4
  300. app-ng-runtime/components/input/default/checkboxset/checkboxset.component.d.ts +2 -4
  301. app-ng-runtime/components/input/default/composite/composite.directive.d.ts +2 -4
  302. app-ng-runtime/components/input/default/dataset-aware-form.component.d.ts +2 -3
  303. app-ng-runtime/components/input/default/esm2020/base-form.component.mjs +6 -7
  304. app-ng-runtime/components/input/default/esm2020/button/button.component.mjs +9 -14
  305. app-ng-runtime/components/input/default/esm2020/button-group/button-group.directive.mjs +6 -11
  306. app-ng-runtime/components/input/default/esm2020/checkbox/checkbox.component.mjs +9 -13
  307. app-ng-runtime/components/input/default/esm2020/checkboxset/checkboxset.component.mjs +10 -14
  308. app-ng-runtime/components/input/default/esm2020/composite/composite.directive.mjs +7 -11
  309. app-ng-runtime/components/input/default/esm2020/dataset-aware-form.component.mjs +6 -7
  310. app-ng-runtime/components/input/default/esm2020/number/number.component.mjs +7 -10
  311. app-ng-runtime/components/input/default/esm2020/radioset/radioset.component.mjs +10 -14
  312. app-ng-runtime/components/input/default/esm2020/select/select.component.mjs +11 -15
  313. app-ng-runtime/components/input/default/esm2020/switch/switch.component.mjs +10 -14
  314. app-ng-runtime/components/input/default/esm2020/text/base/base-input.mjs +6 -7
  315. app-ng-runtime/components/input/default/esm2020/text/calendar/input-calendar.component.mjs +8 -13
  316. app-ng-runtime/components/input/default/esm2020/text/color/input-color.component.mjs +8 -13
  317. app-ng-runtime/components/input/default/esm2020/text/email/input-email.component.mjs +8 -13
  318. app-ng-runtime/components/input/default/esm2020/text/locale/number-locale.mjs +3 -3
  319. app-ng-runtime/components/input/default/esm2020/text/number/input-number.component.mjs +9 -14
  320. app-ng-runtime/components/input/default/esm2020/text/text/input-text.component.mjs +9 -14
  321. app-ng-runtime/components/input/default/esm2020/textarea/textarea.component.mjs +9 -14
  322. app-ng-runtime/components/input/default/fesm2015/index.mjs +94 -167
  323. app-ng-runtime/components/input/default/fesm2015/index.mjs.map +1 -1
  324. app-ng-runtime/components/input/default/fesm2020/index.mjs +94 -139
  325. app-ng-runtime/components/input/default/fesm2020/index.mjs.map +1 -1
  326. app-ng-runtime/components/input/default/number/number.component.d.ts +3 -4
  327. app-ng-runtime/components/input/default/radioset/radioset.component.d.ts +2 -4
  328. app-ng-runtime/components/input/default/select/select.component.d.ts +2 -4
  329. app-ng-runtime/components/input/default/switch/switch.component.d.ts +2 -4
  330. app-ng-runtime/components/input/default/text/base/base-input.d.ts +1 -2
  331. app-ng-runtime/components/input/default/text/calendar/input-calendar.component.d.ts +2 -4
  332. app-ng-runtime/components/input/default/text/color/input-color.component.d.ts +2 -4
  333. app-ng-runtime/components/input/default/text/email/input-email.component.d.ts +2 -4
  334. app-ng-runtime/components/input/default/text/locale/number-locale.d.ts +2 -2
  335. app-ng-runtime/components/input/default/text/number/input-number.component.d.ts +2 -4
  336. app-ng-runtime/components/input/default/text/text/input-text.component.d.ts +2 -4
  337. app-ng-runtime/components/input/default/textarea/textarea.component.d.ts +2 -4
  338. app-ng-runtime/components/input/epoch/base-date-time.component.d.ts +1 -2
  339. app-ng-runtime/components/input/epoch/bundles/index.umd.js +12 -21
  340. app-ng-runtime/components/input/epoch/date/date.component.d.ts +3 -4
  341. app-ng-runtime/components/input/epoch/date-time/date-time.component.d.ts +3 -4
  342. app-ng-runtime/components/input/epoch/esm2020/base-date-time.component.mjs +5 -6
  343. app-ng-runtime/components/input/epoch/esm2020/date/date.component.mjs +6 -9
  344. app-ng-runtime/components/input/epoch/esm2020/date-time/date-time.component.mjs +6 -9
  345. app-ng-runtime/components/input/epoch/esm2020/time/time.component.mjs +6 -9
  346. app-ng-runtime/components/input/epoch/fesm2015/index.mjs +13 -22
  347. app-ng-runtime/components/input/epoch/fesm2015/index.mjs.map +1 -1
  348. app-ng-runtime/components/input/epoch/fesm2020/index.mjs +13 -22
  349. app-ng-runtime/components/input/epoch/fesm2020/index.mjs.map +1 -1
  350. app-ng-runtime/components/input/epoch/time/time.component.d.ts +3 -4
  351. app-ng-runtime/components/input/file-upload/bundles/index.umd.js +3 -6
  352. app-ng-runtime/components/input/file-upload/esm2020/file-upload.component.mjs +6 -9
  353. app-ng-runtime/components/input/file-upload/fesm2015/index.mjs +4 -7
  354. app-ng-runtime/components/input/file-upload/fesm2015/index.mjs.map +1 -1
  355. app-ng-runtime/components/input/file-upload/fesm2020/index.mjs +4 -7
  356. app-ng-runtime/components/input/file-upload/fesm2020/index.mjs.map +1 -1
  357. app-ng-runtime/components/input/file-upload/file-upload.component.d.ts +3 -4
  358. app-ng-runtime/components/input/rating/bundles/index.umd.js +45 -51
  359. app-ng-runtime/components/input/rating/esm2020/rating.component.mjs +11 -15
  360. app-ng-runtime/components/input/rating/fesm2015/index.mjs +9 -15
  361. app-ng-runtime/components/input/rating/fesm2015/index.mjs.map +1 -1
  362. app-ng-runtime/components/input/rating/fesm2020/index.mjs +9 -13
  363. app-ng-runtime/components/input/rating/fesm2020/index.mjs.map +1 -1
  364. app-ng-runtime/components/input/rating/rating.component.d.ts +2 -4
  365. app-ng-runtime/components/input/slider/bundles/index.umd.js +37 -43
  366. app-ng-runtime/components/input/slider/esm2020/slider.component.mjs +10 -15
  367. app-ng-runtime/components/input/slider/fesm2015/index.mjs +9 -15
  368. app-ng-runtime/components/input/slider/fesm2015/index.mjs.map +1 -1
  369. app-ng-runtime/components/input/slider/fesm2020/index.mjs +9 -13
  370. app-ng-runtime/components/input/slider/fesm2020/index.mjs.map +1 -1
  371. app-ng-runtime/components/input/slider/slider.component.d.ts +2 -4
  372. app-ng-runtime/components/navigation/menu/bundles/index.umd.js +13 -25
  373. app-ng-runtime/components/navigation/menu/esm2020/menu-adapator.component.mjs +4 -6
  374. app-ng-runtime/components/navigation/menu/esm2020/menu.component.mjs +4 -7
  375. app-ng-runtime/components/navigation/menu/esm2020/nav/nav-item/nav-item.directive.mjs +7 -11
  376. app-ng-runtime/components/navigation/menu/esm2020/nav/nav.component.mjs +5 -9
  377. app-ng-runtime/components/navigation/menu/fesm2015/index.mjs +14 -26
  378. app-ng-runtime/components/navigation/menu/fesm2015/index.mjs.map +1 -1
  379. app-ng-runtime/components/navigation/menu/fesm2020/index.mjs +14 -24
  380. app-ng-runtime/components/navigation/menu/fesm2020/index.mjs.map +1 -1
  381. app-ng-runtime/components/navigation/menu/menu-adapator.component.d.ts +1 -2
  382. app-ng-runtime/components/navigation/menu/menu.component.d.ts +2 -3
  383. app-ng-runtime/components/navigation/menu/nav/nav-item/nav-item.directive.d.ts +2 -4
  384. app-ng-runtime/components/navigation/menu/nav/nav.component.d.ts +3 -3
  385. app-ng-runtime/components/navigation/navbar/bundles/index.umd.js +28 -34
  386. app-ng-runtime/components/navigation/navbar/esm2020/navbar.component.mjs +9 -14
  387. app-ng-runtime/components/navigation/navbar/fesm2015/index.mjs +8 -14
  388. app-ng-runtime/components/navigation/navbar/fesm2015/index.mjs.map +1 -1
  389. app-ng-runtime/components/navigation/navbar/fesm2020/index.mjs +8 -12
  390. app-ng-runtime/components/navigation/navbar/fesm2020/index.mjs.map +1 -1
  391. app-ng-runtime/components/navigation/navbar/navbar.component.d.ts +2 -4
  392. app-ng-runtime/components/page/default/bundles/index.umd.js +32 -66
  393. app-ng-runtime/components/page/default/content/content.component.d.ts +2 -4
  394. app-ng-runtime/components/page/default/esm2020/content/content.component.mjs +6 -11
  395. app-ng-runtime/components/page/default/esm2020/layout.directive.mjs +7 -11
  396. app-ng-runtime/components/page/default/esm2020/page-content/page-content.component.mjs +7 -10
  397. app-ng-runtime/components/page/default/esm2020/page.directive.mjs +7 -12
  398. app-ng-runtime/components/page/default/esm2020/router-outlet.directive.mjs +7 -11
  399. app-ng-runtime/components/page/default/esm2020/spa-page.directive.mjs +7 -12
  400. app-ng-runtime/components/page/default/fesm2015/index.mjs +26 -60
  401. app-ng-runtime/components/page/default/fesm2015/index.mjs.map +1 -1
  402. app-ng-runtime/components/page/default/fesm2020/index.mjs +26 -48
  403. app-ng-runtime/components/page/default/fesm2020/index.mjs.map +1 -1
  404. app-ng-runtime/components/page/default/layout.directive.d.ts +2 -4
  405. app-ng-runtime/components/page/default/page-content/page-content.component.d.ts +3 -4
  406. app-ng-runtime/components/page/default/page.directive.d.ts +3 -4
  407. app-ng-runtime/components/page/default/router-outlet.directive.d.ts +2 -4
  408. app-ng-runtime/components/page/default/spa-page.directive.d.ts +3 -4
  409. app-ng-runtime/components/page/footer/bundles/index.umd.js +8 -14
  410. app-ng-runtime/components/page/footer/esm2020/footer.directive.mjs +6 -11
  411. app-ng-runtime/components/page/footer/fesm2015/index.mjs +5 -11
  412. app-ng-runtime/components/page/footer/fesm2015/index.mjs.map +1 -1
  413. app-ng-runtime/components/page/footer/fesm2020/index.mjs +5 -9
  414. app-ng-runtime/components/page/footer/fesm2020/index.mjs.map +1 -1
  415. app-ng-runtime/components/page/footer/footer.directive.d.ts +2 -4
  416. app-ng-runtime/components/page/header/bundles/index.umd.js +8 -14
  417. app-ng-runtime/components/page/header/esm2020/header.component.mjs +6 -11
  418. app-ng-runtime/components/page/header/fesm2015/index.mjs +5 -11
  419. app-ng-runtime/components/page/header/fesm2015/index.mjs.map +1 -1
  420. app-ng-runtime/components/page/header/fesm2020/index.mjs +5 -9
  421. app-ng-runtime/components/page/header/fesm2020/index.mjs.map +1 -1
  422. app-ng-runtime/components/page/header/header.component.d.ts +2 -4
  423. app-ng-runtime/components/page/left-panel/bundles/index.umd.js +4 -7
  424. app-ng-runtime/components/page/left-panel/esm2020/left-panel.directive.mjs +6 -9
  425. app-ng-runtime/components/page/left-panel/fesm2015/index.mjs +4 -7
  426. app-ng-runtime/components/page/left-panel/fesm2015/index.mjs.map +1 -1
  427. app-ng-runtime/components/page/left-panel/fesm2020/index.mjs +4 -7
  428. app-ng-runtime/components/page/left-panel/fesm2020/index.mjs.map +1 -1
  429. app-ng-runtime/components/page/left-panel/left-panel.directive.d.ts +3 -4
  430. app-ng-runtime/components/page/right-panel/bundles/index.umd.js +6 -12
  431. app-ng-runtime/components/page/right-panel/esm2020/right-panel.directive.mjs +7 -11
  432. app-ng-runtime/components/page/right-panel/fesm2015/index.mjs +5 -11
  433. app-ng-runtime/components/page/right-panel/fesm2015/index.mjs.map +1 -1
  434. app-ng-runtime/components/page/right-panel/fesm2020/index.mjs +5 -9
  435. app-ng-runtime/components/page/right-panel/fesm2020/index.mjs.map +1 -1
  436. app-ng-runtime/components/page/right-panel/right-panel.directive.d.ts +2 -4
  437. app-ng-runtime/components/page/top-nav/bundles/index.umd.js +8 -14
  438. app-ng-runtime/components/page/top-nav/esm2020/top-nav.directive.mjs +6 -11
  439. app-ng-runtime/components/page/top-nav/fesm2015/index.mjs +5 -11
  440. app-ng-runtime/components/page/top-nav/fesm2015/index.mjs.map +1 -1
  441. app-ng-runtime/components/page/top-nav/fesm2020/index.mjs +5 -9
  442. app-ng-runtime/components/page/top-nav/fesm2020/index.mjs.map +1 -1
  443. app-ng-runtime/components/page/top-nav/top-nav.directive.d.ts +2 -4
  444. app-ng-runtime/components/prefab/bundles/index.umd.js +7 -15
  445. app-ng-runtime/components/prefab/esm2020/prefab-container/prefab-container.directive.mjs +7 -10
  446. app-ng-runtime/components/prefab/esm2020/prefab.directive.mjs +6 -10
  447. app-ng-runtime/components/prefab/fesm2015/index.mjs +8 -16
  448. app-ng-runtime/components/prefab/fesm2015/index.mjs.map +1 -1
  449. app-ng-runtime/components/prefab/fesm2020/index.mjs +8 -14
  450. app-ng-runtime/components/prefab/fesm2020/index.mjs.map +1 -1
  451. app-ng-runtime/components/prefab/prefab-container/prefab-container.directive.d.ts +3 -4
  452. app-ng-runtime/components/prefab/prefab.directive.d.ts +2 -4
  453. app-ng-runtime/mobile/components/basic/default/bundles/index.umd.js +32 -37
  454. app-ng-runtime/mobile/components/basic/default/esm2020/network-info-toaster/network-info-toaster.component.mjs +7 -10
  455. app-ng-runtime/mobile/components/basic/default/fesm2015/index.mjs +10 -15
  456. app-ng-runtime/mobile/components/basic/default/fesm2015/index.mjs.map +1 -1
  457. app-ng-runtime/mobile/components/basic/default/fesm2020/index.mjs +10 -13
  458. app-ng-runtime/mobile/components/basic/default/fesm2020/index.mjs.map +1 -1
  459. app-ng-runtime/mobile/components/basic/default/network-info-toaster/network-info-toaster.component.d.ts +3 -4
  460. app-ng-runtime/mobile/components/containers/segmented-control/bundles/index.umd.js +18 -29
  461. app-ng-runtime/mobile/components/containers/segmented-control/esm2020/segment-content/segment-content.component.mjs +8 -13
  462. app-ng-runtime/mobile/components/containers/segmented-control/esm2020/segmented-control.component.mjs +9 -13
  463. app-ng-runtime/mobile/components/containers/segmented-control/fesm2015/index.mjs +12 -23
  464. app-ng-runtime/mobile/components/containers/segmented-control/fesm2015/index.mjs.map +1 -1
  465. app-ng-runtime/mobile/components/containers/segmented-control/fesm2020/index.mjs +12 -19
  466. app-ng-runtime/mobile/components/containers/segmented-control/fesm2020/index.mjs.map +1 -1
  467. app-ng-runtime/mobile/components/containers/segmented-control/segment-content/segment-content.component.d.ts +2 -4
  468. app-ng-runtime/mobile/components/containers/segmented-control/segmented-control.component.d.ts +2 -4
  469. app-ng-runtime/mobile/components/data/media-list/bundles/index.umd.js +30 -36
  470. app-ng-runtime/mobile/components/data/media-list/esm2020/media-list.component.mjs +14 -18
  471. app-ng-runtime/mobile/components/data/media-list/fesm2015/index.mjs +11 -17
  472. app-ng-runtime/mobile/components/data/media-list/fesm2015/index.mjs.map +1 -1
  473. app-ng-runtime/mobile/components/data/media-list/fesm2020/index.mjs +11 -15
  474. app-ng-runtime/mobile/components/data/media-list/fesm2020/index.mjs.map +1 -1
  475. app-ng-runtime/mobile/components/data/media-list/media-list.component.d.ts +2 -4
  476. app-ng-runtime/mobile/components/device/barcode-scanner/barcode-scanner.component.d.ts +2 -4
  477. app-ng-runtime/mobile/components/device/barcode-scanner/bundles/index.umd.js +28 -34
  478. app-ng-runtime/mobile/components/device/barcode-scanner/esm2020/barcode-scanner.component.mjs +10 -14
  479. app-ng-runtime/mobile/components/device/barcode-scanner/fesm2015/index.mjs +8 -14
  480. app-ng-runtime/mobile/components/device/barcode-scanner/fesm2015/index.mjs.map +1 -1
  481. app-ng-runtime/mobile/components/device/barcode-scanner/fesm2020/index.mjs +8 -12
  482. app-ng-runtime/mobile/components/device/barcode-scanner/fesm2020/index.mjs.map +1 -1
  483. app-ng-runtime/mobile/components/device/camera/bundles/index.umd.js +12 -18
  484. app-ng-runtime/mobile/components/device/camera/camera.component.d.ts +2 -4
  485. app-ng-runtime/mobile/components/device/camera/esm2020/camera.component.mjs +9 -13
  486. app-ng-runtime/mobile/components/device/camera/fesm2015/index.mjs +7 -13
  487. app-ng-runtime/mobile/components/device/camera/fesm2015/index.mjs.map +1 -1
  488. app-ng-runtime/mobile/components/device/camera/fesm2020/index.mjs +7 -11
  489. app-ng-runtime/mobile/components/device/camera/fesm2020/index.mjs.map +1 -1
  490. app-ng-runtime/mobile/components/page/mobile-navbar/bundles/index.umd.js +3 -6
  491. app-ng-runtime/mobile/components/page/mobile-navbar/esm2020/mobile-navbar.component.mjs +6 -9
  492. app-ng-runtime/mobile/components/page/mobile-navbar/fesm2015/index.mjs +4 -7
  493. app-ng-runtime/mobile/components/page/mobile-navbar/fesm2015/index.mjs.map +1 -1
  494. app-ng-runtime/mobile/components/page/mobile-navbar/fesm2020/index.mjs +4 -7
  495. app-ng-runtime/mobile/components/page/mobile-navbar/fesm2020/index.mjs.map +1 -1
  496. app-ng-runtime/mobile/components/page/mobile-navbar/mobile-navbar.component.d.ts +3 -4
  497. app-ng-runtime/mobile/components/page/tab-bar/bundles/index.umd.js +32 -36
  498. app-ng-runtime/mobile/components/page/tab-bar/esm2020/tabbar.component.mjs +8 -13
  499. app-ng-runtime/mobile/components/page/tab-bar/fesm2015/index.mjs +7 -11
  500. app-ng-runtime/mobile/components/page/tab-bar/fesm2015/index.mjs.map +1 -1
  501. app-ng-runtime/mobile/components/page/tab-bar/fesm2020/index.mjs +7 -11
  502. app-ng-runtime/mobile/components/page/tab-bar/fesm2020/index.mjs.map +1 -1
  503. app-ng-runtime/mobile/components/page/tab-bar/tabbar.component.d.ts +2 -4
  504. app-ng-runtime/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  import { Attribute, Component, ContentChildren, ContentChild, ElementRef, HostListener, Injector, NgZone, Optional, QueryList, ViewChild, ViewContainerRef, TemplateRef } from '@angular/core';
2
2
  import { FormBuilder, NG_VALUE_ACCESSOR } from '@angular/forms';
3
- import { Viewport, StatePersistence, PaginationService, UserDefinedExecutionContext } from '@wm/core';
3
+ import { Viewport, StatePersistence, PaginationService } from '@wm/core';
4
4
  import { Subject } from 'rxjs';
5
5
  import { $appDigest, $parseEvent, $unwatch, $watch, App, closePopover, DataSource, getClonedObject, getDatasourceFromExpr, getValidJSON, isDataSourceEqual, isDefined, isMobile, triggerFn, DynamicComponentRefProvider, extendProto, $invokeWatchers } from '@wm/core';
6
6
  import { EDIT_MODE, getConditionalClasses, getOrderByExpr, getRowOperationsColumn, prepareFieldDefs, provideAs, provideAsWidgetRef, StylableComponent, styler, transformData, TrustAsPipe, extractDataSourceName, DEBOUNCE_TIMES, NAVIGATION_TYPE, unsupportedStatePersistenceTypes } from '@wm/components/base';
@@ -244,8 +244,8 @@ export class TableComponent extends StylableComponent {
244
244
  this.invokeEventCallback('enterkeypress', { $event, $data: this.gridData });
245
245
  }
246
246
  }
247
- constructor(inj, fb, app, dynamicComponentProvider, statePersistence, paginationService, viewport, parentList, binddataset, binddatasource, readonlygrid, ngZone, trustAsPipe, _viewParent) {
248
- super(inj, WIDGET_CONFIG, _viewParent);
247
+ constructor(inj, fb, app, dynamicComponentProvider, statePersistence, paginationService, viewport, parentList, binddataset, binddatasource, readonlygrid, ngZone, trustAsPipe) {
248
+ super(inj, WIDGET_CONFIG);
249
249
  this.inj = inj;
250
250
  this.fb = fb;
251
251
  this.app = app;
@@ -259,7 +259,6 @@ export class TableComponent extends StylableComponent {
259
259
  this.readonlygrid = readonlygrid;
260
260
  this.ngZone = ngZone;
261
261
  this.trustAsPipe = trustAsPipe;
262
- this._viewParent = _viewParent;
263
262
  this.rowActionsCompiledTl = {};
264
263
  this.rowFilterCompliedTl = {};
265
264
  this.inlineCompliedTl = {};
@@ -2036,7 +2035,7 @@ export class TableComponent extends StylableComponent {
2036
2035
  }
2037
2036
  }
2038
2037
  TableComponent.initializeProps = registerProps();
2039
- TableComponent.ɵfac = function TableComponent_Factory(t) { return new (t || TableComponent)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i1.FormBuilder), i0.ɵɵdirectiveInject(i2.App), i0.ɵɵdirectiveInject(i2.DynamicComponentRefProvider), i0.ɵɵdirectiveInject(i2.StatePersistence), i0.ɵɵdirectiveInject(i2.PaginationService), i0.ɵɵdirectiveInject(i2.Viewport), i0.ɵɵdirectiveInject(i3.ListComponent, 8), i0.ɵɵinjectAttribute('dataset.bind'), i0.ɵɵinjectAttribute('datasource.bind'), i0.ɵɵinjectAttribute('readonlygrid'), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i4.TrustAsPipe), i0.ɵɵdirectiveInject(i2.UserDefinedExecutionContext, 8)); };
2038
+ TableComponent.ɵfac = function TableComponent_Factory(t) { return new (t || TableComponent)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i1.FormBuilder), i0.ɵɵdirectiveInject(i2.App), i0.ɵɵdirectiveInject(i2.DynamicComponentRefProvider), i0.ɵɵdirectiveInject(i2.StatePersistence), i0.ɵɵdirectiveInject(i2.PaginationService), i0.ɵɵdirectiveInject(i2.Viewport), i0.ɵɵdirectiveInject(i3.ListComponent, 8), i0.ɵɵinjectAttribute('dataset.bind'), i0.ɵɵinjectAttribute('datasource.bind'), i0.ɵɵinjectAttribute('readonlygrid'), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i4.TrustAsPipe)); };
2040
2039
  TableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TableComponent, selectors: [["", "wmTable", ""]], contentQueries: function TableComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
2041
2040
  i0.ɵɵcontentQuery(dirIndex, _c0, 5);
2042
2041
  i0.ɵɵcontentQuery(dirIndex, _c1, 5);
@@ -2122,9 +2121,7 @@ TableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TableCompone
2122
2121
  }] }, { type: undefined, decorators: [{
2123
2122
  type: Attribute,
2124
2123
  args: ['readonlygrid']
2125
- }] }, { type: i0.NgZone }, { type: i4.TrustAsPipe }, { type: i2.UserDefinedExecutionContext, decorators: [{
2126
- type: Optional
2127
- }] }]; }, { dataNavigator: [{
2124
+ }] }, { type: i0.NgZone }, { type: i4.TrustAsPipe }]; }, { dataNavigator: [{
2128
2125
  type: ViewChild,
2129
2126
  args: [PaginationComponent, { static: true }]
2130
2127
  }], _tableElement: [{
@@ -2179,4 +2176,4 @@ TableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TableCompone
2179
2176
  type: HostListener,
2180
2177
  args: ['keypress', ['$event']]
2181
2178
  }] }); })();
2182
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2RhdGEvdGFibGUvc3JjL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL3RhYmxlL3NyYy90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLFNBQVMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQWEsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVOLE9BQU8sRUFBd0IsV0FBVyxFQUFhLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakcsT0FBTyxFQUFDLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSwyQkFBMkIsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUVwRyxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTNDLE9BQU8sRUFDSCxVQUFVLEVBQ1YsV0FBVyxFQUNYLFFBQVEsRUFDUixNQUFNLEVBQ04sR0FBRyxFQUNILFlBQVksRUFDWixVQUFVLEVBQ1YsZUFBZSxFQUNmLHFCQUFxQixFQUNyQixZQUFZLEVBRVosaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsU0FBUyxFQUNULDJCQUEyQixFQUMzQixXQUFXLEVBQ1gsZUFBZSxFQUNsQixNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUUsU0FBUyxFQUFFLHFCQUFxQixFQUFFLGNBQWMsRUFBRSxzQkFBc0IsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pULE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXJFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDNUJsQyxvQkFBbUU7OztJQUFoRSx3RUFBeUM7Ozs7SUFPNUMsNEJBRWU7Ozs7OztJQURELDhFQUF3RSxpRUFBQTs7O0lBRXRGLDBCQUM2Rjs7O0lBRGUsK0RBQTJCOzs7SUFKM0ksK0JBQXVHO0lBQ25HLDhGQUVlO0lBQ2YsNEVBQzZGO0lBQ2pHLGlCQUFNOzs7SUFMNEIsZUFBa0I7SUFBbEIsaURBQWtCO0lBR1ksZUFBMEI7SUFBMUIsbURBQTBCOzs7SUFibEcsK0JBQXNILGFBQUEsY0FBQTtJQUcxRyxrRUFBbUU7SUFDdkUsaUJBQU07SUFDTiwrQkFBdUI7SUFDbkIsMEJBQStDLGNBQUE7SUFFbkQsaUJBQU07SUFDTixzRUFNTTtJQUNWLGlCQUFLLEVBQUE7OztJQWJpRCxlQUFlO0lBQWYsdUNBQWU7SUFHeEMsZUFBbUI7SUFBbkIsMkRBQW1CO0lBQ2YsZUFBd0I7SUFBeEIsZ0VBQXdCO0lBRUosZUFBb0Q7SUFBcEQsbUZBQW9EOzs7SUFvQnJHLDRCQUVlOzs7Ozs7SUFERCw4RUFBd0UsaUVBQUE7OztJQUYxRiwrQkFBaUU7SUFDN0Qsd0ZBRWU7SUFDbkIsaUJBQU07OztJQUg0QixlQUFrQjtJQUFsQixnREFBa0I7Ozs7O0lBT3BELGtDQUV1UTtJQUYzSSxnT0FBUyxlQUFBLGlEQUFxQyxDQUFBLElBQUM7SUFFNEYsaUJBQVM7Ozs7SUFEeFEsaUtBQXlIO0lBQ3JCLGlEQUFtQzs7OztJQUkvSSw2QkFHMEo7SUFIbkMsMk5BQVMsZUFBQSxpREFBcUMsQ0FBQSxJQUFDO0lBR1osaUJBQUk7Ozs7SUFGdEosaUtBQXlIOztBRFJySSxNQUFNLFdBQVcsR0FBRywwQkFBMEIsQ0FBQztBQUMvQyxNQUFNLGFBQWEsR0FBRyxFQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBQyxDQUFDO0FBRXZFLE1BQU0saUJBQWlCLEdBQUc7SUFDdEIsS0FBSyxFQUFFLG9CQUFvQjtJQUMzQixHQUFHLEVBQUUsbUJBQW1CO0NBQzNCLENBQUM7QUFFRixNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUM7QUFFdEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0FBRXRCLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLEVBQUU7SUFDaEMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxzQkFBc0IsRUFBRSxlQUFlLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdEYsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDbEIsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRTtZQUM1QixPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ2YsT0FBTyxLQUFLLENBQUM7U0FDaEI7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUNILE1BQU0sS0FBSyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUMzQyxJQUFJLENBQUMsT0FBTyxFQUFFO1FBQ1YsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNqQixJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzlCLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQ2YsT0FBTyxLQUFLLENBQUM7YUFDaEI7UUFDTCxDQUFDLENBQUMsQ0FBQztLQUNOO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDbkIsQ0FBQyxDQUFDO0FBVUYsTUFBTSxPQUFPLGNBQWUsU0FBUSxpQkFBaUI7SUFveEJqRCxJQUFJLFFBQVEsQ0FBQyxRQUFRO1FBQ2pCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLGdHQUFnRztRQUNoRyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzlDLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDOUIseUhBQXlIO1FBQ3pILElBQUksUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNyQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDdEU7YUFBTTtZQUNILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDakQ7UUFDRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMseUJBQXlCLEVBQUUsRUFBRTtZQUM5QyxvRkFBb0Y7WUFDcEYsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBRXJHLHdHQUF3RztZQUN4RyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO2dCQUN4RSxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM5RCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsRUFBRyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzthQUN0RTtZQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQzNFLDZIQUE2SDtZQUM3SCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUM3RyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQ3JDO2lCQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRTtnQkFDL0csaUhBQWlIO2dCQUNqSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ3JHO1NBQ0o7YUFBTTtZQUNILElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO1NBQzdCO1FBQ0QsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLElBQUksV0FBVyxDQUFDO1FBRWhCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVsQixJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBRWpDO21EQUN1QztZQUN2QyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRTtnQkFDakUsYUFBYSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDckcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUMsQ0FBQzthQUMxRDtZQUNEOzZFQUNpRTtZQUNqRSxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRXBELElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ2QsT0FBTzthQUNWO1lBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFO2dCQUN0RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzthQUN0RTtZQUNELG9FQUFvRTtZQUNwRSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7Z0JBQzVFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0IsRUFBRSxFQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQzthQUM5STtZQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1NBQ25FO0lBQ0wsQ0FBQztJQUVELElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQUksWUFBWTtRQUNaLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNsQixPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdEM7UUFDRCxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3ZCLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFDRCxPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELElBQUksWUFBWSxDQUFDLEdBQUc7UUFDaEIsc0VBQXNFO1FBQ3RFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFcUMsVUFBVSxDQUFFLE1BQVc7UUFDekQsSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLEVBQUUsRUFBRTtZQUNyQixJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQztTQUM3RTtJQUNMLENBQUM7SUFFRCxZQUNXLEdBQWEsRUFDYixFQUFlLEVBQ2QsR0FBUSxFQUNSLHdCQUFxRCxFQUNyRCxnQkFBa0MsRUFDbEMsaUJBQW9DLEVBQ3BDLFFBQWtCLEVBQ1AsVUFBeUIsRUFDVixXQUFXLEVBQ1IsY0FBYyxFQUNqQixZQUFZLEVBQ3RDLE1BQWMsRUFDZCxXQUF3QixFQUFxQixXQUF3QztRQUU3RixLQUFLLENBQUMsR0FBRyxFQUFFLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQWRoQyxRQUFHLEdBQUgsR0FBRyxDQUFVO1FBQ2IsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNkLFFBQUcsR0FBSCxHQUFHLENBQUs7UUFDUiw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTZCO1FBQ3JELHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ1AsZUFBVSxHQUFWLFVBQVUsQ0FBZTtRQUNWLGdCQUFXLEdBQVgsV0FBVyxDQUFBO1FBQ1IsbUJBQWMsR0FBZCxjQUFjLENBQUE7UUFDakIsaUJBQVksR0FBWixZQUFZLENBQUE7UUFDdEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQXFCLGdCQUFXLEdBQVgsV0FBVyxDQUE2QjtRQWwyQnpGLHlCQUFvQixHQUFTLEVBQUUsQ0FBQztRQUNoQyx3QkFBbUIsR0FBUSxFQUFFLENBQUM7UUFDOUIscUJBQWdCLEdBQVEsRUFBRSxDQUFDO1FBQzNCLHdCQUFtQixHQUFRLEVBQUUsQ0FBQztRQUM5Qix5QkFBb0IsR0FBUSxFQUFFLENBQUM7UUFDL0IsZ0NBQTJCLEdBQVEsRUFBRSxDQUFDO1FBQ3RDLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFDZix5QkFBb0IsR0FBUSxFQUFFLENBQUM7UUFFdkMsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFLaEIsZUFBVSxHQUFHLElBQUksQ0FBQztRQVNsQix1QkFBa0IsR0FBRyxLQUFLLENBQUM7UUFhM0IsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUloQixrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQWNuQix1QkFBa0IsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ25DLHdCQUFtQixHQUFvQixJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFOUUsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLGFBQVEsR0FBRztZQUNQLFFBQVEsRUFBRSxFQUFFO1lBQ1osUUFBUSxFQUFFLEVBQUU7U0FDZixDQUFDO1FBQ0Ysa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFHbkIsaUJBQVksR0FBRyxFQUFFLENBQUM7UUFDbEIsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUVYLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFFaEIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFTdkIsc0JBQWlCLEdBQUcsSUFBSSxDQUFDO1FBR3pCLHlCQUFvQixHQUFRLEVBQUUsQ0FBQztRQUMvQixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ2YsV0FBTSxHQUFRLEVBQUUsQ0FBQztRQUNqQixnQkFBVyxHQUFRLEVBQUUsQ0FBQztRQUVkLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBU25CLHFCQUFnQixHQUFHLElBQUksQ0FBQztRQVF4QixlQUFVLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUUvQixXQUFNLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLDJCQUFzQixHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUU3RCwwQkFBMEI7UUFDMUIsY0FBUyxHQUFRLEVBQUUsQ0FBQztRQUlwQix1QkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDMUIsc0JBQWlCLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFPaEYsc0JBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLDRCQUF1QixHQUFHLElBQUksQ0FBQztRQUMvQixrQkFBYSxHQUFHLElBQUksQ0FBQztRQUNyQixtQkFBYyxHQUFHLElBQUksQ0FBQztRQUN0QixvQkFBZSxHQUFHLElBQUksQ0FBQztRQW9CZixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBRWxCLGdCQUFXLEdBQUc7WUFDakIsSUFBSSxFQUFFLEVBQUU7WUFDUixPQUFPLEVBQUUsRUFBRTtZQUNYLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLElBQUksRUFBRSxFQUFFO1lBQ1IsUUFBUSxFQUFFO2dCQUNOLEtBQUssRUFBRSxFQUFFO2dCQUNULFNBQVMsRUFBRSxFQUFFO2FBQ2hCO1lBQ0QsVUFBVSxFQUFFLEVBQUU7WUFDZCxXQUFXLEVBQUUsRUFBRTtZQUNmLFVBQVUsRUFBRSxFQUFFO1lBQ2QsWUFBWSxFQUFFLEVBQUU7WUFDaEIsUUFBUSxFQUFFLEVBQUU7WUFDWixRQUFRLEVBQUUsRUFBRTtZQUNaLFlBQVksRUFBRSxFQUFFO1lBQ2hCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsbUJBQW1CLEVBQUUsS0FBSztZQUMxQixNQUFNLEVBQUU7Z0JBQ0osUUFBUSxFQUFFLEdBQUc7YUFDaEI7WUFDRCxJQUFJLEVBQUUsRUFBRTtZQUNSLFFBQVEsRUFBRTtnQkFDTixXQUFXLEVBQUUsY0FBYzthQUM5QjtZQUNELGFBQWEsRUFBRTtnQkFDWCxhQUFhLEVBQUcsRUFBRTthQUNyQjtZQUNELFVBQVUsRUFBRSxFQUFFO1lBQ2QsY0FBYyxFQUFFLEVBQUU7WUFDbEIsZUFBZSxFQUFFLENBQUMsQ0FBQztZQUNuQixtQkFBbUIsRUFBRSxRQUFRO1lBQzdCLGlCQUFpQixFQUFFLEtBQUs7WUFDeEIsZ0JBQWdCLEVBQUUsS0FBSztZQUN2QixtQkFBbUIsRUFBRSxLQUFLO1lBQzFCLGtCQUFrQixFQUFFLEtBQUs7WUFDekIsZUFBZSxFQUFFLEVBQUU7WUFDbkIsZUFBZSxFQUFFLEVBQUU7WUFDbkIsY0FBYyxFQUFFLEVBQUU7WUFDbEIsY0FBYyxFQUFFLFNBQVM7WUFDekIsT0FBTyxFQUFFO2dCQUNMLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixNQUFNLEVBQUUsTUFBTTtnQkFDZCxnQkFBZ0IsRUFBRSxnQkFBZ0I7Z0JBQ2xDLFNBQVMsRUFBRSxRQUFRO2dCQUNuQixpQkFBaUIsRUFBRyxRQUFRO2dCQUM1QixnQkFBZ0IsRUFBRSxnQkFBZ0I7YUFDckM7WUFDRCxjQUFjLEVBQUUsU0FBUztZQUN6QixhQUFhLEVBQUUsU0FBUztZQUN4QixVQUFVLEVBQUcsS0FBSztZQUNsQiw4QkFBOEI7WUFDOUIsY0FBYyxFQUFFLEdBQUcsRUFBRTtnQkFDakIsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUQsQ0FBQztZQUNELHNCQUFzQjtZQUN0QixjQUFjLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDeEIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM5RCxDQUFDO1lBQ0QsYUFBYSxFQUFFLEdBQUcsRUFBRTtnQkFDaEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQzNCLENBQUM7WUFDRCxxQkFBcUI7WUFDckIsV0FBVyxFQUFFLEdBQUcsRUFBRTtnQkFDZCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDekIsQ0FBQztZQUVELFlBQVksRUFBRyxHQUFHLEVBQUU7Z0JBQ2hCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUM7WUFDeEMsQ0FBQztZQUNELGdCQUFnQixFQUFFLEdBQUcsRUFBRTtnQkFDZixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO2dCQUNoRCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO2dCQUNoRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7WUFDM0MsQ0FBQztZQUNELDRCQUE0QjtZQUM1QixrQkFBa0IsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO2dCQUN2QixJQUFJLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbEQsQ0FBQztZQUNELHdEQUF3RDtZQUN4RCxzQkFBc0IsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUMvQixJQUFJLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLEVBQUUsTUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUNsRyxDQUFDO1lBQ0QseUJBQXlCLEVBQUUsR0FBRyxFQUFFO2dCQUM1QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsS0FBSyxXQUFXLENBQUM7WUFDbkcsQ0FBQztZQUNELG9CQUFvQixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN2RCxDQUFDO1lBQ0QsbUJBQW1CLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3RELENBQUM7WUFDRCxzSUFBc0k7WUFDdEksaUJBQWlCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDekIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3BELENBQUM7WUFDRCw2R0FBNkc7WUFDN0csc0JBQXNCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3pELENBQUM7WUFDRCxZQUFZLEVBQUUsR0FBRyxFQUFFO2dCQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtvQkFDakIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTt3QkFDdEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxFQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQztxQkFDdkY7b0JBQ0QsbUhBQW1IO29CQUNuSCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTt3QkFDbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO3FCQUN6QjtvQkFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDbEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztvQkFDaEUsSUFBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRTt3QkFDMUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7cUJBQ3BEO29CQUNELDhEQUE4RDtvQkFDOUQsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7d0JBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztxQkFDaEU7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDO1lBQ0QsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7b0JBQ2pCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLENBQUM7b0JBQ2hFLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUU7d0JBQzNCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO3FCQUNwRDtvQkFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN0QyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksZ0NBQWdDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7d0JBQzVLLE1BQU0sR0FBRyxHQUFHLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUMsQ0FBQzt3QkFDakYsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDL0QsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsSUFBSyxJQUFJLENBQUMsV0FBVyxFQUFFOzRCQUN6RCxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dDQUN4QyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzs2QkFDdEM7NEJBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsRUFBQyxjQUFjLEVBQUUsV0FBVyxDQUFDLFlBQVksRUFBQyxDQUFDLENBQUM7eUJBQzFGOzZCQUFNOzRCQUNILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEVBQUMsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQyxDQUFDO3lCQUN2RTtxQkFDSjt5QkFBTTt3QkFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsZ0RBQWdELENBQUMsQ0FBQztxQkFDbkg7b0JBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztnQkFDckYsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDO1lBQ0QsMkRBQTJEO1lBQzNELG1CQUFtQixFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7b0JBQ2pCOzs7dUJBR0c7b0JBQ0gsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO3dCQUNsQixJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTs0QkFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7eUJBQ3hCO3FCQUNKO3lCQUFNO3dCQUNILElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzt3QkFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQ3hCO2dCQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztZQUNELGFBQWEsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDdEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztZQUN2RixDQUFDO1lBQ0QsYUFBYSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN0QixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7b0JBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTt3QkFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQ3pELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLENBQUM7d0JBQ2hFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsRUFBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFDLENBQUMsQ0FBQzt3QkFDdEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDdEMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxNQUFNLElBQUksZ0NBQWdDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7NEJBQ3ZHLE1BQU0sR0FBRyxHQUFHLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUMsQ0FBQzs0QkFDakYsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQzs0QkFDL0QsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsRUFBRTtnQ0FDcEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLFVBQVMsWUFBWTtvQ0FDcEQsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQztnQ0FDeEMsQ0FBQyxDQUFDLENBQUM7Z0NBQ0gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztnQ0FDOUQsSUFBSSxXQUFXLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0NBQ3JDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEVBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQyxZQUFZLEVBQUMsQ0FBQyxDQUFDO2lDQUMxRjs2QkFDSjt5QkFDSjs2QkFBTTs0QkFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsZ0RBQWdELENBQUMsQ0FBQzt5QkFDbkg7b0JBQ0wsQ0FBQyxDQUFDLENBQUM7aUJBQ047WUFDTCxDQUFDO1lBRUQsc0JBQXNCLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDN0UsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxFQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUMsQ0FBQyxDQUFDO1lBQzFFLENBQUM7WUFDRCxtQkFBbUIsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDNUIsa0pBQWtKO2dCQUNsSixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7b0JBQ2pCLG9EQUFvRDtvQkFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsRUFBRTt3QkFDeEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDdEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztxQkFDbkY7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDO1lBQ0QsWUFBWSxFQUFFLFlBQVk7WUFDMUIsY0FBYyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN2QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2dCQUNyRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFLEVBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztZQUN0RSxDQUFDO1lBQ0QsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQ3JFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUM7WUFDeEUsQ0FBQztZQUNELGFBQWEsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDdEIsK0VBQStFO2dCQUMvRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxFQUFFLEVBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUMsQ0FBQyxDQUFDO1lBQ2xGLENBQUM7WUFDRCxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsRUFBRTtnQkFDaEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO29CQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFDLEdBQUcsRUFBRSx5QkFBeUIsRUFBRSx1QkFBdUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hJLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztZQUNELFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxFQUFFO2dCQUN2QyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEYsQ0FBQztZQUNELGVBQWUsRUFBRSxDQUFDLEdBQUcsRUFBRSxTQUFVLEVBQUUsRUFBRTtnQkFDakMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7b0JBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2lCQUNuRDtnQkFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6QyxDQUFDO1lBQ0QsY0FBYyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUU7Z0JBQzFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQyxDQUFDLENBQUMsQ0FBQztZQUNqSCxDQUFDO1lBQ0QsaUJBQWlCLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFO2dCQUNuQyxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsRUFBRSxFQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUM7WUFDdkcsQ0FBQztZQUNELGlCQUFpQixFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRTtnQkFDbkMsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLEVBQUUsRUFBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO1lBQ3ZHLENBQUM7WUFDRCxpQkFBaUIsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUU7Z0JBQ25DLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3RDLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixFQUFFLEVBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO1lBQ3BHLENBQUM7WUFDRCxZQUFZLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsRUFBRTtnQkFDL0MsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ3JFLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ1osSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7b0JBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO3dCQUN6QixJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTs0QkFDYixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7NEJBQzFDLHdGQUF3Rjs0QkFDeEYsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFO2dDQUNyQixHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDOzZCQUN0RDs0QkFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQzt5QkFDbkQ7b0JBQ0wsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxFQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBQyxDQUFDLENBQUM7Z0JBQzlHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNaLENBQUM7WUFDRCxrQkFBa0IsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUU7Z0JBQ3RDLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixFQUFFLEVBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBQyxDQUFDLENBQUM7WUFDakcsQ0FBQztZQUNELHlCQUF5QixFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtvQkFDbEIsT0FBTztpQkFDVjtnQkFDRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzdDLE1BQU0sU0FBUyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsZUFBZSxLQUFLLEVBQUUsQ0FBQztnQkFDekQsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNwQixtRkFBbUY7Z0JBQ25GLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7b0JBQ3BGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsRUFBRSxxQkFBcUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3JGLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ25CLENBQUM7WUFDRCx5QkFBeUIsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxFQUFFO2dCQUMvRCxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFO29CQUN6QixPQUFPO2lCQUNWO2dCQUNELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDN0MsTUFBTSxTQUFTLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxlQUFlLFFBQVEsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDeEUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNwQixxRkFBcUY7Z0JBQ3JGLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtvQkFDM0YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixFQUFFLHFCQUFxQixDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ2xHLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ25CLENBQUM7WUFDRCxxQkFBcUIsRUFBRSxHQUFHLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLDJCQUEyQixHQUFHLEVBQUUsQ0FBQztZQUMxQyxDQUFDO1lBQ0Qsd0JBQXdCLEVBQUUsR0FBRyxFQUFFO2dCQUMzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO2dCQUNwQixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztZQUM5QixDQUFDO1lBQ0QseUJBQXlCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVcsRUFBRSxFQUFFO2dCQUN2RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzdDLE1BQU0sZUFBZSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUU7b0JBQzdCLElBQUksQ0FBQyxJQUFJLEVBQUU7d0JBQ1AsT0FBTztxQkFDVjtvQkFDRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7b0JBQ2xCLE1BQU0sT0FBTyxHQUFHO3dCQUNaLEdBQUc7d0JBQ0gsTUFBTTtxQkFDVCxDQUFDO29CQUNGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDakMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztvQkFDaEYsTUFBTSxRQUFRLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDN0MsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO29CQUMvRCxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7b0JBQzFDLElBQUksQ0FBQyxVQUFVLEVBQUU7d0JBQ2IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsR0FBRyxRQUFRLENBQUM7cUJBQzNEO3lCQUFNO3dCQUNILElBQUksQ0FBQywyQkFBMkIsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDO3FCQUNsRTtnQkFDTCxDQUFDLENBQUM7Z0JBQ0YsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO29CQUNyQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTt3QkFDekIsZUFBZSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztvQkFDeEMsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsT0FBTztpQkFDVjtnQkFDRCx1RUFBdUU7Z0JBQ3ZFLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM1RCxDQUFDO1lBQ0Qsd0JBQXdCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ3pDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDN0MsbUVBQW1FO2dCQUNuRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7b0JBQ3pDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQ2hILENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztZQUNELHFCQUFxQixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzdCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLENBQUM7WUFDRCxxQkFBcUIsRUFBRSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUU7Z0JBQzNFLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDN0MsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDNUMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7b0JBQ2pHLE9BQU87aUJBQ1Y7Z0JBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7b0JBQ2pCLE9BQU87aUJBQ1Y7Z0JBQ0Qsd0JBQXdCO2dCQUN4QixRQUFRLEVBQUUsQ0FBQztnQkFDWCx1Q0FBdUM7Z0JBQ3ZDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsT0FBTyxFQUFFO29CQUMzRSxJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxDQUFDO29CQUNyRyxPQUFPO2lCQUNWO2dCQUNELElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO2dCQUMvQixPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2hCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDZixRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sT0FBTyxHQUFHO29CQUNSLEdBQUc7b0JBQ0gsTUFBTTtvQkFDTixhQUFhLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTt3QkFDdEIsVUFBVSxDQUFDLEdBQUcsRUFBRTs0QkFDWixRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7NEJBQ2hCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQzs0QkFDZixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQzs0QkFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsRUFBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDO3dCQUNwRixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQ1osQ0FBQztpQkFBQyxDQUFDO2dCQUNYLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2RyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNqQyxVQUFVLEVBQUUsQ0FBQztZQUNqQixDQUFDO1lBQ0QsbUJBQW1CLEVBQUUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUN4QyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsbUJBQW1CLEVBQUUsRUFBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsQ0FBQztZQUN4SCxDQUFDO1lBQ0QsYUFBYSxFQUFFLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUMsQ0FBQyxDQUFDO1lBQ3ZFLENBQUM7WUFDRCxtQkFBbUIsRUFBRSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVyxFQUFFLEVBQUU7Z0JBQ25ELElBQUksZ0JBQWdCLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxVQUFVLEVBQUU7b0JBQ2IsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQztpQkFDbkU7cUJBQU07b0JBQ0gsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQztpQkFDMUU7Z0JBQ0QsT0FBTyxnQkFBZ0IsSUFBSSxFQUFFLENBQUM7WUFDbEMsQ0FBQztZQUNELGVBQWUsRUFBRSxHQUFHLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUN2QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsRUFBRSxDQUFDO1lBQ25DLENBQUM7WUFDRCxrQkFBa0IsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDbkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUN0QyxtRUFBbUU7Z0JBQ25FLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7b0JBQ2hDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDL0csQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDO1lBQ0QsWUFBWSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ3BCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLENBQUM7WUFDRCxxQkFBcUIsRUFBRSxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRTtnQkFDN0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLFlBQVksRUFBRTtvQkFDZCwrQkFBK0I7b0JBQy9CLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDbEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztvQkFDOUIsbUVBQW1FO29CQUNuRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO3dCQUNwQyxJQUFJLFNBQVMsQ0FBQzt3QkFDZCxNQUFNLE9BQU8sR0FBRzs0QkFDWixHQUFHOzRCQUNILFVBQVUsRUFBRSxHQUFHLEVBQUU7Z0NBQ2IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDOzRCQUMxRCxDQUFDOzRCQUNELG9CQUFvQixFQUFFLEdBQUcsRUFBRTtnQ0FDdkIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsaUJBQWlCLENBQUM7NEJBQ2hGLENBQUM7NEJBQ0QsMEJBQTBCLEVBQUUsR0FBRyxFQUFFO2dDQUM3QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQzs0QkFDcEYsQ0FBQzt5QkFDSixDQUFDO3dCQUNGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUMxRixTQUFTLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO3dCQUN6RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLEdBQUcsUUFBUSxDQUFDO29CQUNuRCxDQUFDLENBQUMsQ0FBQztvQkFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNyQixPQUFPO2lCQUNWO2dCQUNELCtCQUErQjtnQkFDL0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUMvQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ2pCLG1FQUFtRTtnQkFDbkUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDakMsSUFBSSxTQUFTLENBQUM7b0JBQ2QsTUFBTSxPQUFPLEdBQUc7d0JBQ1osR0FBRzt3QkFDSCxVQUFVLEVBQUUsR0FBRyxFQUFFOzRCQUNiLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUNqRCxDQUFDO3dCQUNELG9CQUFvQixFQUFFLEdBQUcsRUFBRTs0QkFDdkIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsaUJBQWlCLENBQUM7d0JBQ2hGLENBQUM7d0JBQ0QsdUJBQXVCLEVBQUUsR0FBRyxFQUFFOzRCQUMxQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQzt3QkFDakYsQ0FBQztxQkFDSCxDQUFDO29CQUNILE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN2RixTQUFTLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO29CQUN6RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEdBQUcsUUFBUSxDQUFDO2dCQUNoRCxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7WUFDRCxtQkFBbUIsRUFBRSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLEVBQUU7Z0JBQ3BELElBQUksWUFBWSxFQUFFO29CQUNkLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQzFELE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUM5QztnQkFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2pELE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzVDLENBQUM7WUFDRCxhQUFhLEVBQUUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ2hDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN4RSxJQUFJLE9BQU8sRUFBRTtvQkFDVCxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUMzQjtZQUNMLENBQUM7WUFDRCxhQUFhLEVBQUUsU0FBUyxDQUFDLEVBQUU7Z0JBQ3ZCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN4RSxPQUFPLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ3BDLENBQUM7WUFFRCw0Q0FBNEM7WUFDNUMsY0FBYyxFQUFFLEdBQUcsRUFBRTtnQkFDYixJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUU7b0JBQ3hGLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3pDLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQy9DLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFO3dCQUN0QyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO3dCQUN2RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7cUJBQzlCO3lCQUFNO3dCQUNILElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQzt3QkFDaEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7cUJBQzdCO2dCQUNULENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDM0IsQ0FBQztZQUNELGdDQUFnQztZQUNoQyxhQUFhLEVBQUUsR0FBRyxFQUFFO2dCQUNoQixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtvQkFDM0Qsc0NBQXNDO29CQUN0Qyx5REFBeUQ7b0JBQ3pELFVBQVUsQ0FBQyxHQUFHLEVBQUU7d0JBQ1osSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLGNBQWMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO29CQUNqRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ1Q7WUFDTCxDQUFDO1lBQ0QsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO2dCQUNwQiwrQkFBK0I7Z0JBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUM7Z0JBQzlCLDhFQUE4RTtnQkFDOUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDN0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUU7d0JBQ3pELFFBQVEsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzt3QkFDM0MsVUFBVSxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUU7NEJBQ3RCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO3dCQUMvRyxDQUFDO3FCQUNKLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2hCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7Z0JBQ3RGLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztZQUNELGVBQWUsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUMzQix1REFBdUQ7Z0JBQ3ZELE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQy9DLENBQUM7WUFDRCxlQUFlLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO29CQUNqQixJQUFJLENBQUMsY0FBYyxHQUFHLEdBQUcsQ0FBQztvQkFDMUIsVUFBVSxFQUFFLENBQUM7Z0JBQ2pCLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztZQUNELFlBQVksRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNsQixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsS0FBSyxTQUFTLENBQUM7WUFDdkMsQ0FBQztZQUNEOzs7O2VBSUc7WUFDSCxpQkFBaUIsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUN2QixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMseUJBQXlCLEVBQUUsRUFBRTtvQkFDOUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3BDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7b0JBQzlELElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRTt3QkFDL0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDekUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7cUJBQ2pHO2lCQUNKO1lBQ0wsQ0FBQztZQUNELG1CQUFtQixFQUFFLEdBQUcsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRTtvQkFDN0QsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7aUJBQzdCO1lBQ0wsQ0FBQztZQUNELGlCQUFpQixFQUFFLEdBQUcsRUFBRTtnQkFDcEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLENBQUM7WUFDRCxzREFBc0Q7WUFDdEQsYUFBYSxFQUFFLEdBQUcsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ3pCLFNBQVMsQ0FBQyxHQUFHLENBQUMsY0FBYyxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQzNELFNBQVMsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLElBQUksR0FBRyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNqRSxTQUFTLENBQUMsR0FBRyxDQUFDLGNBQWMsSUFBSSxHQUFHLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMvRCxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7WUFDRCxhQUFhLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDaEQsV0FBVyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzlDLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDdkIsVUFBVSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMxQixDQUFDO1lBQ0QsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFO2dCQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hCLENBQUM7WUFDRCxTQUFTLEVBQUUsR0FBRyxFQUFFO2dCQUNaLFVBQVUsRUFBRSxDQUFDO1lBQ2pCLENBQUM7WUFDRCxVQUFVLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDakIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3hDLElBQUksSUFBSSxFQUFFO29CQUNOLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztpQkFDeEI7WUFDTCxDQUFDO1lBQ0QsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNwQyx3QkFBd0IsRUFBRSxHQUFHLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUM3QixJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFO3dCQUNuQyxTQUFTLENBQUMsR0FBRyxDQUFDLG9CQUFvQixJQUFJLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztxQkFDN0U7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDO1lBQ0QsdURBQXVEO1lBQ3ZELGdCQUFnQixFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxFQUFFO2dCQUNwQyxJQUFJLFlBQVksRUFBRTtvQkFDZCxTQUFTLENBQUMsR0FBRyxDQUFDLHNCQUFzQixJQUFJLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztpQkFDakY7cUJBQU07b0JBQ0gsU0FBUyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsSUFBSSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7aUJBQ3JFO1lBQ0wsQ0FBQztZQUNELHdGQUF3RjtZQUN4RixpQkFBaUIsRUFBRSxDQUFDLFlBQVksRUFBRSxFQUFFO2dCQUNoQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksR0FBRyxDQUFDLE9BQU8sS0FBSyxlQUFlLEVBQUU7d0JBQ2xELElBQUksWUFBWSxFQUFFOzRCQUNkLFNBQVMsQ0FBQyxHQUFHLENBQUMsdUJBQXVCLElBQUksR0FBRyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO3lCQUNuRjs2QkFBTTs0QkFDSCxTQUFTLENBQUMsR0FBRyxDQUFDLGlCQUFpQixJQUFJLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzt5QkFDdkU7cUJBQ0o7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDO1NBQ0osQ0FBQztRQUdNLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQWl3QzVCLGNBQVMsR0FBUSxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFDMUIsZUFBVSxHQUFRLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQXBwQy9CLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRWpDLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLE1BQU0saUJBQWlCLEdBQUc7WUFDdEIsOEVBQThFO1lBQzlFLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLGlDQUFpQyxFQUFFLE9BQU8sQ0FBQyxFQUFFO2dCQUM1RCxJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3BELG1IQUFtSDtnQkFDbkgsSUFBSSxDQUFDLGNBQWMsRUFBRTtvQkFDakIsY0FBYyxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztpQkFDL0Q7Z0JBQ0QsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsS0FBSyxjQUFjLEVBQUU7b0JBQ3BELE9BQU87aUJBQ1Y7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLE1BQU0sRUFBRTtvQkFDeEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7b0JBQ3ZCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQy9ELElBQUksV0FBVyxFQUFFO3dCQUNiLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO3FCQUMxRDt5QkFBTzt3QkFDSixJQUFJLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7cUJBQ3JFO2lCQUNKO1lBQ0wsQ0FBQyxDQUFDO1lBRUYsdURBQXVEO1lBQ3ZELElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLHVCQUF1QixFQUFFLE9BQU8sQ0FBQyxFQUFFO2dCQUNsRCxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtvQkFDdkksSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLE1BQU0sRUFBRTt3QkFDeEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7d0JBQ3ZCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQy9ELElBQUksV0FBVyxFQUFFOzRCQUNiLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO3lCQUMxRDs2QkFBTTs0QkFDSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7eUJBQ3JFO3FCQUNKO29CQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUN6RztZQUNMLENBQUMsQ0FBQztZQUVGLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxFQUFFO2dCQUM3QyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO29CQUNyQixPQUFPO2lCQUNWO2dCQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO2dCQUN6QixJQUFJLENBQUMsbUJBQW1CO3FCQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUN2QixTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNuRCxDQUFDLENBQUM7U0FDTCxDQUFDO1FBRUYsaUJBQWlCLENBQUMsT0FBTyxDQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFFLENBQUM7UUFFbEUsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUM1QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUM7SUFDeEQsQ0FBQztJQUVELGtCQUFrQjtRQUNkLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQztRQUMvQyxNQUFNLHdCQUF3QixHQUFHO1lBQzdCLFlBQVksRUFBRSxjQUFjO1lBQzVCLFdBQVcsRUFBRSxhQUFhO1lBQzFCLFdBQVcsRUFBRSxpQkFBaUI7WUFDOUIsaUJBQWlCLEVBQUUsbUJBQW1CO1lBQ3RDLFVBQVUsRUFBRSxZQUFZO1lBQ3hCLFVBQVUsRUFBRSxZQUFZO1lBQ3hCLHFCQUFxQixFQUFFLHVCQUF1QjtZQUM5QyxVQUFVLEVBQUUsWUFBWTtZQUN4QixrQkFBa0IsRUFBRSxnQkFBZ0I7U0FDdkMsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7U0FDaEM7UUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ3JDLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxNQUFNLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO2FBQ3RCO2lCQUFNO2dCQUNILElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO29CQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO2lCQUNyRztxQkFBTTtvQkFDSCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztpQkFDN0Q7YUFDSjtTQUNKO1FBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUM5QyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQzlDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDbEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUMxQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDbEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUM5QyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ2hELElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLFFBQVEsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDaEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUM5QyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ3RELElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1FBQzlELElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDeEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUN4RCxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBRXRELDBMQUEwTDtRQUMxTCx1SEFBdUg7UUFDdkgsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzNCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDMUQ7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRztZQUN4QixhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0I7U0FDckQsQ0FBQztRQUNGLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFM0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUMsVUFBVSxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUM7UUFFNUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUMvQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO2FBQzFFO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssTUFBTSxFQUFFO1lBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxLQUFLLENBQUM7U0FDOUM7UUFFRCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBRTFDLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDckUsOERBQThEO1FBQzlELDRFQUE0RTtRQUM1RSxXQUFXO1FBQ1gsMEVBQTBFO1FBQzFFLElBQUk7UUFFSixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFbEUsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxVQUFVLEVBQUU7WUFDeEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUQsUUFBUSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUM5RDtJQUNMLENBQUM7SUFDTyxrQkFBa0I7UUFDdEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbEUsT0FBTyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsT0FBTztRQUMxQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7U0FDbkM7UUFDRCxPQUFPLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLEVBQUU7WUFDbEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQztZQUM5QyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxFQUFFO2dCQUM1QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ25DLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO2FBQzNHO1lBQ0QsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsRUFBRTtnQkFDOUIsVUFBVSxDQUFFLEdBQUcsRUFBRTtvQkFDYixJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3pDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDUixPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUMzRTtTQUNKO2FBQU07WUFDSCxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsRUFBRTtnQkFDOUIsVUFBVSxDQUFFLEdBQUcsRUFBRTtvQkFDYixJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3pDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDUixPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUMzRTtZQUNELElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDbkMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLGdCQUFnQixDQUFDLENBQUM7YUFDM0c7U0FDSjtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFFTyxjQUFjLENBQUMsTUFBTTtRQUN6QixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFO1lBQzVCLE9BQU87U0FDVjtRQUNELGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBQyxTQUFTLEVBQUUsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztJQUNwSCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsV0FBVztRQUNoQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQzFDLE1BQU0sU0FBUyxHQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUM7UUFDakgsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLEtBQUssSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFHO1lBQ3JFLFNBQVMsQ0FBQyxRQUFRLENBQUMseUJBQXlCLENBQUMsQ0FBQztTQUNqRDthQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxNQUFNLElBQUssU0FBUyxDQUFDLE1BQU0sRUFBRTtZQUM3RSxTQUFTLENBQUMsUUFBUSxDQUFDLDRCQUE0QixDQUFDLENBQUM7U0FDcEQ7SUFDTCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsV0FBVztRQUNsQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQy9CLENBQUMsQ0FBQyxPQUFPLENBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUN6QyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUNqQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztvQkFDeEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUM7b0JBQ2hFLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO29CQUN0RCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFO3dCQUNyRCxNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQzt3QkFDdkYsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDbkY7aUJBQ0o7WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNOO2FBQU07WUFDSCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQzFDLFlBQVksQ0FBQyxJQUFJLENBQUMsK0JBQStCLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqRixZQUFZLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDckY7SUFDTCxDQUFDO0lBRUQsOENBQThDO0lBQzlDLGlCQUFpQixDQUFDLElBQUk7UUFDbEIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDekU7UUFDRCxPQUFPLElBQUksS0FBSyxTQUFTLENBQUM7SUFDOUIsQ0FBQztJQUNELDJEQUEyRDtJQUMzRCx3QkFBd0IsQ0FBQyxXQUFXLEVBQUUsVUFBVTtRQUM1QyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sS0FBSyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEcsQ0FBQztJQUVELDZGQUE2RjtJQUM3Riw2QkFBNkI7UUFDekIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ25NLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbEYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsdUZBQXVGO0lBQ3ZGLDBFQUEwRTtJQUMxRSw0QkFBNEI7UUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNqRiwyRUFBMkU7UUFDM0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsZ0hBQWdIO0lBQ2hILHdCQUF3QjtRQUNwQixJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUseUJBQXlCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUMsRUFBRTtZQUNwSCxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQy9KLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztZQUM1RixJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNWLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO2FBQ3hDO1NBQ0o7SUFDTCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsTUFBTTtRQUN2QixJQUFJLE1BQU0sQ0FBQztRQUNYLHdDQUF3QztRQUN4QyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMseUJBQXlCLEVBQUUsRUFBRTtZQUM5QyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztTQUNuQztRQUNELHNDQUFzQztRQUN0QyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsS0FBSyxhQUFhLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxNQUFNLEVBQUU7WUFDaEgsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxFQUFFO2dCQUNwQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO2FBQ25DO2lCQUFNO2dCQUNILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQzthQUNyRTtZQUNELElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDckMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUN6RTtZQUNELElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ2pFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUN0QztZQUNELElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLEVBQUU7Z0JBQ2xDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUN4RTtTQUNKO1FBQ0QsNEdBQTRHO1FBQzVHLElBQUksSUFBSSxDQUFDLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN2RSxPQUFPO1NBQ1Y7UUFDRCxxREFBcUQ7UUFDckQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUN4RTtRQUVELE1BQU0sR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFOUIsdUZBQXVGO1FBQ3ZGLElBQUksTUFBTSxFQUFFO1lBQ1IsTUFBTSxHQUFHLE1BQU0sQ0FBQztTQUNuQjtRQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLElBQUksT0FBTyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRztnQkFDWixTQUFTLEVBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDekIsS0FBSyxFQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7YUFFeEIsQ0FBQztTQUNMO1FBRUQsOEJBQThCO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDckIsT0FBTztTQUNWO1FBRUQsa0VBQWtFO1FBQ2xFLElBQUksTUFBTSxFQUFFO1lBQ1IsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFO2dCQUNuRCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztnQkFDNUIsT0FBTzthQUNWO1NBQ0o7YUFBTTtZQUNILElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzNCLGdHQUFnRztZQUNoRyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUN4QixJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDdEU7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7U0FDckU7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksTUFBTSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztTQUNoRDtRQUVELElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLFNBQVMsS0FBSyxFQUFFLENBQUMsRUFBRTtZQUM3RSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUN4Qiw0RUFBNEU7Z0JBQzVFLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDeEI7WUFDRCxPQUFPO1NBQ1Y7UUFDRCxJQUFJLE1BQU0sRUFBRTtZQUNSLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNqQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1AsUUFBUSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUM5RCxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUMzQixJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDM0M7UUFDRCxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtZQUM5QixJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDOUM7UUFDRCxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFHO1FBQ1gsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdkQsSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFO1lBQ2QsT0FBTyxHQUFHLENBQUM7U0FDZDtRQUNELE9BQU8sQ0FBQyxNQUFNLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUM5QixPQUFPLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUMxRCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRUQsa0JBQWtCLENBQUMsT0FBTztRQUN0QixPQUFPLENBQUMsU0FBUyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMzQyxPQUFPLENBQUMsU0FBUyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMzQyxPQUFPLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRUQsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPO1FBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3hJLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBQ0QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM5RSxDQUFDO0lBRUQsbUJBQW1CO1FBQ2YsT0FBTyxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ2xGLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxPQUFPO1FBQ3RCLE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQyxHQUFHLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxFQUFFO1lBQ3RCLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDO1FBQ0YsR0FBRyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztRQUNoQyxHQUFHLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFDbEQsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQ25CLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQztRQUNoQixPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRCxhQUFhLENBQUMsSUFBSTtRQUNkLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3BDLHNHQUFzRztRQUN0RyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDYixJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDeEU7YUFBTTtZQUNILDBFQUEwRTtZQUMxRSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDakQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ3RFO2lCQUFNO2dCQUNILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDakQ7U0FDSjtJQUNMLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLFVBQVU7UUFDNUMsSUFBSSxTQUFTLEtBQUssS0FBSyxJQUFJLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxNQUFNLENBQUMsU0FBUyxLQUFLLFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtZQUNySSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztTQUN0QztJQUNMLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFJO1FBQ2pCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUFPO1FBQ2IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDbkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN2QyxzRkFBc0Y7WUFDdEYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFO2dCQUN0RyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN4QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDckM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxLQUFLO1FBQzVCLElBQUksU0FBUyxDQUFDO1FBQ2QsSUFBSSxRQUFRLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRTtZQUMxQyxTQUFTLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQztTQUNuQzthQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUU7WUFDbkMsU0FBUyxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUM7U0FDbkM7YUFBTTtZQUNILFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1NBQy9CO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVELHdDQUF3QztJQUN4QyxhQUFhLENBQUMsTUFBTTtRQUNoQixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZDLElBQUksSUFBSSxFQUNKLFdBQVcsQ0FBQztRQUVoQixPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDcEMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwQix5REFBeUQ7WUFDekQsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO1lBQzVJLHdDQUF3QztZQUN4QyxJQUFJLFdBQVcsRUFBRTtnQkFDYixPQUFPLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQzthQUMvRDtZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELHdDQUF3QztJQUN4QyxrQkFBa0IsQ0FBQyxXQUFXO1FBQzFCLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRTtZQUNqQyxvREFBb0Q7WUFDcEQsWUFBWSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3RDLE9BQU8sTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqRCxDQUFDLENBQUMsQ0FBQztTQUNOO1FBQ0QsT0FBTyxZQUFZLENBQUM7SUFDeEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxVQUFVO1FBQ2xCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDeEYsOEVBQThFO1FBQzlFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxLQUFLLGFBQWEsRUFBRTtZQUN0RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1NBQ2pDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN4QixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUN0RTtpQkFBTTtnQkFDSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQ2pEO1NBQ0o7UUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztJQUN6QixDQUFDO0lBRUQsaUJBQWlCLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEdBQUcsS0FBSztRQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDekcsT0FBTztTQUNWO1FBQ0QsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksU0FBUyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLEVBQUU7WUFDN0UsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztZQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7U0FDekM7SUFDTCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsR0FBRyxJQUFJO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDdEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ25DLE9BQU8sQ0FBQywyREFBMkQ7U0FDdEU7UUFDRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCxzQkFBc0I7UUFDbEIsSUFBSSxZQUFZLEVBQ1osY0FBYyxDQUFDO1FBRW5CLE1BQU0sbUJBQW1CLEdBQUcsc0JBQXNCLEVBQUUsRUFDaEQsTUFBTSxHQUFHO1lBQ0wsTUFBTSxFQUFFLG1CQUFtQixDQUFDLEtBQUs7WUFDakMsT0FBTyxFQUFFLG1CQUFtQixDQUFDLEtBQUs7WUFDbEMsY0FBYyxFQUFFLElBQUk7U0FDdkIsQ0FBQztRQUNOLHFDQUFxQztRQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7WUFDeEIsT0FBTztTQUNWO1FBRUQsWUFBWSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBQyxDQUFDLENBQUMsQ0FBQyx5Q0FBeUM7UUFDOUgsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFDLENBQUMsQ0FBQyxDQUFDLDZCQUE2QjtRQUMvRixDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBQyxLQUFLLEVBQUUsbUJBQW1CLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQztRQUVoRSxzRkFBc0Y7UUFDdEYsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRTtZQUN4QixJQUFJLFlBQVksRUFBRSxFQUFFLDZFQUE2RTtnQkFDN0YsY0FBYyxHQUFHLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7Z0JBQ3ZILElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQ3ZELElBQUksY0FBYyxLQUFLLENBQUMsRUFBRTtvQkFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ3JDO3FCQUFNO29CQUNILElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUNsQzthQUNKO2lCQUFNO2dCQUNILElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ2xDO1NBQ0o7UUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsb0JBQW9CO1FBQ2hCLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDeEQsb0JBQW9CO1lBQ3BCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7WUFFakMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUMzQztZQUNELDhIQUE4SDtZQUM5SCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQzlFLHVCQUF1QjtnQkFDdkIsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQ25CLGtIQUFrSDtvQkFDbEgsd0RBQXdEO29CQUN4RCxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRTt3QkFDakMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUNyQzt5QkFBTTt3QkFDSCxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7NEJBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7eUJBQzNDOzZCQUFNLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTs0QkFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7eUJBQzlDOzZCQUFNOzRCQUNILElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQzt5QkFDaEM7cUJBQ0o7aUJBQ0o7cUJBQU07b0JBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDO2lCQUNuQztZQUNMLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNULDBDQUEwQztZQUMxQyxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsRUFBRSxDQUFDO2FBQzlDO1lBQ0QsOEhBQThIO1lBQzlILElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNyRixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztZQUMzQixDQUFDLENBQUMsQ0FBQztZQUNILCtFQUErRTtZQUMvRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7WUFFL0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDO1lBQzFELElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxHQUFHO2dCQUN6QixVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDO2FBQ2pDLENBQUM7WUFDRixJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDMUo7SUFDTCxDQUFDO0lBRUQsbUJBQW1CO1FBQ2Ysb0JBQW9CO1FBQ3BCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNwQixJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixFQUFFLENBQUM7U0FDNUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksS0FBSyxDQUFDO1FBQ1YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFFbkMsaUdBQWlHO1FBQ2pHLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRTtZQUNmLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1NBQ3pCO1FBQ0QsSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ3BDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQzNCLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQzthQUNyQztTQUNKO1FBQ0QsSUFBSSxLQUFLLEVBQUU7WUFDUCxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3JELE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELDJDQUEyQztJQUMzQyxnQkFBZ0IsQ0FBQyxXQUFXO1FBQ3hCLElBQUksSUFBSSxDQUFDO1FBQ1QsV0FBVyxHQUFHLGFBQWEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BELDBFQUEwRTtRQUMxRSxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUNyRCxJQUFJLEdBQUcsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3BDLElBQUksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbkQsSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMvQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztTQUMxQjthQUFNO1lBQ0gsSUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUM7U0FDakM7UUFDRCw2REFBNkQ7UUFDN0QscUxBQXFMO1FBQ3JMLDZGQUE2RjtRQUM3RixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDckIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUMzQzthQUFNO1lBQ0gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDckM7UUFDRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRTtZQUN4RixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9ELElBQUksZ0JBQWdCLENBQUM7WUFDckIsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsRUFBRTtnQkFDcEMsZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ3JELE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUM7Z0JBQzFELENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7Z0JBQ2pDLDRFQUE0RTtnQkFDNUUsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEtBQUssV0FBVyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUU7b0JBQ3pGLG9FQUFvRTtvQkFDcEUsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRTt3QkFDOUIsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7NEJBQzlCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQzt3QkFDM0MsQ0FBQyxDQUFDLENBQUM7cUJBQ047eUJBQU07d0JBQ0gsSUFBSSxDQUFDLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsVUFBUyxHQUFHLElBQUcsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ2hGO2lCQUNKO2FBQ0o7U0FDSjtJQUNMLENBQUM7SUFFRCxxRUFBcUU7SUFDckUsS0FBSyxDQUFDLHNCQUFzQixDQUFDLE9BQU87UUFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsQ0FBQyx3QkFBd0I7UUFDN0Msd0NBQXdDO1FBQ3ZDLElBQUksQ0FBQyxVQUFrQixDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFFdkMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3BCLE9BQU87U0FDVjtRQUVELElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNkLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDbEIsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO1lBQ25CLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUNwQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtnQkFDeEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxLQUFLLEVBQUUsRUFBRTtvQkFDbkMsd0ZBQXdGO29CQUN4RixJQUFJLEdBQUcsS0FBSyxrQkFBa0IsRUFBRTt3QkFDNUIsVUFBVSxHQUFHLEdBQUcsQ0FBQztxQkFDcEI7eUJBQU07d0JBQ0gsU0FBUyxJQUFJLElBQUksR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDO3FCQUNuQztpQkFDSjtZQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxJQUFJLG9CQUFvQixTQUFTLGVBQWUsSUFBSSxDQUFDLElBQUksR0FBSSxJQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLFVBQVUsb0JBQW9CLENBQUM7UUFDbkosQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDdEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQ3hEO1FBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ2xDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxJQUFJLENBQUMsd0JBQXdCLENBQUMsc0JBQXNCLENBQ2xGLG9CQUFvQixHQUFHLElBQUksQ0FBQyxRQUFRLEVBQ3BDLElBQUksRUFDSjtZQUNJLE9BQU8sRUFBRSxJQUFJO1lBQ2IsU0FBUyxFQUFFLElBQUk7U0FDbEIsQ0FBQyxDQUFDO1FBQ1AsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6RixXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNwRyxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQUk7UUFDZixJQUFJLGdCQUFnQixDQUFDO1FBQ3JCLElBQUksVUFBVSxDQUFDO1FBQ2YsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztRQUVwQixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNsQixnSEFBZ0g7UUFDaEgsVUFBVSxHQUFHLElBQUksQ0FBQztRQUNsQixxR0FBcUc7UUFDckcsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFaEQsZ0NBQWdDO1FBQ2hDLENBQUMsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDLEVBQUU7WUFDcEMsU0FBUyxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO1lBQ3BDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQztZQUMxQyxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUMzQixTQUFTLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztZQUMvQixTQUFTLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztZQUMvQixTQUFTLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUM1QixTQUFTLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztZQUM5QixTQUFTLENBQUMsSUFBSSxHQUFJLFFBQVEsQ0FBQztZQUMzQiw0RkFBNEY7WUFDNUYsbURBQW1EO1lBQ25ELFNBQVMsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDO1lBQzlCLFNBQVMsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1lBQ3BDLFdBQVcsRUFBRSxDQUFDO1lBQ2QsV0FBVyxFQUFFLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixFQUFFLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQztRQUV2SCxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDdEIscUNBQXFDO1FBQ3JDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBRTtZQUMxQixnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsc0JBQXNCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBSTtRQUNsQixpRUFBaUU7UUFDakUsd0NBQXdDO1FBQ3hDLE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDdEMsbUVBQW1FO1FBQ25FLElBQUksU0FBUyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMvQixJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNqQjtRQUNELDhDQUE4QztRQUM5QyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDakIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QixPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ1osT0FBTztTQUNWO1FBQ0QsbUZBQW1GO1FBQ25GLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLE9BQU8sQ0FBQztRQUNaLElBQUksYUFBYSxDQUFDO1FBQ2xCLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQzlFLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDakYsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNoRjtRQUNELE9BQU8sT0FBTyxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsR0FBVyxFQUFFLEVBQU8sRUFBRSxFQUFRO1FBQzNDLElBQUksWUFBWSxDQUFDO1FBQ2pCLFFBQVEsR0FBRyxFQUFFO1lBQ1QsS0FBSyxZQUFZO2dCQUNiLDhGQUE4RjtnQkFDOUYseUNBQXlDO2dCQUN6QyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEtBQUssS0FBSyxFQUFFO29CQUMxQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO29CQUM5QixJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7aUJBQ3RFO2dCQUNELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUMxQixNQUFNO1lBQ1YsS0FBSyxTQUFTO2dCQUNWLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyx5QkFBeUIsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxFQUFFO29CQUN6RixJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUM3QztnQkFDRCxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUN6QyxPQUFPO2lCQUNWO2dCQUNELG1HQUFtRztnQkFDbkcsNkRBQTZEO2dCQUM3RCxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsRUFBRTtvQkFDL0UsSUFBSSxDQUFDLFVBQVUsR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDN0Y7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLHlCQUF5QixFQUFFLEVBQUU7b0JBQzlDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUU7d0JBQ2pDLCtCQUErQjt3QkFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDbEQ7eUJBQU07d0JBQ0gsc0NBQXNDO3dCQUN0QyxJQUFJLENBQUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUM5QyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQzt3QkFDcEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDN0M7aUJBQ0o7Z0JBQ0QsOEZBQThGO2dCQUM5RixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEtBQUssYUFBYSxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLEtBQUssTUFBTSxDQUFDLEVBQUU7b0JBQ25ILElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDakM7Z0JBQ0QsTUFBTTtZQUNWLEtBQUssWUFBWTtnQkFDYixJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN6QyxNQUFNO1lBQ1YsS0FBSyxhQUFhO2dCQUNkLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQzFDLE1BQU07WUFDVixLQUFLLFlBQVk7Z0JBQ2IsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFLEVBQUUsa0ZBQWtGO29CQUN2RyxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztvQkFDNUIsT0FBTztpQkFDVjtnQkFDRCxJQUFJLEVBQUUsS0FBSyxNQUFNLEVBQUU7b0JBQ2YsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7aUJBQzlCO2dCQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN0RCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsS0FBSyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFDbkUsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLEtBQUssZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQzlELElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO2dCQUN0QixNQUFNO1lBQ1YsS0FBSyxvQkFBb0I7Z0JBQ3JCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDN0MsTUFBTTtZQUNWLEtBQUssV0FBVztnQkFDWixJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLG9CQUFvQixFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUM1RCxNQUFNO1lBQ1YsS0FBSyxlQUFlO2dCQUNoQixJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMzRCxNQUFNO1lBQ1YsS0FBSyxnQkFBZ0I7Z0JBQ2pCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQzVELE1BQU07WUFDVixLQUFLLGFBQWE7Z0JBQ2QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3JELE1BQU07WUFDVixLQUFLLFNBQVM7Z0JBQ1YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ2pELElBQUksRUFBRSxLQUFLLFdBQVcsRUFBRTtvQkFDcEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUM7aUJBQ2pDO3FCQUFNO29CQUNILElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO2lCQUM1QjtnQkFDRCxNQUFNO1lBQ1YsS0FBSyxjQUFjO2dCQUNmLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO2dCQUN4QixJQUFJLEVBQUUsRUFBRTtvQkFDSiw2Q0FBNkM7b0JBQzdDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUU7d0JBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDOzRCQUNwQixLQUFLLEVBQUUsSUFBSTs0QkFDWCxJQUFJLEVBQUUsaUJBQWlCLENBQUMsSUFBSSxDQUFDO3lCQUNoQyxDQUFDLENBQUM7b0JBQ1AsQ0FBQyxDQUFDLENBQUM7aUJBQ047Z0JBQ0QsTUFBTTtZQUNWLEtBQUssWUFBWTtnQkFDYixrRUFBa0U7Z0JBQ2xFLFlBQVksR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsb0JBQW9CLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQ3RFLE1BQU07WUFDVixLQUFLLFVBQVU7Z0JBQ1gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEdBQUc7b0JBQ3pCLFVBQVUsRUFBRSxFQUFFO2lCQUNqQixDQUFDO2dCQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztnQkFDbkMsTUFBTTtZQUNWLEtBQUssaUJBQWlCO2dCQUNsQixJQUFJLEVBQUUsRUFBRTtvQkFDSixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDMUQ7Z0JBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO2dCQUN0QyxNQUFNO1lBQ1YsS0FBSyxpQkFBaUI7Z0JBQ2xCLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztnQkFDdEMsTUFBTTtZQUNWLEtBQUssTUFBTTtnQkFDUCxJQUFJLEVBQUUsRUFBRTtvQkFDSixJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ3BDO3FCQUFNO29CQUNILElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDcEM7WUFDTDtnQkFDSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUMzQztJQUNMLENBQUM7SUFFRCxrQkFBa0I7UUFDZCxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMxQixTQUFTLENBQUMsR0FBRyxDQUFDLGtCQUFrQixJQUFJLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN6RSxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxrQkFBa0I7UUFDdEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUM7UUFDaEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7UUFDL0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELGFBQWEsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUU7UUFDckIsUUFBUSxHQUFHLEVBQUU7WUFDVCxLQUFLLE9BQU87Z0JBQ1IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDMUQsTUFBTTtZQUNWLEtBQUssUUFBUTtnQkFDVCxJQUFJLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMzRCxNQUFNO1NBQ2I7UUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELGVBQWU7UUFDWCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQy9CLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxFQUFFO2dCQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDckM7WUFDRCxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsRUFBRTtnQkFDdkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3JDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsMENBQTBDO0lBQzFDLHlCQUF5QixDQUFDLFdBQVc7UUFDakMsdUdBQXVHO1FBQ3ZHLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNwQixJQUFJLENBQUMsVUFBa0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3ZEO0lBQ0wsQ0FBQztJQUVELGVBQWUsQ0FBQyxXQUFXLEVBQUUsUUFBUTtRQUNqQyxJQUFJLFFBQVEsRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFO1lBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFO2dCQUM1QixPQUFPO2FBQ1Y7U0FDSjthQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUU7WUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUU7Z0JBQzVCLE9BQU87YUFDVjtTQUNKO2FBQU07WUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRTtnQkFDeEIsT0FBTzthQUNWO1NBQ0o7UUFDRCxJQUFJLFdBQVcsQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0M7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFdBQVcsQ0FBQztRQUN2QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUN2QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRztZQUNoQyxLQUFLLEVBQUUsU0FBUztTQUNuQixDQUFDO1FBQ0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsNkVBQTZFO1FBQzdFLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxRQUFRLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUN0RCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNyRDtJQUNMLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsU0FBUztRQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsZUFBZSxDQUFDLFdBQVc7UUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxXQUFXLENBQUMsUUFBUSxFQUFFLFdBQVc7UUFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7UUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSw2QkFBNkIsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsK0JBQStCLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM3RixJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztRQUM1QyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQzFDLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxjQUFjO1FBQzdCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUk7UUFDakIseUZBQXlGO1FBQ3pGLElBQUksSUFBSSxFQUFFO1lBQ04sSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7U0FDMUI7UUFDRCxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzVCLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hELENBQUMsQ0FBQyxDQUFDO1NBQ047UUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBQ0QsNEJBQTRCO0lBQzVCLFlBQVksQ0FBQyxJQUFJO1FBQ2IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsNEJBQTRCLENBQUMsRUFBRTtRQUMzQixJQUFJLElBQUksQ0FBQztRQUNULElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUM3QyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDdEIsSUFBSSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDdEMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDakI7WUFDRCxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ25ELElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDL0MsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFPO1FBQ2xDLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRTtZQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDekM7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUs7UUFDUixJQUFJLFlBQVksQ0FBQztRQUNqQixNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDeEcsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksT0FBTyxDQUFDO1FBQ1osSUFBSSxXQUFXLENBQUM7UUFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDOUIsb0VBQW9FO1lBQ3BFLElBQUksUUFBUSxDQUFDLEtBQUssS0FBSyxhQUFhLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFO2dCQUNwRCxPQUFPO2FBQ1Y7WUFDRCxNQUFNLE1BQU0sR0FBRztnQkFDWCxRQUFRLEVBQUUsUUFBUSxDQUFDLFdBQVc7YUFDakMsQ0FBQztZQUNGLHdGQUF3RjtZQUN4RixpQ0FBaUM7WUFDakMsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ3JCLE1BQU8sQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDO2FBQ3hEO2lCQUFNO2dCQUNHLE1BQU8sQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQzthQUN4QztZQUNELE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3JELFdBQVcsR0FBRztZQUNWLFNBQVMsRUFBRyxvQkFBb0I7WUFDaEMsWUFBWSxFQUFHLFlBQVk7WUFDM0IsT0FBTyxFQUFHLFdBQVc7WUFDckIsVUFBVSxFQUFHLEtBQUssQ0FBQyxLQUFLO1lBQ3hCLFNBQVMsRUFBRyxLQUFLO1lBQ2pCLFVBQVUsRUFBRyxJQUFJLENBQUMsY0FBYztZQUNoQyxPQUFPLEVBQUcsT0FBTztTQUNwQixDQUFDO1FBQ0YsT0FBTyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUUsRUFBQyxLQUFLLEVBQUUsV0FBVyxFQUFDLENBQUMsQ0FBQztRQUN6RSxJQUFJLE9BQU8sS0FBSyxLQUFLLEVBQUU7WUFDbkIsT0FBTztTQUNWO1FBQ0QsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFDLElBQUksRUFBRSxXQUFXLEVBQUMsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBSztRQUNYLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFLO1FBQ2IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsS0FBSztRQUM1QixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzdCLHFFQUFxRTtRQUNyRSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO1lBQzlGLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU8sT0FBTyxDQUFDLFdBQVc7UUFDdkIsSUFBSSxXQUFXLEVBQUU7WUFDYixJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDcEQ7YUFBTTtZQUNILFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ2pELENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsTUFBTSxFQUFFLFVBQWtCO1FBQ3hDLE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNuQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELHFEQUFxRDtJQUMzQyxXQUFXLENBQUMsSUFBaUIsRUFBRSxTQUFpQixFQUFFLFFBQWtCLEVBQUUsTUFBVztRQUN2RixJQUFJLFNBQVMsS0FBSyxRQUFRLEVBQUU7WUFDeEIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDdEU7SUFDTCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRztRQUNoRCxNQUFNLE1BQU0sR0FBUSxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUMxQixPQUFPO1NBQ1Y7UUFDRCxJQUFJLFNBQVMsS0FBSyxRQUFRLEVBQUU7WUFDeEIsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNwQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsYUFBYSxDQUFDO1lBQ3RELElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7U0FDekQ7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsa0JBQWtCLEtBQUksQ0FBQztJQUV2Qix5RUFBeUU7SUFDekUsVUFBVSxLQUFJLENBQUM7SUFLZixnQkFBZ0IsQ0FBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUNELGlCQUFpQixDQUFDLEVBQUU7UUFDaEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELFVBQVU7UUFDTixLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEtBQUssYUFBYSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLE1BQU0sRUFBRTtZQUM5RixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztTQUMxQjthQUFNO1lBQ0gsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7U0FDekI7SUFDTCxDQUFDOztBQXBpRU0sOEJBQWUsR0FBRyxhQUFhLEVBQUUsQ0FBQzs0RUFEaEMsY0FBYyx5VkEwM0JSLGNBQWMsd0JBQ2QsaUJBQWlCLHdCQUNqQixjQUFjO2lFQTUzQnBCLGNBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozt1QkFFWixtQkFBbUI7OytCQUtxQixnQkFBZ0I7K0JBR1QsZ0JBQWdCO2dDQUd2QixnQkFBZ0I7Z0NBR2IsZ0JBQWdCO2dDQUduQixnQkFBZ0I7Z0NBSWpCLGdCQUFnQjtnQ0FDUCxnQkFBZ0I7Z0NBRTFCLGdCQUFnQjs7Ozs7Ozs7Ozs7Ozs7dUdBMUJ4RCxzQkFBa0I7MENBTGhCO1lBQ1AsU0FBUyxDQUFDLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUM7WUFDbEQsa0JBQWtCLENBQUMsY0FBYyxDQUFDO1NBQ3JDO1FDMUVMLCtEQWlCTTtRQUNOLDRCQUFpRDtRQUVqRCw4QkFBbUwsYUFBQTtRQUUzSyx5QkFJbUY7UUFDdkYsaUJBQU07UUFDTiwrREFJTTtRQUNWLGlCQUFNO1FBRU4sZ0hBSWM7UUFFZCxnSEFLYztRQUVkLCtCQUFZO1FBQ1IsbUNBQW9ELGNBQUEsY0FBQSxjQUFBLGNBQUEsY0FBQSxjQUFBLGNBQUE7UUFnQnBELDJCQUEyQztRQUMvQyxpQkFBTTs7UUFsRXNCLDZIQUF3RjtRQW9CakYsZUFBK0k7UUFBL0ksdU5BQStJO1FBQzFJLGVBQStMO1FBQS9MLG9aQUErTDtRQU9oTSxlQUE0QjtRQUE1QixpREFBNEI7O3VGRGdEdEQsY0FBYztjQVIxQixTQUFTOzJCQUNJLFdBQVcsYUFFVjtvQkFDUCxTQUFTLGlCQUFpQixpQkFBaUIsRUFBRSxJQUFJLENBQUM7b0JBQ2xELGtCQUFrQixnQkFBZ0I7aUJBQ3JDOztzQkEyM0JJLFFBQVE7O3NCQUNSLFNBQVM7dUJBQUMsY0FBYzs7c0JBQ3hCLFNBQVM7dUJBQUMsaUJBQWlCOztzQkFDM0IsU0FBUzt1QkFBQyxjQUFjOztzQkFFVSxRQUFRO3dCQTUzQkMsYUFBYTtrQkFBNUQsU0FBUzttQkFBQyxtQkFBbUIsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7WUFFUSxhQUFhO2tCQUFsRSxTQUFTO21CQUFDLGlCQUFpQixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztZQUVhLGFBQWE7a0JBQXJFLGVBQWU7bUJBQUMsZUFBZSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtZQUNnQixpQkFBaUI7a0JBQXZGLFNBQVM7bUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUVqQixVQUFVO2tCQUE3RCxlQUFlO21CQUFDLFlBQVksRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUM7WUFDNEIsYUFBYTtrQkFBMUYsU0FBUzttQkFBQyx1QkFBdUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBRWxCLGdCQUFnQjtrQkFBekUsZUFBZTttQkFBQyxrQkFBa0IsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUM7WUFDZSxpQkFBaUI7a0JBQXZGLFNBQVM7bUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUVSLG1CQUFtQjtrQkFBL0UsZUFBZTttQkFBQyxxQkFBcUIsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUM7WUFDZSxvQkFBb0I7a0JBQTdGLFNBQVM7bUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUVoQixjQUFjO2tCQUFyRSxlQUFlO21CQUFDLGdCQUFnQixFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksRUFBQztZQUNpQixpQkFBaUI7a0JBQXZGLFNBQVM7bUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUVILHNCQUFzQjtrQkFBdkYsZUFBZTttQkFBQyx3QkFBd0IsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7WUFDOUIsZ0JBQWdCO2tCQUFqRCxZQUFZO21CQUFDLGtCQUFrQjtZQUNzQyxnQkFBZ0I7a0JBQXJGLFNBQVM7bUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFDVyx5QkFBeUI7a0JBQXZHLFNBQVM7bUJBQUMsd0JBQXdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUVSLGVBQWU7a0JBQW5GLFNBQVM7bUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFpMUI3QixVQUFVO2tCQUEvQyxZQUFZO21CQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIEF0dHJpYnV0ZSwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGRyZW4sIENvbnRlbnRDaGlsZCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBJbmplY3RvciwgTmdab25lLCBPbkRlc3Ryb3ksIE9wdGlvbmFsLCBRdWVyeUxpc3QsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7Vmlld3BvcnQsIFN0YXRlUGVyc2lzdGVuY2UsIFBhZ2luYXRpb25TZXJ2aWNlLCBVc2VyRGVmaW5lZEV4ZWN1dGlvbkNvbnRleHR9IGZyb20gJ0B3bS9jb3JlJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICAgICRhcHBEaWdlc3QsXG4gICAgJHBhcnNlRXZlbnQsXG4gICAgJHVud2F0Y2gsXG4gICAgJHdhdGNoLFxuICAgIEFwcCxcbiAgICBjbG9zZVBvcG92ZXIsXG4gICAgRGF0YVNvdXJjZSxcbiAgICBnZXRDbG9uZWRPYmplY3QsXG4gICAgZ2V0RGF0YXNvdXJjZUZyb21FeHByLFxuICAgIGdldFZhbGlkSlNPTixcbiAgICBJREdlbmVyYXRvcixcbiAgICBpc0RhdGFTb3VyY2VFcXVhbCxcbiAgICBpc0RlZmluZWQsXG4gICAgaXNNb2JpbGUsXG4gICAgdHJpZ2dlckZuLFxuICAgIER5bmFtaWNDb21wb25lbnRSZWZQcm92aWRlcixcbiAgICBleHRlbmRQcm90byxcbiAgICAkaW52b2tlV2F0Y2hlcnNcbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgRURJVF9NT0RFLCBnZXRDb25kaXRpb25hbENsYXNzZXMsIGdldE9yZGVyQnlFeHByLCBnZXRSb3dPcGVyYXRpb25zQ29sdW1uLCBwcmVwYXJlRmllbGREZWZzLCBwcm92aWRlQXMsIHByb3ZpZGVBc1dpZGdldFJlZiwgU3R5bGFibGVDb21wb25lbnQsIHN0eWxlciwgdHJhbnNmb3JtRGF0YSwgVHJ1c3RBc1BpcGUsIGV4dHJhY3REYXRhU291cmNlTmFtZSwgREVCT1VOQ0VfVElNRVMsIE5BVklHQVRJT05fVFlQRSwgdW5zdXBwb3J0ZWRTdGF0ZVBlcnNpc3RlbmNlVHlwZXMgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcbmltcG9ydCB7IFBhZ2luYXRpb25Db21wb25lbnQgfSBmcm9tICdAd20vY29tcG9uZW50cy9kYXRhL3BhZ2luYXRpb24nO1xuXG5pbXBvcnQgeyBMaXN0Q29tcG9uZW50IH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvZGF0YS9saXN0JztcbmltcG9ydCB7IHJlZ2lzdGVyUHJvcHMgfSBmcm9tICcuL3RhYmxlLnByb3BzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZGVjbGFyZSBjb25zdCBfLCAkO1xuXG5jb25zdCBERUZBVUxUX0NMUyA9ICdhcHAtZ3JpZCBhcHAtcGFuZWwgcGFuZWwnO1xuY29uc3QgV0lER0VUX0NPTkZJRyA9IHt3aWRnZXRUeXBlOiAnd20tdGFibGUnLCBob3N0Q2xhc3M6IERFRkFVTFRfQ0xTfTtcblxuY29uc3QgZXhwb3J0SWNvbk1hcHBpbmcgPSB7XG4gICAgRVhDRUw6ICdmYSBmYS1maWxlLWV4Y2VsLW8nLFxuICAgIENTVjogJ2ZhIGZhLWZpbGUtdGV4dC1vJ1xufTtcblxuY29uc3QgUk9XX09QU19GSUVMRCA9ICdyb3dPcGVyYXRpb25zJztcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG5jb25zdCBpc0lucHV0Qm9keVdyYXBwZXIgPSB0YXJnZXQgPT4ge1xuICAgIGNvbnN0IGNsYXNzZXMgPSBbJy5kcm9wZG93bi1tZW51JywgJy51aWItdHlwZWFoZWFkLW1hdGNoJywgJy5tb2RhbC1kaWFsb2cnLCAnLnRvYXN0J107XG4gICAgbGV0IGlzSW5wdXQgPSBmYWxzZTtcbiAgICBjbGFzc2VzLmZvckVhY2goY2xzID0+IHtcbiAgICAgICAgaWYgKHRhcmdldC5jbG9zZXN0KGNscykubGVuZ3RoKSB7XG4gICAgICAgICAgICBpc0lucHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGF0dHJzID0gWydic2RhdGVwaWNrZXJkYXlkZWNvcmF0b3InXTtcbiAgICBpZiAoIWlzSW5wdXQpIHtcbiAgICAgICAgYXR0cnMuZm9yRWFjaChhdHRyID0+IHtcbiAgICAgICAgICAgIGlmICh0YXJnZXRbMF0uaGFzQXR0cmlidXRlKGF0dHIpKSB7XG4gICAgICAgICAgICAgICAgaXNJbnB1dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGlzSW5wdXQ7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ1t3bVRhYmxlXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgcHJvdmlkZUFzKFRhYmxlQ29tcG9uZW50LCBOR19WQUxVRV9BQ0NFU1NPUiwgdHJ1ZSksXG4gICAgICAgIHByb3ZpZGVBc1dpZGdldFJlZihUYWJsZUNvbXBvbmVudClcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29tcG9uZW50IGV4dGVuZHMgU3R5bGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICBzdGF0aWMgaW5pdGlhbGl6ZVByb3BzID0gcmVnaXN0ZXJQcm9wcygpO1xuICAgIEBWaWV3Q2hpbGQoUGFnaW5hdGlvbkNvbXBvbmVudCwge3N0YXRpYzogdHJ1ZX0pIGRhdGFOYXZpZ2F0b3I7XG5cbiAgICBAVmlld0NoaWxkKCdkYXRhZ3JpZEVsZW1lbnQnLCB7c3RhdGljOiB0cnVlfSkgcHJpdmF0ZSBfdGFibGVFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbigncm93QWN0aW9uVG1wbCcsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgcm93QWN0aW9uVG1wbDogUXVlcnlMaXN0PGFueT47XG4gICAgQFZpZXdDaGlsZCgncm93QWN0aW9uc1ZpZXcnLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSByb3dBY3Rpb25zVmlld1JlZjogVmlld0NvbnRhaW5lclJlZjtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oJ2ZpbHRlclRtcGwnLCB7ZGVzY2VuZGFudHM6IHRydWV9KSBmaWx0ZXJUbXBsOiBRdWVyeUxpc3Q8YW55PjtcbiAgICBAVmlld0NoaWxkKCdtdWx0aUNvbHVtbkZpbHRlclZpZXcnLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBmaWx0ZXJWaWV3UmVmOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbignaW5saW5lV2lkZ2V0VG1wbCcsIHtkZXNjZW5kYW50czogdHJ1ZX0pIGlubGluZVdpZGdldFRtcGw6IFF1ZXJ5TGlzdDxhbnk+O1xuICAgIEBWaWV3Q2hpbGQoJ2lubGluZUVkaXRWaWV3JywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgaW5saW5lRWRpdFZpZXdSZWY6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKCdpbmxpbmVXaWRnZXRUbXBsTmV3Jywge2Rlc2NlbmRhbnRzOiB0cnVlfSkgaW5saW5lV2lkZ2V0TmV3VG1wbDogUXVlcnlMaXN0PGFueT47XG4gICAgQFZpZXdDaGlsZCgnaW5saW5lRWRpdE5ld1ZpZXcnLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBpbmxpbmVFZGl0TmV3Vmlld1JlZjogVmlld0NvbnRhaW5lclJlZjtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oJ2N1c3RvbUV4cHJUbXBsJywge2Rlc2NlbmRhbnRzOiB0cnVlfSkgY3VzdG9tRXhwclRtcGw6IFF1ZXJ5TGlzdDxhbnk+O1xuICAgIEBWaWV3Q2hpbGQoJ2N1c3RvbUV4cHJWaWV3JywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgY3VzdG9tRXhwclZpZXdSZWY6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKCdyb3dFeHBhbnNpb25BY3Rpb25UbXBsJywgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSByb3dFeHBhbnNpb25BY3Rpb25UbXBsOiBRdWVyeUxpc3Q8YW55PjtcbiAgICBAQ29udGVudENoaWxkKCdyb3dFeHBhbnNpb25UbXBsJykgcm93RXhwYW5zaW9uVG1wbDogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAVmlld0NoaWxkKCdyb3dEZXRhaWxWaWV3JywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgcm93RGV0YWlsVmlld1JlZjogVmlld0NvbnRhaW5lclJlZjtcbiAgICBAVmlld0NoaWxkKCdyb3dFeHBhbnNpb25BY3Rpb25WaWV3JywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgcm93RXhwYW5zaW9uQWN0aW9uVmlld1JlZjogVmlld0NvbnRhaW5lclJlZjtcblxuICAgIEBWaWV3Q2hpbGQoJ2R5bmFtaWNUYWJsZScsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIGR5bmFtaWNUYWJsZVJlZjogVmlld0NvbnRhaW5lclJlZjtcblxuICAgIHByaXZhdGUgcm93QWN0aW9uc0NvbXBpbGVkVGw6IGFueSAgPSB7fTtcbiAgICBwcml2YXRlIHJvd0ZpbHRlckNvbXBsaWVkVGw6IGFueSA9IHt9O1xuICAgIHByaXZhdGUgaW5saW5lQ29tcGxpZWRUbDogYW55ID0ge307XG4gICAgcHJpdmF0ZSBpbmxpbmVOZXdDb21wbGllZFRsOiBhbnkgPSB7fTtcbiAgICBwcml2YXRlIGN1c3RvbUV4cHJDb21waWxlZFRsOiBhbnkgPSB7fTtcbiAgICBwcml2YXRlIGN1c3RvbUV4cHJDb21waWxlZFN1bW1hcnlUbDogYW55ID0ge307XG4gICAgcHJpdmF0ZSByb3dEZWZJbnN0YW5jZXMgPSB7fTtcbiAgICBwcml2YXRlIHJvd0RlZk1hcCA9IHt9O1xuICAgIHByaXZhdGUgcm93RXhwYW5zaW9uQWN0aW9uVGw6IGFueSA9IHt9O1xuXG4gICAgY29sdW1ucyA9IHt9O1xuICAgIGZvcm1maWVsZHMgPSB7fTtcbiAgICBkYXRhZ3JpZEVsZW1lbnQ7XG4gICAgZGF0YXNvdXJjZTtcbiAgICBlZGl0bW9kZTtcbiAgICBlbmFibGVjb2x1bW5zZWxlY3Rpb247XG4gICAgZW5hYmxlc29ydCA9IHRydWU7XG4gICAgZmlsdGVybW9kZTtcbiAgICBzZWFyY2hsYWJlbDtcbiAgICBmb3JtcG9zaXRpb247XG4gICAgZ3JpZGNsYXNzO1xuICAgIGdyaWRmaXJzdHJvd3NlbGVjdDtcbiAgICBpY29uY2xhc3M7XG4gICAgb25kZW1hbmRtZXNzYWdlO1xuICAgIHZpZXdsZXNzbWVzc2FnZTtcbiAgICBzaG93dmlld2xlc3NidXR0b24gPSBmYWxzZTtcbiAgICBfdHJpZ2dlcmVkQnlVc2VyO1xuICAgIGlzR3JpZEVkaXRNb2RlO1xuICAgIGxvYWRpbmdkYXRhbXNnO1xuICAgIG11bHRpc2VsZWN0O1xuICAgIG5hbWU7XG4gICAgX2lzRGVwZW5kZW50O1xuICAgIG5hdmlnYXRpb247XG4gICAgbmF2aWdhdGlvblNpemU7XG4gICAgbmF2aWdhdGlvbmFsaWduO1xuICAgIG5vZGF0YW1lc3NhZ2U7XG4gICAgcGFnZXNpemU7XG4gICAgcHJldkRhdGE7XG4gICAgcHJpbWFyeUtleSA9IFtdO1xuICAgIHJhZGlvc2VsZWN0O1xuICAgIHJvd2NsYXNzO1xuICAgIHJvd25nY2xhc3M7XG4gICAgc2VsZWN0ZWRJdGVtcyA9IFtdO1xuICAgIHNob3doZWFkZXI7XG4gICAgc2hvd3JlY29yZGNvdW50O1xuICAgIHNob3dyb3dpbmRleDtcbiAgICBzdWJoZWFkaW5nO1xuICAgIHRpdGxlO1xuICAgIHNob3duZXdyb3c7XG4gICAgZGVsZXRlb2t0ZXh0O1xuICAgIGRlbGV0ZWNhbmNlbHRleHQ7XG4gICAgb25FcnJvcjtcbiAgICBvblJvd2luc2VydDtcbiAgICBvblJvd3VwZGF0ZTtcbiAgICBvblJvd2RlbGV0ZTtcbiAgICBzdGF0ZWhhbmRsZXI7XG4gICAgc2VsZWN0ZWRJdGVtQ2hhbmdlID0gbmV3IFN1YmplY3QoKTtcbiAgICBzZWxlY3RlZEl0ZW1DaGFuZ2UkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLnNlbGVjdGVkSXRlbUNoYW5nZS5hc09ic2VydmFibGUoKTtcblxuICAgIGFjdGlvbnMgPSBbXTtcbiAgICBfYWN0aW9ucyA9IHtcbiAgICAgICAgJ2hlYWRlcic6IFtdLFxuICAgICAgICAnZm9vdGVyJzogW11cbiAgICB9O1xuICAgIGV4cG9ydE9wdGlvbnMgPSBbXTtcbiAgICBleHBvcnRkYXRhc2l6ZTtcbiAgICBmb3JtV2lkZ2V0cztcbiAgICBoZWFkZXJDb25maWcgPSBbXTtcbiAgICBpdGVtcyA9IFtdO1xuICAgIG5hdkNvbnRyb2xzO1xuICAgIHJvd0FjdGlvbnMgPSBbXTtcbiAgICBzZWxlY3RlZENvbHVtbnM7XG4gICAgc2hvd25hdmlnYXRpb24gPSBmYWxzZTtcbiAgICBkYXRhc2V0O1xuICAgIF9saXZlVGFibGVQYXJlbnQ7XG4gICAgaXNQYXJ0T2ZMaXZlR3JpZDtcbiAgICBncmlkRWxlbWVudDtcbiAgICBpc05ld1Jvd0luc2VydGVkO1xuICAgIGlzTW9iaWxlO1xuICAgIGlzTG9hZGluZztcbiAgICBpc1Jvd0RlbGV0ZWQ7XG4gICAgZG9jdW1lbnRDbGlja0JpbmQgPSBub29wO1xuICAgIGFjdGlvblJvd0luZGV4O1xuICAgIGFjdGlvblJvd1BhZ2U7XG4gICAgcHJldkZpbHRlckV4cHJlc3Npb246IGFueSA9IFtdO1xuICAgIGZpZWxkRGVmcyA9IFtdO1xuICAgIHJvd0RlZjogYW55ID0ge307XG4gICAgcm93SW5zdGFuY2U6IGFueSA9IHt9O1xuXG4gICAgcHJpdmF0ZSBmdWxsRmllbGREZWZzID0gW107XG4gICAgcHJpdmF0ZSBfX2Z1bGxEYXRhO1xuICAgIHByaXZhdGUgZGF0YU5hdmlnYXRvcldhdGNoZWQ7XG4gICAgcHJpdmF0ZSBuYXZpZ2F0b3JSZXN1bHRXYXRjaDtcbiAgICBwcml2YXRlIG5hdmlnYXRvck1heFJlc3VsdFdhdGNoO1xuICAgIHByaXZhdGUgZmlsdGVySW5mbztcbiAgICBwcml2YXRlIHNvcnRJbmZvO1xuICAgIHByaXZhdGUgc2VydmVyRGF0YTtcbiAgICBwcml2YXRlIGZpbHRlcm51bGxyZWNvcmRzO1xuICAgIHByaXZhdGUgdmFyaWFibGVJbmZsaWdodCA9IHRydWU7XG4gICAgcHJpdmF0ZSBpc2R5bmFtaWN0YWJsZTtcbiAgICBwcml2YXRlIF9keW5hbWljQ29udGV4dDtcbiAgICBwcml2YXRlIG5vT2ZDb2x1bW5zO1xuICAgIHB1YmxpYyBvbkRlbWFuZExvYWQ7XG4gICAgcHVibGljIGluZlNjcm9sbDtcbiAgICBwcml2YXRlIGlzRGF0YUxvYWRpbmc7XG4gICAgcHJpdmF0ZSBjdXJyZW50UGFnZTtcbiAgICBwcml2YXRlIGFwcGx5UHJvcHMgPSBuZXcgTWFwKCk7XG5cbiAgICByZWRyYXcgPSBfLmRlYm91bmNlKHRoaXMuX3JlZHJhdywgMTUwKTtcbiAgICBkZWJvdW5jZWRIYW5kbGVMb2FkaW5nID0gXy5kZWJvdW5jZSh0aGlzLmhhbmRsZUxvYWRpbmcsIDM1MCk7XG5cbiAgICAvLyBGaWx0ZXIgYW5kIFNvcnQgTWV0aG9kc1xuICAgIHJvd0ZpbHRlcjogYW55ID0ge307XG4gICAgbWF0Y2hNb2RlVHlwZXNNYXA7XG4gICAgbWF0Y2hNb2RlTXNncztcbiAgICBlbXB0eU1hdGNoTW9kZXM7XG4gICAgX3NlYXJjaFNvcnRIYW5kbGVyID0gbm9vcDtcbiAgICBzZWFyY2hTb3J0SGFuZGxlciA9ICguLi5hcmdzKSA9PiB7IHRoaXMuX3NlYXJjaFNvcnRIYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3MpOyB9O1xuICAgIF9pc1BhZ2VTZWFyY2g7XG4gICAgX2lzQ2xpZW50U2VhcmNoO1xuICAgIGNoZWNrRmlsdGVyc0FwcGxpZWQ6IEZ1bmN0aW9uO1xuICAgIGdldFNlYXJjaFJlc3VsdDogRnVuY3Rpb247XG4gICAgZ2V0U29ydFJlc3VsdDogRnVuY3Rpb247XG4gICAgZ2V0RmlsdGVyRmllbGRzOiBGdW5jdGlvbjtcbiAgICBvblJvd0ZpbHRlckNoYW5nZSA9IG5vb3A7XG4gICAgb25GaWx0ZXJDb25kaXRpb25TZWxlY3QgPSBub29wO1xuICAgIHNob3dDbGVhckljb24gPSBub29wO1xuICAgIGNsZWFyUm93RmlsdGVyID0gbm9vcDtcbiAgICBhZGp1c3RDb250YWluZXIgPSBub29wO1xuICAgIGdldE5hdmlnYXRpb25UYXJnZXRCeVNvcnRJbmZvOiBGdW5jdGlvbjtcbiAgICByZWZyZXNoRGF0YTogRnVuY3Rpb247XG4gICAgY2xlYXJGaWx0ZXI6IEZ1bmN0aW9uO1xuXG4gICAgLy8gSW5saW5lIEVkaXRcbiAgICBuZ2Zvcm06IEZvcm1Hcm91cDtcbiAgICB1cGRhdGVWYXJpYWJsZTogRnVuY3Rpb247XG4gICAgdXBkYXRlUmVjb3JkOiBGdW5jdGlvbjtcbiAgICBkZWxldGVSZWNvcmQ6IEZ1bmN0aW9uO1xuICAgIGluc2VydFJlY29yZDogRnVuY3Rpb247XG4gICAgZWRpdFJvdzogRnVuY3Rpb247XG4gICAgYWRkTmV3Um93OiBGdW5jdGlvbjtcbiAgICBhZGRSb3c6IEZ1bmN0aW9uO1xuICAgIGRlbGV0ZVJvdzogRnVuY3Rpb247XG4gICAgb25SZWNvcmREZWxldGU6IEZ1bmN0aW9uO1xuICAgIGluaXRpYXRlU2VsZWN0SXRlbTogRnVuY3Rpb247XG4gICAgaGlkZUVkaXRSb3c6IEZ1bmN0aW9uO1xuICAgIHNhdmVSb3c6IEZ1bmN0aW9uO1xuICAgIGNhbmNlbFJvdzogRnVuY3Rpb247XG4gICAgcHJpdmF0ZSBfcGFnZUxvYWQgPSB0cnVlO1xuXG4gICAgcHVibGljIGdyaWRPcHRpb25zID0ge1xuICAgICAgICBkYXRhOiBbXSxcbiAgICAgICAgY29sRGVmczogW10sXG4gICAgICAgIHN0YXJ0Um93SW5kZXg6IDEsXG4gICAgICAgIG1vZGU6ICcnLFxuICAgICAgICBzb3J0SW5mbzoge1xuICAgICAgICAgICAgZmllbGQ6ICcnLFxuICAgICAgICAgICAgZGlyZWN0aW9uOiAnJ1xuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXJtb2RlOiAnJyxcbiAgICAgICAgc2VhcmNoTGFiZWw6ICcnLFxuICAgICAgICByb3dBY3Rpb25zOiBbXSxcbiAgICAgICAgaGVhZGVyQ29uZmlnOiBbXSxcbiAgICAgICAgcm93Q2xhc3M6ICcnLFxuICAgICAgICBlZGl0bW9kZTogJycsXG4gICAgICAgIGZvcm1Qb3NpdGlvbjogJycsXG4gICAgICAgIGlzTW9iaWxlOiBmYWxzZSxcbiAgICAgICAgcm93RXhwYW5zaW9uRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHJvd0RlZjoge1xuICAgICAgICAgICAgcG9zaXRpb246ICcwJ1xuICAgICAgICB9LFxuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgbWVzc2FnZXM6IHtcbiAgICAgICAgICAgIHNlbGVjdEZpZWxkOiAnU2VsZWN0IEZpZWxkJ1xuICAgICAgICB9LFxuICAgICAgICBzZWN1cml0eVV0aWxzOiB7XG4gICAgICAgICAgICBwaXBlVHJhbnNmb3JtIDoge31cbiAgICAgICAgfSxcbiAgICAgICAgbmF2aWdhdGlvbjogJycsXG4gICAgICAgIGlzZHluYW1pY3RhYmxlOiAnJyxcbiAgICAgICAgZGVsZXRlZFJvd0luZGV4OiAtMSxcbiAgICAgICAgbGFzdEFjdGlvblBlcmZvcm1lZDogJ3Njcm9sbCcsXG4gICAgICAgIGlzU2VhcmNoVHJpZ2VycmVkOiBmYWxzZSxcbiAgICAgICAgaXNEYXRhc2V0VXBkYXRlZDogZmFsc2UsXG4gICAgICAgIGlzRGF0YVVwZGF0ZWRCeVVzZXI6IGZhbHNlLFxuICAgICAgICBzaG93dmlld2xlc3NidXR0b246IGZhbHNlLFxuICAgICAgICBvbmRlbWFuZG1lc3NhZ2U6ICcnLFxuICAgICAgICB2aWV3bGVzc21lc3NhZ2U6ICcnLFxuICAgICAgICBsb2FkaW5nZGF0YW1zZzogJycsXG4gICAgICAgIGlzTmV4dFBhZ2VEYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIEFDVElPTlM6IHtcbiAgICAgICAgICAgICdERUxFVEUnOiAnZGVsZXRlJyxcbiAgICAgICAgICAgICdFRElUJzogJ2VkaXQnLFxuICAgICAgICAgICAgJ1NFQVJDSF9PUl9TT1JUJzogJ3NlYXJjaF9vcl9zb3J0JyxcbiAgICAgICAgICAgICdERUZBVUxUJzogJ3Njcm9sbCcsXG4gICAgICAgICAgICAnRklMVEVSX0NSSVRFUklBJyA6ICdmaWx0ZXInLFxuICAgICAgICAgICAgJ0RBVEFTRVRfVVBEQVRFJzogJ2RhdGFzZXRfdXBkYXRlJ1xuICAgICAgICB9LFxuICAgICAgICBhY3Rpb25Sb3dJbmRleDogdW5kZWZpbmVkLFxuICAgICAgICBhY3Rpb25Sb3dQYWdlOiB1bmRlZmluZWQsXG4gICAgICAgIGlzTGFzdFBhZ2UgOiBmYWxzZSxcbiAgICAgICAgLy8gZ2V0IHRoZSBjdXJyZW50IHBhZ2UgbnVtYmVyXG4gICAgICAgIGdldEN1cnJlbnRQYWdlOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gXy5nZXQodGhpcy5kYXRhTmF2aWdhdG9yLCAnZG4uY3VycmVudFBhZ2UnKSB8fCAxO1xuICAgICAgICB9LFxuICAgICAgICAvLyBzZXQgdGhlIHBhZ2UgbnVtYmVyXG4gICAgICAgIHNldEN1cnJlbnRQYWdlOiAocGFnZU51bSkgPT4ge1xuICAgICAgICAgICAgXy5zZXQodGhpcy5kYXRhTmF2aWdhdG9yLCAnZG4uY3VycmVudFBhZ2UnLCBwYWdlTnVtIHx8IDEpO1xuICAgICAgICB9LFxuICAgICAgICBnZXREYXRhU291cmNlOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhc291cmNlO1xuICAgICAgICB9LFxuICAgICAgICAvLyBnZXQgdGhlIHBhZ2UgbGltaXRcbiAgICAgICAgZ2V0UGFnZVNpemU6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhZ2VzaXplO1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldFBhZ2VDb3VudCA6ICgpID0+e1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YU5hdmlnYXRvci5wYWdlQ291bnQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVuYWJsZU5hdmlnYXRpb246ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3Iud2lkZ2V0LmlzRGlzYWJsZU5leHQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3Iud2lkZ2V0LmlzRGlzYWJsZUxhc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLm1vZGUgPSAndmlld2xlc3MnO1xuICAgICAgICB9LFxuICAgICAgICAvLyBzZXQgdGhlIGRlbGV0ZWQgcm93IGluZGV4XG4gICAgICAgIHNldERlbGV0ZWRSb3dJbmRleDogKGlkKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdkZWxldGVkUm93SW5kZXgnLCBpZCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIHNldHMgdGhlIGxhc3QgYWN0aW9uIHBlcmZvcm1lZCBsaWtlIGVkaXQsIGRlbGV0ZSBldGMuXG4gICAgICAgIHNldExhc3RBY3Rpb25QZXJmb3JtZWQ6IChhY3Rpb24pID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2xhc3RBY3Rpb25QZXJmb3JtZWQnLCBhY3Rpb24gfHwgdGhpcy5ncmlkT3B0aW9ucy5sYXN0QWN0aW9uUGVyZm9ybWVkKTtcbiAgICAgICAgfSxcbiAgICAgICAgaXNOYXZUeXBlU2Nyb2xsT3JPbmRlbWFuZDogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZE9wdGlvbnMubmF2aWdhdGlvbiA9PT0gJ1Njcm9sbCcgfHwgdGhpcy5ncmlkT3B0aW9ucy5uYXZpZ2F0aW9uID09PSAnT24tRGVtYW5kJztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0SXNTZWFyY2hUcmlnZXJyZWQ6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignaXNTZWFyY2hUcmlnZXJyZWQnLCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldElzRGF0YXNldFVwZGF0ZWQ6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignaXNEYXRhc2V0VXBkYXRlZCcsIHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gIEZpeCBmb3IgW1dNUy0yMzI2M106ICdpc05leHRQYWdlRGF0YScgZmxhZyBpcyBzZXQgdG8gdHJ1ZSAtPiBpZiB1c2VyIGZldGNoaW5nIHRoZSBuZXh0IHBhZ2UgZGF0YSBieSBjbGlja2luZyBvbkxvYWQgbW9yZSBvciBzY3JvbGxcbiAgICAgICAgc2V0SXNOZXh0UGFnZURhdGE6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignaXNOZXh0UGFnZURhdGEnLCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vICBGaXggZm9yIFtXTVMtMjMyNjNdOiAnaXNEYXRhVXBkYXRlZEJ5VXNlcicgZmxhZyBpcyBzZXQgdG8gdHJ1ZSAtPiBpZiB1c2VyIGNoYW5nZXMgdGhlIGRhdGFzZXQgZnJvbSBzY3JpcHRcbiAgICAgICAgc2V0SXNEYXRhVXBkYXRlZEJ5VXNlcjogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdpc0RhdGFVcGRhdGVkQnlVc2VyJywgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBvbkRhdGFSZW5kZXI6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZERhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnZGF0YXJlbmRlcicsIHskZGF0YTogdGhpcy5ncmlkRGF0YSwgZGF0YTogdGhpcy5ncmlkRGF0YX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBzZWxlY3Qgcm93cyBzZWxlY3RlZCBpbiBwcmV2aW91cyBwYWdlcy4gKE5vdCBmaW5kaW5nIGludGVyc2VjdGlvbiBvZiBkYXRhIGFuZCBzZWxlY3RlZGl0ZW1zIGFzIGl0IHdpbGwgYmUgaGVhdnkpXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMubGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NlbGVjdFJvd3MnLCB0aGlzLml0ZW1zKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnZ2V0U2VsZWN0ZWRSb3dzJyk7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUNoYW5nZS5uZXh0KHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIE9uIHJlbmRlciwgYXBwbHkgdGhlIGZpbHRlcnMgc2V0IGZvciBxdWVyeSBzZXJ2aWNlIHZhcmlhYmxlXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzUGFnZVNlYXJjaCAmJiB0aGlzLmZpbHRlckluZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTb3J0SGFuZGxlcih0aGlzLmZpbHRlckluZm8sIHVuZGVmaW5lZCwgJ3NlYXJjaCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBvblJvd1NlbGVjdDogKHJvdywgZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnZ2V0U2VsZWN0ZWRSb3dzJyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1DaGFuZ2UubmV4dCh0aGlzLnNlbGVjdGVkSXRlbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByb3dEYXRhID0gdGhpcy5hZGRSb3dJbmRleChyb3cpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoICYmIHJvd0RhdGEuJGluZGV4ICYmIHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJyAmJiB0aGlzLmRhdGFOYXZpZ2F0b3IgJiYgdW5zdXBwb3J0ZWRTdGF0ZVBlcnNpc3RlbmNlVHlwZXMuaW5kZXhPZih0aGlzLm5hdmlnYXRpb24pIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvYmogPSB7cGFnZTogdGhpcy5kYXRhTmF2aWdhdG9yLmRuLmN1cnJlbnRQYWdlLCBpbmRleDogcm93RGF0YS4kaW5kZXggLSAxfTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2lkZ2V0U3RhdGUgPSB0aGlzLnN0YXRlUGVyc2lzdGVuY2UuZ2V0V2lkZ2V0U3RhdGUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfLmdldCh3aWRnZXRTdGF0ZSwgJ3NlbGVjdGVkSXRlbScpICAmJiB0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV8uc29tZSh3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW0sIG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW0ucHVzaChvYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLnNldFdpZGdldFN0YXRlKHRoaXMsIHsnc2VsZWN0ZWRJdGVtJzogd2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlUGVyc2lzdGVuY2Uuc2V0V2lkZ2V0U3RhdGUodGhpcywgeydzZWxlY3RlZEl0ZW0nOiBbb2JqXX0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdSZXRhaW4gU3RhdGUgaGFuZGxpbmcgb24gV2lkZ2V0ICcgKyB0aGlzLm5hbWUgKyAnIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGN1cnJlbnQgcGFnaW5hdGlvbiB0eXBlLicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Jvd3NlbGVjdCcsIHskZGF0YTogcm93RGF0YSwgJGV2ZW50OiBlLCByb3c6IHJvd0RhdGF9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAvLyBhc3NpZ25zIHRoZSBpdGVtcyBvbiBjYXB0dXJlIHBoYXNlIG9mIHRoZSBjbGljayBoYW5kbGVyLlxuICAgICAgICBhc3NpZ25TZWxlY3RlZEl0ZW1zOiAocm93LCBlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICogaW4gY2FzZSBvZiBzaW5nbGUgc2VsZWN0LCB1cGRhdGUgdGhlIGl0ZW1zIHdpdGggb3V0IGNoYW5naW5nIHRoZSByZWZlcmVuY2UuXG4gICAgICAgICAgICAgICAgICogZm9yIG11bHRpIHNlbGVjdCwga2VlcCBvbGQgc2VsZWN0ZWQgaXRlbXMgaW4gdGFjdFxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfLmZpbmRJbmRleCh0aGlzLml0ZW1zLCByb3cpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKHJvdyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaChyb3cpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBvblJvd0RibENsaWNrOiAocm93LCBlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3dEYXRhID0gdGhpcy5hZGRSb3dJbmRleChyb3cpO1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdyb3dkYmxjbGljaycsIHskZGF0YTogcm93RGF0YSwgJGV2ZW50OiBlLCByb3c6IHJvd0RhdGF9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25Sb3dEZXNlbGVjdDogKHJvdywgZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMubXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zID0gXy5wdWxsQWxsV2l0aCh0aGlzLml0ZW1zLCBbcm93XSwgXy5pc0VxdWFsKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2dldFNlbGVjdGVkUm93cycpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Jvd2Rlc2VsZWN0JywgeyRkYXRhOiByb3csICRldmVudDogZSwgcm93fSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd0RhdGEgPSB0aGlzLmFkZFJvd0luZGV4KHJvdyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScgJiYgdW5zdXBwb3J0ZWRTdGF0ZVBlcnNpc3RlbmNlVHlwZXMuaW5kZXhPZih0aGlzLm5hdmlnYXRpb24pIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqID0ge3BhZ2U6IHRoaXMuZGF0YU5hdmlnYXRvci5kbi5jdXJyZW50UGFnZSwgaW5kZXg6IHJvd0RhdGEuJGluZGV4IC0gMX07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3aWRnZXRTdGF0ZSA9IHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5nZXRXaWRnZXRTdGF0ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfLmdldCh3aWRnZXRTdGF0ZSwgJ3NlbGVjdGVkSXRlbScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXy5yZW1vdmUod2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLCBmdW5jdGlvbihzZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF8uaXNFcXVhbChzZWxlY3RlZEl0ZW0sIG9iaik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLnJlbW92ZVdpZGdldFN0YXRlKHRoaXMsICdzZWxlY3RlZEl0ZW0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLnNldFdpZGdldFN0YXRlKHRoaXMsIHsnc2VsZWN0ZWRJdGVtJzogd2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdSZXRhaW4gU3RhdGUgaGFuZGxpbmcgb24gV2lkZ2V0ICcgKyB0aGlzLm5hbWUgKyAnIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGN1cnJlbnQgcGFnaW5hdGlvbiB0eXBlLicpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgY2FsbE9uUm93RGVzZWxlY3RFdmVudDogKHJvdywgZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdnZXRTZWxlY3RlZFJvd3MnKTtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygncm93ZGVzZWxlY3QnLCB7JGRhdGE6IHJvdywgJGV2ZW50OiBlLCByb3d9KTtcbiAgICAgICAgfSxcbiAgICAgICAgY2FsbE9uUm93Q2xpY2tFdmVudDogKHJvdywgZSkgPT4ge1xuICAgICAgICAgICAgLy8gV01TLTE4Nzc0OiBJZiB3ZSBpbnZva2UgbmF2aWdhdGlvbiBhY3Rpb24gdmFyaWFibGUgb24gcm93Y2xpY2sgY2FsbGJhY2ssIHRoZSBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJpbmcgb3V0c2lkZSBhbmd1bGFyIHpvbmUgc28gYWRkaW5nIG5nWm9uZS5ydW5cbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQ2FsbCByb3cgY2xpY2sgb25seSBpZiBjbGljayBpcyB0cmlnZ2VyZWQgYnkgdXNlclxuICAgICAgICAgICAgICAgIGlmIChlICYmIGUuaGFzT3duUHJvcGVydHkoJ29yaWdpbmFsRXZlbnQnKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dEYXRhID0gdGhpcy5hZGRSb3dJbmRleChyb3cpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Jvd2NsaWNrJywgeyRkYXRhOiByb3dEYXRhLCAkZXZlbnQ6IGUsIHJvdzogcm93RGF0YX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBjbG9zZVBvcG92ZXI6IGNsb3NlUG9wb3ZlcixcbiAgICAgICAgb25Db2x1bW5TZWxlY3Q6IChjb2wsIGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2dldFNlbGVjdGVkQ29sdW1ucycpO1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdjb2x1bW5zZWxlY3QnLCB7JGRhdGE6IGNvbCwgJGV2ZW50OiBlfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQ29sdW1uRGVzZWxlY3Q6IChjb2wsIGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2dldFNlbGVjdGVkQ29sdW1ucycpO1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdjb2x1bW5kZXNlbGVjdCcsIHskZGF0YTogY29sLCAkZXZlbnQ6IGV9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25IZWFkZXJDbGljazogKGNvbCwgZSkgPT4ge1xuICAgICAgICAgICAgLy8gaWYgb25Tb3J0IGZ1bmN0aW9uIGlzIHJlZ2lzdGVyZWQgaW52b2tlIGl0IHdoZW4gdGhlIGNvbHVtbiBoZWFkZXIgaXMgY2xpY2tlZFxuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdoZWFkZXJjbGljaycsIHskZXZlbnQ6IGUsICRkYXRhOiBjb2wsIGNvbHVtbjogY29sfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUm93RGVsZXRlOiAocm93LCBjYW5jZWxSb3dEZWxldGVDYWxsYmFjaywgZSwgY2FsbEJhY2ssIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVSZWNvcmQoXy5leHRlbmQoe30sIG9wdGlvbnMsIHtyb3csICdjYW5jZWxSb3dEZWxldGVDYWxsYmFjayc6IGNhbmNlbFJvd0RlbGV0ZUNhbGxiYWNrLCAnZXZ0JzogZSwgJ2NhbGxCYWNrJzogY2FsbEJhY2t9KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25Sb3dJbnNlcnQ6IChyb3csIGUsIGNhbGxCYWNrLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluc2VydFJlY29yZChfLmV4dGVuZCh7fSwgb3B0aW9ucywge3JvdywgZXZlbnQ6IGUsICdjYWxsQmFjayc6IGNhbGxCYWNrfSkpO1xuICAgICAgICB9LFxuICAgICAgICBiZWZvcmVSb3dVcGRhdGU6IChyb3csIGV2ZW50TmFtZT8pID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9saXZlVGFibGVQYXJlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9saXZlVGFibGVQYXJlbnQudXBkYXRlUm93KHJvdywgZXZlbnROYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucHJldkRhdGEgPSBnZXRDbG9uZWRPYmplY3Qocm93KTtcbiAgICAgICAgfSxcbiAgICAgICAgYWZ0ZXJSb3dVcGRhdGU6IChyb3csIGUsIGNhbGxCYWNrLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVJlY29yZChfLmV4dGVuZCh7fSwgb3B0aW9ucywge3JvdywgJ3ByZXZEYXRhJzogdGhpcy5wcmV2RGF0YSwgJ2V2ZW50JzogZSwgJ2NhbGxCYWNrJzogY2FsbEJhY2t9KSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQmVmb3JlUm93VXBkYXRlOiAocm93LCBlLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVyb3d1cGRhdGUnLCB7JGV2ZW50OiBlLCAkZGF0YTogcm93LCByb3csIG9wdGlvbnM6IG9wdGlvbnN9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25CZWZvcmVSb3dJbnNlcnQ6IChyb3csIGUsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZXJvd2luc2VydCcsIHskZXZlbnQ6IGUsICRkYXRhOiByb3csIHJvdywgb3B0aW9uczogb3B0aW9uc30pO1xuICAgICAgICB9LFxuICAgICAgICBvbkJlZm9yZVJvd0RlbGV0ZTogKHJvdywgZSwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm93RGF0YSA9IHRoaXMuYWRkUm93SW5kZXgocm93KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZXJvd2RlbGV0ZScsIHskZXZlbnQ6IGUsIHJvdzogcm93RGF0YSwgb3B0aW9uczogb3B0aW9uc30pO1xuICAgICAgICB9LFxuICAgICAgICBvbkZvcm1SZW5kZXI6ICgkcm93LCBlLCBvcGVyYXRpb24sIGFsd2F5c05ld1JvdykgPT4ge1xuICAgICAgICAgICAgY29uc3Qgd2lkZ2V0ID0gYWx3YXlzTmV3Um93ID8gJ2lubGluZUluc3RhbmNlTmV3JyA6ICdpbmxpbmVJbnN0YW5jZSc7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1XaWRnZXRzID0ge307XG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZERlZnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29sW3dpZGdldF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybVdpZGdldHNbY29sLmZpZWxkXSA9IGNvbFt3aWRnZXRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkaW5nIGZvcm13aWRnZXRzIHRvIHRoZSBjb250ZXh0IGZvciBpbmxpbmVpbnN0YW5jZSB3aWRnZXQgd2hlbiBmaWVsZERlZnMgd2VyZSByZWFkeVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbFt3aWRnZXRdLmNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xbd2lkZ2V0XS5jb250ZXh0LmZvcm1XaWRnZXRzID0gdGhpcy5mb3JtV2lkZ2V0cztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RGlzYWJsZWRPbkZpZWxkKG9wZXJhdGlvbiwgY29sLCB3aWRnZXQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdmb3JtcmVuZGVyJywgeyRldmVudDogZSwgZm9ybVdpZGdldHM6IHRoaXMuZm9ybVdpZGdldHMsICRvcGVyYXRpb246IG9wZXJhdGlvbn0pO1xuICAgICAgICAgICAgfSwgMjUwKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25CZWZvcmVGb3JtUmVuZGVyOiAocm93LCBlLCBvcGVyYXRpb24pID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZWZvcm1yZW5kZXInLCB7JGV2ZW50OiBlLCByb3csICRvcGVyYXRpb246IG9wZXJhdGlvbn0pO1xuICAgICAgICB9LFxuICAgICAgICByZWdpc3RlclJvd05nQ2xhc3NXYXRjaGVyOiAocm93RGF0YSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5yb3duZ2NsYXNzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5nZXRDbG9uZWRSb3dPYmplY3Qocm93RGF0YSk7XG4gICAgICAgICAgICBjb25zdCB3YXRjaE5hbWUgPSBgJHt0aGlzLndpZGdldElkfV9yb3dOZ0NsYXNzXyR7aW5kZXh9YDtcbiAgICAgICAgICAgICR1bndhdGNoKHdhdGNoTmFtZSk7XG4gICAgICAgICAgICAvL1tUb2RvLUNTUF06IGdlbmVyYXRlIHdhdGNoZXIgZXhwciBpbiBwYWdlIGlmIHJvd25nY2xhc3MgYXR0ciBpcyBwcmVzZW50IGZvciB0YWJsZVxuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigkd2F0Y2godGhpcy5yb3duZ2NsYXNzLCB0aGlzLnZpZXdQYXJlbnQsIHtyb3d9LCAobnYsIG92KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2FwcGx5Um93TmdDbGFzcycsIGdldENvbmRpdGlvbmFsQ2xhc3Nlcyhudiwgb3YpLCBpbmRleCk7XG4gICAgICAgICAgICB9LCB3YXRjaE5hbWUpKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVnaXN0ZXJDb2xOZ0NsYXNzV2F0Y2hlcjogKHJvd0RhdGEsIGNvbERlZiwgcm93SW5kZXgsIGNvbEluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWNvbERlZlsnY29sLW5nLWNsYXNzJ10pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldENsb25lZFJvd09iamVjdChyb3dEYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IHdhdGNoTmFtZSA9IGAke3RoaXMud2lkZ2V0SWR9X2NvbE5nQ2xhc3NfJHtyb3dJbmRleH1fJHtjb2xJbmRleH1gO1xuICAgICAgICAgICAgJHVud2F0Y2god2F0Y2hOYW1lKTtcbiAgICAgICAgICAgIC8vW1RvZG8tQ1NQXTogZ2VuZXJhdGUgd2F0Y2hlciBleHByIGluIHBhZ2UgaWYgY29sLW5nLWNsYXNzIGF0dHIgaXMgcHJlc2VudCBmb3IgdGFibGVcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoJHdhdGNoKGNvbERlZlsnY29sLW5nLWNsYXNzJ10sIHRoaXMudmlld1BhcmVudCwge3Jvd30sIChudiwgb3YpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnYXBwbHlDb2xOZ0NsYXNzJywgZ2V0Q29uZGl0aW9uYWxDbGFzc2VzKG52LCBvdiksIHJvd0luZGV4LCBjb2xJbmRleCk7XG4gICAgICAgICAgICB9LCB3YXRjaE5hbWUpKTtcbiAgICAgICAgfSxcbiAgICAgICAgY2xlYXJDdXN0b21FeHByZXNzaW9uOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbUV4cHJWaWV3UmVmLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbUV4cHJDb21waWxlZFRsID0ge307XG4gICAgICAgICAgICB0aGlzLmN1c3RvbUV4cHJDb21waWxlZFN1bW1hcnlUbCA9IHt9O1xuICAgICAgICB9LFxuICAgICAgICBjbGVhclJvd0RldGFpbEV4cHJlc3Npb246ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucm93RGV0YWlsVmlld1JlZi5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5yb3dEZWZNYXAgPSB7fTtcbiAgICAgICAgICAgIHRoaXMucm93RGVmSW5zdGFuY2VzID0ge307XG4gICAgICAgIH0sXG4gICAgICAgIGdlbmVyYXRlQ3VzdG9tRXhwcmVzc2lvbnM6IChyb3dEYXRhLCBpbmRleCwgc3VtbWFyeVJvdz8pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ2V0Q2xvbmVkUm93T2JqZWN0KHJvd0RhdGEpO1xuICAgICAgICAgICAgY29uc3QgY29tcGlsZVRlbXBsYXRlID0gKHRtcGwpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRtcGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBjb2xEZWYgPSB7fTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICAgICAgICAgICAgICByb3csXG4gICAgICAgICAgICAgICAgICAgIGNvbERlZlxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRFdmVudHNUb0NvbnRleHQoY29udGV4dCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VzdG9tRXhwclZpZXcgPSB0aGlzLmN1c3RvbUV4cHJWaWV3UmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0bXBsLCBjb250ZXh0KTtcbiAgICAgICAgICAgICAgICBjb25zdCByb290Tm9kZSA9IGN1c3RvbUV4cHJWaWV3LnJvb3ROb2Rlc1swXTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSByb290Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29sLWlkZW50aWZpZXInKTtcbiAgICAgICAgICAgICAgICBfLmV4dGVuZChjb2xEZWYsIHRoaXMuY29sdW1uc1tmaWVsZE5hbWVdKTtcbiAgICAgICAgICAgICAgICBpZiAoIXN1bW1hcnlSb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXN0b21FeHByQ29tcGlsZWRUbFtmaWVsZE5hbWUgKyBpbmRleF0gPSByb290Tm9kZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbUV4cHJDb21waWxlZFN1bW1hcnlUbFtmaWVsZE5hbWUgKyBpbmRleF0gPSByb290Tm9kZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNkeW5hbWljdGFibGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpZWxkRGVmcy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBpbGVUZW1wbGF0ZShjb2wuY3VzdG9tRXhwclRtcGwpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEZvciBhbGwgdGhlIGNvbHVtbnMgaW5zaWRlIHRoZSB0YWJsZSwgZ2VuZXJhdGUgdGhlIGN1c3RvbSBleHByZXNzaW9uXG4gICAgICAgICAgICB0aGlzLmN1c3RvbUV4cHJUbXBsLmZvckVhY2goY29tcGlsZVRlbXBsYXRlLmJpbmQodGhpcykpO1xuICAgICAgICB9LFxuICAgICAgICBnZW5lcmF0ZVJvd0V4cGFuc2lvbkNlbGw6IChyb3dEYXRhLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5nZXRDbG9uZWRSb3dPYmplY3Qocm93RGF0YSk7XG4gICAgICAgICAgICAvLyBGb3IgYWxsIHRoZSBjb2x1bW5zIGluc2lkZSB0aGUgdGFibGUsIGdlbmVyYXRlIHRoZSBpbmxpbmUgd2lkZ2V0XG4gICAgICAgICAgICB0aGlzLnJvd0V4cGFuc2lvbkFjdGlvblRtcGwuZm9yRWFjaCgodG1wbCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucm93RXhwYW5zaW9uQWN0aW9uVGxbaW5kZXhdID0gdGhpcy5yb3dFeHBhbnNpb25BY3Rpb25WaWV3UmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0bXBsLCB7cm93fSkucm9vdE5vZGVzO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldFJvd0V4cGFuc2lvbkFjdGlvbjogKGluZGV4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb3dFeHBhbnNpb25BY3Rpb25UbFtpbmRleF07XG4gICAgICAgIH0sXG4gICAgICAgIGdlbmVyYXRlUm93RGV0YWlsVmlldzogKCRldmVudCwgcm93RGF0YSwgcm93SWQsICR0YXJnZXQsICRvdmVybGF5LCBjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5nZXRDbG9uZWRSb3dPYmplY3Qocm93RGF0YSk7XG4gICAgICAgICAgICBjb25zdCByb3dEZWYgPSBnZXRDbG9uZWRPYmplY3QodGhpcy5yb3dEZWYpO1xuICAgICAgICAgICAgaWYgKHRoaXMucm93SW5zdGFuY2UuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3Jlcm93ZXhwYW5kJywgeyRldmVudCwgJGRhdGE6IHJvd0RlZiwgcm93fSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyb3dEZWYuY29udGVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEV4cGFuZCB0aGUgcm93IGRldGFpbFxuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIC8vIFJvdyBpcyBhbHJlYWR5IHJlbmRlcmVkLiBSZXR1cm4gaGVyZVxuICAgICAgICAgICAgaWYgKHRoaXMucm93RGVmTWFwW3Jvd0lkXSAmJiB0aGlzLnJvd0RlZk1hcFtyb3dJZF0uY29udGVudCA9PT0gcm93RGVmLmNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvd0luc3RhbmNlLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Jvd2V4cGFuZCcsIHskZXZlbnQsIHJvdywgJGRhdGE6IHRoaXMucm93RGVmSW5zdGFuY2VzW3Jvd0lkXX0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucm93RGVmTWFwW3Jvd0lkXSA9IHJvd0RlZjtcbiAgICAgICAgICAgICR0YXJnZXQuZW1wdHkoKTtcbiAgICAgICAgICAgICR0YXJnZXQuaGlkZSgpO1xuICAgICAgICAgICAgJG92ZXJsYXkuc2hvdygpO1xuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICAgICAgICByb3dEZWYsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckxvYWQ6ICh3aWRnZXQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdmVybGF5LmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0LnNob3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0RlZkluc3RhbmNlc1tyb3dJZF0gPSB3aWRnZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dJbnN0YW5jZS5pbnZva2VFdmVudENhbGxiYWNrKCdyb3dleHBhbmQnLCB7JGV2ZW50LCByb3csICRkYXRhOiB3aWRnZXR9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgICAgICAgICAgIH19O1xuICAgICAgICAgICAgY29uc3Qgcm9vdE5vZGUgPSB0aGlzLnJvd0RldGFpbFZpZXdSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMucm93RXhwYW5zaW9uVG1wbCwgY29udGV4dCkucm9vdE5vZGVzWzBdO1xuICAgICAgICAgICAgJHRhcmdldFswXS5hcHBlbmRDaGlsZChyb290Tm9kZSk7XG4gICAgICAgICAgICAkYXBwRGlnZXN0KCk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQmVmb3JlUm93Q29sbGFwc2U6ICgkZXZlbnQsIHJvdywgcm93SWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvd0luc3RhbmNlLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZXJvd2NvbGxhcHNlJywgeyRldmVudCwgcm93LCAkZGF0YTogdGhpcy5yb3dEZWZJbnN0YW5jZXNbcm93SWRdfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUm93Q29sbGFwc2U6ICgkZXZlbnQsIHJvdykgPT4ge1xuICAgICAgICAgICAgdGhpcy5yb3dJbnN0YW5jZS5pbnZva2VFdmVudENhbGxiYWNrKCdyb3djb2xsYXBzZScsIHskZXZlbnQsIHJvd30pO1xuICAgICAgICB9LFxuICAgICAgICBnZXRDdXN0b21FeHByZXNzaW9uOiAoZmllbGROYW1lLCBpbmRleCwgc3VtbWFyeVJvdz8pID0+IHtcbiAgICAgICAgICAgIGxldCBjdXN0b21FeHByZXNzaW9uO1xuICAgICAgICAgICAgaWYgKCFzdW1tYXJ5Um93KSB7XG4gICAgICAgICAgICAgICAgY3VzdG9tRXhwcmVzc2lvbiA9IHRoaXMuY3VzdG9tRXhwckNvbXBpbGVkVGxbZmllbGROYW1lICsgaW5kZXhdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdXN0b21FeHByZXNzaW9uID0gdGhpcy5jdXN0b21FeHByQ29tcGlsZWRTdW1tYXJ5VGxbZmllbGROYW1lICsgaW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1c3RvbUV4cHJlc3Npb24gfHwgJyc7XG4gICAgICAgIH0sXG4gICAgICAgIGNsZWFyUm93QWN0aW9uczogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yb3dBY3Rpb25zVmlld1JlZi5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5yb3dBY3Rpb25zQ29tcGlsZWRUbCA9IHt9O1xuICAgICAgICAgICAgdGhpcy5yb3dFeHBhbnNpb25BY3Rpb25WaWV3UmVmLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLnJvd0V4cGFuc2lvbkFjdGlvblRsID0ge307XG4gICAgICAgIH0sXG4gICAgICAgIGdlbmVyYXRlUm93QWN0aW9uczogKHJvd0RhdGEsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldENsb25lZFJvd09iamVjdChyb3dEYXRhKTtcbiAgICAgICAgICAgIHRoaXMucm93QWN0aW9uc0NvbXBpbGVkVGxbaW5kZXhdID0gW107XG4gICAgICAgICAgICAvLyBGb3IgYWxsIHRoZSBjb2x1bW5zIGluc2lkZSB0aGUgdGFibGUsIGdlbmVyYXRlIHRoZSBpbmxpbmUgd2lkZ2V0XG4gICAgICAgICAgICB0aGlzLnJvd0FjdGlvblRtcGwuZm9yRWFjaCgodG1wbCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucm93QWN0aW9uc0NvbXBpbGVkVGxbaW5kZXhdLnB1c2goLi4udGhpcy5yb3dBY3Rpb25zVmlld1JlZi5jcmVhdGVFbWJlZGRlZFZpZXcodG1wbCwge3Jvd30pLnJvb3ROb2Rlcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0Um93QWN0aW9uOiAoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvd0FjdGlvbnNDb21waWxlZFRsW2luZGV4XTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2VuZXJhdGVJbmxpbmVFZGl0Um93OiAocm93RGF0YSwgYWx3YXlzTmV3Um93KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldENsb25lZFJvd09iamVjdChyb3dEYXRhKTtcbiAgICAgICAgICAgIGlmIChhbHdheXNOZXdSb3cpIHtcbiAgICAgICAgICAgICAgICAvLyBDbGVhciB0aGUgdmlldyBjb250YWluZXIgcmVmXG4gICAgICAgICAgICAgICAgdGhpcy5pbmxpbmVFZGl0TmV3Vmlld1JlZi5jbGVhcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5saW5lTmV3Q29tcGxpZWRUbCA9IHt9O1xuICAgICAgICAgICAgICAgIC8vIEZvciBhbGwgdGhlIGNvbHVtbnMgaW5zaWRlIHRoZSB0YWJsZSwgZ2VuZXJhdGUgdGhlIGlubGluZSB3aWRnZXRcbiAgICAgICAgICAgICAgICB0aGlzLmlubGluZVdpZGdldE5ld1RtcGwuZm9yRWFjaCh0bXBsID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpZWxkTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbnRyb2w6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uZ2Zvcm0uY29udHJvbHNbZmllbGROYW1lICsgJ19uZXcnXSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRWYWxpZGF0aW9uTWVzc2FnZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnNbZmllbGROYW1lXSAmJiB0aGlzLmNvbHVtbnNbZmllbGROYW1lXS52YWxpZGF0aW9ubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRQZW5kaW5nU3Bpbm5lclN0YXR1c05ldzogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnNbZmllbGROYW1lXSAmJiB0aGlzLmNvbHVtbnNbZmllbGROYW1lXS5zaG93UGVuZGluZ1NwaW5uZXJOZXc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvb3ROb2RlID0gdGhpcy5pbmxpbmVFZGl0TmV3Vmlld1JlZi5jcmVhdGVFbWJlZGRlZFZpZXcodG1wbCwgY29udGV4dCkucm9vdE5vZGVzWzBdO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWUgPSByb290Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29sLWlkZW50aWZpZXInKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmxpbmVOZXdDb21wbGllZFRsW2ZpZWxkTmFtZV0gPSByb290Tm9kZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyRm9ybSh0cnVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDbGVhciB0aGUgdmlldyBjb250YWluZXIgcmVmXG4gICAgICAgICAgICB0aGlzLmlubGluZUVkaXRWaWV3UmVmLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLmlubGluZUNvbXBsaWVkVGwgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJGb3JtKCk7XG4gICAgICAgICAgICAvLyBGb3IgYWxsIHRoZSBjb2x1bW5zIGluc2lkZSB0aGUgdGFibGUsIGdlbmVyYXRlIHRoZSBpbmxpbmUgd2lkZ2V0XG4gICAgICAgICAgICB0aGlzLmlubGluZVdpZGdldFRtcGwuZm9yRWFjaCh0bXBsID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZmllbGROYW1lO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q29udHJvbDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmdmb3JtLmNvbnRyb2xzW2ZpZWxkTmFtZV0gfHwge307XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGdldFZhbGlkYXRpb25NZXNzYWdlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5zW2ZpZWxkTmFtZV0gJiYgdGhpcy5jb2x1bW5zW2ZpZWxkTmFtZV0udmFsaWRhdGlvbm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGdldFBlbmRpbmdTcGlubmVyU3RhdHVzOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5zW2ZpZWxkTmFtZV0gJiYgdGhpcy5jb2x1bW5zW2ZpZWxkTmFtZV0uc2hvd1BlbmRpbmdTcGlubmVyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3Qgcm9vdE5vZGUgPSB0aGlzLmlubGluZUVkaXRWaWV3UmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0bXBsLCBjb250ZXh0KS5yb290Tm9kZXNbMF07XG4gICAgICAgICAgICAgICAgZmllbGROYW1lID0gcm9vdE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbC1pZGVudGlmaWVyJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmxpbmVDb21wbGllZFRsW2ZpZWxkTmFtZV0gPSByb290Tm9kZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBnZXRJbmxpbmVFZGl0V2lkZ2V0OiAoZmllbGROYW1lLCB2YWx1ZSwgYWx3YXlzTmV3Um93KSA9PiB7XG4gICAgICAgICAgICBpZiAoYWx3YXlzTmV3Um93KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZXRGaWVsZFZhbHVlKGZpZWxkTmFtZSArICdfbmV3JywgdmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlubGluZU5ld0NvbXBsaWVkVGxbZmllbGROYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0RmllbGRWYWx1ZShmaWVsZE5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlubGluZUNvbXBsaWVkVGxbZmllbGROYW1lXTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0RmllbGRWYWx1ZTogKGZpZWxkTmFtZSwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLm5nZm9ybS5jb250cm9scyAmJiB0aGlzLm5nZm9ybS5jb250cm9sc1tmaWVsZE5hbWVdO1xuICAgICAgICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICBjb250cm9sLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ2V0RmllbGRWYWx1ZTogZmllbGROYW1lID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLm5nZm9ybS5jb250cm9scyAmJiB0aGlzLm5nZm9ybS5jb250cm9sc1tmaWVsZE5hbWVdO1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2wgJiYgY29udHJvbC52YWx1ZTtcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBmdW5jdGlvbiB0byBhZGQgbG9hZCBtb3JlIGJ1dHRvbiB0byB0YWJsZVxuICAgICAgICBhZGRMb2FkTW9yZUJ0bjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdhZGRMb2FkTW9yZUJ0bicsIHRoaXMub25kZW1hbmRtZXNzYWdlLCB0aGlzLmxvYWRpbmdkYXRhbXNnLCAoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldElzTmV4dFBhZ2VEYXRhKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZXRJc0RhdGFVcGRhdGVkQnlVc2VyKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWRPcHRpb25zLm1vZGUgPT09ICd2aWV3bGVzcycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3IubmF2aWdhdGVQYWdlKCdmaXJzdCcsICRldmVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5tb2RlID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5uYXZpZ2F0ZVBhZ2UoJ25leHQnLCAkZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgdGhpcy5pbmZTY3JvbGwpO1xuICAgICAgICB9LFxuICAgICAgICAvLyBmdW5jdGlvbiB0byBiaW5kIHNjcm9sbCBldmVudFxuICAgICAgICBiaW5kU2Nyb2xsRXZ0OiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZ3JpZERhdGEgJiYgdGhpcy5fZ3JpZERhdGEubGVuZ3RoICYmIHRoaXMuaW5mU2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgLy8gc21vb3Roc2Nyb2xsIGV2ZW50cyB3aWxsIGJlIGJpbmRlZC5cbiAgICAgICAgICAgICAgICAvLyBBZGRlZCB0aW1lb3V0IGFzIHRoZSB0YWJsZSBodG1sIGlzIHJlbmRlcmVkIGF0IHJ1bnRpbWVcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5iaW5kU2Nyb2xsRXZ0KHRoaXMsICd0Ym9keScsIERFQk9VTkNFX1RJTUVTLlBBR0lOQVRJT05fREVCT1VOQ0VfVElNRSk7XG4gICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdlbmVyYXRlRmlsdGVyUm93OiAoKSA9PiB7XG4gICAgICAgICAgICAvLyBDbGVhciB0aGUgdmlldyBjb250YWluZXIgcmVmXG4gICAgICAgICAgICB0aGlzLmZpbHRlclZpZXdSZWYuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMucm93RmlsdGVyQ29tcGxpZWRUbCA9IHt9O1xuICAgICAgICAgICAgLy8gRm9yIGFsbCB0aGUgY29sdW1ucyBpbnNpZGUgdGhlIHRhYmxlLCBnZW5lcmF0ZSB0aGUgY29tcGlsZWQgZmlsdGVyIHRlbXBsYXRlXG4gICAgICAgICAgICB0aGlzLmZpbHRlclRtcGwuZm9yRWFjaCgodG1wbCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvb3ROb2RlID0gdGhpcy5maWx0ZXJWaWV3UmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0bXBsLCB7XG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZUZuOiB0aGlzLm9uUm93RmlsdGVyQ2hhbmdlLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ6IChmaWVsZE5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVtcHR5TWF0Y2hNb2Rlcy5pbmRleE9mKHRoaXMucm93RmlsdGVyW2ZpZWxkTmFtZV0gJiYgdGhpcy5yb3dGaWx0ZXJbZmllbGROYW1lXS5tYXRjaE1vZGUpID4gLTE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KS5yb290Tm9kZXNbMF07XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dGaWx0ZXJDb21wbGllZFRsW3Jvb3ROb2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1jb2wtaWRlbnRpZmllcicpXSA9IHJvb3ROb2RlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldEZpbHRlcldpZGdldDogKGZpZWxkTmFtZSkgPT4ge1xuICAgICAgICAgICAgLy8gTW92ZSB0aGUgZ2VuZXJhdGVkIGZpbHRlciB0ZW1wbGF0ZSB0byB0aGUgZmlsdGVyIHJvd1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm93RmlsdGVyQ29tcGxpZWRUbFtmaWVsZE5hbWVdO1xuICAgICAgICB9LFxuICAgICAgICBzZXRHcmlkRWRpdE1vZGU6ICh2YWwpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0dyaWRFZGl0TW9kZSA9IHZhbDtcbiAgICAgICAgICAgICAgICAkYXBwRGlnZXN0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0R3JpZFN0YXRlOiAodmFsKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHZhbCA9PT0gJ2xvYWRpbmcnO1xuICAgICAgICB9LFxuICAgICAgICAvKlxuICAgICAgICAgICAgc2V0IGFjdGlvblJvd0luZGV4IGFuZCBhY3Rpb25Sb3dQYWdlIHZhbHVlc1xuICAgICAgICAgICAgYWN0aW9uUm93SW5kZXggd2lsbCBoYXZlIHRoZSByb3cgaW5kZXggaW4gdGhlIGRhdGFzZXQgb24gd2hpY2ggZWRpdC9kZWxldGUgb3BlcmF0aW9uIGlzIGJlaW5nIHBlcmZvcm1lZFxuICAgICAgICAgICAgYWN0aW9uUm93UGFnZSB3aWxsIGhhdmUgcGFnZSBudW1iZXIgaW4gd2hpY2ggdGhlIGFjdGlvbiByb3cgaW5kZXggaXMgcHJlc2VudFxuICAgICAgICAgKi9cbiAgICAgICAgc2V0QWN0aW9uUm93SW5kZXg6ICh2YWwpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWRPcHRpb25zLmlzTmF2VHlwZVNjcm9sbE9yT25kZW1hbmQoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uUm93SW5kZXggPSBwYXJzZUludCh2YWwpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2FjdGlvblJvd0luZGV4JywgdGhpcy5hY3Rpb25Sb3dJbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKCFfLmlzTmFOKHRoaXMuYWN0aW9uUm93SW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uUm93UGFnZSA9IE1hdGguZmxvb3IodGhpcy5hY3Rpb25Sb3dJbmRleCAvIHRoaXMucGFnZXNpemUpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignYWN0aW9uUm93UGFnZScsIHRoaXMuYWN0aW9uUm93UGFnZSB8fCB0aGlzLmdyaWRPcHRpb25zLmFjdGlvblJvd1BhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2xlYXJBY3Rpb25Sb3dJbmRleDogKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzUm93RGVsZXRlZCAmJiAodGhpcy5pbmZTY3JvbGwgfHwgdGhpcy5vbkRlbWFuZExvYWQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhckFjdGlvblJvd1ZhcnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbm9DaGFuZ2VzRGV0ZWN0ZWQ6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlTWVzc2FnZSh0cnVlLCAnaW5mbycsICdObyBDaGFuZ2VzIERldGVjdGVkJywgJycpO1xuICAgICAgICB9LFxuICAgICAgICAvLyBGdW5jdGlvbiB0byByZWRyYXcgdGhlIHdpZGdldHMgb24gcmVzaXplIG9mIGNvbHVtbnNcbiAgICAgICAgcmVkcmF3V2lkZ2V0czogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgICAgIHRyaWdnZXJGbihjb2wuaW5saW5lSW5zdGFuY2UgJiYgY29sLmlubGluZUluc3RhbmNlLnJlZHJhdyk7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckZuKGNvbC5pbmxpbmVJbnN0YW5jZU5ldyAmJiBjb2wuaW5saW5lSW5zdGFuY2VOZXcucmVkcmF3KTtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRm4oY29sLmZpbHRlckluc3RhbmNlICYmIGNvbC5maWx0ZXJJbnN0YW5jZS5yZWRyYXcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNlYXJjaEhhbmRsZXI6IHRoaXMuc2VhcmNoU29ydEhhbmRsZXIuYmluZCh0aGlzKSxcbiAgICAgICAgc29ydEhhbmRsZXI6IHRoaXMuc2VhcmNoU29ydEhhbmRsZXIuYmluZCh0aGlzKSxcbiAgICAgICAgdGltZW91dENhbGw6IChmbiwgZGVsYXkpID0+IHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZm4sIGRlbGF5KTtcbiAgICAgICAgfSxcbiAgICAgICAgcnVuSW5OZ1pvbmU6IGZuID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bihmbik7XG4gICAgICAgIH0sXG4gICAgICAgIHNhZmVBcHBseTogKCkgPT4ge1xuICAgICAgICAgICAgJGFwcERpZ2VzdCgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXRUb3VjaGVkOiAobmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3RybCA9IHRoaXMubmdmb3JtLmNvbnRyb2xzW25hbWVdO1xuICAgICAgICAgICAgaWYgKGN0cmwpIHtcbiAgICAgICAgICAgICAgICBjdHJsLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2xlYXJGb3JtOiB0aGlzLmNsZWFyRm9ybS5iaW5kKHRoaXMpLFxuICAgICAgICBjYWxsTG9hZElubGluZVdpZGdldERhdGE6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZnVsbEZpZWxkRGVmcy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKF8uaXNVbmRlZmluZWQoY29sLmlzRGF0YVNldEJvdW5kKSkge1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyRm4oY29sLmxvYWRJbmxpbmVXaWRnZXREYXRhICYmIGNvbC5sb2FkSW5saW5lV2lkZ2V0RGF0YS5iaW5kKGNvbCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAvLyBGdW5jdGlvbiB0byBhcHBseSB2YWxpZGF0b3JzIHRvIElubGluZSBmb3JtIGNvbnRyb2xzXG4gICAgICAgIGFwcGx5VmFsaWRhdGlvbnM6IChjb2wsIGFsd2F5c05ld1JvdykgPT4ge1xuICAgICAgICAgICAgaWYgKGFsd2F5c05ld1Jvdykge1xuICAgICAgICAgICAgICAgIHRyaWdnZXJGbihjb2wuYXBwbHlOZXdSb3dWYWxpZGF0aW9ucyAmJiBjb2wuYXBwbHlOZXdSb3dWYWxpZGF0aW9ucy5iaW5kKGNvbCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRm4oY29sLmFwcGx5VmFsaWRhdGlvbnMgJiYgY29sLmFwcGx5VmFsaWRhdGlvbnMuYmluZChjb2wpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gRnVuY3Rpb24gdG8gcmVtb3ZlIHZhbGlkYXRvcnMgYW5kIHNldCBmb3JtIHN0YXRlIHRvIHVudG91Y2hlZCBmb3IgaW5saW5lIGZvcm0gY29udHJvbFxuICAgICAgICByZW1vdmVWYWxpZGF0aW9uczogKGFsd2F5c05ld1JvdykgPT4ge1xuICAgICAgICAgICAgdGhpcy5mdWxsRmllbGREZWZzLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbC5yZWFkb25seSAmJiBjb2wuYmluZGluZyAhPT0gJ3Jvd09wZXJhdGlvbnMnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhbHdheXNOZXdSb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJGbihjb2wucmVtb3ZlTmV3Um93VmFsaWRhdGlvbnMgJiYgY29sLnJlbW92ZU5ld1Jvd1ZhbGlkYXRpb25zLmJpbmQoY29sKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyRm4oY29sLnJlbW92ZVZhbGlkYXRpb25zICYmIGNvbC5yZW1vdmVWYWxpZGF0aW9ucy5iaW5kKGNvbCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBfZ3JpZERhdGE7XG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRJdGVtc0V4aXN0ID0gZmFsc2U7XG4gICAgc2V0IGdyaWREYXRhKG5ld1ZhbHVlKSB7XG4gICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAvLyBGaXggZm9yIFtXTVMtMjQwMTJdOiBoaWRlIG5vIGRhdGFmb3VuZCBtc2cgd2hlbiB2YXJpYWJsZUluZmxpZ2h0IGlzIHRydWUgYW5kIGRhdGFzZXQgaXMgZW1wdHlcbiAgICAgICAgaWYgKHRoaXMudmFyaWFibGVJbmZsaWdodCAmJiBfLmlzRW1wdHkobmV3VmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YXJpYWJsZUluZmxpZ2h0ID0gZmFsc2U7XG4gICAgICAgIC8vIEZpeCBmb3IgW1dNUy0yNDEwOF06IENoYW5nZSB0aGUgc3RhdHVzIHRvIHJlYWR5IG9yIG5vZGF0YSBmb3VuZCB3aGVuIHZhcmlhYmxlSW5mbGlnaHQgaXMgZmFsc2UoYWZ0ZXIgZ2V0dGluZyB0aGUgZGF0YSlcbiAgICAgICAgaWYgKG5ld1ZhbHVlICYmIChuZXdWYWx1ZS5sZW5ndGgpID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ25vZGF0YScsIHRoaXMubm9kYXRhbWVzc2FnZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ3JlYWR5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JpZE9wdGlvbnMuaXNOYXZUeXBlU2Nyb2xsT3JPbmRlbWFuZCgpKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgdGhlIF9ncmlkRGF0YSBmaWVsZCB3aXRoIHRoZSBuZXh0IHNldCBvZiBpdGVtcyBhbmQgbW9kaWZ5IHRoZSBjdXJyZW50IHBhZ2VcbiAgICAgICAgICAgIFt0aGlzLl9ncmlkRGF0YSwgdGhpcy5jdXJyZW50UGFnZV0gPSB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnVwZGF0ZUZpZWxkc09uUGFnaW5hdGlvbih0aGlzLCBuZXdWYWx1ZSk7XG5cbiAgICAgICAgICAgIC8vIFdoZW4gZWRpdCBhY3Rpb24gaXMgcGVyZm9ybWVkIG9uIHByZXZpb3VzIHBhZ2UsIHVwZGF0ZSB0aGUgX2dyaWREYXRhIGZpZWxkIHdpdGggdGhlIG1vZGlmaWVkIHJvdyBkYXRhXG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9ucy5sYXN0QWN0aW9uUGVyZm9ybWVkID09PSB0aGlzLmdyaWRPcHRpb25zLkFDVElPTlMuRURJVCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0luZGV4ID0gXy5mbG9vcih0aGlzLmFjdGlvblJvd0luZGV4ICUgdGhpcy5wYWdlc2l6ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ3JpZERhdGEuc3BsaWNlKHRoaXMuYWN0aW9uUm93SW5kZXgsIDEgLCBuZXdWYWx1ZVtyb3dJbmRleF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignaXNMYXN0UGFnZScsICEhKHRoaXMuZGF0YU5hdmlnYXRvci5pc0Rpc2FibGVOZXh0KSk7XG4gICAgICAgICAgICAvLyBJbiBjYXNlIG9mIG9uIGRlbWFuZCBwYWdpbmF0aW9uLCBjcmVhdGUgdGhlIGxvYWQgbW9yZSBidXR0b24gb25seSBvbmNlIGFuZCBzaG93IHRoZSBidXR0b24gdW50aWwgbmV4dCBwYWdlIGlzIG5vdCBkaXNhYmxlZFxuICAgICAgICAgICAgaWYgKCF0aGlzLiRlbGVtZW50LmZpbmQoJy5vbi1kZW1hbmQtZGF0YWdyaWQnKS5sZW5ndGggJiYgIXRoaXMuZGF0YU5hdmlnYXRvci5pc0Rpc2FibGVOZXh0ICYmIHRoaXMub25EZW1hbmRMb2FkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5hZGRMb2FkTW9yZUJ0bigpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgodGhpcy5fZ3JpZERhdGEgJiYgdGhpcy5fZ3JpZERhdGEubGVuZ3RoKSAmJiAodGhpcy5kYXRhTmF2aWdhdG9yLmlzRGlzYWJsZU5leHQgfHwgIXRoaXMuaXNEYXRhTG9hZGluZykpIHtcbiAgICAgICAgICAgICAgICAvLyB3aGVuIHRoZSBuZXh0IHBhZ2UgaXMgZGlzYWJsZWQgb3Igd2hlbiB0aGUgZGF0YSBpcyBub3QgbG9hZGluZyByZW1vdmUgdGhlIGxvYWRpbmcvbG9hZCBtb3JlIGJ1dHRvbiBhY2NvcmRpbmdseVxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdoaWRlTG9hZGluZ0luZGljYXRvcicsIHRoaXMuZGF0YU5hdmlnYXRvci5pc0Rpc2FibGVOZXh0LCB0aGlzLmluZlNjcm9sbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9ncmlkRGF0YSA9IG5ld1ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdGFydFJvd0luZGV4ID0gMDtcbiAgICAgICAgbGV0IGdyaWRPcHRpb25zO1xuXG4gICAgICAgIHRoaXMuX29uQ2hhbmdlKHRoaXMuX2dyaWREYXRhKTtcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkKCk7XG5cbiAgICAgICAgaWYgKGlzRGVmaW5lZChuZXdWYWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuYmluZFNjcm9sbEV2dCgpO1xuXG4gICAgICAgICAgICAvKlNldHRpbmcgdGhlIHNlcmlhbCBubydzIG9ubHkgd2hlbiBzaG93IG5hdmlnYXRpb24gaXMgZW5hYmxlZCBhbmQgZGF0YSBuYXZpZ2F0b3IgaXMgY29tcGlsZWRcbiAgICAgICAgICAgICBhbmQgaXRzIGN1cnJlbnQgcGFnZSBpcyBzZXQgcHJvcGVybHkqL1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNOYXZpZ2F0aW9uRW5hYmxlZCgpICYmIHRoaXMuZGF0YU5hdmlnYXRvci5kbi5jdXJyZW50UGFnZSkge1xuICAgICAgICAgICAgICAgIHN0YXJ0Um93SW5kZXggPSAoKHRoaXMuZGF0YU5hdmlnYXRvci5kbi5jdXJyZW50UGFnZSAtIDEpICogKHRoaXMuZGF0YU5hdmlnYXRvci5tYXhSZXN1bHRzIHx8IDEpKSArIDE7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignc3RhcnRSb3dJbmRleCcsIHN0YXJ0Um93SW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyogSWYgY29sRGVmcyBhcmUgYXZhaWxhYmxlLCBidXQgbm90IGFscmVhZHkgc2V0IG9uIHRoZSBkYXRhZ3JpZCwgdGhlbiBzZXQgdGhlbS5cbiAgICAgICAgICAgICAqIFRoaXMgd2lsbCBoYXBwZW4gd2hpbGUgc3dpdGNoaW5nIGZyb20gbWFya3VwIHRvIGRlc2lnbiB0YWIuICovXG4gICAgICAgICAgICBncmlkT3B0aW9ucyA9IHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdnZXRPcHRpb25zJyk7XG5cbiAgICAgICAgICAgIGlmICghZ3JpZE9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghZ3JpZE9wdGlvbnMuY29sRGVmcy5sZW5ndGggJiYgdGhpcy5maWVsZERlZnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignY29sRGVmcycsIGdldENsb25lZE9iamVjdCh0aGlzLmZpZWxkRGVmcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgZGF0YSBhbmQgY29sRGVmcyBhcmUgcHJlc2VudCwgY2FsbCBvbiBiZWZvcmUgZGF0YSByZW5kZXIgZXZlbnRcbiAgICAgICAgICAgIGlmICghdGhpcy5pc2R5bmFtaWN0YWJsZSAmJiAhXy5pc0VtcHR5KG5ld1ZhbHVlKSAmJiBncmlkT3B0aW9ucy5jb2xEZWZzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3JlZGF0YXJlbmRlcicsIHskZGF0YTogdGhpcy5fZ3JpZERhdGEsICRjb2x1bW5zOiB0aGlzLmNvbHVtbnMsIGRhdGE6IHRoaXMuX2dyaWREYXRhLCBjb2x1bW5zOiB0aGlzLmNvbHVtbnN9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2RhdGEnLCBnZXRDbG9uZWRPYmplY3QodGhpcy5fZ3JpZERhdGEpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBncmlkRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dyaWREYXRhIHx8IFtdO1xuICAgIH1cblxuICAgIGdldCBzZWxlY3RlZGl0ZW0oKSB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q2xvbmVkT2JqZWN0KHRoaXMuaXRlbXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfLmlzRW1wdHkodGhpcy5pdGVtcykpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0Q2xvbmVkT2JqZWN0KHRoaXMuaXRlbXNbMF0pO1xuICAgIH1cblxuICAgIHNldCBzZWxlY3RlZGl0ZW0odmFsKSB7XG4gICAgICAgIC8vIFNlbGVjdCB0aGUgcm93cyBpbiB0aGUgdGFibGUgYmFzZWQgb24gdGhlIG5ldyBzZWxlY3RlZCBpdGVtcyBwYXNzZWRcbiAgICAgICAgdGhpcy5pdGVtcy5sZW5ndGggPSAwO1xuICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2VsZWN0Um93cycsIHZhbCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5cHJlc3MnLCBbJyRldmVudCddKSBvbktleVByZXNzICgkZXZlbnQ6IGFueSkge1xuICAgICAgICBpZiAoJGV2ZW50LndoaWNoID09PSAxMykge1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdlbnRlcmtleXByZXNzJywgeyRldmVudCwgJGRhdGE6IHRoaXMuZ3JpZERhdGF9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgaW5qOiBJbmplY3RvcixcbiAgICAgICAgcHVibGljIGZiOiBGb3JtQnVpbGRlcixcbiAgICAgICAgcHJpdmF0ZSBhcHA6IEFwcCxcbiAgICAgICAgcHJpdmF0ZSBkeW5hbWljQ29tcG9uZW50UHJvdmlkZXI6IER5bmFtaWNDb21wb25lbnRSZWZQcm92aWRlcixcbiAgICAgICAgcHJpdmF0ZSBzdGF0ZVBlcnNpc3RlbmNlOiBTdGF0ZVBlcnNpc3RlbmNlLFxuICAgICAgICBwcml2YXRlIHBhZ2luYXRpb25TZXJ2aWNlOiBQYWdpbmF0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB2aWV3cG9ydDogVmlld3BvcnQsXG4gICAgICAgIEBPcHRpb25hbCgpIHB1YmxpYyBwYXJlbnRMaXN0OiBMaXN0Q29tcG9uZW50LFxuICAgICAgICBAQXR0cmlidXRlKCdkYXRhc2V0LmJpbmQnKSBwdWJsaWMgYmluZGRhdGFzZXQsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2RhdGFzb3VyY2UuYmluZCcpIHB1YmxpYyBiaW5kZGF0YXNvdXJjZSxcbiAgICAgICAgQEF0dHJpYnV0ZSgncmVhZG9ubHlncmlkJykgcHVibGljIHJlYWRvbmx5Z3JpZCxcbiAgICAgICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgcHJpdmF0ZSB0cnVzdEFzUGlwZTogVHJ1c3RBc1BpcGUsIEBPcHRpb25hbCgpIHB1YmxpYyBfdmlld1BhcmVudDogVXNlckRlZmluZWRFeGVjdXRpb25Db250ZXh0XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluaiwgV0lER0VUX0NPTkZJRywgX3ZpZXdQYXJlbnQpO1xuICAgICAgICBzdHlsZXIodGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzKTtcblxuICAgICAgICB0aGlzLm5nZm9ybSA9IGZiLmdyb3VwKHt9KTtcbiAgICAgICAgdGhpcy5hZGRFdmVudHNUb0NvbnRleHQodGhpcy5jb250ZXh0KTtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzVG9SZW1vdmUgPSBbXG4gICAgICAgICAgICAvLyBVcGRhdGVzIHBhZ2luYXRpb24sIGZpbHRlciwgc29ydCBldGMgb3B0aW9ucyBmb3Igc2VydmljZSBhbmQgY3J1ZCB2YXJpYWJsZXNcbiAgICAgICAgICAgIHRoaXMuYXBwLnN1YnNjcmliZSgnY2hlY2stc3RhdGUtcGVyc2lzdGVuY2Utb3B0aW9ucycsIG9wdGlvbnMgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBkYXRhU291cmNlTmFtZSA9IF8uZ2V0KHRoaXMuZGF0YXNvdXJjZSwgJ25hbWUnKTtcbiAgICAgICAgICAgICAgICAvLyBpbiBQcmVmYWJzLCB0aGlzLmRhdGFzb3VyY2UgaXMgbm90IHJlc29sdmVkIGF0IHRoZSB0aW1lIG9mIHZhcmlhYmxlIGludm9jYXRpb24sIHNvIGFkZGl0aW9uYWwgY2hlY2sgaXMgcmVxdWlyZWQuXG4gICAgICAgICAgICAgICAgaWYgKCFkYXRhU291cmNlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlTmFtZSA9IGV4dHJhY3REYXRhU291cmNlTmFtZSh0aGlzLmJpbmRkYXRhc291cmNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF8uZ2V0KG9wdGlvbnMsICd2YXJpYWJsZS5uYW1lJykgIT09IGRhdGFTb3VyY2VOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3BhZ2VMb2FkICYmIHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYWdlTG9hZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB3aWRnZXRTdGF0ZSA9IHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5nZXRXaWRnZXRTdGF0ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpZGdldFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0gdGhpcy5oYW5kbGVTdGF0ZVBhcmFtcyh3aWRnZXRTdGF0ZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH0gIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignc2VsZWN0Rmlyc3RSb3cnLCB0aGlzLmdyaWRmaXJzdHJvd3NlbGVjdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcblxuICAgICAgICAgICAgLy8gU2hvdyBsb2FkaW5nIHN0YXR1cyBiYXNlZCBvbiB0aGUgdmFyaWFibGUgbGlmZSBjeWNsZVxuICAgICAgICAgICAgdGhpcy5hcHAuc3Vic2NyaWJlKCd0b2dnbGUtdmFyaWFibGUtc3RhdGUnLCBvcHRpb25zID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhc291cmNlICYmIHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLklTX0FQSV9BV0FSRSkgJiYgaXNEYXRhU291cmNlRXF1YWwob3B0aW9ucy52YXJpYWJsZSwgdGhpcy5kYXRhc291cmNlKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcGFnZUxvYWQgJiYgdGhpcy5nZXRDb25maWd1cmVkU3RhdGUoKSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYWdlTG9hZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2lkZ2V0U3RhdGUgPSB0aGlzLnN0YXRlUGVyc2lzdGVuY2UuZ2V0V2lkZ2V0U3RhdGUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkZ2V0U3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0gdGhpcy5oYW5kbGVTdGF0ZVBhcmFtcyh3aWRnZXRTdGF0ZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ3NlbGVjdEZpcnN0Um93JywgdGhpcy5ncmlkZmlyc3Ryb3dzZWxlY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlzRGVmaW5lZCh0aGlzLnZhcmlhYmxlSW5mbGlnaHQpID8gdGhpcy5kZWJvdW5jZWRIYW5kbGVMb2FkaW5nKG9wdGlvbnMpIDogdGhpcy5oYW5kbGVMb2FkaW5nKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuXG4gICAgICAgICAgICB0aGlzLmFwcC5zdWJzY3JpYmUoJ3NldHVwLWN1ZC1saXN0ZW5lcicsIHBhcmFtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5uYW1lICE9PSBwYXJhbSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2lzRGVwZW5kZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUNoYW5nZSRcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDI1MCkpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUodGhpcy50cmlnZ2VyV01FdmVudC5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG5cbiAgICAgICAgbGlzdGVuZXJzVG9SZW1vdmUuZm9yRWFjaCggbCA9PiB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKGwpICk7XG5cbiAgICAgICAgdGhpcy5kZWxldGVva3RleHQgPSB0aGlzLmFwcExvY2FsZS5MQUJFTF9PSztcbiAgICAgICAgdGhpcy5kZWxldGVjYW5jZWx0ZXh0ID0gdGhpcy5hcHBMb2NhbGUuTEFCRUxfQ0FOQ0VMO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdBZnRlckNvbnRlbnRJbml0KCk7XG4gICAgICAgIHRoaXMuaGVhZGVyQ29uZmlnID0gdGhpcy5oZWFkZXJDb25maWcuZmlsdGVyKHRoaXMuZmlsdGVyRW1wdHlWYWx1ZXMuYmluZCh0aGlzKSk7XG4gICAgICAgIF8ucmVtb3ZlKHRoaXMuZmllbGREZWZzLCBmID0+IGYgPT09IHVuZGVmaW5lZCk7XG4gICAgICAgIGNvbnN0IHJ1bk1vZGVJbml0aWFsUHJvcGVydGllcyA9IHtcbiAgICAgICAgICAgIHNob3dyb3dpbmRleDogJ3Nob3dSb3dJbmRleCcsXG4gICAgICAgICAgICBtdWx0aXNlbGVjdDogJ211bHRpc2VsZWN0JyxcbiAgICAgICAgICAgIHJhZGlvc2VsZWN0OiAnc2hvd1JhZGlvQ29sdW1uJyxcbiAgICAgICAgICAgIGZpbHRlcm51bGxyZWNvcmRzOiAnZmlsdGVyTnVsbFJlY29yZHMnLFxuICAgICAgICAgICAgZW5hYmxlc29ydDogJ2VuYWJsZVNvcnQnLFxuICAgICAgICAgICAgc2hvd2hlYWRlcjogJ3Nob3dIZWFkZXInLFxuICAgICAgICAgICAgZW5hYmxlY29sdW1uc2VsZWN0aW9uOiAnZW5hYmxlQ29sdW1uU2VsZWN0aW9uJyxcbiAgICAgICAgICAgIHNob3duZXdyb3c6ICdzaG93TmV3Um93JyxcbiAgICAgICAgICAgIGdyaWRmaXJzdHJvd3NlbGVjdDogJ3NlbGVjdEZpcnN0Um93J1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLl9saXZlVGFibGVQYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNQYXJ0T2ZMaXZlR3JpZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5yZWFkb25seWdyaWQgfHwgIXRoaXMuZWRpdG1vZGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlYWRvbmx5Z3JpZCA9PT0gJ3RydWUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0bW9kZSA9ICcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1BhcnRPZkxpdmVHcmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdG1vZGUgPSB0aGlzLmlzUGFydE9mTGl2ZUdyaWQuZm9ybWxheW91dCA9PT0gJ2lubGluZScgPyBFRElUX01PREUuRk9STSA6IEVESVRfTU9ERS5ESUFMT0c7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0bW9kZSA9IHRoaXMucmVhZG9ubHlncmlkID8gRURJVF9NT0RFLklOTElORSA6ICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuY29sRGVmcyA9IHRoaXMuZnVsbEZpZWxkRGVmcztcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5yb3dBY3Rpb25zID0gdGhpcy5yb3dBY3Rpb25zO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmhlYWRlckNvbmZpZyA9IHRoaXMuaGVhZGVyQ29uZmlnO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnJvd0NsYXNzID0gdGhpcy5yb3djbGFzcztcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5lZGl0bW9kZSA9IHRoaXMuZWRpdG1vZGU7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuZm9ybVBvc2l0aW9uID0gdGhpcy5mb3JtcG9zaXRpb247XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuZmlsdGVybW9kZSA9IHRoaXMuZmlsdGVybW9kZTtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZWFyY2hMYWJlbCA9IHRoaXMuc2VhcmNobGFiZWw7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuaXNNb2JpbGUgPSBpc01vYmlsZSgpO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLm5hbWUgPSB0aGlzLm5hbWU7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2VjdXJpdHlVdGlscy5waXBlVHJhbnNmb3JtID0gdGhpcy50cnVzdEFzUGlwZTtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5uYXZpZ2F0aW9uID0gdGhpcy5uYXZpZ2F0aW9uO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmlzZHluYW1pY3RhYmxlID0gdGhpcy5pc2R5bmFtaWN0YWJsZTtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zaG93dmlld2xlc3NidXR0b24gPSB0aGlzLnNob3d2aWV3bGVzc2J1dHRvbjtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5vbmRlbWFuZG1lc3NhZ2UgPSB0aGlzLm9uZGVtYW5kbWVzc2FnZTtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy52aWV3bGVzc21lc3NhZ2UgPSB0aGlzLnZpZXdsZXNzbWVzc2FnZTtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5sb2FkaW5nZGF0YW1zZyA9IHRoaXMubG9hZGluZ2RhdGFtc2c7XG5cbiAgICAgICAgLy8gV2hlbiBsb2Fkb25kZW1hbmQgcHJvcGVydHkgaXMgZW5hYmxlZChkZWZlcmxvYWQ9XCJ0cnVlXCIpIGFuZCBzaG93IGlzIHRydWUsIG9ubHkgdGhlIGNvbHVtbiB0aXRsZXMgb2YgdGhlIGRhdGF0YWJsZSBhcmUgcmVuZGVyZWQsIHRoZSBkYXRhKGJvZHkgb2YgdGhlIGRhdGF0YWJsZSkgaXMgbm90IGF0IGFsbCByZW5kZXJlZC5cbiAgICAgICAgLy8gQmVjYXVzZSB0aGUgZ3JpZGRhdGEgaXMgc2V0dGluZyBiZWZvcmUgdGhlIGRhdGF0YWJsZSBkb20gaXMgcmVuZGVyZWQgYnV0IHdlIGFyZSBzZW5kaW5nIGVtcHR5IGRhdGEgdG8gdGhlIGRhdGF0YWJsZS5cbiAgICAgICAgaWYgKCFfLmlzRW1wdHkodGhpcy5ncmlkRGF0YSkpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuZGF0YSA9IGdldENsb25lZE9iamVjdCh0aGlzLmdyaWREYXRhKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLm1lc3NhZ2VzID0ge1xuICAgICAgICAgICAgJ3NlbGVjdEZpZWxkJzogdGhpcy5hcHBMb2NhbGUuTUVTU0FHRV9TRUxFQ1RfRklFTERcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kYXRhZ3JpZEVsZW1lbnQgPSAkKHRoaXMuX3RhYmxlRWxlbWVudC5uYXRpdmVFbGVtZW50KTtcblxuICAgICAgICB0aGlzLmdyaWRFbGVtZW50ID0gdGhpcy4kZWxlbWVudDtcbiAgICAgICAgdGhpcy4kZWxlbWVudC5jc3Moeydwb3NpdGlvbic6ICdyZWxhdGl2ZSd9KTtcblxuICAgICAgICBfLmZvckVhY2gocnVuTW9kZUluaXRpYWxQcm9wZXJ0aWVzLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzRGVmaW5lZCh0aGlzW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9uc1t2YWx1ZV0gPSAodGhpc1trZXldID09PSAndHJ1ZScgfHwgdGhpc1trZXldID09PSB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlaGFuZGxlciAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zWydzZWxlY3RGaXJzdFJvdyddID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlbmRlck9wZXJhdGlvbkNvbHVtbnMoKTtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5jb2xEZWZzID0gdGhpcy5maWVsZERlZnM7XG5cbiAgICAgICAgdGhpcy5kYXRhZ3JpZEVsZW1lbnQuZGF0YXRhYmxlKHRoaXMuZ3JpZE9wdGlvbnMpO1xuICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ2xvYWRpbmcnLCB0aGlzLmxvYWRpbmdkYXRhbXNnKTtcbiAgICAgICAgLy8gaWYodGhpcy5ncmlkT3B0aW9ucy5kYXRhLmxlbmd0aCB8fCB0aGlzLnZhcmlhYmxlSW5mbGlnaHQpIHtcbiAgICAgICAgLy8gICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbG9hZGluZycsIHRoaXMubG9hZGluZ2RhdGFtc2cpO1xuICAgICAgICAvLyB9IGVsc2Uge1xuICAgICAgICAvLyAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdub2RhdGEnLCB0aGlzLm5vZGF0YW1lc3NhZ2UpO1xuICAgICAgICAvLyB9XG5cbiAgICAgICAgdGhpcy5hcHBseVByb3BzLmZvckVhY2goYXJncyA9PiB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCguLi5hcmdzKSk7XG5cbiAgICAgICAgaWYgKHRoaXMuZWRpdG1vZGUgPT09IEVESVRfTU9ERS5RVUlDS19FRElUKSB7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50Q2xpY2tCaW5kID0gdGhpcy5fZG9jdW1lbnRDbGlja0JpbmQuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5kb2N1bWVudENsaWNrQmluZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJpdmF0ZSBnZXRDb25maWd1cmVkU3RhdGUoKSB7XG4gICAgICAgIGNvbnN0IG1vZGUgPSB0aGlzLnN0YXRlUGVyc2lzdGVuY2UuY29tcHV0ZU1vZGUodGhpcy5zdGF0ZWhhbmRsZXIpO1xuICAgICAgICByZXR1cm4gbW9kZSAmJiBtb2RlLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVTdGF0ZVBhcmFtcyh3aWRnZXRTdGF0ZSwgb3B0aW9ucykge1xuICAgICAgICBpZiAoXy5nZXQod2lkZ2V0U3RhdGUsICdzZWxlY3RlZEl0ZW0nKSkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtc0V4aXN0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLm9wdGlvbnMgPSBvcHRpb25zLm9wdGlvbnMgfHwge307XG4gICAgICAgIGlmIChfLmdldCh3aWRnZXRTdGF0ZSwgJ3BhZ2luYXRpb24nKSkge1xuICAgICAgICAgICAgb3B0aW9ucy5vcHRpb25zLnBhZ2UgPSB3aWRnZXRTdGF0ZS5wYWdpbmF0aW9uO1xuICAgICAgICAgICAgaWYgKF8uZ2V0KHdpZGdldFN0YXRlLCAnc29ydCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zb3J0U3RhdGVIYW5kbGVyKHdpZGdldFN0YXRlKTtcbiAgICAgICAgICAgICAgICBvcHRpb25zLm9wdGlvbnMub3JkZXJCeSA9IF8uZ2V0KHdpZGdldFN0YXRlLCAnc29ydC5maWVsZCcpICsgJyAnICsgXy5nZXQod2lkZ2V0U3RhdGUsICdzb3J0LmRpcmVjdGlvbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKF8uZ2V0KHdpZGdldFN0YXRlLCAnc2VhcmNoJykpIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU3RhdGVIYW5kbGVyKHdpZGdldFN0YXRlKTtcbiAgICAgICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMub3B0aW9ucy5maWx0ZXJGaWVsZHMgPSB0aGlzLmdldEZpbHRlckZpZWxkcyh3aWRnZXRTdGF0ZS5zZWFyY2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3B0aW9ucy5vcHRpb25zLnBhZ2UgPSAxO1xuICAgICAgICAgICAgaWYgKF8uZ2V0KHdpZGdldFN0YXRlLCAnc2VhcmNoJykpIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU3RhdGVIYW5kbGVyKHdpZGdldFN0YXRlKTtcbiAgICAgICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMub3B0aW9ucy5maWx0ZXJGaWVsZHMgPSB0aGlzLmdldEZpbHRlckZpZWxkcyh3aWRnZXRTdGF0ZS5zZWFyY2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKF8uZ2V0KHdpZGdldFN0YXRlLCAnc29ydCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zb3J0U3RhdGVIYW5kbGVyKHdpZGdldFN0YXRlKTtcbiAgICAgICAgICAgICAgICBvcHRpb25zLm9wdGlvbnMub3JkZXJCeSA9IF8uZ2V0KHdpZGdldFN0YXRlLCAnc29ydC5maWVsZCcpICsgJyAnICsgXy5nZXQod2lkZ2V0U3RhdGUsICdzb3J0LmRpcmVjdGlvbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJpZ2dlcldNRXZlbnQobmV3VmFsKSB7XG4gICAgICAgIGlmICh0aGlzLmVkaXRtb2RlID09PSAnZGlhbG9nJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgICRpbnZva2VXYXRjaGVycyh0cnVlKTtcbiAgICAgICAgdGhpcy5hcHAubm90aWZ5KCd3bS1ldmVudCcsIHtldmVudE5hbWU6ICdzZWxlY3RlZEl0ZW1DaGFuZ2UnLCB3aWRnZXROYW1lOiB0aGlzLm5hbWUsIHJvdzogbmV3VmFsLCB0YWJsZTogdGhpc30pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc29ydFN0YXRlSGFuZGxlcih3aWRnZXRTdGF0ZSkge1xuICAgICAgICBjb25zdCAkZ3JpZEVsZW1lbnQgPSB0aGlzLmRhdGFncmlkRWxlbWVudDtcbiAgICAgICAgY29uc3QgJHNvcnRJY29uID0gICRncmlkRWxlbWVudC5maW5kKCd0aFtkYXRhLWNvbC1maWVsZD1cIicgKyBfLmdldCh3aWRnZXRTdGF0ZSwgJ3NvcnQuZmllbGQnKSArICdcIl0gLnNvcnQtaWNvbicpO1xuICAgICAgICBpZiAoXy5nZXQod2lkZ2V0U3RhdGUsICdzb3J0LmRpcmVjdGlvbicpID09PSAnYXNjJyAmJiAkc29ydEljb24ubGVuZ3RoKSAge1xuICAgICAgICAgICAgJHNvcnRJY29uLmFkZENsYXNzKCdhc2Mgd2kgd2ktbG9uZy1hcnJvdy11cCcpO1xuICAgICAgICB9IGVsc2UgaWYgKF8uZ2V0KHdpZGdldFN0YXRlLCAnc29ydC5kaXJlY3Rpb24nKSA9PT0gJ2Rlc2MnICAmJiAkc29ydEljb24ubGVuZ3RoKSB7XG4gICAgICAgICAgICAkc29ydEljb24uYWRkQ2xhc3MoJ2Rlc2Mgd2kgd2ktbG9uZy1hcnJvdy1kb3duJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNlYXJjaFN0YXRlSGFuZGxlcih3aWRnZXRTdGF0ZSkge1xuICAgICAgICBpZiAoXy5pc0FycmF5KHdpZGdldFN0YXRlLnNlYXJjaCkpIHtcbiAgICAgICAgICAgIF8uZm9yRWFjaCggd2lkZ2V0U3RhdGUuc2VhcmNoLCAoZmlsdGVyT2JqKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucm93RmlsdGVyW2ZpbHRlck9iai5maWVsZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dGaWx0ZXJbZmlsdGVyT2JqLmZpZWxkXS52YWx1ZSA9IGZpbHRlck9iai52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dGaWx0ZXJbZmlsdGVyT2JqLmZpZWxkXS5tYXRjaE1vZGUgPSBmaWx0ZXJPYmoubWF0Y2hNb2RlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0ZpbHRlcltmaWx0ZXJPYmouZmllbGRdLnR5cGUgPSBmaWx0ZXJPYmoudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCQodGhpcy5yb3dGaWx0ZXJDb21wbGllZFRsW2ZpbHRlck9iai5maWVsZF0pLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsID0gZmlsdGVyT2JqLnR5cGUgPT09ICdpbnRlZ2VyJyA/IHBhcnNlSW50KGZpbHRlck9iai52YWx1ZSkgOiBmaWx0ZXJPYmoudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMucm93RmlsdGVyQ29tcGxpZWRUbFtmaWx0ZXJPYmouZmllbGRdKS5maW5kKCdpbnB1dCcpLnZhbChmaWx0ZXJPYmoudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCAkZ3JpZEVsZW1lbnQgPSB0aGlzLmRhdGFncmlkRWxlbWVudDtcbiAgICAgICAgICAgICRncmlkRWxlbWVudC5maW5kKCdbZGF0YS1lbGVtZW50PVwiZGdTZWFyY2hUZXh0XCJdJykudmFsKHdpZGdldFN0YXRlLnNlYXJjaC52YWx1ZSk7XG4gICAgICAgICAgICAkZ3JpZEVsZW1lbnQuZmluZCgnW2RhdGEtZWxlbWVudD1cImRnRmlsdGVyVmFsdWVcIl0nKS52YWwod2lkZ2V0U3RhdGUuc2VhcmNoLmZpZWxkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZXMgZW1wdHkgdmFsdWVzIGluIGhlYWRlckNvbmZpZyBhcnJheS5cbiAgICBmaWx0ZXJFbXB0eVZhbHVlcyhpdGVtKSB7XG4gICAgICAgIGlmIChpdGVtLmNvbHVtbnMpIHtcbiAgICAgICAgICAgIGl0ZW0uY29sdW1ucyA9IGl0ZW0uY29sdW1ucy5maWx0ZXIodGhpcy5maWx0ZXJFbXB0eVZhbHVlcy5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbSAhPT0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBDb21wYXJlcyB0aGUgcHJldkZpbHRlckNyaXRlcmlhIFJ1bGVzIHdpdGggdGhlIG5ldyBydWxlc1xuICAgIGNvbXBhcmVGaWx0ZXJFeHByZXNzaW9ucyhwcmV2RmlsdGVycywgbmV3RmlsdGVycykge1xuICAgICAgICByZXR1cm4gISEoKHByZXZGaWx0ZXJzLmxlbmd0aCA9PT0gbmV3RmlsdGVycy5sZW5ndGgpICYmIChfLmlzRXF1YWwocHJldkZpbHRlcnMsIG5ld0ZpbHRlcnMpKSk7XG4gICAgfVxuXG4gICAgLy8gU2V0IHRoZSB0YWJsZSBsYXN0QWN0aW9uUGVyZm9ybWVkIHRvIEZpbHRlciBDcml0ZXJpYSBhbmQgbWFpbnRhaW4gdGhlIHByZXZGaWx0ZXJFeHByZXNzaW9uXG4gICAgc2V0TGFzdEFjdGlvblRvRmlsdGVyQ3JpdGVyaWEoKSB7XG4gICAgICAgIHRoaXMucHJldkZpbHRlckV4cHJlc3Npb24gPSBfLmdldCh0aGlzLmRhdGFzb3VyY2UsICdmaWx0ZXJFeHByZXNzaW9ucy5ydWxlcycpID8gZ2V0Q2xvbmVkT2JqZWN0KHRoaXMuZGF0YXNvdXJjZS5maWx0ZXJFeHByZXNzaW9ucy5ydWxlcykgOiBnZXRDbG9uZWRPYmplY3QoW10uY29uY2F0KHRoaXMuZGF0YXNvdXJjZS5kYXRhQmluZGluZykpO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldExhc3RBY3Rpb25QZXJmb3JtZWQodGhpcy5ncmlkT3B0aW9ucy5BQ1RJT05TLkZJTFRFUl9DUklURVJJQSk7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0SXNTZWFyY2hUcmlnZXJyZWQodHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gU2V0IHRoZSB0YWJsZSBsYXN0QWN0aW9uUGVyZm9ybWVkIHRvIERhdGFzZXQgdXBkYXRlIGFuZCBzZXQgaXNEYXRhc2V0VXBkYXRlZCB0byB0cnVlXG4gICAgLy8gRml4IGZvciBbV01TLTIyMzIzXS10aGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBkYXRhc2V0IGlzIGJlaW5nIHVwZGF0ZWRcbiAgICBzZXRMYXN0QWN0aW9uVG9EYXRhc2V0VXBkYXRlKCkge1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldExhc3RBY3Rpb25QZXJmb3JtZWQodGhpcy5ncmlkT3B0aW9ucy5BQ1RJT05TLkRBVEFTRVRfVVBEQVRFKTtcbiAgICAgICAgLy8gIEZpeCBmb3IgW1dNUy0yMzI2M106IHJlc2V0IGN1cnJlbnRQYWdlIHRvIDEgYXMgZGF0YXNldCBpcyBiZWluZyBjaGFuZ2VkXG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0Q3VycmVudFBhZ2UoMSk7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0SXNEYXRhc2V0VXBkYXRlZCh0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdGhlIGxhc3RBY3Rpb25QZXJmb3JtZWQgdG8gRmlsdGVyX0NyaXRlcmlhLCB3aGVuIHRoZXJlIGlzIGNoYW5nZSBpbiB0aGUgVmFyaWFibGUgZmlsdGVyIGNyaXRlcmlhIHJ1bGVzXG4gICAgY2hlY2tJZlZhckZpbHRlcnNBcHBsaWVkKCkge1xuICAgICAgICBpZiAoIV8uaXNFbXB0eShfLmdldCh0aGlzLmRhdGFzb3VyY2UsICdmaWx0ZXJFeHByZXNzaW9ucy5ydWxlcycpKSB8fCAhXy5pc0VtcHR5KF8uZ2V0KHRoaXMuZGF0YXNvdXJjZSwgJ2RhdGFCaW5kaW5nJykpKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RmlsdGVyRXhwciA9IF8uZ2V0KHRoaXMuZGF0YXNvdXJjZSwgJ2ZpbHRlckV4cHJlc3Npb25zLnJ1bGVzJykgPyB0aGlzLmRhdGFzb3VyY2UuZmlsdGVyRXhwcmVzc2lvbnMucnVsZXMgOiBbXS5jb25jYXQodGhpcy5kYXRhc291cmNlLmRhdGFCaW5kaW5nKTtcbiAgICAgICAgICAgIGNvbnN0IGlzRXF1YWwgPSB0aGlzLmNvbXBhcmVGaWx0ZXJFeHByZXNzaW9ucyh0aGlzLnByZXZGaWx0ZXJFeHByZXNzaW9uLCBjdXJyZW50RmlsdGVyRXhwcik7XG4gICAgICAgICAgICBpZiAoIWlzRXF1YWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldExhc3RBY3Rpb25Ub0ZpbHRlckNyaXRlcmlhKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB3YXRjaFZhcmlhYmxlRGF0YVNldChuZXdWYWwpIHtcbiAgICAgICAgbGV0IHJlc3VsdDtcbiAgICAgICAgLy8gQ2hlY2sgZm9yIFZhcmlhYmxlIGZpbHRlcnMgaWYgYXBwbGllZFxuICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9ucy5pc05hdlR5cGVTY3JvbGxPck9uZGVtYW5kKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tJZlZhckZpbHRlcnNBcHBsaWVkKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU3RhdGUgaGFuZGxpbmcgZm9yIHN0YXRpYyB2YXJpYWJsZXNcbiAgICAgICAgaWYgKF8uZ2V0KHRoaXMuZGF0YXNvdXJjZSwgJ2NhdGVnb3J5JykgPT09ICd3bS5WYXJpYWJsZScgJiYgdGhpcy5fcGFnZUxvYWQgJiYgdGhpcy5nZXRDb25maWd1cmVkU3RhdGUoKSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICBjb25zdCB3aWRnZXRTdGF0ZSA9IHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5nZXRXaWRnZXRTdGF0ZSh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuX3BhZ2VMb2FkID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoXy5nZXQod2lkZ2V0U3RhdGUsICdzZWxlY3RlZEl0ZW0nKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkSXRlbXNFeGlzdCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ3NlbGVjdEZpcnN0Um93JywgdGhpcy5ncmlkZmlyc3Ryb3dzZWxlY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKF8uZ2V0KHdpZGdldFN0YXRlLCAnc2VhcmNoJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFN0YXRlSGFuZGxlcih3aWRnZXRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTb3J0SGFuZGxlcih3aWRnZXRTdGF0ZS5zZWFyY2gsIHVuZGVmaW5lZCwgJ3NlYXJjaCcsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKF8uZ2V0KHdpZGdldFN0YXRlLCAnc29ydCcpKSB7XG4gICAgICAgICAgICAgICB0aGlzLnNlYXJjaFNvcnRIYW5kbGVyKHdpZGdldFN0YXRlLnNvcnQsIHVuZGVmaW5lZCwgJ3NvcnQnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNvcnRTdGF0ZUhhbmRsZXIod2lkZ2V0U3RhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKF8uZ2V0KHdpZGdldFN0YXRlLCAncGFnaW5hdGlvbicpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLnBhZ2VDaGFuZ2VkKHtwYWdlOiB3aWRnZXRTdGF0ZS5wYWdpbmF0aW9ufSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWZ0ZXIgdGhlIHNldHRpbmcgdGhlIHdhdGNoIG9uIG5hdmlnYXRvciwgZGF0YXNldCBpcyB0cmlnZ2VyZWQgd2l0aCB1bmRlZmluZWQuIEluIHRoaXMgY2FzZSwgcmV0dXJuIGhlcmUuXG4gICAgICAgIGlmICh0aGlzLmRhdGFOYXZpZ2F0b3JXYXRjaGVkICYmIF8uaXNVbmRlZmluZWQobmV3VmFsKSAmJiB0aGlzLl9fZnVsbERhdGEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiB2YXJpYWJsZSBpcyBpbiBsb2FkaW5nIHN0YXRlLCBzaG93IGxvYWRpbmcgaWNvblxuICAgICAgICBpZiAodGhpcy52YXJpYWJsZUluZmxpZ2h0ICYmICF0aGlzLmluZlNjcm9sbCkge1xuICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdsb2FkaW5nJywgdGhpcy5sb2FkaW5nZGF0YW1zZyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHQgPSBnZXRWYWxpZEpTT04obmV3VmFsKTtcblxuICAgICAgICAvLyBDb252ZXJ0aW5nIG5ld3ZhbCB0byBvYmplY3QgaWYgaXQgaXMgYW4gT2JqZWN0IHRoYXQgY29tZXMgYXMgYSBzdHJpbmcgXCJ7XCJkYXRhXCIgOiAxfVwiXG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIG5ld1ZhbCA9IHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNvcnRFeHAgPSB0aGlzLmdldFNvcnRFeHByKCk7XG4gICAgICAgIGNvbnN0IHNvcnRFeHBBcnIgPSBzb3J0RXhwLnNwbGl0KCcgJyk7XG4gICAgICAgIGlmIChzb3J0RXhwICYmIHNvcnRFeHBBcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnNvcnRJbmZvID0ge1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA6IHNvcnRFeHBBcnJbMV0sXG4gICAgICAgICAgICAgICAgZmllbGQ6ICBzb3J0RXhwQXJyWzBdXG5cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvKlJldHVybiBpZiBkYXRhIGlzIGludmFsaWQuKi9cbiAgICAgICAgaWYgKCF0aGlzLmlzRGF0YVZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHZhbHVlIGlzIGVtcHR5IG9yIGluIHN0dWRpbyBtb2RlLCBkb250IGVuYWJsZSB0aGUgbmF2aWdhdGlvblxuICAgICAgICBpZiAobmV3VmFsKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zaG93bmF2aWdhdGlvbiAmJiAhdGhpcy5kYXRhTmF2aWdhdG9yV2F0Y2hlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlUGFnZU5hdmlnYXRpb24oKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0UGFnZU5hdmlnYXRpb24oKTtcbiAgICAgICAgICAgIC8qZm9yIHJ1biBtb2RlLCBkaXNhYmxpbmcgdGhlIGxvYWRlciBhbmQgc2hvd2luZyBubyBkYXRhIGZvdW5kIG1lc3NhZ2UgaWYgZGF0YXNldCBpcyBub3QgdmFsaWQqL1xuICAgICAgICAgICAgaWYgKCF0aGlzLnZhcmlhYmxlSW5mbGlnaHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ25vZGF0YScsIHRoaXMubm9kYXRhbWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdzZWxlY3RGaXJzdFJvdycsIHRoaXMuZ3JpZGZpcnN0cm93c2VsZWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5pc05hdmlnYXRpb25FbmFibGVkKCkgJiYgbmV3VmFsKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrRmlsdGVyc0FwcGxpZWQodGhpcy5nZXRTb3J0RXhwcigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghXy5pc09iamVjdChuZXdWYWwpIHx8IG5ld1ZhbCA9PT0gJycgfHwgKG5ld1ZhbCAmJiBuZXdWYWwuZGF0YVZhbHVlID09PSAnJykpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy52YXJpYWJsZUluZmxpZ2h0KSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdmFyaWFibGUgaGFzIGZpbmlzaGVkIGxvYWRpbmcgYW5kIHJlc3VsdFNldCBpcyBlbXB0eSwgZW5kZXIgZW1wdHkgZGF0YVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0R3JpZERhdGEoW10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZXdWYWwpIHtcbiAgICAgICAgICAgIHRoaXMucG9wdWxhdGVHcmlkRGF0YShuZXdWYWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5kb2N1bWVudENsaWNrQmluZCk7XG4gICAgICAgIGlmICh0aGlzLm5hdmlnYXRvclJlc3VsdFdhdGNoKSB7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRvclJlc3VsdFdhdGNoLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubmF2aWdhdG9yTWF4UmVzdWx0V2F0Y2gpIHtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yTWF4UmVzdWx0V2F0Y2gudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cblxuICAgIGFkZFJvd0luZGV4KHJvdykge1xuICAgICAgICBjb25zdCByb3dEYXRhID0gZ2V0Q2xvbmVkT2JqZWN0KHJvdyk7XG4gICAgICAgIGNvbnN0IHJvd0luZGV4ID0gXy5pbmRleE9mKHRoaXMuZ3JpZE9wdGlvbnMuZGF0YSwgcm93KTtcbiAgICAgICAgaWYgKHJvd0luZGV4IDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvdztcbiAgICAgICAgfVxuICAgICAgICByb3dEYXRhLiRpbmRleCA9IHJvd0luZGV4ICsgMTtcbiAgICAgICAgcm93RGF0YS4kaXNGaXJzdCA9IHJvd0RhdGEuJGluZGV4ID09PSAxO1xuICAgICAgICByb3dEYXRhLiRpc0xhc3QgPSB0aGlzLmdyaWREYXRhLmxlbmd0aCA9PT0gcm93RGF0YS4kaW5kZXg7XG4gICAgICAgIHJldHVybiByb3dEYXRhO1xuICAgIH1cblxuICAgIGFkZEV2ZW50c1RvQ29udGV4dChjb250ZXh0KSB7XG4gICAgICAgIGNvbnRleHQuYWRkTmV3Um93ID0gKCkgPT4gdGhpcy5hZGROZXdSb3coKTtcbiAgICAgICAgY29udGV4dC5kZWxldGVSb3cgPSAoKSA9PiB0aGlzLmRlbGV0ZVJvdygpO1xuICAgICAgICBjb250ZXh0LmVkaXRSb3cgPSAoKSA9PiB0aGlzLmVkaXRSb3coKTtcbiAgICB9XG5cbiAgICBleGVjdXRlKG9wZXJhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICBpZiAoW0RhdGFTb3VyY2UuT3BlcmF0aW9uLklTX0FQSV9BV0FSRSwgRGF0YVNvdXJjZS5PcGVyYXRpb24uSVNfUEFHRUFCTEUsIERhdGFTb3VyY2UuT3BlcmF0aW9uLlNVUFBPUlRTX1NFUlZFUl9GSUxURVJdLmluY2x1ZGVzKG9wZXJhdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhc291cmNlID8gdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUob3BlcmF0aW9uLCBvcHRpb25zKSA6IHt9O1xuICAgIH1cblxuICAgIGlzTmF2aWdhdGlvbkVuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3duYXZpZ2F0aW9uICYmIHRoaXMuZGF0YU5hdmlnYXRvciAmJiB0aGlzLmRhdGFOYXZpZ2F0b3JXYXRjaGVkO1xuICAgIH1cblxuICAgIGdldENsb25lZFJvd09iamVjdChyb3dEYXRhKSB7XG4gICAgICAgIGNvbnN0IHJvdyA9IGdldENsb25lZE9iamVjdChyb3dEYXRhKTtcbiAgICAgICAgcm93LmdldFByb3BlcnR5ID0gZmllbGQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIF8uZ2V0KHJvdywgZmllbGQpO1xuICAgICAgICB9O1xuICAgICAgICByb3cuJGlzRmlyc3QgPSByb3cuJGluZGV4ID09PSAxO1xuICAgICAgICByb3cuJGlzTGFzdCA9IHRoaXMuZ3JpZERhdGEubGVuZ3RoID09PSByb3cuJGluZGV4O1xuICAgICAgICBkZWxldGUgcm93LiQkaW5kZXg7XG4gICAgICAgIGRlbGV0ZSByb3cuJCRwaztcbiAgICAgICAgcmV0dXJuIHJvdztcbiAgICB9XG5cbiAgICBoYW5kbGVMb2FkaW5nKGRhdGEpIHtcbiAgICAgICAgdGhpcy52YXJpYWJsZUluZmxpZ2h0ID0gZGF0YS5hY3RpdmU7XG4gICAgICAgIC8vIGJhc2VkIG9uIHRoZSBhY3RpdmUgc3RhdGUgYW5kIHJlc3BvbnNlIHRvZ2dsaW5nIHRoZSAnbG9hZGluZyBkYXRhLi4uJyBhbmQgJ25vIGRhdGEgZm91bmQnIG1lc3NhZ2VzLlxuICAgICAgICBpZiAoZGF0YS5hY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbG9hZGluZycsIHRoaXMubG9hZGluZ2RhdGFtc2cpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgZ3JpZCBpcyBpbiBlZGl0IG1vZGUgb3IgZ3JpZCBoYXMgZGF0YSwgZG9udCBzaG93IHRoZSBubyBkYXRhIG1lc3NhZ2VcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0dyaWRFZGl0TW9kZSAmJiBfLmlzRW1wdHkodGhpcy5kYXRhc2V0KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbm9kYXRhJywgdGhpcy5ub2RhdGFtZXNzYWdlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdyZWFkeScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0RGlzYWJsZWRPbkZpZWxkKG9wZXJhdGlvbiwgY29sRGVmLCB3aWRnZXRUeXBlKSB7XG4gICAgICAgIGlmIChvcGVyYXRpb24gIT09ICduZXcnICYmIGNvbERlZlsncHJpbWFyeS1rZXknXSAmJiBjb2xEZWYuZ2VuZXJhdG9yID09PSAnYXNzaWduZWQnICYmICFjb2xEZWZbJ3JlbGF0ZWQtZW50aXR5LW5hbWUnXSAmJiAhY29sRGVmLnBlcmlvZCkge1xuICAgICAgICAgICAgY29sRGVmW3dpZGdldFR5cGVdLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlc2V0Rm9ybUNvbnRyb2woY3RybCkge1xuICAgICAgICBjdHJsLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgICAgICBjdHJsLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgfVxuXG4gICAgY2xlYXJGb3JtKG5ld1Jvdz8pIHtcbiAgICAgICAgY29uc3QgY3RybHMgPSB0aGlzLm5nZm9ybS5jb250cm9scztcbiAgICAgICAgXy5rZXlzKHRoaXMubmdmb3JtLmNvbnRyb2xzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAvLyBJZiBuZXcgcm93LCBjbGVhciB0aGUgY29udHJvbHMgaW4gdGhlIG5ldyByb3cuIEVsc2UsIGNsZWFyIHRoZSBjb250cm9scyBpbiBlZGl0IHJvd1xuICAgICAgICAgICAgaWYgKCFrZXkuZW5kc1dpdGgoJ19maWx0ZXInKSAmJiAoKGtleS5lbmRzV2l0aCgnX25ldycpICYmIG5ld1JvdykgfHwgKCFrZXkuZW5kc1dpdGgoJ19uZXcnKSAmJiAhbmV3Um93KSkpIHtcbiAgICAgICAgICAgICAgICBjdHJsc1trZXldLnNldFZhbHVlKCcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0Rm9ybUNvbnRyb2woY3RybHNba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNob3dGaWVsZEJhc2VkT25TY3JlZW5UeXBlKGZpZWxkKSB7XG4gICAgICAgIGxldCBzaG93RmllbGQ7XG4gICAgICAgIGlmIChpc01vYmlsZSgpICYmIHRoaXMudmlld3BvcnQuaXNNb2JpbGVUeXBlKSB7XG4gICAgICAgICAgICBzaG93RmllbGQgPSBmaWVsZC5tb2JpbGVEaXNwbGF5O1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlld3BvcnQuaXNUYWJsZXRUeXBlKSB7XG4gICAgICAgICAgICBzaG93RmllbGQgPSBmaWVsZC50YWJsZXREaXNwbGF5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2hvd0ZpZWxkID0gZmllbGQucGNEaXNwbGF5O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzaG93RmllbGQ7XG4gICAgfVxuXG4gICAgLyogQ2hlY2sgd2hldGhlciBpdCBpcyBub24tZW1wdHkgcm93LiAqL1xuICAgIGlzRW1wdHlSZWNvcmQocmVjb3JkKSB7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhyZWNvcmQpO1xuICAgICAgICBsZXQgZGF0YSxcbiAgICAgICAgICAgIGlzRGlzcGxheWVkO1xuXG4gICAgICAgIHJldHVybiBwcm9wZXJ0aWVzLmV2ZXJ5KChwcm9wLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgZGF0YSA9IHJlY29yZFtwcm9wXTtcbiAgICAgICAgICAgIC8qIElmIGZpZWxkRGVmcyBhcmUgbWlzc2luZywgc2hvdyBhbGwgY29sdW1ucyBpbiBkYXRhLiAqL1xuICAgICAgICAgICAgaXNEaXNwbGF5ZWQgPSAodGhpcy5maWVsZERlZnMubGVuZ3RoICYmIGlzRGVmaW5lZCh0aGlzLmZpZWxkRGVmc1tpbmRleF0pICYmIHRoaXMuc2hvd0ZpZWxkQmFzZWRPblNjcmVlblR5cGUodGhpcy5maWVsZERlZnNbaW5kZXhdKSkgfHwgdHJ1ZTtcbiAgICAgICAgICAgIC8qVmFsaWRhdGluZyBvbmx5IHRoZSBkaXNwbGF5ZWQgZmllbGRzKi9cbiAgICAgICAgICAgIGlmIChpc0Rpc3BsYXllZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoZGF0YSA9PT0gbnVsbCB8fCBkYXRhID09PSB1bmRlZmluZWQgfHwgZGF0YSA9PT0gJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qIEZ1bmN0aW9uIHRvIHJlbW92ZSB0aGUgZW1wdHkgZGF0YS4gKi9cbiAgICByZW1vdmVFbXB0eVJlY29yZHMoc2VydmljZURhdGEpIHtcbiAgICAgICAgY29uc3QgYWxsUmVjb3JkcyA9IHNlcnZpY2VEYXRhO1xuICAgICAgICBsZXQgZmlsdGVyZWREYXRhID0gW107XG4gICAgICAgIGlmIChhbGxSZWNvcmRzICYmIGFsbFJlY29yZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAvKkNvbXBhcmluZyBhbmQgcHVzaGluZyB0aGUgbm9uLWVtcHR5IGRhdGEgY29sdW1ucyovXG4gICAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBhbGxSZWNvcmRzLmZpbHRlcihyZWNvcmQgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWNvcmQgJiYgIXRoaXMuaXNFbXB0eVJlY29yZChyZWNvcmQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkRGF0YTtcbiAgICB9XG5cbiAgICBzZXRHcmlkRGF0YShzZXJ2ZXJEYXRhKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmZpbHRlcm51bGxyZWNvcmRzID8gIHRoaXMucmVtb3ZlRW1wdHlSZWNvcmRzKHNlcnZlckRhdGEpIDogc2VydmVyRGF0YTtcbiAgICAgICAgLy8gZml4IGZvciBbV01TLTI0MDEyXSBzZXQgdmFyaWFibGVpbmZsaWdodCBmbGFnIHRvIGZhbHNlIGZvciBzdGF0aWMgdmFyaWFibGVzXG4gICAgICAgIGlmIChfLmdldCh0aGlzLmRhdGFzb3VyY2UsICdjYXRlZ29yeScpID09PSAnd20uVmFyaWFibGUnKSB7XG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlSW5mbGlnaHQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMudmFyaWFibGVJbmZsaWdodCkge1xuICAgICAgICAgICAgaWYgKGRhdGEgJiYgKGRhdGEubGVuZ3RoKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbm9kYXRhJywgdGhpcy5ub2RhdGFtZXNzYWdlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdyZWFkeScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JpZERhdGEgPSBkYXRhO1xuICAgIH1cblxuICAgIHNldERhdGFHcmlkT3B0aW9uKG9wdGlvbk5hbWUsIG5ld1ZhbCwgZm9yY2VTZXQgPSBmYWxzZSkge1xuICAgICAgICBpZiAoIXRoaXMuZGF0YWdyaWRFbGVtZW50IHx8ICF0aGlzLmRhdGFncmlkRWxlbWVudC5kYXRhdGFibGUgfHwgIXRoaXMuZGF0YWdyaWRFbGVtZW50LmRhdGF0YWJsZSgnaW5zdGFuY2UnKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHt9O1xuICAgICAgICBpZiAoaXNEZWZpbmVkICYmICghXy5pc0VxdWFsKG5ld1ZhbCwgdGhpcy5ncmlkT3B0aW9uc1tvcHRpb25OYW1lXSkgfHwgZm9yY2VTZXQpKSB7XG4gICAgICAgICAgICBvcHRpb25bb3B0aW9uTmFtZV0gPSBuZXdWYWw7XG4gICAgICAgICAgICB0aGlzLmRhdGFncmlkRWxlbWVudC5kYXRhdGFibGUoJ29wdGlvbicsIG9wdGlvbik7XG4gICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zW29wdGlvbk5hbWVdID0gbmV3VmFsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2FsbERhdGFHcmlkTWV0aG9kKC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRhdGFncmlkRWxlbWVudCB8fCAhdGhpcy5kYXRhZ3JpZEVsZW1lbnQuZGF0YXRhYmxlKCdpbnN0YW5jZScpKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5UHJvcHMuc2V0KGFyZ3NbMV0sIGFyZ3MpO1xuICAgICAgICAgICAgcmV0dXJuOyAvLyBJZiBkYXRhZ3JpZCBpcyBub3QgaW5pdGlsaWF6ZWQgb3IgZGVzdHJveWVkLCByZXR1cm4gaGVyZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFncmlkRWxlbWVudC5kYXRhdGFibGUuYXBwbHkodGhpcy5kYXRhZ3JpZEVsZW1lbnQsIGFyZ3MpO1xuICAgIH1cblxuICAgIHJlbmRlck9wZXJhdGlvbkNvbHVtbnMoKSB7XG4gICAgICAgIGxldCByb3dBY3Rpb25Db2wsXG4gICAgICAgICAgICBpbnNlcnRQb3NpdGlvbjtcblxuICAgICAgICBjb25zdCByb3dPcGVyYXRpb25zQ29sdW1uID0gZ2V0Um93T3BlcmF0aW9uc0NvbHVtbigpLFxuICAgICAgICAgICAgY29uZmlnID0ge1xuICAgICAgICAgICAgICAgICduYW1lJzogcm93T3BlcmF0aW9uc0NvbHVtbi5maWVsZCxcbiAgICAgICAgICAgICAgICAnZmllbGQnOiByb3dPcGVyYXRpb25zQ29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgICAgICdpc1ByZWRlZmluZWQnOiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAvLyBSZXR1cm4gaWYgbm8gZmllbGREZWZzIGFyZSBwcmVzZW50XG4gICAgICAgIGlmICghdGhpcy5maWVsZERlZnMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByb3dBY3Rpb25Db2wgPSBfLmZpbmQodGhpcy5mdWxsRmllbGREZWZzLCB7J2ZpZWxkJzogUk9XX09QU19GSUVMRCwgdHlwZTogJ2N1c3RvbSd9KTsgLy8gQ2hlY2sgaWYgY29sdW1uIGlzIGZldGNoZWQgZnJvbSBtYXJrdXBcbiAgICAgICAgXy5yZW1vdmUodGhpcy5maWVsZERlZnMsIHt0eXBlOiAnY3VzdG9tJywgZmllbGQ6IFJPV19PUFNfRklFTER9KTsgLy8gUmVtb3Zpbmcgb3BlcmF0aW9ucyBjb2x1bW5cbiAgICAgICAgXy5yZW1vdmUodGhpcy5oZWFkZXJDb25maWcsIHtmaWVsZDogcm93T3BlcmF0aW9uc0NvbHVtbi5maWVsZH0pO1xuXG4gICAgICAgIC8qQWRkIHRoZSBjb2x1bW4gZm9yIHJvdyBvcGVyYXRpb25zIG9ubHkgaWYgYXQtbGVhc3Qgb25lIG9wZXJhdGlvbiBoYXMgYmVlbiBlbmFibGVkLiovXG4gICAgICAgIGlmICh0aGlzLnJvd0FjdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAocm93QWN0aW9uQ29sKSB7IC8vIElmIGNvbHVtbiBpcyBwcmVzZW50IGluIG1hcmt1cCwgcHVzaCB0aGUgY29sdW1uIG9yIHB1c2ggdGhlIGRlZmF1bHQgY29sdW1uXG4gICAgICAgICAgICAgICAgaW5zZXJ0UG9zaXRpb24gPSByb3dBY3Rpb25Db2wucm93YWN0aW9uc3Bvc2l0aW9uID8gXy50b051bWJlcihyb3dBY3Rpb25Db2wucm93YWN0aW9uc3Bvc2l0aW9uKSA6IHRoaXMuZmllbGREZWZzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB0aGlzLmZpZWxkRGVmcy5zcGxpY2UoaW5zZXJ0UG9zaXRpb24sIDAsIHJvd0FjdGlvbkNvbCk7XG4gICAgICAgICAgICAgICAgaWYgKGluc2VydFBvc2l0aW9uID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVyQ29uZmlnLnVuc2hpZnQoY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhlYWRlckNvbmZpZy5wdXNoKGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpZWxkRGVmcy5wdXNoKHJvd09wZXJhdGlvbnNDb2x1bW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVyQ29uZmlnLnB1c2goY29uZmlnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdoZWFkZXJDb25maWcnLCB0aGlzLmhlYWRlckNvbmZpZyk7XG4gICAgfVxuXG4gICAgZW5hYmxlUGFnZU5hdmlnYXRpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGFzZXQgJiYgdGhpcy5iaW5kZGF0YXNldCAmJiB0aGlzLmRhdGFOYXZpZ2F0b3IpIHtcbiAgICAgICAgICAgIC8qQ2hlY2sgZm9yIHNhbml0eSovXG4gICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3JXYXRjaGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMubmF2aWdhdG9yUmVzdWx0V2F0Y2gpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRvclJlc3VsdFdhdGNoLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKlJlZ2lzdGVyIGEgd2F0Y2ggb24gdGhlIFwicmVzdWx0XCIgcHJvcGVydHkgb2YgdGhlIFwiZGF0YU5hdmlnYXRvclwiIHNvIHRoYXQgdGhlIHBhZ2luYXRlZCBkYXRhIGlzIGRpc3BsYXllZCBpbiB0aGUgbGl2ZS1saXN0LiovXG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRvclJlc3VsdFdhdGNoID0gdGhpcy5kYXRhTmF2aWdhdG9yLnJlc3VsdEVtaXR0ZXIuc3Vic2NyaWJlKChuZXdWYWwpID0+IHtcbiAgICAgICAgICAgICAgICAvKiBDaGVjayBmb3Igc2FuaXR5LiAqL1xuICAgICAgICAgICAgICAgIGlmIChpc0RlZmluZWQobmV3VmFsKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBXYXRjaCB3aWxsIG5vdCBiZSB0cmlnZ2VyZWQgaWYgZGF0YXNldCBhbmQgbmV3IHZhbHVlIGFyZSBlcXVhbC4gU28gdHJpZ2dlciB0aGUgcHJvcGVydHkgY2hhbmdlIGhhbmRsZXIgbWFudWFsbHlcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBoYXBwZW5zIGluIGNhc2UsIGlmIGRhdGFzZXQgaXMgZGlyZWN0bHkgdXBkYXRlZC5cbiAgICAgICAgICAgICAgICAgICAgaWYgKF8uaXNFcXVhbCh0aGlzLmRhdGFzZXQsIG5ld1ZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2F0Y2hWYXJpYWJsZURhdGFTZXQobmV3VmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfLmlzQXJyYXkobmV3VmFsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0LmRhdGFzZXQgPSBbXS5jb25jYXQobmV3VmFsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXy5pc09iamVjdChuZXdWYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53aWRnZXQuZGF0YXNldCA9IF8uZXh0ZW5kKHt9LCBuZXdWYWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpZGdldC5kYXRhc2V0ID0gbmV3VmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53aWRnZXQuZGF0YXNldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB0cnVlKTtcbiAgICAgICAgICAgIC8qRGUtcmVnaXN0ZXIgdGhlIHdhdGNoIGlmIGl0IGlzIGV4aXN0cyAqL1xuICAgICAgICAgICAgaWYgKHRoaXMubmF2aWdhdG9yTWF4UmVzdWx0V2F0Y2gpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRvck1heFJlc3VsdFdhdGNoLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKlJlZ2lzdGVyIGEgd2F0Y2ggb24gdGhlIFwibWF4UmVzdWx0c1wiIHByb3BlcnR5IG9mIHRoZSBcImRhdGFOYXZpZ2F0b3JcIiBzbyB0aGF0IHRoZSBcInBhZ2VTaXplXCIgaXMgZGlzcGxheWVkIGluIHRoZSBsaXZlLWxpc3QuKi9cbiAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yTWF4UmVzdWx0V2F0Y2ggPSB0aGlzLmRhdGFOYXZpZ2F0b3IubWF4UmVzdWx0c0VtaXR0ZXIuc3Vic2NyaWJlKChuZXdWYWwpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VzaXplID0gbmV3VmFsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBJZiBkYXRhc2V0IGlzIGEgcGFnZWFibGUgb2JqZWN0LCBkYXRhIGlzIHByZXNlbnQgaW5zaWRlIHRoZSBjb250ZW50IHByb3BlcnR5XG4gICAgICAgICAgICB0aGlzLl9fZnVsbERhdGEgPSB0aGlzLmRhdGFzZXQ7XG5cbiAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci53aWRnZXQubWF4UmVzdWx0cyA9IHRoaXMucGFnZXNpemUgfHwgNTtcbiAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5vcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIG1heFJlc3VsdHM6IHRoaXMucGFnZXNpemUgfHwgNVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlUHJvcGVydHlCaW5kaW5nKCdkYXRhc2V0Jyk7XG4gICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3Iuc2V0QmluZERhdGFTZXQodGhpcy5iaW5kZGF0YXNldCwgdGhpcy52aWV3UGFyZW50LCB0aGlzLmRhdGFzb3VyY2UsIHRoaXMuZGF0YXNldCwgdGhpcy5iaW5kZGF0YXNvdXJjZSwgdW5kZWZpbmVkLCB0aGlzLnN0YXRlaGFuZGxlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXNldFBhZ2VOYXZpZ2F0aW9uKCkge1xuICAgICAgICAvKkNoZWNrIGZvciBzYW5pdHkqL1xuICAgICAgICBpZiAodGhpcy5kYXRhTmF2aWdhdG9yKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3IucmVzZXRQYWdlTmF2aWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNEYXRhVmFsaWQoKSB7XG4gICAgICAgIGxldCBlcnJvcjtcbiAgICAgICAgY29uc3QgZGF0YXNldCA9IHRoaXMuZGF0YXNldCB8fCB7fTtcblxuICAgICAgICAvKkluIGNhc2UgXCJkYXRhXCIgY29udGFpbnMgXCJlcnJvclwiICYgXCJlcnJvck1lc3NhZ2VcIiwgdGhlbiBkaXNwbGF5IHRoZSBlcnJvciBtZXNzYWdlIGluIHRoZSBncmlkLiovXG4gICAgICAgIGlmIChkYXRhc2V0LmVycm9yKSB7XG4gICAgICAgICAgICBlcnJvciA9IGRhdGFzZXQuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGFzZXQuZGF0YSAmJiBkYXRhc2V0LmRhdGEuZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChkYXRhc2V0LmRhdGEuZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBkYXRhc2V0LmRhdGEuZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5zZXRHcmlkRGF0YShbXSk7XG4gICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ2Vycm9yJywgZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEZ1bmN0aW9uIHRvIHBvcHVsYXRlIHRoZSBncmlkIHdpdGggZGF0YS5cbiAgICBwb3B1bGF0ZUdyaWREYXRhKHNlcnZpY2VEYXRhKSB7XG4gICAgICAgIGxldCBkYXRhO1xuICAgICAgICBzZXJ2aWNlRGF0YSA9IHRyYW5zZm9ybURhdGEoc2VydmljZURhdGEsIHRoaXMubmFtZSk7XG4gICAgICAgIC8vIEFwcGx5IGZpbHRlciBhbmQgc29ydCwgaWYgZGF0YSBpcyByZWZyZXNoZWQgdGhyb3VnaCBSZWZyZXNoIGRhdGEgbWV0aG9kXG4gICAgICAgIGlmICghdGhpcy5pc05hdmlnYXRpb25FbmFibGVkKCkgJiYgdGhpcy5faXNDbGllbnRTZWFyY2gpIHtcbiAgICAgICAgICAgIGRhdGEgPSBnZXRDbG9uZWRPYmplY3Qoc2VydmljZURhdGEpO1xuICAgICAgICAgICAgZGF0YSA9IHRoaXMuZ2V0U2VhcmNoUmVzdWx0KGRhdGEsIHRoaXMuZmlsdGVySW5mbyk7XG4gICAgICAgICAgICBkYXRhID0gdGhpcy5nZXRTb3J0UmVzdWx0KGRhdGEsIHRoaXMuc29ydEluZm8pO1xuICAgICAgICAgICAgdGhpcy5zZXJ2ZXJEYXRhID0gZGF0YTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VydmVyRGF0YSA9IHNlcnZpY2VEYXRhO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIGZpZWxkZGVmcyBhcmUgbm90IHByZXNlbnQsIGdlbmVyYXRlIGZpZWxkZGVmcyBmcm9tIGRhdGFcbiAgICAgICAgLy8gUmVtb3ZpbmcgZmllbGRkZWZzIGNoZWNrIGJlY2F1c2UgV2hlbiBsb2Fkb25kZW1hbmQgcHJvcGVydHkgaXMgZW5hYmxlZChkZWZlcmxvYWQ9XCJ0cnVlXCIpLCB0aGUgZGF0YXNldCBwcm9wZXJ0eWNoYW5nZWhhbmxkZXIgaXMgdHJpZ2dlcmVkIGZpcnN0IGJlZm9yZSB0aGUgZG9tIGlzIGdldHRpbmcgcmVuZGVyZWQuXG4gICAgICAgIC8vIFNvIGF0IHRoYXQgdGltZSBmaWVsZGRlZnMgbGVuZ3RoIGlzIHplcm8sIGR1ZSB0byB0aGlzIHRoZSBjb2x1bW5zIGFyZSBjcmVhdGVkIGR5bmFtaWNhbGx5LlxuICAgICAgICBpZiAodGhpcy5pc2R5bmFtaWN0YWJsZSkge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVHcmlkQ29sdW1ucyh0aGlzLnNlcnZlckRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRHcmlkRGF0YSh0aGlzLnNlcnZlckRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScgJiYgdGhpcy5fc2VsZWN0ZWRJdGVtc0V4aXN0ICYmIHNlcnZpY2VEYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3Qgd2lkZ2V0U3RhdGUgPSB0aGlzLnN0YXRlUGVyc2lzdGVuY2UuZ2V0V2lkZ2V0U3RhdGUodGhpcyk7XG4gICAgICAgICAgICBsZXQgY3VycmVudFBhZ2VJdGVtcztcbiAgICAgICAgICAgIGlmIChfLmdldCh3aWRnZXRTdGF0ZSwgJ3NlbGVjdGVkSXRlbScpKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFBhZ2VJdGVtcyA9IHdpZGdldFN0YXRlLnNlbGVjdGVkSXRlbS5maWx0ZXIodmFsID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbC5wYWdlID09PSB0aGlzLmRhdGFOYXZpZ2F0b3IuZG4uY3VycmVudFBhZ2U7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtc0V4aXN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gaWYgYW4gaXRlbSBpcyBhbHJlYWR5IHNlbGVjdGVkLCBkb24ndCB0cmlnZ2VyIG9uU2VsZWN0IGV2ZW50IGZvciBpdCBhZ2FpblxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UGFnZUl0ZW1zLmxlbmd0aCAmJiB0aGlzLnNlbGVjdGVkaXRlbS5sZW5ndGggIT09IHdpZGdldFN0YXRlLnNlbGVjdGVkSXRlbS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3QgcmVhc3NpZ24gdGhpcy5zZWxlY3RlZGl0ZW0gaWYgc2VsZWN0ZWQgaXRlbXMgYWxyZWFkeSBleGlzdC5cbiAgICAgICAgICAgICAgICAgICAgaWYgKF8uaXNBcnJheSh0aGlzLnNlbGVjdGVkaXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlSXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0SXRlbShpdGVtLmluZGV4LCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkaXRlbSA9IGN1cnJlbnRQYWdlSXRlbXMubWFwKGZ1bmN0aW9uKHZhbCkge3JldHVybiB2YWwuaW5kZXg7IH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gRnVuY3Rpb24gdG8gZ2VuZXJhdGUgYW5kIGNvbXBpbGUgdGhlIGZvcm0gZmllbGRzIGZyb20gdGhlIG1ldGFkYXRhXG4gICAgYXN5bmMgZ2VuZXJhdGVEeW5hbWljQ29sdW1ucyhjb2x1bW5zKSB7XG4gICAgICAgIHRoaXMuZmllbGREZWZzID0gW107IC8vIGVtcHR5IHRoZSBmb3JtIGZpZWxkc1xuICAgICAgICAvLyBlbXB0eSB0aGUgZmlsdGVyIGZpZWxkIHRlbXBsYXRlIHJlZnMuXG4gICAgICAgICh0aGlzLmZpbHRlclRtcGwgYXMgYW55KS5fcmVzdWx0cyA9IFtdO1xuXG4gICAgICAgIGlmIChfLmlzRW1wdHkoY29sdW1ucykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0bXBsID0gJyc7XG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgbGV0IGF0dHJzVG1wbCA9ICcnO1xuICAgICAgICAgICAgbGV0IGN1c3RvbVRtcGwgPSAnJztcbiAgICAgICAgICAgIF8uZm9yRWFjaChjb2wsICh2YWwsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghXy5pc1VuZGVmaW5lZCh2YWwpICYmIHZhbCAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgY3VzdG9tIGV4cHJlc3Npb24gaXMgcHJlc2VudCwga2VlcCBpdCBpbnNpZGUgdGFibGUgY29sdW1uLiBFbHNlLCBrZWVwIGFzIGF0dHJpYnV0ZVxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAnY3VzdG9tRXhwcmVzc2lvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbVRtcGwgPSB2YWw7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyc1RtcGwgKz0gYCAke2tleX09XCIke3ZhbH1cImA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRtcGwgKz0gYDx3bS10YWJsZS1jb2x1bW4gJHthdHRyc1RtcGx9IHRhYmxlTmFtZT1cIiR7dGhpcy5uYW1lfSR7KHRoaXMgYXMgYW55KS4kYXR0cnMuZ2V0KCd0YWJsZV9yZWZlcmVuY2UnKX1cIj4ke2N1c3RvbVRtcGx9PC93bS10YWJsZS1jb2x1bW4+YDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZHluYW1pY1RhYmxlUmVmLmNsZWFyKCk7XG4gICAgICAgIGlmICghdGhpcy5fZHluYW1pY0NvbnRleHQpIHtcbiAgICAgICAgICAgIHRoaXMuX2R5bmFtaWNDb250ZXh0ID0gT2JqZWN0LmNyZWF0ZSh0aGlzLnZpZXdQYXJlbnQpO1xuICAgICAgICAgICAgdGhpcy5fZHluYW1pY0NvbnRleHRbdGhpcy5nZXRBdHRyKCd3bVRhYmxlJyldID0gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5vT2ZDb2x1bW5zID0gY29sdW1ucy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnlSZWYgPSBhd2FpdCB0aGlzLmR5bmFtaWNDb21wb25lbnRQcm92aWRlci5nZXRDb21wb25lbnRGYWN0b3J5UmVmKFxuICAgICAgICAgICAgJ2FwcC10YWJsZS1keW5hbWljLScgKyB0aGlzLndpZGdldElkLFxuICAgICAgICAgICAgdG1wbCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBub0NhY2hlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHRyYW5zcGlsZTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuZHluYW1pY1RhYmxlUmVmLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRGYWN0b3J5UmVmLCAwLCB0aGlzLmluaik7XG4gICAgICAgIGV4dGVuZFByb3RvKGNvbXBvbmVudC5pbnN0YW5jZSwgdGhpcy5fZHluYW1pY0NvbnRleHQpO1xuICAgICAgICB0aGlzLiRlbGVtZW50LmZpbmQoJy5keW5hbWljLXRhYmxlLWNvbnRhaW5lcicpWzBdLmFwcGVuZENoaWxkKGNvbXBvbmVudC5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBwcmVwYXJlQ29sRGVmcyhkYXRhKSB7XG4gICAgICAgIGxldCBkZWZhdWx0RmllbGREZWZzO1xuICAgICAgICBsZXQgcHJvcGVydGllcztcbiAgICAgICAgbGV0IGNvbHVtbkluZGV4ID0gMDtcbiAgICAgICAgbGV0IGhlYWRlckluZGV4ID0gMDtcblxuICAgICAgICB0aGlzLmZpZWxkRGVmcyA9IFtdO1xuICAgICAgICB0aGlzLmhlYWRlckNvbmZpZyA9IFtdO1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSB7fTtcbiAgICAgICAgLyogaWYgcHJvcGVydGllcyBtYXAgaXMgZXhpc3RlZCB0aGVuIGZldGNoIHRoZSBjb2x1bW4gY29uZmlndXJhdGlvbiBmb3IgYWxsIG5lc3RlZCBsZXZlbHMgdXNpbmcgdXRpbCBmdW5jdGlvbiAqL1xuICAgICAgICBwcm9wZXJ0aWVzID0gZGF0YTtcbiAgICAgICAgLypjYWxsIHV0aWxpdHkgZnVuY3Rpb24gdG8gcHJlcGFyZSBmaWVsZERlZnMgZm9yIGdyaWQgYWdhaW5zdCBnaXZlbiBkYXRhIChBIE1BWCBPRiAxMCBDT0xVTU5TIE9OTFkpKi9cbiAgICAgICAgZGVmYXVsdEZpZWxkRGVmcyA9IHByZXBhcmVGaWVsZERlZnMocHJvcGVydGllcyk7XG5cbiAgICAgICAgLyphcHBlbmQgYWRkaXRpb25hbCBwcm9wZXJ0aWVzKi9cbiAgICAgICAgXy5mb3JFYWNoKGRlZmF1bHRGaWVsZERlZnMsIGNvbHVtbkRlZiA9PiB7XG4gICAgICAgICAgICBjb2x1bW5EZWYuYmluZGluZyA9IGNvbHVtbkRlZi5maWVsZDtcbiAgICAgICAgICAgIGNvbHVtbkRlZi5jYXB0aW9uID0gY29sdW1uRGVmLmRpc3BsYXlOYW1lO1xuICAgICAgICAgICAgY29sdW1uRGVmLnBjRGlzcGxheSA9IHRydWU7XG4gICAgICAgICAgICBjb2x1bW5EZWYubW9iaWxlRGlzcGxheSA9IHRydWU7XG4gICAgICAgICAgICBjb2x1bW5EZWYudGFibGV0RGlzcGxheSA9IHRydWU7XG4gICAgICAgICAgICBjb2x1bW5EZWYuc2VhcmNoYWJsZSA9IHRydWU7XG4gICAgICAgICAgICBjb2x1bW5EZWYuc2hvd2luZmlsdGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbHVtbkRlZi50eXBlICA9ICdzdHJpbmcnO1xuICAgICAgICAgICAgLy8gRml4IGZvciBbV01TLTE5NjY4XSBhbmQgW1dNUy0xOTY2OV0tIEFkZGluZyBpbmRleCBhbmQgaGVhZGVySW5kZXggZm9yIER5bmFtaWMgREIgY29sdW1ucy5cbiAgICAgICAgICAgIC8vIE5vdGU6IHdlIGRvbid0IGhhdmUgY29sdW1uIGdyb3VwcyBmb3IgRHluYW1pYyBEQlxuICAgICAgICAgICAgY29sdW1uRGVmLmluZGV4ID0gY29sdW1uSW5kZXg7XG4gICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5kZXggPSBoZWFkZXJJbmRleDtcbiAgICAgICAgICAgIGNvbHVtbkluZGV4Kys7XG4gICAgICAgICAgICBoZWFkZXJJbmRleCsrO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZWZhdWx0RmllbGREZWZzLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uc1tjb2wuZmllbGRdID0gY29sO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZWRhdGFyZW5kZXInLCB7JGRhdGE6IGRhdGEsICRjb2x1bW5zOiB0aGlzLmNvbHVtbnMsIGRhdGE6IGRhdGEsIGNvbHVtbnM6IHRoaXMuY29sdW1uc30pO1xuXG4gICAgICAgIGRlZmF1bHRGaWVsZERlZnMgPSBbXTtcbiAgICAgICAgLy8gQXBwbHkgdGhlIGNoYW5nZXMgbWFkZSBieSB0aGUgdXNlclxuICAgICAgICBfLmZvckVhY2godGhpcy5jb2x1bW5zLCB2YWwgPT4ge1xuICAgICAgICAgICAgZGVmYXVsdEZpZWxkRGVmcy5wdXNoKHZhbCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVEeW5hbWljQ29sdW1ucyhkZWZhdWx0RmllbGREZWZzKTtcbiAgICB9XG5cbiAgICBjcmVhdGVHcmlkQ29sdW1ucyhkYXRhKSB7XG4gICAgICAgIC8qIHRoaXMgY2FsbCBiYWNrIGZ1bmN0aW9uIHJlY2VpdmVzIHRoZSBkYXRhIGZyb20gdGhlIHZhcmlhYmxlICovXG4gICAgICAgIC8qIGNoZWNrIHdoZXRoZXIgZGF0YSBpcyB2YWxpZCBvciBub3QgKi9cbiAgICAgICAgY29uc3QgZGF0YVZhbGlkID0gZGF0YSAmJiAhZGF0YS5lcnJvcjtcbiAgICAgICAgLyppZiB0aGUgZGF0YSBpcyB0eXBlIGpzb24gb2JqZWN0LCBtYWtlIGl0IGFuIGFycmF5IG9mIHRoZSBvYmplY3QqL1xuICAgICAgICBpZiAoZGF0YVZhbGlkICYmICFfLmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgIH1cbiAgICAgICAgLyogaWYgdGhlIGRhdGEgaXMgZW1wdHksIHNob3cgbm9kYXRhbWVzc2FnZSAqL1xuICAgICAgICBpZiAoXy5pc0VtcHR5KGRhdGEpKSB7XG4gICAgICAgICAgICB0aGlzLnNldEdyaWREYXRhKGRhdGEpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkYXRhVmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvKiBpZiBuZXcgY29sdW1ucyB0byBiZSByZW5kZXJlZCwgcHJlcGFyZSBkZWZhdWx0IGZpZWxkRGVmcyBmb3IgdGhlIGRhdGEgcHJvdmlkZWQqL1xuICAgICAgICB0aGlzLnByZXBhcmVDb2xEZWZzKGRhdGEpO1xuXG4gICAgICAgIHRoaXMuc2VydmVyRGF0YSA9IGRhdGE7XG4gICAgICAgIHRoaXMuc2V0R3JpZERhdGEodGhpcy5zZXJ2ZXJEYXRhKTtcbiAgICB9XG5cbiAgICBnZXRTb3J0RXhwcigpIHtcbiAgICAgICAgbGV0IHNvcnRFeHA7XG4gICAgICAgIGxldCBwYWdpbmdPcHRpb25zO1xuICAgICAgICBpZiAodGhpcy5kYXRhc291cmNlICYmIHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLklTX1BBR0VBQkxFKSkge1xuICAgICAgICAgICAgcGFnaW5nT3B0aW9ucyA9IHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9QQUdJTkdfT1BUSU9OUyk7XG4gICAgICAgICAgICBzb3J0RXhwID0gXy5pc0VtcHR5KHBhZ2luZ09wdGlvbnMpID8gJycgOiBnZXRPcmRlckJ5RXhwcihwYWdpbmdPcHRpb25zLnNvcnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzb3J0RXhwIHx8ICcnO1xuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5OiBzdHJpbmcsIG52OiBhbnksIG92PzogYW55KSB7XG4gICAgICAgIGxldCBlbmFibGVOZXdSb3c7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdkYXRhc291cmNlJzpcbiAgICAgICAgICAgICAgICAvLyBGaXggZm9yIFtXTVMtMjM2NTNdIHdoZW4gc3RhcnRVcGRhdGUgaXMgZmFsc2UgKHJlcXVlc3Qgb24gcGFnZSBsb2FkIHByb3BlcnR5IGlzIHVuY2hlY2tlZCksXG4gICAgICAgICAgICAgICAgLy8gdGhlbiBzZXQgc3RhdHVzIG1zZyBhcyBcIk5vIGRhdGEgZm91bmRcIlxuICAgICAgICAgICAgICAgIGlmIChudi5zdGFydFVwZGF0ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YXJpYWJsZUluZmxpZ2h0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbm9kYXRhJywgdGhpcy5ub2RhdGFtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy53YXRjaFZhcmlhYmxlRGF0YVNldCh0aGlzLmRhdGFzZXQpO1xuICAgICAgICAgICAgICAgIHRoaXMub25EYXRhU291cmNlQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXRhc2V0JzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9ucy5pc05hdlR5cGVTY3JvbGxPck9uZGVtYW5kKCkgJiYgdGhpcy5ncmlkT3B0aW9ucy5nZXRDdXJyZW50UGFnZSgpID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0SXNOZXh0UGFnZURhdGEoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5iaW5kZGF0YXNvdXJjZSAmJiAhdGhpcy5kYXRhc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gaWYgdGFibGUgaXMgaW5zaWRlIGxpc3QgdGhlbiB0YWJsZSBkYXRhc2V0IHdpbGwgYmUgc2V0IGFzIFwiaXRlbS5YWFhcIiBhbmQgdGhlcmUgaXMgbm8gZGF0YXNvdXJjZS5cbiAgICAgICAgICAgICAgICAvLyBTbyBleHRyYWN0aW5nIGRhdGFzb3VyY2UgZnJvbSB0aGUgZGF0c2V0IGJvdW5kIGV4cHJlc3Npb24uXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50TGlzdCAmJiAhdGhpcy5kYXRhc291cmNlICYmIF8uc3RhcnRzV2l0aCh0aGlzLmJpbmRkYXRhc2V0LCAnaXRlbScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZSA9IGdldERhdGFzb3VyY2VGcm9tRXhwcih0aGlzLndpZGdldC4kYXR0cnMuZ2V0KCdkYXRhc2V0Ym91bmRleHByJyksIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9ucy5pc05hdlR5cGVTY3JvbGxPck9uZGVtYW5kKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZE9wdGlvbnMuaXNOZXh0UGFnZURhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gZmV0Y2hpbmcgbmV4dCBwYWdlIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0SXNEYXRhVXBkYXRlZEJ5VXNlcihmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIGRhdGFzZXQgaXMgdXBkYXRlZCBmcm9tIHNjcmlwdFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZXRJc0RhdGFVcGRhdGVkQnlVc2VyKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMYXN0QWN0aW9uVG9EYXRhc2V0VXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldElzTmV4dFBhZ2VEYXRhKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBmb3IgU3RhdGljIFZhcmlhYmxlcyB3aXRoIFJldGFpbiBTdGF0ZSBlbmFibGVkLCBwcmV2ZW50IFRhYmxlIGZyb20gcmVuZGVyaW5nIG1vcmUgdGhhbiBvbmNlXG4gICAgICAgICAgICAgICAgaWYgKCEoXy5nZXQodGhpcy5kYXRhc291cmNlLCAnY2F0ZWdvcnknKSA9PT0gJ3dtLlZhcmlhYmxlJyAmJiB0aGlzLl9wYWdlTG9hZCAmJiB0aGlzLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2F0Y2hWYXJpYWJsZURhdGFTZXQobnYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2ZpbHRlcm1vZGUnOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2ZpbHRlcm1vZGUnLCBudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWFyY2hsYWJlbCc6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignc2VhcmNoTGFiZWwnLCBudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICduYXZpZ2F0aW9uJzpcbiAgICAgICAgICAgICAgICBpZiAobnYgPT09ICdBZHZhbmNlZCcpIHsgLy8gU3VwcG9ydCBmb3Igb2xkZXIgcHJvamVjdHMgd2hlcmUgbmF2aWdhdGlvbiB0eXBlIHdhcyBhZHZhbmNlZCBpbnN0ZWFkIG9mIGNsYXNpY1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb24gPSAnQ2xhc3NpYyc7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG52ICE9PSAnTm9uZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93bmF2aWdhdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ25hdmlnYXRpb24nLCB0aGlzLm5hdmlnYXRpb24pO1xuICAgICAgICAgICAgICAgIHRoaXMub25EZW1hbmRMb2FkID0gbnYgPT09IE5BVklHQVRJT05fVFlQRS5PTkRFTUFORCA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmluZlNjcm9sbCA9IG52ID09PSBOQVZJR0FUSU9OX1RZUEUuU0NST0xMID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMubmF2Q29udHJvbHMgPSBudjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2dyaWRmaXJzdHJvd3NlbGVjdCc6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignc2VsZWN0Rmlyc3RSb3cnLCBudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdncmlkY2xhc3MnOlxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdvcHRpb24nLCAnY3NzQ2xhc3NOYW1lcy5ncmlkJywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbm9kYXRhbWVzc2FnZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ29wdGlvbicsICdkYXRhU3RhdGVzLm5vZGF0YScsIG52KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2xvYWRpbmdkYXRhbXNnJzpcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnb3B0aW9uJywgJ2RhdGFTdGF0ZXMubG9hZGluZycsIG52KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2xvYWRpbmdpY29uJzpcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnb3B0aW9uJywgJ2xvYWRpbmdpY29uJywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc3BhY2luZyc6XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ29wdGlvbicsICdzcGFjaW5nJywgbnYpO1xuICAgICAgICAgICAgICAgIGlmIChudiA9PT0gJ2NvbmRlbnNlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2l6ZSA9ICdzbWFsbCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2l6ZSA9ICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2V4cG9ydGZvcm1hdCc6XG4gICAgICAgICAgICAgICAgdGhpcy5leHBvcnRPcHRpb25zID0gW107XG4gICAgICAgICAgICAgICAgaWYgKG52KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFBvcHVsYXRlIG9wdGlvbnMgZm9yIGV4cG9ydCBkcm9wIGRvd24gbWVudVxuICAgICAgICAgICAgICAgICAgICBfLmZvckVhY2goXy5zcGxpdChudiwgJywnKSwgdHlwZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cG9ydE9wdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogZXhwb3J0SWNvbk1hcHBpbmdbdHlwZV1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzaG93bmV3cm93JzpcbiAgICAgICAgICAgICAgICAvLyBFbmFibGUgbmV3IHJvdyBpZiBzaG93bmV3IGlzIHRydWUgb3IgYWRkTmV3Um93IGJ1dG9uIGlzIHByZXNlbnRcbiAgICAgICAgICAgICAgICBlbmFibGVOZXdSb3cgPSBudiB8fCBfLnNvbWUodGhpcy5hY3Rpb25zLCBhY3QgPT4gXy5pbmNsdWRlcyhhY3QuYWN0aW9uLCAnYWRkTmV3Um93KCknKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ29wdGlvbicsICdhY3Rpb25zRW5hYmxlZC5uZXcnLCBlbmFibGVOZXdSb3cpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncGFnZXNpemUnOlxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5vcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICBtYXhSZXN1bHRzOiBudlxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLndpZGdldC5tYXhSZXN1bHRzID0gbnY7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLm1heFJlc3VsdHMgPSBudjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ29uZGVtYW5kbWVzc2FnZSc6XG4gICAgICAgICAgICAgICAgaWYgKG52KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnLm9uLWRlbWFuZC1kYXRhZ3JpZCA+IGEnKS50ZXh0KG52KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5vbmRlbWFuZG1lc3NhZ2UgPSBudjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3ZpZXdsZXNzbWVzc2FnZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy52aWV3bGVzc21lc3NhZ2UgPSBudjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3Nob3cnOlxuICAgICAgICAgICAgICAgIGlmIChudikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Nob3cnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2hpZGUnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHN1cGVyLm9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3YpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25EYXRhU291cmNlQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLmZpZWxkRGVmcy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgIHRyaWdnZXJGbihjb2wub25EYXRhU291cmNlQ2hhbmdlICYmIGNvbC5vbkRhdGFTb3VyY2VDaGFuZ2UuYmluZChjb2wpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhckFjdGlvblJvd1ZhcnMoKSB7XG4gICAgICAgIHRoaXMuYWN0aW9uUm93SW5kZXggPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuYWN0aW9uUm93UGFnZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignYWN0aW9uUm93SW5kZXgnLCB1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdhY3Rpb25Sb3dQYWdlJywgdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBvblN0eWxlQ2hhbmdlKGtleSwgbnYsIG92KSB7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICd3aWR0aCc6XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldEdyaWREaW1lbnNpb25zJywgJ3dpZHRoJywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaGVpZ2h0JzpcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0R3JpZERpbWVuc2lvbnMnLCAnaGVpZ2h0JywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgc3VwZXIub25TdHlsZUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgfVxuXG4gICAgcG9wdWxhdGVBY3Rpb25zKCkge1xuICAgICAgICB0aGlzLl9hY3Rpb25zLmhlYWRlciA9IFtdO1xuICAgICAgICB0aGlzLl9hY3Rpb25zLmZvb3RlciA9IFtdO1xuICAgICAgICBfLmZvckVhY2godGhpcy5hY3Rpb25zLCAoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAoXy5pbmNsdWRlcyhhY3Rpb24ucG9zaXRpb24sICdoZWFkZXInKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FjdGlvbnMuaGVhZGVyLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChfLmluY2x1ZGVzKGFjdGlvbi5wb3NpdGlvbiwgJ2Zvb3RlcicpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWN0aW9ucy5mb290ZXIucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIG1ldGhvZCB3aWxsIHJlbmRlciB0aGUgZmlsdGVyIHJvdy5cbiAgICByZW5kZXJEeW5hbWljRmlsdGVyQ29sdW1uKGZpbHRlVGVtUmVmKSB7XG4gICAgICAgIC8vIEZvciBkeW5hbWljIHRhYmxlIG1hbnVhbGx5IHB1c2hpbmcgdGhlIGZpbHRlcnRlbXBsYXRlUmVmIGFzIHRlbXBsYXRlUmVmIHdpbGwgbm90IGJlIGF2YWlsYWJsZSBwcmlvci5cbiAgICAgICAgaWYgKHRoaXMuaXNkeW5hbWljdGFibGUpIHtcbiAgICAgICAgICAgICh0aGlzLmZpbHRlclRtcGwgYXMgYW55KS5fcmVzdWx0cy5wdXNoKGZpbHRlVGVtUmVmKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZ2lzdGVyQ29sdW1ucyh0YWJsZUNvbHVtbiwgY29sSW5kZXgpIHtcbiAgICAgICAgaWYgKGlzTW9iaWxlKCkgJiYgdGhpcy52aWV3cG9ydC5pc01vYmlsZVR5cGUpIHtcbiAgICAgICAgICAgIGlmICghdGFibGVDb2x1bW4ubW9iaWxlRGlzcGxheSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZpZXdwb3J0LmlzVGFibGV0VHlwZSkge1xuICAgICAgICAgICAgaWYgKCF0YWJsZUNvbHVtbi50YWJsZXREaXNwbGF5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0YWJsZUNvbHVtbi5wY0Rpc3BsYXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhYmxlQ29sdW1uWydwcmltYXJ5LWtleSddKSB7XG4gICAgICAgICAgICB0aGlzLnByaW1hcnlLZXkucHVzaCh0YWJsZUNvbHVtbi5maWVsZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWVsZERlZnNbY29sSW5kZXhdID0gdGFibGVDb2x1bW47XG4gICAgICAgIGNvbnN0IGNvbENvdW50ID0gdGhpcy5maWVsZERlZnMubGVuZ3RoO1xuICAgICAgICB0aGlzLmZ1bGxGaWVsZERlZnMucHVzaCh0YWJsZUNvbHVtbik7XG4gICAgICAgIHRoaXMucm93RmlsdGVyW3RhYmxlQ29sdW1uLmZpZWxkXSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWRcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5maWVsZERlZnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zW2NvbC5maWVsZF0gPSBjb2w7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBJZiBkeW5hbWljIGRhdGF0YWJsZSBhbmQgbGFzdCBjb2x1bW4sIHBhc3MgdGhlIGNvbHVtbnMgdG8ganF1ZXJ5IGRhdGF0YWJsZVxuICAgICAgICBpZiAodGhpcy5pc2R5bmFtaWN0YWJsZSAmJiBjb2xDb3VudCA9PT0gdGhpcy5ub09mQ29sdW1ucykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJPcGVyYXRpb25Db2x1bW5zKCk7XG4gICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdjb2xEZWZzJywgdGhpcy5maWVsZERlZnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJGb3JtRmllbGQobmFtZSwgZm9ybUZpZWxkKSB7XG4gICAgICAgIHRoaXMuZm9ybWZpZWxkc1tuYW1lXSA9IGZvcm1GaWVsZDtcbiAgICB9XG5cbiAgICByZWdpc3RlckFjdGlvbnModGFibGVBY3Rpb24pIHtcbiAgICAgICAgdGhpcy5hY3Rpb25zLnB1c2godGFibGVBY3Rpb24pO1xuICAgICAgICB0aGlzLnBvcHVsYXRlQWN0aW9ucygpO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyUm93KHRhYmxlUm93LCByb3dJbnN0YW5jZSkge1xuICAgICAgICB0aGlzLnJvd0RlZiA9IHRhYmxlUm93O1xuICAgICAgICB0aGlzLnJvd0luc3RhbmNlID0gcm93SW5zdGFuY2U7XG4gICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdvcHRpb24nLCAnY3NzQ2xhc3NOYW1lcy5yb3dFeHBhbmRJY29uJywgdGhpcy5yb3dEZWYuZXhwYW5kaWNvbik7XG4gICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdvcHRpb24nLCAnY3NzQ2xhc3NOYW1lcy5yb3dDb2xsYXBzZUljb24nLCB0aGlzLnJvd0RlZi5jb2xsYXBzZWljb24pO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnJvd0V4cGFuc2lvbkVuYWJsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnJvd0RlZiA9IHRoaXMucm93RGVmO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyUm93QWN0aW9ucyh0YWJsZVJvd0FjdGlvbikge1xuICAgICAgICB0aGlzLnJvd0FjdGlvbnMucHVzaCh0YWJsZVJvd0FjdGlvbik7XG4gICAgfVxuXG4gICAgc2VsZWN0SXRlbShpdGVtLCBkYXRhKSB7XG4gICAgICAgIC8qIHNlcnZlciBpcyBub3QgdXBkYXRpbmcgaW1tZWRpYXRlbHksIHNvIHNldCB0aGUgc2VydmVyIGRhdGEgdG8gc3VjY2VzcyBjYWxsYmFjayBkYXRhICovXG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnNlcnZlckRhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfLmlzT2JqZWN0KGl0ZW0pKSB7XG4gICAgICAgICAgICBpdGVtID0gXy5vbWl0QnkoaXRlbSwgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF8uaXNBcnJheSh2YWx1ZSkgJiYgXy5pc0VtcHR5KHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZWxlY3RSb3cnLCBpdGVtLCB0cnVlKTtcbiAgICB9XG4gICAgLyogZGVzZWxlY3QgdGhlIGdpdmVuIGl0ZW0qL1xuICAgIGRlc2VsZWN0SXRlbShpdGVtKSB7XG4gICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdkZXNlbGVjdFJvdycsIGl0ZW0pO1xuICAgIH1cblxuICAgIG9uRGF0YU5hdmlnYXRvckRhdGFTZXRDaGFuZ2UobnYpIHtcbiAgICAgICAgbGV0IGRhdGE7XG4gICAgICAgIHRoaXMuX19mdWxsRGF0YSA9IG52O1xuICAgICAgICB0aGlzLmNoZWNrRmlsdGVyc0FwcGxpZWQodGhpcy5nZXRTb3J0RXhwcigpKTtcbiAgICAgICAgaWYgKHRoaXMuX2lzQ2xpZW50U2VhcmNoKSB7XG4gICAgICAgICAgICBkYXRhID0gZ2V0Q2xvbmVkT2JqZWN0KHRoaXMuX19mdWxsRGF0YSk7XG4gICAgICAgICAgICBpZiAoXy5pc09iamVjdChkYXRhKSAmJiAhXy5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLmdldFNlYXJjaFJlc3VsdChkYXRhLCB0aGlzLmZpbHRlckluZm8pO1xuICAgICAgICAgICAgZGF0YSA9IHRoaXMuZ2V0U29ydFJlc3VsdChkYXRhLCB0aGlzLnNvcnRJbmZvKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudjtcbiAgICB9XG5cbiAgICB0b2dnbGVNZXNzYWdlKHNob3csIHR5cGUsIG1zZywgaGVhZGVyPykge1xuICAgICAgICBpZiAoc2hvdyAmJiBtc2cpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwLm5vdGlmeUFwcChtc2csIHR5cGUsIGhlYWRlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBvcnQoJGl0ZW0pIHtcbiAgICAgICAgbGV0IGZpbHRlckZpZWxkcztcbiAgICAgICAgY29uc3Qgc29ydE9wdGlvbnMgPSBfLmlzRW1wdHkodGhpcy5zb3J0SW5mbykgPyAnJyA6IHRoaXMuc29ydEluZm8uZmllbGQgKyAnICcgKyB0aGlzLnNvcnRJbmZvLmRpcmVjdGlvbjtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHt9O1xuICAgICAgICBsZXQgaXNWYWxpZDtcbiAgICAgICAgbGV0IHJlcXVlc3REYXRhO1xuICAgICAgICB0aGlzLmZpZWxkRGVmcy5mb3JFYWNoKGZpZWxkRGVmID0+IHtcbiAgICAgICAgICAgIC8vIERvIG5vdCBhZGQgdGhlIHJvdyBvcGVyYXRpb24gYWN0aW9ucyBjb2x1bW4gdG8gdGhlIGV4cG9ydGVkIGZpbGUuXG4gICAgICAgICAgICBpZiAoZmllbGREZWYuZmllbGQgPT09IFJPV19PUFNfRklFTEQgfHwgIWZpZWxkRGVmLnNob3cpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBvcHRpb24gPSB7XG4gICAgICAgICAgICAgICAgJ2hlYWRlcic6IGZpZWxkRGVmLmRpc3BsYXlOYW1lXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gSWYgY29sdW1uIGhhcyBleHBvcnRleHByZXNzaW9uLCB0aGVuIHNlbmQgZm9ybSB0aGUgZXhwcmVzc2lvbiBhcyByZXF1aXJlZCBieSBiYWNrZW5kLlxuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHNlbmQgdGhlIGZpZWxkIG5hbWUuXG4gICAgICAgICAgICBpZiAoZmllbGREZWYuZXhwb3J0ZXhwcmVzc2lvbikge1xuICAgICAgICAgICAgICAgICg8YW55Pm9wdGlvbikuZXhwcmVzc2lvbiA9IGZpZWxkRGVmLmV4cG9ydGV4cHJlc3Npb247XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICg8YW55Pm9wdGlvbikuZmllbGQgPSBmaWVsZERlZi5maWVsZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbHVtbnNbZmllbGREZWYuZmllbGRdID0gb3B0aW9uO1xuICAgICAgICB9KTtcbiAgICAgICAgZmlsdGVyRmllbGRzID0gdGhpcy5nZXRGaWx0ZXJGaWVsZHModGhpcy5maWx0ZXJJbmZvKTtcbiAgICAgICAgcmVxdWVzdERhdGEgPSB7XG4gICAgICAgICAgICBtYXRjaE1vZGUgOiAnYW55d2hlcmVpZ25vcmVjYXNlJyxcbiAgICAgICAgICAgIGZpbHRlckZpZWxkcyA6IGZpbHRlckZpZWxkcyxcbiAgICAgICAgICAgIG9yZGVyQnkgOiBzb3J0T3B0aW9ucyxcbiAgICAgICAgICAgIGV4cG9ydFR5cGUgOiAkaXRlbS5sYWJlbCxcbiAgICAgICAgICAgIGxvZ2ljYWxPcCA6ICdBTkQnLFxuICAgICAgICAgICAgZXhwb3J0U2l6ZSA6IHRoaXMuZXhwb3J0ZGF0YXNpemUsXG4gICAgICAgICAgICBjb2x1bW5zIDogY29sdW1uc1xuICAgICAgICB9O1xuICAgICAgICBpc1ZhbGlkID0gdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVleHBvcnQnLCB7JGRhdGE6IHJlcXVlc3REYXRhfSk7XG4gICAgICAgIGlmIChpc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlcXVlc3REYXRhLmZpZWxkcyA9IF8udmFsdWVzKHJlcXVlc3REYXRhLmNvbHVtbnMpO1xuICAgICAgICB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5ET1dOTE9BRCwge2RhdGE6IHJlcXVlc3REYXRhfSk7XG4gICAgfVxuXG4gICAgZXhwYW5kUm93KHJvd0lkKSB7XG4gICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdleHBhbmRSb3cnLCByb3dJZCk7XG4gICAgfVxuXG4gICAgY29sbGFwc2VSb3cocm93SWQpIHtcbiAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2NvbGxhcHNlUm93Jywgcm93SWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2RvY3VtZW50Q2xpY2tCaW5kKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0ICR0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICAgIC8vIElmIGNsaWNrIHRyaWdnZXJlZCBmcm9tIHNhbWUgZ3JpZCBvciBhIGRpYWxvZywgZG8gbm90IHNhdmUgdGhlIHJvd1xuICAgICAgICBpZiAodGhpcy4kZWxlbWVudFswXS5jb250YWlucygkdGFyZ2V0KSB8fCBldmVudC50YXJnZXQuZG9jdHlwZSB8fCBpc0lucHV0Qm9keVdyYXBwZXIoJCgkdGFyZ2V0KSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2F2ZVJvdycpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3JlZHJhdyhmb3JjZVJlbmRlcikge1xuICAgICAgICBpZiAoZm9yY2VSZW5kZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YWdyaWRFbGVtZW50LmRhdGF0YWJsZSh0aGlzLmdyaWRPcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRDb2xHcm91cFdpZHRocycpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdhZGRPclJlbW92ZVNjcm9sbCcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbnZva2VBY3Rpb25FdmVudCgkZXZlbnQsIGV4cHJlc3Npb246IHN0cmluZykge1xuICAgICAgICBjb25zdCBmbiA9ICRwYXJzZUV2ZW50KGV4cHJlc3Npb24pO1xuICAgICAgICBmbih0aGlzLnZpZXdQYXJlbnQsIE9iamVjdC5hc3NpZ24odGhpcy5jb250ZXh0LCB7JGV2ZW50fSkpO1xuICAgIH1cblxuICAgIC8vIGNoYW5nZSBhbmQgYmx1ciBldmVudHMgYXJlIGFkZGVkIGZyb20gdGhlIHRlbXBsYXRlXG4gICAgcHJvdGVjdGVkIGhhbmRsZUV2ZW50KG5vZGU6IEhUTUxFbGVtZW50LCBldmVudE5hbWU6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uLCBsb2NhbHM6IGFueSkge1xuICAgICAgICBpZiAoZXZlbnROYW1lICE9PSAnc2VsZWN0Jykge1xuICAgICAgICAgICAgc3VwZXIuaGFuZGxlRXZlbnQodGhpcy5uYXRpdmVFbGVtZW50LCBldmVudE5hbWUsIGNhbGxiYWNrLCBsb2NhbHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdHJpZ2dlclVwbG9hZEV2ZW50KCRldmVudCwgZXZlbnROYW1lLCBmaWVsZE5hbWUsIHJvdykge1xuICAgICAgICBjb25zdCBwYXJhbXM6IGFueSA9IHskZXZlbnQsIHJvd307XG4gICAgICAgIGlmICghdGhpcy5jb2x1bW5zW2ZpZWxkTmFtZV0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnROYW1lID09PSAnY2hhbmdlJykge1xuICAgICAgICAgICAgcGFyYW1zLm5ld1ZhbCA9ICRldmVudC50YXJnZXQuZmlsZXM7XG4gICAgICAgICAgICBwYXJhbXMub2xkVmFsID0gdGhpcy5jb2x1bW5zW2ZpZWxkTmFtZV0uX29sZFVwbG9hZFZhbDtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uc1tmaWVsZE5hbWVdLl9vbGRVcGxvYWRWYWwgPSBwYXJhbXMubmV3VmFsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29sdW1uc1tmaWVsZE5hbWVdLmludm9rZUV2ZW50Q2FsbGJhY2soZXZlbnROYW1lLCBwYXJhbXMpO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyRm9ybVdpZGdldCgpIHt9XG5cbiAgICAvLyBGb3JtIGNvbnRyb2wgYWNjZXNzb3IgbWV0aG9kcy4gVGhpcyB3aWxsIGJlIHVzZWQgZm9yIHRhYmxlIGluc2lkZSBmb3JtXG4gICAgd3JpdGVWYWx1ZSgpIHt9XG5cbiAgICBwcml2YXRlIF9vbkNoYW5nZTogYW55ID0gKCkgPT4ge307XG4gICAgcHJpdmF0ZSBfb25Ub3VjaGVkOiBhbnkgPSAoKSA9PiB7fTtcblxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm4pIHtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2UgPSBmbjtcbiAgICB9XG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm4pIHtcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgbmdPbkRldGFjaCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkRldGFjaCgpO1xuICAgICAgICBpZiAoXy5nZXQodGhpcy5kYXRhc291cmNlLCAnY2F0ZWdvcnknKSA9PT0gJ3dtLlZhcmlhYmxlJyAmJiB0aGlzLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhZ2VMb2FkID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9wYWdlTG9hZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicGFuZWwtaGVhZGluZ1wiICpuZ0lmPVwidGl0bGUgfHwgc3ViaGVhZGluZyB8fCBpY29uY2xhc3MgfHwgZXhwb3J0T3B0aW9ucy5sZW5ndGggfHwgX2FjdGlvbnMuaGVhZGVyLmxlbmd0aFwiPlxuICAgIDxoMyBjbGFzcz1cInBhbmVsLXRpdGxlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnRcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiYXBwLWljb24gcGFuZWwtaWNvbiB7e2ljb25jbGFzc319XCIgKm5nSWY9XCJpY29uY2xhc3NcIj48L2k+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGluZ1wiIFtpbm5lckhUTUxdPVwidGl0bGVcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvblwiIFtpbm5lckhUTUxdPVwic3ViaGVhZGluZ1wiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBhbmVsLWFjdGlvbnMgYXBwLWRhdGFncmlkLWFjdGlvbnNcIiAqbmdJZj1cImV4cG9ydE9wdGlvbnMubGVuZ3RoIHx8IF9hY3Rpb25zLmhlYWRlci5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ0biBvZiBfYWN0aW9ucy5oZWFkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJidG4ud2lkZ2V0VHlwZSA9PT0gJ2J1dHRvbicgPyBidXR0b25SZWYgOiBhbmNob3JSZWZcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2J0bjpidG59XCI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxkaXYgd21NZW51IGRyb3Bkb3duIGNhcHRpb24uYmluZD1cImFwcExvY2FsZS5MQUJFTF9FWFBPUlRcIiAqbmdJZj1cImV4cG9ydE9wdGlvbnMubGVuZ3RoXCIgIGF1dG9jbG9zZT1cImFsd2F5c1wiIGF0dHIubmFtZT1cInt7bmFtZX19LWV4cG9ydFwiXG4gICAgICAgICAgICAgICAgZGF0YXNldC5iaW5kPVwiZXhwb3J0T3B0aW9uc1wiIHNlbGVjdC5ldmVudD1cImV4cG9ydCgkaXRlbSlcIiBtZW51cG9zaXRpb249XCJkb3duLGxlZnRcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9oMz5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImFwcC1kYXRhZ3JpZFwiICNkYXRhZ3JpZEVsZW1lbnQ+PC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJwYW5lbC1mb290ZXIgY2xlYXJmaXhcIiBbaGlkZGVuXT1cIiFfYWN0aW9ucy5mb290ZXIubGVuZ3RoICYmICghc2hvd25hdmlnYXRpb24gfHwgKG9uRGVtYW5kTG9hZCAmJiBkYXRhTmF2aWdhdG9yLmlzRGlzYWJsZU5leHQpIHx8IGRhdGFOYXZpZ2F0b3I/LmRhdGFTaXplIDw9IHBhZ2VzaXplKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJhcHAtZGF0YWdyaWQtcGFnaW5hdG9yXCIgW2hpZGRlbl09XCIoIWRhdGFOYXZpZ2F0b3I/LmRhdGFTaXplICYmICFkYXRhTmF2aWdhdG9yLmRhdGFzb3VyY2U/LnBhZ2luYXRpb24/Lm5leHQpIHx8ICFzaG93bmF2aWdhdGlvbiB8fCAob25EZW1hbmRMb2FkICYmIGRhdGFOYXZpZ2F0b3IuaXNEaXNhYmxlTmV4dCkgfHwgZGF0YU5hdmlnYXRvcj8uZGF0YVNpemUgPD0gcGFnZXNpemVcIj5cbiAgICAgICAgPG5hdiB3bVBhZ2luYXRpb24gc2hvdy5iaW5kPVwic2hvd25hdmlnYXRpb25cIiBuYXZpZ2F0aW9uYWxpZ24uYmluZD1cIm5hdmlnYXRpb25hbGlnblwiXG4gICAgICAgICAgICAgbmF2aWdhdGlvbnNpemUuYmluZD1cIm5hdmlnYXRpb25TaXplXCJcbiAgICAgICAgICAgICBuYXZpZ2F0aW9uLmJpbmQ9XCJuYXZDb250cm9sc1wiIHNob3dyZWNvcmRjb3VudC5iaW5kPVwic2hvd3JlY29yZGNvdW50XCIgbWF4c2l6ZS5iaW5kPVwibWF4c2l6ZVwiXG4gICAgICAgICAgICAgYm91bmRhcnlsaW5rcy5iaW5kPVwiYm91bmRhcnlsaW5rc1wiXG4gICAgICAgICAgICAgZm9yY2VlbGxpcHNlcy5iaW5kPVwiZm9yY2VlbGxpcHNlc1wiIGRpcmVjdGlvbmxpbmtzLmJpbmQ9XCJkaXJlY3Rpb25saW5rc1wiPjwvbmF2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJhcHAtZGF0YWdyaWQtYWN0aW9uc1wiICpuZ0lmPVwiX2FjdGlvbnMuZm9vdGVyLmxlbmd0aFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidG4gb2YgX2FjdGlvbnMuZm9vdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJidG4ud2lkZ2V0VHlwZSA9PT0gJ2J1dHRvbicgPyBidXR0b25SZWYgOiBhbmNob3JSZWZcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2J0bjpidG59XCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjYnV0dG9uUmVmIGxldC1idG49XCJidG5cIj5cbiAgICA8YnV0dG9uIHdtQnV0dG9uIGNhcHRpb24uYmluZD1cImJ0bi5kaXNwbGF5TmFtZVwiIHNob3cuYmluZD1cImJ0bi5zaG93XCIgY2xhc3MuYmluZD1cImJ0bi5jbGFzc1wiICBpY29uY2xhc3MuYmluZD1cImJ0bi5pY29uY2xhc3NcIiAoY2xpY2spPVwiaW52b2tlQWN0aW9uRXZlbnQoJGV2ZW50LCBidG4uYWN0aW9uKVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7J2J0bi1zbSc6IHNwYWNpbmcgPT09ICdjb25kZW5zZWQnLCAnZGlzYWJsZWQtbmV3JzogYnRuLmtleSA9PT0gJ2FkZE5ld1JvdycgJiYgKGlzR3JpZEVkaXRNb2RlIHx8IGlzTG9hZGluZyl9XCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBzaG9ydGN1dGtleS5iaW5kPVwiYnRuLnNob3J0Y3V0a2V5XCIgdGFiaW5kZXguYmluZD1cImJ0bi50YWJpbmRleFwiIGhpbnQuYmluZD1cImJ0bi50aXRsZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiYnRuLmRpc3BsYXlOYW1lXCIgZGlzYWJsZWQuYmluZD1cImJ0bi5kaXNhYmxlZFwiIGNvbmRpdGlvbmFsY2xhc3MuYmluZD1cImJ0bi5jb25kaXRpb25hbGNsYXNzXCIgY29uZGl0aW9uYWxzdHlsZS5iaW5kPVwiYnRuLmNvbmRpdGlvbmFsc3R5bGVcIj48L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYW5jaG9yUmVmIGxldC1idG49XCJidG5cIj5cbiAgICA8YSB3bUFuY2hvciBjYXB0aW9uLmJpbmQ9XCJidG4uZGlzcGxheU5hbWVcIiBzaG93LmJpbmQ9XCJidG4uc2hvd1wiIGNsYXNzLmJpbmQ9XCJidG4uY2xhc3NcIiAgaWNvbmNsYXNzLmJpbmQ9XCJidG4uaWNvbmNsYXNzXCIgKGNsaWNrKT1cImludm9rZUFjdGlvbkV2ZW50KCRldmVudCwgYnRuLmFjdGlvbilcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieydidG4tc20nOiBzcGFjaW5nID09PSAnY29uZGVuc2VkJywgJ2Rpc2FibGVkLW5ldyc6IGJ0bi5rZXkgPT09ICdhZGROZXdSb3cnICYmIChpc0dyaWRFZGl0TW9kZSB8fCBpc0xvYWRpbmcpfVwiXG4gICAgICAgICAgICBzaG9ydGN1dGtleS5iaW5kPVwiYnRuLnNob3J0Y3V0a2V5XCIgdGFiaW5kZXguYmluZD1cImJ0bi50YWJpbmRleFwiIGhpbnQuYmluZD1cImJ0bi50aXRsZVwiXG4gICAgICAgICAgICBoeXBlcmxpbmsuYmluZD1cImJ0bi5oeXBlcmxpbmtcIiB0YXJnZXQuYmluZD1cImJ0bi50YXJnZXRcIiBjb25kaXRpb25hbGNsYXNzLmJpbmQ9XCJidG4uY29uZGl0aW9uYWxjbGFzc1wiIGNvbmRpdGlvbmFsc3R5bGUuYmluZD1cImJ0bi5jb25kaXRpb25hbHN0eWxlXCI+PC9hPlxuPC9uZy10ZW1wbGF0ZT5cblxuPGRpdiBoaWRkZW4+XG4gICAgPG5nLWNvbnRhaW5lciAjbXVsdGlDb2x1bW5GaWx0ZXJWaWV3PjwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAjaW5saW5lRWRpdFZpZXc+PC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICNpbmxpbmVFZGl0TmV3Vmlldz48L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgI3Jvd0FjdGlvbnNWaWV3PjwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAjcm93RXhwYW5zaW9uQWN0aW9uVmlldz48L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgI2N1c3RvbUV4cHJWaWV3PjwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAjZHluYW1pY1RhYmxlPjwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAjcm93RGV0YWlsVmlldz48L25nLWNvbnRhaW5lcj5cblxuICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXRhYmxlLWNvbnRhaW5lclwiPjwvZGl2PlxuPC9kaXY+XG4iXX0=
2179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2RhdGEvdGFibGUvc3JjL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL3RhYmxlL3NyYy90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLFNBQVMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQWEsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVOLE9BQU8sRUFBd0IsV0FBVyxFQUFhLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakcsT0FBTyxFQUFDLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBOEIsTUFBTSxVQUFVLENBQUM7QUFFcEcsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUzQyxPQUFPLEVBQ0gsVUFBVSxFQUNWLFdBQVcsRUFDWCxRQUFRLEVBQ1IsTUFBTSxFQUNOLEdBQUcsRUFDSCxZQUFZLEVBQ1osVUFBVSxFQUNWLGVBQWUsRUFDZixxQkFBcUIsRUFDckIsWUFBWSxFQUVaLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsUUFBUSxFQUNSLFNBQVMsRUFDVCwyQkFBMkIsRUFDM0IsV0FBVyxFQUNYLGVBQWUsRUFDbEIsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsRUFBRSxjQUFjLEVBQUUsc0JBQXNCLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLE1BQU0s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QVM7bUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUVSLG1CQUFtQjtrQkFBL0UsZUFBZTttQkFBQyxxQkFBcUIsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUM7WUFDZSxvQkFBb0I7a0JBQTdGLFNBQVM7bUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUVoQixjQUFjO2tCQUFyRSxlQUFlO21CQUFDLGdCQUFnQixFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksRUFBQztZQUNpQixpQkFBaUI7a0JBQXZGLFNBQVM7bUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUVILHNCQUFzQjtrQkFBdkYsZUFBZTttQkFBQyx3QkFBd0IsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7WUFDOUIsZ0JBQWdCO2tCQUFqRCxZQUFZO21CQUFDLGtCQUFrQjtZQUNzQyxnQkFBZ0I7a0JBQXJGLFNBQVM7bUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFDVyx5QkFBeUI7a0JBQXZHLFNBQVM7bUJBQUMsd0JBQXdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUVSLGVBQWU7a0JBQW5GLFNBQVM7bUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFpMUI3QixVQUFVO2tCQUEvQyxZQUFZO21CQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIEF0dHJpYnV0ZSwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGRyZW4sIENvbnRlbnRDaGlsZCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBJbmplY3RvciwgTmdab25lLCBPbkRlc3Ryb3ksIE9wdGlvbmFsLCBRdWVyeUxpc3QsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7Vmlld3BvcnQsIFN0YXRlUGVyc2lzdGVuY2UsIFBhZ2luYXRpb25TZXJ2aWNlLCBVc2VyRGVmaW5lZEV4ZWN1dGlvbkNvbnRleHR9IGZyb20gJ0B3bS9jb3JlJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICAgICRhcHBEaWdlc3QsXG4gICAgJHBhcnNlRXZlbnQsXG4gICAgJHVud2F0Y2gsXG4gICAgJHdhdGNoLFxuICAgIEFwcCxcbiAgICBjbG9zZVBvcG92ZXIsXG4gICAgRGF0YVNvdXJjZSxcbiAgICBnZXRDbG9uZWRPYmplY3QsXG4gICAgZ2V0RGF0YXNvdXJjZUZyb21FeHByLFxuICAgIGdldFZhbGlkSlNPTixcbiAgICBJREdlbmVyYXRvcixcbiAgICBpc0RhdGFTb3VyY2VFcXVhbCxcbiAgICBpc0RlZmluZWQsXG4gICAgaXNNb2JpbGUsXG4gICAgdHJpZ2dlckZuLFxuICAgIER5bmFtaWNDb21wb25lbnRSZWZQcm92aWRlcixcbiAgICBleHRlbmRQcm90byxcbiAgICAkaW52b2tlV2F0Y2hlcnNcbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgRURJVF9NT0RFLCBnZXRDb25kaXRpb25hbENsYXNzZXMsIGdldE9yZGVyQnlFeHByLCBnZXRSb3dPcGVyYXRpb25zQ29sdW1uLCBwcmVwYXJlRmllbGREZWZzLCBwcm92aWRlQXMsIHByb3ZpZGVBc1dpZGdldFJlZiwgU3R5bGFibGVDb21wb25lbnQsIHN0eWxlciwgdHJhbnNmb3JtRGF0YSwgVHJ1c3RBc1BpcGUsIGV4dHJhY3REYXRhU291cmNlTmFtZSwgREVCT1VOQ0VfVElNRVMsIE5BVklHQVRJT05fVFlQRSwgdW5zdXBwb3J0ZWRTdGF0ZVBlcnNpc3RlbmNlVHlwZXMgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcbmltcG9ydCB7IFBhZ2luYXRpb25Db21wb25lbnQgfSBmcm9tICdAd20vY29tcG9uZW50cy9kYXRhL3BhZ2luYXRpb24nO1xuXG5pbXBvcnQgeyBMaXN0Q29tcG9uZW50IH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvZGF0YS9saXN0JztcbmltcG9ydCB7IHJlZ2lzdGVyUHJvcHMgfSBmcm9tICcuL3RhYmxlLnByb3BzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZGVjbGFyZSBjb25zdCBfLCAkO1xuXG5jb25zdCBERUZBVUxUX0NMUyA9ICdhcHAtZ3JpZCBhcHAtcGFuZWwgcGFuZWwnO1xuY29uc3QgV0lER0VUX0NPTkZJRyA9IHt3aWRnZXRUeXBlOiAnd20tdGFibGUnLCBob3N0Q2xhc3M6IERFRkFVTFRfQ0xTfTtcblxuY29uc3QgZXhwb3J0SWNvbk1hcHBpbmcgPSB7XG4gICAgRVhDRUw6ICdmYSBmYS1maWxlLWV4Y2VsLW8nLFxuICAgIENTVjogJ2ZhIGZhLWZpbGUtdGV4dC1vJ1xufTtcblxuY29uc3QgUk9XX09QU19GSUVMRCA9ICdyb3dPcGVyYXRpb25zJztcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG5jb25zdCBpc0lucHV0Qm9keVdyYXBwZXIgPSB0YXJnZXQgPT4ge1xuICAgIGNvbnN0IGNsYXNzZXMgPSBbJy5kcm9wZG93bi1tZW51JywgJy51aWItdHlwZWFoZWFkLW1hdGNoJywgJy5tb2RhbC1kaWFsb2cnLCAnLnRvYXN0J107XG4gICAgbGV0IGlzSW5wdXQgPSBmYWxzZTtcbiAgICBjbGFzc2VzLmZvckVhY2goY2xzID0+IHtcbiAgICAgICAgaWYgKHRhcmdldC5jbG9zZXN0KGNscykubGVuZ3RoKSB7XG4gICAgICAgICAgICBpc0lucHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGF0dHJzID0gWydic2RhdGVwaWNrZXJkYXlkZWNvcmF0b3InXTtcbiAgICBpZiAoIWlzSW5wdXQpIHtcbiAgICAgICAgYXR0cnMuZm9yRWFjaChhdHRyID0+IHtcbiAgICAgICAgICAgIGlmICh0YXJnZXRbMF0uaGFzQXR0cmlidXRlKGF0dHIpKSB7XG4gICAgICAgICAgICAgICAgaXNJbnB1dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGlzSW5wdXQ7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ1t3bVRhYmxlXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgcHJvdmlkZUFzKFRhYmxlQ29tcG9uZW50LCBOR19WQUxVRV9BQ0NFU1NPUiwgdHJ1ZSksXG4gICAgICAgIHByb3ZpZGVBc1dpZGdldFJlZihUYWJsZUNvbXBvbmVudClcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29tcG9uZW50IGV4dGVuZHMgU3R5bGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICBzdGF0aWMgaW5pdGlhbGl6ZVByb3BzID0gcmVnaXN0ZXJQcm9wcygpO1xuICAgIEBWaWV3Q2hpbGQoUGFnaW5hdGlvbkNvbXBvbmVudCwge3N0YXRpYzogdHJ1ZX0pIGRhdGFOYXZpZ2F0b3I7XG5cbiAgICBAVmlld0NoaWxkKCdkYXRhZ3JpZEVsZW1lbnQnLCB7c3RhdGljOiB0cnVlfSkgcHJpdmF0ZSBfdGFibGVFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbigncm93QWN0aW9uVG1wbCcsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgcm93QWN0aW9uVG1wbDogUXVlcnlMaXN0PGFueT47XG4gICAgQFZpZXdDaGlsZCgncm93QWN0aW9uc1ZpZXcnLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSByb3dBY3Rpb25zVmlld1JlZjogVmlld0NvbnRhaW5lclJlZjtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oJ2ZpbHRlclRtcGwnLCB7ZGVzY2VuZGFudHM6IHRydWV9KSBmaWx0ZXJUbXBsOiBRdWVyeUxpc3Q8YW55PjtcbiAgICBAVmlld0NoaWxkKCdtdWx0aUNvbHVtbkZpbHRlclZpZXcnLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBmaWx0ZXJWaWV3UmVmOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbignaW5saW5lV2lkZ2V0VG1wbCcsIHtkZXNjZW5kYW50czogdHJ1ZX0pIGlubGluZVdpZGdldFRtcGw6IFF1ZXJ5TGlzdDxhbnk+O1xuICAgIEBWaWV3Q2hpbGQoJ2lubGluZUVkaXRWaWV3JywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgaW5saW5lRWRpdFZpZXdSZWY6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKCdpbmxpbmVXaWRnZXRUbXBsTmV3Jywge2Rlc2NlbmRhbnRzOiB0cnVlfSkgaW5saW5lV2lkZ2V0TmV3VG1wbDogUXVlcnlMaXN0PGFueT47XG4gICAgQFZpZXdDaGlsZCgnaW5saW5lRWRpdE5ld1ZpZXcnLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBpbmxpbmVFZGl0TmV3Vmlld1JlZjogVmlld0NvbnRhaW5lclJlZjtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oJ2N1c3RvbUV4cHJUbXBsJywge2Rlc2NlbmRhbnRzOiB0cnVlfSkgY3VzdG9tRXhwclRtcGw6IFF1ZXJ5TGlzdDxhbnk+O1xuICAgIEBWaWV3Q2hpbGQoJ2N1c3RvbUV4cHJWaWV3JywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgY3VzdG9tRXhwclZpZXdSZWY6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKCdyb3dFeHBhbnNpb25BY3Rpb25UbXBsJywgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSByb3dFeHBhbnNpb25BY3Rpb25UbXBsOiBRdWVyeUxpc3Q8YW55PjtcbiAgICBAQ29udGVudENoaWxkKCdyb3dFeHBhbnNpb25UbXBsJykgcm93RXhwYW5zaW9uVG1wbDogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAVmlld0NoaWxkKCdyb3dEZXRhaWxWaWV3JywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgcm93RGV0YWlsVmlld1JlZjogVmlld0NvbnRhaW5lclJlZjtcbiAgICBAVmlld0NoaWxkKCdyb3dFeHBhbnNpb25BY3Rpb25WaWV3JywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgcm93RXhwYW5zaW9uQWN0aW9uVmlld1JlZjogVmlld0NvbnRhaW5lclJlZjtcblxuICAgIEBWaWV3Q2hpbGQoJ2R5bmFtaWNUYWJsZScsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIGR5bmFtaWNUYWJsZVJlZjogVmlld0NvbnRhaW5lclJlZjtcblxuICAgIHByaXZhdGUgcm93QWN0aW9uc0NvbXBpbGVkVGw6IGFueSAgPSB7fTtcbiAgICBwcml2YXRlIHJvd0ZpbHRlckNvbXBsaWVkVGw6IGFueSA9IHt9O1xuICAgIHByaXZhdGUgaW5saW5lQ29tcGxpZWRUbDogYW55ID0ge307XG4gICAgcHJpdmF0ZSBpbmxpbmVOZXdDb21wbGllZFRsOiBhbnkgPSB7fTtcbiAgICBwcml2YXRlIGN1c3RvbUV4cHJDb21waWxlZFRsOiBhbnkgPSB7fTtcbiAgICBwcml2YXRlIGN1c3RvbUV4cHJDb21waWxlZFN1bW1hcnlUbDogYW55ID0ge307XG4gICAgcHJpdmF0ZSByb3dEZWZJbnN0YW5jZXMgPSB7fTtcbiAgICBwcml2YXRlIHJvd0RlZk1hcCA9IHt9O1xuICAgIHByaXZhdGUgcm93RXhwYW5zaW9uQWN0aW9uVGw6IGFueSA9IHt9O1xuXG4gICAgY29sdW1ucyA9IHt9O1xuICAgIGZvcm1maWVsZHMgPSB7fTtcbiAgICBkYXRhZ3JpZEVsZW1lbnQ7XG4gICAgZGF0YXNvdXJjZTtcbiAgICBlZGl0bW9kZTtcbiAgICBlbmFibGVjb2x1bW5zZWxlY3Rpb247XG4gICAgZW5hYmxlc29ydCA9IHRydWU7XG4gICAgZmlsdGVybW9kZTtcbiAgICBzZWFyY2hsYWJlbDtcbiAgICBmb3JtcG9zaXRpb247XG4gICAgZ3JpZGNsYXNzO1xuICAgIGdyaWRmaXJzdHJvd3NlbGVjdDtcbiAgICBpY29uY2xhc3M7XG4gICAgb25kZW1hbmRtZXNzYWdlO1xuICAgIHZpZXdsZXNzbWVzc2FnZTtcbiAgICBzaG93dmlld2xlc3NidXR0b24gPSBmYWxzZTtcbiAgICBfdHJpZ2dlcmVkQnlVc2VyO1xuICAgIGlzR3JpZEVkaXRNb2RlO1xuICAgIGxvYWRpbmdkYXRhbXNnO1xuICAgIG11bHRpc2VsZWN0O1xuICAgIG5hbWU7XG4gICAgX2lzRGVwZW5kZW50O1xuICAgIG5hdmlnYXRpb247XG4gICAgbmF2aWdhdGlvblNpemU7XG4gICAgbmF2aWdhdGlvbmFsaWduO1xuICAgIG5vZGF0YW1lc3NhZ2U7XG4gICAgcGFnZXNpemU7XG4gICAgcHJldkRhdGE7XG4gICAgcHJpbWFyeUtleSA9IFtdO1xuICAgIHJhZGlvc2VsZWN0O1xuICAgIHJvd2NsYXNzO1xuICAgIHJvd25nY2xhc3M7XG4gICAgc2VsZWN0ZWRJdGVtcyA9IFtdO1xuICAgIHNob3doZWFkZXI7XG4gICAgc2hvd3JlY29yZGNvdW50O1xuICAgIHNob3dyb3dpbmRleDtcbiAgICBzdWJoZWFkaW5nO1xuICAgIHRpdGxlO1xuICAgIHNob3duZXdyb3c7XG4gICAgZGVsZXRlb2t0ZXh0O1xuICAgIGRlbGV0ZWNhbmNlbHRleHQ7XG4gICAgb25FcnJvcjtcbiAgICBvblJvd2luc2VydDtcbiAgICBvblJvd3VwZGF0ZTtcbiAgICBvblJvd2RlbGV0ZTtcbiAgICBzdGF0ZWhhbmRsZXI7XG4gICAgc2VsZWN0ZWRJdGVtQ2hhbmdlID0gbmV3IFN1YmplY3QoKTtcbiAgICBzZWxlY3RlZEl0ZW1DaGFuZ2UkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLnNlbGVjdGVkSXRlbUNoYW5nZS5hc09ic2VydmFibGUoKTtcblxuICAgIGFjdGlvbnMgPSBbXTtcbiAgICBfYWN0aW9ucyA9IHtcbiAgICAgICAgJ2hlYWRlcic6IFtdLFxuICAgICAgICAnZm9vdGVyJzogW11cbiAgICB9O1xuICAgIGV4cG9ydE9wdGlvbnMgPSBbXTtcbiAgICBleHBvcnRkYXRhc2l6ZTtcbiAgICBmb3JtV2lkZ2V0cztcbiAgICBoZWFkZXJDb25maWcgPSBbXTtcbiAgICBpdGVtcyA9IFtdO1xuICAgIG5hdkNvbnRyb2xzO1xuICAgIHJvd0FjdGlvbnMgPSBbXTtcbiAgICBzZWxlY3RlZENvbHVtbnM7XG4gICAgc2hvd25hdmlnYXRpb24gPSBmYWxzZTtcbiAgICBkYXRhc2V0O1xuICAgIF9saXZlVGFibGVQYXJlbnQ7XG4gICAgaXNQYXJ0T2ZMaXZlR3JpZDtcbiAgICBncmlkRWxlbWVudDtcbiAgICBpc05ld1Jvd0luc2VydGVkO1xuICAgIGlzTW9iaWxlO1xuICAgIGlzTG9hZGluZztcbiAgICBpc1Jvd0RlbGV0ZWQ7XG4gICAgZG9jdW1lbnRDbGlja0JpbmQgPSBub29wO1xuICAgIGFjdGlvblJvd0luZGV4O1xuICAgIGFjdGlvblJvd1BhZ2U7XG4gICAgcHJldkZpbHRlckV4cHJlc3Npb246IGFueSA9IFtdO1xuICAgIGZpZWxkRGVmcyA9IFtdO1xuICAgIHJvd0RlZjogYW55ID0ge307XG4gICAgcm93SW5zdGFuY2U6IGFueSA9IHt9O1xuXG4gICAgcHJpdmF0ZSBmdWxsRmllbGREZWZzID0gW107XG4gICAgcHJpdmF0ZSBfX2Z1bGxEYXRhO1xuICAgIHByaXZhdGUgZGF0YU5hdmlnYXRvcldhdGNoZWQ7XG4gICAgcHJpdmF0ZSBuYXZpZ2F0b3JSZXN1bHRXYXRjaDtcbiAgICBwcml2YXRlIG5hdmlnYXRvck1heFJlc3VsdFdhdGNoO1xuICAgIHByaXZhdGUgZmlsdGVySW5mbztcbiAgICBwcml2YXRlIHNvcnRJbmZvO1xuICAgIHByaXZhdGUgc2VydmVyRGF0YTtcbiAgICBwcml2YXRlIGZpbHRlcm51bGxyZWNvcmRzO1xuICAgIHByaXZhdGUgdmFyaWFibGVJbmZsaWdodCA9IHRydWU7XG4gICAgcHJpdmF0ZSBpc2R5bmFtaWN0YWJsZTtcbiAgICBwcml2YXRlIF9keW5hbWljQ29udGV4dDtcbiAgICBwcml2YXRlIG5vT2ZDb2x1bW5zO1xuICAgIHB1YmxpYyBvbkRlbWFuZExvYWQ7XG4gICAgcHVibGljIGluZlNjcm9sbDtcbiAgICBwcml2YXRlIGlzRGF0YUxvYWRpbmc7XG4gICAgcHJpdmF0ZSBjdXJyZW50UGFnZTtcbiAgICBwcml2YXRlIGFwcGx5UHJvcHMgPSBuZXcgTWFwKCk7XG5cbiAgICByZWRyYXcgPSBfLmRlYm91bmNlKHRoaXMuX3JlZHJhdywgMTUwKTtcbiAgICBkZWJvdW5jZWRIYW5kbGVMb2FkaW5nID0gXy5kZWJvdW5jZSh0aGlzLmhhbmRsZUxvYWRpbmcsIDM1MCk7XG5cbiAgICAvLyBGaWx0ZXIgYW5kIFNvcnQgTWV0aG9kc1xuICAgIHJvd0ZpbHRlcjogYW55ID0ge307XG4gICAgbWF0Y2hNb2RlVHlwZXNNYXA7XG4gICAgbWF0Y2hNb2RlTXNncztcbiAgICBlbXB0eU1hdGNoTW9kZXM7XG4gICAgX3NlYXJjaFNvcnRIYW5kbGVyID0gbm9vcDtcbiAgICBzZWFyY2hTb3J0SGFuZGxlciA9ICguLi5hcmdzKSA9PiB7IHRoaXMuX3NlYXJjaFNvcnRIYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3MpOyB9O1xuICAgIF9pc1BhZ2VTZWFyY2g7XG4gICAgX2lzQ2xpZW50U2VhcmNoO1xuICAgIGNoZWNrRmlsdGVyc0FwcGxpZWQ6IEZ1bmN0aW9uO1xuICAgIGdldFNlYXJjaFJlc3VsdDogRnVuY3Rpb247XG4gICAgZ2V0U29ydFJlc3VsdDogRnVuY3Rpb247XG4gICAgZ2V0RmlsdGVyRmllbGRzOiBGdW5jdGlvbjtcbiAgICBvblJvd0ZpbHRlckNoYW5nZSA9IG5vb3A7XG4gICAgb25GaWx0ZXJDb25kaXRpb25TZWxlY3QgPSBub29wO1xuICAgIHNob3dDbGVhckljb24gPSBub29wO1xuICAgIGNsZWFyUm93RmlsdGVyID0gbm9vcDtcbiAgICBhZGp1c3RDb250YWluZXIgPSBub29wO1xuICAgIGdldE5hdmlnYXRpb25UYXJnZXRCeVNvcnRJbmZvOiBGdW5jdGlvbjtcbiAgICByZWZyZXNoRGF0YTogRnVuY3Rpb247XG4gICAgY2xlYXJGaWx0ZXI6IEZ1bmN0aW9uO1xuXG4gICAgLy8gSW5saW5lIEVkaXRcbiAgICBuZ2Zvcm06IEZvcm1Hcm91cDtcbiAgICB1cGRhdGVWYXJpYWJsZTogRnVuY3Rpb247XG4gICAgdXBkYXRlUmVjb3JkOiBGdW5jdGlvbjtcbiAgICBkZWxldGVSZWNvcmQ6IEZ1bmN0aW9uO1xuICAgIGluc2VydFJlY29yZDogRnVuY3Rpb247XG4gICAgZWRpdFJvdzogRnVuY3Rpb247XG4gICAgYWRkTmV3Um93OiBGdW5jdGlvbjtcbiAgICBhZGRSb3c6IEZ1bmN0aW9uO1xuICAgIGRlbGV0ZVJvdzogRnVuY3Rpb247XG4gICAgb25SZWNvcmREZWxldGU6IEZ1bmN0aW9uO1xuICAgIGluaXRpYXRlU2VsZWN0SXRlbTogRnVuY3Rpb247XG4gICAgaGlkZUVkaXRSb3c6IEZ1bmN0aW9uO1xuICAgIHNhdmVSb3c6IEZ1bmN0aW9uO1xuICAgIGNhbmNlbFJvdzogRnVuY3Rpb247XG4gICAgcHJpdmF0ZSBfcGFnZUxvYWQgPSB0cnVlO1xuXG4gICAgcHVibGljIGdyaWRPcHRpb25zID0ge1xuICAgICAgICBkYXRhOiBbXSxcbiAgICAgICAgY29sRGVmczogW10sXG4gICAgICAgIHN0YXJ0Um93SW5kZXg6IDEsXG4gICAgICAgIG1vZGU6ICcnLFxuICAgICAgICBzb3J0SW5mbzoge1xuICAgICAgICAgICAgZmllbGQ6ICcnLFxuICAgICAgICAgICAgZGlyZWN0aW9uOiAnJ1xuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXJtb2RlOiAnJyxcbiAgICAgICAgc2VhcmNoTGFiZWw6ICcnLFxuICAgICAgICByb3dBY3Rpb25zOiBbXSxcbiAgICAgICAgaGVhZGVyQ29uZmlnOiBbXSxcbiAgICAgICAgcm93Q2xhc3M6ICcnLFxuICAgICAgICBlZGl0bW9kZTogJycsXG4gICAgICAgIGZvcm1Qb3NpdGlvbjogJycsXG4gICAgICAgIGlzTW9iaWxlOiBmYWxzZSxcbiAgICAgICAgcm93RXhwYW5zaW9uRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHJvd0RlZjoge1xuICAgICAgICAgICAgcG9zaXRpb246ICcwJ1xuICAgICAgICB9LFxuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgbWVzc2FnZXM6IHtcbiAgICAgICAgICAgIHNlbGVjdEZpZWxkOiAnU2VsZWN0IEZpZWxkJ1xuICAgICAgICB9LFxuICAgICAgICBzZWN1cml0eVV0aWxzOiB7XG4gICAgICAgICAgICBwaXBlVHJhbnNmb3JtIDoge31cbiAgICAgICAgfSxcbiAgICAgICAgbmF2aWdhdGlvbjogJycsXG4gICAgICAgIGlzZHluYW1pY3RhYmxlOiAnJyxcbiAgICAgICAgZGVsZXRlZFJvd0luZGV4OiAtMSxcbiAgICAgICAgbGFzdEFjdGlvblBlcmZvcm1lZDogJ3Njcm9sbCcsXG4gICAgICAgIGlzU2VhcmNoVHJpZ2VycmVkOiBmYWxzZSxcbiAgICAgICAgaXNEYXRhc2V0VXBkYXRlZDogZmFsc2UsXG4gICAgICAgIGlzRGF0YVVwZGF0ZWRCeVVzZXI6IGZhbHNlLFxuICAgICAgICBzaG93dmlld2xlc3NidXR0b246IGZhbHNlLFxuICAgICAgICBvbmRlbWFuZG1lc3NhZ2U6ICcnLFxuICAgICAgICB2aWV3bGVzc21lc3NhZ2U6ICcnLFxuICAgICAgICBsb2FkaW5nZGF0YW1zZzogJycsXG4gICAgICAgIGlzTmV4dFBhZ2VEYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIEFDVElPTlM6IHtcbiAgICAgICAgICAgICdERUxFVEUnOiAnZGVsZXRlJyxcbiAgICAgICAgICAgICdFRElUJzogJ2VkaXQnLFxuICAgICAgICAgICAgJ1NFQVJDSF9PUl9TT1JUJzogJ3NlYXJjaF9vcl9zb3J0JyxcbiAgICAgICAgICAgICdERUZBVUxUJzogJ3Njcm9sbCcsXG4gICAgICAgICAgICAnRklMVEVSX0NSSVRFUklBJyA6ICdmaWx0ZXInLFxuICAgICAgICAgICAgJ0RBVEFTRVRfVVBEQVRFJzogJ2RhdGFzZXRfdXBkYXRlJ1xuICAgICAgICB9LFxuICAgICAgICBhY3Rpb25Sb3dJbmRleDogdW5kZWZpbmVkLFxuICAgICAgICBhY3Rpb25Sb3dQYWdlOiB1bmRlZmluZWQsXG4gICAgICAgIGlzTGFzdFBhZ2UgOiBmYWxzZSxcbiAgICAgICAgLy8gZ2V0IHRoZSBjdXJyZW50IHBhZ2UgbnVtYmVyXG4gICAgICAgIGdldEN1cnJlbnRQYWdlOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gXy5nZXQodGhpcy5kYXRhTmF2aWdhdG9yLCAnZG4uY3VycmVudFBhZ2UnKSB8fCAxO1xuICAgICAgICB9LFxuICAgICAgICAvLyBzZXQgdGhlIHBhZ2UgbnVtYmVyXG4gICAgICAgIHNldEN1cnJlbnRQYWdlOiAocGFnZU51bSkgPT4ge1xuICAgICAgICAgICAgXy5zZXQodGhpcy5kYXRhTmF2aWdhdG9yLCAnZG4uY3VycmVudFBhZ2UnLCBwYWdlTnVtIHx8IDEpO1xuICAgICAgICB9LFxuICAgICAgICBnZXREYXRhU291cmNlOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhc291cmNlO1xuICAgICAgICB9LFxuICAgICAgICAvLyBnZXQgdGhlIHBhZ2UgbGltaXRcbiAgICAgICAgZ2V0UGFnZVNpemU6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhZ2VzaXplO1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldFBhZ2VDb3VudCA6ICgpID0+e1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YU5hdmlnYXRvci5wYWdlQ291bnQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVuYWJsZU5hdmlnYXRpb246ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3Iud2lkZ2V0LmlzRGlzYWJsZU5leHQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3Iud2lkZ2V0LmlzRGlzYWJsZUxhc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLm1vZGUgPSAndmlld2xlc3MnO1xuICAgICAgICB9LFxuICAgICAgICAvLyBzZXQgdGhlIGRlbGV0ZWQgcm93IGluZGV4XG4gICAgICAgIHNldERlbGV0ZWRSb3dJbmRleDogKGlkKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdkZWxldGVkUm93SW5kZXgnLCBpZCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIHNldHMgdGhlIGxhc3QgYWN0aW9uIHBlcmZvcm1lZCBsaWtlIGVkaXQsIGRlbGV0ZSBldGMuXG4gICAgICAgIHNldExhc3RBY3Rpb25QZXJmb3JtZWQ6IChhY3Rpb24pID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2xhc3RBY3Rpb25QZXJmb3JtZWQnLCBhY3Rpb24gfHwgdGhpcy5ncmlkT3B0aW9ucy5sYXN0QWN0aW9uUGVyZm9ybWVkKTtcbiAgICAgICAgfSxcbiAgICAgICAgaXNOYXZUeXBlU2Nyb2xsT3JPbmRlbWFuZDogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZE9wdGlvbnMubmF2aWdhdGlvbiA9PT0gJ1Njcm9sbCcgfHwgdGhpcy5ncmlkT3B0aW9ucy5uYXZpZ2F0aW9uID09PSAnT24tRGVtYW5kJztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0SXNTZWFyY2hUcmlnZXJyZWQ6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignaXNTZWFyY2hUcmlnZXJyZWQnLCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldElzRGF0YXNldFVwZGF0ZWQ6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignaXNEYXRhc2V0VXBkYXRlZCcsIHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gIEZpeCBmb3IgW1dNUy0yMzI2M106ICdpc05leHRQYWdlRGF0YScgZmxhZyBpcyBzZXQgdG8gdHJ1ZSAtPiBpZiB1c2VyIGZldGNoaW5nIHRoZSBuZXh0IHBhZ2UgZGF0YSBieSBjbGlja2luZyBvbkxvYWQgbW9yZSBvciBzY3JvbGxcbiAgICAgICAgc2V0SXNOZXh0UGFnZURhdGE6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignaXNOZXh0UGFnZURhdGEnLCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vICBGaXggZm9yIFtXTVMtMjMyNjNdOiAnaXNEYXRhVXBkYXRlZEJ5VXNlcicgZmxhZyBpcyBzZXQgdG8gdHJ1ZSAtPiBpZiB1c2VyIGNoYW5nZXMgdGhlIGRhdGFzZXQgZnJvbSBzY3JpcHRcbiAgICAgICAgc2V0SXNEYXRhVXBkYXRlZEJ5VXNlcjogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdpc0RhdGFVcGRhdGVkQnlVc2VyJywgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBvbkRhdGFSZW5kZXI6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZERhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnZGF0YXJlbmRlcicsIHskZGF0YTogdGhpcy5ncmlkRGF0YSwgZGF0YTogdGhpcy5ncmlkRGF0YX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBzZWxlY3Qgcm93cyBzZWxlY3RlZCBpbiBwcmV2aW91cyBwYWdlcy4gKE5vdCBmaW5kaW5nIGludGVyc2VjdGlvbiBvZiBkYXRhIGFuZCBzZWxlY3RlZGl0ZW1zIGFzIGl0IHdpbGwgYmUgaGVhdnkpXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMubGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NlbGVjdFJvd3MnLCB0aGlzLml0ZW1zKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnZ2V0U2VsZWN0ZWRSb3dzJyk7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUNoYW5nZS5uZXh0KHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIE9uIHJlbmRlciwgYXBwbHkgdGhlIGZpbHRlcnMgc2V0IGZvciBxdWVyeSBzZXJ2aWNlIHZhcmlhYmxlXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzUGFnZVNlYXJjaCAmJiB0aGlzLmZpbHRlckluZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTb3J0SGFuZGxlcih0aGlzLmZpbHRlckluZm8sIHVuZGVmaW5lZCwgJ3NlYXJjaCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBvblJvd1NlbGVjdDogKHJvdywgZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnZ2V0U2VsZWN0ZWRSb3dzJyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1DaGFuZ2UubmV4dCh0aGlzLnNlbGVjdGVkSXRlbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByb3dEYXRhID0gdGhpcy5hZGRSb3dJbmRleChyb3cpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoICYmIHJvd0RhdGEuJGluZGV4ICYmIHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJyAmJiB0aGlzLmRhdGFOYXZpZ2F0b3IgJiYgdW5zdXBwb3J0ZWRTdGF0ZVBlcnNpc3RlbmNlVHlwZXMuaW5kZXhPZih0aGlzLm5hdmlnYXRpb24pIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvYmogPSB7cGFnZTogdGhpcy5kYXRhTmF2aWdhdG9yLmRuLmN1cnJlbnRQYWdlLCBpbmRleDogcm93RGF0YS4kaW5kZXggLSAxfTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2lkZ2V0U3RhdGUgPSB0aGlzLnN0YXRlUGVyc2lzdGVuY2UuZ2V0V2lkZ2V0U3RhdGUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfLmdldCh3aWRnZXRTdGF0ZSwgJ3NlbGVjdGVkSXRlbScpICAmJiB0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV8uc29tZSh3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW0sIG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW0ucHVzaChvYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLnNldFdpZGdldFN0YXRlKHRoaXMsIHsnc2VsZWN0ZWRJdGVtJzogd2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlUGVyc2lzdGVuY2Uuc2V0V2lkZ2V0U3RhdGUodGhpcywgeydzZWxlY3RlZEl0ZW0nOiBbb2JqXX0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdSZXRhaW4gU3RhdGUgaGFuZGxpbmcgb24gV2lkZ2V0ICcgKyB0aGlzLm5hbWUgKyAnIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGN1cnJlbnQgcGFnaW5hdGlvbiB0eXBlLicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Jvd3NlbGVjdCcsIHskZGF0YTogcm93RGF0YSwgJGV2ZW50OiBlLCByb3c6IHJvd0RhdGF9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAvLyBhc3NpZ25zIHRoZSBpdGVtcyBvbiBjYXB0dXJlIHBoYXNlIG9mIHRoZSBjbGljayBoYW5kbGVyLlxuICAgICAgICBhc3NpZ25TZWxlY3RlZEl0ZW1zOiAocm93LCBlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICogaW4gY2FzZSBvZiBzaW5nbGUgc2VsZWN0LCB1cGRhdGUgdGhlIGl0ZW1zIHdpdGggb3V0IGNoYW5naW5nIHRoZSByZWZlcmVuY2UuXG4gICAgICAgICAgICAgICAgICogZm9yIG11bHRpIHNlbGVjdCwga2VlcCBvbGQgc2VsZWN0ZWQgaXRlbXMgaW4gdGFjdFxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfLmZpbmRJbmRleCh0aGlzLml0ZW1zLCByb3cpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKHJvdyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaChyb3cpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBvblJvd0RibENsaWNrOiAocm93LCBlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3dEYXRhID0gdGhpcy5hZGRSb3dJbmRleChyb3cpO1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdyb3dkYmxjbGljaycsIHskZGF0YTogcm93RGF0YSwgJGV2ZW50OiBlLCByb3c6IHJvd0RhdGF9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25Sb3dEZXNlbGVjdDogKHJvdywgZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMubXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zID0gXy5wdWxsQWxsV2l0aCh0aGlzLml0ZW1zLCBbcm93XSwgXy5pc0VxdWFsKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2dldFNlbGVjdGVkUm93cycpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Jvd2Rlc2VsZWN0JywgeyRkYXRhOiByb3csICRldmVudDogZSwgcm93fSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd0RhdGEgPSB0aGlzLmFkZFJvd0luZGV4KHJvdyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScgJiYgdW5zdXBwb3J0ZWRTdGF0ZVBlcnNpc3RlbmNlVHlwZXMuaW5kZXhPZih0aGlzLm5hdmlnYXRpb24pIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqID0ge3BhZ2U6IHRoaXMuZGF0YU5hdmlnYXRvci5kbi5jdXJyZW50UGFnZSwgaW5kZXg6IHJvd0RhdGEuJGluZGV4IC0gMX07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3aWRnZXRTdGF0ZSA9IHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5nZXRXaWRnZXRTdGF0ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfLmdldCh3aWRnZXRTdGF0ZSwgJ3NlbGVjdGVkSXRlbScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXy5yZW1vdmUod2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLCBmdW5jdGlvbihzZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF8uaXNFcXVhbChzZWxlY3RlZEl0ZW0sIG9iaik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLnJlbW92ZVdpZGdldFN0YXRlKHRoaXMsICdzZWxlY3RlZEl0ZW0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLnNldFdpZGdldFN0YXRlKHRoaXMsIHsnc2VsZWN0ZWRJdGVtJzogd2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdSZXRhaW4gU3RhdGUgaGFuZGxpbmcgb24gV2lkZ2V0ICcgKyB0aGlzLm5hbWUgKyAnIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGN1cnJlbnQgcGFnaW5hdGlvbiB0eXBlLicpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgY2FsbE9uUm93RGVzZWxlY3RFdmVudDogKHJvdywgZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdnZXRTZWxlY3RlZFJvd3MnKTtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygncm93ZGVzZWxlY3QnLCB7JGRhdGE6IHJvdywgJGV2ZW50OiBlLCByb3d9KTtcbiAgICAgICAgfSxcbiAgICAgICAgY2FsbE9uUm93Q2xpY2tFdmVudDogKHJvdywgZSkgPT4ge1xuICAgICAgICAgICAgLy8gV01TLTE4Nzc0OiBJZiB3ZSBpbnZva2UgbmF2aWdhdGlvbiBhY3Rpb24gdmFyaWFibGUgb24gcm93Y2xpY2sgY2FsbGJhY2ssIHRoZSBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJpbmcgb3V0c2lkZSBhbmd1bGFyIHpvbmUgc28gYWRkaW5nIG5nWm9uZS5ydW5cbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQ2FsbCByb3cgY2xpY2sgb25seSBpZiBjbGljayBpcyB0cmlnZ2VyZWQgYnkgdXNlclxuICAgICAgICAgICAgICAgIGlmIChlICYmIGUuaGFzT3duUHJvcGVydHkoJ29yaWdpbmFsRXZlbnQnKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dEYXRhID0gdGhpcy5hZGRSb3dJbmRleChyb3cpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Jvd2NsaWNrJywgeyRkYXRhOiByb3dEYXRhLCAkZXZlbnQ6IGUsIHJvdzogcm93RGF0YX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBjbG9zZVBvcG92ZXI6IGNsb3NlUG9wb3ZlcixcbiAgICAgICAgb25Db2x1bW5TZWxlY3Q6IChjb2wsIGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2dldFNlbGVjdGVkQ29sdW1ucycpO1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdjb2x1bW5zZWxlY3QnLCB7JGRhdGE6IGNvbCwgJGV2ZW50OiBlfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQ29sdW1uRGVzZWxlY3Q6IChjb2wsIGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2dldFNlbGVjdGVkQ29sdW1ucycpO1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdjb2x1bW5kZXNlbGVjdCcsIHskZGF0YTogY29sLCAkZXZlbnQ6IGV9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25IZWFkZXJDbGljazogKGNvbCwgZSkgPT4ge1xuICAgICAgICAgICAgLy8gaWYgb25Tb3J0IGZ1bmN0aW9uIGlzIHJlZ2lzdGVyZWQgaW52b2tlIGl0IHdoZW4gdGhlIGNvbHVtbiBoZWFkZXIgaXMgY2xpY2tlZFxuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdoZWFkZXJjbGljaycsIHskZXZlbnQ6IGUsICRkYXRhOiBjb2wsIGNvbHVtbjogY29sfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUm93RGVsZXRlOiAocm93LCBjYW5jZWxSb3dEZWxldGVDYWxsYmFjaywgZSwgY2FsbEJhY2ssIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVSZWNvcmQoXy5leHRlbmQoe30sIG9wdGlvbnMsIHtyb3csICdjYW5jZWxSb3dEZWxldGVDYWxsYmFjayc6IGNhbmNlbFJvd0RlbGV0ZUNhbGxiYWNrLCAnZXZ0JzogZSwgJ2NhbGxCYWNrJzogY2FsbEJhY2t9KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25Sb3dJbnNlcnQ6IChyb3csIGUsIGNhbGxCYWNrLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluc2VydFJlY29yZChfLmV4dGVuZCh7fSwgb3B0aW9ucywge3JvdywgZXZlbnQ6IGUsICdjYWxsQmFjayc6IGNhbGxCYWNrfSkpO1xuICAgICAgICB9LFxuICAgICAgICBiZWZvcmVSb3dVcGRhdGU6IChyb3csIGV2ZW50TmFtZT8pID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9saXZlVGFibGVQYXJlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9saXZlVGFibGVQYXJlbnQudXBkYXRlUm93KHJvdywgZXZlbnROYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucHJldkRhdGEgPSBnZXRDbG9uZWRPYmplY3Qocm93KTtcbiAgICAgICAgfSxcbiAgICAgICAgYWZ0ZXJSb3dVcGRhdGU6IChyb3csIGUsIGNhbGxCYWNrLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVJlY29yZChfLmV4dGVuZCh7fSwgb3B0aW9ucywge3JvdywgJ3ByZXZEYXRhJzogdGhpcy5wcmV2RGF0YSwgJ2V2ZW50JzogZSwgJ2NhbGxCYWNrJzogY2FsbEJhY2t9KSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQmVmb3JlUm93VXBkYXRlOiAocm93LCBlLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVyb3d1cGRhdGUnLCB7JGV2ZW50OiBlLCAkZGF0YTogcm93LCByb3csIG9wdGlvbnM6IG9wdGlvbnN9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25CZWZvcmVSb3dJbnNlcnQ6IChyb3csIGUsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZXJvd2luc2VydCcsIHskZXZlbnQ6IGUsICRkYXRhOiByb3csIHJvdywgb3B0aW9uczogb3B0aW9uc30pO1xuICAgICAgICB9LFxuICAgICAgICBvbkJlZm9yZVJvd0RlbGV0ZTogKHJvdywgZSwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm93RGF0YSA9IHRoaXMuYWRkUm93SW5kZXgocm93KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZXJvd2RlbGV0ZScsIHskZXZlbnQ6IGUsIHJvdzogcm93RGF0YSwgb3B0aW9uczogb3B0aW9uc30pO1xuICAgICAgICB9LFxuICAgICAgICBvbkZvcm1SZW5kZXI6ICgkcm93LCBlLCBvcGVyYXRpb24sIGFsd2F5c05ld1JvdykgPT4ge1xuICAgICAgICAgICAgY29uc3Qgd2lkZ2V0ID0gYWx3YXlzTmV3Um93ID8gJ2lubGluZUluc3RhbmNlTmV3JyA6ICdpbmxpbmVJbnN0YW5jZSc7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1XaWRnZXRzID0ge307XG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZERlZnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29sW3dpZGdldF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybVdpZGdldHNbY29sLmZpZWxkXSA9IGNvbFt3aWRnZXRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkaW5nIGZvcm13aWRnZXRzIHRvIHRoZSBjb250ZXh0IGZvciBpbmxpbmVpbnN0YW5jZSB3aWRnZXQgd2hlbiBmaWVsZERlZnMgd2VyZSByZWFkeVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbFt3aWRnZXRdLmNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xbd2lkZ2V0XS5jb250ZXh0LmZvcm1XaWRnZXRzID0gdGhpcy5mb3JtV2lkZ2V0cztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RGlzYWJsZWRPbkZpZWxkKG9wZXJhdGlvbiwgY29sLCB3aWRnZXQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdmb3JtcmVuZGVyJywgeyRldmVudDogZSwgZm9ybVdpZGdldHM6IHRoaXMuZm9ybVdpZGdldHMsICRvcGVyYXRpb246IG9wZXJhdGlvbn0pO1xuICAgICAgICAgICAgfSwgMjUwKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25CZWZvcmVGb3JtUmVuZGVyOiAocm93LCBlLCBvcGVyYXRpb24pID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZWZvcm1yZW5kZXInLCB7JGV2ZW50OiBlLCByb3csICRvcGVyYXRpb246IG9wZXJhdGlvbn0pO1xuICAgICAgICB9LFxuICAgICAgICByZWdpc3RlclJvd05nQ2xhc3NXYXRjaGVyOiAocm93RGF0YSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5yb3duZ2NsYXNzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5nZXRDbG9uZWRSb3dPYmplY3Qocm93RGF0YSk7XG4gICAgICAgICAgICBjb25zdCB3YXRjaE5hbWUgPSBgJHt0aGlzLndpZGdldElkfV9yb3dOZ0NsYXNzXyR7aW5kZXh9YDtcbiAgICAgICAgICAgICR1bndhdGNoKHdhdGNoTmFtZSk7XG4gICAgICAgICAgICAvL1tUb2RvLUNTUF06IGdlbmVyYXRlIHdhdGNoZXIgZXhwciBpbiBwYWdlIGlmIHJvd25nY2xhc3MgYXR0ciBpcyBwcmVzZW50IGZvciB0YWJsZVxuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigkd2F0Y2godGhpcy5yb3duZ2NsYXNzLCB0aGlzLnZpZXdQYXJlbnQsIHtyb3d9LCAobnYsIG92KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2FwcGx5Um93TmdDbGFzcycsIGdldENvbmRpdGlvbmFsQ2xhc3Nlcyhudiwgb3YpLCBpbmRleCk7XG4gICAgICAgICAgICB9LCB3YXRjaE5hbWUpKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVnaXN0ZXJDb2xOZ0NsYXNzV2F0Y2hlcjogKHJvd0RhdGEsIGNvbERlZiwgcm93SW5kZXgsIGNvbEluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWNvbERlZlsnY29sLW5nLWNsYXNzJ10pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldENsb25lZFJvd09iamVjdChyb3dEYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IHdhdGNoTmFtZSA9IGAke3RoaXMud2lkZ2V0SWR9X2NvbE5nQ2xhc3NfJHtyb3dJbmRleH1fJHtjb2xJbmRleH1gO1xuICAgICAgICAgICAgJHVud2F0Y2god2F0Y2hOYW1lKTtcbiAgICAgICAgICAgIC8vW1RvZG8tQ1NQXTogZ2VuZXJhdGUgd2F0Y2hlciBleHByIGluIHBhZ2UgaWYgY29sLW5nLWNsYXNzIGF0dHIgaXMgcHJlc2VudCBmb3IgdGFibGVcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoJHdhdGNoKGNvbERlZlsnY29sLW5nLWNsYXNzJ10sIHRoaXMudmlld1BhcmVudCwge3Jvd30sIChudiwgb3YpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnYXBwbHlDb2xOZ0NsYXNzJywgZ2V0Q29uZGl0aW9uYWxDbGFzc2VzKG52LCBvdiksIHJvd0luZGV4LCBjb2xJbmRleCk7XG4gICAgICAgICAgICB9LCB3YXRjaE5hbWUpKTtcbiAgICAgICAgfSxcbiAgICAgICAgY2xlYXJDdXN0b21FeHByZXNzaW9uOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbUV4cHJWaWV3UmVmLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbUV4cHJDb21waWxlZFRsID0ge307XG4gICAgICAgICAgICB0aGlzLmN1c3RvbUV4cHJDb21waWxlZFN1bW1hcnlUbCA9IHt9O1xuICAgICAgICB9LFxuICAgICAgICBjbGVhclJvd0RldGFpbEV4cHJlc3Npb246ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucm93RGV0YWlsVmlld1JlZi5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5yb3dEZWZNYXAgPSB7fTtcbiAgICAgICAgICAgIHRoaXMucm93RGVmSW5zdGFuY2VzID0ge307XG4gICAgICAgIH0sXG4gICAgICAgIGdlbmVyYXRlQ3VzdG9tRXhwcmVzc2lvbnM6IChyb3dEYXRhLCBpbmRleCwgc3VtbWFyeVJvdz8pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ2V0Q2xvbmVkUm93T2JqZWN0KHJvd0RhdGEpO1xuICAgICAgICAgICAgY29uc3QgY29tcGlsZVRlbXBsYXRlID0gKHRtcGwpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRtcGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBjb2xEZWYgPSB7fTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICAgICAgICAgICAgICByb3csXG4gICAgICAgICAgICAgICAgICAgIGNvbERlZlxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRFdmVudHNUb0NvbnRleHQoY29udGV4dCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VzdG9tRXhwclZpZXcgPSB0aGlzLmN1c3RvbUV4cHJWaWV3UmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0bXBsLCBjb250ZXh0KTtcbiAgICAgICAgICAgICAgICBjb25zdCByb290Tm9kZSA9IGN1c3RvbUV4cHJWaWV3LnJvb3ROb2Rlc1swXTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSByb290Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29sLWlkZW50aWZpZXInKTtcbiAgICAgICAgICAgICAgICBfLmV4dGVuZChjb2xEZWYsIHRoaXMuY29sdW1uc1tmaWVsZE5hbWVdKTtcbiAgICAgICAgICAgICAgICBpZiAoIXN1bW1hcnlSb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXN0b21FeHByQ29tcGlsZWRUbFtmaWVsZE5hbWUgKyBpbmRleF0gPSByb290Tm9kZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbUV4cHJDb21waWxlZFN1bW1hcnlUbFtmaWVsZE5hbWUgKyBpbmRleF0gPSByb290Tm9kZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNkeW5hbWljdGFibGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpZWxkRGVmcy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBpbGVUZW1wbGF0ZShjb2wuY3VzdG9tRXhwclRtcGwpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEZvciBhbGwgdGhlIGNvbHVtbnMgaW5zaWRlIHRoZSB0YWJsZSwgZ2VuZXJhdGUgdGhlIGN1c3RvbSBleHByZXNzaW9uXG4gICAgICAgICAgICB0aGlzLmN1c3RvbUV4cHJUbXBsLmZvckVhY2goY29tcGlsZVRlbXBsYXRlLmJpbmQodGhpcykpO1xuICAgICAgICB9LFxuICAgICAgICBnZW5lcmF0ZVJvd0V4cGFuc2lvbkNlbGw6IChyb3dEYXRhLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5nZXRDbG9uZWRSb3dPYmplY3Qocm93RGF0YSk7XG4gICAgICAgICAgICAvLyBGb3IgYWxsIHRoZSBjb2x1bW5zIGluc2lkZSB0aGUgdGFibGUsIGdlbmVyYXRlIHRoZSBpbmxpbmUgd2lkZ2V0XG4gICAgICAgICAgICB0aGlzLnJvd0V4cGFuc2lvbkFjdGlvblRtcGwuZm9yRWFjaCgodG1wbCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucm93RXhwYW5zaW9uQWN0aW9uVGxbaW5kZXhdID0gdGhpcy5yb3dFeHBhbnNpb25BY3Rpb25WaWV3UmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0bXBsLCB7cm93fSkucm9vdE5vZGVzO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldFJvd0V4cGFuc2lvbkFjdGlvbjogKGluZGV4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb3dFeHBhbnNpb25BY3Rpb25UbFtpbmRleF07XG4gICAgICAgIH0sXG4gICAgICAgIGdlbmVyYXRlUm93RGV0YWlsVmlldzogKCRldmVudCwgcm93RGF0YSwgcm93SWQsICR0YXJnZXQsICRvdmVybGF5LCBjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5nZXRDbG9uZWRSb3dPYmplY3Qocm93RGF0YSk7XG4gICAgICAgICAgICBjb25zdCByb3dEZWYgPSBnZXRDbG9uZWRPYmplY3QodGhpcy5yb3dEZWYpO1xuICAgICAgICAgICAgaWYgKHRoaXMucm93SW5zdGFuY2UuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3Jlcm93ZXhwYW5kJywgeyRldmVudCwgJGRhdGE6IHJvd0RlZiwgcm93fSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyb3dEZWYuY29udGVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEV4cGFuZCB0aGUgcm93IGRldGFpbFxuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIC8vIFJvdyBpcyBhbHJlYWR5IHJlbmRlcmVkLiBSZXR1cm4gaGVyZVxuICAgICAgICAgICAgaWYgKHRoaXMucm93RGVmTWFwW3Jvd0lkXSAmJiB0aGlzLnJvd0RlZk1hcFtyb3dJZF0uY29udGVudCA9PT0gcm93RGVmLmNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvd0luc3RhbmNlLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Jvd2V4cGFuZCcsIHskZXZlbnQsIHJvdywgJGRhdGE6IHRoaXMucm93RGVmSW5zdGFuY2VzW3Jvd0lkXX0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucm93RGVmTWFwW3Jvd0lkXSA9IHJvd0RlZjtcbiAgICAgICAgICAgICR0YXJnZXQuZW1wdHkoKTtcbiAgICAgICAgICAgICR0YXJnZXQuaGlkZSgpO1xuICAgICAgICAgICAgJG92ZXJsYXkuc2hvdygpO1xuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICAgICAgICByb3dEZWYsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckxvYWQ6ICh3aWRnZXQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdmVybGF5LmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0LnNob3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0RlZkluc3RhbmNlc1tyb3dJZF0gPSB3aWRnZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dJbnN0YW5jZS5pbnZva2VFdmVudENhbGxiYWNrKCdyb3dleHBhbmQnLCB7JGV2ZW50LCByb3csICRkYXRhOiB3aWRnZXR9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgICAgICAgICAgIH19O1xuICAgICAgICAgICAgY29uc3Qgcm9vdE5vZGUgPSB0aGlzLnJvd0RldGFpbFZpZXdSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMucm93RXhwYW5zaW9uVG1wbCwgY29udGV4dCkucm9vdE5vZGVzWzBdO1xuICAgICAgICAgICAgJHRhcmdldFswXS5hcHBlbmRDaGlsZChyb290Tm9kZSk7XG4gICAgICAgICAgICAkYXBwRGlnZXN0KCk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQmVmb3JlUm93Q29sbGFwc2U6ICgkZXZlbnQsIHJvdywgcm93SWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvd0luc3RhbmNlLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZXJvd2NvbGxhcHNlJywgeyRldmVudCwgcm93LCAkZGF0YTogdGhpcy5yb3dEZWZJbnN0YW5jZXNbcm93SWRdfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUm93Q29sbGFwc2U6ICgkZXZlbnQsIHJvdykgPT4ge1xuICAgICAgICAgICAgdGhpcy5yb3dJbnN0YW5jZS5pbnZva2VFdmVudENhbGxiYWNrKCdyb3djb2xsYXBzZScsIHskZXZlbnQsIHJvd30pO1xuICAgICAgICB9LFxuICAgICAgICBnZXRDdXN0b21FeHByZXNzaW9uOiAoZmllbGROYW1lLCBpbmRleCwgc3VtbWFyeVJvdz8pID0+IHtcbiAgICAgICAgICAgIGxldCBjdXN0b21FeHByZXNzaW9uO1xuICAgICAgICAgICAgaWYgKCFzdW1tYXJ5Um93KSB7XG4gICAgICAgICAgICAgICAgY3VzdG9tRXhwcmVzc2lvbiA9IHRoaXMuY3VzdG9tRXhwckNvbXBpbGVkVGxbZmllbGROYW1lICsgaW5kZXhdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdXN0b21FeHByZXNzaW9uID0gdGhpcy5jdXN0b21FeHByQ29tcGlsZWRTdW1tYXJ5VGxbZmllbGROYW1lICsgaW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1c3RvbUV4cHJlc3Npb24gfHwgJyc7XG4gICAgICAgIH0sXG4gICAgICAgIGNsZWFyUm93QWN0aW9uczogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yb3dBY3Rpb25zVmlld1JlZi5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5yb3dBY3Rpb25zQ29tcGlsZWRUbCA9IHt9O1xuICAgICAgICAgICAgdGhpcy5yb3dFeHBhbnNpb25BY3Rpb25WaWV3UmVmLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLnJvd0V4cGFuc2lvbkFjdGlvblRsID0ge307XG4gICAgICAgIH0sXG4gICAgICAgIGdlbmVyYXRlUm93QWN0aW9uczogKHJvd0RhdGEsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldENsb25lZFJvd09iamVjdChyb3dEYXRhKTtcbiAgICAgICAgICAgIHRoaXMucm93QWN0aW9uc0NvbXBpbGVkVGxbaW5kZXhdID0gW107XG4gICAgICAgICAgICAvLyBGb3IgYWxsIHRoZSBjb2x1bW5zIGluc2lkZSB0aGUgdGFibGUsIGdlbmVyYXRlIHRoZSBpbmxpbmUgd2lkZ2V0XG4gICAgICAgICAgICB0aGlzLnJvd0FjdGlvblRtcGwuZm9yRWFjaCgodG1wbCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucm93QWN0aW9uc0NvbXBpbGVkVGxbaW5kZXhdLnB1c2goLi4udGhpcy5yb3dBY3Rpb25zVmlld1JlZi5jcmVhdGVFbWJlZGRlZFZpZXcodG1wbCwge3Jvd30pLnJvb3ROb2Rlcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0Um93QWN0aW9uOiAoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvd0FjdGlvbnNDb21waWxlZFRsW2luZGV4XTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2VuZXJhdGVJbmxpbmVFZGl0Um93OiAocm93RGF0YSwgYWx3YXlzTmV3Um93KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldENsb25lZFJvd09iamVjdChyb3dEYXRhKTtcbiAgICAgICAgICAgIGlmIChhbHdheXNOZXdSb3cpIHtcbiAgICAgICAgICAgICAgICAvLyBDbGVhciB0aGUgdmlldyBjb250YWluZXIgcmVmXG4gICAgICAgICAgICAgICAgdGhpcy5pbmxpbmVFZGl0TmV3Vmlld1JlZi5jbGVhcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5saW5lTmV3Q29tcGxpZWRUbCA9IHt9O1xuICAgICAgICAgICAgICAgIC8vIEZvciBhbGwgdGhlIGNvbHVtbnMgaW5zaWRlIHRoZSB0YWJsZSwgZ2VuZXJhdGUgdGhlIGlubGluZSB3aWRnZXRcbiAgICAgICAgICAgICAgICB0aGlzLmlubGluZVdpZGdldE5ld1RtcGwuZm9yRWFjaCh0bXBsID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpZWxkTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbnRyb2w6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uZ2Zvcm0uY29udHJvbHNbZmllbGROYW1lICsgJ19uZXcnXSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRWYWxpZGF0aW9uTWVzc2FnZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnNbZmllbGROYW1lXSAmJiB0aGlzLmNvbHVtbnNbZmllbGROYW1lXS52YWxpZGF0aW9ubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRQZW5kaW5nU3Bpbm5lclN0YXR1c05ldzogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnNbZmllbGROYW1lXSAmJiB0aGlzLmNvbHVtbnNbZmllbGROYW1lXS5zaG93UGVuZGluZ1NwaW5uZXJOZXc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvb3ROb2RlID0gdGhpcy5pbmxpbmVFZGl0TmV3Vmlld1JlZi5jcmVhdGVFbWJlZGRlZFZpZXcodG1wbCwgY29udGV4dCkucm9vdE5vZGVzWzBdO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWUgPSByb290Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29sLWlkZW50aWZpZXInKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmxpbmVOZXdDb21wbGllZFRsW2ZpZWxkTmFtZV0gPSByb290Tm9kZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyRm9ybSh0cnVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDbGVhciB0aGUgdmlldyBjb250YWluZXIgcmVmXG4gICAgICAgICAgICB0aGlzLmlubGluZUVkaXRWaWV3UmVmLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLmlubGluZUNvbXBsaWVkVGwgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJGb3JtKCk7XG4gICAgICAgICAgICAvLyBGb3IgYWxsIHRoZSBjb2x1bW5zIGluc2lkZSB0aGUgdGFibGUsIGdlbmVyYXRlIHRoZSBpbmxpbmUgd2lkZ2V0XG4gICAgICAgICAgICB0aGlzLmlubGluZVdpZGdldFRtcGwuZm9yRWFjaCh0bXBsID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZmllbGROYW1lO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q29udHJvbDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmdmb3JtLmNvbnRyb2xzW2ZpZWxkTmFtZV0gfHwge307XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGdldFZhbGlkYXRpb25NZXNzYWdlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5zW2ZpZWxkTmFtZV0gJiYgdGhpcy5jb2x1bW5zW2ZpZWxkTmFtZV0udmFsaWRhdGlvbm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGdldFBlbmRpbmdTcGlubmVyU3RhdHVzOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5zW2ZpZWxkTmFtZV0gJiYgdGhpcy5jb2x1bW5zW2ZpZWxkTmFtZV0uc2hvd1BlbmRpbmdTcGlubmVyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3Qgcm9vdE5vZGUgPSB0aGlzLmlubGluZUVkaXRWaWV3UmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0bXBsLCBjb250ZXh0KS5yb290Tm9kZXNbMF07XG4gICAgICAgICAgICAgICAgZmllbGROYW1lID0gcm9vdE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbC1pZGVudGlmaWVyJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmxpbmVDb21wbGllZFRsW2ZpZWxkTmFtZV0gPSByb290Tm9kZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBnZXRJbmxpbmVFZGl0V2lkZ2V0OiAoZmllbGROYW1lLCB2YWx1ZSwgYWx3YXlzTmV3Um93KSA9PiB7XG4gICAgICAgICAgICBpZiAoYWx3YXlzTmV3Um93KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZXRGaWVsZFZhbHVlKGZpZWxkTmFtZSArICdfbmV3JywgdmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlubGluZU5ld0NvbXBsaWVkVGxbZmllbGROYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0RmllbGRWYWx1ZShmaWVsZE5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlubGluZUNvbXBsaWVkVGxbZmllbGROYW1lXTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0RmllbGRWYWx1ZTogKGZpZWxkTmFtZSwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLm5nZm9ybS5jb250cm9scyAmJiB0aGlzLm5nZm9ybS5jb250cm9sc1tmaWVsZE5hbWVdO1xuICAgICAgICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICBjb250cm9sLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ2V0RmllbGRWYWx1ZTogZmllbGROYW1lID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLm5nZm9ybS5jb250cm9scyAmJiB0aGlzLm5nZm9ybS5jb250cm9sc1tmaWVsZE5hbWVdO1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2wgJiYgY29udHJvbC52YWx1ZTtcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBmdW5jdGlvbiB0byBhZGQgbG9hZCBtb3JlIGJ1dHRvbiB0byB0YWJsZVxuICAgICAgICBhZGRMb2FkTW9yZUJ0bjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdhZGRMb2FkTW9yZUJ0bicsIHRoaXMub25kZW1hbmRtZXNzYWdlLCB0aGlzLmxvYWRpbmdkYXRhbXNnLCAoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldElzTmV4dFBhZ2VEYXRhKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZXRJc0RhdGFVcGRhdGVkQnlVc2VyKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWRPcHRpb25zLm1vZGUgPT09ICd2aWV3bGVzcycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3IubmF2aWdhdGVQYWdlKCdmaXJzdCcsICRldmVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5tb2RlID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5uYXZpZ2F0ZVBhZ2UoJ25leHQnLCAkZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgdGhpcy5pbmZTY3JvbGwpO1xuICAgICAgICB9LFxuICAgICAgICAvLyBmdW5jdGlvbiB0byBiaW5kIHNjcm9sbCBldmVudFxuICAgICAgICBiaW5kU2Nyb2xsRXZ0OiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZ3JpZERhdGEgJiYgdGhpcy5fZ3JpZERhdGEubGVuZ3RoICYmIHRoaXMuaW5mU2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgLy8gc21vb3Roc2Nyb2xsIGV2ZW50cyB3aWxsIGJlIGJpbmRlZC5cbiAgICAgICAgICAgICAgICAvLyBBZGRlZCB0aW1lb3V0IGFzIHRoZSB0YWJsZSBodG1sIGlzIHJlbmRlcmVkIGF0IHJ1bnRpbWVcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5iaW5kU2Nyb2xsRXZ0KHRoaXMsICd0Ym9keScsIERFQk9VTkNFX1RJTUVTLlBBR0lOQVRJT05fREVCT1VOQ0VfVElNRSk7XG4gICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdlbmVyYXRlRmlsdGVyUm93OiAoKSA9PiB7XG4gICAgICAgICAgICAvLyBDbGVhciB0aGUgdmlldyBjb250YWluZXIgcmVmXG4gICAgICAgICAgICB0aGlzLmZpbHRlclZpZXdSZWYuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMucm93RmlsdGVyQ29tcGxpZWRUbCA9IHt9O1xuICAgICAgICAgICAgLy8gRm9yIGFsbCB0aGUgY29sdW1ucyBpbnNpZGUgdGhlIHRhYmxlLCBnZW5lcmF0ZSB0aGUgY29tcGlsZWQgZmlsdGVyIHRlbXBsYXRlXG4gICAgICAgICAgICB0aGlzLmZpbHRlclRtcGwuZm9yRWFjaCgodG1wbCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvb3ROb2RlID0gdGhpcy5maWx0ZXJWaWV3UmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0bXBsLCB7XG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZUZuOiB0aGlzLm9uUm93RmlsdGVyQ2hhbmdlLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ6IChmaWVsZE5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVtcHR5TWF0Y2hNb2Rlcy5pbmRleE9mKHRoaXMucm93RmlsdGVyW2ZpZWxkTmFtZV0gJiYgdGhpcy5yb3dGaWx0ZXJbZmllbGROYW1lXS5tYXRjaE1vZGUpID4gLTE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KS5yb290Tm9kZXNbMF07XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dGaWx0ZXJDb21wbGllZFRsW3Jvb3ROb2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1jb2wtaWRlbnRpZmllcicpXSA9IHJvb3ROb2RlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldEZpbHRlcldpZGdldDogKGZpZWxkTmFtZSkgPT4ge1xuICAgICAgICAgICAgLy8gTW92ZSB0aGUgZ2VuZXJhdGVkIGZpbHRlciB0ZW1wbGF0ZSB0byB0aGUgZmlsdGVyIHJvd1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm93RmlsdGVyQ29tcGxpZWRUbFtmaWVsZE5hbWVdO1xuICAgICAgICB9LFxuICAgICAgICBzZXRHcmlkRWRpdE1vZGU6ICh2YWwpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0dyaWRFZGl0TW9kZSA9IHZhbDtcbiAgICAgICAgICAgICAgICAkYXBwRGlnZXN0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0R3JpZFN0YXRlOiAodmFsKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHZhbCA9PT0gJ2xvYWRpbmcnO1xuICAgICAgICB9LFxuICAgICAgICAvKlxuICAgICAgICAgICAgc2V0IGFjdGlvblJvd0luZGV4IGFuZCBhY3Rpb25Sb3dQYWdlIHZhbHVlc1xuICAgICAgICAgICAgYWN0aW9uUm93SW5kZXggd2lsbCBoYXZlIHRoZSByb3cgaW5kZXggaW4gdGhlIGRhdGFzZXQgb24gd2hpY2ggZWRpdC9kZWxldGUgb3BlcmF0aW9uIGlzIGJlaW5nIHBlcmZvcm1lZFxuICAgICAgICAgICAgYWN0aW9uUm93UGFnZSB3aWxsIGhhdmUgcGFnZSBudW1iZXIgaW4gd2hpY2ggdGhlIGFjdGlvbiByb3cgaW5kZXggaXMgcHJlc2VudFxuICAgICAgICAgKi9cbiAgICAgICAgc2V0QWN0aW9uUm93SW5kZXg6ICh2YWwpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWRPcHRpb25zLmlzTmF2VHlwZVNjcm9sbE9yT25kZW1hbmQoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uUm93SW5kZXggPSBwYXJzZUludCh2YWwpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2FjdGlvblJvd0luZGV4JywgdGhpcy5hY3Rpb25Sb3dJbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKCFfLmlzTmFOKHRoaXMuYWN0aW9uUm93SW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uUm93UGFnZSA9IE1hdGguZmxvb3IodGhpcy5hY3Rpb25Sb3dJbmRleCAvIHRoaXMucGFnZXNpemUpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignYWN0aW9uUm93UGFnZScsIHRoaXMuYWN0aW9uUm93UGFnZSB8fCB0aGlzLmdyaWRPcHRpb25zLmFjdGlvblJvd1BhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2xlYXJBY3Rpb25Sb3dJbmRleDogKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzUm93RGVsZXRlZCAmJiAodGhpcy5pbmZTY3JvbGwgfHwgdGhpcy5vbkRlbWFuZExvYWQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhckFjdGlvblJvd1ZhcnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbm9DaGFuZ2VzRGV0ZWN0ZWQ6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlTWVzc2FnZSh0cnVlLCAnaW5mbycsICdObyBDaGFuZ2VzIERldGVjdGVkJywgJycpO1xuICAgICAgICB9LFxuICAgICAgICAvLyBGdW5jdGlvbiB0byByZWRyYXcgdGhlIHdpZGdldHMgb24gcmVzaXplIG9mIGNvbHVtbnNcbiAgICAgICAgcmVkcmF3V2lkZ2V0czogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgICAgIHRyaWdnZXJGbihjb2wuaW5saW5lSW5zdGFuY2UgJiYgY29sLmlubGluZUluc3RhbmNlLnJlZHJhdyk7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckZuKGNvbC5pbmxpbmVJbnN0YW5jZU5ldyAmJiBjb2wuaW5saW5lSW5zdGFuY2VOZXcucmVkcmF3KTtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRm4oY29sLmZpbHRlckluc3RhbmNlICYmIGNvbC5maWx0ZXJJbnN0YW5jZS5yZWRyYXcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNlYXJjaEhhbmRsZXI6IHRoaXMuc2VhcmNoU29ydEhhbmRsZXIuYmluZCh0aGlzKSxcbiAgICAgICAgc29ydEhhbmRsZXI6IHRoaXMuc2VhcmNoU29ydEhhbmRsZXIuYmluZCh0aGlzKSxcbiAgICAgICAgdGltZW91dENhbGw6IChmbiwgZGVsYXkpID0+IHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZm4sIGRlbGF5KTtcbiAgICAgICAgfSxcbiAgICAgICAgcnVuSW5OZ1pvbmU6IGZuID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bihmbik7XG4gICAgICAgIH0sXG4gICAgICAgIHNhZmVBcHBseTogKCkgPT4ge1xuICAgICAgICAgICAgJGFwcERpZ2VzdCgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXRUb3VjaGVkOiAobmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3RybCA9IHRoaXMubmdmb3JtLmNvbnRyb2xzW25hbWVdO1xuICAgICAgICAgICAgaWYgKGN0cmwpIHtcbiAgICAgICAgICAgICAgICBjdHJsLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2xlYXJGb3JtOiB0aGlzLmNsZWFyRm9ybS5iaW5kKHRoaXMpLFxuICAgICAgICBjYWxsTG9hZElubGluZVdpZGdldERhdGE6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZnVsbEZpZWxkRGVmcy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKF8uaXNVbmRlZmluZWQoY29sLmlzRGF0YVNldEJvdW5kKSkge1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyRm4oY29sLmxvYWRJbmxpbmVXaWRnZXREYXRhICYmIGNvbC5sb2FkSW5saW5lV2lkZ2V0RGF0YS5iaW5kKGNvbCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAvLyBGdW5jdGlvbiB0byBhcHBseSB2YWxpZGF0b3JzIHRvIElubGluZSBmb3JtIGNvbnRyb2xzXG4gICAgICAgIGFwcGx5VmFsaWRhdGlvbnM6IChjb2wsIGFsd2F5c05ld1JvdykgPT4ge1xuICAgICAgICAgICAgaWYgKGFsd2F5c05ld1Jvdykge1xuICAgICAgICAgICAgICAgIHRyaWdnZXJGbihjb2wuYXBwbHlOZXdSb3dWYWxpZGF0aW9ucyAmJiBjb2wuYXBwbHlOZXdSb3dWYWxpZGF0aW9ucy5iaW5kKGNvbCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRm4oY29sLmFwcGx5VmFsaWRhdGlvbnMgJiYgY29sLmFwcGx5VmFsaWRhdGlvbnMuYmluZChjb2wpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gRnVuY3Rpb24gdG8gcmVtb3ZlIHZhbGlkYXRvcnMgYW5kIHNldCBmb3JtIHN0YXRlIHRvIHVudG91Y2hlZCBmb3IgaW5saW5lIGZvcm0gY29udHJvbFxuICAgICAgICByZW1vdmVWYWxpZGF0aW9uczogKGFsd2F5c05ld1JvdykgPT4ge1xuICAgICAgICAgICAgdGhpcy5mdWxsRmllbGREZWZzLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbC5yZWFkb25seSAmJiBjb2wuYmluZGluZyAhPT0gJ3Jvd09wZXJhdGlvbnMnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhbHdheXNOZXdSb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJGbihjb2wucmVtb3ZlTmV3Um93VmFsaWRhdGlvbnMgJiYgY29sLnJlbW92ZU5ld1Jvd1ZhbGlkYXRpb25zLmJpbmQoY29sKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyRm4oY29sLnJlbW92ZVZhbGlkYXRpb25zICYmIGNvbC5yZW1vdmVWYWxpZGF0aW9ucy5iaW5kKGNvbCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBfZ3JpZERhdGE7XG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRJdGVtc0V4aXN0ID0gZmFsc2U7XG4gICAgc2V0IGdyaWREYXRhKG5ld1ZhbHVlKSB7XG4gICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAvLyBGaXggZm9yIFtXTVMtMjQwMTJdOiBoaWRlIG5vIGRhdGFmb3VuZCBtc2cgd2hlbiB2YXJpYWJsZUluZmxpZ2h0IGlzIHRydWUgYW5kIGRhdGFzZXQgaXMgZW1wdHlcbiAgICAgICAgaWYgKHRoaXMudmFyaWFibGVJbmZsaWdodCAmJiBfLmlzRW1wdHkobmV3VmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YXJpYWJsZUluZmxpZ2h0ID0gZmFsc2U7XG4gICAgICAgIC8vIEZpeCBmb3IgW1dNUy0yNDEwOF06IENoYW5nZSB0aGUgc3RhdHVzIHRvIHJlYWR5IG9yIG5vZGF0YSBmb3VuZCB3aGVuIHZhcmlhYmxlSW5mbGlnaHQgaXMgZmFsc2UoYWZ0ZXIgZ2V0dGluZyB0aGUgZGF0YSlcbiAgICAgICAgaWYgKG5ld1ZhbHVlICYmIChuZXdWYWx1ZS5sZW5ndGgpID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ25vZGF0YScsIHRoaXMubm9kYXRhbWVzc2FnZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ3JlYWR5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JpZE9wdGlvbnMuaXNOYXZUeXBlU2Nyb2xsT3JPbmRlbWFuZCgpKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgdGhlIF9ncmlkRGF0YSBmaWVsZCB3aXRoIHRoZSBuZXh0IHNldCBvZiBpdGVtcyBhbmQgbW9kaWZ5IHRoZSBjdXJyZW50IHBhZ2VcbiAgICAgICAgICAgIFt0aGlzLl9ncmlkRGF0YSwgdGhpcy5jdXJyZW50UGFnZV0gPSB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnVwZGF0ZUZpZWxkc09uUGFnaW5hdGlvbih0aGlzLCBuZXdWYWx1ZSk7XG5cbiAgICAgICAgICAgIC8vIFdoZW4gZWRpdCBhY3Rpb24gaXMgcGVyZm9ybWVkIG9uIHByZXZpb3VzIHBhZ2UsIHVwZGF0ZSB0aGUgX2dyaWREYXRhIGZpZWxkIHdpdGggdGhlIG1vZGlmaWVkIHJvdyBkYXRhXG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9ucy5sYXN0QWN0aW9uUGVyZm9ybWVkID09PSB0aGlzLmdyaWRPcHRpb25zLkFDVElPTlMuRURJVCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0luZGV4ID0gXy5mbG9vcih0aGlzLmFjdGlvblJvd0luZGV4ICUgdGhpcy5wYWdlc2l6ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ3JpZERhdGEuc3BsaWNlKHRoaXMuYWN0aW9uUm93SW5kZXgsIDEgLCBuZXdWYWx1ZVtyb3dJbmRleF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignaXNMYXN0UGFnZScsICEhKHRoaXMuZGF0YU5hdmlnYXRvci5pc0Rpc2FibGVOZXh0KSk7XG4gICAgICAgICAgICAvLyBJbiBjYXNlIG9mIG9uIGRlbWFuZCBwYWdpbmF0aW9uLCBjcmVhdGUgdGhlIGxvYWQgbW9yZSBidXR0b24gb25seSBvbmNlIGFuZCBzaG93IHRoZSBidXR0b24gdW50aWwgbmV4dCBwYWdlIGlzIG5vdCBkaXNhYmxlZFxuICAgICAgICAgICAgaWYgKCF0aGlzLiRlbGVtZW50LmZpbmQoJy5vbi1kZW1hbmQtZGF0YWdyaWQnKS5sZW5ndGggJiYgIXRoaXMuZGF0YU5hdmlnYXRvci5pc0Rpc2FibGVOZXh0ICYmIHRoaXMub25EZW1hbmRMb2FkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5hZGRMb2FkTW9yZUJ0bigpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgodGhpcy5fZ3JpZERhdGEgJiYgdGhpcy5fZ3JpZERhdGEubGVuZ3RoKSAmJiAodGhpcy5kYXRhTmF2aWdhdG9yLmlzRGlzYWJsZU5leHQgfHwgIXRoaXMuaXNEYXRhTG9hZGluZykpIHtcbiAgICAgICAgICAgICAgICAvLyB3aGVuIHRoZSBuZXh0IHBhZ2UgaXMgZGlzYWJsZWQgb3Igd2hlbiB0aGUgZGF0YSBpcyBub3QgbG9hZGluZyByZW1vdmUgdGhlIGxvYWRpbmcvbG9hZCBtb3JlIGJ1dHRvbiBhY2NvcmRpbmdseVxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdoaWRlTG9hZGluZ0luZGljYXRvcicsIHRoaXMuZGF0YU5hdmlnYXRvci5pc0Rpc2FibGVOZXh0LCB0aGlzLmluZlNjcm9sbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9ncmlkRGF0YSA9IG5ld1ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdGFydFJvd0luZGV4ID0gMDtcbiAgICAgICAgbGV0IGdyaWRPcHRpb25zO1xuXG4gICAgICAgIHRoaXMuX29uQ2hhbmdlKHRoaXMuX2dyaWREYXRhKTtcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkKCk7XG5cbiAgICAgICAgaWYgKGlzRGVmaW5lZChuZXdWYWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuYmluZFNjcm9sbEV2dCgpO1xuXG4gICAgICAgICAgICAvKlNldHRpbmcgdGhlIHNlcmlhbCBubydzIG9ubHkgd2hlbiBzaG93IG5hdmlnYXRpb24gaXMgZW5hYmxlZCBhbmQgZGF0YSBuYXZpZ2F0b3IgaXMgY29tcGlsZWRcbiAgICAgICAgICAgICBhbmQgaXRzIGN1cnJlbnQgcGFnZSBpcyBzZXQgcHJvcGVybHkqL1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNOYXZpZ2F0aW9uRW5hYmxlZCgpICYmIHRoaXMuZGF0YU5hdmlnYXRvci5kbi5jdXJyZW50UGFnZSkge1xuICAgICAgICAgICAgICAgIHN0YXJ0Um93SW5kZXggPSAoKHRoaXMuZGF0YU5hdmlnYXRvci5kbi5jdXJyZW50UGFnZSAtIDEpICogKHRoaXMuZGF0YU5hdmlnYXRvci5tYXhSZXN1bHRzIHx8IDEpKSArIDE7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignc3RhcnRSb3dJbmRleCcsIHN0YXJ0Um93SW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyogSWYgY29sRGVmcyBhcmUgYXZhaWxhYmxlLCBidXQgbm90IGFscmVhZHkgc2V0IG9uIHRoZSBkYXRhZ3JpZCwgdGhlbiBzZXQgdGhlbS5cbiAgICAgICAgICAgICAqIFRoaXMgd2lsbCBoYXBwZW4gd2hpbGUgc3dpdGNoaW5nIGZyb20gbWFya3VwIHRvIGRlc2lnbiB0YWIuICovXG4gICAgICAgICAgICBncmlkT3B0aW9ucyA9IHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdnZXRPcHRpb25zJyk7XG5cbiAgICAgICAgICAgIGlmICghZ3JpZE9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghZ3JpZE9wdGlvbnMuY29sRGVmcy5sZW5ndGggJiYgdGhpcy5maWVsZERlZnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignY29sRGVmcycsIGdldENsb25lZE9iamVjdCh0aGlzLmZpZWxkRGVmcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgZGF0YSBhbmQgY29sRGVmcyBhcmUgcHJlc2VudCwgY2FsbCBvbiBiZWZvcmUgZGF0YSByZW5kZXIgZXZlbnRcbiAgICAgICAgICAgIGlmICghdGhpcy5pc2R5bmFtaWN0YWJsZSAmJiAhXy5pc0VtcHR5KG5ld1ZhbHVlKSAmJiBncmlkT3B0aW9ucy5jb2xEZWZzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3JlZGF0YXJlbmRlcicsIHskZGF0YTogdGhpcy5fZ3JpZERhdGEsICRjb2x1bW5zOiB0aGlzLmNvbHVtbnMsIGRhdGE6IHRoaXMuX2dyaWREYXRhLCBjb2x1bW5zOiB0aGlzLmNvbHVtbnN9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2RhdGEnLCBnZXRDbG9uZWRPYmplY3QodGhpcy5fZ3JpZERhdGEpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBncmlkRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dyaWREYXRhIHx8IFtdO1xuICAgIH1cblxuICAgIGdldCBzZWxlY3RlZGl0ZW0oKSB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q2xvbmVkT2JqZWN0KHRoaXMuaXRlbXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfLmlzRW1wdHkodGhpcy5pdGVtcykpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0Q2xvbmVkT2JqZWN0KHRoaXMuaXRlbXNbMF0pO1xuICAgIH1cblxuICAgIHNldCBzZWxlY3RlZGl0ZW0odmFsKSB7XG4gICAgICAgIC8vIFNlbGVjdCB0aGUgcm93cyBpbiB0aGUgdGFibGUgYmFzZWQgb24gdGhlIG5ldyBzZWxlY3RlZCBpdGVtcyBwYXNzZWRcbiAgICAgICAgdGhpcy5pdGVtcy5sZW5ndGggPSAwO1xuICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2VsZWN0Um93cycsIHZhbCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5cHJlc3MnLCBbJyRldmVudCddKSBvbktleVByZXNzICgkZXZlbnQ6IGFueSkge1xuICAgICAgICBpZiAoJGV2ZW50LndoaWNoID09PSAxMykge1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdlbnRlcmtleXByZXNzJywgeyRldmVudCwgJGRhdGE6IHRoaXMuZ3JpZERhdGF9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgaW5qOiBJbmplY3RvcixcbiAgICAgICAgcHVibGljIGZiOiBGb3JtQnVpbGRlcixcbiAgICAgICAgcHJpdmF0ZSBhcHA6IEFwcCxcbiAgICAgICAgcHJpdmF0ZSBkeW5hbWljQ29tcG9uZW50UHJvdmlkZXI6IER5bmFtaWNDb21wb25lbnRSZWZQcm92aWRlcixcbiAgICAgICAgcHJpdmF0ZSBzdGF0ZVBlcnNpc3RlbmNlOiBTdGF0ZVBlcnNpc3RlbmNlLFxuICAgICAgICBwcml2YXRlIHBhZ2luYXRpb25TZXJ2aWNlOiBQYWdpbmF0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB2aWV3cG9ydDogVmlld3BvcnQsXG4gICAgICAgIEBPcHRpb25hbCgpIHB1YmxpYyBwYXJlbnRMaXN0OiBMaXN0Q29tcG9uZW50LFxuICAgICAgICBAQXR0cmlidXRlKCdkYXRhc2V0LmJpbmQnKSBwdWJsaWMgYmluZGRhdGFzZXQsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2RhdGFzb3VyY2UuYmluZCcpIHB1YmxpYyBiaW5kZGF0YXNvdXJjZSxcbiAgICAgICAgQEF0dHJpYnV0ZSgncmVhZG9ubHlncmlkJykgcHVibGljIHJlYWRvbmx5Z3JpZCxcbiAgICAgICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgcHJpdmF0ZSB0cnVzdEFzUGlwZTogVHJ1c3RBc1BpcGVcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHLCk7XG4gICAgICAgIHN0eWxlcih0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMpO1xuXG4gICAgICAgIHRoaXMubmdmb3JtID0gZmIuZ3JvdXAoe30pO1xuICAgICAgICB0aGlzLmFkZEV2ZW50c1RvQ29udGV4dCh0aGlzLmNvbnRleHQpO1xuICAgICAgICBjb25zdCBsaXN0ZW5lcnNUb1JlbW92ZSA9IFtcbiAgICAgICAgICAgIC8vIFVwZGF0ZXMgcGFnaW5hdGlvbiwgZmlsdGVyLCBzb3J0IGV0YyBvcHRpb25zIGZvciBzZXJ2aWNlIGFuZCBjcnVkIHZhcmlhYmxlc1xuICAgICAgICAgICAgdGhpcy5hcHAuc3Vic2NyaWJlKCdjaGVjay1zdGF0ZS1wZXJzaXN0ZW5jZS1vcHRpb25zJywgb3B0aW9ucyA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGFTb3VyY2VOYW1lID0gXy5nZXQodGhpcy5kYXRhc291cmNlLCAnbmFtZScpO1xuICAgICAgICAgICAgICAgIC8vIGluIFByZWZhYnMsIHRoaXMuZGF0YXNvdXJjZSBpcyBub3QgcmVzb2x2ZWQgYXQgdGhlIHRpbWUgb2YgdmFyaWFibGUgaW52b2NhdGlvbiwgc28gYWRkaXRpb25hbCBjaGVjayBpcyByZXF1aXJlZC5cbiAgICAgICAgICAgICAgICBpZiAoIWRhdGFTb3VyY2VOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2VOYW1lID0gZXh0cmFjdERhdGFTb3VyY2VOYW1lKHRoaXMuYmluZGRhdGFzb3VyY2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXy5nZXQob3B0aW9ucywgJ3ZhcmlhYmxlLm5hbWUnKSAhPT0gZGF0YVNvdXJjZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcGFnZUxvYWQgJiYgdGhpcy5nZXRDb25maWd1cmVkU3RhdGUoKSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhZ2VMb2FkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdpZGdldFN0YXRlID0gdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLmdldFdpZGdldFN0YXRlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAod2lkZ2V0U3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLmhhbmRsZVN0YXRlUGFyYW1zKHdpZGdldFN0YXRlLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfSAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdzZWxlY3RGaXJzdFJvdycsIHRoaXMuZ3JpZGZpcnN0cm93c2VsZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuXG4gICAgICAgICAgICAvLyBTaG93IGxvYWRpbmcgc3RhdHVzIGJhc2VkIG9uIHRoZSB2YXJpYWJsZSBsaWZlIGN5Y2xlXG4gICAgICAgICAgICB0aGlzLmFwcC5zdWJzY3JpYmUoJ3RvZ2dsZS12YXJpYWJsZS1zdGF0ZScsIG9wdGlvbnMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGFzb3VyY2UgJiYgdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uSVNfQVBJX0FXQVJFKSAmJiBpc0RhdGFTb3VyY2VFcXVhbChvcHRpb25zLnZhcmlhYmxlLCB0aGlzLmRhdGFzb3VyY2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wYWdlTG9hZCAmJiB0aGlzLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhZ2VMb2FkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3aWRnZXRTdGF0ZSA9IHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5nZXRXaWRnZXRTdGF0ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aWRnZXRTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLmhhbmRsZVN0YXRlUGFyYW1zKHdpZGdldFN0YXRlLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignc2VsZWN0Rmlyc3RSb3cnLCB0aGlzLmdyaWRmaXJzdHJvd3NlbGVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaXNEZWZpbmVkKHRoaXMudmFyaWFibGVJbmZsaWdodCkgPyB0aGlzLmRlYm91bmNlZEhhbmRsZUxvYWRpbmcob3B0aW9ucykgOiB0aGlzLmhhbmRsZUxvYWRpbmcob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG5cbiAgICAgICAgICAgIHRoaXMuYXBwLnN1YnNjcmliZSgnc2V0dXAtY3VkLWxpc3RlbmVyJywgcGFyYW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm5hbWUgIT09IHBhcmFtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5faXNEZXBlbmRlbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtQ2hhbmdlJFxuICAgICAgICAgICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMjUwKSlcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSh0aGlzLnRyaWdnZXJXTUV2ZW50LmJpbmQodGhpcykpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcblxuICAgICAgICBsaXN0ZW5lcnNUb1JlbW92ZS5mb3JFYWNoKCBsID0+IHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIobCkgKTtcblxuICAgICAgICB0aGlzLmRlbGV0ZW9rdGV4dCA9IHRoaXMuYXBwTG9jYWxlLkxBQkVMX09LO1xuICAgICAgICB0aGlzLmRlbGV0ZWNhbmNlbHRleHQgPSB0aGlzLmFwcExvY2FsZS5MQUJFTF9DQU5DRUw7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyQ29udGVudEluaXQoKTtcbiAgICAgICAgdGhpcy5oZWFkZXJDb25maWcgPSB0aGlzLmhlYWRlckNvbmZpZy5maWx0ZXIodGhpcy5maWx0ZXJFbXB0eVZhbHVlcy5iaW5kKHRoaXMpKTtcbiAgICAgICAgXy5yZW1vdmUodGhpcy5maWVsZERlZnMsIGYgPT4gZiA9PT0gdW5kZWZpbmVkKTtcbiAgICAgICAgY29uc3QgcnVuTW9kZUluaXRpYWxQcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgc2hvd3Jvd2luZGV4OiAnc2hvd1Jvd0luZGV4JyxcbiAgICAgICAgICAgIG11bHRpc2VsZWN0OiAnbXVsdGlzZWxlY3QnLFxuICAgICAgICAgICAgcmFkaW9zZWxlY3Q6ICdzaG93UmFkaW9Db2x1bW4nLFxuICAgICAgICAgICAgZmlsdGVybnVsbHJlY29yZHM6ICdmaWx0ZXJOdWxsUmVjb3JkcycsXG4gICAgICAgICAgICBlbmFibGVzb3J0OiAnZW5hYmxlU29ydCcsXG4gICAgICAgICAgICBzaG93aGVhZGVyOiAnc2hvd0hlYWRlcicsXG4gICAgICAgICAgICBlbmFibGVjb2x1bW5zZWxlY3Rpb246ICdlbmFibGVDb2x1bW5TZWxlY3Rpb24nLFxuICAgICAgICAgICAgc2hvd25ld3JvdzogJ3Nob3dOZXdSb3cnLFxuICAgICAgICAgICAgZ3JpZGZpcnN0cm93c2VsZWN0OiAnc2VsZWN0Rmlyc3RSb3cnXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMuX2xpdmVUYWJsZVBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5pc1BhcnRPZkxpdmVHcmlkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnJlYWRvbmx5Z3JpZCB8fCAhdGhpcy5lZGl0bW9kZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucmVhZG9ubHlncmlkID09PSAndHJ1ZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRtb2RlID0gJyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzUGFydE9mTGl2ZUdyaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0bW9kZSA9IHRoaXMuaXNQYXJ0T2ZMaXZlR3JpZC5mb3JtbGF5b3V0ID09PSAnaW5saW5lJyA/IEVESVRfTU9ERS5GT1JNIDogRURJVF9NT0RFLkRJQUxPRztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRtb2RlID0gdGhpcy5yZWFkb25seWdyaWQgPyBFRElUX01PREUuSU5MSU5FIDogJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5jb2xEZWZzID0gdGhpcy5mdWxsRmllbGREZWZzO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnJvd0FjdGlvbnMgPSB0aGlzLnJvd0FjdGlvbnM7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuaGVhZGVyQ29uZmlnID0gdGhpcy5oZWFkZXJDb25maWc7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMucm93Q2xhc3MgPSB0aGlzLnJvd2NsYXNzO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmVkaXRtb2RlID0gdGhpcy5lZGl0bW9kZTtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5mb3JtUG9zaXRpb24gPSB0aGlzLmZvcm1wb3NpdGlvbjtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5maWx0ZXJtb2RlID0gdGhpcy5maWx0ZXJtb2RlO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNlYXJjaExhYmVsID0gdGhpcy5zZWFyY2hsYWJlbDtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5pc01vYmlsZSA9IGlzTW9iaWxlKCk7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMubmFtZSA9IHRoaXMubmFtZTtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZWN1cml0eVV0aWxzLnBpcGVUcmFuc2Zvcm0gPSB0aGlzLnRydXN0QXNQaXBlO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLm5hdmlnYXRpb24gPSB0aGlzLm5hdmlnYXRpb247XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuaXNkeW5hbWljdGFibGUgPSB0aGlzLmlzZHluYW1pY3RhYmxlO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNob3d2aWV3bGVzc2J1dHRvbiA9IHRoaXMuc2hvd3ZpZXdsZXNzYnV0dG9uO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLm9uZGVtYW5kbWVzc2FnZSA9IHRoaXMub25kZW1hbmRtZXNzYWdlO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnZpZXdsZXNzbWVzc2FnZSA9IHRoaXMudmlld2xlc3NtZXNzYWdlO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmxvYWRpbmdkYXRhbXNnID0gdGhpcy5sb2FkaW5nZGF0YW1zZztcblxuICAgICAgICAvLyBXaGVuIGxvYWRvbmRlbWFuZCBwcm9wZXJ0eSBpcyBlbmFibGVkKGRlZmVybG9hZD1cInRydWVcIikgYW5kIHNob3cgaXMgdHJ1ZSwgb25seSB0aGUgY29sdW1uIHRpdGxlcyBvZiB0aGUgZGF0YXRhYmxlIGFyZSByZW5kZXJlZCwgdGhlIGRhdGEoYm9keSBvZiB0aGUgZGF0YXRhYmxlKSBpcyBub3QgYXQgYWxsIHJlbmRlcmVkLlxuICAgICAgICAvLyBCZWNhdXNlIHRoZSBncmlkZGF0YSBpcyBzZXR0aW5nIGJlZm9yZSB0aGUgZGF0YXRhYmxlIGRvbSBpcyByZW5kZXJlZCBidXQgd2UgYXJlIHNlbmRpbmcgZW1wdHkgZGF0YSB0byB0aGUgZGF0YXRhYmxlLlxuICAgICAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLmdyaWREYXRhKSkge1xuICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5kYXRhID0gZ2V0Q2xvbmVkT2JqZWN0KHRoaXMuZ3JpZERhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMubWVzc2FnZXMgPSB7XG4gICAgICAgICAgICAnc2VsZWN0RmllbGQnOiB0aGlzLmFwcExvY2FsZS5NRVNTQUdFX1NFTEVDVF9GSUVMRFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRhdGFncmlkRWxlbWVudCA9ICQodGhpcy5fdGFibGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgIHRoaXMuZ3JpZEVsZW1lbnQgPSB0aGlzLiRlbGVtZW50O1xuICAgICAgICB0aGlzLiRlbGVtZW50LmNzcyh7J3Bvc2l0aW9uJzogJ3JlbGF0aXZlJ30pO1xuXG4gICAgICAgIF8uZm9yRWFjaChydW5Nb2RlSW5pdGlhbFByb3BlcnRpZXMsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHRoaXNba2V5XSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zW3ZhbHVlXSA9ICh0aGlzW2tleV0gPT09ICd0cnVlJyB8fCB0aGlzW2tleV0gPT09IHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGVoYW5kbGVyICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnNbJ3NlbGVjdEZpcnN0Um93J10gPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVuZGVyT3BlcmF0aW9uQ29sdW1ucygpO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmNvbERlZnMgPSB0aGlzLmZpZWxkRGVmcztcblxuICAgICAgICB0aGlzLmRhdGFncmlkRWxlbWVudC5kYXRhdGFibGUodGhpcy5ncmlkT3B0aW9ucyk7XG4gICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbG9hZGluZycsIHRoaXMubG9hZGluZ2RhdGFtc2cpO1xuICAgICAgICAvLyBpZih0aGlzLmdyaWRPcHRpb25zLmRhdGEubGVuZ3RoIHx8IHRoaXMudmFyaWFibGVJbmZsaWdodCkge1xuICAgICAgICAvLyAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdsb2FkaW5nJywgdGhpcy5sb2FkaW5nZGF0YW1zZyk7XG4gICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ25vZGF0YScsIHRoaXMubm9kYXRhbWVzc2FnZSk7XG4gICAgICAgIC8vIH1cblxuICAgICAgICB0aGlzLmFwcGx5UHJvcHMuZm9yRWFjaChhcmdzID0+IHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKC4uLmFyZ3MpKTtcblxuICAgICAgICBpZiAodGhpcy5lZGl0bW9kZSA9PT0gRURJVF9NT0RFLlFVSUNLX0VESVQpIHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRDbGlja0JpbmQgPSB0aGlzLl9kb2N1bWVudENsaWNrQmluZC5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmRvY3VtZW50Q2xpY2tCaW5kKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcml2YXRlIGdldENvbmZpZ3VyZWRTdGF0ZSgpIHtcbiAgICAgICAgY29uc3QgbW9kZSA9IHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5jb21wdXRlTW9kZSh0aGlzLnN0YXRlaGFuZGxlcik7XG4gICAgICAgIHJldHVybiBtb2RlICYmIG1vZGUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVN0YXRlUGFyYW1zKHdpZGdldFN0YXRlLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChfLmdldCh3aWRnZXRTdGF0ZSwgJ3NlbGVjdGVkSXRlbScpKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEl0ZW1zRXhpc3QgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMub3B0aW9ucyA9IG9wdGlvbnMub3B0aW9ucyB8fCB7fTtcbiAgICAgICAgaWYgKF8uZ2V0KHdpZGdldFN0YXRlLCAncGFnaW5hdGlvbicpKSB7XG4gICAgICAgICAgICBvcHRpb25zLm9wdGlvbnMucGFnZSA9IHdpZGdldFN0YXRlLnBhZ2luYXRpb247XG4gICAgICAgICAgICBpZiAoXy5nZXQod2lkZ2V0U3RhdGUsICdzb3J0JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvcnRTdGF0ZUhhbmRsZXIod2lkZ2V0U3RhdGUpO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMub3B0aW9ucy5vcmRlckJ5ID0gXy5nZXQod2lkZ2V0U3RhdGUsICdzb3J0LmZpZWxkJykgKyAnICcgKyBfLmdldCh3aWRnZXRTdGF0ZSwgJ3NvcnQuZGlyZWN0aW9uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXy5nZXQod2lkZ2V0U3RhdGUsICdzZWFyY2gnKSkge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTdGF0ZUhhbmRsZXIod2lkZ2V0U3RhdGUpO1xuICAgICAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5vcHRpb25zLmZpbHRlckZpZWxkcyA9IHRoaXMuZ2V0RmlsdGVyRmllbGRzKHdpZGdldFN0YXRlLnNlYXJjaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcHRpb25zLm9wdGlvbnMucGFnZSA9IDE7XG4gICAgICAgICAgICBpZiAoXy5nZXQod2lkZ2V0U3RhdGUsICdzZWFyY2gnKSkge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTdGF0ZUhhbmRsZXIod2lkZ2V0U3RhdGUpO1xuICAgICAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5vcHRpb25zLmZpbHRlckZpZWxkcyA9IHRoaXMuZ2V0RmlsdGVyRmllbGRzKHdpZGdldFN0YXRlLnNlYXJjaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXy5nZXQod2lkZ2V0U3RhdGUsICdzb3J0JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvcnRTdGF0ZUhhbmRsZXIod2lkZ2V0U3RhdGUpO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMub3B0aW9ucy5vcmRlckJ5ID0gXy5nZXQod2lkZ2V0U3RhdGUsICdzb3J0LmZpZWxkJykgKyAnICcgKyBfLmdldCh3aWRnZXRTdGF0ZSwgJ3NvcnQuZGlyZWN0aW9uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0cmlnZ2VyV01FdmVudChuZXdWYWwpIHtcbiAgICAgICAgaWYgKHRoaXMuZWRpdG1vZGUgPT09ICdkaWFsb2cnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgJGludm9rZVdhdGNoZXJzKHRydWUpO1xuICAgICAgICB0aGlzLmFwcC5ub3RpZnkoJ3dtLWV2ZW50Jywge2V2ZW50TmFtZTogJ3NlbGVjdGVkSXRlbUNoYW5nZScsIHdpZGdldE5hbWU6IHRoaXMubmFtZSwgcm93OiBuZXdWYWwsIHRhYmxlOiB0aGlzfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzb3J0U3RhdGVIYW5kbGVyKHdpZGdldFN0YXRlKSB7XG4gICAgICAgIGNvbnN0ICRncmlkRWxlbWVudCA9IHRoaXMuZGF0YWdyaWRFbGVtZW50O1xuICAgICAgICBjb25zdCAkc29ydEljb24gPSAgJGdyaWRFbGVtZW50LmZpbmQoJ3RoW2RhdGEtY29sLWZpZWxkPVwiJyArIF8uZ2V0KHdpZGdldFN0YXRlLCAnc29ydC5maWVsZCcpICsgJ1wiXSAuc29ydC1pY29uJyk7XG4gICAgICAgIGlmIChfLmdldCh3aWRnZXRTdGF0ZSwgJ3NvcnQuZGlyZWN0aW9uJykgPT09ICdhc2MnICYmICRzb3J0SWNvbi5sZW5ndGgpICB7XG4gICAgICAgICAgICAkc29ydEljb24uYWRkQ2xhc3MoJ2FzYyB3aSB3aS1sb25nLWFycm93LXVwJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoXy5nZXQod2lkZ2V0U3RhdGUsICdzb3J0LmRpcmVjdGlvbicpID09PSAnZGVzYycgICYmICRzb3J0SWNvbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICRzb3J0SWNvbi5hZGRDbGFzcygnZGVzYyB3aSB3aS1sb25nLWFycm93LWRvd24nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2VhcmNoU3RhdGVIYW5kbGVyKHdpZGdldFN0YXRlKSB7XG4gICAgICAgIGlmIChfLmlzQXJyYXkod2lkZ2V0U3RhdGUuc2VhcmNoKSkge1xuICAgICAgICAgICAgXy5mb3JFYWNoKCB3aWRnZXRTdGF0ZS5zZWFyY2gsIChmaWx0ZXJPYmopID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yb3dGaWx0ZXJbZmlsdGVyT2JqLmZpZWxkXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0ZpbHRlcltmaWx0ZXJPYmouZmllbGRdLnZhbHVlID0gZmlsdGVyT2JqLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0ZpbHRlcltmaWx0ZXJPYmouZmllbGRdLm1hdGNoTW9kZSA9IGZpbHRlck9iai5tYXRjaE1vZGU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93RmlsdGVyW2ZpbHRlck9iai5maWVsZF0udHlwZSA9IGZpbHRlck9iai50eXBlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoJCh0aGlzLnJvd0ZpbHRlckNvbXBsaWVkVGxbZmlsdGVyT2JqLmZpZWxkXSkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSBmaWx0ZXJPYmoudHlwZSA9PT0gJ2ludGVnZXInID8gcGFyc2VJbnQoZmlsdGVyT2JqLnZhbHVlKSA6IGZpbHRlck9iai52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcy5yb3dGaWx0ZXJDb21wbGllZFRsW2ZpbHRlck9iai5maWVsZF0pLmZpbmQoJ2lucHV0JykudmFsKGZpbHRlck9iai52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0ICRncmlkRWxlbWVudCA9IHRoaXMuZGF0YWdyaWRFbGVtZW50O1xuICAgICAgICAgICAgJGdyaWRFbGVtZW50LmZpbmQoJ1tkYXRhLWVsZW1lbnQ9XCJkZ1NlYXJjaFRleHRcIl0nKS52YWwod2lkZ2V0U3RhdGUuc2VhcmNoLnZhbHVlKTtcbiAgICAgICAgICAgICRncmlkRWxlbWVudC5maW5kKCdbZGF0YS1lbGVtZW50PVwiZGdGaWx0ZXJWYWx1ZVwiXScpLnZhbCh3aWRnZXRTdGF0ZS5zZWFyY2guZmllbGQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlcyBlbXB0eSB2YWx1ZXMgaW4gaGVhZGVyQ29uZmlnIGFycmF5LlxuICAgIGZpbHRlckVtcHR5VmFsdWVzKGl0ZW0pIHtcbiAgICAgICAgaWYgKGl0ZW0uY29sdW1ucykge1xuICAgICAgICAgICAgaXRlbS5jb2x1bW5zID0gaXRlbS5jb2x1bW5zLmZpbHRlcih0aGlzLmZpbHRlckVtcHR5VmFsdWVzLmJpbmQodGhpcykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtICE9PSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8vIENvbXBhcmVzIHRoZSBwcmV2RmlsdGVyQ3JpdGVyaWEgUnVsZXMgd2l0aCB0aGUgbmV3IHJ1bGVzXG4gICAgY29tcGFyZUZpbHRlckV4cHJlc3Npb25zKHByZXZGaWx0ZXJzLCBuZXdGaWx0ZXJzKSB7XG4gICAgICAgIHJldHVybiAhISgocHJldkZpbHRlcnMubGVuZ3RoID09PSBuZXdGaWx0ZXJzLmxlbmd0aCkgJiYgKF8uaXNFcXVhbChwcmV2RmlsdGVycywgbmV3RmlsdGVycykpKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIHRhYmxlIGxhc3RBY3Rpb25QZXJmb3JtZWQgdG8gRmlsdGVyIENyaXRlcmlhIGFuZCBtYWludGFpbiB0aGUgcHJldkZpbHRlckV4cHJlc3Npb25cbiAgICBzZXRMYXN0QWN0aW9uVG9GaWx0ZXJDcml0ZXJpYSgpIHtcbiAgICAgICAgdGhpcy5wcmV2RmlsdGVyRXhwcmVzc2lvbiA9IF8uZ2V0KHRoaXMuZGF0YXNvdXJjZSwgJ2ZpbHRlckV4cHJlc3Npb25zLnJ1bGVzJykgPyBnZXRDbG9uZWRPYmplY3QodGhpcy5kYXRhc291cmNlLmZpbHRlckV4cHJlc3Npb25zLnJ1bGVzKSA6IGdldENsb25lZE9iamVjdChbXS5jb25jYXQodGhpcy5kYXRhc291cmNlLmRhdGFCaW5kaW5nKSk7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0TGFzdEFjdGlvblBlcmZvcm1lZCh0aGlzLmdyaWRPcHRpb25zLkFDVElPTlMuRklMVEVSX0NSSVRFUklBKTtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZXRJc1NlYXJjaFRyaWdlcnJlZCh0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIHRhYmxlIGxhc3RBY3Rpb25QZXJmb3JtZWQgdG8gRGF0YXNldCB1cGRhdGUgYW5kIHNldCBpc0RhdGFzZXRVcGRhdGVkIHRvIHRydWVcbiAgICAvLyBGaXggZm9yIFtXTVMtMjIzMjNdLXRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIGRhdGFzZXQgaXMgYmVpbmcgdXBkYXRlZFxuICAgIHNldExhc3RBY3Rpb25Ub0RhdGFzZXRVcGRhdGUoKSB7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0TGFzdEFjdGlvblBlcmZvcm1lZCh0aGlzLmdyaWRPcHRpb25zLkFDVElPTlMuREFUQVNFVF9VUERBVEUpO1xuICAgICAgICAvLyAgRml4IGZvciBbV01TLTIzMjYzXTogcmVzZXQgY3VycmVudFBhZ2UgdG8gMSBhcyBkYXRhc2V0IGlzIGJlaW5nIGNoYW5nZWRcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZXRDdXJyZW50UGFnZSgxKTtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZXRJc0RhdGFzZXRVcGRhdGVkKHRydWUpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgbGFzdEFjdGlvblBlcmZvcm1lZCB0byBGaWx0ZXJfQ3JpdGVyaWEsIHdoZW4gdGhlcmUgaXMgY2hhbmdlIGluIHRoZSBWYXJpYWJsZSBmaWx0ZXIgY3JpdGVyaWEgcnVsZXNcbiAgICBjaGVja0lmVmFyRmlsdGVyc0FwcGxpZWQoKSB7XG4gICAgICAgIGlmICghXy5pc0VtcHR5KF8uZ2V0KHRoaXMuZGF0YXNvdXJjZSwgJ2ZpbHRlckV4cHJlc3Npb25zLnJ1bGVzJykpIHx8ICFfLmlzRW1wdHkoXy5nZXQodGhpcy5kYXRhc291cmNlLCAnZGF0YUJpbmRpbmcnKSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRGaWx0ZXJFeHByID0gXy5nZXQodGhpcy5kYXRhc291cmNlLCAnZmlsdGVyRXhwcmVzc2lvbnMucnVsZXMnKSA/IHRoaXMuZGF0YXNvdXJjZS5maWx0ZXJFeHByZXNzaW9ucy5ydWxlcyA6IFtdLmNvbmNhdCh0aGlzLmRhdGFzb3VyY2UuZGF0YUJpbmRpbmcpO1xuICAgICAgICAgICAgY29uc3QgaXNFcXVhbCA9IHRoaXMuY29tcGFyZUZpbHRlckV4cHJlc3Npb25zKHRoaXMucHJldkZpbHRlckV4cHJlc3Npb24sIGN1cnJlbnRGaWx0ZXJFeHByKTtcbiAgICAgICAgICAgIGlmICghaXNFcXVhbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0TGFzdEFjdGlvblRvRmlsdGVyQ3JpdGVyaWEoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdhdGNoVmFyaWFibGVEYXRhU2V0KG5ld1ZhbCkge1xuICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICAvLyBDaGVjayBmb3IgVmFyaWFibGUgZmlsdGVycyBpZiBhcHBsaWVkXG4gICAgICAgIGlmICh0aGlzLmdyaWRPcHRpb25zLmlzTmF2VHlwZVNjcm9sbE9yT25kZW1hbmQoKSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja0lmVmFyRmlsdGVyc0FwcGxpZWQoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTdGF0ZSBoYW5kbGluZyBmb3Igc3RhdGljIHZhcmlhYmxlc1xuICAgICAgICBpZiAoXy5nZXQodGhpcy5kYXRhc291cmNlLCAnY2F0ZWdvcnknKSA9PT0gJ3dtLlZhcmlhYmxlJyAmJiB0aGlzLl9wYWdlTG9hZCAmJiB0aGlzLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgIGNvbnN0IHdpZGdldFN0YXRlID0gdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLmdldFdpZGdldFN0YXRlKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5fcGFnZUxvYWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChfLmdldCh3aWRnZXRTdGF0ZSwgJ3NlbGVjdGVkSXRlbScpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtc0V4aXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignc2VsZWN0Rmlyc3RSb3cnLCB0aGlzLmdyaWRmaXJzdHJvd3NlbGVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXy5nZXQod2lkZ2V0U3RhdGUsICdzZWFyY2gnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU3RhdGVIYW5kbGVyKHdpZGdldFN0YXRlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFNvcnRIYW5kbGVyKHdpZGdldFN0YXRlLnNlYXJjaCwgdW5kZWZpbmVkLCAnc2VhcmNoJywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXy5nZXQod2lkZ2V0U3RhdGUsICdzb3J0JykpIHtcbiAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU29ydEhhbmRsZXIod2lkZ2V0U3RhdGUuc29ydCwgdW5kZWZpbmVkLCAnc29ydCcsIHRydWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuc29ydFN0YXRlSGFuZGxlcih3aWRnZXRTdGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXy5nZXQod2lkZ2V0U3RhdGUsICdwYWdpbmF0aW9uJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3IucGFnZUNoYW5nZWQoe3BhZ2U6IHdpZGdldFN0YXRlLnBhZ2luYXRpb259LCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBBZnRlciB0aGUgc2V0dGluZyB0aGUgd2F0Y2ggb24gbmF2aWdhdG9yLCBkYXRhc2V0IGlzIHRyaWdnZXJlZCB3aXRoIHVuZGVmaW5lZC4gSW4gdGhpcyBjYXNlLCByZXR1cm4gaGVyZS5cbiAgICAgICAgaWYgKHRoaXMuZGF0YU5hdmlnYXRvcldhdGNoZWQgJiYgXy5pc1VuZGVmaW5lZChuZXdWYWwpICYmIHRoaXMuX19mdWxsRGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIHZhcmlhYmxlIGlzIGluIGxvYWRpbmcgc3RhdGUsIHNob3cgbG9hZGluZyBpY29uXG4gICAgICAgIGlmICh0aGlzLnZhcmlhYmxlSW5mbGlnaHQgJiYgIXRoaXMuaW5mU2Nyb2xsKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ2xvYWRpbmcnLCB0aGlzLmxvYWRpbmdkYXRhbXNnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdCA9IGdldFZhbGlkSlNPTihuZXdWYWwpO1xuXG4gICAgICAgIC8vIENvbnZlcnRpbmcgbmV3dmFsIHRvIG9iamVjdCBpZiBpdCBpcyBhbiBPYmplY3QgdGhhdCBjb21lcyBhcyBhIHN0cmluZyBcIntcImRhdGFcIiA6IDF9XCJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgbmV3VmFsID0gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc29ydEV4cCA9IHRoaXMuZ2V0U29ydEV4cHIoKTtcbiAgICAgICAgY29uc3Qgc29ydEV4cEFyciA9IHNvcnRFeHAuc3BsaXQoJyAnKTtcbiAgICAgICAgaWYgKHNvcnRFeHAgJiYgc29ydEV4cEFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuc29ydEluZm8gPSB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uIDogc29ydEV4cEFyclsxXSxcbiAgICAgICAgICAgICAgICBmaWVsZDogIHNvcnRFeHBBcnJbMF1cblxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qUmV0dXJuIGlmIGRhdGEgaXMgaW52YWxpZC4qL1xuICAgICAgICBpZiAoIXRoaXMuaXNEYXRhVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdmFsdWUgaXMgZW1wdHkgb3IgaW4gc3R1ZGlvIG1vZGUsIGRvbnQgZW5hYmxlIHRoZSBuYXZpZ2F0aW9uXG4gICAgICAgIGlmIChuZXdWYWwpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3duYXZpZ2F0aW9uICYmICF0aGlzLmRhdGFOYXZpZ2F0b3JXYXRjaGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVQYWdlTmF2aWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRQYWdlTmF2aWdhdGlvbigpO1xuICAgICAgICAgICAgLypmb3IgcnVuIG1vZGUsIGRpc2FibGluZyB0aGUgbG9hZGVyIGFuZCBzaG93aW5nIG5vIGRhdGEgZm91bmQgbWVzc2FnZSBpZiBkYXRhc2V0IGlzIG5vdCB2YWxpZCovXG4gICAgICAgICAgICBpZiAoIXRoaXMudmFyaWFibGVJbmZsaWdodCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbm9kYXRhJywgdGhpcy5ub2RhdGFtZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ3NlbGVjdEZpcnN0Um93JywgdGhpcy5ncmlkZmlyc3Ryb3dzZWxlY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzTmF2aWdhdGlvbkVuYWJsZWQoKSAmJiBuZXdWYWwpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tGaWx0ZXJzQXBwbGllZCh0aGlzLmdldFNvcnRFeHByKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfLmlzT2JqZWN0KG5ld1ZhbCkgfHwgbmV3VmFsID09PSAnJyB8fCAobmV3VmFsICYmIG5ld1ZhbC5kYXRhVmFsdWUgPT09ICcnKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnZhcmlhYmxlSW5mbGlnaHQpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB2YXJpYWJsZSBoYXMgZmluaXNoZWQgbG9hZGluZyBhbmQgcmVzdWx0U2V0IGlzIGVtcHR5LCBlbmRlciBlbXB0eSBkYXRhXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRHcmlkRGF0YShbXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5ld1ZhbCkge1xuICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZUdyaWREYXRhKG5ld1ZhbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmRvY3VtZW50Q2xpY2tCaW5kKTtcbiAgICAgICAgaWYgKHRoaXMubmF2aWdhdG9yUmVzdWx0V2F0Y2gpIHtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yUmVzdWx0V2F0Y2gudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5uYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaCkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxuXG4gICAgYWRkUm93SW5kZXgocm93KSB7XG4gICAgICAgIGNvbnN0IHJvd0RhdGEgPSBnZXRDbG9uZWRPYmplY3Qocm93KTtcbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSBfLmluZGV4T2YodGhpcy5ncmlkT3B0aW9ucy5kYXRhLCByb3cpO1xuICAgICAgICBpZiAocm93SW5kZXggPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcm93O1xuICAgICAgICB9XG4gICAgICAgIHJvd0RhdGEuJGluZGV4ID0gcm93SW5kZXggKyAxO1xuICAgICAgICByb3dEYXRhLiRpc0ZpcnN0ID0gcm93RGF0YS4kaW5kZXggPT09IDE7XG4gICAgICAgIHJvd0RhdGEuJGlzTGFzdCA9IHRoaXMuZ3JpZERhdGEubGVuZ3RoID09PSByb3dEYXRhLiRpbmRleDtcbiAgICAgICAgcmV0dXJuIHJvd0RhdGE7XG4gICAgfVxuXG4gICAgYWRkRXZlbnRzVG9Db250ZXh0KGNvbnRleHQpIHtcbiAgICAgICAgY29udGV4dC5hZGROZXdSb3cgPSAoKSA9PiB0aGlzLmFkZE5ld1JvdygpO1xuICAgICAgICBjb250ZXh0LmRlbGV0ZVJvdyA9ICgpID0+IHRoaXMuZGVsZXRlUm93KCk7XG4gICAgICAgIGNvbnRleHQuZWRpdFJvdyA9ICgpID0+IHRoaXMuZWRpdFJvdygpO1xuICAgIH1cblxuICAgIGV4ZWN1dGUob3BlcmF0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChbRGF0YVNvdXJjZS5PcGVyYXRpb24uSVNfQVBJX0FXQVJFLCBEYXRhU291cmNlLk9wZXJhdGlvbi5JU19QQUdFQUJMRSwgRGF0YVNvdXJjZS5PcGVyYXRpb24uU1VQUE9SVFNfU0VSVkVSX0ZJTFRFUl0uaW5jbHVkZXMob3BlcmF0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFzb3VyY2UgPyB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShvcGVyYXRpb24sIG9wdGlvbnMpIDoge307XG4gICAgfVxuXG4gICAgaXNOYXZpZ2F0aW9uRW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvd25hdmlnYXRpb24gJiYgdGhpcy5kYXRhTmF2aWdhdG9yICYmIHRoaXMuZGF0YU5hdmlnYXRvcldhdGNoZWQ7XG4gICAgfVxuXG4gICAgZ2V0Q2xvbmVkUm93T2JqZWN0KHJvd0RhdGEpIHtcbiAgICAgICAgY29uc3Qgcm93ID0gZ2V0Q2xvbmVkT2JqZWN0KHJvd0RhdGEpO1xuICAgICAgICByb3cuZ2V0UHJvcGVydHkgPSBmaWVsZCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gXy5nZXQocm93LCBmaWVsZCk7XG4gICAgICAgIH07XG4gICAgICAgIHJvdy4kaXNGaXJzdCA9IHJvdy4kaW5kZXggPT09IDE7XG4gICAgICAgIHJvdy4kaXNMYXN0ID0gdGhpcy5ncmlkRGF0YS5sZW5ndGggPT09IHJvdy4kaW5kZXg7XG4gICAgICAgIGRlbGV0ZSByb3cuJCRpbmRleDtcbiAgICAgICAgZGVsZXRlIHJvdy4kJHBrO1xuICAgICAgICByZXR1cm4gcm93O1xuICAgIH1cblxuICAgIGhhbmRsZUxvYWRpbmcoZGF0YSkge1xuICAgICAgICB0aGlzLnZhcmlhYmxlSW5mbGlnaHQgPSBkYXRhLmFjdGl2ZTtcbiAgICAgICAgLy8gYmFzZWQgb24gdGhlIGFjdGl2ZSBzdGF0ZSBhbmQgcmVzcG9uc2UgdG9nZ2xpbmcgdGhlICdsb2FkaW5nIGRhdGEuLi4nIGFuZCAnbm8gZGF0YSBmb3VuZCcgbWVzc2FnZXMuXG4gICAgICAgIGlmIChkYXRhLmFjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdsb2FkaW5nJywgdGhpcy5sb2FkaW5nZGF0YW1zZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJZiBncmlkIGlzIGluIGVkaXQgbW9kZSBvciBncmlkIGhhcyBkYXRhLCBkb250IHNob3cgdGhlIG5vIGRhdGEgbWVzc2FnZVxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzR3JpZEVkaXRNb2RlICYmIF8uaXNFbXB0eSh0aGlzLmRhdGFzZXQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdub2RhdGEnLCB0aGlzLm5vZGF0YW1lc3NhZ2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ3JlYWR5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXREaXNhYmxlZE9uRmllbGQob3BlcmF0aW9uLCBjb2xEZWYsIHdpZGdldFR5cGUpIHtcbiAgICAgICAgaWYgKG9wZXJhdGlvbiAhPT0gJ25ldycgJiYgY29sRGVmWydwcmltYXJ5LWtleSddICYmIGNvbERlZi5nZW5lcmF0b3IgPT09ICdhc3NpZ25lZCcgJiYgIWNvbERlZlsncmVsYXRlZC1lbnRpdHktbmFtZSddICYmICFjb2xEZWYucGVyaW9kKSB7XG4gICAgICAgICAgICBjb2xEZWZbd2lkZ2V0VHlwZV0uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzZXRGb3JtQ29udHJvbChjdHJsKSB7XG4gICAgICAgIGN0cmwubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICAgIGN0cmwubWFya0FzUHJpc3RpbmUoKTtcbiAgICB9XG5cbiAgICBjbGVhckZvcm0obmV3Um93Pykge1xuICAgICAgICBjb25zdCBjdHJscyA9IHRoaXMubmdmb3JtLmNvbnRyb2xzO1xuICAgICAgICBfLmtleXModGhpcy5uZ2Zvcm0uY29udHJvbHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIC8vIElmIG5ldyByb3csIGNsZWFyIHRoZSBjb250cm9scyBpbiB0aGUgbmV3IHJvdy4gRWxzZSwgY2xlYXIgdGhlIGNvbnRyb2xzIGluIGVkaXQgcm93XG4gICAgICAgICAgICBpZiAoIWtleS5lbmRzV2l0aCgnX2ZpbHRlcicpICYmICgoa2V5LmVuZHNXaXRoKCdfbmV3JykgJiYgbmV3Um93KSB8fCAoIWtleS5lbmRzV2l0aCgnX25ldycpICYmICFuZXdSb3cpKSkge1xuICAgICAgICAgICAgICAgIGN0cmxzW2tleV0uc2V0VmFsdWUoJycpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRGb3JtQ29udHJvbChjdHJsc1trZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2hvd0ZpZWxkQmFzZWRPblNjcmVlblR5cGUoZmllbGQpIHtcbiAgICAgICAgbGV0IHNob3dGaWVsZDtcbiAgICAgICAgaWYgKGlzTW9iaWxlKCkgJiYgdGhpcy52aWV3cG9ydC5pc01vYmlsZVR5cGUpIHtcbiAgICAgICAgICAgIHNob3dGaWVsZCA9IGZpZWxkLm1vYmlsZURpc3BsYXk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52aWV3cG9ydC5pc1RhYmxldFR5cGUpIHtcbiAgICAgICAgICAgIHNob3dGaWVsZCA9IGZpZWxkLnRhYmxldERpc3BsYXk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzaG93RmllbGQgPSBmaWVsZC5wY0Rpc3BsYXk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNob3dGaWVsZDtcbiAgICB9XG5cbiAgICAvKiBDaGVjayB3aGV0aGVyIGl0IGlzIG5vbi1lbXB0eSByb3cuICovXG4gICAgaXNFbXB0eVJlY29yZChyZWNvcmQpIHtcbiAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHJlY29yZCk7XG4gICAgICAgIGxldCBkYXRhLFxuICAgICAgICAgICAgaXNEaXNwbGF5ZWQ7XG5cbiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXMuZXZlcnkoKHByb3AsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBkYXRhID0gcmVjb3JkW3Byb3BdO1xuICAgICAgICAgICAgLyogSWYgZmllbGREZWZzIGFyZSBtaXNzaW5nLCBzaG93IGFsbCBjb2x1bW5zIGluIGRhdGEuICovXG4gICAgICAgICAgICBpc0Rpc3BsYXllZCA9ICh0aGlzLmZpZWxkRGVmcy5sZW5ndGggJiYgaXNEZWZpbmVkKHRoaXMuZmllbGREZWZzW2luZGV4XSkgJiYgdGhpcy5zaG93RmllbGRCYXNlZE9uU2NyZWVuVHlwZSh0aGlzLmZpZWxkRGVmc1tpbmRleF0pKSB8fCB0cnVlO1xuICAgICAgICAgICAgLypWYWxpZGF0aW5nIG9ubHkgdGhlIGRpc3BsYXllZCBmaWVsZHMqL1xuICAgICAgICAgICAgaWYgKGlzRGlzcGxheWVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChkYXRhID09PSBudWxsIHx8IGRhdGEgPT09IHVuZGVmaW5lZCB8fCBkYXRhID09PSAnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyogRnVuY3Rpb24gdG8gcmVtb3ZlIHRoZSBlbXB0eSBkYXRhLiAqL1xuICAgIHJlbW92ZUVtcHR5UmVjb3JkcyhzZXJ2aWNlRGF0YSkge1xuICAgICAgICBjb25zdCBhbGxSZWNvcmRzID0gc2VydmljZURhdGE7XG4gICAgICAgIGxldCBmaWx0ZXJlZERhdGEgPSBbXTtcbiAgICAgICAgaWYgKGFsbFJlY29yZHMgJiYgYWxsUmVjb3Jkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8qQ29tcGFyaW5nIGFuZCBwdXNoaW5nIHRoZSBub24tZW1wdHkgZGF0YSBjb2x1bW5zKi9cbiAgICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IGFsbFJlY29yZHMuZmlsdGVyKHJlY29yZCA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlY29yZCAmJiAhdGhpcy5pc0VtcHR5UmVjb3JkKHJlY29yZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsdGVyZWREYXRhO1xuICAgIH1cblxuICAgIHNldEdyaWREYXRhKHNlcnZlckRhdGEpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZmlsdGVybnVsbHJlY29yZHMgPyAgdGhpcy5yZW1vdmVFbXB0eVJlY29yZHMoc2VydmVyRGF0YSkgOiBzZXJ2ZXJEYXRhO1xuICAgICAgICAvLyBmaXggZm9yIFtXTVMtMjQwMTJdIHNldCB2YXJpYWJsZWluZmxpZ2h0IGZsYWcgdG8gZmFsc2UgZm9yIHN0YXRpYyB2YXJpYWJsZXNcbiAgICAgICAgaWYgKF8uZ2V0KHRoaXMuZGF0YXNvdXJjZSwgJ2NhdGVnb3J5JykgPT09ICd3bS5WYXJpYWJsZScpIHtcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVJbmZsaWdodCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy52YXJpYWJsZUluZmxpZ2h0KSB7XG4gICAgICAgICAgICBpZiAoZGF0YSAmJiAoZGF0YS5sZW5ndGgpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdub2RhdGEnLCB0aGlzLm5vZGF0YW1lc3NhZ2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ3JlYWR5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkRGF0YSA9IGRhdGE7XG4gICAgfVxuXG4gICAgc2V0RGF0YUdyaWRPcHRpb24ob3B0aW9uTmFtZSwgbmV3VmFsLCBmb3JjZVNldCA9IGZhbHNlKSB7XG4gICAgICAgIGlmICghdGhpcy5kYXRhZ3JpZEVsZW1lbnQgfHwgIXRoaXMuZGF0YWdyaWRFbGVtZW50LmRhdGF0YWJsZSB8fCAhdGhpcy5kYXRhZ3JpZEVsZW1lbnQuZGF0YXRhYmxlKCdpbnN0YW5jZScpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9uID0ge307XG4gICAgICAgIGlmIChpc0RlZmluZWQgJiYgKCFfLmlzRXF1YWwobmV3VmFsLCB0aGlzLmdyaWRPcHRpb25zW29wdGlvbk5hbWVdKSB8fCBmb3JjZVNldCkpIHtcbiAgICAgICAgICAgIG9wdGlvbltvcHRpb25OYW1lXSA9IG5ld1ZhbDtcbiAgICAgICAgICAgIHRoaXMuZGF0YWdyaWRFbGVtZW50LmRhdGF0YWJsZSgnb3B0aW9uJywgb3B0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnNbb3B0aW9uTmFtZV0gPSBuZXdWYWw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjYWxsRGF0YUdyaWRNZXRob2QoLi4uYXJncykge1xuICAgICAgICBpZiAoIXRoaXMuZGF0YWdyaWRFbGVtZW50IHx8ICF0aGlzLmRhdGFncmlkRWxlbWVudC5kYXRhdGFibGUoJ2luc3RhbmNlJykpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlQcm9wcy5zZXQoYXJnc1sxXSwgYXJncyk7XG4gICAgICAgICAgICByZXR1cm47IC8vIElmIGRhdGFncmlkIGlzIG5vdCBpbml0aWxpYXplZCBvciBkZXN0cm95ZWQsIHJldHVybiBoZXJlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YWdyaWRFbGVtZW50LmRhdGF0YWJsZS5hcHBseSh0aGlzLmRhdGFncmlkRWxlbWVudCwgYXJncyk7XG4gICAgfVxuXG4gICAgcmVuZGVyT3BlcmF0aW9uQ29sdW1ucygpIHtcbiAgICAgICAgbGV0IHJvd0FjdGlvbkNvbCxcbiAgICAgICAgICAgIGluc2VydFBvc2l0aW9uO1xuXG4gICAgICAgIGNvbnN0IHJvd09wZXJhdGlvbnNDb2x1bW4gPSBnZXRSb3dPcGVyYXRpb25zQ29sdW1uKCksXG4gICAgICAgICAgICBjb25maWcgPSB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiByb3dPcGVyYXRpb25zQ29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgICAgICdmaWVsZCc6IHJvd09wZXJhdGlvbnNDb2x1bW4uZmllbGQsXG4gICAgICAgICAgICAgICAgJ2lzUHJlZGVmaW5lZCc6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIC8vIFJldHVybiBpZiBubyBmaWVsZERlZnMgYXJlIHByZXNlbnRcbiAgICAgICAgaWYgKCF0aGlzLmZpZWxkRGVmcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJvd0FjdGlvbkNvbCA9IF8uZmluZCh0aGlzLmZ1bGxGaWVsZERlZnMsIHsnZmllbGQnOiBST1dfT1BTX0ZJRUxELCB0eXBlOiAnY3VzdG9tJ30pOyAvLyBDaGVjayBpZiBjb2x1bW4gaXMgZmV0Y2hlZCBmcm9tIG1hcmt1cFxuICAgICAgICBfLnJlbW92ZSh0aGlzLmZpZWxkRGVmcywge3R5cGU6ICdjdXN0b20nLCBmaWVsZDogUk9XX09QU19GSUVMRH0pOyAvLyBSZW1vdmluZyBvcGVyYXRpb25zIGNvbHVtblxuICAgICAgICBfLnJlbW92ZSh0aGlzLmhlYWRlckNvbmZpZywge2ZpZWxkOiByb3dPcGVyYXRpb25zQ29sdW1uLmZpZWxkfSk7XG5cbiAgICAgICAgLypBZGQgdGhlIGNvbHVtbiBmb3Igcm93IG9wZXJhdGlvbnMgb25seSBpZiBhdC1sZWFzdCBvbmUgb3BlcmF0aW9uIGhhcyBiZWVuIGVuYWJsZWQuKi9cbiAgICAgICAgaWYgKHRoaXMucm93QWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChyb3dBY3Rpb25Db2wpIHsgLy8gSWYgY29sdW1uIGlzIHByZXNlbnQgaW4gbWFya3VwLCBwdXNoIHRoZSBjb2x1bW4gb3IgcHVzaCB0aGUgZGVmYXVsdCBjb2x1bW5cbiAgICAgICAgICAgICAgICBpbnNlcnRQb3NpdGlvbiA9IHJvd0FjdGlvbkNvbC5yb3dhY3Rpb25zcG9zaXRpb24gPyBfLnRvTnVtYmVyKHJvd0FjdGlvbkNvbC5yb3dhY3Rpb25zcG9zaXRpb24pIDogdGhpcy5maWVsZERlZnMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHRoaXMuZmllbGREZWZzLnNwbGljZShpbnNlcnRQb3NpdGlvbiwgMCwgcm93QWN0aW9uQ29sKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0UG9zaXRpb24gPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJDb25maWcudW5zaGlmdChjb25maWcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVyQ29uZmlnLnB1c2goY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZmllbGREZWZzLnB1c2gocm93T3BlcmF0aW9uc0NvbHVtbik7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJDb25maWcucHVzaChjb25maWcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2hlYWRlckNvbmZpZycsIHRoaXMuaGVhZGVyQ29uZmlnKTtcbiAgICB9XG5cbiAgICBlbmFibGVQYWdlTmF2aWdhdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YXNldCAmJiB0aGlzLmJpbmRkYXRhc2V0ICYmIHRoaXMuZGF0YU5hdmlnYXRvcikge1xuICAgICAgICAgICAgLypDaGVjayBmb3Igc2FuaXR5Ki9cbiAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvcldhdGNoZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5uYXZpZ2F0b3JSZXN1bHRXYXRjaCkge1xuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yUmVzdWx0V2F0Y2gudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qUmVnaXN0ZXIgYSB3YXRjaCBvbiB0aGUgXCJyZXN1bHRcIiBwcm9wZXJ0eSBvZiB0aGUgXCJkYXRhTmF2aWdhdG9yXCIgc28gdGhhdCB0aGUgcGFnaW5hdGVkIGRhdGEgaXMgZGlzcGxheWVkIGluIHRoZSBsaXZlLWxpc3QuKi9cbiAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yUmVzdWx0V2F0Y2ggPSB0aGlzLmRhdGFOYXZpZ2F0b3IucmVzdWx0RW1pdHRlci5zdWJzY3JpYmUoKG5ld1ZhbCkgPT4ge1xuICAgICAgICAgICAgICAgIC8qIENoZWNrIGZvciBzYW5pdHkuICovXG4gICAgICAgICAgICAgICAgaWYgKGlzRGVmaW5lZChuZXdWYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFdhdGNoIHdpbGwgbm90IGJlIHRyaWdnZXJlZCBpZiBkYXRhc2V0IGFuZCBuZXcgdmFsdWUgYXJlIGVxdWFsLiBTbyB0cmlnZ2VyIHRoZSBwcm9wZXJ0eSBjaGFuZ2UgaGFuZGxlciBtYW51YWxseVxuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGhhcHBlbnMgaW4gY2FzZSwgaWYgZGF0YXNldCBpcyBkaXJlY3RseSB1cGRhdGVkLlxuICAgICAgICAgICAgICAgICAgICBpZiAoXy5pc0VxdWFsKHRoaXMuZGF0YXNldCwgbmV3VmFsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53YXRjaFZhcmlhYmxlRGF0YVNldChuZXdWYWwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF8uaXNBcnJheShuZXdWYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53aWRnZXQuZGF0YXNldCA9IFtdLmNvbmNhdChuZXdWYWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfLmlzT2JqZWN0KG5ld1ZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpZGdldC5kYXRhc2V0ID0gXy5leHRlbmQoe30sIG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0LmRhdGFzZXQgPSBuZXdWYWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndpZGdldC5kYXRhc2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICAgICAgLypEZS1yZWdpc3RlciB0aGUgd2F0Y2ggaWYgaXQgaXMgZXhpc3RzICovXG4gICAgICAgICAgICBpZiAodGhpcy5uYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaCkge1xuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yTWF4UmVzdWx0V2F0Y2gudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qUmVnaXN0ZXIgYSB3YXRjaCBvbiB0aGUgXCJtYXhSZXN1bHRzXCIgcHJvcGVydHkgb2YgdGhlIFwiZGF0YU5hdmlnYXRvclwiIHNvIHRoYXQgdGhlIFwicGFnZVNpemVcIiBpcyBkaXNwbGF5ZWQgaW4gdGhlIGxpdmUtbGlzdC4qL1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaCA9IHRoaXMuZGF0YU5hdmlnYXRvci5tYXhSZXN1bHRzRW1pdHRlci5zdWJzY3JpYmUoKG5ld1ZhbCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucGFnZXNpemUgPSBuZXdWYWw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIElmIGRhdGFzZXQgaXMgYSBwYWdlYWJsZSBvYmplY3QsIGRhdGEgaXMgcHJlc2VudCBpbnNpZGUgdGhlIGNvbnRlbnQgcHJvcGVydHlcbiAgICAgICAgICAgIHRoaXMuX19mdWxsRGF0YSA9IHRoaXMuZGF0YXNldDtcblxuICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLndpZGdldC5tYXhSZXN1bHRzID0gdGhpcy5wYWdlc2l6ZSB8fCA1O1xuICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLm9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgbWF4UmVzdWx0czogdGhpcy5wYWdlc2l6ZSB8fCA1XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVQcm9wZXJ0eUJpbmRpbmcoJ2RhdGFzZXQnKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5zZXRCaW5kRGF0YVNldCh0aGlzLmJpbmRkYXRhc2V0LCB0aGlzLnZpZXdQYXJlbnQsIHRoaXMuZGF0YXNvdXJjZSwgdGhpcy5kYXRhc2V0LCB0aGlzLmJpbmRkYXRhc291cmNlLCB1bmRlZmluZWQsIHRoaXMuc3RhdGVoYW5kbGVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlc2V0UGFnZU5hdmlnYXRpb24oKSB7XG4gICAgICAgIC8qQ2hlY2sgZm9yIHNhbml0eSovXG4gICAgICAgIGlmICh0aGlzLmRhdGFOYXZpZ2F0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5yZXNldFBhZ2VOYXZpZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0RhdGFWYWxpZCgpIHtcbiAgICAgICAgbGV0IGVycm9yO1xuICAgICAgICBjb25zdCBkYXRhc2V0ID0gdGhpcy5kYXRhc2V0IHx8IHt9O1xuXG4gICAgICAgIC8qSW4gY2FzZSBcImRhdGFcIiBjb250YWlucyBcImVycm9yXCIgJiBcImVycm9yTWVzc2FnZVwiLCB0aGVuIGRpc3BsYXkgdGhlIGVycm9yIG1lc3NhZ2UgaW4gdGhlIGdyaWQuKi9cbiAgICAgICAgaWYgKGRhdGFzZXQuZXJyb3IpIHtcbiAgICAgICAgICAgIGVycm9yID0gZGF0YXNldC5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YXNldC5kYXRhICYmIGRhdGFzZXQuZGF0YS5lcnJvcikge1xuICAgICAgICAgICAgaWYgKGRhdGFzZXQuZGF0YS5lcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IGRhdGFzZXQuZGF0YS5lcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLnNldEdyaWREYXRhKFtdKTtcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnZXJyb3InLCBlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gRnVuY3Rpb24gdG8gcG9wdWxhdGUgdGhlIGdyaWQgd2l0aCBkYXRhLlxuICAgIHBvcHVsYXRlR3JpZERhdGEoc2VydmljZURhdGEpIHtcbiAgICAgICAgbGV0IGRhdGE7XG4gICAgICAgIHNlcnZpY2VEYXRhID0gdHJhbnNmb3JtRGF0YShzZXJ2aWNlRGF0YSwgdGhpcy5uYW1lKTtcbiAgICAgICAgLy8gQXBwbHkgZmlsdGVyIGFuZCBzb3J0LCBpZiBkYXRhIGlzIHJlZnJlc2hlZCB0aHJvdWdoIFJlZnJlc2ggZGF0YSBtZXRob2RcbiAgICAgICAgaWYgKCF0aGlzLmlzTmF2aWdhdGlvbkVuYWJsZWQoKSAmJiB0aGlzLl9pc0NsaWVudFNlYXJjaCkge1xuICAgICAgICAgICAgZGF0YSA9IGdldENsb25lZE9iamVjdChzZXJ2aWNlRGF0YSk7XG4gICAgICAgICAgICBkYXRhID0gdGhpcy5nZXRTZWFyY2hSZXN1bHQoZGF0YSwgdGhpcy5maWx0ZXJJbmZvKTtcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLmdldFNvcnRSZXN1bHQoZGF0YSwgdGhpcy5zb3J0SW5mbyk7XG4gICAgICAgICAgICB0aGlzLnNlcnZlckRhdGEgPSBkYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXJ2ZXJEYXRhID0gc2VydmljZURhdGE7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZmllbGRkZWZzIGFyZSBub3QgcHJlc2VudCwgZ2VuZXJhdGUgZmllbGRkZWZzIGZyb20gZGF0YVxuICAgICAgICAvLyBSZW1vdmluZyBmaWVsZGRlZnMgY2hlY2sgYmVjYXVzZSBXaGVuIGxvYWRvbmRlbWFuZCBwcm9wZXJ0eSBpcyBlbmFibGVkKGRlZmVybG9hZD1cInRydWVcIiksIHRoZSBkYXRhc2V0IHByb3BlcnR5Y2hhbmdlaGFubGRlciBpcyB0cmlnZ2VyZWQgZmlyc3QgYmVmb3JlIHRoZSBkb20gaXMgZ2V0dGluZyByZW5kZXJlZC5cbiAgICAgICAgLy8gU28gYXQgdGhhdCB0aW1lIGZpZWxkZGVmcyBsZW5ndGggaXMgemVybywgZHVlIHRvIHRoaXMgdGhlIGNvbHVtbnMgYXJlIGNyZWF0ZWQgZHluYW1pY2FsbHkuXG4gICAgICAgIGlmICh0aGlzLmlzZHluYW1pY3RhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUdyaWRDb2x1bW5zKHRoaXMuc2VydmVyRGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldEdyaWREYXRhKHRoaXMuc2VydmVyRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJyAmJiB0aGlzLl9zZWxlY3RlZEl0ZW1zRXhpc3QgJiYgc2VydmljZURhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCB3aWRnZXRTdGF0ZSA9IHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5nZXRXaWRnZXRTdGF0ZSh0aGlzKTtcbiAgICAgICAgICAgIGxldCBjdXJyZW50UGFnZUl0ZW1zO1xuICAgICAgICAgICAgaWYgKF8uZ2V0KHdpZGdldFN0YXRlLCAnc2VsZWN0ZWRJdGVtJykpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFnZUl0ZW1zID0gd2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLmZpbHRlcih2YWwgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsLnBhZ2UgPT09IHRoaXMuZGF0YU5hdmlnYXRvci5kbi5jdXJyZW50UGFnZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEl0ZW1zRXhpc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBpZiBhbiBpdGVtIGlzIGFscmVhZHkgc2VsZWN0ZWQsIGRvbid0IHRyaWdnZXIgb25TZWxlY3QgZXZlbnQgZm9yIGl0IGFnYWluXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQYWdlSXRlbXMubGVuZ3RoICYmIHRoaXMuc2VsZWN0ZWRpdGVtLmxlbmd0aCAhPT0gd2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCByZWFzc2lnbiB0aGlzLnNlbGVjdGVkaXRlbSBpZiBzZWxlY3RlZCBpdGVtcyBhbHJlYWR5IGV4aXN0LlxuICAgICAgICAgICAgICAgICAgICBpZiAoXy5pc0FycmF5KHRoaXMuc2VsZWN0ZWRpdGVtKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhZ2VJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RJdGVtKGl0ZW0uaW5kZXgsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRpdGVtID0gY3VycmVudFBhZ2VJdGVtcy5tYXAoZnVuY3Rpb24odmFsKSB7cmV0dXJuIHZhbC5pbmRleDsgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGdW5jdGlvbiB0byBnZW5lcmF0ZSBhbmQgY29tcGlsZSB0aGUgZm9ybSBmaWVsZHMgZnJvbSB0aGUgbWV0YWRhdGFcbiAgICBhc3luYyBnZW5lcmF0ZUR5bmFtaWNDb2x1bW5zKGNvbHVtbnMpIHtcbiAgICAgICAgdGhpcy5maWVsZERlZnMgPSBbXTsgLy8gZW1wdHkgdGhlIGZvcm0gZmllbGRzXG4gICAgICAgIC8vIGVtcHR5IHRoZSBmaWx0ZXIgZmllbGQgdGVtcGxhdGUgcmVmcy5cbiAgICAgICAgKHRoaXMuZmlsdGVyVG1wbCBhcyBhbnkpLl9yZXN1bHRzID0gW107XG5cbiAgICAgICAgaWYgKF8uaXNFbXB0eShjb2x1bW5zKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRtcGwgPSAnJztcbiAgICAgICAgY29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICBsZXQgYXR0cnNUbXBsID0gJyc7XG4gICAgICAgICAgICBsZXQgY3VzdG9tVG1wbCA9ICcnO1xuICAgICAgICAgICAgXy5mb3JFYWNoKGNvbCwgKHZhbCwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHZhbCkgJiYgdmFsICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiBjdXN0b20gZXhwcmVzc2lvbiBpcyBwcmVzZW50LCBrZWVwIGl0IGluc2lkZSB0YWJsZSBjb2x1bW4uIEVsc2UsIGtlZXAgYXMgYXR0cmlidXRlXG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICdjdXN0b21FeHByZXNzaW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tVG1wbCA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzVG1wbCArPSBgICR7a2V5fT1cIiR7dmFsfVwiYDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdG1wbCArPSBgPHdtLXRhYmxlLWNvbHVtbiAke2F0dHJzVG1wbH0gdGFibGVOYW1lPVwiJHt0aGlzLm5hbWV9JHsodGhpcyBhcyBhbnkpLiRhdHRycy5nZXQoJ3RhYmxlX3JlZmVyZW5jZScpfVwiPiR7Y3VzdG9tVG1wbH08L3dtLXRhYmxlLWNvbHVtbj5gO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5keW5hbWljVGFibGVSZWYuY2xlYXIoKTtcbiAgICAgICAgaWYgKCF0aGlzLl9keW5hbWljQ29udGV4dCkge1xuICAgICAgICAgICAgdGhpcy5fZHluYW1pY0NvbnRleHQgPSBPYmplY3QuY3JlYXRlKHRoaXMudmlld1BhcmVudCk7XG4gICAgICAgICAgICB0aGlzLl9keW5hbWljQ29udGV4dFt0aGlzLmdldEF0dHIoJ3dtVGFibGUnKV0gPSB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubm9PZkNvbHVtbnMgPSBjb2x1bW5zLmxlbmd0aDtcbiAgICAgICAgY29uc3QgY29tcG9uZW50RmFjdG9yeVJlZiA9IGF3YWl0IHRoaXMuZHluYW1pY0NvbXBvbmVudFByb3ZpZGVyLmdldENvbXBvbmVudEZhY3RvcnlSZWYoXG4gICAgICAgICAgICAnYXBwLXRhYmxlLWR5bmFtaWMtJyArIHRoaXMud2lkZ2V0SWQsXG4gICAgICAgICAgICB0bXBsLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5vQ2FjaGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdHJhbnNwaWxlOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5keW5hbWljVGFibGVSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudEZhY3RvcnlSZWYsIDAsIHRoaXMuaW5qKTtcbiAgICAgICAgZXh0ZW5kUHJvdG8oY29tcG9uZW50Lmluc3RhbmNlLCB0aGlzLl9keW5hbWljQ29udGV4dCk7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnLmR5bmFtaWMtdGFibGUtY29udGFpbmVyJylbMF0uYXBwZW5kQ2hpbGQoY29tcG9uZW50LmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHByZXBhcmVDb2xEZWZzKGRhdGEpIHtcbiAgICAgICAgbGV0IGRlZmF1bHRGaWVsZERlZnM7XG4gICAgICAgIGxldCBwcm9wZXJ0aWVzO1xuICAgICAgICBsZXQgY29sdW1uSW5kZXggPSAwO1xuICAgICAgICBsZXQgaGVhZGVySW5kZXggPSAwO1xuXG4gICAgICAgIHRoaXMuZmllbGREZWZzID0gW107XG4gICAgICAgIHRoaXMuaGVhZGVyQ29uZmlnID0gW107XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IHt9O1xuICAgICAgICAvKiBpZiBwcm9wZXJ0aWVzIG1hcCBpcyBleGlzdGVkIHRoZW4gZmV0Y2ggdGhlIGNvbHVtbiBjb25maWd1cmF0aW9uIGZvciBhbGwgbmVzdGVkIGxldmVscyB1c2luZyB1dGlsIGZ1bmN0aW9uICovXG4gICAgICAgIHByb3BlcnRpZXMgPSBkYXRhO1xuICAgICAgICAvKmNhbGwgdXRpbGl0eSBmdW5jdGlvbiB0byBwcmVwYXJlIGZpZWxkRGVmcyBmb3IgZ3JpZCBhZ2FpbnN0IGdpdmVuIGRhdGEgKEEgTUFYIE9GIDEwIENPTFVNTlMgT05MWSkqL1xuICAgICAgICBkZWZhdWx0RmllbGREZWZzID0gcHJlcGFyZUZpZWxkRGVmcyhwcm9wZXJ0aWVzKTtcblxuICAgICAgICAvKmFwcGVuZCBhZGRpdGlvbmFsIHByb3BlcnRpZXMqL1xuICAgICAgICBfLmZvckVhY2goZGVmYXVsdEZpZWxkRGVmcywgY29sdW1uRGVmID0+IHtcbiAgICAgICAgICAgIGNvbHVtbkRlZi5iaW5kaW5nID0gY29sdW1uRGVmLmZpZWxkO1xuICAgICAgICAgICAgY29sdW1uRGVmLmNhcHRpb24gPSBjb2x1bW5EZWYuZGlzcGxheU5hbWU7XG4gICAgICAgICAgICBjb2x1bW5EZWYucGNEaXNwbGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbHVtbkRlZi5tb2JpbGVEaXNwbGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbHVtbkRlZi50YWJsZXREaXNwbGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbHVtbkRlZi5zZWFyY2hhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbHVtbkRlZi5zaG93aW5maWx0ZXIgPSB0cnVlO1xuICAgICAgICAgICAgY29sdW1uRGVmLnR5cGUgID0gJ3N0cmluZyc7XG4gICAgICAgICAgICAvLyBGaXggZm9yIFtXTVMtMTk2NjhdIGFuZCBbV01TLTE5NjY5XS0gQWRkaW5nIGluZGV4IGFuZCBoZWFkZXJJbmRleCBmb3IgRHluYW1pYyBEQiBjb2x1bW5zLlxuICAgICAgICAgICAgLy8gTm90ZTogd2UgZG9uJ3QgaGF2ZSBjb2x1bW4gZ3JvdXBzIGZvciBEeW5hbWljIERCXG4gICAgICAgICAgICBjb2x1bW5EZWYuaW5kZXggPSBjb2x1bW5JbmRleDtcbiAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmRleCA9IGhlYWRlckluZGV4O1xuICAgICAgICAgICAgY29sdW1uSW5kZXgrKztcbiAgICAgICAgICAgIGhlYWRlckluZGV4Kys7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlZmF1bHRGaWVsZERlZnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zW2NvbC5maWVsZF0gPSBjb2w7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3JlZGF0YXJlbmRlcicsIHskZGF0YTogZGF0YSwgJGNvbHVtbnM6IHRoaXMuY29sdW1ucywgZGF0YTogZGF0YSwgY29sdW1uczogdGhpcy5jb2x1bW5zfSk7XG5cbiAgICAgICAgZGVmYXVsdEZpZWxkRGVmcyA9IFtdO1xuICAgICAgICAvLyBBcHBseSB0aGUgY2hhbmdlcyBtYWRlIGJ5IHRoZSB1c2VyXG4gICAgICAgIF8uZm9yRWFjaCh0aGlzLmNvbHVtbnMsIHZhbCA9PiB7XG4gICAgICAgICAgICBkZWZhdWx0RmllbGREZWZzLnB1c2godmFsKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5nZW5lcmF0ZUR5bmFtaWNDb2x1bW5zKGRlZmF1bHRGaWVsZERlZnMpO1xuICAgIH1cblxuICAgIGNyZWF0ZUdyaWRDb2x1bW5zKGRhdGEpIHtcbiAgICAgICAgLyogdGhpcyBjYWxsIGJhY2sgZnVuY3Rpb24gcmVjZWl2ZXMgdGhlIGRhdGEgZnJvbSB0aGUgdmFyaWFibGUgKi9cbiAgICAgICAgLyogY2hlY2sgd2hldGhlciBkYXRhIGlzIHZhbGlkIG9yIG5vdCAqL1xuICAgICAgICBjb25zdCBkYXRhVmFsaWQgPSBkYXRhICYmICFkYXRhLmVycm9yO1xuICAgICAgICAvKmlmIHRoZSBkYXRhIGlzIHR5cGUganNvbiBvYmplY3QsIG1ha2UgaXQgYW4gYXJyYXkgb2YgdGhlIG9iamVjdCovXG4gICAgICAgIGlmIChkYXRhVmFsaWQgJiYgIV8uaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgfVxuICAgICAgICAvKiBpZiB0aGUgZGF0YSBpcyBlbXB0eSwgc2hvdyBub2RhdGFtZXNzYWdlICovXG4gICAgICAgIGlmIChfLmlzRW1wdHkoZGF0YSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0R3JpZERhdGEoZGF0YSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRhdGFWYWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8qIGlmIG5ldyBjb2x1bW5zIHRvIGJlIHJlbmRlcmVkLCBwcmVwYXJlIGRlZmF1bHQgZmllbGREZWZzIGZvciB0aGUgZGF0YSBwcm92aWRlZCovXG4gICAgICAgIHRoaXMucHJlcGFyZUNvbERlZnMoZGF0YSk7XG5cbiAgICAgICAgdGhpcy5zZXJ2ZXJEYXRhID0gZGF0YTtcbiAgICAgICAgdGhpcy5zZXRHcmlkRGF0YSh0aGlzLnNlcnZlckRhdGEpO1xuICAgIH1cblxuICAgIGdldFNvcnRFeHByKCkge1xuICAgICAgICBsZXQgc29ydEV4cDtcbiAgICAgICAgbGV0IHBhZ2luZ09wdGlvbnM7XG4gICAgICAgIGlmICh0aGlzLmRhdGFzb3VyY2UgJiYgdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uSVNfUEFHRUFCTEUpKSB7XG4gICAgICAgICAgICBwYWdpbmdPcHRpb25zID0gdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX1BBR0lOR19PUFRJT05TKTtcbiAgICAgICAgICAgIHNvcnRFeHAgPSBfLmlzRW1wdHkocGFnaW5nT3B0aW9ucykgPyAnJyA6IGdldE9yZGVyQnlFeHByKHBhZ2luZ09wdGlvbnMuc29ydCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNvcnRFeHAgfHwgJyc7XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXk6IHN0cmluZywgbnY6IGFueSwgb3Y/OiBhbnkpIHtcbiAgICAgICAgbGV0IGVuYWJsZU5ld1JvdztcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ2RhdGFzb3VyY2UnOlxuICAgICAgICAgICAgICAgIC8vIEZpeCBmb3IgW1dNUy0yMzY1M10gd2hlbiBzdGFydFVwZGF0ZSBpcyBmYWxzZSAocmVxdWVzdCBvbiBwYWdlIGxvYWQgcHJvcGVydHkgaXMgdW5jaGVja2VkKSxcbiAgICAgICAgICAgICAgICAvLyB0aGVuIHNldCBzdGF0dXMgbXNnIGFzIFwiTm8gZGF0YSBmb3VuZFwiXG4gICAgICAgICAgICAgICAgaWYgKG52LnN0YXJ0VXBkYXRlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhcmlhYmxlSW5mbGlnaHQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdub2RhdGEnLCB0aGlzLm5vZGF0YW1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLndhdGNoVmFyaWFibGVEYXRhU2V0KHRoaXMuZGF0YXNldCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRhdGFTb3VyY2VDaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RhdGFzZXQnOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWRPcHRpb25zLmlzTmF2VHlwZVNjcm9sbE9yT25kZW1hbmQoKSAmJiB0aGlzLmdyaWRPcHRpb25zLmdldEN1cnJlbnRQYWdlKCkgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZXRJc05leHRQYWdlRGF0YShmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmJpbmRkYXRhc291cmNlICYmICF0aGlzLmRhdGFzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBpZiB0YWJsZSBpcyBpbnNpZGUgbGlzdCB0aGVuIHRhYmxlIGRhdGFzZXQgd2lsbCBiZSBzZXQgYXMgXCJpdGVtLlhYWFwiIGFuZCB0aGVyZSBpcyBubyBkYXRhc291cmNlLlxuICAgICAgICAgICAgICAgIC8vIFNvIGV4dHJhY3RpbmcgZGF0YXNvdXJjZSBmcm9tIHRoZSBkYXRzZXQgYm91bmQgZXhwcmVzc2lvbi5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wYXJlbnRMaXN0ICYmICF0aGlzLmRhdGFzb3VyY2UgJiYgXy5zdGFydHNXaXRoKHRoaXMuYmluZGRhdGFzZXQsICdpdGVtJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlID0gZ2V0RGF0YXNvdXJjZUZyb21FeHByKHRoaXMud2lkZ2V0LiRhdHRycy5nZXQoJ2RhdGFzZXRib3VuZGV4cHInKSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWRPcHRpb25zLmlzTmF2VHlwZVNjcm9sbE9yT25kZW1hbmQoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9ucy5pc05leHRQYWdlRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBmZXRjaGluZyBuZXh0IHBhZ2UgZGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZXRJc0RhdGFVcGRhdGVkQnlVc2VyKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gZGF0YXNldCBpcyB1cGRhdGVkIGZyb20gc2NyaXB0XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldElzRGF0YVVwZGF0ZWRCeVVzZXIodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExhc3RBY3Rpb25Ub0RhdGFzZXRVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0SXNOZXh0UGFnZURhdGEoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGZvciBTdGF0aWMgVmFyaWFibGVzIHdpdGggUmV0YWluIFN0YXRlIGVuYWJsZWQsIHByZXZlbnQgVGFibGUgZnJvbSByZW5kZXJpbmcgbW9yZSB0aGFuIG9uY2VcbiAgICAgICAgICAgICAgICBpZiAoIShfLmdldCh0aGlzLmRhdGFzb3VyY2UsICdjYXRlZ29yeScpID09PSAnd20uVmFyaWFibGUnICYmIHRoaXMuX3BhZ2VMb2FkICYmIHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53YXRjaFZhcmlhYmxlRGF0YVNldChudik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZmlsdGVybW9kZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignZmlsdGVybW9kZScsIG52KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlYXJjaGxhYmVsJzpcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdzZWFyY2hMYWJlbCcsIG52KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ25hdmlnYXRpb24nOlxuICAgICAgICAgICAgICAgIGlmIChudiA9PT0gJ0FkdmFuY2VkJykgeyAvLyBTdXBwb3J0IGZvciBvbGRlciBwcm9qZWN0cyB3aGVyZSBuYXZpZ2F0aW9uIHR5cGUgd2FzIGFkdmFuY2VkIGluc3RlYWQgb2YgY2xhc2ljXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbiA9ICdDbGFzc2ljJztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobnYgIT09ICdOb25lJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3duYXZpZ2F0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignbmF2aWdhdGlvbicsIHRoaXMubmF2aWdhdGlvbik7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRlbWFuZExvYWQgPSBudiA9PT0gTkFWSUdBVElPTl9UWVBFLk9OREVNQU5EID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5mU2Nyb2xsID0gbnYgPT09IE5BVklHQVRJT05fVFlQRS5TQ1JPTEwgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXZDb250cm9scyA9IG52O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZ3JpZGZpcnN0cm93c2VsZWN0JzpcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdzZWxlY3RGaXJzdFJvdycsIG52KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2dyaWRjbGFzcyc6XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ29wdGlvbicsICdjc3NDbGFzc05hbWVzLmdyaWQnLCBudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdub2RhdGFtZXNzYWdlJzpcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnb3B0aW9uJywgJ2RhdGFTdGF0ZXMubm9kYXRhJywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbG9hZGluZ2RhdGFtc2cnOlxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdvcHRpb24nLCAnZGF0YVN0YXRlcy5sb2FkaW5nJywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbG9hZGluZ2ljb24nOlxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdvcHRpb24nLCAnbG9hZGluZ2ljb24nLCBudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzcGFjaW5nJzpcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnb3B0aW9uJywgJ3NwYWNpbmcnLCBudik7XG4gICAgICAgICAgICAgICAgaWYgKG52ID09PSAnY29uZGVuc2VkJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TaXplID0gJ3NtYWxsJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TaXplID0gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZXhwb3J0Zm9ybWF0JzpcbiAgICAgICAgICAgICAgICB0aGlzLmV4cG9ydE9wdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAobnYpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gUG9wdWxhdGUgb3B0aW9ucyBmb3IgZXhwb3J0IGRyb3AgZG93biBtZW51XG4gICAgICAgICAgICAgICAgICAgIF8uZm9yRWFjaChfLnNwbGl0KG52LCAnLCcpLCB0eXBlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwb3J0T3B0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBleHBvcnRJY29uTWFwcGluZ1t0eXBlXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3Nob3duZXdyb3cnOlxuICAgICAgICAgICAgICAgIC8vIEVuYWJsZSBuZXcgcm93IGlmIHNob3duZXcgaXMgdHJ1ZSBvciBhZGROZXdSb3cgYnV0b24gaXMgcHJlc2VudFxuICAgICAgICAgICAgICAgIGVuYWJsZU5ld1JvdyA9IG52IHx8IF8uc29tZSh0aGlzLmFjdGlvbnMsIGFjdCA9PiBfLmluY2x1ZGVzKGFjdC5hY3Rpb24sICdhZGROZXdSb3coKScpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnb3B0aW9uJywgJ2FjdGlvbnNFbmFibGVkLm5ldycsIGVuYWJsZU5ld1Jvdyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdwYWdlc2l6ZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLm9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIG1heFJlc3VsdHM6IG52XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3Iud2lkZ2V0Lm1heFJlc3VsdHMgPSBudjtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3IubWF4UmVzdWx0cyA9IG52O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnb25kZW1hbmRtZXNzYWdlJzpcbiAgICAgICAgICAgICAgICBpZiAobnYpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5maW5kKCcub24tZGVtYW5kLWRhdGFncmlkID4gYScpLnRleHQobnYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLm9uZGVtYW5kbWVzc2FnZSA9IG52O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndmlld2xlc3NtZXNzYWdlJzpcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnZpZXdsZXNzbWVzc2FnZSA9IG52O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2hvdyc6XG4gICAgICAgICAgICAgICAgaWYgKG52KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnc2hvdycpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnaGlkZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRhdGFTb3VyY2VDaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMuZmllbGREZWZzLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgdHJpZ2dlckZuKGNvbC5vbkRhdGFTb3VyY2VDaGFuZ2UgJiYgY29sLm9uRGF0YVNvdXJjZUNoYW5nZS5iaW5kKGNvbCkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFyQWN0aW9uUm93VmFycygpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25Sb3dJbmRleCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5hY3Rpb25Sb3dQYWdlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdhY3Rpb25Sb3dJbmRleCcsIHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2FjdGlvblJvd1BhZ2UnLCB1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIG9uU3R5bGVDaGFuZ2Uoa2V5LCBudiwgb3YpIHtcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3dpZHRoJzpcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0R3JpZERpbWVuc2lvbnMnLCAnd2lkdGgnLCBudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdoZWlnaHQnOlxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRHcmlkRGltZW5zaW9ucycsICdoZWlnaHQnLCBudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBzdXBlci5vblN0eWxlQ2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICB9XG5cbiAgICBwb3B1bGF0ZUFjdGlvbnMoKSB7XG4gICAgICAgIHRoaXMuX2FjdGlvbnMuaGVhZGVyID0gW107XG4gICAgICAgIHRoaXMuX2FjdGlvbnMuZm9vdGVyID0gW107XG4gICAgICAgIF8uZm9yRWFjaCh0aGlzLmFjdGlvbnMsIChhY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmIChfLmluY2x1ZGVzKGFjdGlvbi5wb3NpdGlvbiwgJ2hlYWRlcicpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWN0aW9ucy5oZWFkZXIucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKF8uaW5jbHVkZXMoYWN0aW9uLnBvc2l0aW9uLCAnZm9vdGVyJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hY3Rpb25zLmZvb3Rlci5wdXNoKGFjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHRoaXMgbWV0aG9kIHdpbGwgcmVuZGVyIHRoZSBmaWx0ZXIgcm93LlxuICAgIHJlbmRlckR5bmFtaWNGaWx0ZXJDb2x1bW4oZmlsdGVUZW1SZWYpIHtcbiAgICAgICAgLy8gRm9yIGR5bmFtaWMgdGFibGUgbWFudWFsbHkgcHVzaGluZyB0aGUgZmlsdGVydGVtcGxhdGVSZWYgYXMgdGVtcGxhdGVSZWYgd2lsbCBub3QgYmUgYXZhaWxhYmxlIHByaW9yLlxuICAgICAgICBpZiAodGhpcy5pc2R5bmFtaWN0YWJsZSkge1xuICAgICAgICAgICAgKHRoaXMuZmlsdGVyVG1wbCBhcyBhbnkpLl9yZXN1bHRzLnB1c2goZmlsdGVUZW1SZWYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJDb2x1bW5zKHRhYmxlQ29sdW1uLCBjb2xJbmRleCkge1xuICAgICAgICBpZiAoaXNNb2JpbGUoKSAmJiB0aGlzLnZpZXdwb3J0LmlzTW9iaWxlVHlwZSkge1xuICAgICAgICAgICAgaWYgKCF0YWJsZUNvbHVtbi5tb2JpbGVEaXNwbGF5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlld3BvcnQuaXNUYWJsZXRUeXBlKSB7XG4gICAgICAgICAgICBpZiAoIXRhYmxlQ29sdW1uLnRhYmxldERpc3BsYXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXRhYmxlQ29sdW1uLnBjRGlzcGxheSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGFibGVDb2x1bW5bJ3ByaW1hcnkta2V5J10pIHtcbiAgICAgICAgICAgIHRoaXMucHJpbWFyeUtleS5wdXNoKHRhYmxlQ29sdW1uLmZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpZWxkRGVmc1tjb2xJbmRleF0gPSB0YWJsZUNvbHVtbjtcbiAgICAgICAgY29uc3QgY29sQ291bnQgPSB0aGlzLmZpZWxkRGVmcy5sZW5ndGg7XG4gICAgICAgIHRoaXMuZnVsbEZpZWxkRGVmcy5wdXNoKHRhYmxlQ29sdW1uKTtcbiAgICAgICAgdGhpcy5yb3dGaWx0ZXJbdGFibGVDb2x1bW4uZmllbGRdID0ge1xuICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmZpZWxkRGVmcy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnNbY29sLmZpZWxkXSA9IGNvbDtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIElmIGR5bmFtaWMgZGF0YXRhYmxlIGFuZCBsYXN0IGNvbHVtbiwgcGFzcyB0aGUgY29sdW1ucyB0byBqcXVlcnkgZGF0YXRhYmxlXG4gICAgICAgIGlmICh0aGlzLmlzZHluYW1pY3RhYmxlICYmIGNvbENvdW50ID09PSB0aGlzLm5vT2ZDb2x1bW5zKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlck9wZXJhdGlvbkNvbHVtbnMoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2NvbERlZnMnLCB0aGlzLmZpZWxkRGVmcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWdpc3RlckZvcm1GaWVsZChuYW1lLCBmb3JtRmllbGQpIHtcbiAgICAgICAgdGhpcy5mb3JtZmllbGRzW25hbWVdID0gZm9ybUZpZWxkO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyQWN0aW9ucyh0YWJsZUFjdGlvbikge1xuICAgICAgICB0aGlzLmFjdGlvbnMucHVzaCh0YWJsZUFjdGlvbik7XG4gICAgICAgIHRoaXMucG9wdWxhdGVBY3Rpb25zKCk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJSb3codGFibGVSb3csIHJvd0luc3RhbmNlKSB7XG4gICAgICAgIHRoaXMucm93RGVmID0gdGFibGVSb3c7XG4gICAgICAgIHRoaXMucm93SW5zdGFuY2UgPSByb3dJbnN0YW5jZTtcbiAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ29wdGlvbicsICdjc3NDbGFzc05hbWVzLnJvd0V4cGFuZEljb24nLCB0aGlzLnJvd0RlZi5leHBhbmRpY29uKTtcbiAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ29wdGlvbicsICdjc3NDbGFzc05hbWVzLnJvd0NvbGxhcHNlSWNvbicsIHRoaXMucm93RGVmLmNvbGxhcHNlaWNvbik7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMucm93RXhwYW5zaW9uRW5hYmxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMucm93RGVmID0gdGhpcy5yb3dEZWY7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJSb3dBY3Rpb25zKHRhYmxlUm93QWN0aW9uKSB7XG4gICAgICAgIHRoaXMucm93QWN0aW9ucy5wdXNoKHRhYmxlUm93QWN0aW9uKTtcbiAgICB9XG5cbiAgICBzZWxlY3RJdGVtKGl0ZW0sIGRhdGEpIHtcbiAgICAgICAgLyogc2VydmVyIGlzIG5vdCB1cGRhdGluZyBpbW1lZGlhdGVseSwgc28gc2V0IHRoZSBzZXJ2ZXIgZGF0YSB0byBzdWNjZXNzIGNhbGxiYWNrIGRhdGEgKi9cbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuc2VydmVyRGF0YSA9IGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF8uaXNPYmplY3QoaXRlbSkpIHtcbiAgICAgICAgICAgIGl0ZW0gPSBfLm9taXRCeShpdGVtLCAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXy5pc0FycmF5KHZhbHVlKSAmJiBfLmlzRW1wdHkodmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NlbGVjdFJvdycsIGl0ZW0sIHRydWUpO1xuICAgIH1cbiAgICAvKiBkZXNlbGVjdCB0aGUgZ2l2ZW4gaXRlbSovXG4gICAgZGVzZWxlY3RJdGVtKGl0ZW0pIHtcbiAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2Rlc2VsZWN0Um93JywgaXRlbSk7XG4gICAgfVxuXG4gICAgb25EYXRhTmF2aWdhdG9yRGF0YVNldENoYW5nZShudikge1xuICAgICAgICBsZXQgZGF0YTtcbiAgICAgICAgdGhpcy5fX2Z1bGxEYXRhID0gbnY7XG4gICAgICAgIHRoaXMuY2hlY2tGaWx0ZXJzQXBwbGllZCh0aGlzLmdldFNvcnRFeHByKCkpO1xuICAgICAgICBpZiAodGhpcy5faXNDbGllbnRTZWFyY2gpIHtcbiAgICAgICAgICAgIGRhdGEgPSBnZXRDbG9uZWRPYmplY3QodGhpcy5fX2Z1bGxEYXRhKTtcbiAgICAgICAgICAgIGlmIChfLmlzT2JqZWN0KGRhdGEpICYmICFfLmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YSA9IHRoaXMuZ2V0U2VhcmNoUmVzdWx0KGRhdGEsIHRoaXMuZmlsdGVySW5mbyk7XG4gICAgICAgICAgICBkYXRhID0gdGhpcy5nZXRTb3J0UmVzdWx0KGRhdGEsIHRoaXMuc29ydEluZm8pO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG52O1xuICAgIH1cblxuICAgIHRvZ2dsZU1lc3NhZ2Uoc2hvdywgdHlwZSwgbXNnLCBoZWFkZXI/KSB7XG4gICAgICAgIGlmIChzaG93ICYmIG1zZykge1xuICAgICAgICAgICAgdGhpcy5hcHAubm90aWZ5QXBwKG1zZywgdHlwZSwgaGVhZGVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4cG9ydCgkaXRlbSkge1xuICAgICAgICBsZXQgZmlsdGVyRmllbGRzO1xuICAgICAgICBjb25zdCBzb3J0T3B0aW9ucyA9IF8uaXNFbXB0eSh0aGlzLnNvcnRJbmZvKSA/ICcnIDogdGhpcy5zb3J0SW5mby5maWVsZCArICcgJyArIHRoaXMuc29ydEluZm8uZGlyZWN0aW9uO1xuICAgICAgICBjb25zdCBjb2x1bW5zID0ge307XG4gICAgICAgIGxldCBpc1ZhbGlkO1xuICAgICAgICBsZXQgcmVxdWVzdERhdGE7XG4gICAgICAgIHRoaXMuZmllbGREZWZzLmZvckVhY2goZmllbGREZWYgPT4ge1xuICAgICAgICAgICAgLy8gRG8gbm90IGFkZCB0aGUgcm93IG9wZXJhdGlvbiBhY3Rpb25zIGNvbHVtbiB0byB0aGUgZXhwb3J0ZWQgZmlsZS5cbiAgICAgICAgICAgIGlmIChmaWVsZERlZi5maWVsZCA9PT0gUk9XX09QU19GSUVMRCB8fCAhZmllbGREZWYuc2hvdykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAnaGVhZGVyJzogZmllbGREZWYuZGlzcGxheU5hbWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBJZiBjb2x1bW4gaGFzIGV4cG9ydGV4cHJlc3Npb24sIHRoZW4gc2VuZCBmb3JtIHRoZSBleHByZXNzaW9uIGFzIHJlcXVpcmVkIGJ5IGJhY2tlbmQuXG4gICAgICAgICAgICAvLyBvdGhlcndpc2Ugc2VuZCB0aGUgZmllbGQgbmFtZS5cbiAgICAgICAgICAgIGlmIChmaWVsZERlZi5leHBvcnRleHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgKDxhbnk+b3B0aW9uKS5leHByZXNzaW9uID0gZmllbGREZWYuZXhwb3J0ZXhwcmVzc2lvbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgKDxhbnk+b3B0aW9uKS5maWVsZCA9IGZpZWxkRGVmLmZpZWxkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29sdW1uc1tmaWVsZERlZi5maWVsZF0gPSBvcHRpb247XG4gICAgICAgIH0pO1xuICAgICAgICBmaWx0ZXJGaWVsZHMgPSB0aGlzLmdldEZpbHRlckZpZWxkcyh0aGlzLmZpbHRlckluZm8pO1xuICAgICAgICByZXF1ZXN0RGF0YSA9IHtcbiAgICAgICAgICAgIG1hdGNoTW9kZSA6ICdhbnl3aGVyZWlnbm9yZWNhc2UnLFxuICAgICAgICAgICAgZmlsdGVyRmllbGRzIDogZmlsdGVyRmllbGRzLFxuICAgICAgICAgICAgb3JkZXJCeSA6IHNvcnRPcHRpb25zLFxuICAgICAgICAgICAgZXhwb3J0VHlwZSA6ICRpdGVtLmxhYmVsLFxuICAgICAgICAgICAgbG9naWNhbE9wIDogJ0FORCcsXG4gICAgICAgICAgICBleHBvcnRTaXplIDogdGhpcy5leHBvcnRkYXRhc2l6ZSxcbiAgICAgICAgICAgIGNvbHVtbnMgOiBjb2x1bW5zXG4gICAgICAgIH07XG4gICAgICAgIGlzVmFsaWQgPSB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZWV4cG9ydCcsIHskZGF0YTogcmVxdWVzdERhdGF9KTtcbiAgICAgICAgaWYgKGlzVmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdERhdGEuZmllbGRzID0gXy52YWx1ZXMocmVxdWVzdERhdGEuY29sdW1ucyk7XG4gICAgICAgIHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkRPV05MT0FELCB7ZGF0YTogcmVxdWVzdERhdGF9KTtcbiAgICB9XG5cbiAgICBleHBhbmRSb3cocm93SWQpIHtcbiAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2V4cGFuZFJvdycsIHJvd0lkKTtcbiAgICB9XG5cbiAgICBjb2xsYXBzZVJvdyhyb3dJZCkge1xuICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnY29sbGFwc2VSb3cnLCByb3dJZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZG9jdW1lbnRDbGlja0JpbmQoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgJHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgLy8gSWYgY2xpY2sgdHJpZ2dlcmVkIGZyb20gc2FtZSBncmlkIG9yIGEgZGlhbG9nLCBkbyBub3Qgc2F2ZSB0aGUgcm93XG4gICAgICAgIGlmICh0aGlzLiRlbGVtZW50WzBdLmNvbnRhaW5zKCR0YXJnZXQpIHx8IGV2ZW50LnRhcmdldC5kb2N0eXBlIHx8IGlzSW5wdXRCb2R5V3JhcHBlcigkKCR0YXJnZXQpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzYXZlUm93Jyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVkcmF3KGZvcmNlUmVuZGVyKSB7XG4gICAgICAgIGlmIChmb3JjZVJlbmRlcikge1xuICAgICAgICAgICAgdGhpcy5kYXRhZ3JpZEVsZW1lbnQuZGF0YXRhYmxlKHRoaXMuZ3JpZE9wdGlvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldENvbEdyb3VwV2lkdGhzJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2FkZE9yUmVtb3ZlU2Nyb2xsJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGludm9rZUFjdGlvbkV2ZW50KCRldmVudCwgZXhwcmVzc2lvbjogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZuID0gJHBhcnNlRXZlbnQoZXhwcmVzc2lvbik7XG4gICAgICAgIGZuKHRoaXMudmlld1BhcmVudCwgT2JqZWN0LmFzc2lnbih0aGlzLmNvbnRleHQsIHskZXZlbnR9KSk7XG4gICAgfVxuXG4gICAgLy8gY2hhbmdlIGFuZCBibHVyIGV2ZW50cyBhcmUgYWRkZWQgZnJvbSB0aGUgdGVtcGxhdGVcbiAgICBwcm90ZWN0ZWQgaGFuZGxlRXZlbnQobm9kZTogSFRNTEVsZW1lbnQsIGV2ZW50TmFtZTogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24sIGxvY2FsczogYW55KSB7XG4gICAgICAgIGlmIChldmVudE5hbWUgIT09ICdzZWxlY3QnKSB7XG4gICAgICAgICAgICBzdXBlci5oYW5kbGVFdmVudCh0aGlzLm5hdGl2ZUVsZW1lbnQsIGV2ZW50TmFtZSwgY2FsbGJhY2ssIGxvY2Fscyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0cmlnZ2VyVXBsb2FkRXZlbnQoJGV2ZW50LCBldmVudE5hbWUsIGZpZWxkTmFtZSwgcm93KSB7XG4gICAgICAgIGNvbnN0IHBhcmFtczogYW55ID0geyRldmVudCwgcm93fTtcbiAgICAgICAgaWYgKCF0aGlzLmNvbHVtbnNbZmllbGROYW1lXSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudE5hbWUgPT09ICdjaGFuZ2UnKSB7XG4gICAgICAgICAgICBwYXJhbXMubmV3VmFsID0gJGV2ZW50LnRhcmdldC5maWxlcztcbiAgICAgICAgICAgIHBhcmFtcy5vbGRWYWwgPSB0aGlzLmNvbHVtbnNbZmllbGROYW1lXS5fb2xkVXBsb2FkVmFsO1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zW2ZpZWxkTmFtZV0uX29sZFVwbG9hZFZhbCA9IHBhcmFtcy5uZXdWYWw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb2x1bW5zW2ZpZWxkTmFtZV0uaW52b2tlRXZlbnRDYWxsYmFjayhldmVudE5hbWUsIHBhcmFtcyk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJGb3JtV2lkZ2V0KCkge31cblxuICAgIC8vIEZvcm0gY29udHJvbCBhY2Nlc3NvciBtZXRob2RzLiBUaGlzIHdpbGwgYmUgdXNlZCBmb3IgdGFibGUgaW5zaWRlIGZvcm1cbiAgICB3cml0ZVZhbHVlKCkge31cblxuICAgIHByaXZhdGUgX29uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7fTtcbiAgICBwcml2YXRlIF9vblRvdWNoZWQ6IGFueSA9ICgpID0+IHt9O1xuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbikge1xuICAgICAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICAgIH1cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbikge1xuICAgICAgICB0aGlzLl9vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICBuZ09uRGV0YWNoKCkge1xuICAgICAgICBzdXBlci5uZ09uRGV0YWNoKCk7XG4gICAgICAgIGlmIChfLmdldCh0aGlzLmRhdGFzb3VyY2UsICdjYXRlZ29yeScpID09PSAnd20uVmFyaWFibGUnICYmIHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJykge1xuICAgICAgICAgICAgdGhpcy5fcGFnZUxvYWQgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3BhZ2VMb2FkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJwYW5lbC1oZWFkaW5nXCIgKm5nSWY9XCJ0aXRsZSB8fCBzdWJoZWFkaW5nIHx8IGljb25jbGFzcyB8fCBleHBvcnRPcHRpb25zLmxlbmd0aCB8fCBfYWN0aW9ucy5oZWFkZXIubGVuZ3RoXCI+XG4gICAgPGgzIGNsYXNzPVwicGFuZWwtdGl0bGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtbGVmdFwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJhcHAtaWNvbiBwYW5lbC1pY29uIHt7aWNvbmNsYXNzfX1cIiAqbmdJZj1cImljb25jbGFzc1wiPjwvaT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkaW5nXCIgW2lubmVySFRNTF09XCJ0aXRsZVwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCIgW2lubmVySFRNTF09XCJzdWJoZWFkaW5nXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwtYWN0aW9ucyBhcHAtZGF0YWdyaWQtYWN0aW9uc1wiICpuZ0lmPVwiZXhwb3J0T3B0aW9ucy5sZW5ndGggfHwgX2FjdGlvbnMuaGVhZGVyLmxlbmd0aFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnRuIG9mIF9hY3Rpb25zLmhlYWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImJ0bi53aWRnZXRUeXBlID09PSAnYnV0dG9uJyA/IGJ1dHRvblJlZiA6IGFuY2hvclJlZlwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7YnRuOmJ0bn1cIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGRpdiB3bU1lbnUgZHJvcGRvd24gY2FwdGlvbi5iaW5kPVwiYXBwTG9jYWxlLkxBQkVMX0VYUE9SVFwiICpuZ0lmPVwiZXhwb3J0T3B0aW9ucy5sZW5ndGhcIiAgYXV0b2Nsb3NlPVwiYWx3YXlzXCIgYXR0ci5uYW1lPVwie3tuYW1lfX0tZXhwb3J0XCJcbiAgICAgICAgICAgICAgICBkYXRhc2V0LmJpbmQ9XCJleHBvcnRPcHRpb25zXCIgc2VsZWN0LmV2ZW50PVwiZXhwb3J0KCRpdGVtKVwiIG1lbnVwb3NpdGlvbj1cImRvd24sbGVmdFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2gzPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiYXBwLWRhdGFncmlkXCIgI2RhdGFncmlkRWxlbWVudD48L2Rpdj5cblxuPGRpdiBjbGFzcz1cInBhbmVsLWZvb3RlciBjbGVhcmZpeFwiIFtoaWRkZW5dPVwiIV9hY3Rpb25zLmZvb3Rlci5sZW5ndGggJiYgKCFzaG93bmF2aWdhdGlvbiB8fCAob25EZW1hbmRMb2FkICYmIGRhdGFOYXZpZ2F0b3IuaXNEaXNhYmxlTmV4dCkgfHwgZGF0YU5hdmlnYXRvcj8uZGF0YVNpemUgPD0gcGFnZXNpemUpXCI+XG4gICAgPGRpdiBjbGFzcz1cImFwcC1kYXRhZ3JpZC1wYWdpbmF0b3JcIiBbaGlkZGVuXT1cIighZGF0YU5hdmlnYXRvcj8uZGF0YVNpemUgJiYgIWRhdGFOYXZpZ2F0b3IuZGF0YXNvdXJjZT8ucGFnaW5hdGlvbj8ubmV4dCkgfHwgIXNob3duYXZpZ2F0aW9uIHx8IChvbkRlbWFuZExvYWQgJiYgZGF0YU5hdmlnYXRvci5pc0Rpc2FibGVOZXh0KSB8fCBkYXRhTmF2aWdhdG9yPy5kYXRhU2l6ZSA8PSBwYWdlc2l6ZVwiPlxuICAgICAgICA8bmF2IHdtUGFnaW5hdGlvbiBzaG93LmJpbmQ9XCJzaG93bmF2aWdhdGlvblwiIG5hdmlnYXRpb25hbGlnbi5iaW5kPVwibmF2aWdhdGlvbmFsaWduXCJcbiAgICAgICAgICAgICBuYXZpZ2F0aW9uc2l6ZS5iaW5kPVwibmF2aWdhdGlvblNpemVcIlxuICAgICAgICAgICAgIG5hdmlnYXRpb24uYmluZD1cIm5hdkNvbnRyb2xzXCIgc2hvd3JlY29yZGNvdW50LmJpbmQ9XCJzaG93cmVjb3JkY291bnRcIiBtYXhzaXplLmJpbmQ9XCJtYXhzaXplXCJcbiAgICAgICAgICAgICBib3VuZGFyeWxpbmtzLmJpbmQ9XCJib3VuZGFyeWxpbmtzXCJcbiAgICAgICAgICAgICBmb3JjZWVsbGlwc2VzLmJpbmQ9XCJmb3JjZWVsbGlwc2VzXCIgZGlyZWN0aW9ubGlua3MuYmluZD1cImRpcmVjdGlvbmxpbmtzXCI+PC9uYXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImFwcC1kYXRhZ3JpZC1hY3Rpb25zXCIgKm5nSWY9XCJfYWN0aW9ucy5mb290ZXIubGVuZ3RoXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ0biBvZiBfYWN0aW9ucy5mb290ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImJ0bi53aWRnZXRUeXBlID09PSAnYnV0dG9uJyA/IGJ1dHRvblJlZiA6IGFuY2hvclJlZlwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7YnRuOmJ0bn1cIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNidXR0b25SZWYgbGV0LWJ0bj1cImJ0blwiPlxuICAgIDxidXR0b24gd21CdXR0b24gY2FwdGlvbi5iaW5kPVwiYnRuLmRpc3BsYXlOYW1lXCIgc2hvdy5iaW5kPVwiYnRuLnNob3dcIiBjbGFzcy5iaW5kPVwiYnRuLmNsYXNzXCIgIGljb25jbGFzcy5iaW5kPVwiYnRuLmljb25jbGFzc1wiIChjbGljayk9XCJpbnZva2VBY3Rpb25FdmVudCgkZXZlbnQsIGJ0bi5hY3Rpb24pXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYnRuLXNtJzogc3BhY2luZyA9PT0gJ2NvbmRlbnNlZCcsICdkaXNhYmxlZC1uZXcnOiBidG4ua2V5ID09PSAnYWRkTmV3Um93JyAmJiAoaXNHcmlkRWRpdE1vZGUgfHwgaXNMb2FkaW5nKX1cIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIHNob3J0Y3V0a2V5LmJpbmQ9XCJidG4uc2hvcnRjdXRrZXlcIiB0YWJpbmRleC5iaW5kPVwiYnRuLnRhYmluZGV4XCIgaGludC5iaW5kPVwiYnRuLnRpdGxlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJidG4uZGlzcGxheU5hbWVcIiBkaXNhYmxlZC5iaW5kPVwiYnRuLmRpc2FibGVkXCIgY29uZGl0aW9uYWxjbGFzcy5iaW5kPVwiYnRuLmNvbmRpdGlvbmFsY2xhc3NcIiBjb25kaXRpb25hbHN0eWxlLmJpbmQ9XCJidG4uY29uZGl0aW9uYWxzdHlsZVwiPjwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNhbmNob3JSZWYgbGV0LWJ0bj1cImJ0blwiPlxuICAgIDxhIHdtQW5jaG9yIGNhcHRpb24uYmluZD1cImJ0bi5kaXNwbGF5TmFtZVwiIHNob3cuYmluZD1cImJ0bi5zaG93XCIgY2xhc3MuYmluZD1cImJ0bi5jbGFzc1wiICBpY29uY2xhc3MuYmluZD1cImJ0bi5pY29uY2xhc3NcIiAoY2xpY2spPVwiaW52b2tlQWN0aW9uRXZlbnQoJGV2ZW50LCBidG4uYWN0aW9uKVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7J2J0bi1zbSc6IHNwYWNpbmcgPT09ICdjb25kZW5zZWQnLCAnZGlzYWJsZWQtbmV3JzogYnRuLmtleSA9PT0gJ2FkZE5ld1JvdycgJiYgKGlzR3JpZEVkaXRNb2RlIHx8IGlzTG9hZGluZyl9XCJcbiAgICAgICAgICAgIHNob3J0Y3V0a2V5LmJpbmQ9XCJidG4uc2hvcnRjdXRrZXlcIiB0YWJpbmRleC5iaW5kPVwiYnRuLnRhYmluZGV4XCIgaGludC5iaW5kPVwiYnRuLnRpdGxlXCJcbiAgICAgICAgICAgIGh5cGVybGluay5iaW5kPVwiYnRuLmh5cGVybGlua1wiIHRhcmdldC5iaW5kPVwiYnRuLnRhcmdldFwiIGNvbmRpdGlvbmFsY2xhc3MuYmluZD1cImJ0bi5jb25kaXRpb25hbGNsYXNzXCIgY29uZGl0aW9uYWxzdHlsZS5iaW5kPVwiYnRuLmNvbmRpdGlvbmFsc3R5bGVcIj48L2E+XG48L25nLXRlbXBsYXRlPlxuXG48ZGl2IGhpZGRlbj5cbiAgICA8bmctY29udGFpbmVyICNtdWx0aUNvbHVtbkZpbHRlclZpZXc+PC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICNpbmxpbmVFZGl0Vmlldz48L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgI2lubGluZUVkaXROZXdWaWV3PjwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAjcm93QWN0aW9uc1ZpZXc+PC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICNyb3dFeHBhbnNpb25BY3Rpb25WaWV3PjwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAjY3VzdG9tRXhwclZpZXc+PC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICNkeW5hbWljVGFibGU+PC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICNyb3dEZXRhaWxWaWV3PjwvbmctY29udGFpbmVyPlxuXG4gICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdGFibGUtY29udGFpbmVyXCI+PC9kaXY+XG48L2Rpdj5cbiJdfQ==