@fundamental-ngx/core 0.49.1 → 0.49.2

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 (310) hide show
  1. package/avatar-group-legacy/avatar-group-legacy.component.d.ts +6 -6
  2. package/avatar-group-legacy/directives/avatar-group-legacy-overflow-body.directive.d.ts +2 -2
  3. package/avatar-group-legacy/directives/avatar-group-legacy-overflow-button.directive.d.ts +2 -2
  4. package/bar/bar.component.d.ts +6 -6
  5. package/bar/button-bar/button-bar.component.d.ts +4 -4
  6. package/calendar/calendar-header/calendar-header.component.d.ts +2 -2
  7. package/card/card-content.component.d.ts +2 -2
  8. package/card/card-counter.directive.d.ts +2 -2
  9. package/card/card-header.component.d.ts +6 -6
  10. package/card/card-loader.component.d.ts +2 -2
  11. package/card/card-second-subtitle.directive.d.ts +2 -2
  12. package/card/card-subtitle.directive.d.ts +2 -2
  13. package/card/card-title.directive.d.ts +2 -2
  14. package/card/card.component.d.ts +3 -3
  15. package/card/kpi/card-kpi-analytics-content.directive.d.ts +2 -2
  16. package/card/kpi/card-kpi-analytics-label.directive.d.ts +2 -2
  17. package/card/kpi/card-kpi-analytics.directive.d.ts +2 -2
  18. package/card/kpi/card-kpi-header.component.d.ts +2 -2
  19. package/card/kpi/card-kpi-scale-icon.directive.d.ts +2 -2
  20. package/card/kpi/card-kpi-scale-text.directive.d.ts +2 -2
  21. package/card/kpi/card-kpi-value.directive.d.ts +4 -4
  22. package/checkbox/checkbox/checkbox.component.d.ts +3 -5
  23. package/content-density/providers/url-content-density-storage.d.ts +4 -4
  24. package/content-density/services/content-density-observer.service.d.ts +15 -15
  25. package/datetime/datetime-adapter.d.ts +9 -2
  26. package/datetime/fd-date.d.ts +10 -14
  27. package/datetime/fd-datetime-adapter.d.ts +2 -2
  28. package/dialog/base/dialog-base.class.d.ts +2 -2
  29. package/dialog/base/dialog-header-base.class.d.ts +4 -4
  30. package/dialog/base/dialog-ref-base.class.d.ts +6 -4
  31. package/dynamic-side-content/dynamic-side-content.component.d.ts +4 -4
  32. package/esm2022/avatar-group-legacy/avatar-group-legacy.component.mjs +15 -15
  33. package/esm2022/avatar-group-legacy/directives/avatar-group-legacy-overflow-body.directive.mjs +12 -12
  34. package/esm2022/avatar-group-legacy/directives/avatar-group-legacy-overflow-button.directive.mjs +9 -9
  35. package/esm2022/bar/bar.component.mjs +13 -13
  36. package/esm2022/bar/button-bar/button-bar.component.mjs +3 -3
  37. package/esm2022/calendar/calendar-header/calendar-header.component.mjs +1 -1
  38. package/esm2022/card/card-content.component.mjs +5 -5
  39. package/esm2022/card/card-counter.directive.mjs +6 -6
  40. package/esm2022/card/card-header.component.mjs +5 -5
  41. package/esm2022/card/card-loader.component.mjs +5 -5
  42. package/esm2022/card/card-second-subtitle.directive.mjs +5 -5
  43. package/esm2022/card/card-subtitle.directive.mjs +5 -5
  44. package/esm2022/card/card-title.directive.mjs +5 -5
  45. package/esm2022/card/card.component.mjs +5 -5
  46. package/esm2022/card/kpi/card-kpi-analytics-content.directive.mjs +5 -5
  47. package/esm2022/card/kpi/card-kpi-analytics-label.directive.mjs +5 -5
  48. package/esm2022/card/kpi/card-kpi-analytics.directive.mjs +5 -5
  49. package/esm2022/card/kpi/card-kpi-header.component.mjs +5 -5
  50. package/esm2022/card/kpi/card-kpi-scale-icon.directive.mjs +5 -5
  51. package/esm2022/card/kpi/card-kpi-scale-text.directive.mjs +5 -5
  52. package/esm2022/card/kpi/card-kpi-value.directive.mjs +5 -5
  53. package/esm2022/checkbox/checkbox/checkbox.component.mjs +1 -1
  54. package/esm2022/combobox/combobox.component.mjs +2 -2
  55. package/esm2022/content-density/providers/url-content-density-storage.mjs +11 -11
  56. package/esm2022/content-density/services/content-density-observer.service.mjs +7 -16
  57. package/esm2022/datetime/datetime-adapter.mjs +4 -2
  58. package/esm2022/datetime/fd-date.mjs +34 -27
  59. package/esm2022/datetime/fd-datetime-adapter.mjs +1 -1
  60. package/esm2022/dialog/base/dialog-base.class.mjs +1 -1
  61. package/esm2022/dialog/base/dialog-header-base.class.mjs +1 -1
  62. package/esm2022/dialog/base/dialog-ref-base.class.mjs +4 -8
  63. package/esm2022/dynamic-side-content/dynamic-side-content.component.mjs +9 -9
  64. package/esm2022/feed-input/directives/feed-input-avatar.directive.mjs +5 -5
  65. package/esm2022/feed-list-item/components/list/feed-list.component.mjs +15 -15
  66. package/esm2022/file-uploader/directives/file-uploader-select.directive.mjs +1 -1
  67. package/esm2022/file-uploader/file-uploader.component.mjs +5 -5
  68. package/esm2022/fixed-card-layout/fixed-card-layout-item/fixed-card-layout-item.component.mjs +3 -3
  69. package/esm2022/form/form-group/form-group.component.mjs +8 -8
  70. package/esm2022/form/form-message/form-message.component.mjs +9 -9
  71. package/esm2022/grid-list/components/grid-list/grid-list.component.mjs +2 -3
  72. package/esm2022/grid-list/components/grid-list-item/grid-list-item.component.mjs +3 -3
  73. package/esm2022/illustrated-message/illustrated-message.component.mjs +10 -10
  74. package/esm2022/input-group/input-group-directives.mjs +22 -22
  75. package/esm2022/layout-grid/directives/layout-grid-col.directive.mjs +9 -9
  76. package/esm2022/layout-grid/layout-grid.component.mjs +9 -9
  77. package/esm2022/layout-panel/layout-panel-footer/layout-panel-footer.component.mjs +9 -9
  78. package/esm2022/list/list-item/list-item.component.mjs +20 -17
  79. package/esm2022/list/list-message.directive.mjs +9 -9
  80. package/esm2022/menu/directives/segmented-button/segmented-button-header.directive.mjs +1 -2
  81. package/esm2022/menu/directives/toggle-button.directive.mjs +1 -2
  82. package/esm2022/message-box/message-box.component.mjs +17 -17
  83. package/esm2022/message-page/message-page.component.mjs +5 -5
  84. package/esm2022/message-strip/alert/message-strip-alert/message-strip-alert.component.mjs +5 -5
  85. package/esm2022/message-strip/alert/message-strip-alert-container/message-strip-alert-container.component.mjs +1 -1
  86. package/esm2022/message-strip/alert/message-strip-alert.service.mjs +2 -3
  87. package/esm2022/message-strip/message-strip.component.mjs +16 -16
  88. package/esm2022/micro-process-flow/components/micro-process-flow/micro-process-flow.component.mjs +43 -45
  89. package/esm2022/micro-process-flow/components/micro-process-flow-item/micro-process-flow-item.component.mjs +1 -1
  90. package/esm2022/micro-process-flow/micro-process-flow-focusable-item.directive.mjs +13 -13
  91. package/esm2022/multi-combobox/multi-combobox.component.mjs +2 -5
  92. package/esm2022/multi-input/multi-input-mobile/multi-input-mobile.component.mjs +1 -1
  93. package/esm2022/multi-input/multi-input.component.mjs +2 -2
  94. package/esm2022/nested-list/nested-content/nested-list-content.directive.mjs +6 -6
  95. package/esm2022/nested-list/nested-item/nested-item.directive.mjs +3 -3
  96. package/esm2022/nested-list/nested-list/nested-list.directive.mjs +3 -3
  97. package/esm2022/notification/directives/notification-indicator.directive.mjs +9 -9
  98. package/esm2022/notification/notification/notification.component.mjs +9 -9
  99. package/esm2022/notification/notification-group/notification-group.component.mjs +5 -5
  100. package/esm2022/notification/notification-service/notification.service.mjs +5 -2
  101. package/esm2022/notification/notification-utils/notification-ref.mjs +2 -5
  102. package/esm2022/object-number/object-number.component.mjs +9 -9
  103. package/esm2022/object-status/object-status.component.mjs +13 -12
  104. package/esm2022/overflow-layout/directives/overflow-expand.directive.mjs +5 -5
  105. package/esm2022/overflow-layout/directives/overflow-item-ref.directive.mjs +1 -1
  106. package/esm2022/overflow-layout/directives/overflow-layout-focusable-item.directive.mjs +5 -5
  107. package/esm2022/overflow-layout/directives/overflow-layout-item-container.directive.mjs +8 -8
  108. package/esm2022/overflow-layout/interfaces/overflow-focusable-item.interface.mjs +1 -1
  109. package/esm2022/overflow-layout/overflow-layout.component.mjs +18 -18
  110. package/esm2022/radio/radio-button/radio-button.component.mjs +8 -9
  111. package/esm2022/rating-indicator/components/rating-indicator.component.mjs +28 -28
  112. package/esm2022/resizable-card-layout/resizable-card-layout/resizable-card-item/resizable-card-item.component.mjs +23 -23
  113. package/esm2022/resizable-card-layout/resizable-card-layout/resizable-card-layout.component.mjs +7 -8
  114. package/esm2022/select/select.component.mjs +18 -18
  115. package/esm2022/shared/interfaces/search-component.interface.mjs +1 -1
  116. package/esm2022/shellbar/shellbar.component.mjs +7 -7
  117. package/esm2022/side-navigation/side-navigation.component.mjs +7 -7
  118. package/esm2022/skeleton/components/skeleton.component.mjs +3 -3
  119. package/esm2022/status-indicator/status-indicator.component.mjs +15 -15
  120. package/esm2022/table/directives/table-responsive-wrapper.directive.mjs +3 -3
  121. package/esm2022/tabs/tab-item/tab-item.directive.mjs +9 -9
  122. package/esm2022/tabs/tab-link/tab-link.directive.mjs +8 -8
  123. package/esm2022/tabs/tab-nav/tab-nav.component.mjs +15 -15
  124. package/esm2022/tabs/tab-panel/tab-panel.component.mjs +3 -3
  125. package/esm2022/tabs/tab-utils/tab-directives.mjs +8 -8
  126. package/esm2022/tile/directives/tile.directives.mjs +25 -25
  127. package/esm2022/tile/tile.component.mjs +9 -11
  128. package/esm2022/time/time-column/time-column.component.mjs +23 -23
  129. package/esm2022/timeline/services/position-strategies/base-strategy.mjs +1 -1
  130. package/esm2022/timeline/timeline.component.mjs +5 -5
  131. package/esm2022/title/title.component.mjs +4 -4
  132. package/esm2022/token/tokenizer.component.mjs +71 -71
  133. package/esm2022/toolbar/toolbar.component.mjs +3 -3
  134. package/esm2022/tree/components/tree-item/tree-item.component.mjs +4 -6
  135. package/esm2022/tree/tree.component.mjs +1 -4
  136. package/esm2022/upload-collection/upload-collection-item.directive.mjs +3 -3
  137. package/esm2022/vertical-navigation/vertical-navigation.component.mjs +6 -6
  138. package/esm2022/wizard/wizard-step/wizard-step.component.mjs +3 -3
  139. package/feed-input/directives/feed-input-avatar.directive.d.ts +2 -2
  140. package/feed-list-item/components/list/feed-list.component.d.ts +6 -6
  141. package/fesm2022/fundamental-ngx-core-avatar-group-legacy.mjs +33 -33
  142. package/fesm2022/fundamental-ngx-core-avatar-group-legacy.mjs.map +1 -1
  143. package/fesm2022/fundamental-ngx-core-bar.mjs +14 -14
  144. package/fesm2022/fundamental-ngx-core-bar.mjs.map +1 -1
  145. package/fesm2022/fundamental-ngx-core-calendar.mjs.map +1 -1
  146. package/fesm2022/fundamental-ngx-core-card.mjs +61 -61
  147. package/fesm2022/fundamental-ngx-core-card.mjs.map +1 -1
  148. package/fesm2022/fundamental-ngx-core-checkbox.mjs.map +1 -1
  149. package/fesm2022/fundamental-ngx-core-combobox.mjs +1 -1
  150. package/fesm2022/fundamental-ngx-core-combobox.mjs.map +1 -1
  151. package/fesm2022/fundamental-ngx-core-content-density.mjs +17 -26
  152. package/fesm2022/fundamental-ngx-core-content-density.mjs.map +1 -1
  153. package/fesm2022/fundamental-ngx-core-datetime.mjs +36 -27
  154. package/fesm2022/fundamental-ngx-core-datetime.mjs.map +1 -1
  155. package/fesm2022/fundamental-ngx-core-dialog.mjs +3 -7
  156. package/fesm2022/fundamental-ngx-core-dialog.mjs.map +1 -1
  157. package/fesm2022/fundamental-ngx-core-dynamic-side-content.mjs +8 -8
  158. package/fesm2022/fundamental-ngx-core-dynamic-side-content.mjs.map +1 -1
  159. package/fesm2022/fundamental-ngx-core-feed-input.mjs +4 -4
  160. package/fesm2022/fundamental-ngx-core-feed-input.mjs.map +1 -1
  161. package/fesm2022/fundamental-ngx-core-feed-list-item.mjs +14 -14
  162. package/fesm2022/fundamental-ngx-core-feed-list-item.mjs.map +1 -1
  163. package/fesm2022/fundamental-ngx-core-file-uploader.mjs +4 -4
  164. package/fesm2022/fundamental-ngx-core-file-uploader.mjs.map +1 -1
  165. package/fesm2022/fundamental-ngx-core-fixed-card-layout.mjs +2 -2
  166. package/fesm2022/fundamental-ngx-core-fixed-card-layout.mjs.map +1 -1
  167. package/fesm2022/fundamental-ngx-core-form.mjs +15 -15
  168. package/fesm2022/fundamental-ngx-core-form.mjs.map +1 -1
  169. package/fesm2022/fundamental-ngx-core-grid-list.mjs +3 -4
  170. package/fesm2022/fundamental-ngx-core-grid-list.mjs.map +1 -1
  171. package/fesm2022/fundamental-ngx-core-illustrated-message.mjs +9 -9
  172. package/fesm2022/fundamental-ngx-core-illustrated-message.mjs.map +1 -1
  173. package/fesm2022/fundamental-ngx-core-input-group.mjs +21 -21
  174. package/fesm2022/fundamental-ngx-core-input-group.mjs.map +1 -1
  175. package/fesm2022/fundamental-ngx-core-layout-grid.mjs +16 -16
  176. package/fesm2022/fundamental-ngx-core-layout-grid.mjs.map +1 -1
  177. package/fesm2022/fundamental-ngx-core-layout-panel.mjs +8 -8
  178. package/fesm2022/fundamental-ngx-core-layout-panel.mjs.map +1 -1
  179. package/fesm2022/fundamental-ngx-core-list.mjs +27 -24
  180. package/fesm2022/fundamental-ngx-core-list.mjs.map +1 -1
  181. package/fesm2022/fundamental-ngx-core-menu.mjs +0 -2
  182. package/fesm2022/fundamental-ngx-core-menu.mjs.map +1 -1
  183. package/fesm2022/fundamental-ngx-core-message-box.mjs +16 -16
  184. package/fesm2022/fundamental-ngx-core-message-box.mjs.map +1 -1
  185. package/fesm2022/fundamental-ngx-core-message-page.mjs +4 -4
  186. package/fesm2022/fundamental-ngx-core-message-page.mjs.map +1 -1
  187. package/fesm2022/fundamental-ngx-core-message-strip.mjs +20 -21
  188. package/fesm2022/fundamental-ngx-core-message-strip.mjs.map +1 -1
  189. package/fesm2022/fundamental-ngx-core-micro-process-flow.mjs +55 -57
  190. package/fesm2022/fundamental-ngx-core-micro-process-flow.mjs.map +1 -1
  191. package/fesm2022/fundamental-ngx-core-multi-combobox.mjs +1 -4
  192. package/fesm2022/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
  193. package/fesm2022/fundamental-ngx-core-multi-input.mjs +1 -1
  194. package/fesm2022/fundamental-ngx-core-multi-input.mjs.map +1 -1
  195. package/fesm2022/fundamental-ngx-core-nested-list.mjs +9 -9
  196. package/fesm2022/fundamental-ngx-core-nested-list.mjs.map +1 -1
  197. package/fesm2022/fundamental-ngx-core-notification.mjs +25 -25
  198. package/fesm2022/fundamental-ngx-core-notification.mjs.map +1 -1
  199. package/fesm2022/fundamental-ngx-core-object-number.mjs +8 -8
  200. package/fesm2022/fundamental-ngx-core-object-number.mjs.map +1 -1
  201. package/fesm2022/fundamental-ngx-core-object-status.mjs +12 -11
  202. package/fesm2022/fundamental-ngx-core-object-status.mjs.map +1 -1
  203. package/fesm2022/fundamental-ngx-core-overflow-layout.mjs +32 -32
  204. package/fesm2022/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  205. package/fesm2022/fundamental-ngx-core-radio.mjs +7 -8
  206. package/fesm2022/fundamental-ngx-core-radio.mjs.map +1 -1
  207. package/fesm2022/fundamental-ngx-core-rating-indicator.mjs +27 -27
  208. package/fesm2022/fundamental-ngx-core-rating-indicator.mjs.map +1 -1
  209. package/fesm2022/fundamental-ngx-core-resizable-card-layout.mjs +28 -29
  210. package/fesm2022/fundamental-ngx-core-resizable-card-layout.mjs.map +1 -1
  211. package/fesm2022/fundamental-ngx-core-select.mjs +17 -17
  212. package/fesm2022/fundamental-ngx-core-select.mjs.map +1 -1
  213. package/fesm2022/fundamental-ngx-core-shellbar.mjs +6 -6
  214. package/fesm2022/fundamental-ngx-core-shellbar.mjs.map +1 -1
  215. package/fesm2022/fundamental-ngx-core-side-navigation.mjs +6 -6
  216. package/fesm2022/fundamental-ngx-core-side-navigation.mjs.map +1 -1
  217. package/fesm2022/fundamental-ngx-core-skeleton.mjs +2 -2
  218. package/fesm2022/fundamental-ngx-core-skeleton.mjs.map +1 -1
  219. package/fesm2022/fundamental-ngx-core-status-indicator.mjs +14 -14
  220. package/fesm2022/fundamental-ngx-core-status-indicator.mjs.map +1 -1
  221. package/fesm2022/fundamental-ngx-core-table.mjs +2 -2
  222. package/fesm2022/fundamental-ngx-core-table.mjs.map +1 -1
  223. package/fesm2022/fundamental-ngx-core-tabs.mjs +38 -38
  224. package/fesm2022/fundamental-ngx-core-tabs.mjs.map +1 -1
  225. package/fesm2022/fundamental-ngx-core-tile.mjs +32 -34
  226. package/fesm2022/fundamental-ngx-core-tile.mjs.map +1 -1
  227. package/fesm2022/fundamental-ngx-core-time.mjs +23 -23
  228. package/fesm2022/fundamental-ngx-core-time.mjs.map +1 -1
  229. package/fesm2022/fundamental-ngx-core-timeline.mjs +4 -4
  230. package/fesm2022/fundamental-ngx-core-timeline.mjs.map +1 -1
  231. package/fesm2022/fundamental-ngx-core-title.mjs +3 -3
  232. package/fesm2022/fundamental-ngx-core-title.mjs.map +1 -1
  233. package/fesm2022/fundamental-ngx-core-token.mjs +70 -70
  234. package/fesm2022/fundamental-ngx-core-token.mjs.map +1 -1
  235. package/fesm2022/fundamental-ngx-core-toolbar.mjs +2 -2
  236. package/fesm2022/fundamental-ngx-core-toolbar.mjs.map +1 -1
  237. package/fesm2022/fundamental-ngx-core-tree.mjs +3 -8
  238. package/fesm2022/fundamental-ngx-core-tree.mjs.map +1 -1
  239. package/fesm2022/fundamental-ngx-core-upload-collection.mjs +2 -2
  240. package/fesm2022/fundamental-ngx-core-upload-collection.mjs.map +1 -1
  241. package/fesm2022/fundamental-ngx-core-vertical-navigation.mjs +5 -5
  242. package/fesm2022/fundamental-ngx-core-vertical-navigation.mjs.map +1 -1
  243. package/fesm2022/fundamental-ngx-core-wizard.mjs +2 -2
  244. package/fesm2022/fundamental-ngx-core-wizard.mjs.map +1 -1
  245. package/file-uploader/directives/file-uploader-select.directive.d.ts +1 -1
  246. package/file-uploader/file-uploader.component.d.ts +4 -4
  247. package/form/form-group/form-group.component.d.ts +4 -4
  248. package/form/form-message/form-message.component.d.ts +2 -2
  249. package/grid-list/components/grid-list/grid-list.component.d.ts +3 -2
  250. package/grid-list/components/grid-list-item/grid-list-item.component.d.ts +8 -8
  251. package/illustrated-message/illustrated-message.component.d.ts +7 -7
  252. package/input-group/input-group-directives.d.ts +12 -12
  253. package/layout-grid/directives/layout-grid-col.directive.d.ts +2 -2
  254. package/layout-grid/layout-grid.component.d.ts +2 -2
  255. package/layout-panel/layout-panel-footer/layout-panel-footer.component.d.ts +2 -2
  256. package/list/list-item/list-item.component.d.ts +13 -13
  257. package/list/list-message.directive.d.ts +4 -4
  258. package/message-box/message-box.component.d.ts +5 -5
  259. package/message-page/message-page.component.d.ts +2 -2
  260. package/message-strip/alert/message-strip-alert/message-strip-alert.component.d.ts +4 -4
  261. package/message-strip/alert/message-strip-alert-container/message-strip-alert-container.component.d.ts +4 -4
  262. package/message-strip/alert/message-strip-alert.service.d.ts +3 -2
  263. package/message-strip/message-strip.component.d.ts +6 -6
  264. package/micro-process-flow/components/micro-process-flow/micro-process-flow.component.d.ts +15 -17
  265. package/micro-process-flow/components/micro-process-flow-item/micro-process-flow-item.component.d.ts +2 -2
  266. package/micro-process-flow/micro-process-flow-focusable-item.directive.d.ts +6 -6
  267. package/multi-input/multi-input-mobile/multi-input-mobile.component.d.ts +2 -2
  268. package/nested-list/nested-content/nested-list-content.directive.d.ts +2 -2
  269. package/nested-list/nested-item/nested-item.directive.d.ts +2 -2
  270. package/nested-list/nested-list/nested-list.directive.d.ts +2 -2
  271. package/notification/directives/notification-indicator.directive.d.ts +4 -4
  272. package/notification/notification/notification.component.d.ts +2 -2
  273. package/notification/notification-group/notification-group.component.d.ts +2 -2
  274. package/notification/notification-utils/notification-ref.d.ts +5 -3
  275. package/object-number/object-number.component.d.ts +4 -4
  276. package/object-status/object-status.component.d.ts +5 -4
  277. package/overflow-layout/directives/overflow-expand.directive.d.ts +2 -2
  278. package/overflow-layout/directives/overflow-item-ref.directive.d.ts +2 -2
  279. package/overflow-layout/directives/overflow-layout-focusable-item.directive.d.ts +2 -2
  280. package/overflow-layout/directives/overflow-layout-item-container.directive.d.ts +2 -2
  281. package/overflow-layout/interfaces/overflow-focusable-item.interface.d.ts +1 -1
  282. package/overflow-layout/overflow-layout.component.d.ts +4 -4
  283. package/package.json +3 -3
  284. package/radio/radio-button/radio-button.component.d.ts +7 -7
  285. package/rating-indicator/components/rating-indicator.component.d.ts +12 -12
  286. package/resizable-card-layout/resizable-card-layout/resizable-card-item/resizable-card-item.component.d.ts +8 -8
  287. package/resizable-card-layout/resizable-card-layout/resizable-card-layout.component.d.ts +2 -2
  288. package/select/select.component.d.ts +19 -19
  289. package/shared/interfaces/search-component.interface.d.ts +1 -1
  290. package/shellbar/shellbar.component.d.ts +12 -12
  291. package/side-navigation/side-navigation.component.d.ts +2 -2
  292. package/skeleton/components/skeleton.component.d.ts +2 -2
  293. package/status-indicator/status-indicator.component.d.ts +7 -7
  294. package/tabs/tab-item/tab-item.directive.d.ts +2 -2
  295. package/tabs/tab-link/tab-link.directive.d.ts +2 -2
  296. package/tabs/tab-nav/tab-nav.component.d.ts +8 -8
  297. package/tabs/tab-panel/tab-panel.component.d.ts +2 -2
  298. package/tabs/tab-utils/tab-directives.d.ts +5 -5
  299. package/tile/directives/tile.directives.d.ts +12 -12
  300. package/tile/tile.component.d.ts +4 -6
  301. package/time/time-column/time-column.component.d.ts +6 -6
  302. package/timeline/services/position-strategies/base-strategy.d.ts +2 -2
  303. package/timeline/timeline.component.d.ts +2 -2
  304. package/title/title.component.d.ts +2 -2
  305. package/token/tokenizer.component.d.ts +16 -16
  306. package/toolbar/toolbar.component.d.ts +2 -2
  307. package/tree/components/tree-item/tree-item.component.d.ts +10 -9
  308. package/upload-collection/upload-collection-item.directive.d.ts +2 -2
  309. package/vertical-navigation/vertical-navigation.component.d.ts +2 -2
  310. package/wizard/wizard-step/wizard-step.component.d.ts +4 -4
@@ -308,4 +308,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
308
308
  type: ViewChild,
309
309
  args: [CdkPortalOutlet, { static: false }]
310
310
  }] } });
311
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NoZWNrYm94L2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jaGVja2JveC9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBVSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUVILFNBQVMsRUFDVCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3RGLE9BQU8sRUFDSCxvQkFBb0IsRUFDcEIsc0JBQXNCLEVBQ3RCLCtCQUErQixFQUNsQyxNQUFNLHVDQUF1QyxDQUFDO0FBQy9DLE9BQU8sRUFBbUIsdUJBQXVCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RixPQUFPLEtBQUssTUFBTSxpQkFBaUIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNsRCxPQUFPLEVBQUUsMEJBQTBCLEVBQW9CLE1BQU0sZ0NBQWdDLENBQUM7Ozs7QUFFOUYsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUEyQnpCLE1BQU0sT0FBTyxpQkFBaUI7SUFtQjFCLHdEQUF3RDtJQUN4RCxJQUNJLEtBQUssQ0FBQyxLQUFRO1FBQ2QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzlCLENBQUM7SUFzREQsdUNBQXVDO0lBQ3ZDLElBQ0ksTUFBTSxDQUFDLGNBQWdDO1FBQ3ZDLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxHQUFHLDBCQUEwQixFQUFFLEdBQUcsQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNoRixDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFxQ0Qsb0VBQW9FO0lBQ3BFLElBQUksZUFBZTtRQUNmLE9BQU8sSUFBSSxDQUFDLGFBQWEsS0FBSyxlQUFlLENBQUM7SUFDbEQsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSxJQUFJLFNBQVM7UUFDVCxPQUFPLElBQUksQ0FBQyxhQUFhLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssZUFBZSxDQUFDO0lBQ3RGLENBQUM7SUFXRCxjQUFjO0lBQ2QsWUFDVyxVQUErQixFQUNILGdCQUF3QixDQUFDLEVBQ3BELGtCQUFxQyxFQUNyQyxRQUFtQixFQUNsQix1QkFBK0M7UUFKakQsZUFBVSxHQUFWLFVBQVUsQ0FBcUI7UUFDSCxrQkFBYSxHQUFiLGFBQWEsQ0FBWTtRQUNwRCx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBQ3JDLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbEIsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF3QjtRQTNJNUQsa0VBQWtFO1FBQ3pELGdCQUFXLEdBQXFCLFFBQVEsQ0FBQztRQTRCbEQsc0ZBQXNGO1FBRXRGLFlBQU8sR0FBRyxlQUFlLGdCQUFnQixFQUFFLEVBQUUsQ0FBQztRQWtCOUMsb0NBQW9DO1FBRXBDLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakIsMkVBQTJFO1FBRTNFLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQU0zQiwrQkFBK0I7UUFFL0IsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixvRUFBb0U7UUFFcEUsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFZcEIseUVBQXlFO1FBR3pFLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFFbkIsY0FBYztRQUVMLGFBQVEsR0FBRyxVQUFVLENBQUM7UUFFL0IsY0FBYztRQUVMLFlBQU8sR0FBRyxNQUFNLENBQUM7UUFFMUIsa0NBQWtDO1FBQ3hCLGdCQUFXLEdBQTBCLElBQUksWUFBWSxFQUFXLENBQUM7UUFrQjNFLGNBQWM7UUFDZCxzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFZMUIsY0FBYztRQUNOLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUU1QywwQ0FBMEM7UUFDbEMsWUFBTyxHQUFxQixFQUFFLEdBQUcsMEJBQTBCLEVBQUUsQ0FBQztRQWdCdEUsNERBQTREO1FBQ3JELGNBQVMsR0FBRyxHQUFTLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFDbEMsNERBQTREO1FBQ3JELGtCQUFhLEdBQXVCLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQU5oRCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztJQUN2QyxDQUFDO0lBT0QsY0FBYztJQUNkLGVBQWU7UUFDWCxJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUNoQztZQUNJLFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWTtTQUNoQyxFQUNEO1lBQ0ksVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZO1NBQ2hDLENBQ0osQ0FBQztRQUVGLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsY0FBYztJQUNkLFdBQVc7UUFDUCxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsVUFBVSxDQUFDLEtBQVE7UUFDZixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxrRkFBa0Y7SUFDbEYsZ0JBQWdCLENBQUMsRUFBc0I7UUFDbkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELDhFQUE4RTtJQUM5RSxpQkFBaUIsQ0FBQyxFQUFjO1FBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCx1RUFBdUU7SUFDdkUsZ0JBQWdCLENBQUMsUUFBaUI7UUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7Ozs7O1NBTUs7SUFDTCxTQUFTLENBQUMsYUFBK0I7UUFDckMsUUFBUSxhQUFhLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN6QyxLQUFLLFNBQVM7Z0JBQ1YsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztnQkFDNUMsTUFBTTtZQUNWLEtBQUssV0FBVztnQkFDWixJQUFJLENBQUMsYUFBYTtvQkFDZCxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO2dCQUNuRyxNQUFNO1lBQ1YsS0FBSyxlQUFlLENBQUM7WUFDckIsS0FBSyxlQUFlO2dCQUNoQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO2dCQUMzQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQzlFLE1BQU07WUFDVjtnQkFDSSxJQUFJLENBQUMsYUFBYTtvQkFDZCxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO2dCQUNuRyxNQUFNO1NBQ2I7UUFDRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxpQ0FBaUM7SUFDakMsT0FBTztRQUNILElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRTtZQUN0QyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDcEI7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsa0NBQWtDO0lBQ2xDLFFBQVE7UUFDSixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsK0VBQStFO0lBQy9FLGFBQWEsQ0FBQyxLQUFpQjtRQUMzQixtRUFBbUU7UUFDbkUscUZBQXFGO1FBQ3JGLHVIQUF1SDtRQUN2SCxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFeEIsZ0ZBQWdGO1FBQ2hGLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGVBQWUsQ0FBQyxLQUFZO1FBQ3hCLGdGQUFnRjtRQUNoRixJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELHlEQUF5RDtJQUN6RCxhQUFhLENBQUMsS0FBaUI7UUFDM0Isc0hBQXNIO1FBQ3RILDJHQUEyRztRQUMzRywyQ0FBMkM7UUFDM0MsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNsQixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRUQsY0FBYztJQUNOLHNCQUFzQixDQUFDLEtBQVk7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbkIsT0FBTztTQUNWO1FBQ0QsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxxRUFBcUU7SUFDN0QsU0FBUztRQUNiLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNsRCxJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztTQUNsQzthQUFNLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUMxRCxJQUFJLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQztTQUNwQzthQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxFQUFFO1lBQ2hGLElBQUksQ0FBQyxhQUFhLEdBQUcsZUFBZSxDQUFDO1NBQ3hDO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDNUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUM7U0FDcEM7SUFDTCxDQUFDO0lBRUQsc0RBQXNEO0lBQzlDLGNBQWM7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUN2QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDM0M7SUFDTCxDQUFDOzhHQTNUUSxpQkFBaUIsNENBb0pYLGVBQWU7a0dBcEpyQixpQkFBaUIsMHRCQWpCZjtZQUNQO2dCQUNJLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsaUJBQWlCLENBQUM7Z0JBQ2hELEtBQUssRUFBRSxJQUFJO2FBQ2Q7WUFDRDtnQkFDSSxPQUFPLEVBQUUscUJBQXFCO2dCQUM5QixXQUFXLEVBQUUsaUJBQWlCO2FBQ2pDO1lBQ0QsdUJBQXVCLENBQUMsaUJBQWlCLENBQUM7WUFDMUMsK0JBQStCLEVBQUU7U0FDcEMsd1dBcUhVLGVBQWUsZ0RDNUs5Qiw2MURBcURBLHc5bkJES2MsV0FBVywrQkFBRSxPQUFPLG1GQUFFLG9CQUFvQiw4QkFBRSxZQUFZOzsyRkFFekQsaUJBQWlCO2tCQXZCN0IsU0FBUzsrQkFDSSxhQUFhLGlCQUdSLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sYUFDcEM7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLENBQUM7NEJBQ2hELEtBQUssRUFBRSxJQUFJO3lCQUNkO3dCQUNEOzRCQUNJLE9BQU8sRUFBRSxxQkFBcUI7NEJBQzlCLFdBQVcsbUJBQW1CO3lCQUNqQzt3QkFDRCx1QkFBdUIsbUJBQW1CO3dCQUMxQywrQkFBK0IsRUFBRTtxQkFDcEMsUUFDSyxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxjQUNyQixJQUFJLFdBQ1AsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFlBQVksQ0FBQzs7MEJBc0o5RCxTQUFTOzJCQUFDLGVBQWU7c0lBako5QixZQUFZO3NCQURYLFNBQVM7dUJBQUMsY0FBYztnQkFLekIsWUFBWTtzQkFEWCxTQUFTO3VCQUFDLGNBQWM7Z0JBSWhCLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csV0FBVztzQkFBbkIsS0FBSztnQkFJTixTQUFTO3NCQURSLEtBQUs7Z0JBS0YsS0FBSztzQkFEUixLQUFLO2dCQVdOLGNBQWM7c0JBRGIsS0FBSztnQkFLTixlQUFlO3NCQURkLEtBQUs7Z0JBS04sS0FBSztzQkFESixLQUFLO2dCQUtOLE9BQU87c0JBRE4sS0FBSztnQkFLTixLQUFLO3NCQURKLEtBQUs7Z0JBS04sSUFBSTtzQkFESCxLQUFLO2dCQUtOLEtBQUs7c0JBREosS0FBSztnQkFLTixRQUFRO3NCQURQLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLGtCQUFrQjtzQkFEakIsS0FBSztnQkFLTixVQUFVO3NCQURULEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLFdBQVc7c0JBRFYsS0FBSztnQkFLRixNQUFNO3NCQURULEtBQUs7Z0JBWU4sVUFBVTtzQkFGVCxXQUFXO3VCQUFDLCtCQUErQjs7c0JBQzNDLEtBQUs7Z0JBS0csUUFBUTtzQkFEaEIsV0FBVzt1QkFBQyxnQkFBZ0I7Z0JBS3BCLE9BQU87c0JBRGYsV0FBVzt1QkFBQyxlQUFlO2dCQUlsQixXQUFXO3NCQUFwQixNQUFNO2dCQUlVLGlCQUFpQjtzQkFEakMsU0FBUzt1QkFBQyxXQUFXO2dCQUtMLGFBQWE7c0JBRDdCLFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka1BvcnRhbE91dGxldCwgRG9tUG9ydGFsLCBQb3J0YWwsIFBvcnRhbE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQXR0cmlidXRlLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3V0cHV0LFxuICAgIFJlbmRlcmVyMixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgZm9yd2FyZFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGb3JtU3RhdGVzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvZm9ybXMnO1xuaW1wb3J0IHsgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQge1xuICAgIENvbnRlbnREZW5zaXR5TW9kdWxlLFxuICAgIENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIsXG4gICAgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVyc1xufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvY29udGVudC1kZW5zaXR5JztcbmltcG9ydCB7IEZvcm1JdGVtQ29udHJvbCwgcmVnaXN0ZXJGb3JtSXRlbUNvbnRyb2wgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZm9ybSc7XG5pbXBvcnQgZXF1YWwgZnJvbSAnZmFzdC1kZWVwLWVxdWFsJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRkRfQ0hFQ0tCT1hfQ09NUE9ORU5UIH0gZnJvbSAnLi4vdG9rZW5zJztcbmltcG9ydCB7IEZEX0NIRUNLQk9YX1ZBTFVFU19ERUZBVUxULCBGZENoZWNrYm94VmFsdWVzIH0gZnJvbSAnLi9mZC1jaGVja2JveC12YWx1ZXMuaW50ZXJmYWNlJztcblxubGV0IGNoZWNrYm94VW5pcXVlSWQgPSAwO1xuXG5leHBvcnQgdHlwZSBGZENoZWNrYm94VHlwZXMgPSAnY2hlY2tlZCcgfCAndW5jaGVja2VkJyB8ICdpbmRldGVybWluYXRlJyB8ICdmb3JjZS1jaGVja2VkJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1jaGVja2JveCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NoZWNrYm94LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vY2hlY2tib3guY29tcG9uZW50LnNjc3MnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ2hlY2tib3hDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRkRfQ0hFQ0tCT1hfQ09NUE9ORU5ULFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IENoZWNrYm94Q29tcG9uZW50XG4gICAgICAgIH0sXG4gICAgICAgIHJlZ2lzdGVyRm9ybUl0ZW1Db250cm9sKENoZWNrYm94Q29tcG9uZW50KSxcbiAgICAgICAgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVycygpXG4gICAgXSxcbiAgICBob3N0OiB7ICdbYXR0ci50YWJpbmRleF0nOiAnLTEnIH0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbRm9ybXNNb2R1bGUsIE5nQ2xhc3MsIENvbnRlbnREZW5zaXR5TW9kdWxlLCBQb3J0YWxNb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIENoZWNrYm94Q29tcG9uZW50PFQgPSB1bmtub3duPiBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIEZvcm1JdGVtQ29udHJvbCB7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdpbnB1dEVsZW1lbnQnKVxuICAgIGlucHV0RWxlbWVudDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnbGFiZWxFbGVtZW50JylcbiAgICBsYWJlbEVsZW1lbnQ6IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogV2hldGhlciBpbnB1dCBsYWJlbCBzaG91bGQgYmUgd3JhcHBlZCAqL1xuICAgIEBJbnB1dCgpIHdyYXBMYWJlbDogYm9vbGVhbjtcblxuICAgIC8qKiBWZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGUgbGFiZWwgY29tcGFyZWQgdG8gdGhlIGNoZWNrYm94IGJveCAqL1xuICAgIEBJbnB1dCgpIHZhbGlnbkxhYmVsOiAndG9wJyB8ICdtaWRkbGUnID0gJ21pZGRsZSc7XG5cbiAgICAvKiogU2V0cyB0aGUgYGFyaWEtbGFiZWxgIGF0dHJpYnV0ZSB0byB0aGUgZWxlbWVudC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFMYWJlbDogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBDdXJyZW50IHNlbGVjdGlvbiBzdGF0ZSBvZiB0aGUgY2hlY2tib3ggY29tcG9uZW50ICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdmFsdWUodmFsdWU6IFQpIHtcbiAgICAgICAgdGhpcy53cml0ZVZhbHVlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXQgdmFsdWUoKTogVCB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrYm94VmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIFNldHMgdGhlIGBhcmlhLWxhYmVsbGVkYnlgIGF0dHJpYnV0ZSB0byB0aGUgZWxlbWVudC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFMYWJlbGxlZEJ5OiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqIFNldHMgdGhlIGBhcmlhLWRlc2NyaWJlZGJ5YCBhdHRyaWJ1dGUgdG8gdGhlIGVsZW1lbnQuICovXG4gICAgQElucHV0KClcbiAgICBhcmlhRGVzY3JpYmVkQnk6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKiogc2V0cyBjaGVja2JveCB0b29sdGlwICovXG4gICAgQElucHV0KClcbiAgICB0aXRsZTogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBTZXRzIFtpZF0gcHJvcGVydHkgb2YgaW5wdXQsIGJpbmRzIGlucHV0IHdpdGggaW5wdXQgbGFiZWwgdXNpbmcgW2Zvcl0gcHJvcGVydHkuICovXG4gICAgQElucHV0KClcbiAgICBpbnB1dElkID0gYGZkLWNoZWNrYm94LSR7Y2hlY2tib3hVbmlxdWVJZCsrfWA7XG5cbiAgICAvKiogU3RhdGUgb2YgY29udHJvbCwgY2hhbmdlcyB2aXN1YWwgYXBwZWFyYW5jZSBvZiBjb250cm9sLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3RhdGU/OiBGb3JtU3RhdGVzO1xuXG4gICAgLyoqIFNldHMgW25hbWVdIHByb3BlcnR5IG9mIGlucHV0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbmFtZTogc3RyaW5nO1xuXG4gICAgLyoqIFNldHMgdGV4dCBvZiBjb250cm9sIGxhYmVsLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbGFiZWw6IHN0cmluZztcblxuICAgIC8qKiBBbGxvd3MgdG8gZGlzYWJsZS9lbmFibGUgY29udHJvbC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVkOiBib29sZWFuO1xuXG4gICAgLyoqIEVuYWJsZXMgY29udHJvbHMgdGhpcmQgc3RhdGUuICovXG4gICAgQElucHV0KClcbiAgICB0cmlzdGF0ZSA9IGZhbHNlO1xuXG4gICAgLyoqIEFsbG93cyB0byBwcmV2ZW50IHVzZXIgZnJvbSBtYW51YWxseSBzZWxlY3RpbmcgY29udHJvbHMgdGhpcmQgc3RhdGUuICovXG4gICAgQElucHV0KClcbiAgICB0cmlzdGF0ZVNlbGVjdGFibGUgPSBmYWxzZTtcblxuICAgIC8qKiBBc3NpZ25zIGdpdmVuIGNsYXNzIHRvIGNoZWNrYm94IGxhYmVsIGVsZW1lbnQgKi9cbiAgICBASW5wdXQoKVxuICAgIGxhYmVsQ2xhc3M6IHN0cmluZztcblxuICAgIC8qKiBJZiBpdCBpcyBtYW5kYXRvcnkgZmllbGQgKi9cbiAgICBASW5wdXQoKVxuICAgIHJlcXVpcmVkID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0aGUgY2hlY2tib3ggc2hvdWxkIGJlIHJlbmRlcmVkIGluIGRpc3BsYXktb25seSBtb2RlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzcGxheU9ubHkgPSBmYWxzZTtcblxuICAgIC8qKiBTZXRzIHZhbHVlcyByZXR1cm5lZCBieSBjb250cm9sLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHZhbHVlcyhjaGVja2JveFZhbHVlczogRmRDaGVja2JveFZhbHVlcykge1xuICAgICAgICB0aGlzLl92YWx1ZXMgPSB7IC4uLkZEX0NIRUNLQk9YX1ZBTFVFU19ERUZBVUxULCAuLi4oY2hlY2tib3hWYWx1ZXMgPz8ge30pIH07XG4gICAgfVxuXG4gICAgZ2V0IHZhbHVlcygpOiBGZENoZWNrYm94VmFsdWVzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlcztcbiAgICB9XG5cbiAgICAvKiogV2hldGhlciBjaGVja2JveCBzaG91bGQgYmUgcmVuZGVyZWQgc3RhbmRhbG9uZSAod2l0aG91dCBhbnkgdGV4dCkuICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC1jaGVja2JveC0tc3RhbmRhbG9uZScpXG4gICAgQElucHV0KClcbiAgICBzdGFuZGFsb25lID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUucG9zaXRpb24nKVxuICAgIHJlYWRvbmx5IHBvc2l0aW9uID0gJ3JlbGF0aXZlJztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5vdXRsaW5lJylcbiAgICByZWFkb25seSBvdXRsaW5lID0gJ25vbmUnO1xuXG4gICAgLyoqIEVtaXRzIGV2ZW50IG9uIGZvY3VzIGNoYW5nZSAqL1xuICAgIEBPdXRwdXQoKSBmb2N1c0NoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdkb21Qb3J0YWwnKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RvbVBvcnRhbENvbnRlbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKENka1BvcnRhbE91dGxldCwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gICAgcHJpdmF0ZSByZWFkb25seSBfcG9ydGFsT3V0bGV0OiBDZGtQb3J0YWxPdXRsZXQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9wcm9qZWN0ZWREb21Qb3J0YWw6IFBvcnRhbDxhbnk+O1xuXG4gICAgLyoqIFN0b3JlcyBjdXJyZW50IGNoZWNrYm94IHZhbHVlLiAqL1xuICAgIGNoZWNrYm94VmFsdWU6IFQ7XG4gICAgLyoqIFN0b3JlcyBjdXJyZW50IGNoZWNrYm94IHN0YXRlLiAqL1xuICAgIGNoZWNrYm94U3RhdGU6IEZkQ2hlY2tib3hUeXBlcztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3Byb2plY3RlZENvbnRlbnQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuIFVzZWQgdG8gZGVmaW5lIGlmIGNvbnRyb2wgaXMgaW4gJ2luZGV0ZXJtaW5hdGUnIHN0YXRlLiovXG4gICAgZ2V0IGlzSW5kZXRlcm1pbmF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tib3hTdGF0ZSA9PT0gJ2luZGV0ZXJtaW5hdGUnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFVzZWQgdG8gZGVmaW5lIGlmIGNvbnRyb2wgaXMgaW4gJ2NoZWNrZWQnIC8gJ3VuY2hlY2tlZCcgc3RhdGUuICovXG4gICAgZ2V0IGlzQ2hlY2tlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tib3hTdGF0ZSA9PT0gJ2NoZWNrZWQnIHx8IHRoaXMuY2hlY2tib3hTdGF0ZSA9PT0gJ2ZvcmNlLWNoZWNrZWQnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8qKiBAaGlkZGVuIHZhbHVlcyByZXR1cm5lZCBieSBjb250cm9sLiAqL1xuICAgIHByaXZhdGUgX3ZhbHVlczogRmRDaGVja2JveFZhbHVlcyA9IHsgLi4uRkRfQ0hFQ0tCT1hfVkFMVUVTX0RFRkFVTFQgfTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2RvbVBvcnRhbDogRG9tUG9ydGFsPEhUTUxFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEVsZW1lbnQ+LFxuICAgICAgICBAQXR0cmlidXRlKCd0YWJJbmRleFZhbHVlJykgcHVibGljIHRhYkluZGV4VmFsdWU6IG51bWJlciA9IDAsXG4gICAgICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICByZWFkb25seSBfY29udGVudERlbnNpdHlPYnNlcnZlcjogQ29udGVudERlbnNpdHlPYnNlcnZlclxuICAgICkge1xuICAgICAgICB0aGlzLnRhYkluZGV4VmFsdWUgPSB0YWJJbmRleFZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFJlZmVyZW5jZSB0byBjYWxsYmFjayBwcm92aWRlZCBieSBGb3JtQ29udHJvbC4qL1xuICAgIHB1YmxpYyBvblRvdWNoZWQgPSAoKTogdm9pZCA9PiB7fTtcbiAgICAvKiogQGhpZGRlbiBSZWZlcmVuY2UgdG8gY2FsbGJhY2sgcHJvdmlkZWQgYnkgRm9ybUNvbnRyb2wuKi9cbiAgICBwdWJsaWMgb25WYWx1ZUNoYW5nZTogKHZhbHVlOiBUKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY29udGVudERlbnNpdHlPYnNlcnZlci5jb25zdW1lKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRSZWY6IHRoaXMuaW5wdXRFbGVtZW50XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRSZWY6IHRoaXMubGFiZWxFbGVtZW50XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fZG9tUG9ydGFsID0gbmV3IERvbVBvcnRhbCh0aGlzLl9kb21Qb3J0YWxDb250ZW50KTtcbiAgICAgICAgdGhpcy5fcHJvamVjdGVkQ29udGVudCA9ICEhdGhpcy5fZG9tUG9ydGFsLmVsZW1lbnQuaW5uZXJIVE1MLnRyaW0oKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLl9wb3J0YWxPdXRsZXQ/LmF0dGFjaCh0aGlzLl9kb21Qb3J0YWwpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICAgICAqIC0gc2V0cyBuZXcgY29udHJvbCB2YWx1ZVxuICAgICAqIC0gdXBkYXRlcyBjb250cm9sIHN0YXRlXG4gICAgICovXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogVCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNoZWNrYm94VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fc2V0U3RhdGUoKTtcbiAgICAgICAgdGhpcy5fZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZSBtZXRob2QgLSBzZXRzIG9uVmFsdWVDaGFuZ2UgY2FsbGJhY2suKi9cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IFQpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlIG1ldGhvZCAtIHNldHMgb25Ub3VjaGVkIGNhbGxiYWNrLiovXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBDYWxsZWQgYnkgRm9ybUNvbnRyb2wgLSB1c2VkIHRvIGRpc2FibGUgLyBlbmFibGUgY29udHJvbC4qL1xuICAgIHNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgICAgICB0aGlzLl9kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEJhc2VkIG9uIGN1cnJlbnQgY29udHJvbCBzdGF0ZTpcbiAgICAgKiAtIHNldHMgbmV4dCBjb250cm9sIHZhbHVlXG4gICAgICogLSBlbWl0cyBuZXcgY29udHJvbCB2YWx1ZVxuICAgICAqIC0gdXBkYXRlcyBjb250cm9sIHN0YXRlIGJhc2VkIG9uIG5ldyBjb250cm9sIHZhbHVlXG4gICAgICogKi9cbiAgICBuZXh0VmFsdWUocHJldmlvdXNWYWx1ZT86IEZkQ2hlY2tib3hUeXBlcyk6IHZvaWQge1xuICAgICAgICBzd2l0Y2ggKHByZXZpb3VzVmFsdWUgfHwgdGhpcy5jaGVja2JveFN0YXRlKSB7XG4gICAgICAgICAgICBjYXNlICdjaGVja2VkJzpcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrYm94VmFsdWUgPSB0aGlzLnZhbHVlcy5mYWxzZVZhbHVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndW5jaGVja2VkJzpcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrYm94VmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaXN0YXRlICYmIHRoaXMudHJpc3RhdGVTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXMudGhpcmRTdGF0ZVZhbHVlIDogdGhpcy52YWx1ZXMudHJ1ZVZhbHVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaW5kZXRlcm1pbmF0ZSc6XG4gICAgICAgICAgICBjYXNlICdmb3JjZS1jaGVja2VkJzpcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrYm94VmFsdWUgPSB0aGlzLnZhbHVlcy50cnVlVmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LCAnY2hlY2tlZCcsICd0cnVlJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tib3hWYWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJpc3RhdGUgJiYgdGhpcy50cmlzdGF0ZVNlbGVjdGFibGUgPyB0aGlzLnZhbHVlcy50aGlyZFN0YXRlVmFsdWUgOiB0aGlzLnZhbHVlcy50cnVlVmFsdWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2V0U3RhdGUoKTtcbiAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlKHRoaXMuY2hlY2tib3hWYWx1ZSk7XG4gICAgICAgIHRoaXMuX2RldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBoYW5kbGVzIGJsdXIgZXZlbnQgKi9cbiAgICBfb25CbHVyKCk6IHZvaWQge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMub25Ub3VjaGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9jdXNDaGFuZ2UuZW1pdChmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gaGFuZGxlcyBmb2N1cyBldmVudCAqL1xuICAgIF9vbkZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvY3VzQ2hhbmdlLmVtaXQodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gaGFuZGxlcyBjbGljayBvbiB0aGUgbGFiZWwgYXNzb2NpYXRlZCB3aXRoIG5hdGl2ZSBjaGVja2JveCBpbnB1dCAqL1xuICAgIF9vbkxhYmVsQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgLy8gV2UgaGF2ZSB0byBzdG9wIHByb3BhZ2F0aW9uIGZvciBjbGljayBldmVudHMgb24gdGhlIGlucHV0IGxhYmVsLlxuICAgICAgICAvLyBCeSBkZWZhdWx0LCB3aGVuIGEgdXNlciBjbGlja3Mgb24gYSBsYWJlbCBlbGVtZW50LCBhIGdlbmVyYXRlZCBjbGljayBldmVudCB3aWxsIGJlXG4gICAgICAgIC8vIGRpc3BhdGNoZWQgb24gdGhlIGFzc29jaWF0ZWQgaW5wdXQgZWxlbWVudC4gVGhpcyB3aWxsIGxlYWQgdG8gZHVwbGljYXRlZCBcImNsaWNrXCIgZXZlbnQgZGlzcGF0Y2hlZCBmcm9tIHRoZSBjb21wb25lbnRcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgLy8gSWYgd2UgaGF2ZSBkaXNwbGF5LW9ubHkgbW9kZSwgc3RvcCBhbnkgcG9zc2libGUgYWN0aW9ucyBieSBsYWJlbCBjbGljayBldmVudC5cbiAgICAgICAgdGhpcy5faGFuZGxlRGlzcGxheU9ubHlNb2RlKGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRXZlbnQgaGFuZGxlciBmb3IgY2FzZXMgd2hlbiBjaGVja2JveCB3YXMgdG9nZ2xlZCB3aXRoIHRoZSBoZWxwIG9mIGtleWJvYXJkLlxuICAgICAqIEBwYXJhbSBldmVudFxuICAgICAqL1xuICAgIF9vbkxhYmVsS2V5ZG93bihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgLy8gSWYgd2UgaGF2ZSBkaXNwbGF5LW9ubHkgbW9kZSwgc3RvcCBhbnkgcG9zc2libGUgYWN0aW9ucyBieSBsYWJlbCBjbGljayBldmVudC5cbiAgICAgICAgdGhpcy5faGFuZGxlRGlzcGxheU9ubHlNb2RlKGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBoYW5kbGVzIGNsaWNrIG9uIHRoZSBuYXRpdmUgY2hlY2tib3ggaW5wdXQgKi9cbiAgICBfb25JbnB1dENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIC8vIFdoZW4gdGhlcmUncyBhIGNsaWNrIGV2ZW50IGRpc3BhdGNoZWQgZnJvbSB0aGUgaW5wdXQsIHdlIGhhdmUgdG8gY2F0Y2ggaXQsIHByb2Nlc3MgYW5kIHRoZW4gcmUtZGlzcGF0Y2ggaXQgZnVydGhlci5cbiAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgaW4gb3JkZXIgdG8gc2V0IHRoZSB2YWx1ZSB0byB0aGUgY29tcG9uZW50IGJlZm9yZSBhbnkgZXh0ZXJuYWwgbGlzdGVuZXJzIHdpbGwgcmVjZWl2ZSBpdC5cbiAgICAgICAgLy8gT3RoZXJ3aXNlIGNoZWNrYm94IG1pZ2h0IGJlIG91dCBvZiBzeW5jLlxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKHRoaXMuZGlzcGxheU9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5leHRWYWx1ZSgpO1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KGV2ZW50LnR5cGUsIGV2ZW50KSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9oYW5kbGVEaXNwbGF5T25seU1vZGUoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kaXNwbGF5T25seSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEJhc2VkIG9uIGN1cnJlbnQgY29udHJvbCB2YWx1ZSBzZXRzIG5ldyBjb250cm9sIHN0YXRlLiAqL1xuICAgIHByaXZhdGUgX3NldFN0YXRlKCk6IHZvaWQge1xuICAgICAgICBpZiAoZXF1YWwodGhpcy5jaGVja2JveFZhbHVlLCB0aGlzLnZhbHVlcy50cnVlVmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrYm94U3RhdGUgPSAnY2hlY2tlZCc7XG4gICAgICAgIH0gZWxzZSBpZiAoZXF1YWwodGhpcy5jaGVja2JveFZhbHVlLCB0aGlzLnZhbHVlcy5mYWxzZVZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja2JveFN0YXRlID0gJ3VuY2hlY2tlZCc7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50cmlzdGF0ZSAmJiBlcXVhbCh0aGlzLmNoZWNrYm94VmFsdWUsIHRoaXMudmFsdWVzLnRoaXJkU3RhdGVWYWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tib3hTdGF0ZSA9ICdpbmRldGVybWluYXRlJztcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5jaGVja2JveFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrYm94U3RhdGUgPSAndW5jaGVja2VkJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdG8gdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIGluIGNvbXBvbmVudCAqL1xuICAgIHByaXZhdGUgX2RldGVjdENoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWZbJ2Rlc3Ryb3llZCddKSB7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8aW5wdXRcbiAgICAjaW5wdXRFbGVtZW50XG4gICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICBjbGFzcz1cImZkLWNoZWNrYm94XCJcbiAgICBbaWRdPVwiaW5wdXRJZFwiXG4gICAgW25hbWVdPVwibmFtZVwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IGRpc3BsYXlPbmx5XCJcbiAgICBbaW5kZXRlcm1pbmF0ZV09XCJpc0luZGV0ZXJtaW5hdGVcIlxuICAgIFtjaGVja2VkXT1cImlzQ2hlY2tlZFwiXG4gICAgW2F0dHIudGFiaW5kZXhdPVwidGFiSW5kZXhWYWx1ZVwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeVwiXG4gICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJhcmlhRGVzY3JpYmVkQnlcIlxuICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgIFtuZ0NsYXNzXT1cIltkaXNwbGF5T25seSA/ICdpcy1kaXNwbGF5JyA6ICcnLCBzdGF0ZSA/ICdpcy0nICsgc3RhdGUgOiAnJ11cIlxuICAgIChjbGljayk9XCJfb25JbnB1dENsaWNrKCRldmVudClcIlxuICAgIChibHVyKT1cIl9vbkJsdXIoKVwiXG4gICAgKGZvY3VzKT1cIl9vbkZvY3VzKClcIlxuICAgIChrZXl1cC5lbnRlcik9XCJfb25MYWJlbEtleWRvd24oJGV2ZW50KVwiXG4gICAgKGtleXVwLnNwYWNlKT1cIl9vbkxhYmVsS2V5ZG93bigkZXZlbnQpXCJcbi8+XG48bGFiZWxcbiAgICBjbGFzcz1cImZkLWNoZWNrYm94X19sYWJlbFwiXG4gICAgI2xhYmVsRWxlbWVudFxuICAgIFtmb3JdPVwiaW5wdXRJZFwiXG4gICAgW2NsYXNzXT1cImxhYmVsQ2xhc3NcIlxuICAgIFthdHRyLnRpdGxlXT1cInRpdGxlXCJcbiAgICBbY2xhc3MuZmQtY2hlY2tib3hfX2xhYmVsLS1yZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgW2NsYXNzLmZkLWNoZWNrYm94X19sYWJlbC0td3JhcF09XCJ3cmFwTGFiZWwgJiYgdmFsaWduTGFiZWwgPT09ICdtaWRkbGUnXCJcbiAgICBbY2xhc3MuZmQtY2hlY2tib3hfX2xhYmVsLS13cmFwLXRvcC1hbGlnbmVkXT1cIndyYXBMYWJlbCAmJiB2YWxpZ25MYWJlbCA9PT0gJ3RvcCdcIlxuICAgIChrZXl1cC5lbnRlcik9XCJfb25MYWJlbEtleWRvd24oJGV2ZW50KVwiXG4gICAgKGtleXVwLnNwYWNlKT1cIl9vbkxhYmVsS2V5ZG93bigkZXZlbnQpXCJcbiAgICAoY2xpY2spPVwiX29uTGFiZWxDbGljaygkZXZlbnQpXCJcbj5cbiAgICA8c3BhbiBjbGFzcz1cImZkLWNoZWNrYm94X19jaGVja21hcmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XG4gICAgQGlmIChsYWJlbCB8fCBfcHJvamVjdGVkQ29udGVudCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtY2hlY2tib3hfX2xhYmVsLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgQGlmIChsYWJlbCkge1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmQtY2hlY2tib3hfX3RleHRcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgbGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZkLWNoZWNrYm94X190ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjZGtQb3J0YWxPdXRsZXQ+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIH1cbjwvbGFiZWw+XG48c3BhbiBbYXR0ci5oaWRkZW5dPVwiIV9wcm9qZWN0ZWRDb250ZW50ID8gdHJ1ZSA6IG51bGxcIiAjZG9tUG9ydGFsPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvc3Bhbj5cbiJdfQ==
311
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NoZWNrYm94L2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jaGVja2JveC9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUVILFNBQVMsRUFDVCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3RGLE9BQU8sRUFDSCxvQkFBb0IsRUFDcEIsc0JBQXNCLEVBQ3RCLCtCQUErQixFQUNsQyxNQUFNLHVDQUF1QyxDQUFDO0FBQy9DLE9BQU8sRUFBbUIsdUJBQXVCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RixPQUFPLEtBQUssTUFBTSxpQkFBaUIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNsRCxPQUFPLEVBQUUsMEJBQTBCLEVBQW9CLE1BQU0sZ0NBQWdDLENBQUM7Ozs7QUFFOUYsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUEyQnpCLE1BQU0sT0FB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dGVudCI6WyJpbXBvcnQgeyBDZGtQb3J0YWxPdXRsZXQsIERvbVBvcnRhbCwgUG9ydGFsTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBBdHRyaWJ1dGUsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXQsXG4gICAgUmVuZGVyZXIyLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBmb3J3YXJkUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1zTW9kdWxlLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZvcm1TdGF0ZXMgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay9mb3Jtcyc7XG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7XG4gICAgQ29udGVudERlbnNpdHlNb2R1bGUsXG4gICAgQ29udGVudERlbnNpdHlPYnNlcnZlcixcbiAgICBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jb250ZW50LWRlbnNpdHknO1xuaW1wb3J0IHsgRm9ybUl0ZW1Db250cm9sLCByZWdpc3RlckZvcm1JdGVtQ29udHJvbCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9mb3JtJztcbmltcG9ydCBlcXVhbCBmcm9tICdmYXN0LWRlZXAtZXF1YWwnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGRF9DSEVDS0JPWF9DT01QT05FTlQgfSBmcm9tICcuLi90b2tlbnMnO1xuaW1wb3J0IHsgRkRfQ0hFQ0tCT1hfVkFMVUVTX0RFRkFVTFQsIEZkQ2hlY2tib3hWYWx1ZXMgfSBmcm9tICcuL2ZkLWNoZWNrYm94LXZhbHVlcy5pbnRlcmZhY2UnO1xuXG5sZXQgY2hlY2tib3hVbmlxdWVJZCA9IDA7XG5cbmV4cG9ydCB0eXBlIEZkQ2hlY2tib3hUeXBlcyA9ICdjaGVja2VkJyB8ICd1bmNoZWNrZWQnIHwgJ2luZGV0ZXJtaW5hdGUnIHwgJ2ZvcmNlLWNoZWNrZWQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLWNoZWNrYm94JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2hlY2tib3guY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9jaGVja2JveC5jb21wb25lbnQuc2NzcycsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDaGVja2JveENvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBGRF9DSEVDS0JPWF9DT01QT05FTlQsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogQ2hlY2tib3hDb21wb25lbnRcbiAgICAgICAgfSxcbiAgICAgICAgcmVnaXN0ZXJGb3JtSXRlbUNvbnRyb2woQ2hlY2tib3hDb21wb25lbnQpLFxuICAgICAgICBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzKClcbiAgICBdLFxuICAgIGhvc3Q6IHsgJ1thdHRyLnRhYmluZGV4XSc6ICctMScgfSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtGb3Jtc01vZHVsZSwgTmdDbGFzcywgQ29udGVudERlbnNpdHlNb2R1bGUsIFBvcnRhbE1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgQ2hlY2tib3hDb21wb25lbnQ8VCA9IHVua25vd24+IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgRm9ybUl0ZW1Db250cm9sIHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2lucHV0RWxlbWVudCcpXG4gICAgaW5wdXRFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdsYWJlbEVsZW1lbnQnKVxuICAgIGxhYmVsRWxlbWVudDogRWxlbWVudFJlZjtcblxuICAgIC8qKiBXaGV0aGVyIGlucHV0IGxhYmVsIHNob3VsZCBiZSB3cmFwcGVkICovXG4gICAgQElucHV0KCkgd3JhcExhYmVsOiBib29sZWFuO1xuXG4gICAgLyoqIFZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSBsYWJlbCBjb21wYXJlZCB0byB0aGUgY2hlY2tib3ggYm94ICovXG4gICAgQElucHV0KCkgdmFsaWduTGFiZWw6ICd0b3AnIHwgJ21pZGRsZScgPSAnbWlkZGxlJztcblxuICAgIC8qKiBTZXRzIHRoZSBgYXJpYS1sYWJlbGAgYXR0cmlidXRlIHRvIHRoZSBlbGVtZW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsOiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqIEN1cnJlbnQgc2VsZWN0aW9uIHN0YXRlIG9mIHRoZSBjaGVja2JveCBjb21wb25lbnQgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB2YWx1ZSh2YWx1ZTogVCkge1xuICAgICAgICB0aGlzLndyaXRlVmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIGdldCB2YWx1ZSgpOiBUIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tib3hWYWx1ZTtcbiAgICB9XG5cbiAgICAvKiogU2V0cyB0aGUgYGFyaWEtbGFiZWxsZWRieWAgYXR0cmlidXRlIHRvIHRoZSBlbGVtZW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsbGVkQnk6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKiogU2V0cyB0aGUgYGFyaWEtZGVzY3JpYmVkYnlgIGF0dHJpYnV0ZSB0byB0aGUgZWxlbWVudC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFEZXNjcmliZWRCeTogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBzZXRzIGNoZWNrYm94IHRvb2x0aXAgKi9cbiAgICBASW5wdXQoKVxuICAgIHRpdGxlOiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqIFNldHMgW2lkXSBwcm9wZXJ0eSBvZiBpbnB1dCwgYmluZHMgaW5wdXQgd2l0aCBpbnB1dCBsYWJlbCB1c2luZyBbZm9yXSBwcm9wZXJ0eS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGlucHV0SWQgPSBgZmQtY2hlY2tib3gtJHtjaGVja2JveFVuaXF1ZUlkKyt9YDtcblxuICAgIC8qKiBTdGF0ZSBvZiBjb250cm9sLCBjaGFuZ2VzIHZpc3VhbCBhcHBlYXJhbmNlIG9mIGNvbnRyb2wuICovXG4gICAgQElucHV0KClcbiAgICBzdGF0ZT86IEZvcm1TdGF0ZXM7XG5cbiAgICAvKiogU2V0cyBbbmFtZV0gcHJvcGVydHkgb2YgaW5wdXQuICovXG4gICAgQElucHV0KClcbiAgICBuYW1lOiBzdHJpbmc7XG5cbiAgICAvKiogU2V0cyB0ZXh0IG9mIGNvbnRyb2wgbGFiZWwuICovXG4gICAgQElucHV0KClcbiAgICBsYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqIEFsbG93cyB0byBkaXNhYmxlL2VuYWJsZSBjb250cm9sLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgICAvKiogRW5hYmxlcyBjb250cm9scyB0aGlyZCBzdGF0ZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHRyaXN0YXRlID0gZmFsc2U7XG5cbiAgICAvKiogQWxsb3dzIHRvIHByZXZlbnQgdXNlciBmcm9tIG1hbnVhbGx5IHNlbGVjdGluZyBjb250cm9scyB0aGlyZCBzdGF0ZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHRyaXN0YXRlU2VsZWN0YWJsZSA9IGZhbHNlO1xuXG4gICAgLyoqIEFzc2lnbnMgZ2l2ZW4gY2xhc3MgdG8gY2hlY2tib3ggbGFiZWwgZWxlbWVudCAqL1xuICAgIEBJbnB1dCgpXG4gICAgbGFiZWxDbGFzczogc3RyaW5nO1xuXG4gICAgLyoqIElmIGl0IGlzIG1hbmRhdG9yeSBmaWVsZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmVxdWlyZWQgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBjaGVja2JveCBzaG91bGQgYmUgcmVuZGVyZWQgaW4gZGlzcGxheS1vbmx5IG1vZGUuICovXG4gICAgQElucHV0KClcbiAgICBkaXNwbGF5T25seSA9IGZhbHNlO1xuXG4gICAgLyoqIFNldHMgdmFsdWVzIHJldHVybmVkIGJ5IGNvbnRyb2wuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdmFsdWVzKGNoZWNrYm94VmFsdWVzOiBGZENoZWNrYm94VmFsdWVzKSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlcyA9IHsgLi4uRkRfQ0hFQ0tCT1hfVkFMVUVTX0RFRkFVTFQsIC4uLihjaGVja2JveFZhbHVlcyA/PyB7fSkgfTtcbiAgICB9XG5cbiAgICBnZXQgdmFsdWVzKCk6IEZkQ2hlY2tib3hWYWx1ZXMge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWVzO1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIGNoZWNrYm94IHNob3VsZCBiZSByZW5kZXJlZCBzdGFuZGFsb25lICh3aXRob3V0IGFueSB0ZXh0KS4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZkLWNoZWNrYm94LS1zdGFuZGFsb25lJylcbiAgICBASW5wdXQoKVxuICAgIHN0YW5kYWxvbmUgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5wb3NpdGlvbicpXG4gICAgcmVhZG9ubHkgcG9zaXRpb24gPSAncmVsYXRpdmUnO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLm91dGxpbmUnKVxuICAgIHJlYWRvbmx5IG91dGxpbmUgPSAnbm9uZSc7XG5cbiAgICAvKiogRW1pdHMgZXZlbnQgb24gZm9jdXMgY2hhbmdlICovXG4gICAgQE91dHB1dCgpIGZvY3VzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2RvbVBvcnRhbCcpXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZG9tUG9ydGFsQ29udGVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoQ2RrUG9ydGFsT3V0bGV0LCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9wb3J0YWxPdXRsZXQ6IENka1BvcnRhbE91dGxldDtcblxuICAgIC8qKiBTdG9yZXMgY3VycmVudCBjaGVja2JveCB2YWx1ZS4gKi9cbiAgICBjaGVja2JveFZhbHVlOiBUO1xuICAgIC8qKiBTdG9yZXMgY3VycmVudCBjaGVja2JveCBzdGF0ZS4gKi9cbiAgICBjaGVja2JveFN0YXRlOiBGZENoZWNrYm94VHlwZXM7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9wcm9qZWN0ZWRDb250ZW50ID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiBVc2VkIHRvIGRlZmluZSBpZiBjb250cm9sIGlzIGluICdpbmRldGVybWluYXRlJyBzdGF0ZS4qL1xuICAgIGdldCBpc0luZGV0ZXJtaW5hdGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrYm94U3RhdGUgPT09ICdpbmRldGVybWluYXRlJztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBVc2VkIHRvIGRlZmluZSBpZiBjb250cm9sIGlzIGluICdjaGVja2VkJyAvICd1bmNoZWNrZWQnIHN0YXRlLiAqL1xuICAgIGdldCBpc0NoZWNrZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrYm94U3RhdGUgPT09ICdjaGVja2VkJyB8fCB0aGlzLmNoZWNrYm94U3RhdGUgPT09ICdmb3JjZS1jaGVja2VkJztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kb21Qb3J0YWw6IERvbVBvcnRhbDxIVE1MRWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvKiogQGhpZGRlbiB2YWx1ZXMgcmV0dXJuZWQgYnkgY29udHJvbC4gKi9cbiAgICBwcml2YXRlIF92YWx1ZXM6IEZkQ2hlY2tib3hWYWx1ZXMgPSB7IC4uLkZEX0NIRUNLQk9YX1ZBTFVFU19ERUZBVUxUIH07XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZjxFbGVtZW50PixcbiAgICAgICAgQEF0dHJpYnV0ZSgndGFiSW5kZXhWYWx1ZScpIHB1YmxpYyB0YWJJbmRleFZhbHVlOiBudW1iZXIgPSAwLFxuICAgICAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgcmVhZG9ubHkgX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXI6IENvbnRlbnREZW5zaXR5T2JzZXJ2ZXJcbiAgICApIHtcbiAgICAgICAgdGhpcy50YWJJbmRleFZhbHVlID0gdGFiSW5kZXhWYWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBSZWZlcmVuY2UgdG8gY2FsbGJhY2sgcHJvdmlkZWQgYnkgRm9ybUNvbnRyb2wuKi9cbiAgICBwdWJsaWMgb25Ub3VjaGVkID0gKCk6IHZvaWQgPT4ge307XG4gICAgLyoqIEBoaWRkZW4gUmVmZXJlbmNlIHRvIGNhbGxiYWNrIHByb3ZpZGVkIGJ5IEZvcm1Db250cm9sLiovXG4gICAgcHVibGljIG9uVmFsdWVDaGFuZ2U6ICh2YWx1ZTogVCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXIuY29uc3VtZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50UmVmOiB0aGlzLmlucHV0RWxlbWVudFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50UmVmOiB0aGlzLmxhYmVsRWxlbWVudFxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2RvbVBvcnRhbCA9IG5ldyBEb21Qb3J0YWwodGhpcy5fZG9tUG9ydGFsQ29udGVudCk7XG4gICAgICAgIHRoaXMuX3Byb2plY3RlZENvbnRlbnQgPSAhIXRoaXMuX2RvbVBvcnRhbC5lbGVtZW50LmlubmVySFRNTC50cmltKCk7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5fcG9ydGFsT3V0bGV0Py5hdHRhY2godGhpcy5fZG9tUG9ydGFsKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgICAgKiAtIHNldHMgbmV3IGNvbnRyb2wgdmFsdWVcbiAgICAgKiAtIHVwZGF0ZXMgY29udHJvbCBzdGF0ZVxuICAgICAqL1xuICAgIHdyaXRlVmFsdWUodmFsdWU6IFQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jaGVja2JveFZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX3NldFN0YXRlKCk7XG4gICAgICAgIHRoaXMuX2RldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2UgbWV0aG9kIC0gc2V0cyBvblZhbHVlQ2hhbmdlIGNhbGxiYWNrLiovXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBUKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZSBtZXRob2QgLSBzZXRzIG9uVG91Y2hlZCBjYWxsYmFjay4qL1xuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQ2FsbGVkIGJ5IEZvcm1Db250cm9sIC0gdXNlZCB0byBkaXNhYmxlIC8gZW5hYmxlIGNvbnRyb2wuKi9cbiAgICBzZXREaXNhYmxlZFN0YXRlKGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICAgICAgdGhpcy5fZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBCYXNlZCBvbiBjdXJyZW50IGNvbnRyb2wgc3RhdGU6XG4gICAgICogLSBzZXRzIG5leHQgY29udHJvbCB2YWx1ZVxuICAgICAqIC0gZW1pdHMgbmV3IGNvbnRyb2wgdmFsdWVcbiAgICAgKiAtIHVwZGF0ZXMgY29udHJvbCBzdGF0ZSBiYXNlZCBvbiBuZXcgY29udHJvbCB2YWx1ZVxuICAgICAqICovXG4gICAgbmV4dFZhbHVlKHByZXZpb3VzVmFsdWU/OiBGZENoZWNrYm94VHlwZXMpOiB2b2lkIHtcbiAgICAgICAgc3dpdGNoIChwcmV2aW91c1ZhbHVlIHx8IHRoaXMuY2hlY2tib3hTdGF0ZSkge1xuICAgICAgICAgICAgY2FzZSAnY2hlY2tlZCc6XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja2JveFZhbHVlID0gdGhpcy52YWx1ZXMuZmFsc2VWYWx1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3VuY2hlY2tlZCc6XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja2JveFZhbHVlID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlzdGF0ZSAmJiB0aGlzLnRyaXN0YXRlU2VsZWN0YWJsZSA/IHRoaXMudmFsdWVzLnRoaXJkU3RhdGVWYWx1ZSA6IHRoaXMudmFsdWVzLnRydWVWYWx1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2luZGV0ZXJtaW5hdGUnOlxuICAgICAgICAgICAgY2FzZSAnZm9yY2UtY2hlY2tlZCc6XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja2JveFZhbHVlID0gdGhpcy52YWx1ZXMudHJ1ZVZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ2NoZWNrZWQnLCAndHJ1ZScpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrYm94VmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaXN0YXRlICYmIHRoaXMudHJpc3RhdGVTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXMudGhpcmRTdGF0ZVZhbHVlIDogdGhpcy52YWx1ZXMudHJ1ZVZhbHVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NldFN0YXRlKCk7XG4gICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZSh0aGlzLmNoZWNrYm94VmFsdWUpO1xuICAgICAgICB0aGlzLl9kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gaGFuZGxlcyBibHVyIGV2ZW50ICovXG4gICAgX29uQmx1cigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9uVG91Y2hlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvY3VzQ2hhbmdlLmVtaXQoZmFsc2UpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIGhhbmRsZXMgZm9jdXMgZXZlbnQgKi9cbiAgICBfb25Gb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb2N1c0NoYW5nZS5lbWl0KHRydWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIGhhbmRsZXMgY2xpY2sgb24gdGhlIGxhYmVsIGFzc29jaWF0ZWQgd2l0aCBuYXRpdmUgY2hlY2tib3ggaW5wdXQgKi9cbiAgICBfb25MYWJlbENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIC8vIFdlIGhhdmUgdG8gc3RvcCBwcm9wYWdhdGlvbiBmb3IgY2xpY2sgZXZlbnRzIG9uIHRoZSBpbnB1dCBsYWJlbC5cbiAgICAgICAgLy8gQnkgZGVmYXVsdCwgd2hlbiBhIHVzZXIgY2xpY2tzIG9uIGEgbGFiZWwgZWxlbWVudCwgYSBnZW5lcmF0ZWQgY2xpY2sgZXZlbnQgd2lsbCBiZVxuICAgICAgICAvLyBkaXNwYXRjaGVkIG9uIHRoZSBhc3NvY2lhdGVkIGlucHV0IGVsZW1lbnQuIFRoaXMgd2lsbCBsZWFkIHRvIGR1cGxpY2F0ZWQgXCJjbGlja1wiIGV2ZW50IGRpc3BhdGNoZWQgZnJvbSB0aGUgY29tcG9uZW50XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIC8vIElmIHdlIGhhdmUgZGlzcGxheS1vbmx5IG1vZGUsIHN0b3AgYW55IHBvc3NpYmxlIGFjdGlvbnMgYnkgbGFiZWwgY2xpY2sgZXZlbnQuXG4gICAgICAgIHRoaXMuX2hhbmRsZURpc3BsYXlPbmx5TW9kZShldmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEV2ZW50IGhhbmRsZXIgZm9yIGNhc2VzIHdoZW4gY2hlY2tib3ggd2FzIHRvZ2dsZWQgd2l0aCB0aGUgaGVscCBvZiBrZXlib2FyZC5cbiAgICAgKiBAcGFyYW0gZXZlbnRcbiAgICAgKi9cbiAgICBfb25MYWJlbEtleWRvd24oZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIC8vIElmIHdlIGhhdmUgZGlzcGxheS1vbmx5IG1vZGUsIHN0b3AgYW55IHBvc3NpYmxlIGFjdGlvbnMgYnkgbGFiZWwgY2xpY2sgZXZlbnQuXG4gICAgICAgIHRoaXMuX2hhbmRsZURpc3BsYXlPbmx5TW9kZShldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gaGFuZGxlcyBjbGljayBvbiB0aGUgbmF0aXZlIGNoZWNrYm94IGlucHV0ICovXG4gICAgX29uSW5wdXRDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICAvLyBXaGVuIHRoZXJlJ3MgYSBjbGljayBldmVudCBkaXNwYXRjaGVkIGZyb20gdGhlIGlucHV0LCB3ZSBoYXZlIHRvIGNhdGNoIGl0LCBwcm9jZXNzIGFuZCB0aGVuIHJlLWRpc3BhdGNoIGl0IGZ1cnRoZXIuXG4gICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGluIG9yZGVyIHRvIHNldCB0aGUgdmFsdWUgdG8gdGhlIGNvbXBvbmVudCBiZWZvcmUgYW55IGV4dGVybmFsIGxpc3RlbmVycyB3aWxsIHJlY2VpdmUgaXQuXG4gICAgICAgIC8vIE90aGVyd2lzZSBjaGVja2JveCBtaWdodCBiZSBvdXQgb2Ygc3luYy5cbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmICh0aGlzLmRpc3BsYXlPbmx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uZXh0VmFsdWUoKTtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudChldmVudC50eXBlLCBldmVudCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlRGlzcGxheU9ubHlNb2RlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZGlzcGxheU9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBCYXNlZCBvbiBjdXJyZW50IGNvbnRyb2wgdmFsdWUgc2V0cyBuZXcgY29udHJvbCBzdGF0ZS4gKi9cbiAgICBwcml2YXRlIF9zZXRTdGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKGVxdWFsKHRoaXMuY2hlY2tib3hWYWx1ZSwgdGhpcy52YWx1ZXMudHJ1ZVZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja2JveFN0YXRlID0gJ2NoZWNrZWQnO1xuICAgICAgICB9IGVsc2UgaWYgKGVxdWFsKHRoaXMuY2hlY2tib3hWYWx1ZSwgdGhpcy52YWx1ZXMuZmFsc2VWYWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tib3hTdGF0ZSA9ICd1bmNoZWNrZWQnO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudHJpc3RhdGUgJiYgZXF1YWwodGhpcy5jaGVja2JveFZhbHVlLCB0aGlzLnZhbHVlcy50aGlyZFN0YXRlVmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrYm94U3RhdGUgPSAnaW5kZXRlcm1pbmF0ZSc7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuY2hlY2tib3hWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja2JveFN0YXRlID0gJ3VuY2hlY2tlZCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRvIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiBpbiBjb21wb25lbnQgKi9cbiAgICBwcml2YXRlIF9kZXRlY3RDaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX2NoYW5nZURldGVjdG9yUmVmWydkZXN0cm95ZWQnXSkge1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGlucHV0XG4gICAgI2lucHV0RWxlbWVudFxuICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgY2xhc3M9XCJmZC1jaGVja2JveFwiXG4gICAgW2lkXT1cImlucHV0SWRcIlxuICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCBkaXNwbGF5T25seVwiXG4gICAgW2luZGV0ZXJtaW5hdGVdPVwiaXNJbmRldGVybWluYXRlXCJcbiAgICBbY2hlY2tlZF09XCJpc0NoZWNrZWRcIlxuICAgIFthdHRyLnRhYmluZGV4XT1cInRhYkluZGV4VmFsdWVcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiYXJpYURlc2NyaWJlZEJ5XCJcbiAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICBbbmdDbGFzc109XCJbZGlzcGxheU9ubHkgPyAnaXMtZGlzcGxheScgOiAnJywgc3RhdGUgPyAnaXMtJyArIHN0YXRlIDogJyddXCJcbiAgICAoY2xpY2spPVwiX29uSW5wdXRDbGljaygkZXZlbnQpXCJcbiAgICAoYmx1cik9XCJfb25CbHVyKClcIlxuICAgIChmb2N1cyk9XCJfb25Gb2N1cygpXCJcbiAgICAoa2V5dXAuZW50ZXIpPVwiX29uTGFiZWxLZXlkb3duKCRldmVudClcIlxuICAgIChrZXl1cC5zcGFjZSk9XCJfb25MYWJlbEtleWRvd24oJGV2ZW50KVwiXG4vPlxuPGxhYmVsXG4gICAgY2xhc3M9XCJmZC1jaGVja2JveF9fbGFiZWxcIlxuICAgICNsYWJlbEVsZW1lbnRcbiAgICBbZm9yXT1cImlucHV0SWRcIlxuICAgIFtjbGFzc109XCJsYWJlbENsYXNzXCJcbiAgICBbYXR0ci50aXRsZV09XCJ0aXRsZVwiXG4gICAgW2NsYXNzLmZkLWNoZWNrYm94X19sYWJlbC0tcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgIFtjbGFzcy5mZC1jaGVja2JveF9fbGFiZWwtLXdyYXBdPVwid3JhcExhYmVsICYmIHZhbGlnbkxhYmVsID09PSAnbWlkZGxlJ1wiXG4gICAgW2NsYXNzLmZkLWNoZWNrYm94X19sYWJlbC0td3JhcC10b3AtYWxpZ25lZF09XCJ3cmFwTGFiZWwgJiYgdmFsaWduTGFiZWwgPT09ICd0b3AnXCJcbiAgICAoa2V5dXAuZW50ZXIpPVwiX29uTGFiZWxLZXlkb3duKCRldmVudClcIlxuICAgIChrZXl1cC5zcGFjZSk9XCJfb25MYWJlbEtleWRvd24oJGV2ZW50KVwiXG4gICAgKGNsaWNrKT1cIl9vbkxhYmVsQ2xpY2soJGV2ZW50KVwiXG4+XG4gICAgPHNwYW4gY2xhc3M9XCJmZC1jaGVja2JveF9fY2hlY2ttYXJrXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxuICAgIEBpZiAobGFiZWwgfHwgX3Byb2plY3RlZENvbnRlbnQpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImZkLWNoZWNrYm94X19sYWJlbC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIEBpZiAobGFiZWwpIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZkLWNoZWNrYm94X190ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmZC1jaGVja2JveF9fdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgY2RrUG9ydGFsT3V0bGV0PjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICB9XG48L2xhYmVsPlxuPHNwYW4gW2F0dHIuaGlkZGVuXT1cIiFfcHJvamVjdGVkQ29udGVudCA/IHRydWUgOiBudWxsXCIgI2RvbVBvcnRhbD5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L3NwYW4+XG4iXX0=
@@ -557,7 +557,7 @@ export class ComboboxComponent {
557
557
  provide: FD_COMBOBOX_COMPONENT,
558
558
  useExisting: ComboboxComponent
559
559
  }
560
- ], queries: [{ propertyName: "_comboboxItemRenderer", first: true, predicate: ComboboxItemDirective, descendants: true }, { propertyName: "listMessages", predicate: FD_LIST_MESSAGE_DIRECTIVE }], viewQueries: [{ propertyName: "listComponent", first: true, predicate: ListComponent, descendants: true }, { propertyName: "searchInputElement", first: true, predicate: ["searchInputElement"], descendants: true }, { propertyName: "popoverComponent", first: true, predicate: PopoverComponent, descendants: true }, { propertyName: "inputGroup", first: true, predicate: InputGroupComponent, descendants: true }, { propertyName: "controlTemplate", first: true, predicate: ["controlTemplate"], descendants: true }, { propertyName: "listTemplate", first: true, predicate: ["listTemplate"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-template [ngTemplateOutlet]=\"mobile ? mobileTemplate : desktopTemplate\"></ng-template>\n<ng-template #desktopTemplate>\n <fd-popover\n additionalBodyClass=\"fd-popover-custom-list\"\n [class.fd-combobox-full-width]=\"isSearch\"\n [isOpen]=\"open && displayedValues && displayedValues.length > 0\"\n (isOpenChange)=\"isOpenChangeHandle($event)\"\n [fillControlMode]=\"fillControlMode\"\n [scrollStrategy]=\"_repositionScrollStrategy\"\n [focusTrapped]=\"true\"\n [triggers]=\"triggers\"\n [disabled]=\"disabled || readOnly\"\n [maxWidth]=\"640\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n >\n <fd-popover-control>\n <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n </fd-popover-control>\n <fd-popover-body [hidden]=\"!displayedValues.length\">\n <ng-template [ngTemplateOutlet]=\"listTemplate\"></ng-template>\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n<ng-template let-term=\"term\" #itemSource>\n @if (!_customRenderer) {\n <span\n fd-list-title\n fdTruncatedTitle\n [innerHTML]=\"term | displayFnPipe: displayFn | highlight: inputText : highlighting && filterHighlight\"\n >\n </span>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"_customRenderer\"\n [ngTemplateOutletContext]=\"{ $implicit: term, inputText: inputText }\"\n ></ng-template>\n }\n</ng-template>\n<ng-template #mobileTemplate>\n <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n</ng-template>\n<ng-template #controlTemplate>\n <fd-input-group\n [button]=\"showDropdownButton\"\n [glyph]=\"showDropdownButton ? glyphValue : null\"\n [glyphFont]=\"isSearch ? _defaultFontFamily : glyphFont\"\n [state]=\"state\"\n [buttonFocusable]=\"buttonFocusable\"\n [disabled]=\"disabled\"\n [readonly]=\"readOnly\"\n [isControl]=\"true\"\n [isExpanded]=\"!mobile && open && displayedValues.length > 0\"\n [showFocus]=\"!clearInputBtnFocused\"\n [glyphAriaLabel]=\"ariaLabel || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\"\n [iconTitle]=\"title || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\"\n (addOnButtonClicked)=\"onPrimaryButtonClick()\"\n (click)=\"mobile && isOpenChangeHandle(true)\"\n >\n <input\n #searchInputElement\n fdkAutoComplete\n fd-input-group-input\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-describedby]=\"comboboxId + '-list-results'\"\n [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete && !mobile ? comboboxId + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete && !mobile\"\n [attr.aria-expanded]=\"!mobile && open && displayedValues.length\"\n [attr.aria-required]=\"required\"\n [attr.tabindex]=\"readOnly || disabled ? -1 : null\"\n [enable]=\"autoComplete && !mobile\"\n [displayFn]=\"displayFn\"\n [options]=\"dropdownValues\"\n [inputText]=\"inputText\"\n [disabled]=\"disabled\"\n [readonly]=\"readOnly\"\n [attr.aria-readonly]=\"readOnly\"\n [placeholder]=\"placeholder\"\n [id]=\"inputId\"\n [(ngModel)]=\"inputText\"\n (onComplete)=\"handleAutoComplete($event)\"\n (keydown)=\"onInputKeydownHandler($event)\"\n (paste)=\"onInputKeydownHandler('fromPaste')\"\n (ngModelChange)=\"handleSearchTermChange()\"\n (blur)=\"handleBlur()\"\n />\n @if (isSearch && showClearButton && inputText && inputText.length > 0) {\n <span\n class=\"fd-input-group__addon fd-input-group__addon--button\"\n [class.fd-shellbar__input-group-addon]=\"inShellbar\"\n >\n <button\n fd-button\n class=\"fd-input-group__button\"\n type=\"button\"\n [fdType]=\"inShellbar ? 'standard' : 'transparent'\"\n title=\"Clear input\"\n [class.fd-shellbar__button]=\"inShellbar\"\n [attr.tabindex]=\"clearButtonFocusable ? 0 : -1\"\n (focus)=\"clearInputBtnFocus()\"\n (blur)=\"clearInputBtnBlur()\"\n (click)=\"_handleClearSearchTerm()\"\n >\n <fd-icon glyph=\"decline\"></fd-icon>\n </button>\n </span>\n }\n </fd-input-group>\n <div [id]=\"comboboxId + '-list-results'\" class=\"fd-combobox-count-list-results\">\n {{ displayedValues.length || 0 }} result list items\n </div>\n</ng-template>\n<ng-template #listTemplate>\n <ul\n fd-list\n class=\"fd-combobox-custom-list\"\n [dropdownMode]=\"true\"\n [id]=\"comboboxId + '-result'\"\n role=\"listbox\"\n [attr.aria-labelledby]=\"comboboxId + '-search'\"\n [style.maxHeight]=\"!mobile && maxHeight\"\n [hasMessage]=\"listMessages && listMessages.length > 0\"\n [byline]=\"byline\"\n (keydown.tab)=\"_close()\"\n (keydown.shift.tab)=\"_close()\"\n (focusEscapeList)=\"handleListFocusEscape($event)\"\n >\n <ng-content></ng-content>\n @if (groupFn) {\n @for (group of displayedValues | listGroupPipe: groupFn; track group) {\n <li role=\"group\" fd-list-group-header [tabindex]=\"0\">\n <span fd-list-title>{{ group.key }}</span>\n </li>\n @for (term of group.value; track term) {\n <li\n role=\"option\"\n fd-list-item\n [attr.aria-placeholder]=\"group.key\"\n [tabindex]=\"0\"\n class=\"fd-combobox-list-item\"\n [selected]=\"isSelected(term)\"\n [value]=\"term\"\n (keydown)=\"onItemKeyDownHandler($event, term)\"\n (click)=\"onMenuClickHandler(term)\"\n >\n <ng-template\n [ngTemplateOutlet]=\"itemSource\"\n [ngTemplateOutletContext]=\"{ term: term }\"\n ></ng-template>\n </li>\n }\n }\n } @else {\n @for (term of displayedValues; track term) {\n <li\n fd-list-item\n role=\"option\"\n [tabindex]=\"0\"\n class=\"fd-combobox-list-item\"\n [selected]=\"isSelected(term)\"\n (keydown)=\"onItemKeyDownHandler($event, term)\"\n (click)=\"onMenuClickHandler(term)\"\n [value]=\"term\"\n >\n <ng-template\n [ngTemplateOutlet]=\"itemSource\"\n [ngTemplateOutletContext]=\"{ term: term }\"\n ></ng-template>\n </li>\n }\n }\n </ul>\n</ng-template>\n", styles: [".fd-combobox-custom-class,.fd-combobox-custom-class .fd-combobox-shellbar-custom{display:inline-block}.fd-list__item.fd-combobox-list-item{cursor:pointer}.fd-combobox-full-width{width:100%}.fd-combobox-count-list-results{position:absolute;opacity:0;z-index:-1}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig", "preventSpaceKeyScroll"] }, { kind: "component", type: PopoverControlComponent, selector: "fd-popover-control, [fdPopoverControl]" }, { kind: "component", type: PopoverBodyComponent, selector: "fd-popover-body", inputs: ["minWidth", "maxWidth", "minHeight", "maxHeight"] }, { kind: "ngmodule", type: ListModule }, { kind: "component", type: i4.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline", "unreadIndicator", "role"], outputs: ["focusEscapeList"] }, { kind: "component", type: i4.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "noData", "action", "interactive", "growing", "counter", "unread", "byline", "ariaRole"], outputs: ["keyDown"] }, { kind: "directive", type: i4.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "directive", type: i4.ListGroupHeaderDirective, selector: "[fdListGroupHeader], [fd-list-group-header]", inputs: ["nativeElementId"], outputs: ["keyDown"] }, { kind: "ngmodule", type: InputGroupModule }, { kind: "component", type: i5.InputGroupComponent, selector: "fd-input-group", inputs: ["placement", "required", "inline", "addOnText", "buttonFocusable", "type", "glyph", "glyphFont", "button", "isControl", "showFocus", "isExpanded", "glyphAriaLabel", "addonButtonAriaHidden", "iconTitle", "ariaLabelledBy"], outputs: ["addOnButtonClicked", "search"] }, { kind: "directive", type: i5.InputGroupInputDirective, selector: "[fdInputGroupInput], [fd-input-group-input]", inputs: ["class"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: AutoCompleteDirective, selector: "[fdkAutoComplete]", inputs: ["options", "inputText", "enable", "matcher", "displayFn"], outputs: ["onComplete"] }, { kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "ngmodule", type: ContentDensityModule }, { kind: "pipe", type: DisplayFnPipe, name: "displayFnPipe" }, { kind: "pipe", type: SearchHighlightPipe, name: "highlight" }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }, { kind: "pipe", type: ListGroupPipe, name: "listGroupPipe" }, { kind: "directive", type: TruncatedTitleDirective, selector: "[fdkTruncatedTitle], [fdTruncatedTitle], [fd-truncate-title]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
560
+ ], queries: [{ propertyName: "_comboboxItemRenderer", first: true, predicate: ComboboxItemDirective, descendants: true }, { propertyName: "listMessages", predicate: FD_LIST_MESSAGE_DIRECTIVE }], viewQueries: [{ propertyName: "listComponent", first: true, predicate: ListComponent, descendants: true }, { propertyName: "searchInputElement", first: true, predicate: ["searchInputElement"], descendants: true }, { propertyName: "popoverComponent", first: true, predicate: PopoverComponent, descendants: true }, { propertyName: "inputGroup", first: true, predicate: InputGroupComponent, descendants: true }, { propertyName: "controlTemplate", first: true, predicate: ["controlTemplate"], descendants: true }, { propertyName: "listTemplate", first: true, predicate: ["listTemplate"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-template [ngTemplateOutlet]=\"mobile ? mobileTemplate : desktopTemplate\"></ng-template>\n<ng-template #desktopTemplate>\n <fd-popover\n additionalBodyClass=\"fd-popover-custom-list\"\n [class.fd-combobox-full-width]=\"isSearch\"\n [isOpen]=\"open && displayedValues && displayedValues.length > 0\"\n (isOpenChange)=\"isOpenChangeHandle($event)\"\n [fillControlMode]=\"fillControlMode\"\n [scrollStrategy]=\"_repositionScrollStrategy\"\n [focusTrapped]=\"true\"\n [triggers]=\"triggers\"\n [disabled]=\"disabled || readOnly\"\n [maxWidth]=\"640\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n >\n <fd-popover-control>\n <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n </fd-popover-control>\n <fd-popover-body [hidden]=\"!displayedValues.length\">\n <ng-template [ngTemplateOutlet]=\"listTemplate\"></ng-template>\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n<ng-template let-term=\"term\" #itemSource>\n @if (!_customRenderer) {\n <span\n fd-list-title\n fdTruncatedTitle\n [innerHTML]=\"term | displayFnPipe: displayFn | highlight: inputText : highlighting && filterHighlight\"\n >\n </span>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"_customRenderer\"\n [ngTemplateOutletContext]=\"{ $implicit: term, inputText: inputText }\"\n ></ng-template>\n }\n</ng-template>\n<ng-template #mobileTemplate>\n <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n</ng-template>\n<ng-template #controlTemplate>\n <fd-input-group\n [button]=\"showDropdownButton\"\n [glyph]=\"showDropdownButton ? glyphValue : null\"\n [glyphFont]=\"isSearch ? _defaultFontFamily : glyphFont\"\n [state]=\"state\"\n [buttonFocusable]=\"buttonFocusable\"\n [disabled]=\"disabled\"\n [readonly]=\"readOnly\"\n [isControl]=\"true\"\n [isExpanded]=\"!mobile && open && displayedValues.length > 0\"\n [showFocus]=\"!clearInputBtnFocused\"\n [glyphAriaLabel]=\"ariaLabel || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\"\n [iconTitle]=\"title || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\"\n (addOnButtonClicked)=\"onPrimaryButtonClick()\"\n (click)=\"mobile && isOpenChangeHandle(true)\"\n >\n <input\n #searchInputElement\n fdkAutoComplete\n fd-input-group-input\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-describedby]=\"comboboxId + '-list-results'\"\n [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete && !mobile ? comboboxId + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete && !mobile\"\n [attr.aria-expanded]=\"!mobile && open && displayedValues.length\"\n [attr.aria-required]=\"required\"\n [attr.tabindex]=\"readOnly || disabled ? -1 : null\"\n [enable]=\"autoComplete && !mobile\"\n [displayFn]=\"displayFn\"\n [options]=\"dropdownValues\"\n [inputText]=\"inputText\"\n [disabled]=\"disabled\"\n [readonly]=\"readOnly\"\n [attr.aria-readonly]=\"readOnly\"\n [placeholder]=\"placeholder\"\n [id]=\"inputId\"\n [(ngModel)]=\"inputText\"\n (onComplete)=\"handleAutoComplete($event)\"\n (keydown)=\"onInputKeydownHandler($event)\"\n (paste)=\"onInputKeydownHandler('fromPaste')\"\n (ngModelChange)=\"handleSearchTermChange()\"\n (blur)=\"handleBlur()\"\n />\n @if (isSearch && showClearButton && inputText && inputText.length > 0) {\n <span\n class=\"fd-input-group__addon fd-input-group__addon--button\"\n [class.fd-shellbar__input-group-addon]=\"inShellbar\"\n >\n <button\n fd-button\n class=\"fd-input-group__button\"\n type=\"button\"\n [fdType]=\"inShellbar ? 'standard' : 'transparent'\"\n title=\"Clear input\"\n [class.fd-shellbar__button]=\"inShellbar\"\n [attr.tabindex]=\"clearButtonFocusable ? 0 : -1\"\n (focus)=\"clearInputBtnFocus()\"\n (blur)=\"clearInputBtnBlur()\"\n (click)=\"_handleClearSearchTerm()\"\n >\n <fd-icon glyph=\"decline\"></fd-icon>\n </button>\n </span>\n }\n </fd-input-group>\n <div [id]=\"comboboxId + '-list-results'\" class=\"fd-combobox-count-list-results\">\n {{ displayedValues.length || 0 }} result list items\n </div>\n</ng-template>\n<ng-template #listTemplate>\n <ul\n fd-list\n class=\"fd-combobox-custom-list\"\n [dropdownMode]=\"true\"\n [id]=\"comboboxId + '-result'\"\n role=\"listbox\"\n [attr.aria-labelledby]=\"comboboxId + '-search'\"\n [style.maxHeight]=\"!mobile && maxHeight\"\n [hasMessage]=\"listMessages && listMessages.length > 0\"\n [byline]=\"byline\"\n (keydown.tab)=\"_close()\"\n (keydown.shift.tab)=\"_close()\"\n (focusEscapeList)=\"handleListFocusEscape($event)\"\n >\n <ng-content></ng-content>\n @if (groupFn) {\n @for (group of displayedValues | listGroupPipe: groupFn; track group) {\n <li role=\"group\" fd-list-group-header [tabindex]=\"0\">\n <span fd-list-title>{{ group.key }}</span>\n </li>\n @for (term of group.value; track term) {\n <li\n role=\"option\"\n fd-list-item\n [attr.aria-placeholder]=\"group.key\"\n [tabindex]=\"0\"\n class=\"fd-combobox-list-item\"\n [selected]=\"isSelected(term)\"\n [value]=\"term\"\n (keydown)=\"onItemKeyDownHandler($event, term)\"\n (click)=\"onMenuClickHandler(term)\"\n >\n <ng-template\n [ngTemplateOutlet]=\"itemSource\"\n [ngTemplateOutletContext]=\"{ term: term }\"\n ></ng-template>\n </li>\n }\n }\n } @else {\n @for (term of displayedValues; track term) {\n <li\n fd-list-item\n role=\"option\"\n [tabindex]=\"0\"\n class=\"fd-combobox-list-item\"\n [selected]=\"isSelected(term)\"\n (keydown)=\"onItemKeyDownHandler($event, term)\"\n (click)=\"onMenuClickHandler(term)\"\n [value]=\"term\"\n >\n <ng-template\n [ngTemplateOutlet]=\"itemSource\"\n [ngTemplateOutletContext]=\"{ term: term }\"\n ></ng-template>\n </li>\n }\n }\n </ul>\n</ng-template>\n", styles: [".fd-combobox-custom-class,.fd-combobox-custom-class .fd-combobox-shellbar-custom{display:inline-block}.fd-list__item.fd-combobox-list-item{cursor:pointer}.fd-combobox-full-width{width:100%}.fd-combobox-count-list-results{position:absolute;opacity:0;z-index:-1}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig", "preventSpaceKeyScroll"] }, { kind: "component", type: PopoverControlComponent, selector: "fd-popover-control, [fdPopoverControl]" }, { kind: "component", type: PopoverBodyComponent, selector: "fd-popover-body", inputs: ["minWidth", "maxWidth", "minHeight", "maxHeight"] }, { kind: "ngmodule", type: ListModule }, { kind: "component", type: i4.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline", "unreadIndicator", "role"], outputs: ["focusEscapeList"] }, { kind: "component", type: i4.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "noData", "action", "interactive", "growing", "counter", "unread", "byline", "ariaRole", "id"], outputs: ["keyDown"] }, { kind: "directive", type: i4.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "directive", type: i4.ListGroupHeaderDirective, selector: "[fdListGroupHeader], [fd-list-group-header]", inputs: ["nativeElementId"], outputs: ["keyDown"] }, { kind: "ngmodule", type: InputGroupModule }, { kind: "component", type: i5.InputGroupComponent, selector: "fd-input-group", inputs: ["placement", "required", "inline", "addOnText", "buttonFocusable", "type", "glyph", "glyphFont", "button", "isControl", "showFocus", "isExpanded", "glyphAriaLabel", "addonButtonAriaHidden", "iconTitle", "ariaLabelledBy"], outputs: ["addOnButtonClicked", "search"] }, { kind: "directive", type: i5.InputGroupInputDirective, selector: "[fdInputGroupInput], [fd-input-group-input]", inputs: ["class"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: AutoCompleteDirective, selector: "[fdkAutoComplete]", inputs: ["options", "inputText", "enable", "displayFn", "matcher"], outputs: ["onComplete"] }, { kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "ngmodule", type: ContentDensityModule }, { kind: "pipe", type: DisplayFnPipe, name: "displayFnPipe" }, { kind: "pipe", type: SearchHighlightPipe, name: "highlight" }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }, { kind: "pipe", type: ListGroupPipe, name: "listGroupPipe" }, { kind: "directive", type: TruncatedTitleDirective, selector: "[fdkTruncatedTitle], [fdTruncatedTitle], [fd-truncate-title]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
561
561
  }
562
562
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: ComboboxComponent, decorators: [{
563
563
  type: Component,
@@ -704,4 +704,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
704
704
  type: ContentChild,
705
705
  args: [ComboboxItemDirective]
706
706
  }] } });
707
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jb21ib2JveC9jb21ib2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULE9BQU8sRUFDUCxVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFDTCxLQUFLLEVBQ0wsR0FBRyxFQUNILFFBQVEsRUFDWCxNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osUUFBUSxFQUNSLEtBQUssRUFJTCxNQUFNLEVBQ04sU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixVQUFVLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBDLE9BQU8sRUFFSCx1QkFBdUIsRUFFdkIsT0FBTyxFQUVQLHVCQUF1QixFQUMxQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBbUIsdUJBQXVCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsYUFBYSxFQUF3QixNQUFNLDRCQUE0QixDQUFDO0FBQzVHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxN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Z0JBS04sa0JBQWtCO3NCQURqQixLQUFLO2dCQVFOLFFBQVE7c0JBRFAsS0FBSztnQkFPTixLQUFLO3NCQURKLEtBQUs7Z0JBS04sTUFBTTtzQkFETCxLQUFLO2dCQVNOLGNBQWM7c0JBRGIsS0FBSztnQkFLRyxXQUFXO3NCQURuQixNQUFNO2dCQUtFLFVBQVU7c0JBRGxCLE1BQU07Z0JBS1AsZUFBZTtzQkFEZCxNQUFNO2dCQUtQLGFBQWE7c0JBRFosU0FBUzt1QkFBQyxhQUFhO2dCQUt4QixrQkFBa0I7c0JBRGpCLFNBQVM7dUJBQUMsb0JBQW9CO2dCQUsvQixnQkFBZ0I7c0JBRGYsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBSzNCLFVBQVU7c0JBRFQsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBSzlCLFlBQVk7c0JBRFgsZUFBZTt1QkFBQyx5QkFBeUI7Z0JBSzFDLGVBQWU7c0JBRGQsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBSzVCLFlBQVk7c0JBRFgsU0FBUzt1QkFBQyxjQUFjO2dCQUtSLHFCQUFxQjtzQkFEckMsWUFBWTt1QkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEJBQ0tTUEFDRSxcbiAgICBDT05UUk9MLFxuICAgIERPV05fQVJST1csXG4gICAgRU5URVIsXG4gICAgRVNDQVBFLFxuICAgIExFRlRfQVJST1csXG4gICAgUklHSFRfQVJST1csXG4gICAgU0hJRlQsXG4gICAgU1BBQ0UsXG4gICAgVEFCLFxuICAgIFVQX0FSUk9XXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIGZvcndhcmRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gICAgQXV0b0NvbXBsZXRlRXZlbnQsXG4gICAgRHluYW1pY0NvbXBvbmVudFNlcnZpY2UsXG4gICAgRm9jdXNFc2NhcGVEaXJlY3Rpb24sXG4gICAgS2V5VXRpbCxcbiAgICBOdWxsYWJsZSxcbiAgICBUcnVuY2F0ZWRUaXRsZURpcmVjdGl2ZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBGb3JtSXRlbUNvbnRyb2wsIHJlZ2lzdGVyRm9ybUl0ZW1Db250cm9sIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Zvcm0nO1xuaW1wb3J0IHsgSW5wdXRHcm91cENvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9pbnB1dC1ncm91cCc7XG5pbXBvcnQgeyBGRF9MSVNUX01FU1NBR0VfRElSRUNUSVZFLCBMaXN0Q29tcG9uZW50LCBMaXN0TWVzc2FnZURpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9saXN0JztcbmltcG9ydCB7IE1lbnVLZXlib2FyZFNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbWVudSc7XG5pbXBvcnQgeyBNb2JpbGVNb2RlQ29uZmlnIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL21vYmlsZS1tb2RlJztcbmltcG9ydCB7IFBvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvcG9wb3Zlcic7XG5pbXBvcnQgeyBQb3BvdmVyRmlsbE1vZGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvc2hhcmVkJztcblxuaW1wb3J0IHsgT3ZlcmxheSwgUmVwb3NpdGlvblNjcm9sbFN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3JtU3RhdGVzLCBTaW5nbGVEcm9wZG93blZhbHVlQ29udHJvbCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL2Zvcm1zJztcbmltcG9ydCB7IEF1dG9Db21wbGV0ZURpcmVjdGl2ZSwgRGlzcGxheUZuUGlwZSwgU2VhcmNoSGlnaGxpZ2h0UGlwZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9idXR0b24nO1xuaW1wb3J0IHtcbiAgICBDb250ZW50RGVuc2l0eU1vZHVsZSxcbiAgICBDb250ZW50RGVuc2l0eU9ic2VydmVyLFxuICAgIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnNcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQgeyBGRF9ERUZBVUxUX0lDT05fRk9OVF9GQU1JTFksIEljb25Db21wb25lbnQsIEljb25Gb250IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2ljb24nO1xuaW1wb3J0IHsgSW5wdXRHcm91cE1vZHVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9pbnB1dC1ncm91cCc7XG5pbXBvcnQgeyBMaXN0TW9kdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2xpc3QnO1xuaW1wb3J0IHsgUG9wb3ZlckJvZHlDb21wb25lbnQsIFBvcG92ZXJDb250cm9sQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3BvcG92ZXInO1xuaW1wb3J0IHsgRmRUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcbmltcG9ydCB7IENvbWJvYm94SXRlbSB9IGZyb20gJy4vY29tYm9ib3gtaXRlbSc7XG5pbXBvcnQgeyBDb21ib2JveEl0ZW1EaXJlY3RpdmUgfSBmcm9tICcuL2NvbWJvYm94LWl0ZW0uZGlyZWN0aXZlJztcbmltcG9ydCB7IENvbWJvYm94TW9iaWxlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21ib2JveC1tb2JpbGUvY29tYm9ib3gtbW9iaWxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDT01CT0JPWF9DT01QT05FTlQsIENvbWJvYm94SW50ZXJmYWNlLCBDb21ib2JveEl0ZW1EaXJlY3RpdmVDb250ZXh0IH0gZnJvbSAnLi9jb21ib2JveC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgR3JvdXBGdW5jdGlvbiwgTGlzdEdyb3VwUGlwZSB9IGZyb20gJy4vbGlzdC1ncm91cC5waXBlJztcbmltcG9ydCB7IEZEX0NPTUJPQk9YX0NPTVBPTkVOVCB9IGZyb20gJy4vdG9rZW5zJztcblxubGV0IGNvbWJvYm94VW5pcXVlSWQgPSAwO1xuXG4vKipcbiAqIEFsbG93cyB1c2VycyB0byBmaWx0ZXIgdGhyb3VnaCByZXN1bHRzIGFuZCBzZWxlY3QgYSB2YWx1ZS5cbiAqXG4gKiBTdXBwb3J0cyBBbmd1bGFyIEZvcm1zLlxuICogYGBgaHRtbFxuICogPGZkLWNvbWJvYm94XG4gKiAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGVybVwiXG4gKiAgICAgIFtkcm9wZG93blZhbHVlc109XCJkcm9wZG93blZhbHVlc1wiXG4gKiAgICAgIHBsYWNlaG9sZGVyPVwiVHlwZSBzb21lIHRleHQuLi5cIj5cbiAqIDwvZmQtY29tYm9ib3g+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1jb21ib2JveCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbWJvYm94LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vY29tYm9ib3guY29tcG9uZW50LnNjc3MnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENvbWJvYm94Q29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHJlZ2lzdGVyRm9ybUl0ZW1Db250cm9sKENvbWJvYm94Q29tcG9uZW50KSxcbiAgICAgICAgTWVudUtleWJvYXJkU2VydmljZSxcbiAgICAgICAgRHluYW1pY0NvbXBvbmVudFNlcnZpY2UsXG4gICAgICAgIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnMoKSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRkRfQ09NQk9CT1hfQ09NUE9ORU5ULFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IENvbWJvYm94Q29tcG9uZW50XG4gICAgICAgIH1cbiAgICBdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1tjbGFzcy5mZC1jb21ib2JveC1jdXN0b20tY2xhc3NdJzogJ3RydWUnLFxuICAgICAgICAnW2NsYXNzLmZkLWNvbWJvYm94LWlucHV0XSc6ICd0cnVlJyxcbiAgICAgICAgJ1tjbGFzcy5mZC1jb21ib2JveC1jdXN0b20tY2xhc3MtLW1vYmlsZV0nOiAnbW9iaWxlJ1xuICAgIH0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgUG9wb3ZlckNvbXBvbmVudCxcbiAgICAgICAgUG9wb3ZlckNvbnRyb2xDb21wb25lbnQsXG4gICAgICAgIFBvcG92ZXJCb2R5Q29tcG9uZW50LFxuICAgICAgICBMaXN0TW9kdWxlLFxuICAgICAgICBJbnB1dEdyb3VwTW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgQXV0b0NvbXBsZXRlRGlyZWN0aXZlLFxuICAgICAgICBCdXR0b25Db21wb25lbnQsXG4gICAgICAgIEljb25Db21wb25lbnQsXG4gICAgICAgIENvbnRlbnREZW5zaXR5TW9kdWxlLFxuICAgICAgICBEaXNwbGF5Rm5QaXBlLFxuICAgICAgICBTZWFyY2hIaWdobGlnaHRQaXBlLFxuICAgICAgICBGZFRyYW5zbGF0ZVBpcGUsXG4gICAgICAgIExpc3RHcm91cFBpcGUsXG4gICAgICAgIFRydW5jYXRlZFRpdGxlRGlyZWN0aXZlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBDb21ib2JveENvbXBvbmVudDxUID0gYW55PlxuICAgIGltcGxlbWVudHNcbiAgICAgICAgQ29tYm9ib3hJbnRlcmZhY2UsXG4gICAgICAgIFNpbmdsZURyb3Bkb3duVmFsdWVDb250cm9sLFxuICAgICAgICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgICAgICAgT25Jbml0LFxuICAgICAgICBPbkNoYW5nZXMsXG4gICAgICAgIEFmdGVyVmlld0luaXQsXG4gICAgICAgIE9uRGVzdHJveSxcbiAgICAgICAgRm9ybUl0ZW1Db250cm9sXG57XG4gICAgLyoqIElkIGZvciB0aGUgQ29tYm9ib3guICovXG4gICAgQElucHV0KClcbiAgICBjb21ib2JveElkID0gYGZkLWNvbWJvYm94LSR7Y29tYm9ib3hVbmlxdWVJZCsrfWA7XG5cbiAgICAvKiogSWQgYXR0cmlidXRlIGZvciBpbnB1dCBlbGVtZW50IGluc2lkZSBDb21ib2JveCBjb21wb25lbnQgKi9cbiAgICBASW5wdXQoKVxuICAgIGlucHV0SWQgPSAnJztcblxuICAgIC8qKiBBcmlhLWxhYmVsIGZvciBDb21ib2JveC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFMYWJlbDogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBBcmlhLUxhYmVsbGVkYnkgZm9yIGVsZW1lbnQgZGVzY3JpYmluZyBDb21ib2JveC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFMYWJlbGxlZEJ5OiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqIElmIGl0IGlzIG1hbmRhdG9yeSBmaWVsZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmVxdWlyZWQgPSBmYWxzZTtcblxuICAgIC8qKiBWYWx1ZXMgdG8gYmUgZmlsdGVyZWQgaW4gdGhlIHNlYXJjaCBpbnB1dC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRyb3Bkb3duVmFsdWVzOiBUW10gPSBbXTtcblxuICAgIC8qKiBGaWx0ZXIgZnVuY3Rpb24uIEFjY2VwdHMgYW4gYXJyYXkgb2Ygb2JqZWN0cyBhbmQgYSBzZWFyY2ggdGVybSBhcyBhcmd1bWVudHNcbiAgICAgKiBhbmQgcmV0dXJucyBhIHN0cmluZy4gU2VlIHNlYXJjaCBpbnB1dCBleGFtcGxlcyBmb3IgZGV0YWlscy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGZpbHRlckZuID0gdGhpcy5fZGVmYXVsdEZpbHRlcjtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBzZWFyY2ggaW5wdXQgaXMgZGlzYWJsZWQuICoqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgICAvKiogUGxhY2Vob2xkZXIgb2YgdGhlIHNlYXJjaCBpbnB1dC4gKiovXG4gICAgQElucHV0KClcbiAgICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgQ29tYm9ib3ggaXMgYSBTZWFyY2ggRmllbGRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGlzU2VhcmNoID0gZmFsc2U7XG5cbiAgICAvKiogSWNvbiB0byBkaXNwbGF5IGluIHRoZSByaWdodC1zaWRlIGJ1dHRvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGdseXBoID0gJ25hdmlnYXRpb24tZG93bi1hcnJvdyc7XG5cbiAgICAvKiogR2x5cGggZm9udCBmYW1pbHkgKi9cbiAgICBASW5wdXQoKVxuICAgIGdseXBoRm9udDogSWNvbkZvbnQgPSBGRF9ERUZBVUxUX0lDT05fRk9OVF9GQU1JTFk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHNob3cgdGhlIGNsZWFyIHNlYXJjaCB0ZXJtIGJ1dHRvbiB3aGVuIHRoZSBDb21ib2JveCBpcyBhIFNlYXJjaCBGaWVsZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0NsZWFyQnV0dG9uID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqICBUaGUgdHJpZ2dlciBldmVudHMgdGhhdCB3aWxsIG9wZW4vY2xvc2UgdGhlIG9wdGlvbnMgcG9wb3Zlci5cbiAgICAgKiAgQWNjZXB0cyBhbnkgW0hUTUwgRE9NIEV2ZW50c10oaHR0cHM6Ly93d3cudzNzY2hvb2xzLmNvbS9qc3JlZi9kb21fb2JqX2V2ZW50LmFzcCkuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB0cmlnZ2Vyczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBjb21ib2JveCBzaG91bGQgY2xvc2UsIHdoZW4gYSBjbGljayBpcyBwZXJmb3JtZWQgb3V0c2lkZSBpdHMgYm91bmRhcmllcy4gVHJ1ZSBieSBkZWZhdWx0ICovXG4gICAgQElucHV0KClcbiAgICBjbG9zZU9uT3V0c2lkZUNsaWNrID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIGNvbWJvYm94IHNob3VsZCBvcGVuLCB3aGVuIGFueSBrZXkgaXMgcHJlc3NlZCBpbiBpbnB1dCAoZXhjZXB0IEVzY2FwZSwgU3BhY2UsIEVudGVyKS4gVHJ1ZSBieSBkZWZhdWx0XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBvcGVuT25LZXlib2FyZEV2ZW50ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqICBUaGUgc3RhdGUgb2YgdGhlIGZvcm0gY29udHJvbCAtIGFwcGxpZXMgY3NzIGNsYXNzZXMuXG4gICAgICogIENhbiBiZSBgc3VjY2Vzc2AsIGBlcnJvcmAsIGB3YXJuaW5nYCwgYGluZm9ybWF0aW9uYCBvciBibGFuayBmb3IgZGVmYXVsdC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHN0YXRlPzogRm9ybVN0YXRlcztcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZW1wbGF0ZSB3aXRoIHdoaWNoIHRvIGRpc3BsYXkgdGhlIGluZGl2aWR1YWwgbGlzdGVkIGl0ZW1zLlxuICAgICAqIFVzZSBpdCBieSBwYXNzaW5nIGFuIG5nLXRlbXBsYXRlIHdpdGggaW1wbGljaXQgY29udGVudC4gU2VlIGV4YW1wbGVzIGZvciBtb3JlIGluZm8uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPENvbWJvYm94SXRlbURpcmVjdGl2ZUNvbnRleHQ8VD4+O1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdXNlZCB0byBoYW5kbGUgZ3JvdXBpbmcgb2YgaXRlbXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBncm91cEZuOiBOdWxsYWJsZTxHcm91cEZ1bmN0aW9uPjtcblxuICAgIC8qKiBNYXggaGVpZ2h0IG9mIHRoZSBwb3BvdmVyLiBBbnkgb3ZlcmZsb3dpbmcgZWxlbWVudHMgd2lsbCBiZSBhY2Nlc3NpYmxlIHRocm91Z2ggc2Nyb2xsaW5nLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWF4SGVpZ2h0ID0gJzUwdmgnO1xuXG4gICAgLyoqIFNlYXJjaCBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIEVudGVyIGtleSBpcyBwcmVzc2VkIG9uIHRoZSBtYWluIGlucHV0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VhcmNoRm46ICgpID0+IHZvaWQ7XG5cbiAgICAvKiogV2hldGhlciB0aGUgbWF0Y2hpbmcgc3RyaW5nIHNob3VsZCBiZSBoaWdobGlnaHRlZCBkdXJpbmcgZmlsdHJhdGlvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGhpZ2hsaWdodGluZyA9IHRydWU7XG5cbiAgICAvKiogV2hldGhlciB0aGUgcG9wb3ZlciBzaG91bGQgY2xvc2Ugd2hlbiBhIHVzZXIgc2VsZWN0cyBhIHJlc3VsdC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGNsb3NlT25TZWxlY3QgPSB0cnVlO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGlucHV0IGZpZWxkIHNob3VsZCBiZSBwb3B1bGF0ZWQgd2l0aCB0aGUgcmVzdWx0IHBpY2tlZCBieSB0aGUgdXNlci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGZpbGxPblNlbGVjdCA9IHRydWU7XG5cbiAgICAvKiogV2hldGhlciB0aGUgYXV0b2NvbXBsZXRlIHNob3VsZCBiZSBlbmFibGVkOyBFbmFibGVkIGJ5IGRlZmF1bHQgKi9cbiAgICBASW5wdXQoKVxuICAgIGF1dG9Db21wbGV0ZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBQcmVzZXQgb3B0aW9ucyBmb3IgdGhlIFNlbGVjdCBib2R5IHdpZHRoLCB3aGF0ZXZlciBpcyBjaG9zZW4sIHRoZSBib2R5IGhhcyBhIDYwMHB4IGxpbWl0LlxuICAgICAqICogYGF0LWxlYXN0YCB3aWxsIGFwcGx5IGEgbWluaW11bSB3aWR0aCB0byB0aGUgYm9keSBlcXVpdmFsZW50IHRvIHRoZSB3aWR0aCBvZiB0aGUgY29udHJvbC4gLSBEZWZhdWx0XG4gICAgICogKiBgZXF1YWxgIHdpbGwgYXBwbHkgYSB3aWR0aCB0byB0aGUgYm9keSBlcXVpdmFsZW50IHRvIHRoZSB3aWR0aCBvZiB0aGUgY29udHJvbC5cbiAgICAgKiAqICdmaXQtY29udGVudCcgd2lsbCBhcHBseSB3aWR0aCBuZWVkZWQgdG8gcHJvcGVybHkgZGlzcGxheSBpdGVtcyBpbnNpZGUsIGluZGVwZW5kZW50IG9mIGNvbnRyb2wuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBmaWxsQ29udHJvbE1vZGU6IFBvcG92ZXJGaWxsTW9kZSA9ICdhdC1sZWFzdCc7XG5cbiAgICAvKiogRGVmaW5lcyBpZiBjb21ib2JveCBzaG91bGQgYmVoYXZlIHNhbWUgYXMgZHJvcGRvd24uIFdoZW4gaXQncyBlbmFibGVkIHdyaXRpbmcgaW5zaWRlIHRleHQgaW5wdXQgd29uJ3RcbiAgICAgKiB0cmlnZ2VyIG9uQ2hhbmdlIGZ1bmN0aW9uLCB1bnRpbCBpdCBtYXRjaGVzIG9uZSBvZiBkaXNwbGF5ZWQgZHJvcGRvd24gdmFsdWVzLiBBbHNvIGNvbW11bmljYXRpbmcgd2l0aCBjb21ib2JveFxuICAgICAqIGNhbiBiZSBhY2hpZXZlZCBvbmx5IGJ5IG9iamVjdHMgd2l0aCBzYW1lIHR5cGUgYXMgZHJvcGRvd25WYWx1ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgY29tbXVuaWNhdGVCeU9iamVjdCA9IGZhbHNlO1xuXG4gICAgLyoqIERpc3BsYXkgZnVuY3Rpb24uIEFjY2VwdHMgYW4gb2JqZWN0IG9mIHRoZSBzYW1lIHR5cGUgYXMgdGhlXG4gICAgICogaXRlbXMgcGFzc2VkIHRvIGRyb3Bkb3duVmFsdWVzIGFzIGFyZ3VtZW50LCBhbmQgb3V0cHV0cyBhIHN0cmluZy5cbiAgICAgKiBBbiBhcnJvdyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBhY2Nlc3MgdGhlICp0aGlzKiBrZXl3b3JkIGluIHRoZSBjYWxsaW5nIGNvbXBvbmVudC5cbiAgICAgKiBTZWUgc2VhcmNoIGlucHV0IGV4YW1wbGVzIGZvciBkZXRhaWxzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzcGxheUZuID0gdGhpcy5fZGVmYXVsdERpc3BsYXk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIEFkZE9uIEJ1dHRvbiBzaG91bGQgYmUgZm9jdXNhYmxlXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGJ1dHRvbkZvY3VzYWJsZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBjbGVhciBidXR0b24gc2hvdWxkIGJlIGZvY3VzYWJsZS5cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBjbGVhckJ1dHRvbkZvY3VzYWJsZSA9IHRydWU7XG5cbiAgICAvKiogV2hldGhlciB0aGUgY29tYm9ib3ggaXMgcmVhZG9ubHkuICovXG4gICAgQElucHV0KClcbiAgICByZWFkT25seSA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGNvbWJvYm94IHNob3VsZCBiZSBidWlsdCBvbiBtb2JpbGUgbW9kZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9iaWxlID0gZmFsc2U7XG5cbiAgICAvKiogTXVsdGkgSW5wdXQgTW9iaWxlIENvbmZpZ3VyYXRpb24sIGl0J3MgYXBwbGllZCBvbmx5LCB3aGVuIG1vYmlsZSBpcyBlbmFibGVkICovXG4gICAgQElucHV0KClcbiAgICBtb2JpbGVDb25maWc6IE1vYmlsZU1vZGVDb25maWc7XG5cbiAgICAvKiogV2hldGhlciB0byBkaXNwbGF5IHRoZSBhZGRvbiBidXR0b24uICovXG4gICAgQElucHV0KClcbiAgICBzaG93RHJvcGRvd25CdXR0b24gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byByZXR1cm4gcmVzdWx0cyB3aGVyZSB0aGUgaW5wdXQgbWF0Y2hlcyB0aGUgZW50aXJlIHN0cmluZy4gQnkgZGVmYXVsdCwgb25seSByZXN1bHRzIHRoYXQgc3RhcnRcbiAgICAgKiB3aXRoIHRoZSBpbnB1dCBzZWFyY2ggdGVybSB3aWxsIGJlIHJldHVybmVkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW5jbHVkZXMgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0b29sdGlwIGZvciB0aGUgbXVsdGktaW5wdXQgaWNvbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHRpdGxlOiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciBsaXN0IGl0ZW0gb3B0aW9ucyBzaG91bGQgYmUgcmVuZGVyZWQgYXMgYnlsaW5lLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYnlsaW5lID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBBY3Rpb24gdG8gcGVyZm9ybSB3aGVuIHVzZXIgc2hpZnRzIGZvY3VzIGZyb20gdGhlIGRyb3Bkb3duLlxuICAgICAqIC0gYGNsb3NlYCB3aWxsIGNsb3NlIHRoZSBkcm9wZG93biBwcmVzZXJ2aW5nIHByZXZpb3VzbHkgc2VsZWN0ZWQgdmFsdWUuXG4gICAgICogLSBgY2xvc2VBbmRTZWxlY3RgIHdpbGwgY2xvc2UgdGhlIGRyb3Bkb3duIGFuZCBzZWxlY3QgbGFzdCBmb2N1c2VkIGRyb3Bkb3duIGl0ZW0uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB0YWJPdXRTdHJhdGVneTogJ2Nsb3NlJyB8ICdjbG9zZUFuZFNlbGVjdCcgPSAnY2xvc2VBbmRTZWxlY3QnO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBhbiBpdGVtIGlzIGNsaWNrZWQuIFVzZSAqJGV2ZW50KiB0byByZXRyaWV2ZSBpdC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBpdGVtQ2xpY2tlZDogRXZlbnRFbWl0dGVyPENvbWJvYm94SXRlbT4gPSBuZXcgRXZlbnRFbWl0dGVyPENvbWJvYm94SXRlbT4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkLCB3aGVuIHRoZSBjb21ib2JveCdzIHBvcG92ZXIgYm9keSBpcyBvcGVuZWQgb3IgY2xvc2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgb3BlbkNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgaW5wdXQgdGV4dCBjaGFuZ2VzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGlucHV0VGV4dENoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChMaXN0Q29tcG9uZW50KVxuICAgIGxpc3RDb21wb25lbnQ6IExpc3RDb21wb25lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3NlYXJjaElucHV0RWxlbWVudCcpXG4gICAgc2VhcmNoSW5wdXRFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKFBvcG92ZXJDb21wb25lbnQpXG4gICAgcG9wb3ZlckNvbXBvbmVudDogUG9wb3ZlckNvbXBvbmVudDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChJbnB1dEdyb3VwQ29tcG9uZW50KVxuICAgIGlucHV0R3JvdXA6IElucHV0R3JvdXBDb21wb25lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oRkRfTElTVF9NRVNTQUdFX0RJUkVDVElWRSlcbiAgICBsaXN0TWVzc2FnZXM6IFF1ZXJ5TGlzdDxMaXN0TWVzc2FnZURpcmVjdGl2ZT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2NvbnRyb2xUZW1wbGF0ZScpXG4gICAgY29udHJvbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxIVE1MRWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2xpc3RUZW1wbGF0ZScpXG4gICAgbGlzdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxIVE1MRWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGQoQ29tYm9ib3hJdGVtRGlyZWN0aXZlKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbWJvYm94SXRlbVJlbmRlcmVyOiBDb21ib2JveEl0ZW1EaXJlY3RpdmU7XG5cbiAgICAvKiogV2hldGhlciB0aGUgbWF0Y2hpbmcgc3RyaW5nIHNob3VsZCBiZSBoaWdobGlnaHRlZCBhZnRlciBjb21ib2JveCB2YWx1ZSBpcyBzZWxlY3RlZC4gKi9cbiAgICBmaWx0ZXJIaWdobGlnaHQgPSB0cnVlO1xuXG4gICAgLyoqIEtleXMsIHRoYXQgd29uJ3QgdHJpZ2dlciB0aGUgcG9wb3ZlcidzIG9wZW4gc3RhdGUsIHdoZW4gZGlzcGF0Y2hlZCBvbiBzZWFyY2ggaW5wdXQgKi9cbiAgICByZWFkb25seSBub25PcGVuaW5nS2V5czogbnVtYmVyW10gPSBbXG4gICAgICAgIEVTQ0FQRSxcbiAgICAgICAgRU5URVIsXG4gICAgICAgIExFRlRfQVJST1csXG4gICAgICAgIFJJR0hUX0FSUk9XLFxuICAgICAgICBET1dOX0FSUk9XLFxuICAgICAgICBVUF9BUlJPVyxcbiAgICAgICAgQ09OVFJPTCxcbiAgICAgICAgVEFCLFxuICAgICAgICBTSElGVFxuICAgIF07XG5cbiAgICAvKiogS2V5cywgdGhhdCB3aWxsIGNsb3NlIHBvcG92ZXIncyBib2R5LCB3aGVuIGRpc3BhdGNoZWQgb24gc2VhcmNoIGlucHV0ICovXG4gICAgcmVhZG9ubHkgY2xvc2luZ0tleXM6IG51bWJlcltdID0gW0VTQ0FQRV07XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF9yZXBvc2l0aW9uU2Nyb2xsU3RyYXRlZ3k6IFJlcG9zaXRpb25TY3JvbGxTdHJhdGVneTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX2RlZmF1bHRGb250RmFtaWx5ID0gRkRfREVGQVVMVF9JQ09OX0ZPTlRfRkFNSUxZO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGNvbWJvYm94IGlzIG9wZW5lZC4gKi9cbiAgICBvcGVuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgaW5wdXQgY291cCBpcyBpbiB0aGUgc2hlbGxiYXIuIE9ubHkgZm9yIGludGVybmFsIHVzZSBieSBjb21ib2JveCBjb21wb25lbnRcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaW5TaGVsbGJhciA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBkaXNwbGF5ZWRWYWx1ZXM6IGFueVtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGlucHV0VGV4dFZhbHVlID0gJyc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNsZWFySW5wdXRCdG5Gb2N1c2VkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfY3VzdG9tUmVuZGVyZXIoKTogTnVsbGFibGU8VGVtcGxhdGVSZWY8Q29tYm9ib3hJdGVtRGlyZWN0aXZlQ29udGV4dDxUPj4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbWJvYm94SXRlbVJlbmRlcmVyPy50ZW1wbGF0ZVJlZiB8fCB0aGlzLml0ZW1UZW1wbGF0ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ZhbHVlOiBhbnk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9vdmVybGF5OiBPdmVybGF5LFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9jZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfZHluYW1pY0NvbXBvbmVudFNlcnZpY2U6IER5bmFtaWNDb21wb25lbnRTZXJ2aWNlLFxuICAgICAgICByZWFkb25seSBfY29udGVudERlbnNpdHlPYnNlcnZlcjogQ29udGVudERlbnNpdHlPYnNlcnZlclxuICAgICkge1xuICAgICAgICB0aGlzLl9yZXBvc2l0aW9uU2Nyb2xsU3RyYXRlZ3kgPSB0aGlzLl9vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbih7IGF1dG9DbG9zZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvblRvdWNoZWQgPSAoKTogdm9pZCA9PiB7fTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICAgICAgICB0aGlzLnNob3dEcm9wZG93bkJ1dHRvbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3JlZnJlc2hEaXNwbGF5ZWRWYWx1ZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZHJvcGRvd25WYWx1ZXMgJiYgKGNoYW5nZXMuZHJvcGRvd25WYWx1ZXMgfHwgY2hhbmdlcy5zZWFyY2hUZXJtKSkge1xuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaERpc3BsYXllZFZhbHVlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hZGRTaGVsbGJhckNsYXNzKCk7XG5cbiAgICAgICAgaWYgKHRoaXMubW9iaWxlKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRVcE1vYmlsZU1vZGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25JbnB1dEtleWRvd25IYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50IHwgc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGV2ZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKGV2ZW50ID09PSAnZnJvbVBhc3RlJykge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlSGFuZGxlKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBUQUIpICYmIHRoaXMub3Blbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Nsb3NlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIEVOVEVSKSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaEZuKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoRm4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBET1dOX0FSUk9XKSkge1xuICAgICAgICAgICAgICAgIGlmIChldmVudC5hbHRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVzZXREaXNwbGF5ZWRWYWx1ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2VIYW5kbGUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wZW4gJiYgdGhpcy5saXN0Q29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdENvbXBvbmVudC5zZXRJdGVtQWN0aXZlKDApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3Blbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaG9vc2VPdGhlckl0ZW0oMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBVUF9BUlJPVykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaG9vc2VPdGhlckl0ZW0oLTEpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCB0aGlzLmNsb3NpbmdLZXlzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlSGFuZGxlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuT25LZXlib2FyZEV2ZW50ICYmXG4gICAgICAgICAgICAgICAgIWV2ZW50LmN0cmxLZXkgJiZcbiAgICAgICAgICAgICAgICAhZXZlbnQuYWx0S2V5ICYmXG4gICAgICAgICAgICAgICAgIUtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCB0aGlzLm5vbk9wZW5pbmdLZXlzKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2VIYW5kbGUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNFbXB0eVZhbHVlICYmIEtleVV0aWwuaXNLZXlUeXBlKGV2ZW50LCAnY29udHJvbCcpICYmICFLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgQkFDS1NQQUNFKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3RDb21wb25lbnQuc2V0SXRlbUFjdGl2ZSgwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uSXRlbUtleURvd25IYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50LCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRU5URVIpIHx8IEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBTUEFDRSkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLm9uTWVudUNsaWNrSGFuZGxlcih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uTWVudUNsaWNrSGFuZGxlcih2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICh2YWx1ZSB8fCB2YWx1ZSA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXg6IG51bWJlciA9IHRoaXMuZHJvcGRvd25WYWx1ZXMuZmluZEluZGV4KChfdmFsdWUpID0+IF92YWx1ZSA9PT0gdmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlQ2xpY2tBY3Rpb25zKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVySGlnaGxpZ2h0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLml0ZW1DbGlja2VkLmVtaXQoeyBpdGVtOiB2YWx1ZSwgaW5kZXggfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogSGFuZGxlIGRpYWxvZyBkaXNtaXNzaW5nLCBjbG9zZXMgcG9wb3ZlciBhbmQgc2V0cyBiYWNrdXAgZGF0YS4gKi9cbiAgICBkaWFsb2dEaXNtaXNzKHRlcm06IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLmlucHV0VGV4dCA9IHRoaXMuZGlzcGxheUZuKHRlcm0pO1xuICAgICAgICB0aGlzLnNldFZhbHVlKHRlcm0pO1xuICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZUhhbmRsZShmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqIEhhbmRsZSBkaWFsb2cgYXBwcm92YWwsIGNsb3NlcyBwb3BvdmVyIGFuZCBwcm9wYWdhdGVzIGRhdGEgY2hhbmdlcy4gKi9cbiAgICBkaWFsb2dBcHByb3ZlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wcm9wYWdhdGVDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2VIYW5kbGUoZmFsc2UpO1xuICAgIH1cblxuICAgIC8qKiBJZiB0cnVlIHZhbHVlIGVtcHR5ICovXG4gICAgZ2V0IGlzRW1wdHlWYWx1ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmlucHV0VGV4dCB8fCB0aGlzLmlucHV0VGV4dD8udHJpbSgpLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICAvKiogSW5wdXQgdGV4dCBvZiB0aGUgaW5wdXQuICovXG4gICAgc2V0IGlucHV0VGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuaW5wdXRUZXh0VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5pbnB1dFRleHRDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgICAgIGlmICghdGhpcy5tb2JpbGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb3BhZ2F0ZUNoYW5nZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBpbnB1dFRleHQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRUZXh0VmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEdldCB0aGUgZ2x5cGggdmFsdWUgYmFzZWQgb24gd2hldGhlciB0aGUgY29tYm9ib3ggaXMgdXNlZCBhcyBhIHNlYXJjaCBmaWVsZCBvciBub3QuICovXG4gICAgZ2V0IGdseXBoVmFsdWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTZWFyY2ggPyAnc2VhcmNoJyA6IHRoaXMuZ2x5cGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaGFuZGxlQ2xlYXJTZWFyY2hUZXJtKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlucHV0VGV4dFZhbHVlID0gJyc7XG4gICAgICAgIHRoaXMuaW5wdXRUZXh0Q2hhbmdlLmVtaXQoJycpO1xuICAgICAgICB0aGlzLmRpc3BsYXllZFZhbHVlcyA9IHRoaXMuZHJvcGRvd25WYWx1ZXMgfHwgW107XG4gICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgaWYgKCF0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5fcHJvcGFnYXRlQ2hhbmdlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5wdXRUZXh0VmFsdWUgPSB0aGlzLmRpc3BsYXlGbih2YWx1ZSk7XG4gICAgICAgIHRoaXMuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCBwYXNzZWQgdG8gbGlzdCBjb21wb25lbnQgKi9cbiAgICBoYW5kbGVMaXN0Rm9jdXNFc2NhcGUoZGlyZWN0aW9uOiBGb2N1c0VzY2FwZURpcmVjdGlvbik6IHZvaWQge1xuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAndXAnKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhhbmRsZVNlYXJjaFRlcm1DaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzcGxheWVkVmFsdWVzID0gdGhpcy5maWx0ZXJGbih0aGlzLmRyb3Bkb3duVmFsdWVzLCB0aGlzLmlucHV0VGV4dCk7XG4gICAgICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudD8ucmVmcmVzaFBvc2l0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvblByaW1hcnlCdXR0b25DbGljaygpOiB2b2lkIHtcbiAgICAgICAgLy8gUHJldmVudCBwcmltYXJ5IGJ1dHRvbiBjbGljayBiZWhhdmlvdXIgb24gbW9iaWxlc1xuICAgICAgICBpZiAodGhpcy5tb2JpbGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlYXJjaEZuKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaEZuKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmVzZXREaXNwbGF5ZWRWYWx1ZXMoKTtcbiAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2VIYW5kbGUoIXRoaXMub3Blbik7XG4gICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJIaWdobGlnaHQgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMub3Blbikge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaXNPcGVuQ2hhbmdlSGFuZGxlKGlzT3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICAvKiogUmVzZXQgZGlzcGxheWVkIHZhbHVlcyBvbiBldmVyeSBtb2JpbGUgb3BlbiAqL1xuICAgICAgICBpZiAodGhpcy5tb2JpbGUgJiYgIXRoaXMub3Blbikge1xuICAgICAgICAgICAgdGhpcy5fcmVzZXREaXNwbGF5ZWRWYWx1ZXMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcGVuICE9PSBpc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMub3BlbiA9IGlzT3BlbjtcbiAgICAgICAgICAgIHRoaXMub3BlbkNoYW5nZS5lbWl0KGlzT3Blbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMub3BlbiAmJiAhdGhpcy5tb2JpbGUpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQmx1cigpO1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgaGFuZGxlcyBjb21wbGV0ZSBldmVudCBmcm9tIGF1dG8gY29tcGxldGUgZGlyZWN0aXZlLCBzZXR0aW5nIHRoZSBuZXcgdmFsdWUsIGFuZCBjbG9zaW5nIHBvcG92ZXIgKi9cbiAgICBoYW5kbGVBdXRvQ29tcGxldGUoZXZlbnQ6IEF1dG9Db21wbGV0ZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0VGV4dCAhPT0gZXZlbnQudGVybSkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dFRleHQgPSBldmVudC50ZXJtO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVTZWFyY2hUZXJtQ2hhbmdlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmZvcmNlQ2xvc2UgJiYgdGhpcy5pbnB1dFRleHQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlSGFuZGxlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFuZGxlQmx1cigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLm9wZW4pIHtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUF1dG9Db21wbGV0ZSh7XG4gICAgICAgICAgICAgICAgdGVybTogdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSxcbiAgICAgICAgICAgICAgICBmb3JjZUNsb3NlOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNsZWFySW5wdXRCdG5Gb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhcklucHV0QnRuRm9jdXNlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjbGVhcklucHV0QnRuQmx1cigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhcklucHV0QnRuRm9jdXNlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBDdXJyZW50IHNlbGVjdCB2YWx1ZSAqL1xuICAgIGdldFZhbHVlKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jbG9zZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbnB1dFRleHQgPSB0aGlzLl92YWx1ZSA/IHRoaXMuaW5wdXRUZXh0IDogJyc7XG4gICAgICAgIGlmICh0aGlzLnRhYk91dFN0cmF0ZWd5ID09PSAnY2xvc2VBbmRTZWxlY3QnKSB7XG4gICAgICAgICAgICBjb25zdCBmb2N1c2VkSXRlbSA9IHRoaXMubGlzdENvbXBvbmVudC5nZXRBY3RpdmVJdGVtKCk7XG4gICAgICAgICAgICBpZiAoZm9jdXNlZEl0ZW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVDbGlja0FjdGlvbnMoZm9jdXNlZEl0ZW0udmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZUhhbmRsZShmYWxzZSk7XG4gICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGlzU2VsZWN0ZWQodGVybTogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHRlcm1WYWx1ZSA9IHRoaXMuY29tbXVuaWNhdGVCeU9iamVjdCA/IHRlcm0gOiB0aGlzLmRpc3BsYXlGbih0ZXJtKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoKSA9PT0gdGVybVZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdGhhdCBwaWNrcyBvdGhlciB2YWx1ZSBtb3ZlZCBmcm9tIGN1cnJlbnQgb25lIGJ5IG9mZnNldCwgY2FsbGVkIG9ubHkgd2hlbiBjb21ib2JveCBpcyBjbG9zZWQgKi9cbiAgICBwcml2YXRlIF9jaG9vc2VPdGhlckl0ZW0ob2Zmc2V0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYWN0aXZlVmFsdWU6IGFueSA9IHRoaXMuX2dldE9wdGlvbk9iamVjdEJ5RGlzcGxheWVkVmFsdWUodGhpcy5pbnB1dFRleHRWYWx1ZSlbMF07XG4gICAgICAgIGNvbnN0IGluZGV4OiBudW1iZXIgPSB0aGlzLmRyb3Bkb3duVmFsdWVzLmZpbmRJbmRleCgodmFsdWUpID0+IHZhbHVlID09PSBhY3RpdmVWYWx1ZSk7XG4gICAgICAgIGlmICh0aGlzLmRyb3Bkb3duVmFsdWVzW2luZGV4ICsgb2Zmc2V0XSkge1xuICAgICAgICAgICAgdGhpcy5vbk1lbnVDbGlja0hhbmRsZXIodGhpcy5kcm9wZG93blZhbHVlc1tpbmRleCArIG9mZnNldF0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0aGF0IHJlc2V0IGZpbHRlcmluZyBmb3IgZGlzcGxheWVkIHZhbHVlcy4gSXQgb3ZlcnJpZGVzIGRpc3BsYXllZCB2YWx1ZXMgYnkgYWxsIHBvc3NpYmxlIGRyb3Bkb3duIHZhbHVlcyAqL1xuICAgIHByaXZhdGUgX3Jlc2V0RGlzcGxheWVkVmFsdWVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc3BsYXllZFZhbHVlcyA9IHRoaXMuZHJvcGRvd25WYWx1ZXMgfHwgW107XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9hZGRTaGVsbGJhckNsYXNzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pblNoZWxsYmFyKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2ZkLXNoZWxsYmFyX19pbnB1dC1ncm91cC1pbnB1dCcpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXRHcm91cCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRHcm91cC5zZXRJblNoZWxsYmFyKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kZWZhdWx0RGlzcGxheShzdHI6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHtzdHJ9YDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RlZmF1bHRGaWx0ZXIoY29udGVudEFycmF5OiBhbnlbXSwgc2VhcmNoVGVybTogYW55KTogYW55W10ge1xuICAgICAgICB0aGlzLmZpbHRlckhpZ2hsaWdodCA9IHRydWU7XG4gICAgICAgIGlmICh0eXBlb2Ygc2VhcmNoVGVybSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlYXJjaExvd2VyID0gc2VhcmNoVGVybS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRBcnJheS5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXJtID0gdGhpcy5kaXNwbGF5Rm4oaXRlbSkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5jbHVkZXMgPyB0ZXJtLmluY2x1ZGVzKHNlYXJjaExvd2VyKSA6IHRlcm0uc3RhcnRzV2l0aChzZWFyY2hMb3dlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHNlYXJjaFRlcm0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGVudEFycmF5LmZpbHRlcigoaXRlbSkgPT4gaXRlbSA9PT0gc2VhcmNoVGVybSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRlbnRBcnJheSB8fCBbXTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2hhbmRsZUNsaWNrQWN0aW9ucyh0ZXJtOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VPblNlbGVjdCkge1xuICAgICAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2VIYW5kbGUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpbGxPblNlbGVjdCkge1xuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSh0ZXJtKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRUZXh0ID0gdGhpcy5kaXNwbGF5Rm4odGVybSk7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5pbnB1dFRleHQ7XG4gICAgICAgICAgICB0aGlzLl9jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Byb3BhZ2F0ZUNoYW5nZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGFuZGxlU2VhcmNoVGVybUNoYW5nZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0T3B0aW9uT2JqZWN0QnlEaXNwbGF5ZWRWYWx1ZShkaXNwbGF5VmFsdWU6IHN0cmluZyk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRyb3Bkb3duVmFsdWVzLmZpbHRlcigodmFsdWUpID0+IHRoaXMuZGlzcGxheUZuKHZhbHVlKSA9PT0gZGlzcGxheVZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3JlZnJlc2hEaXNwbGF5ZWRWYWx1ZXMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0VGV4dCkge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWRWYWx1ZXMgPSB0aGlzLmZpbHRlckZuKHRoaXMuZHJvcGRvd25WYWx1ZXMsIHRoaXMuaW5wdXRUZXh0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkVmFsdWVzID0gdGhpcy5kcm9wZG93blZhbHVlcyB8fCBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcHJvcGFnYXRlQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jb21tdW5pY2F0ZUJ5T2JqZWN0KSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLl9nZXRPcHRpb25PYmplY3RCeURpc3BsYXllZFZhbHVlKHRoaXMuaW5wdXRUZXh0KTtcbiAgICAgICAgICAgIC8vIERvIG5vdCBzZXQgbmV3IHZhbHVlIGlmIHRoZXJlcyBtdWx0aXBsZSBpdGVtcyB0aGF0IGhhdmUgc2FtZSBsYWJlbC5cbiAgICAgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSAxICYmIHRoaXMuZGlzcGxheUZuKHZhbHVlc1swXSkgIT09IHRoaXMuZGlzcGxheUZuKHRoaXMuZ2V0VmFsdWUoKSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKHZhbHVlc1swXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuZ2V0VmFsdWUoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuaW5wdXRUZXh0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBzZXRWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNvbW11bmljYXRlQnlPYmplY3QpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuZGlzcGxheUZuKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0VXBNb2JpbGVNb2RlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICAgICAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IENPTUJPQk9YX0NPTVBPTkVOVCwgdXNlVmFsdWU6IHRoaXMgfV0sXG4gICAgICAgICAgICBwYXJlbnQ6IHRoaXMuX2luamVjdG9yXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2R5bmFtaWNDb21wb25lbnRTZXJ2aWNlLmNyZWF0ZUR5bmFtaWNDb21wb25lbnQoXG4gICAgICAgICAgICB7IGxpc3RUZW1wbGF0ZTogdGhpcy5saXN0VGVtcGxhdGUsIGNvbnRyb2xUZW1wbGF0ZTogdGhpcy5jb250cm9sVGVtcGxhdGUgfSxcbiAgICAgICAgICAgIENvbWJvYm94TW9iaWxlQ29tcG9uZW50LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lclJlZjogdGhpcy5fdmlld0NvbnRhaW5lclJlZlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpbmplY3RvclxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJtb2JpbGUgPyBtb2JpbGVUZW1wbGF0ZSA6IGRlc2t0b3BUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2Rlc2t0b3BUZW1wbGF0ZT5cbiAgICA8ZmQtcG9wb3ZlclxuICAgICAgICBhZGRpdGlvbmFsQm9keUNsYXNzPVwiZmQtcG9wb3Zlci1jdXN0b20tbGlzdFwiXG4gICAgICAgIFtjbGFzcy5mZC1jb21ib2JveC1mdWxsLXdpZHRoXT1cImlzU2VhcmNoXCJcbiAgICAgICAgW2lzT3Blbl09XCJvcGVuICYmIGRpc3BsYXllZFZhbHVlcyAmJiBkaXNwbGF5ZWRWYWx1ZXMubGVuZ3RoID4gMFwiXG4gICAgICAgIChpc09wZW5DaGFuZ2UpPVwiaXNPcGVuQ2hhbmdlSGFuZGxlKCRldmVudClcIlxuICAgICAgICBbZmlsbENvbnRyb2xNb2RlXT1cImZpbGxDb250cm9sTW9kZVwiXG4gICAgICAgIFtzY3JvbGxTdHJhdGVneV09XCJfcmVwb3NpdGlvblNjcm9sbFN0cmF0ZWd5XCJcbiAgICAgICAgW2ZvY3VzVHJhcHBlZF09XCJ0cnVlXCJcbiAgICAgICAgW3RyaWdnZXJzXT1cInRyaWdnZXJzXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHJlYWRPbmx5XCJcbiAgICAgICAgW21heFdpZHRoXT1cIjY0MFwiXG4gICAgICAgIFtjbG9zZU9uT3V0c2lkZUNsaWNrXT1cImNsb3NlT25PdXRzaWRlQ2xpY2tcIlxuICAgID5cbiAgICAgICAgPGZkLXBvcG92ZXItY29udHJvbD5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250cm9sVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2ZkLXBvcG92ZXItY29udHJvbD5cbiAgICAgICAgPGZkLXBvcG92ZXItYm9keSBbaGlkZGVuXT1cIiFkaXNwbGF5ZWRWYWx1ZXMubGVuZ3RoXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibGlzdFRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgPC9mZC1wb3BvdmVyLWJvZHk+XG4gICAgPC9mZC1wb3BvdmVyPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSBsZXQtdGVybT1cInRlcm1cIiAjaXRlbVNvdXJjZT5cbiAgICBAaWYgKCFfY3VzdG9tUmVuZGVyZXIpIHtcbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGZkLWxpc3QtdGl0bGVcbiAgICAgICAgICAgIGZkVHJ1bmNhdGVkVGl0bGVcbiAgICAgICAgICAgIFtpbm5lckhUTUxdPVwidGVybSB8IGRpc3BsYXlGblBpcGU6IGRpc3BsYXlGbiB8IGhpZ2hsaWdodDogaW5wdXRUZXh0IDogaGlnaGxpZ2h0aW5nICYmIGZpbHRlckhpZ2hsaWdodFwiXG4gICAgICAgID5cbiAgICAgICAgPC9zcGFuPlxuICAgIH0gQGVsc2Uge1xuICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9jdXN0b21SZW5kZXJlclwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHRlcm0sIGlucHV0VGV4dDogaW5wdXRUZXh0IH1cIlxuICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNtb2JpbGVUZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udHJvbFRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2NvbnRyb2xUZW1wbGF0ZT5cbiAgICA8ZmQtaW5wdXQtZ3JvdXBcbiAgICAgICAgW2J1dHRvbl09XCJzaG93RHJvcGRvd25CdXR0b25cIlxuICAgICAgICBbZ2x5cGhdPVwic2hvd0Ryb3Bkb3duQnV0dG9uID8gZ2x5cGhWYWx1ZSA6IG51bGxcIlxuICAgICAgICBbZ2x5cGhGb250XT1cImlzU2VhcmNoID8gX2RlZmF1bHRGb250RmFtaWx5IDogZ2x5cGhGb250XCJcbiAgICAgICAgW3N0YXRlXT1cInN0YXRlXCJcbiAgICAgICAgW2J1dHRvbkZvY3VzYWJsZV09XCJidXR0b25Gb2N1c2FibGVcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbcmVhZG9ubHldPVwicmVhZE9ubHlcIlxuICAgICAgICBbaXNDb250cm9sXT1cInRydWVcIlxuICAgICAgICBbaXNFeHBhbmRlZF09XCIhbW9iaWxlICYmIG9wZW4gJiYgZGlzcGxheWVkVmFsdWVzLmxlbmd0aCA+IDBcIlxuICAgICAgICBbc2hvd0ZvY3VzXT1cIiFjbGVhcklucHV0QnRuRm9jdXNlZFwiXG4gICAgICAgIFtnbHlwaEFyaWFMYWJlbF09XCJhcmlhTGFiZWwgfHwgKCdwbGF0Zm9ybU11bHRpQ29tYm9ib3guaW5wdXRHbHlwaEFyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZSlcIlxuICAgICAgICBbaWNvblRpdGxlXT1cInRpdGxlIHx8ICgncGxhdGZvcm1NdWx0aUNvbWJvYm94LmlucHV0R2x5cGhBcmlhTGFiZWwnIHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgKGFkZE9uQnV0dG9uQ2xpY2tlZCk9XCJvblByaW1hcnlCdXR0b25DbGljaygpXCJcbiAgICAgICAgKGNsaWNrKT1cIm1vYmlsZSAmJiBpc09wZW5DaGFuZ2VIYW5kbGUodHJ1ZSlcIlxuICAgID5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAjc2VhcmNoSW5wdXRFbGVtZW50XG4gICAgICAgICAgICBmZGtBdXRvQ29tcGxldGVcbiAgICAgICAgICAgIGZkLWlucHV0LWdyb3VwLWlucHV0XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICByb2xlPVwiY29tYm9ib3hcIlxuICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImNvbWJvYm94SWQgKyAnLWxpc3QtcmVzdWx0cydcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1hdXRvY29tcGxldGVdPVwiYXV0b0NvbXBsZXRlICYmICFtb2JpbGUgPyAnbGlzdCcgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtb3duc109XCJhdXRvQ29tcGxldGUgJiYgIW1vYmlsZSA/IGNvbWJvYm94SWQgKyAnLXJlc3VsdCcgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwiYXV0b0NvbXBsZXRlICYmICFtb2JpbGVcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCIhbW9iaWxlICYmIG9wZW4gJiYgZGlzcGxheWVkVmFsdWVzLmxlbmd0aFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cInJlYWRPbmx5IHx8IGRpc2FibGVkID8gLTEgOiBudWxsXCJcbiAgICAgICAgICAgIFtlbmFibGVdPVwiYXV0b0NvbXBsZXRlICYmICFtb2JpbGVcIlxuICAgICAgICAgICAgW2Rpc3BsYXlGbl09XCJkaXNwbGF5Rm5cIlxuICAgICAgICAgICAgW29wdGlvbnNdPVwiZHJvcGRvd25WYWx1ZXNcIlxuICAgICAgICAgICAgW2lucHV0VGV4dF09XCJpbnB1dFRleHRcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkT25seVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXJlYWRvbmx5XT1cInJlYWRPbmx5XCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICBbaWRdPVwiaW5wdXRJZFwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImlucHV0VGV4dFwiXG4gICAgICAgICAgICAob25Db21wbGV0ZSk9XCJoYW5kbGVBdXRvQ29tcGxldGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJvbklucHV0S2V5ZG93bkhhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAocGFzdGUpPVwib25JbnB1dEtleWRvd25IYW5kbGVyKCdmcm9tUGFzdGUnKVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJoYW5kbGVTZWFyY2hUZXJtQ2hhbmdlKClcIlxuICAgICAgICAgICAgKGJsdXIpPVwiaGFuZGxlQmx1cigpXCJcbiAgICAgICAgLz5cbiAgICAgICAgQGlmIChpc1NlYXJjaCAmJiBzaG93Q2xlYXJCdXR0b24gJiYgaW5wdXRUZXh0ICYmIGlucHV0VGV4dC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtaW5wdXQtZ3JvdXBfX2FkZG9uIGZkLWlucHV0LWdyb3VwX19hZGRvbi0tYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZmQtc2hlbGxiYXJfX2lucHV0LWdyb3VwLWFkZG9uXT1cImluU2hlbGxiYXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtaW5wdXQtZ3JvdXBfX2J1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBbZmRUeXBlXT1cImluU2hlbGxiYXIgPyAnc3RhbmRhcmQnIDogJ3RyYW5zcGFyZW50J1wiXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQ2xlYXIgaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmQtc2hlbGxiYXJfX2J1dHRvbl09XCJpblNoZWxsYmFyXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiY2xlYXJCdXR0b25Gb2N1c2FibGUgPyAwIDogLTFcIlxuICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwiY2xlYXJJbnB1dEJ0bkZvY3VzKClcIlxuICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJjbGVhcklucHV0QnRuQmx1cigpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9oYW5kbGVDbGVhclNlYXJjaFRlcm0oKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZmQtaWNvbiBnbHlwaD1cImRlY2xpbmVcIj48L2ZkLWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIH1cbiAgICA8L2ZkLWlucHV0LWdyb3VwPlxuICAgIDxkaXYgW2lkXT1cImNvbWJvYm94SWQgKyAnLWxpc3QtcmVzdWx0cydcIiBjbGFzcz1cImZkLWNvbWJvYm94LWNvdW50LWxpc3QtcmVzdWx0c1wiPlxuICAgICAgICB7eyBkaXNwbGF5ZWRWYWx1ZXMubGVuZ3RoIHx8IDAgfX0gcmVzdWx0IGxpc3QgaXRlbXNcbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2xpc3RUZW1wbGF0ZT5cbiAgICA8dWxcbiAgICAgICAgZmQtbGlzdFxuICAgICAgICBjbGFzcz1cImZkLWNvbWJvYm94LWN1c3RvbS1saXN0XCJcbiAgICAgICAgW2Ryb3Bkb3duTW9kZV09XCJ0cnVlXCJcbiAgICAgICAgW2lkXT1cImNvbWJvYm94SWQgKyAnLXJlc3VsdCdcIlxuICAgICAgICByb2xlPVwibGlzdGJveFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJjb21ib2JveElkICsgJy1zZWFyY2gnXCJcbiAgICAgICAgW3N0eWxlLm1heEhlaWdodF09XCIhbW9iaWxlICYmIG1heEhlaWdodFwiXG4gICAgICAgIFtoYXNNZXNzYWdlXT1cImxpc3RNZXNzYWdlcyAmJiBsaXN0TWVzc2FnZXMubGVuZ3RoID4gMFwiXG4gICAgICAgIFtieWxpbmVdPVwiYnlsaW5lXCJcbiAgICAgICAgKGtleWRvd24udGFiKT1cIl9jbG9zZSgpXCJcbiAgICAgICAgKGtleWRvd24uc2hpZnQudGFiKT1cIl9jbG9zZSgpXCJcbiAgICAgICAgKGZvY3VzRXNjYXBlTGlzdCk9XCJoYW5kbGVMaXN0Rm9jdXNFc2NhcGUoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIEBpZiAoZ3JvdXBGbikge1xuICAgICAgICAgICAgQGZvciAoZ3JvdXAgb2YgZGlzcGxheWVkVmFsdWVzIHwgbGlzdEdyb3VwUGlwZTogZ3JvdXBGbjsgdHJhY2sgZ3JvdXApIHtcbiAgICAgICAgICAgICAgICA8bGkgcm9sZT1cImdyb3VwXCIgZmQtbGlzdC1ncm91cC1oZWFkZXIgW3RhYmluZGV4XT1cIjBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gZmQtbGlzdC10aXRsZT57eyBncm91cC5rZXkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICBAZm9yICh0ZXJtIG9mIGdyb3VwLnZhbHVlOyB0cmFjayB0ZXJtKSB7XG4gICAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmZC1saXN0LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtcGxhY2Vob2xkZXJdPVwiZ3JvdXAua2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtY29tYm9ib3gtbGlzdC1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJpc1NlbGVjdGVkKHRlcm0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ0ZXJtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uSXRlbUtleURvd25IYW5kbGVyKCRldmVudCwgdGVybSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTWVudUNsaWNrSGFuZGxlcih0ZXJtKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1Tb3VyY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHRlcm06IHRlcm0gfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgQGZvciAodGVybSBvZiBkaXNwbGF5ZWRWYWx1ZXM7IHRyYWNrIHRlcm0pIHtcbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgZmQtbGlzdC1pdGVtXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtY29tYm9ib3gtbGlzdC1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cImlzU2VsZWN0ZWQodGVybSlcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbkl0ZW1LZXlEb3duSGFuZGxlcigkZXZlbnQsIHRlcm0pXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTWVudUNsaWNrSGFuZGxlcih0ZXJtKVwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ0ZXJtXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbVNvdXJjZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyB0ZXJtOiB0ZXJtIH1cIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgPC91bD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
707
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jb21ib2JveC9jb21ib2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULE9BQU8sRUFDUCxVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFDTCxLQUFLLEVBQ0wsR0FBRyxFQUNILFFBQVEsRUFDWCxNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osUUFBUSxFQUNSLEtBQUssRUFJTCxNQUFNLEVBQ04sU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixVQUFVLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBDLE9BQU8sRUFFSCx1QkFBdUIsRUFFdkIsT0FBTyxFQUVQLHVCQUF1QixFQUMxQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBbUIsdUJBQXVCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsYUFBYSxFQUF3QixNQUFNLDRCQUE0QixDQUFDO0FBQzVHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWpFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBR2pFLE9BQU8sRUFBRSxPQUFPLEVBQTRCLE1BQU0sc0JBQXNCLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFbkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQ0gsb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUN0QiwrQkFBK0IsRUFDbEMsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsYUFBYSxFQUFZLE1BQU0sNEJBQTRCLENBQUM7QUFDbEcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN0RixPQUFPLEVBQUUsa0JBQWtCLEVBQW1ELE1BQU0sc0JBQXNCLENBQUM7QUFDM0csT0FBTyxFQUFpQixhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7Ozs7O0FBRWpELElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBRXpCOzs7Ozs7Ozs7OztHQVdHO0FBK0NILE1BQU0sT0FBTyxpQkFBaUI7SUFxUzFCLGNBQWM7SUFDZCxJQUFJLGVBQWU7UUFDZixPQUFPLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxXQUFXLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQztJQUN4RSxDQUFDO0lBUUQsY0FBYztJQUNkLFlBQ3FCLFFBQWlCLEVBQ2pCLE1BQXlCLEVBQ3pCLFNBQW1CLEVBQ25CLGlCQUFtQyxFQUNuQyx3QkFBaUQsRUFDekQsdUJBQStDO1FBTHZDLGFBQVEsR0FBUixRQUFRLENBQVM7UUFDakIsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFDekIsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNuQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQ25DLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBeUI7UUFDekQsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF3QjtRQTVTNUQsMkJBQTJCO1FBRTNCLGVBQVUsR0FBRyxlQUFlLGdCQUFnQixFQUFFLEVBQUUsQ0FBQztRQUVqRCwrREFBK0Q7UUFFL0QsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQVViLCtCQUErQjtRQUUvQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCLGlEQUFpRDtRQUVqRCxtQkFBYyxHQUFRLEVBQUUsQ0FBQztRQUV6QjswRUFDa0U7UUFFbEUsYUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFVL0I7O1dBRUc7UUFFSCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCLGdEQUFnRDtRQUVoRCxVQUFLLEdBQUcsdUJBQXVCLENBQUM7UUFFaEMsd0JBQXdCO1FBRXhCLGNBQVMsR0FBYSwyQkFBMkIsQ0FBQztRQUVsRDs7V0FFRztRQUVILG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBRXZCOzs7V0FHRztRQUVILGFBQVEsR0FBYSxFQUFFLENBQUM7UUFFeEIsMkdBQTJHO1FBRTNHLHdCQUFtQixHQUFHLElBQUksQ0FBQztRQUUzQjs7V0FFRztRQUVILHdCQUFtQixHQUFHLElBQUksQ0FBQztRQXNCM0IsZ0dBQWdHO1FBRWhHLGNBQVMsR0FBRyxNQUFNLENBQUM7UUFNbkIsMkVBQTJFO1FBRTNFLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBRXBCLHFFQUFxRTtRQUVyRSxrQkFBYSxHQUFHLElBQUksQ0FBQztRQUVyQixzRkFBc0Y7UUFFdEYsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFFcEIscUVBQXFFO1FBRXJFLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBRXBCOzs7OztXQUtHO1FBRUgsb0JBQWUsR0FBb0IsVUFBVSxDQUFDO1FBRTlDOzs2RUFFcUU7UUFFckUsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBRTVCOzs7b0RBRzRDO1FBRTVDLGNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBRWpDOzs7V0FHRztRQUVILG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBRXhCOzs7V0FHRztRQUVILHlCQUFvQixHQUFHLElBQUksQ0FBQztRQUU1Qix3Q0FBd0M7UUFFeEMsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQiwwREFBMEQ7UUFFMUQsV0FBTSxHQUFHLEtBQUssQ0FBQztRQU1mLDJDQUEyQztRQUUzQyx1QkFBa0IsR0FBRyxJQUFJLENBQUM7UUFFMUI7OztXQUdHO1FBRUgsYUFBUSxHQUFHLEtBQUssQ0FBQztRQVFqQiw4REFBOEQ7UUFFOUQsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUVmOzs7O1dBSUc7UUFFSCxtQkFBYyxHQUErQixnQkFBZ0IsQ0FBQztRQUU5RCwwRUFBMEU7UUFFakUsZ0JBQVcsR0FBK0IsSUFBSSxZQUFZLEVBQWdCLENBQUM7UUFFcEYsMEVBQTBFO1FBRWpFLGVBQVUsR0FBMEIsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUV6RSxpREFBaUQ7UUFFakQsb0JBQWUsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQWtDbkUsMEZBQTBGO1FBQzFGLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBRXZCLHlGQUF5RjtRQUNoRixtQkFBYyxHQUFhO1lBQ2hDLE1BQU07WUFDTixLQUFLO1lBQ0wsVUFBVTtZQUNWLFdBQVc7WUFDWCxVQUFVO1lBQ1YsUUFBUTtZQUNSLE9BQU87WUFDUCxHQUFHO1lBQ0gsS0FBSztTQUNSLENBQUM7UUFFRiw0RUFBNEU7UUFDbkUsZ0JBQVcsR0FBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBSzFDLGNBQWM7UUFDTCx1QkFBa0IsR0FBRywyQkFBMkIsQ0FBQztRQUUxRCxzQ0FBc0M7UUFDdEMsU0FBSSxHQUFHLEtBQUssQ0FBQztRQUViOzs7V0FHRztRQUNILGVBQVUsR0FBRyxLQUFLLENBQUM7UUFFbkIsY0FBYztRQUNkLG9CQUFlLEdBQVUsRUFBRSxDQUFDO1FBRTVCLGNBQWM7UUFDZCxtQkFBYyxHQUFHLEVBQUUsQ0FBQztRQUVwQixjQUFjO1FBQ2QseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBTzdCLGNBQWM7UUFDTixtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFpQjVDLGNBQWM7UUFDZCxhQUFRLEdBQXlCLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUUxQyxjQUFjO1FBQ2QsY0FBUyxHQUFHLEdBQVMsRUFBRSxHQUFFLENBQUMsQ0FBQztRQVB2QixJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNwRyxDQUFDO0lBUUQsY0FBYztJQUNkLFFBQVE7UUFDSixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1NBQ25DO1FBQ0QsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELGNBQWM7SUFDZCxXQUFXLENBQUMsT0FBc0I7UUFDOUIsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDdkUsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7U0FDbEM7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNkLFdBQVc7UUFDUCxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxjQUFjO0lBQ2QsZUFBZTtRQUNYLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRXpCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNiLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQzNCO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDZCxxQkFBcUIsQ0FBQyxLQUE2QjtRQUMvQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixPQUFPO1NBQ1Y7UUFFRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUMzQixJQUFJLEtBQUssS0FBSyxXQUFXLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNqQztTQUNKO2FBQU07WUFDSCxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQzVDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDZCxPQUFPO2FBQ1Y7WUFFRCxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFO2dCQUNqQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7b0JBQ2YsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2lCQUNuQjthQUNKO2lCQUFNLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLEVBQUU7Z0JBQzdDLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTtvQkFDZCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztvQkFDN0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUNqQztnQkFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtvQkFDakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZDO3FCQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO29CQUNuQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzVCO2dCQUNELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUMxQjtpQkFBTSxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxFQUFFO2dCQUMzQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQzFCO2lCQUFNLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUNuRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQy9CLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUMzQjtpQkFBTSxJQUNILElBQUksQ0FBQyxtQkFBbUI7Z0JBQ3hCLENBQUMsS0FBSyxDQUFDLE9BQU87Z0JBQ2QsQ0FBQyxLQUFLLENBQUMsTUFBTTtnQkFDYixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsRUFDaEQ7Z0JBQ0UsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM5QixJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsRUFBRTtvQkFDbEcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZDO2FBQ0o7U0FDSjtJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ2Qsb0JBQW9CLENBQUMsS0FBb0IsRUFBRSxLQUFVO1FBQ2pELElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDcEUsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNsQztJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ2Qsa0JBQWtCLENBQUMsS0FBVTtRQUN6QixJQUFJLEtBQUssSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO1lBQ3RCLE1BQU0sS0FBSyxHQUFXLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLENBQUM7WUFDbEYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1lBQzdCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQ2pEO0lBQ0wsQ0FBQztJQUVELHFFQUFxRTtJQUNyRSxhQUFhLENBQUMsSUFBUztRQUNuQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELDBFQUEwRTtJQUMxRSxhQUFhO1FBQ1QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCwwQkFBMEI7SUFDMUIsSUFBSSxZQUFZO1FBQ1osT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCwrQkFBK0I7SUFDL0IsSUFBSSxTQUFTLENBQUMsS0FBYTtRQUN2QixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNkLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQzNCO0lBQ0wsQ0FBQztJQUNELElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUMvQixDQUFDO0lBRUQsMEZBQTBGO0lBQzFGLElBQUksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ2pELENBQUM7SUFFRCxjQUFjO0lBQ2Qsc0JBQXNCO1FBQ2xCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUM7UUFDakQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNkLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQzNCO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsY0FBYztJQUNkLFVBQVUsQ0FBQyxLQUFVO1FBQ2pCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELGNBQWM7SUFDZCxnQkFBZ0IsQ0FBQyxFQUF3QjtRQUNyQyxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsY0FBYztJQUNkLGlCQUFpQixDQUFDLEVBQWM7UUFDNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELHNDQUFzQztJQUN0QyxxQkFBcUIsQ0FBQyxTQUErQjtRQUNqRCxJQUFJLFNBQVMsS0FBSyxJQUFJLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNqRDtJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ2Qsc0JBQXNCO1FBQ2xCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVELGNBQWM7SUFDZCxvQkFBb0I7UUFDaEIsb0RBQW9EO1FBQ3BELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNiLE9BQU87U0FDVjtRQUVELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNmLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNuQjtRQUNELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzlDLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQzdCLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUNYLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDbEQ7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNkLGtCQUFrQixDQUFDLE1BQWU7UUFDOUIsa0RBQWtEO1FBQ2xELElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDM0IsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7U0FDaEM7UUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO1lBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2hDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQzVCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ3hFO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsY0FBYztJQUNkLGdCQUFnQixDQUFDLFVBQW1CO1FBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELGtIQUFrSDtJQUNsSCxrQkFBa0IsQ0FBQyxLQUF3QjtRQUN2QyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLElBQUksRUFBRTtZQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDNUIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7U0FDakM7UUFDRCxJQUFJLEtBQUssQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNwQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbEM7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNkLFVBQVU7UUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNaLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsa0JBQWtCLENBQUM7Z0JBQ3BCLElBQUksRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLEtBQUs7Z0JBQ2pELFVBQVUsRUFBRSxLQUFLO2FBQ3BCLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDZCxrQkFBa0I7UUFDZCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxjQUFjO0lBQ2QsaUJBQWlCO1FBQ2IsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztJQUN0QyxDQUFDO0lBRUQsMkJBQTJCO0lBQzNCLFFBQVE7UUFDSixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVELGNBQWM7SUFDZCxNQUFNO1FBQ0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbkQsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLGdCQUFnQixFQUFFO1lBQzFDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkQsSUFBSSxXQUFXLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDNUMsT0FBTzthQUNWO1NBQ0o7UUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNsRCxDQUFDO0lBRUQsY0FBYztJQUNkLFVBQVUsQ0FBQyxJQUFTO1FBQ2hCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pFLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLFNBQVMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsMEdBQTBHO0lBQ2xHLGdCQUFnQixDQUFDLE1BQWM7UUFDbkMsTUFBTSxXQUFXLEdBQVEsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RixNQUFNLEtBQUssR0FBVyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FBQyxDQUFDO1FBQ3RGLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUU7WUFDckMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDaEU7SUFDTCxDQUFDO0lBRUQsc0hBQXNIO0lBQzlHLHFCQUFxQjtRQUN6QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDO0lBQ3JELENBQUM7SUFFRCxjQUFjO0lBQ04saUJBQWlCO1FBQ3JCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNqQixJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztZQUN0RixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3ZDO1NBQ0o7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNOLGVBQWUsQ0FBQyxHQUFRO1FBQzVCLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsY0FBYztJQUNOLGNBQWMsQ0FBQyxZQUFtQixFQUFFLFVBQWU7UUFDdkQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDNUIsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUU7WUFDaEMsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDbkQsT0FBTyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ2hDLElBQUksSUFBSSxFQUFFO29CQUNOLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztvQkFDdEQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUNwRjtZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ047YUFBTSxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsRUFBRTtZQUN2QyxPQUFPLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsQ0FBQztTQUM3RDtRQUNELE9BQU8sWUFBWSxJQUFJLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsY0FBYztJQUNOLG1CQUFtQixDQUFDLElBQVM7UUFDakMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNsQztRQUNELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQzdELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7WUFFNUIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNiLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2FBQzNCO1NBQ0o7UUFDRCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsY0FBYztJQUNOLGdDQUFnQyxDQUFDLFlBQW9CO1FBQ3pELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssWUFBWSxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUVELGNBQWM7SUFDTix1QkFBdUI7UUFDM0IsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUM3RTthQUFNO1lBQ0gsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQztTQUNwRDtJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ04sZ0JBQWdCO1FBQ3BCLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzFCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDckUsc0VBQXNFO1lBQ3RFLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFO2dCQUN0RixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzVCO1lBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztTQUNsQzthQUFNO1lBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDakM7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNOLFFBQVEsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzFCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1NBQ3ZCO2FBQU07WUFDSCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdkM7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNOLGdCQUFnQjtRQUNwQixNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQzdCLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUM1RCxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVM7U0FDekIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLHdCQUF3QixDQUFDLHNCQUFzQixDQUNoRCxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQzFFLHVCQUF1QixFQUN2QjtZQUNJLFlBQVksRUFBRSxJQUFJLENBQUMsaUJBQWlCO1NBQ3ZDLEVBQ0Q7WUFDSSxRQUFRO1NBQ1gsQ0FDSixDQUFDO0lBQ04sQ0FBQzs4R0E1c0JRLGlCQUFpQjtrR0FBakIsaUJBQWlCLDgyQ0ExQ2Y7WUFDUDtnQkFDSSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDO2dCQUNoRCxLQUFLLEVBQUUsSUFBSTthQUNkO1lBQ0QsdUJBQXVCLENBQUMsaUJBQWlCLENBQUM7WUFDMUMsbUJBQW1CO1lBQ25CLHVCQUF1QjtZQUN2QiwrQkFBK0IsRUFBRTtZQUNqQztnQkFDSSxPQUFPLEVBQUUscUJBQXFCO2dCQUM5QixXQUFXLEVBQUUsaUJBQWlCO2FBQ2pDO1NBQ0osNkVBbVJhLHFCQUFxQixrRUFabEIseUJBQXlCLDRFQWhCL0IsYUFBYSw4TEFRYixnQkFBZ0IsNkVBSWhCLG1CQUFtQix5UUNoWGxDLDYvT0FrTEEsZ1VEM0RRLGdCQUFnQixvSkFDaEIsZ0JBQWdCLCtKQUNoQix1QkFBdUIsbUZBQ3ZCLG9CQUFvQix1SEFDcEIsVUFBVSw0ekJBQ1YsZ0JBQWdCLHVnQkFDaEIsV0FBVywrbUJBQ1gscUJBQXFCLDJKQUNyQixlQUFlLHdIQUNmLGFBQWEseUlBQ2Isb0JBQW9CLDBCQUNwQixhQUFhLGlEQUNiLG1CQUFtQiw2Q0FDbkIsZUFBZSwrQ0FDZixhQUFhLHNEQUNiLHVCQUF1Qjs7MkZBR2xCLGlCQUFpQjtrQkE5QzdCLFNBQVM7K0JBQ0ksYUFBYSxhQUdaO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGtCQUFrQixDQUFDOzRCQUNoRCxLQUFLLEVBQUUsSUFBSTt5QkFDZDt3QkFDRCx1QkFBdUIsbUJBQW1CO3dCQUMxQyxtQkFBbUI7d0JBQ25CLHVCQUF1Qjt3QkFDdkIsK0JBQStCLEVBQUU7d0JBQ2pDOzRCQUNJLE9BQU8sRUFBRSxxQkFBcUI7NEJBQzlCLFdBQVcsbUJBQW1CO3lCQUNqQztxQkFDSixRQUNLO3dCQUNGLGtDQUFrQyxFQUFFLE1BQU07d0JBQzFDLDJCQUEyQixFQUFFLE1BQU07d0JBQ25DLDBDQUEwQyxFQUFFLFFBQVE7cUJBQ3ZELGlCQUNjLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNMLGdCQUFnQjt3QkFDaEIsZ0JBQWdCO3dCQUNoQix1QkFBdUI7d0JBQ3ZCLG9CQUFvQjt3QkFDcEIsVUFBVTt3QkFDVixnQkFBZ0I7d0JBQ2hCLFdBQVc7d0JBQ1gscUJBQXFCO3dCQUNyQixlQUFlO3dCQUNmLGFBQWE7d0JBQ2Isb0JBQW9CO3dCQUNwQixhQUFhO3dCQUNiLG1CQUFtQjt3QkFDbkIsZUFBZTt3QkFDZixhQUFhO3dCQUNiLHVCQUF1QjtxQkFDMUI7Nk9BZUQsVUFBVTtzQkFEVCxLQUFLO2dCQUtOLE9BQU87c0JBRE4sS0FBSztnQkFLTixTQUFTO3NCQURSLEtBQUs7Z0JBS04sY0FBYztzQkFEYixLQUFLO2dCQUtOLFFBQVE7c0JBRFAsS0FBSztnQkFLTixjQUFjO3NCQURiLEtBQUs7Z0JBTU4sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLFFBQVE7c0JBRFAsS0FBSztnQkFLTixXQUFXO3NCQURWLEtBQUs7Z0JBT04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLEtBQUs7c0JBREosS0FBSztnQkFLTixTQUFTO3NCQURSLEtBQUs7Z0JBT04sZUFBZTtzQkFEZCxLQUFLO2dCQVFOLFFBQVE7c0JBRFAsS0FBSztnQkFLTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBT04sbUJBQW1CO3NCQURsQixLQUFLO2dCQVFOLEtBQUs7c0JBREosS0FBSztnQkFRTixZQUFZO3NCQURYLEtBQUs7Z0JBT04sT0FBTztzQkFETixLQUFLO2dCQUtOLFNBQVM7c0JBRFIsS0FBSztnQkFLTixRQUFRO3NCQURQLEtBQUs7Z0JBS04sWUFBWTtzQkFEWCxLQUFLO2dCQUtOLGFBQWE7c0JBRFosS0FBSztnQkFLTixZQUFZO3NCQURYLEtBQUs7Z0JBS04sWUFBWTtzQkFEWCxLQUFLO2dCQVVOLGVBQWU7c0JBRGQsS0FBSztnQkFPTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBUU4sU0FBUztzQkFEUixLQUFLO2dCQVFOLGVBQWU7c0JBRGQsS0FBSztnQkFRTixvQkFBb0I7c0JBRG5CLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLE1BQU07c0JBREwsS0FBSztnQkFLTixZQUFZO3NCQURYLEtBQUs7Z0JBS04sa0JBQWtCO3NCQURqQixLQUFLO2dCQVFOLFFBQVE7c0JBRFAsS0FBSztnQkFPTixLQUFLO3NCQURKLEtBQUs7Z0JBS04sTUFBTTtzQkFETCxLQUFLO2dCQVNOLGNBQWM7c0JBRGIsS0FBSztnQkFLRyxXQUFXO3NCQURuQixNQUFNO2dCQUtFLFVBQVU7c0JBRGxCLE1BQU07Z0JBS1AsZUFBZTtzQkFEZCxNQUFNO2dCQUtQLGFBQWE7c0JBRFosU0FBUzt1QkFBQyxhQUFhO2dCQUt4QixrQkFBa0I7c0JBRGpCLFNBQVM7dUJBQUMsb0JBQW9CO2dCQUsvQixnQkFBZ0I7c0JBRGYsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBSzNCLFVBQVU7c0JBRFQsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBSzlCLFlBQVk7c0JBRFgsZUFBZTt1QkFBQyx5QkFBeUI7Z0JBSzFDLGVBQWU7c0JBRGQsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBSzVCLFlBQVk7c0JBRFgsU0FBUzt1QkFBQyxjQUFjO2dCQUtSLHFCQUFxQjtzQkFEckMsWUFBWTt1QkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEJBQ0tTUEFDRSxcbiAgICBDT05UUk9MLFxuICAgIERPV05fQVJST1csXG4gICAgRU5URVIsXG4gICAgRVNDQVBFLFxuICAgIExFRlRfQVJST1csXG4gICAgUklHSFRfQVJST1csXG4gICAgU0hJRlQsXG4gICAgU1BBQ0UsXG4gICAgVEFCLFxuICAgIFVQX0FSUk9XXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIGZvcndhcmRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gICAgQXV0b0NvbXBsZXRlRXZlbnQsXG4gICAgRHluYW1pY0NvbXBvbmVudFNlcnZpY2UsXG4gICAgRm9jdXNFc2NhcGVEaXJlY3Rpb24sXG4gICAgS2V5VXRpbCxcbiAgICBOdWxsYWJsZSxcbiAgICBUcnVuY2F0ZWRUaXRsZURpcmVjdGl2ZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBGb3JtSXRlbUNvbnRyb2wsIHJlZ2lzdGVyRm9ybUl0ZW1Db250cm9sIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Zvcm0nO1xuaW1wb3J0IHsgSW5wdXRHcm91cENvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9pbnB1dC1ncm91cCc7XG5pbXBvcnQgeyBGRF9MSVNUX01FU1NBR0VfRElSRUNUSVZFLCBMaXN0Q29tcG9uZW50LCBMaXN0TWVzc2FnZURpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9saXN0JztcbmltcG9ydCB7IE1lbnVLZXlib2FyZFNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbWVudSc7XG5pbXBvcnQgeyBNb2JpbGVNb2RlQ29uZmlnIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL21vYmlsZS1tb2RlJztcbmltcG9ydCB7IFBvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvcG9wb3Zlcic7XG5pbXBvcnQgeyBQb3BvdmVyRmlsbE1vZGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvc2hhcmVkJztcblxuaW1wb3J0IHsgT3ZlcmxheSwgUmVwb3NpdGlvblNjcm9sbFN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3JtU3RhdGVzLCBTaW5nbGVEcm9wZG93blZhbHVlQ29udHJvbCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL2Zvcm1zJztcbmltcG9ydCB7IEF1dG9Db21wbGV0ZURpcmVjdGl2ZSwgRGlzcGxheUZuUGlwZSwgU2VhcmNoSGlnaGxpZ2h0UGlwZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9idXR0b24nO1xuaW1wb3J0IHtcbiAgICBDb250ZW50RGVuc2l0eU1vZHVsZSxcbiAgICBDb250ZW50RGVuc2l0eU9ic2VydmVyLFxuICAgIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnNcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQgeyBGRF9ERUZBVUxUX0lDT05fRk9OVF9GQU1JTFksIEljb25Db21wb25lbnQsIEljb25Gb250IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2ljb24nO1xuaW1wb3J0IHsgSW5wdXRHcm91cE1vZHVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9pbnB1dC1ncm91cCc7XG5pbXBvcnQgeyBMaXN0TW9kdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2xpc3QnO1xuaW1wb3J0IHsgUG9wb3ZlckJvZHlDb21wb25lbnQsIFBvcG92ZXJDb250cm9sQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3BvcG92ZXInO1xuaW1wb3J0IHsgRmRUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcbmltcG9ydCB7IENvbWJvYm94SXRlbSB9IGZyb20gJy4vY29tYm9ib3gtaXRlbSc7XG5pbXBvcnQgeyBDb21ib2JveEl0ZW1EaXJlY3RpdmUgfSBmcm9tICcuL2NvbWJvYm94LWl0ZW0uZGlyZWN0aXZlJztcbmltcG9ydCB7IENvbWJvYm94TW9iaWxlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21ib2JveC1tb2JpbGUvY29tYm9ib3gtbW9iaWxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDT01CT0JPWF9DT01QT05FTlQsIENvbWJvYm94SW50ZXJmYWNlLCBDb21ib2JveEl0ZW1EaXJlY3RpdmVDb250ZXh0IH0gZnJvbSAnLi9jb21ib2JveC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgR3JvdXBGdW5jdGlvbiwgTGlzdEdyb3VwUGlwZSB9IGZyb20gJy4vbGlzdC1ncm91cC5waXBlJztcbmltcG9ydCB7IEZEX0NPTUJPQk9YX0NPTVBPTkVOVCB9IGZyb20gJy4vdG9rZW5zJztcblxubGV0IGNvbWJvYm94VW5pcXVlSWQgPSAwO1xuXG4vKipcbiAqIEFsbG93cyB1c2VycyB0byBmaWx0ZXIgdGhyb3VnaCByZXN1bHRzIGFuZCBzZWxlY3QgYSB2YWx1ZS5cbiAqXG4gKiBTdXBwb3J0cyBBbmd1bGFyIEZvcm1zLlxuICogYGBgaHRtbFxuICogPGZkLWNvbWJvYm94XG4gKiAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGVybVwiXG4gKiAgICAgIFtkcm9wZG93blZhbHVlc109XCJkcm9wZG93blZhbHVlc1wiXG4gKiAgICAgIHBsYWNlaG9sZGVyPVwiVHlwZSBzb21lIHRleHQuLi5cIj5cbiAqIDwvZmQtY29tYm9ib3g+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1jb21ib2JveCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbWJvYm94LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vY29tYm9ib3guY29tcG9uZW50LnNjc3MnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENvbWJvYm94Q29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHJlZ2lzdGVyRm9ybUl0ZW1Db250cm9sKENvbWJvYm94Q29tcG9uZW50KSxcbiAgICAgICAgTWVudUtleWJvYXJkU2VydmljZSxcbiAgICAgICAgRHluYW1pY0NvbXBvbmVudFNlcnZpY2UsXG4gICAgICAgIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnMoKSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRkRfQ09NQk9CT1hfQ09NUE9ORU5ULFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IENvbWJvYm94Q29tcG9uZW50XG4gICAgICAgIH1cbiAgICBdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1tjbGFzcy5mZC1jb21ib2JveC1jdXN0b20tY2xhc3NdJzogJ3RydWUnLFxuICAgICAgICAnW2NsYXNzLmZkLWNvbWJvYm94LWlucHV0XSc6ICd0cnVlJyxcbiAgICAgICAgJ1tjbGFzcy5mZC1jb21ib2JveC1jdXN0b20tY2xhc3MtLW1vYmlsZV0nOiAnbW9iaWxlJ1xuICAgIH0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgUG9wb3ZlckNvbXBvbmVudCxcbiAgICAgICAgUG9wb3ZlckNvbnRyb2xDb21wb25lbnQsXG4gICAgICAgIFBvcG92ZXJCb2R5Q29tcG9uZW50LFxuICAgICAgICBMaXN0TW9kdWxlLFxuICAgICAgICBJbnB1dEdyb3VwTW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgQXV0b0NvbXBsZXRlRGlyZWN0aXZlLFxuICAgICAgICBCdXR0b25Db21wb25lbnQsXG4gICAgICAgIEljb25Db21wb25lbnQsXG4gICAgICAgIENvbnRlbnREZW5zaXR5TW9kdWxlLFxuICAgICAgICBEaXNwbGF5Rm5QaXBlLFxuICAgICAgICBTZWFyY2hIaWdobGlnaHRQaXBlLFxuICAgICAgICBGZFRyYW5zbGF0ZVBpcGUsXG4gICAgICAgIExpc3RHcm91cFBpcGUsXG4gICAgICAgIFRydW5jYXRlZFRpdGxlRGlyZWN0aXZlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBDb21ib2JveENvbXBvbmVudDxUID0gYW55PlxuICAgIGltcGxlbWVudHNcbiAgICAgICAgQ29tYm9ib3hJbnRlcmZhY2UsXG4gICAgICAgIFNpbmdsZURyb3Bkb3duVmFsdWVDb250cm9sLFxuICAgICAgICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgICAgICAgT25Jbml0LFxuICAgICAgICBPbkNoYW5nZXMsXG4gICAgICAgIEFmdGVyVmlld0luaXQsXG4gICAgICAgIE9uRGVzdHJveSxcbiAgICAgICAgRm9ybUl0ZW1Db250cm9sXG57XG4gICAgLyoqIElkIGZvciB0aGUgQ29tYm9ib3guICovXG4gICAgQElucHV0KClcbiAgICBjb21ib2JveElkID0gYGZkLWNvbWJvYm94LSR7Y29tYm9ib3hVbmlxdWVJZCsrfWA7XG5cbiAgICAvKiogSWQgYXR0cmlidXRlIGZvciBpbnB1dCBlbGVtZW50IGluc2lkZSBDb21ib2JveCBjb21wb25lbnQgKi9cbiAgICBASW5wdXQoKVxuICAgIGlucHV0SWQgPSAnJztcblxuICAgIC8qKiBBcmlhLWxhYmVsIGZvciBDb21ib2JveC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFMYWJlbDogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBBcmlhLUxhYmVsbGVkYnkgZm9yIGVsZW1lbnQgZGVzY3JpYmluZyBDb21ib2JveC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFMYWJlbGxlZEJ5OiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqIElmIGl0IGlzIG1hbmRhdG9yeSBmaWVsZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmVxdWlyZWQgPSBmYWxzZTtcblxuICAgIC8qKiBWYWx1ZXMgdG8gYmUgZmlsdGVyZWQgaW4gdGhlIHNlYXJjaCBpbnB1dC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRyb3Bkb3duVmFsdWVzOiBUW10gPSBbXTtcblxuICAgIC8qKiBGaWx0ZXIgZnVuY3Rpb24uIEFjY2VwdHMgYW4gYXJyYXkgb2Ygb2JqZWN0cyBhbmQgYSBzZWFyY2ggdGVybSBhcyBhcmd1bWVudHNcbiAgICAgKiBhbmQgcmV0dXJucyBhIHN0cmluZy4gU2VlIHNlYXJjaCBpbnB1dCBleGFtcGxlcyBmb3IgZGV0YWlscy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGZpbHRlckZuID0gdGhpcy5fZGVmYXVsdEZpbHRlcjtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBzZWFyY2ggaW5wdXQgaXMgZGlzYWJsZWQuICoqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgICAvKiogUGxhY2Vob2xkZXIgb2YgdGhlIHNlYXJjaCBpbnB1dC4gKiovXG4gICAgQElucHV0KClcbiAgICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgQ29tYm9ib3ggaXMgYSBTZWFyY2ggRmllbGRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGlzU2VhcmNoID0gZmFsc2U7XG5cbiAgICAvKiogSWNvbiB0byBkaXNwbGF5IGluIHRoZSByaWdodC1zaWRlIGJ1dHRvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGdseXBoID0gJ25hdmlnYXRpb24tZG93bi1hcnJvdyc7XG5cbiAgICAvKiogR2x5cGggZm9udCBmYW1pbHkgKi9cbiAgICBASW5wdXQoKVxuICAgIGdseXBoRm9udDogSWNvbkZvbnQgPSBGRF9ERUZBVUxUX0lDT05fRk9OVF9GQU1JTFk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHNob3cgdGhlIGNsZWFyIHNlYXJjaCB0ZXJtIGJ1dHRvbiB3aGVuIHRoZSBDb21ib2JveCBpcyBhIFNlYXJjaCBGaWVsZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0NsZWFyQnV0dG9uID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqICBUaGUgdHJpZ2dlciBldmVudHMgdGhhdCB3aWxsIG9wZW4vY2xvc2UgdGhlIG9wdGlvbnMgcG9wb3Zlci5cbiAgICAgKiAgQWNjZXB0cyBhbnkgW0hUTUwgRE9NIEV2ZW50c10oaHR0cHM6Ly93d3cudzNzY2hvb2xzLmNvbS9qc3JlZi9kb21fb2JqX2V2ZW50LmFzcCkuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB0cmlnZ2Vyczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBjb21ib2JveCBzaG91bGQgY2xvc2UsIHdoZW4gYSBjbGljayBpcyBwZXJmb3JtZWQgb3V0c2lkZSBpdHMgYm91bmRhcmllcy4gVHJ1ZSBieSBkZWZhdWx0ICovXG4gICAgQElucHV0KClcbiAgICBjbG9zZU9uT3V0c2lkZUNsaWNrID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIGNvbWJvYm94IHNob3VsZCBvcGVuLCB3aGVuIGFueSBrZXkgaXMgcHJlc3NlZCBpbiBpbnB1dCAoZXhjZXB0IEVzY2FwZSwgU3BhY2UsIEVudGVyKS4gVHJ1ZSBieSBkZWZhdWx0XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBvcGVuT25LZXlib2FyZEV2ZW50ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqICBUaGUgc3RhdGUgb2YgdGhlIGZvcm0gY29udHJvbCAtIGFwcGxpZXMgY3NzIGNsYXNzZXMuXG4gICAgICogIENhbiBiZSBgc3VjY2Vzc2AsIGBlcnJvcmAsIGB3YXJuaW5nYCwgYGluZm9ybWF0aW9uYCBvciBibGFuayBmb3IgZGVmYXVsdC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHN0YXRlPzogRm9ybVN0YXRlcztcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZW1wbGF0ZSB3aXRoIHdoaWNoIHRvIGRpc3BsYXkgdGhlIGluZGl2aWR1YWwgbGlzdGVkIGl0ZW1zLlxuICAgICAqIFVzZSBpdCBieSBwYXNzaW5nIGFuIG5nLXRlbXBsYXRlIHdpdGggaW1wbGljaXQgY29udGVudC4gU2VlIGV4YW1wbGVzIGZvciBtb3JlIGluZm8uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPENvbWJvYm94SXRlbURpcmVjdGl2ZUNvbnRleHQ8VD4+O1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdXNlZCB0byBoYW5kbGUgZ3JvdXBpbmcgb2YgaXRlbXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBncm91cEZuOiBOdWxsYWJsZTxHcm91cEZ1bmN0aW9uPjtcblxuICAgIC8qKiBNYXggaGVpZ2h0IG9mIHRoZSBwb3BvdmVyLiBBbnkgb3ZlcmZsb3dpbmcgZWxlbWVudHMgd2lsbCBiZSBhY2Nlc3NpYmxlIHRocm91Z2ggc2Nyb2xsaW5nLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWF4SGVpZ2h0ID0gJzUwdmgnO1xuXG4gICAgLyoqIFNlYXJjaCBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIEVudGVyIGtleSBpcyBwcmVzc2VkIG9uIHRoZSBtYWluIGlucHV0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VhcmNoRm46ICgpID0+IHZvaWQ7XG5cbiAgICAvKiogV2hldGhlciB0aGUgbWF0Y2hpbmcgc3RyaW5nIHNob3VsZCBiZSBoaWdobGlnaHRlZCBkdXJpbmcgZmlsdHJhdGlvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGhpZ2hsaWdodGluZyA9IHRydWU7XG5cbiAgICAvKiogV2hldGhlciB0aGUgcG9wb3ZlciBzaG91bGQgY2xvc2Ugd2hlbiBhIHVzZXIgc2VsZWN0cyBhIHJlc3VsdC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGNsb3NlT25TZWxlY3QgPSB0cnVlO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGlucHV0IGZpZWxkIHNob3VsZCBiZSBwb3B1bGF0ZWQgd2l0aCB0aGUgcmVzdWx0IHBpY2tlZCBieSB0aGUgdXNlci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGZpbGxPblNlbGVjdCA9IHRydWU7XG5cbiAgICAvKiogV2hldGhlciB0aGUgYXV0b2NvbXBsZXRlIHNob3VsZCBiZSBlbmFibGVkOyBFbmFibGVkIGJ5IGRlZmF1bHQgKi9cbiAgICBASW5wdXQoKVxuICAgIGF1dG9Db21wbGV0ZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBQcmVzZXQgb3B0aW9ucyBmb3IgdGhlIFNlbGVjdCBib2R5IHdpZHRoLCB3aGF0ZXZlciBpcyBjaG9zZW4sIHRoZSBib2R5IGhhcyBhIDYwMHB4IGxpbWl0LlxuICAgICAqICogYGF0LWxlYXN0YCB3aWxsIGFwcGx5IGEgbWluaW11bSB3aWR0aCB0byB0aGUgYm9keSBlcXVpdmFsZW50IHRvIHRoZSB3aWR0aCBvZiB0aGUgY29udHJvbC4gLSBEZWZhdWx0XG4gICAgICogKiBgZXF1YWxgIHdpbGwgYXBwbHkgYSB3aWR0aCB0byB0aGUgYm9keSBlcXVpdmFsZW50IHRvIHRoZSB3aWR0aCBvZiB0aGUgY29udHJvbC5cbiAgICAgKiAqICdmaXQtY29udGVudCcgd2lsbCBhcHBseSB3aWR0aCBuZWVkZWQgdG8gcHJvcGVybHkgZGlzcGxheSBpdGVtcyBpbnNpZGUsIGluZGVwZW5kZW50IG9mIGNvbnRyb2wuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBmaWxsQ29udHJvbE1vZGU6IFBvcG92ZXJGaWxsTW9kZSA9ICdhdC1sZWFzdCc7XG5cbiAgICAvKiogRGVmaW5lcyBpZiBjb21ib2JveCBzaG91bGQgYmVoYXZlIHNhbWUgYXMgZHJvcGRvd24uIFdoZW4gaXQncyBlbmFibGVkIHdyaXRpbmcgaW5zaWRlIHRleHQgaW5wdXQgd29uJ3RcbiAgICAgKiB0cmlnZ2VyIG9uQ2hhbmdlIGZ1bmN0aW9uLCB1bnRpbCBpdCBtYXRjaGVzIG9uZSBvZiBkaXNwbGF5ZWQgZHJvcGRvd24gdmFsdWVzLiBBbHNvIGNvbW11bmljYXRpbmcgd2l0aCBjb21ib2JveFxuICAgICAqIGNhbiBiZSBhY2hpZXZlZCBvbmx5IGJ5IG9iamVjdHMgd2l0aCBzYW1lIHR5cGUgYXMgZHJvcGRvd25WYWx1ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgY29tbXVuaWNhdGVCeU9iamVjdCA9IGZhbHNlO1xuXG4gICAgLyoqIERpc3BsYXkgZnVuY3Rpb24uIEFjY2VwdHMgYW4gb2JqZWN0IG9mIHRoZSBzYW1lIHR5cGUgYXMgdGhlXG4gICAgICogaXRlbXMgcGFzc2VkIHRvIGRyb3Bkb3duVmFsdWVzIGFzIGFyZ3VtZW50LCBhbmQgb3V0cHV0cyBhIHN0cmluZy5cbiAgICAgKiBBbiBhcnJvdyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBhY2Nlc3MgdGhlICp0aGlzKiBrZXl3b3JkIGluIHRoZSBjYWxsaW5nIGNvbXBvbmVudC5cbiAgICAgKiBTZWUgc2VhcmNoIGlucHV0IGV4YW1wbGVzIGZvciBkZXRhaWxzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzcGxheUZuID0gdGhpcy5fZGVmYXVsdERpc3BsYXk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIEFkZE9uIEJ1dHRvbiBzaG91bGQgYmUgZm9jdXNhYmxlXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGJ1dHRvbkZvY3VzYWJsZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBjbGVhciBidXR0b24gc2hvdWxkIGJlIGZvY3VzYWJsZS5cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBjbGVhckJ1dHRvbkZvY3VzYWJsZSA9IHRydWU7XG5cbiAgICAvKiogV2hldGhlciB0aGUgY29tYm9ib3ggaXMgcmVhZG9ubHkuICovXG4gICAgQElucHV0KClcbiAgICByZWFkT25seSA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGNvbWJvYm94IHNob3VsZCBiZSBidWlsdCBvbiBtb2JpbGUgbW9kZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9iaWxlID0gZmFsc2U7XG5cbiAgICAvKiogTXVsdGkgSW5wdXQgTW9iaWxlIENvbmZpZ3VyYXRpb24sIGl0J3MgYXBwbGllZCBvbmx5LCB3aGVuIG1vYmlsZSBpcyBlbmFibGVkICovXG4gICAgQElucHV0KClcbiAgICBtb2JpbGVDb25maWc6IE1vYmlsZU1vZGVDb25maWc7XG5cbiAgICAvKiogV2hldGhlciB0byBkaXNwbGF5IHRoZSBhZGRvbiBidXR0b24uICovXG4gICAgQElucHV0KClcbiAgICBzaG93RHJvcGRvd25CdXR0b24gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byByZXR1cm4gcmVzdWx0cyB3aGVyZSB0aGUgaW5wdXQgbWF0Y2hlcyB0aGUgZW50aXJlIHN0cmluZy4gQnkgZGVmYXVsdCwgb25seSByZXN1bHRzIHRoYXQgc3RhcnRcbiAgICAgKiB3aXRoIHRoZSBpbnB1dCBzZWFyY2ggdGVybSB3aWxsIGJlIHJldHVybmVkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW5jbHVkZXMgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0b29sdGlwIGZvciB0aGUgbXVsdGktaW5wdXQgaWNvbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHRpdGxlOiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciBsaXN0IGl0ZW0gb3B0aW9ucyBzaG91bGQgYmUgcmVuZGVyZWQgYXMgYnlsaW5lLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYnlsaW5lID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBBY3Rpb24gdG8gcGVyZm9ybSB3aGVuIHVzZXIgc2hpZnRzIGZvY3VzIGZyb20gdGhlIGRyb3Bkb3duLlxuICAgICAqIC0gYGNsb3NlYCB3aWxsIGNsb3NlIHRoZSBkcm9wZG93biBwcmVzZXJ2aW5nIHByZXZpb3VzbHkgc2VsZWN0ZWQgdmFsdWUuXG4gICAgICogLSBgY2xvc2VBbmRTZWxlY3RgIHdpbGwgY2xvc2UgdGhlIGRyb3Bkb3duIGFuZCBzZWxlY3QgbGFzdCBmb2N1c2VkIGRyb3Bkb3duIGl0ZW0uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB0YWJPdXRTdHJhdGVneTogJ2Nsb3NlJyB8ICdjbG9zZUFuZFNlbGVjdCcgPSAnY2xvc2VBbmRTZWxlY3QnO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBhbiBpdGVtIGlzIGNsaWNrZWQuIFVzZSAqJGV2ZW50KiB0byByZXRyaWV2ZSBpdC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBpdGVtQ2xpY2tlZDogRXZlbnRFbWl0dGVyPENvbWJvYm94SXRlbT4gPSBuZXcgRXZlbnRFbWl0dGVyPENvbWJvYm94SXRlbT4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkLCB3aGVuIHRoZSBjb21ib2JveCdzIHBvcG92ZXIgYm9keSBpcyBvcGVuZWQgb3IgY2xvc2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgb3BlbkNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgaW5wdXQgdGV4dCBjaGFuZ2VzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGlucHV0VGV4dENoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChMaXN0Q29tcG9uZW50KVxuICAgIGxpc3RDb21wb25lbnQ6IExpc3RDb21wb25lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3NlYXJjaElucHV0RWxlbWVudCcpXG4gICAgc2VhcmNoSW5wdXRFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKFBvcG92ZXJDb21wb25lbnQpXG4gICAgcG9wb3ZlckNvbXBvbmVudDogUG9wb3ZlckNvbXBvbmVudDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChJbnB1dEdyb3VwQ29tcG9uZW50KVxuICAgIGlucHV0R3JvdXA6IElucHV0R3JvdXBDb21wb25lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oRkRfTElTVF9NRVNTQUdFX0RJUkVDVElWRSlcbiAgICBsaXN0TWVzc2FnZXM6IFF1ZXJ5TGlzdDxMaXN0TWVzc2FnZURpcmVjdGl2ZT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2NvbnRyb2xUZW1wbGF0ZScpXG4gICAgY29udHJvbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxIVE1MRWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2xpc3RUZW1wbGF0ZScpXG4gICAgbGlzdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxIVE1MRWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGQoQ29tYm9ib3hJdGVtRGlyZWN0aXZlKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbWJvYm94SXRlbVJlbmRlcmVyOiBDb21ib2JveEl0ZW1EaXJlY3RpdmU7XG5cbiAgICAvKiogV2hldGhlciB0aGUgbWF0Y2hpbmcgc3RyaW5nIHNob3VsZCBiZSBoaWdobGlnaHRlZCBhZnRlciBjb21ib2JveCB2YWx1ZSBpcyBzZWxlY3RlZC4gKi9cbiAgICBmaWx0ZXJIaWdobGlnaHQgPSB0cnVlO1xuXG4gICAgLyoqIEtleXMsIHRoYXQgd29uJ3QgdHJpZ2dlciB0aGUgcG9wb3ZlcidzIG9wZW4gc3RhdGUsIHdoZW4gZGlzcGF0Y2hlZCBvbiBzZWFyY2ggaW5wdXQgKi9cbiAgICByZWFkb25seSBub25PcGVuaW5nS2V5czogbnVtYmVyW10gPSBbXG4gICAgICAgIEVTQ0FQRSxcbiAgICAgICAgRU5URVIsXG4gICAgICAgIExFRlRfQVJST1csXG4gICAgICAgIFJJR0hUX0FSUk9XLFxuICAgICAgICBET1dOX0FSUk9XLFxuICAgICAgICBVUF9BUlJPVyxcbiAgICAgICAgQ09OVFJPTCxcbiAgICAgICAgVEFCLFxuICAgICAgICBTSElGVFxuICAgIF07XG5cbiAgICAvKiogS2V5cywgdGhhdCB3aWxsIGNsb3NlIHBvcG92ZXIncyBib2R5LCB3aGVuIGRpc3BhdGNoZWQgb24gc2VhcmNoIGlucHV0ICovXG4gICAgcmVhZG9ubHkgY2xvc2luZ0tleXM6IG51bWJlcltdID0gW0VTQ0FQRV07XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF9yZXBvc2l0aW9uU2Nyb2xsU3RyYXRlZ3k6IFJlcG9zaXRpb25TY3JvbGxTdHJhdGVneTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX2RlZmF1bHRGb250RmFtaWx5ID0gRkRfREVGQVVMVF9JQ09OX0ZPTlRfRkFNSUxZO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGNvbWJvYm94IGlzIG9wZW5lZC4gKi9cbiAgICBvcGVuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgaW5wdXQgY291cCBpcyBpbiB0aGUgc2hlbGxiYXIuIE9ubHkgZm9yIGludGVybmFsIHVzZSBieSBjb21ib2JveCBjb21wb25lbnRcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaW5TaGVsbGJhciA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBkaXNwbGF5ZWRWYWx1ZXM6IGFueVtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGlucHV0VGV4dFZhbHVlID0gJyc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNsZWFySW5wdXRCdG5Gb2N1c2VkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfY3VzdG9tUmVuZGVyZXIoKTogTnVsbGFibGU8VGVtcGxhdGVSZWY8Q29tYm9ib3hJdGVtRGlyZWN0aXZlQ29udGV4dDxUPj4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbWJvYm94SXRlbVJlbmRlcmVyPy50ZW1wbGF0ZVJlZiB8fCB0aGlzLml0ZW1UZW1wbGF0ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ZhbHVlOiBhbnk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9vdmVybGF5OiBPdmVybGF5LFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9jZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfZHluYW1pY0NvbXBvbmVudFNlcnZpY2U6IER5bmFtaWNDb21wb25lbnRTZXJ2aWNlLFxuICAgICAgICByZWFkb25seSBfY29udGVudERlbnNpdHlPYnNlcnZlcjogQ29udGVudERlbnNpdHlPYnNlcnZlclxuICAgICkge1xuICAgICAgICB0aGlzLl9yZXBvc2l0aW9uU2Nyb2xsU3RyYXRlZ3kgPSB0aGlzLl9vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbih7IGF1dG9DbG9zZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvblRvdWNoZWQgPSAoKTogdm9pZCA9PiB7fTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICAgICAgICB0aGlzLnNob3dEcm9wZG93bkJ1dHRvbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3JlZnJlc2hEaXNwbGF5ZWRWYWx1ZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZHJvcGRvd25WYWx1ZXMgJiYgKGNoYW5nZXMuZHJvcGRvd25WYWx1ZXMgfHwgY2hhbmdlcy5zZWFyY2hUZXJtKSkge1xuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaERpc3BsYXllZFZhbHVlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hZGRTaGVsbGJhckNsYXNzKCk7XG5cbiAgICAgICAgaWYgKHRoaXMubW9iaWxlKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRVcE1vYmlsZU1vZGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25JbnB1dEtleWRvd25IYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50IHwgc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGV2ZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKGV2ZW50ID09PSAnZnJvbVBhc3RlJykge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlSGFuZGxlKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBUQUIpICYmIHRoaXMub3Blbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Nsb3NlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIEVOVEVSKSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaEZuKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoRm4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBET1dOX0FSUk9XKSkge1xuICAgICAgICAgICAgICAgIGlmIChldmVudC5hbHRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVzZXREaXNwbGF5ZWRWYWx1ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2VIYW5kbGUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wZW4gJiYgdGhpcy5saXN0Q29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdENvbXBvbmVudC5zZXRJdGVtQWN0aXZlKDApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3Blbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaG9vc2VPdGhlckl0ZW0oMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBVUF9BUlJPVykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaG9vc2VPdGhlckl0ZW0oLTEpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCB0aGlzLmNsb3NpbmdLZXlzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlSGFuZGxlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuT25LZXlib2FyZEV2ZW50ICYmXG4gICAgICAgICAgICAgICAgIWV2ZW50LmN0cmxLZXkgJiZcbiAgICAgICAgICAgICAgICAhZXZlbnQuYWx0S2V5ICYmXG4gICAgICAgICAgICAgICAgIUtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCB0aGlzLm5vbk9wZW5pbmdLZXlzKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2VIYW5kbGUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNFbXB0eVZhbHVlICYmIEtleVV0aWwuaXNLZXlUeXBlKGV2ZW50LCAnY29udHJvbCcpICYmICFLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgQkFDS1NQQUNFKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3RDb21wb25lbnQuc2V0SXRlbUFjdGl2ZSgwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uSXRlbUtleURvd25IYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50LCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRU5URVIpIHx8IEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBTUEFDRSkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLm9uTWVudUNsaWNrSGFuZGxlcih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uTWVudUNsaWNrSGFuZGxlcih2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICh2YWx1ZSB8fCB2YWx1ZSA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXg6IG51bWJlciA9IHRoaXMuZHJvcGRvd25WYWx1ZXMuZmluZEluZGV4KChfdmFsdWUpID0+IF92YWx1ZSA9PT0gdmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlQ2xpY2tBY3Rpb25zKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVySGlnaGxpZ2h0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLml0ZW1DbGlja2VkLmVtaXQoeyBpdGVtOiB2YWx1ZSwgaW5kZXggfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogSGFuZGxlIGRpYWxvZyBkaXNtaXNzaW5nLCBjbG9zZXMgcG9wb3ZlciBhbmQgc2V0cyBiYWNrdXAgZGF0YS4gKi9cbiAgICBkaWFsb2dEaXNtaXNzKHRlcm06IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLmlucHV0VGV4dCA9IHRoaXMuZGlzcGxheUZuKHRlcm0pO1xuICAgICAgICB0aGlzLnNldFZhbHVlKHRlcm0pO1xuICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZUhhbmRsZShmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqIEhhbmRsZSBkaWFsb2cgYXBwcm92YWwsIGNsb3NlcyBwb3BvdmVyIGFuZCBwcm9wYWdhdGVzIGRhdGEgY2hhbmdlcy4gKi9cbiAgICBkaWFsb2dBcHByb3ZlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wcm9wYWdhdGVDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2VIYW5kbGUoZmFsc2UpO1xuICAgIH1cblxuICAgIC8qKiBJZiB0cnVlIHZhbHVlIGVtcHR5ICovXG4gICAgZ2V0IGlzRW1wdHlWYWx1ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmlucHV0VGV4dCB8fCB0aGlzLmlucHV0VGV4dD8udHJpbSgpLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICAvKiogSW5wdXQgdGV4dCBvZiB0aGUgaW5wdXQuICovXG4gICAgc2V0IGlucHV0VGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuaW5wdXRUZXh0VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5pbnB1dFRleHRDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgICAgIGlmICghdGhpcy5tb2JpbGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb3BhZ2F0ZUNoYW5nZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBpbnB1dFRleHQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRUZXh0VmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEdldCB0aGUgZ2x5cGggdmFsdWUgYmFzZWQgb24gd2hldGhlciB0aGUgY29tYm9ib3ggaXMgdXNlZCBhcyBhIHNlYXJjaCBmaWVsZCBvciBub3QuICovXG4gICAgZ2V0IGdseXBoVmFsdWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTZWFyY2ggPyAnc2VhcmNoJyA6IHRoaXMuZ2x5cGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaGFuZGxlQ2xlYXJTZWFyY2hUZXJtKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlucHV0VGV4dFZhbHVlID0gJyc7XG4gICAgICAgIHRoaXMuaW5wdXRUZXh0Q2hhbmdlLmVtaXQoJycpO1xuICAgICAgICB0aGlzLmRpc3BsYXllZFZhbHVlcyA9IHRoaXMuZHJvcGRvd25WYWx1ZXMgfHwgW107XG4gICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgaWYgKCF0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5fcHJvcGFnYXRlQ2hhbmdlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5wdXRUZXh0VmFsdWUgPSB0aGlzLmRpc3BsYXlGbih2YWx1ZSk7XG4gICAgICAgIHRoaXMuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCBwYXNzZWQgdG8gbGlzdCBjb21wb25lbnQgKi9cbiAgICBoYW5kbGVMaXN0Rm9jdXNFc2NhcGUoZGlyZWN0aW9uOiBGb2N1c0VzY2FwZURpcmVjdGlvbik6IHZvaWQge1xuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAndXAnKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhhbmRsZVNlYXJjaFRlcm1DaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzcGxheWVkVmFsdWVzID0gdGhpcy5maWx0ZXJGbih0aGlzLmRyb3Bkb3duVmFsdWVzLCB0aGlzLmlucHV0VGV4dCk7XG4gICAgICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudD8ucmVmcmVzaFBvc2l0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvblByaW1hcnlCdXR0b25DbGljaygpOiB2b2lkIHtcbiAgICAgICAgLy8gUHJldmVudCBwcmltYXJ5IGJ1dHRvbiBjbGljayBiZWhhdmlvdXIgb24gbW9iaWxlc1xuICAgICAgICBpZiAodGhpcy5tb2JpbGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlYXJjaEZuKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaEZuKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmVzZXREaXNwbGF5ZWRWYWx1ZXMoKTtcbiAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2VIYW5kbGUoIXRoaXMub3Blbik7XG4gICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJIaWdobGlnaHQgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMub3Blbikge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaXNPcGVuQ2hhbmdlSGFuZGxlKGlzT3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICAvKiogUmVzZXQgZGlzcGxheWVkIHZhbHVlcyBvbiBldmVyeSBtb2JpbGUgb3BlbiAqL1xuICAgICAgICBpZiAodGhpcy5tb2JpbGUgJiYgIXRoaXMub3Blbikge1xuICAgICAgICAgICAgdGhpcy5fcmVzZXREaXNwbGF5ZWRWYWx1ZXMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcGVuICE9PSBpc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMub3BlbiA9IGlzT3BlbjtcbiAgICAgICAgICAgIHRoaXMub3BlbkNoYW5nZS5lbWl0KGlzT3Blbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMub3BlbiAmJiAhdGhpcy5tb2JpbGUpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQmx1cigpO1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgaGFuZGxlcyBjb21wbGV0ZSBldmVudCBmcm9tIGF1dG8gY29tcGxldGUgZGlyZWN0aXZlLCBzZXR0aW5nIHRoZSBuZXcgdmFsdWUsIGFuZCBjbG9zaW5nIHBvcG92ZXIgKi9cbiAgICBoYW5kbGVBdXRvQ29tcGxldGUoZXZlbnQ6IEF1dG9Db21wbGV0ZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0VGV4dCAhPT0gZXZlbnQudGVybSkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dFRleHQgPSBldmVudC50ZXJtO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVTZWFyY2hUZXJtQ2hhbmdlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmZvcmNlQ2xvc2UgJiYgdGhpcy5pbnB1dFRleHQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlSGFuZGxlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFuZGxlQmx1cigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLm9wZW4pIHtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUF1dG9Db21wbGV0ZSh7XG4gICAgICAgICAgICAgICAgdGVybTogdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSxcbiAgICAgICAgICAgICAgICBmb3JjZUNsb3NlOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNsZWFySW5wdXRCdG5Gb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhcklucHV0QnRuRm9jdXNlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjbGVhcklucHV0QnRuQmx1cigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhcklucHV0QnRuRm9jdXNlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBDdXJyZW50IHNlbGVjdCB2YWx1ZSAqL1xuICAgIGdldFZhbHVlKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jbG9zZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbnB1dFRleHQgPSB0aGlzLl92YWx1ZSA/IHRoaXMuaW5wdXRUZXh0IDogJyc7XG4gICAgICAgIGlmICh0aGlzLnRhYk91dFN0cmF0ZWd5ID09PSAnY2xvc2VBbmRTZWxlY3QnKSB7XG4gICAgICAgICAgICBjb25zdCBmb2N1c2VkSXRlbSA9IHRoaXMubGlzdENvbXBvbmVudC5nZXRBY3RpdmVJdGVtKCk7XG4gICAgICAgICAgICBpZiAoZm9jdXNlZEl0ZW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVDbGlja0FjdGlvbnMoZm9jdXNlZEl0ZW0udmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZUhhbmRsZShmYWxzZSk7XG4gICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGlzU2VsZWN0ZWQodGVybTogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHRlcm1WYWx1ZSA9IHRoaXMuY29tbXVuaWNhdGVCeU9iamVjdCA/IHRlcm0gOiB0aGlzLmRpc3BsYXlGbih0ZXJtKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoKSA9PT0gdGVybVZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdGhhdCBwaWNrcyBvdGhlciB2YWx1ZSBtb3ZlZCBmcm9tIGN1cnJlbnQgb25lIGJ5IG9mZnNldCwgY2FsbGVkIG9ubHkgd2hlbiBjb21ib2JveCBpcyBjbG9zZWQgKi9cbiAgICBwcml2YXRlIF9jaG9vc2VPdGhlckl0ZW0ob2Zmc2V0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYWN0aXZlVmFsdWU6IGFueSA9IHRoaXMuX2dldE9wdGlvbk9iamVjdEJ5RGlzcGxheWVkVmFsdWUodGhpcy5pbnB1dFRleHRWYWx1ZSlbMF07XG4gICAgICAgIGNvbnN0IGluZGV4OiBudW1iZXIgPSB0aGlzLmRyb3Bkb3duVmFsdWVzLmZpbmRJbmRleCgodmFsdWUpID0+IHZhbHVlID09PSBhY3RpdmVWYWx1ZSk7XG4gICAgICAgIGlmICh0aGlzLmRyb3Bkb3duVmFsdWVzW2luZGV4ICsgb2Zmc2V0XSkge1xuICAgICAgICAgICAgdGhpcy5vbk1lbnVDbGlja0hhbmRsZXIodGhpcy5kcm9wZG93blZhbHVlc1tpbmRleCArIG9mZnNldF0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0aGF0IHJlc2V0IGZpbHRlcmluZyBmb3IgZGlzcGxheWVkIHZhbHVlcy4gSXQgb3ZlcnJpZGVzIGRpc3BsYXllZCB2YWx1ZXMgYnkgYWxsIHBvc3NpYmxlIGRyb3Bkb3duIHZhbHVlcyAqL1xuICAgIHByaXZhdGUgX3Jlc2V0RGlzcGxheWVkVmFsdWVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc3BsYXllZFZhbHVlcyA9IHRoaXMuZHJvcGRvd25WYWx1ZXMgfHwgW107XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9hZGRTaGVsbGJhckNsYXNzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pblNoZWxsYmFyKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2ZkLXNoZWxsYmFyX19pbnB1dC1ncm91cC1pbnB1dCcpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXRHcm91cCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRHcm91cC5zZXRJblNoZWxsYmFyKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kZWZhdWx0RGlzcGxheShzdHI6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHtzdHJ9YDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RlZmF1bHRGaWx0ZXIoY29udGVudEFycmF5OiBhbnlbXSwgc2VhcmNoVGVybTogYW55KTogYW55W10ge1xuICAgICAgICB0aGlzLmZpbHRlckhpZ2hsaWdodCA9IHRydWU7XG4gICAgICAgIGlmICh0eXBlb2Ygc2VhcmNoVGVybSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlYXJjaExvd2VyID0gc2VhcmNoVGVybS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRBcnJheS5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXJtID0gdGhpcy5kaXNwbGF5Rm4oaXRlbSkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5jbHVkZXMgPyB0ZXJtLmluY2x1ZGVzKHNlYXJjaExvd2VyKSA6IHRlcm0uc3RhcnRzV2l0aChzZWFyY2hMb3dlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHNlYXJjaFRlcm0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGVudEFycmF5LmZpbHRlcigoaXRlbSkgPT4gaXRlbSA9PT0gc2VhcmNoVGVybSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRlbnRBcnJheSB8fCBbXTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2hhbmRsZUNsaWNrQWN0aW9ucyh0ZXJtOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VPblNlbGVjdCkge1xuICAgICAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2VIYW5kbGUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpbGxPblNlbGVjdCkge1xuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSh0ZXJtKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRUZXh0ID0gdGhpcy5kaXNwbGF5Rm4odGVybSk7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5pbnB1dFRleHQ7XG4gICAgICAgICAgICB0aGlzLl9jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Byb3BhZ2F0ZUNoYW5nZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGFuZGxlU2VhcmNoVGVybUNoYW5nZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0T3B0aW9uT2JqZWN0QnlEaXNwbGF5ZWRWYWx1ZShkaXNwbGF5VmFsdWU6IHN0cmluZyk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRyb3Bkb3duVmFsdWVzLmZpbHRlcigodmFsdWUpID0+IHRoaXMuZGlzcGxheUZuKHZhbHVlKSA9PT0gZGlzcGxheVZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3JlZnJlc2hEaXNwbGF5ZWRWYWx1ZXMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0VGV4dCkge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWRWYWx1ZXMgPSB0aGlzLmZpbHRlckZuKHRoaXMuZHJvcGRvd25WYWx1ZXMsIHRoaXMuaW5wdXRUZXh0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkVmFsdWVzID0gdGhpcy5kcm9wZG93blZhbHVlcyB8fCBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcHJvcGFnYXRlQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jb21tdW5pY2F0ZUJ5T2JqZWN0KSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLl9nZXRPcHRpb25PYmplY3RCeURpc3BsYXllZFZhbHVlKHRoaXMuaW5wdXRUZXh0KTtcbiAgICAgICAgICAgIC8vIERvIG5vdCBzZXQgbmV3IHZhbHVlIGlmIHRoZXJlcyBtdWx0aXBsZSBpdGVtcyB0aGF0IGhhdmUgc2FtZSBsYWJlbC5cbiAgICAgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSAxICYmIHRoaXMuZGlzcGxheUZuKHZhbHVlc1swXSkgIT09IHRoaXMuZGlzcGxheUZuKHRoaXMuZ2V0VmFsdWUoKSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKHZhbHVlc1swXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuZ2V0VmFsdWUoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuaW5wdXRUZXh0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBzZXRWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNvbW11bmljYXRlQnlPYmplY3QpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuZGlzcGxheUZuKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0VXBNb2JpbGVNb2RlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICAgICAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IENPTUJPQk9YX0NPTVBPTkVOVCwgdXNlVmFsdWU6IHRoaXMgfV0sXG4gICAgICAgICAgICBwYXJlbnQ6IHRoaXMuX2luamVjdG9yXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2R5bmFtaWNDb21wb25lbnRTZXJ2aWNlLmNyZWF0ZUR5bmFtaWNDb21wb25lbnQoXG4gICAgICAgICAgICB7IGxpc3RUZW1wbGF0ZTogdGhpcy5saXN0VGVtcGxhdGUsIGNvbnRyb2xUZW1wbGF0ZTogdGhpcy5jb250cm9sVGVtcGxhdGUgfSxcbiAgICAgICAgICAgIENvbWJvYm94TW9iaWxlQ29tcG9uZW50LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lclJlZjogdGhpcy5fdmlld0NvbnRhaW5lclJlZlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpbmplY3RvclxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJtb2JpbGUgPyBtb2JpbGVUZW1wbGF0ZSA6IGRlc2t0b3BUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2Rlc2t0b3BUZW1wbGF0ZT5cbiAgICA8ZmQtcG9wb3ZlclxuICAgICAgICBhZGRpdGlvbmFsQm9keUNsYXNzPVwiZmQtcG9wb3Zlci1jdXN0b20tbGlzdFwiXG4gICAgICAgIFtjbGFzcy5mZC1jb21ib2JveC1mdWxsLXdpZHRoXT1cImlzU2VhcmNoXCJcbiAgICAgICAgW2lzT3Blbl09XCJvcGVuICYmIGRpc3BsYXllZFZhbHVlcyAmJiBkaXNwbGF5ZWRWYWx1ZXMubGVuZ3RoID4gMFwiXG4gICAgICAgIChpc09wZW5DaGFuZ2UpPVwiaXNPcGVuQ2hhbmdlSGFuZGxlKCRldmVudClcIlxuICAgICAgICBbZmlsbENvbnRyb2xNb2RlXT1cImZpbGxDb250cm9sTW9kZVwiXG4gICAgICAgIFtzY3JvbGxTdHJhdGVneV09XCJfcmVwb3NpdGlvblNjcm9sbFN0cmF0ZWd5XCJcbiAgICAgICAgW2ZvY3VzVHJhcHBlZF09XCJ0cnVlXCJcbiAgICAgICAgW3RyaWdnZXJzXT1cInRyaWdnZXJzXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHJlYWRPbmx5XCJcbiAgICAgICAgW21heFdpZHRoXT1cIjY0MFwiXG4gICAgICAgIFtjbG9zZU9uT3V0c2lkZUNsaWNrXT1cImNsb3NlT25PdXRzaWRlQ2xpY2tcIlxuICAgID5cbiAgICAgICAgPGZkLXBvcG92ZXItY29udHJvbD5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250cm9sVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2ZkLXBvcG92ZXItY29udHJvbD5cbiAgICAgICAgPGZkLXBvcG92ZXItYm9keSBbaGlkZGVuXT1cIiFkaXNwbGF5ZWRWYWx1ZXMubGVuZ3RoXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibGlzdFRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgPC9mZC1wb3BvdmVyLWJvZHk+XG4gICAgPC9mZC1wb3BvdmVyPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSBsZXQtdGVybT1cInRlcm1cIiAjaXRlbVNvdXJjZT5cbiAgICBAaWYgKCFfY3VzdG9tUmVuZGVyZXIpIHtcbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGZkLWxpc3QtdGl0bGVcbiAgICAgICAgICAgIGZkVHJ1bmNhdGVkVGl0bGVcbiAgICAgICAgICAgIFtpbm5lckhUTUxdPVwidGVybSB8IGRpc3BsYXlGblBpcGU6IGRpc3BsYXlGbiB8IGhpZ2hsaWdodDogaW5wdXRUZXh0IDogaGlnaGxpZ2h0aW5nICYmIGZpbHRlckhpZ2hsaWdodFwiXG4gICAgICAgID5cbiAgICAgICAgPC9zcGFuPlxuICAgIH0gQGVsc2Uge1xuICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9jdXN0b21SZW5kZXJlclwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHRlcm0sIGlucHV0VGV4dDogaW5wdXRUZXh0IH1cIlxuICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNtb2JpbGVUZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udHJvbFRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2NvbnRyb2xUZW1wbGF0ZT5cbiAgICA8ZmQtaW5wdXQtZ3JvdXBcbiAgICAgICAgW2J1dHRvbl09XCJzaG93RHJvcGRvd25CdXR0b25cIlxuICAgICAgICBbZ2x5cGhdPVwic2hvd0Ryb3Bkb3duQnV0dG9uID8gZ2x5cGhWYWx1ZSA6IG51bGxcIlxuICAgICAgICBbZ2x5cGhGb250XT1cImlzU2VhcmNoID8gX2RlZmF1bHRGb250RmFtaWx5IDogZ2x5cGhGb250XCJcbiAgICAgICAgW3N0YXRlXT1cInN0YXRlXCJcbiAgICAgICAgW2J1dHRvbkZvY3VzYWJsZV09XCJidXR0b25Gb2N1c2FibGVcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbcmVhZG9ubHldPVwicmVhZE9ubHlcIlxuICAgICAgICBbaXNDb250cm9sXT1cInRydWVcIlxuICAgICAgICBbaXNFeHBhbmRlZF09XCIhbW9iaWxlICYmIG9wZW4gJiYgZGlzcGxheWVkVmFsdWVzLmxlbmd0aCA+IDBcIlxuICAgICAgICBbc2hvd0ZvY3VzXT1cIiFjbGVhcklucHV0QnRuRm9jdXNlZFwiXG4gICAgICAgIFtnbHlwaEFyaWFMYWJlbF09XCJhcmlhTGFiZWwgfHwgKCdwbGF0Zm9ybU11bHRpQ29tYm9ib3guaW5wdXRHbHlwaEFyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZSlcIlxuICAgICAgICBbaWNvblRpdGxlXT1cInRpdGxlIHx8ICgncGxhdGZvcm1NdWx0aUNvbWJvYm94LmlucHV0R2x5cGhBcmlhTGFiZWwnIHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgKGFkZE9uQnV0dG9uQ2xpY2tlZCk9XCJvblByaW1hcnlCdXR0b25DbGljaygpXCJcbiAgICAgICAgKGNsaWNrKT1cIm1vYmlsZSAmJiBpc09wZW5DaGFuZ2VIYW5kbGUodHJ1ZSlcIlxuICAgID5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAjc2VhcmNoSW5wdXRFbGVtZW50XG4gICAgICAgICAgICBmZGtBdXRvQ29tcGxldGVcbiAgICAgICAgICAgIGZkLWlucHV0LWdyb3VwLWlucHV0XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICByb2xlPVwiY29tYm9ib3hcIlxuICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImNvbWJvYm94SWQgKyAnLWxpc3QtcmVzdWx0cydcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1hdXRvY29tcGxldGVdPVwiYXV0b0NvbXBsZXRlICYmICFtb2JpbGUgPyAnbGlzdCcgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtb3duc109XCJhdXRvQ29tcGxldGUgJiYgIW1vYmlsZSA/IGNvbWJvYm94SWQgKyAnLXJlc3VsdCcgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwiYXV0b0NvbXBsZXRlICYmICFtb2JpbGVcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCIhbW9iaWxlICYmIG9wZW4gJiYgZGlzcGxheWVkVmFsdWVzLmxlbmd0aFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cInJlYWRPbmx5IHx8IGRpc2FibGVkID8gLTEgOiBudWxsXCJcbiAgICAgICAgICAgIFtlbmFibGVdPVwiYXV0b0NvbXBsZXRlICYmICFtb2JpbGVcIlxuICAgICAgICAgICAgW2Rpc3BsYXlGbl09XCJkaXNwbGF5Rm5cIlxuICAgICAgICAgICAgW29wdGlvbnNdPVwiZHJvcGRvd25WYWx1ZXNcIlxuICAgICAgICAgICAgW2lucHV0VGV4dF09XCJpbnB1dFRleHRcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkT25seVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXJlYWRvbmx5XT1cInJlYWRPbmx5XCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICBbaWRdPVwiaW5wdXRJZFwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImlucHV0VGV4dFwiXG4gICAgICAgICAgICAob25Db21wbGV0ZSk9XCJoYW5kbGVBdXRvQ29tcGxldGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJvbklucHV0S2V5ZG93bkhhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAocGFzdGUpPVwib25JbnB1dEtleWRvd25IYW5kbGVyKCdmcm9tUGFzdGUnKVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJoYW5kbGVTZWFyY2hUZXJtQ2hhbmdlKClcIlxuICAgICAgICAgICAgKGJsdXIpPVwiaGFuZGxlQmx1cigpXCJcbiAgICAgICAgLz5cbiAgICAgICAgQGlmIChpc1NlYXJjaCAmJiBzaG93Q2xlYXJCdXR0b24gJiYgaW5wdXRUZXh0ICYmIGlucHV0VGV4dC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtaW5wdXQtZ3JvdXBfX2FkZG9uIGZkLWlucHV0LWdyb3VwX19hZGRvbi0tYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZmQtc2hlbGxiYXJfX2lucHV0LWdyb3VwLWFkZG9uXT1cImluU2hlbGxiYXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtaW5wdXQtZ3JvdXBfX2J1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBbZmRUeXBlXT1cImluU2hlbGxiYXIgPyAnc3RhbmRhcmQnIDogJ3RyYW5zcGFyZW50J1wiXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQ2xlYXIgaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmQtc2hlbGxiYXJfX2J1dHRvbl09XCJpblNoZWxsYmFyXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiY2xlYXJCdXR0b25Gb2N1c2FibGUgPyAwIDogLTFcIlxuICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwiY2xlYXJJbnB1dEJ0bkZvY3VzKClcIlxuICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJjbGVhcklucHV0QnRuQmx1cigpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9oYW5kbGVDbGVhclNlYXJjaFRlcm0oKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZmQtaWNvbiBnbHlwaD1cImRlY2xpbmVcIj48L2ZkLWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIH1cbiAgICA8L2ZkLWlucHV0LWdyb3VwPlxuICAgIDxkaXYgW2lkXT1cImNvbWJvYm94SWQgKyAnLWxpc3QtcmVzdWx0cydcIiBjbGFzcz1cImZkLWNvbWJvYm94LWNvdW50LWxpc3QtcmVzdWx0c1wiPlxuICAgICAgICB7eyBkaXNwbGF5ZWRWYWx1ZXMubGVuZ3RoIHx8IDAgfX0gcmVzdWx0IGxpc3QgaXRlbXNcbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2xpc3RUZW1wbGF0ZT5cbiAgICA8dWxcbiAgICAgICAgZmQtbGlzdFxuICAgICAgICBjbGFzcz1cImZkLWNvbWJvYm94LWN1c3RvbS1saXN0XCJcbiAgICAgICAgW2Ryb3Bkb3duTW9kZV09XCJ0cnVlXCJcbiAgICAgICAgW2lkXT1cImNvbWJvYm94SWQgKyAnLXJlc3VsdCdcIlxuICAgICAgICByb2xlPVwibGlzdGJveFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJjb21ib2JveElkICsgJy1zZWFyY2gnXCJcbiAgICAgICAgW3N0eWxlLm1heEhlaWdodF09XCIhbW9iaWxlICYmIG1heEhlaWdodFwiXG4gICAgICAgIFtoYXNNZXNzYWdlXT1cImxpc3RNZXNzYWdlcyAmJiBsaXN0TWVzc2FnZXMubGVuZ3RoID4gMFwiXG4gICAgICAgIFtieWxpbmVdPVwiYnlsaW5lXCJcbiAgICAgICAgKGtleWRvd24udGFiKT1cIl9jbG9zZSgpXCJcbiAgICAgICAgKGtleWRvd24uc2hpZnQudGFiKT1cIl9jbG9zZSgpXCJcbiAgICAgICAgKGZvY3VzRXNjYXBlTGlzdCk9XCJoYW5kbGVMaXN0Rm9jdXNFc2NhcGUoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIEBpZiAoZ3JvdXBGbikge1xuICAgICAgICAgICAgQGZvciAoZ3JvdXAgb2YgZGlzcGxheWVkVmFsdWVzIHwgbGlzdEdyb3VwUGlwZTogZ3JvdXBGbjsgdHJhY2sgZ3JvdXApIHtcbiAgICAgICAgICAgICAgICA8bGkgcm9sZT1cImdyb3VwXCIgZmQtbGlzdC1ncm91cC1oZWFkZXIgW3RhYmluZGV4XT1cIjBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gZmQtbGlzdC10aXRsZT57eyBncm91cC5rZXkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICBAZm9yICh0ZXJtIG9mIGdyb3VwLnZhbHVlOyB0cmFjayB0ZXJtKSB7XG4gICAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmZC1saXN0LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtcGxhY2Vob2xkZXJdPVwiZ3JvdXAua2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtY29tYm9ib3gtbGlzdC1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJpc1NlbGVjdGVkKHRlcm0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ0ZXJtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uSXRlbUtleURvd25IYW5kbGVyKCRldmVudCwgdGVybSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTWVudUNsaWNrSGFuZGxlcih0ZXJtKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1Tb3VyY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHRlcm06IHRlcm0gfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgQGZvciAodGVybSBvZiBkaXNwbGF5ZWRWYWx1ZXM7IHRyYWNrIHRlcm0pIHtcbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgZmQtbGlzdC1pdGVtXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtY29tYm9ib3gtbGlzdC1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cImlzU2VsZWN0ZWQodGVybSlcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbkl0ZW1LZXlEb3duSGFuZGxlcigkZXZlbnQsIHRlcm0pXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTWVudUNsaWNrSGFuZGxlcih0ZXJtKVwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ0ZXJtXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbVNvdXJjZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyB0ZXJtOiB0ZXJtIH1cIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgPC91bD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=