@fundamental-ngx/platform 0.47.4 → 0.48.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (405) hide show
  1. package/esm2022/action-bar/action-bar.component.mjs +8 -9
  2. package/esm2022/action-bar/action-bar.module.mjs +4 -4
  3. package/esm2022/action-button-group/action-button-group.component.mjs +4 -4
  4. package/esm2022/action-button-group/action-button-group.module.mjs +4 -4
  5. package/esm2022/approval-flow/approval-flow-add-node/approval-flow-add-node.component.mjs +6 -11
  6. package/esm2022/approval-flow/approval-flow-approver-details/approval-flow-approver-details.component.mjs +6 -8
  7. package/esm2022/approval-flow/approval-flow-messages/approval-flow-messages.component.mjs +5 -6
  8. package/esm2022/approval-flow/approval-flow-node/approval-flow-drop-zone.directive.mjs +5 -5
  9. package/esm2022/approval-flow/approval-flow-node/approval-flow-node.component.mjs +8 -11
  10. package/esm2022/approval-flow/approval-flow-select-type/approval-flow-select-type.component.mjs +6 -8
  11. package/esm2022/approval-flow/approval-flow-team-list/approval-flow-team-list.component.mjs +5 -7
  12. package/esm2022/approval-flow/approval-flow-toolbar-actions/approval-flow-toolbar-actions.component.mjs +5 -6
  13. package/esm2022/approval-flow/approval-flow-user-details/approval-flow-user-details.component.mjs +6 -6
  14. package/esm2022/approval-flow/approval-flow-user-list/approval-flow-user-list.component.mjs +6 -7
  15. package/esm2022/approval-flow/approval-flow.component.mjs +8 -10
  16. package/esm2022/approval-flow/approval-flow.module.mjs +4 -4
  17. package/esm2022/approval-flow/services/approval-flow-add-node-view.service.mjs +3 -3
  18. package/esm2022/button/button.component.mjs +5 -5
  19. package/esm2022/button/button.module.mjs +4 -4
  20. package/esm2022/dynamic-page/directives/dynamic-page-header-subtitle.directive.mjs +3 -3
  21. package/esm2022/dynamic-page/directives/dynamic-page-header-title.directive.mjs +3 -3
  22. package/esm2022/dynamic-page/dynamic-page-content/dynamic-page-content-host.component.mjs +5 -5
  23. package/esm2022/dynamic-page/dynamic-page-content/dynamic-page-content.component.mjs +5 -5
  24. package/esm2022/dynamic-page/dynamic-page-footer/dynamic-page-footer.component.mjs +3 -3
  25. package/esm2022/dynamic-page/dynamic-page-header/actions/global-actions/dynamic-page-global-actions.component.mjs +3 -3
  26. package/esm2022/dynamic-page/dynamic-page-header/actions/layout-actions/dynamic-page-layout-actions.component.mjs +3 -3
  27. package/esm2022/dynamic-page/dynamic-page-header/header/dynamic-page-header.component.mjs +4 -4
  28. package/esm2022/dynamic-page/dynamic-page-header/key-info/dynamic-page-key-info.component.mjs +3 -3
  29. package/esm2022/dynamic-page/dynamic-page-header/title/dynamic-page-title-image.component.mjs +3 -3
  30. package/esm2022/dynamic-page/dynamic-page-header/title/dynamic-page-title.component.mjs +3 -3
  31. package/esm2022/dynamic-page/dynamic-page.component.mjs +8 -10
  32. package/esm2022/dynamic-page/dynamic-page.config.mjs +4 -4
  33. package/esm2022/dynamic-page/dynamic-page.module.mjs +4 -4
  34. package/esm2022/dynamic-page/dynamic-page.service.mjs +3 -3
  35. package/esm2022/feed-input/feed-input.component.mjs +6 -7
  36. package/esm2022/feed-input/feed-input.module.mjs +4 -4
  37. package/esm2022/form/auto-complete/auto-complete.directive.mjs +5 -5
  38. package/esm2022/form/auto-complete/auto-complete.module.mjs +4 -4
  39. package/esm2022/form/checkbox/checkbox.component.mjs +6 -6
  40. package/esm2022/form/checkbox/checkbox.module.mjs +4 -4
  41. package/esm2022/form/checkbox-group/checkbox-group.component.mjs +8 -8
  42. package/esm2022/form/checkbox-group/checkbox-group.module.mjs +4 -4
  43. package/esm2022/form/combobox/combobox/combobox.component.mjs +9 -11
  44. package/esm2022/form/combobox/combobox-mobile/combobox/combobox-mobile.component.mjs +13 -15
  45. package/esm2022/form/combobox/combobox-mobile/combobox-mobile.module.mjs +4 -4
  46. package/esm2022/form/combobox/combobox.config.mjs +4 -4
  47. package/esm2022/form/combobox/combobox.module.mjs +4 -4
  48. package/esm2022/form/combobox/commons/base-combobox.mjs +8 -6
  49. package/esm2022/form/combobox/directives/combobox-item.directive.mjs +15 -15
  50. package/esm2022/form/date-picker/date-picker.component.mjs +6 -6
  51. package/esm2022/form/date-picker/date-picker.module.mjs +4 -4
  52. package/esm2022/form/datetime-picker/datetime-picker.component.mjs +6 -6
  53. package/esm2022/form/datetime-picker/datetime-picker.module.mjs +4 -4
  54. package/esm2022/form/form-generator/base-dynamic-form-generator-control.mjs +3 -3
  55. package/esm2022/form/form-generator/controls/dynamic-form-generator-checkbox/dynamic-form-generator-checkbox.component.mjs +4 -4
  56. package/esm2022/form/form-generator/controls/dynamic-form-generator-datepicker/dynamic-form-generator-datepicker.component.mjs +4 -4
  57. package/esm2022/form/form-generator/controls/dynamic-form-generator-editor/dynamic-form-generator-editor.component.mjs +4 -4
  58. package/esm2022/form/form-generator/controls/dynamic-form-generator-input/dynamic-form-generator-input.component.mjs +6 -7
  59. package/esm2022/form/form-generator/controls/dynamic-form-generator-multi-input/dynamic-form-generator-multi-input.component.mjs +4 -4
  60. package/esm2022/form/form-generator/controls/dynamic-form-generator-object-status/dynamic-form-generator-object-status.component.mjs +3 -3
  61. package/esm2022/form/form-generator/controls/dynamic-form-generator-radio/dynamic-form-generator-radio.component.mjs +4 -4
  62. package/esm2022/form/form-generator/controls/dynamic-form-generator-select/dynamic-form-generator-select.component.mjs +4 -4
  63. package/esm2022/form/form-generator/controls/dynamic-form-generator-switch/dynamic-form-generator-switch.component.mjs +4 -4
  64. package/esm2022/form/form-generator/dynamic-form-control-field.directive.mjs +5 -5
  65. package/esm2022/form/form-generator/dynamic-form-control.directive.mjs +6 -6
  66. package/esm2022/form/form-generator/fdp-form-generator.module.mjs +4 -4
  67. package/esm2022/form/form-generator/form-generator/form-generator.component.mjs +9 -11
  68. package/esm2022/form/form-generator/form-generator-components-accessor.service.mjs +3 -3
  69. package/esm2022/form/form-generator/form-generator-field/form-generator-field.component.mjs +7 -8
  70. package/esm2022/form/form-generator/form-generator.service.mjs +5 -5
  71. package/esm2022/form/form-generator/pipes/get-hint-options.pipe.mjs +5 -5
  72. package/esm2022/form/form-generator/pipes/get-ordered-form-controls.pipe.mjs +3 -3
  73. package/esm2022/form/form-group/fdp-form.module.mjs +4 -4
  74. package/esm2022/form/form-group/form-field/form-field.component.mjs +10 -10
  75. package/esm2022/form/form-group/form-field-error/form-field-error-description.directive.mjs +6 -6
  76. package/esm2022/form/form-group/form-field-error/form-field-error-heading.directive.mjs +6 -6
  77. package/esm2022/form/form-group/form-field-error/form-field-error.directive.mjs +5 -5
  78. package/esm2022/form/form-group/form-field-extras/form-field-extras.component.mjs +3 -3
  79. package/esm2022/form/form-group/form-field-group/form-field-group.component.mjs +6 -6
  80. package/esm2022/form/form-group/form-group-header/form-group-header.component.mjs +6 -6
  81. package/esm2022/form/form-group/form-group.component.mjs +8 -10
  82. package/esm2022/form/form-group/pipes/field-group-row-value.pipe.mjs +3 -3
  83. package/esm2022/form/form-group/services/form-field-layout.service.mjs +5 -5
  84. package/esm2022/form/input/fdp-input.module.mjs +4 -4
  85. package/esm2022/form/input/input.component.mjs +6 -6
  86. package/esm2022/form/input-group/addon-body.component.mjs +5 -5
  87. package/esm2022/form/input-group/addon.component.mjs +5 -5
  88. package/esm2022/form/input-group/input-group.component.mjs +12 -12
  89. package/esm2022/form/input-group/input-group.config.mjs +4 -4
  90. package/esm2022/form/input-group/input-group.module.mjs +4 -4
  91. package/esm2022/form/input-group/input.component.mjs +3 -3
  92. package/esm2022/form/input-message-group-with-template/input-message-group-with-template.component.mjs +7 -7
  93. package/esm2022/form/multi-combobox/commons/base-multi-combobox.mjs +6 -6
  94. package/esm2022/form/multi-combobox/multi-combobox/multi-combobox.component.mjs +10 -12
  95. package/esm2022/form/multi-combobox/multi-combobox-mobile/multi-combobox/multi-combobox-mobile.component.mjs +8 -9
  96. package/esm2022/form/multi-combobox/multi-combobox-mobile/multi-combobox-mobile.module.mjs +4 -4
  97. package/esm2022/form/multi-combobox/multi-combobox.config.mjs +4 -4
  98. package/esm2022/form/multi-combobox/multi-combobox.module.mjs +4 -4
  99. package/esm2022/form/multi-input/base-multi-input.mjs +6 -6
  100. package/esm2022/form/multi-input/multi-input-mobile/multi-input-mobile.component.mjs +12 -12
  101. package/esm2022/form/multi-input/multi-input-mobile/multi-input-mobile.module.mjs +4 -4
  102. package/esm2022/form/multi-input/multi-input.component.mjs +9 -11
  103. package/esm2022/form/multi-input/multi-input.config.mjs +4 -4
  104. package/esm2022/form/multi-input/multi-input.module.mjs +4 -4
  105. package/esm2022/form/platform-file-uploader/platform-file-uploader.component.mjs +6 -6
  106. package/esm2022/form/platform-file-uploader/platform-file-uploader.module.mjs +4 -4
  107. package/esm2022/form/radio-group/radio/radio.component.mjs +8 -8
  108. package/esm2022/form/radio-group/radio-group.component.mjs +8 -8
  109. package/esm2022/form/radio-group/radio-group.module.mjs +4 -4
  110. package/esm2022/form/select/commons/base-select.mjs +6 -6
  111. package/esm2022/form/select/select/select.component.mjs +8 -8
  112. package/esm2022/form/select/select.config.mjs +4 -4
  113. package/esm2022/form/select/select.module.mjs +4 -4
  114. package/esm2022/form/step-input/base.step-input.mjs +5 -5
  115. package/esm2022/form/step-input/number/number-step-input.component.mjs +9 -10
  116. package/esm2022/form/step-input/step-input-action-button.mjs +3 -3
  117. package/esm2022/form/step-input/step-input-control.directive.mjs +6 -6
  118. package/esm2022/form/step-input/step-input-decrement.directive.mjs +5 -5
  119. package/esm2022/form/step-input/step-input-increment.directive.mjs +5 -5
  120. package/esm2022/form/step-input/step-input.config.mjs +3 -3
  121. package/esm2022/form/step-input/step-input.module.mjs +4 -4
  122. package/esm2022/form/switch/switch/switch.component.mjs +6 -6
  123. package/esm2022/form/switch/switch/switch.config.mjs +3 -3
  124. package/esm2022/form/switch/switch.module.mjs +4 -4
  125. package/esm2022/form/text-area/text-area.component.mjs +8 -9
  126. package/esm2022/form/text-area/text-area.config.mjs +3 -3
  127. package/esm2022/form/text-area/text-area.module.mjs +4 -4
  128. package/esm2022/form/time-picker/time-picker.component.mjs +6 -6
  129. package/esm2022/form/time-picker/time-picker.module.mjs +4 -4
  130. package/esm2022/fundamental-ngx.module.mjs +5 -5
  131. package/esm2022/icon-tab-bar/components/closable-icon-tab-bar.class.mjs +3 -3
  132. package/esm2022/icon-tab-bar/components/icon-tab-bar-base.class.mjs +5 -9
  133. package/esm2022/icon-tab-bar/components/icon-tab-bar-filter-type/icon-tab-bar-filter-type.component.mjs +6 -8
  134. package/esm2022/icon-tab-bar/components/icon-tab-bar-icon-type/icon-tab-bar-icon-type.component.mjs +6 -8
  135. package/esm2022/icon-tab-bar/components/icon-tab-bar-process-type/icon-tab-bar-process-type.component.mjs +5 -8
  136. package/esm2022/icon-tab-bar/components/icon-tab-bar-text-type/icon-tab-bar-text-type.component.mjs +7 -9
  137. package/esm2022/icon-tab-bar/components/popovers/icon-tab-bar-popover/icon-tab-bar-popover.component.mjs +6 -15
  138. package/esm2022/icon-tab-bar/components/popovers/icon-tab-bar-popover-base.class.mjs +5 -9
  139. package/esm2022/icon-tab-bar/components/popovers/text-type-popover/text-type-popover.component.mjs +6 -8
  140. package/esm2022/icon-tab-bar/directives/dnd/icon-bar-dnd-container.directive.mjs +5 -5
  141. package/esm2022/icon-tab-bar/directives/dnd/icon-bar-dnd-item.directive.mjs +5 -5
  142. package/esm2022/icon-tab-bar/directives/dnd/icon-bar-dnd-list.directive.mjs +5 -5
  143. package/esm2022/icon-tab-bar/icon-tab-bar.component.mjs +8 -9
  144. package/esm2022/icon-tab-bar/icon-tab-bar.module.mjs +4 -4
  145. package/esm2022/info-label/info-label.component.mjs +5 -5
  146. package/esm2022/info-label/info-label.module.mjs +4 -4
  147. package/esm2022/link/link.component.mjs +5 -5
  148. package/esm2022/link/link.module.mjs +4 -4
  149. package/esm2022/list/action-list-item/action-list-item.component.mjs +3 -3
  150. package/esm2022/list/action-list-item/action-list-item.module.mjs +4 -4
  151. package/esm2022/list/base-list-item.mjs +11 -11
  152. package/esm2022/list/display-list-item/display-list-item.component.mjs +6 -7
  153. package/esm2022/list/display-list-item/display-list-item.module.mjs +4 -4
  154. package/esm2022/list/free-content-list-item/free-content-list-item.component.mjs +4 -4
  155. package/esm2022/list/list-group-footer.component.mjs +3 -3
  156. package/esm2022/list/list-group-header.component.mjs +3 -3
  157. package/esm2022/list/list.component.mjs +9 -11
  158. package/esm2022/list/list.config.mjs +3 -3
  159. package/esm2022/list/list.module.mjs +4 -4
  160. package/esm2022/list/load-more-content.directive.mjs +4 -4
  161. package/esm2022/list/object-list-item/object-list-item-row.component.mjs +4 -4
  162. package/esm2022/list/object-list-item/object-list-item.component.mjs +6 -7
  163. package/esm2022/list/object-list-item/object-list-item.module.mjs +4 -4
  164. package/esm2022/list/standard-list-item/standard-list-item.component.mjs +6 -7
  165. package/esm2022/list/standard-list-item/standard-list-item.module.mjs +4 -4
  166. package/esm2022/menu/menu-item.component.mjs +7 -7
  167. package/esm2022/menu/menu-trigger.directive.mjs +6 -6
  168. package/esm2022/menu/menu.component.mjs +6 -6
  169. package/esm2022/menu/menu.module.mjs +4 -4
  170. package/esm2022/menu-button/menu-button.component.mjs +5 -5
  171. package/esm2022/menu-button/menu-button.module.mjs +4 -4
  172. package/esm2022/message-popover/components/message-popover-form-wrapper/message-popover-form-wrapper.component.mjs +6 -6
  173. package/esm2022/message-popover/components/message-view/message-view.component.mjs +8 -10
  174. package/esm2022/message-popover/directives/message-popover-form-item.directive.mjs +6 -6
  175. package/esm2022/message-popover/message-popover.component.mjs +7 -9
  176. package/esm2022/message-popover/platform-message-popover.module.mjs +4 -4
  177. package/esm2022/object-marker/object-marker.component.mjs +6 -7
  178. package/esm2022/object-marker/object-marker.module.mjs +4 -4
  179. package/esm2022/object-status/object-status.component.mjs +8 -8
  180. package/esm2022/object-status/object-status.module.mjs +4 -4
  181. package/esm2022/page-footer/page-footer.component.mjs +6 -6
  182. package/esm2022/page-footer/page-footer.module.mjs +4 -4
  183. package/esm2022/panel/panel-actions.component.mjs +3 -3
  184. package/esm2022/panel/panel-content/panel-content.component.mjs +4 -4
  185. package/esm2022/panel/panel.component.mjs +5 -5
  186. package/esm2022/panel/panel.config.mjs +4 -4
  187. package/esm2022/panel/panel.module.mjs +4 -4
  188. package/esm2022/search-field/search-field-mobile/search-field/search-field-mobile.component.mjs +8 -9
  189. package/esm2022/search-field/search-field-mobile/search-field-mobile.module.mjs +4 -4
  190. package/esm2022/search-field/search-field.component.mjs +16 -18
  191. package/esm2022/search-field/search-field.module.mjs +4 -4
  192. package/esm2022/settings-generator/controls/theme-selector-list/theme-selector-list.component.mjs +9 -16
  193. package/esm2022/settings-generator/layouts/base-settings-generator-layout.mjs +3 -3
  194. package/esm2022/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-icon/settings-generator-sidebar-icon.component.mjs +5 -6
  195. package/esm2022/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-layout.component.mjs +6 -9
  196. package/esm2022/settings-generator/settings-generator-content/settings-generator-content.component.mjs +6 -8
  197. package/esm2022/settings-generator/settings-generator-content/settings-generator-section/settings-generator-section.component.mjs +7 -7
  198. package/esm2022/settings-generator/settings-generator-layout-accessor.service.mjs +3 -3
  199. package/esm2022/settings-generator/settings-generator.component.mjs +9 -9
  200. package/esm2022/settings-generator/settings-generator.module.mjs +4 -4
  201. package/esm2022/settings-generator/settings-generator.service.mjs +4 -4
  202. package/esm2022/shared/base.mjs +5 -5
  203. package/esm2022/shared/form/base.input.mjs +6 -6
  204. package/esm2022/shared/form/collection-base.input.mjs +6 -6
  205. package/esm2022/shared/form/inline-layout-collection-base.input.mjs +13 -13
  206. package/esm2022/shared/pipes/convert-bytes/convert-bytes.pipe.mjs +3 -3
  207. package/esm2022/shared/pipes/pipe.module.mjs +4 -4
  208. package/esm2022/shared/platform.config.mjs +3 -3
  209. package/esm2022/slider/slider.component.mjs +6 -6
  210. package/esm2022/slider/slider.module.mjs +4 -4
  211. package/esm2022/smart-filter-bar/components/smart-filter-bar-condition-field/base-smart-filter-bar-condition-field.mjs +4 -4
  212. package/esm2022/smart-filter-bar/components/smart-filter-bar-condition-field/smart-filter-bar-condition-field.component.mjs +4 -4
  213. package/esm2022/smart-filter-bar/components/smart-filter-bar-conditions-dialog/smart-filter-bar-conditions-dialog.component.mjs +6 -9
  214. package/esm2022/smart-filter-bar/components/smart-filter-bar-settings-dialog/smart-filter-bar-settings-dialog.component.mjs +7 -9
  215. package/esm2022/smart-filter-bar/directives/smart-filter-bar-field-definition.directive.mjs +3 -3
  216. package/esm2022/smart-filter-bar/directives/smart-filter-bar-subject.directive.mjs +5 -5
  217. package/esm2022/smart-filter-bar/directives/smart-filter-bar-toolbar-item.directive.mjs +4 -4
  218. package/esm2022/smart-filter-bar/smart-filter-bar.class.mjs +3 -3
  219. package/esm2022/smart-filter-bar/smart-filter-bar.component.mjs +8 -10
  220. package/esm2022/smart-filter-bar/smart-filter-bar.module.mjs +4 -4
  221. package/esm2022/smart-filter-bar/smart-filter-bar.service.mjs +4 -4
  222. package/esm2022/split-menu-button/split-menu-button.component.mjs +6 -6
  223. package/esm2022/split-menu-button/split-menu-button.module.mjs +4 -4
  224. package/esm2022/table/components/no-data-wrapper/no-data-wrapper.component.mjs +3 -3
  225. package/esm2022/table/components/reset-button/reset-button.component.mjs +5 -5
  226. package/esm2022/table/components/table-cell-header-popover/table-cell-header-popover.component.mjs +6 -8
  227. package/esm2022/table/components/table-column/table-column.component.mjs +6 -6
  228. package/esm2022/table/components/table-column-resizer/table-column-resizer.component.mjs +6 -6
  229. package/esm2022/table/components/table-editable-cell/table-editable-cell.component.mjs +5 -15
  230. package/esm2022/table/components/table-group-row/table-group-row.component.mjs +7 -7
  231. package/esm2022/table/components/table-header-cell-content/table-header-cell-content.component.mjs +6 -6
  232. package/esm2022/table/components/table-header-row/table-header-row.component.mjs +11 -13
  233. package/esm2022/table/components/table-p13-dialog/columns/columns.component.mjs +7 -9
  234. package/esm2022/table/components/table-p13-dialog/filtering/filter-rule.component.mjs +9 -11
  235. package/esm2022/table/components/table-p13-dialog/filtering/filtering.component.mjs +6 -9
  236. package/esm2022/table/components/table-p13-dialog/grouping/grouping.component.mjs +6 -8
  237. package/esm2022/table/components/table-p13-dialog/sorting/sorting.component.mjs +9 -11
  238. package/esm2022/table/components/table-p13-dialog/table-p13-columns.component.mjs +3 -3
  239. package/esm2022/table/components/table-p13-dialog/table-p13-dialog.component.mjs +5 -5
  240. package/esm2022/table/components/table-p13-dialog/table-p13-filter.component.mjs +3 -3
  241. package/esm2022/table/components/table-p13-dialog/table-p13-group.component.mjs +3 -3
  242. package/esm2022/table/components/table-p13-dialog/table-p13-sort.component.mjs +3 -3
  243. package/esm2022/table/components/table-popping-row/table-popping-row.component.mjs +7 -9
  244. package/esm2022/table/components/table-row/table-row.component.mjs +8 -12
  245. package/esm2022/table/components/table-toolbar/table-toolbar-actions.component.mjs +3 -3
  246. package/esm2022/table/components/table-toolbar/table-toolbar-left-actions.component.mjs +3 -3
  247. package/esm2022/table/components/table-toolbar/table-toolbar.component.mjs +7 -8
  248. package/esm2022/table/components/table-view-settings-dialog/filtering/filter-custom.component.mjs +6 -6
  249. package/esm2022/table/components/table-view-settings-dialog/filtering/filter-multi-select.component.mjs +5 -6
  250. package/esm2022/table/components/table-view-settings-dialog/filtering/filter-single-select.component.mjs +5 -14
  251. package/esm2022/table/components/table-view-settings-dialog/filtering/filter-step.component.mjs +5 -8
  252. package/esm2022/table/components/table-view-settings-dialog/filtering/filters-list-step.component.mjs +5 -7
  253. package/esm2022/table/components/table-view-settings-dialog/filtering/filters.component.mjs +7 -10
  254. package/esm2022/table/components/table-view-settings-dialog/grouping/grouping.component.mjs +6 -8
  255. package/esm2022/table/components/table-view-settings-dialog/sorting/sorting.component.mjs +6 -9
  256. package/esm2022/table/components/table-view-settings-dialog/table-view-settings-dialog.component.mjs +5 -5
  257. package/esm2022/table/components/table-view-settings-dialog/table-view-settings-filter.component.mjs +3 -3
  258. package/esm2022/table/table.component.mjs +9 -14
  259. package/esm2022/table/table.module.mjs +4 -4
  260. package/esm2022/table-helpers/directives/platform-table-column-responsive.directive.mjs +6 -6
  261. package/esm2022/table-helpers/directives/table-cell-header-popover.directive.mjs +4 -4
  262. package/esm2022/table-helpers/directives/table-cell-resizable.directive.mjs +5 -5
  263. package/esm2022/table-helpers/directives/table-cell-selectable.directive.mjs +3 -3
  264. package/esm2022/table-helpers/directives/table-cell.directive.mjs +16 -16
  265. package/esm2022/table-helpers/directives/table-data-source.directive.mjs +3 -3
  266. package/esm2022/table-helpers/directives/table-draggable.directive.mjs +3 -3
  267. package/esm2022/table-helpers/directives/table-header-resizer.directive.mjs +3 -3
  268. package/esm2022/table-helpers/directives/table-header.directive.mjs +7 -7
  269. package/esm2022/table-helpers/directives/table-initial-state.directive.mjs +3 -3
  270. package/esm2022/table-helpers/directives/table-scrollable.directive.mjs +4 -4
  271. package/esm2022/table-helpers/directives/table-view-settings-filter-custom.directive.mjs +4 -4
  272. package/esm2022/table-helpers/directives/table-virtual-scroll.directive.mjs +3 -3
  273. package/esm2022/table-helpers/enums/collection-filter.enum.mjs +16 -1
  274. package/esm2022/table-helpers/pipes/cell-styles.pipe.mjs +3 -3
  275. package/esm2022/table-helpers/pipes/column-resizable-side.pipe.mjs +3 -3
  276. package/esm2022/table-helpers/pipes/column-sorting-direction.pipe.mjs +3 -3
  277. package/esm2022/table-helpers/pipes/row-classes.pipe.mjs +3 -3
  278. package/esm2022/table-helpers/pipes/selection-cell-styles.pipe.mjs +3 -3
  279. package/esm2022/table-helpers/services/table-column-resize.service.mjs +5 -5
  280. package/esm2022/table-helpers/services/table-responsive.service.mjs +5 -5
  281. package/esm2022/table-helpers/services/table-row.service.mjs +3 -3
  282. package/esm2022/table-helpers/services/table-scroll-dispatcher.service.mjs +3 -3
  283. package/esm2022/table-helpers/services/table.service.mjs +3 -3
  284. package/esm2022/table-helpers/table-helpers.module.mjs +4 -4
  285. package/esm2022/thumbnail/thumbnail-details/thumbnail-details.component.mjs +6 -8
  286. package/esm2022/thumbnail/thumbnail-image/thumbnail-image.component.mjs +8 -8
  287. package/esm2022/thumbnail/thumbnail.component.mjs +7 -8
  288. package/esm2022/thumbnail/thumbnail.module.mjs +4 -4
  289. package/esm2022/upload-collection/dialogs/move-to/move-to.component.mjs +6 -9
  290. package/esm2022/upload-collection/dialogs/new-folder/new-folder.component.mjs +6 -8
  291. package/esm2022/upload-collection/directives/upload-collection-dragndrop.directive.mjs +5 -5
  292. package/esm2022/upload-collection/services/files-validator.service.mjs +3 -3
  293. package/esm2022/upload-collection/upload-collection/upload-collection.component.mjs +7 -11
  294. package/esm2022/upload-collection/upload-collection.module.mjs +4 -4
  295. package/esm2022/value-help-dialog/components/base-tab/vhd-base-tab.component.mjs +5 -5
  296. package/esm2022/value-help-dialog/components/define-tab/define-tab.component.mjs +6 -10
  297. package/esm2022/value-help-dialog/components/select-tab/select-tab.component.mjs +13 -15
  298. package/esm2022/value-help-dialog/components/value-help-dialog-filter/value-help-dialog-filter.component.mjs +3 -3
  299. package/esm2022/value-help-dialog/directives/condition-count-message.directive.mjs +5 -5
  300. package/esm2022/value-help-dialog/value-help-dialog/value-help-dialog.component.mjs +12 -17
  301. package/esm2022/value-help-dialog/value-help-dialog.module.mjs +4 -4
  302. package/esm2022/variant-management/components/manage-variant-item/manage-variant-item.component.mjs +5 -5
  303. package/esm2022/variant-management/components/manage-variants-dialog/manage-variants-dialog.component.mjs +6 -8
  304. package/esm2022/variant-management/components/variant-management-wrapper/variant-management-wrapper.component.mjs +3 -3
  305. package/esm2022/variant-management/directives/variant-management-dirty-label.directive.mjs +4 -4
  306. package/esm2022/variant-management/variant-management.component.mjs +8 -10
  307. package/esm2022/variant-management/variant-management.module.mjs +4 -4
  308. package/esm2022/wizard-generator/base-wizard-generator.mjs +5 -5
  309. package/esm2022/wizard-generator/components/dialog-wizard-generator/dialog-wizard-generator.component.mjs +7 -8
  310. package/esm2022/wizard-generator/components/wizard-body/wizard-body.component.mjs +7 -9
  311. package/esm2022/wizard-generator/components/wizard-generator/wizard-generator.component.mjs +6 -7
  312. package/esm2022/wizard-generator/components/wizard-generator-step/wizard-generator-step.component.mjs +6 -7
  313. package/esm2022/wizard-generator/components/wizard-summary-step/wizard-summary-section/wizard-summary-section.component.mjs +5 -6
  314. package/esm2022/wizard-generator/components/wizard-summary-step/wizard-summary-step.component.mjs +7 -7
  315. package/esm2022/wizard-generator/directives/wizard-generator-finish-button.directive.mjs +3 -3
  316. package/esm2022/wizard-generator/directives/wizard-generator-go-next-button.directive.mjs +3 -3
  317. package/esm2022/wizard-generator/directives/wizard-generator-review-button.directive.mjs +3 -3
  318. package/esm2022/wizard-generator/directives/wizard-generator-summary-step.directive.mjs +3 -3
  319. package/esm2022/wizard-generator/wizard-dialog-generator.service.mjs +4 -4
  320. package/esm2022/wizard-generator/wizard-generator.module.mjs +4 -4
  321. package/esm2022/wizard-generator/wizard-generator.service.mjs +4 -4
  322. package/fesm2022/fundamental-ngx-platform-action-bar.mjs +11 -12
  323. package/fesm2022/fundamental-ngx-platform-action-bar.mjs.map +1 -1
  324. package/fesm2022/fundamental-ngx-platform-action-button-group.mjs +8 -8
  325. package/fesm2022/fundamental-ngx-platform-approval-flow.mjs +62 -74
  326. package/fesm2022/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
  327. package/fesm2022/fundamental-ngx-platform-button.mjs +8 -8
  328. package/fesm2022/fundamental-ngx-platform-button.mjs.map +1 -1
  329. package/fesm2022/fundamental-ngx-platform-dynamic-page.mjs +54 -56
  330. package/fesm2022/fundamental-ngx-platform-dynamic-page.mjs.map +1 -1
  331. package/fesm2022/fundamental-ngx-platform-feed-input.mjs +9 -10
  332. package/fesm2022/fundamental-ngx-platform-feed-input.mjs.map +1 -1
  333. package/fesm2022/fundamental-ngx-platform-form.mjs +453 -464
  334. package/fesm2022/fundamental-ngx-platform-form.mjs.map +1 -1
  335. package/fesm2022/fundamental-ngx-platform-icon-tab-bar.mjs +59 -87
  336. package/fesm2022/fundamental-ngx-platform-icon-tab-bar.mjs.map +1 -1
  337. package/fesm2022/fundamental-ngx-platform-info-label.mjs +8 -8
  338. package/fesm2022/fundamental-ngx-platform-info-label.mjs.map +1 -1
  339. package/fesm2022/fundamental-ngx-platform-link.mjs +8 -8
  340. package/fesm2022/fundamental-ngx-platform-link.mjs.map +1 -1
  341. package/fesm2022/fundamental-ngx-platform-list.mjs +73 -78
  342. package/fesm2022/fundamental-ngx-platform-list.mjs.map +1 -1
  343. package/fesm2022/fundamental-ngx-platform-menu-button.mjs +8 -8
  344. package/fesm2022/fundamental-ngx-platform-menu-button.mjs.map +1 -1
  345. package/fesm2022/fundamental-ngx-platform-menu.mjs +20 -20
  346. package/fesm2022/fundamental-ngx-platform-menu.mjs.map +1 -1
  347. package/fesm2022/fundamental-ngx-platform-message-popover.mjs +29 -33
  348. package/fesm2022/fundamental-ngx-platform-message-popover.mjs.map +1 -1
  349. package/fesm2022/fundamental-ngx-platform-object-marker.mjs +9 -10
  350. package/fesm2022/fundamental-ngx-platform-object-marker.mjs.map +1 -1
  351. package/fesm2022/fundamental-ngx-platform-object-status.mjs +12 -12
  352. package/fesm2022/fundamental-ngx-platform-object-status.mjs.map +1 -1
  353. package/fesm2022/fundamental-ngx-platform-page-footer.mjs +9 -9
  354. package/fesm2022/fundamental-ngx-platform-page-footer.mjs.map +1 -1
  355. package/fesm2022/fundamental-ngx-platform-panel.mjs +19 -19
  356. package/fesm2022/fundamental-ngx-platform-panel.mjs.map +1 -1
  357. package/fesm2022/fundamental-ngx-platform-search-field.mjs +29 -32
  358. package/fesm2022/fundamental-ngx-platform-search-field.mjs.map +1 -1
  359. package/fesm2022/fundamental-ngx-platform-settings-generator.mjs +45 -56
  360. package/fesm2022/fundamental-ngx-platform-settings-generator.mjs.map +1 -1
  361. package/fesm2022/fundamental-ngx-platform-shared.mjs +36 -36
  362. package/fesm2022/fundamental-ngx-platform-shared.mjs.map +1 -1
  363. package/fesm2022/fundamental-ngx-platform-slider.mjs +9 -9
  364. package/fesm2022/fundamental-ngx-platform-slider.mjs.map +1 -1
  365. package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs +48 -53
  366. package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
  367. package/fesm2022/fundamental-ngx-platform-split-menu-button.mjs +9 -9
  368. package/fesm2022/fundamental-ngx-platform-split-menu-button.mjs.map +1 -1
  369. package/fesm2022/fundamental-ngx-platform-table-helpers.mjs +115 -100
  370. package/fesm2022/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
  371. package/fesm2022/fundamental-ngx-platform-table.mjs +168 -218
  372. package/fesm2022/fundamental-ngx-platform-table.mjs.map +1 -1
  373. package/fesm2022/fundamental-ngx-platform-thumbnail.mjs +22 -23
  374. package/fesm2022/fundamental-ngx-platform-thumbnail.mjs.map +1 -1
  375. package/fesm2022/fundamental-ngx-platform-upload-collection.mjs +27 -34
  376. package/fesm2022/fundamental-ngx-platform-upload-collection.mjs.map +1 -1
  377. package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs +41 -52
  378. package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
  379. package/fesm2022/fundamental-ngx-platform-variant-management.mjs +28 -31
  380. package/fesm2022/fundamental-ngx-platform-variant-management.mjs.map +1 -1
  381. package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs +58 -61
  382. package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs.map +1 -1
  383. package/fesm2022/fundamental-ngx-platform.mjs +5 -5
  384. package/form/combobox/combobox-mobile/combobox/combobox-mobile.component.d.ts +2 -2
  385. package/form/form-group/form-group.component.d.ts +1 -1
  386. package/form/input-group/input-group.component.d.ts +2 -2
  387. package/form/multi-combobox/multi-combobox/multi-combobox.component.d.ts +1 -1
  388. package/form/multi-input/multi-input-mobile/multi-input-mobile.component.d.ts +2 -2
  389. package/fundamental-ngx-platform-v0.48.0-rc.0.tgz +0 -0
  390. package/icon-tab-bar/components/icon-tab-bar-base.class.d.ts +0 -2
  391. package/icon-tab-bar/components/popovers/icon-tab-bar-popover-base.class.d.ts +0 -2
  392. package/list/list.component.d.ts +1 -1
  393. package/package.json +4 -4
  394. package/page-footer/page-footer.component.d.ts +1 -1
  395. package/schematics/ng-add/index.js +1 -1
  396. package/settings-generator/settings-generator-content/settings-generator-section/settings-generator-section.component.d.ts +1 -1
  397. package/settings-generator/settings-generator.component.d.ts +2 -2
  398. package/table/components/table-p13-dialog/filtering/filter-rule.component.d.ts +2 -0
  399. package/table/table.component.d.ts +1 -1
  400. package/table-helpers/enums/collection-filter.enum.d.ts +2 -0
  401. package/value-help-dialog/components/select-tab/select-tab.component.d.ts +1 -1
  402. package/value-help-dialog/value-help-dialog/value-help-dialog.component.d.ts +1 -1
  403. package/wizard-generator/components/wizard-generator-step/wizard-generator-step.component.d.ts +2 -2
  404. package/wizard-generator/components/wizard-summary-step/wizard-summary-step.component.d.ts +2 -2
  405. package/fundamental-ngx-platform-v0.47.4.tgz +0 -0
@@ -381,12 +381,12 @@ export class StepInputComponent extends BaseInput {
381
381
  _resetPendingEnteredValue() {
382
382
  this._pendingEnteredValue = null;
383
383
  }
384
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: StepInputComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.NgControl }, { token: i1.ControlContainer }, { token: i1.NgForm }, { token: i2.PlatformFormField }, { token: i2.PlatformFormFieldControl }, { token: i3.StepInputConfig }, { token: i0.Renderer2 }, { token: i4.RtlService }], target: i0.ɵɵFactoryTarget.Directive }); }
385
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.7", type: StepInputComponent, inputs: { value: "value", min: "min", max: "max", step: "step", stepFn: "stepFn", precision: "precision", largerStep: "largerStep", showLabels: "showLabels", align: "align", incrementLabel: "incrementLabel", decrementLabel: "decrementLabel" }, outputs: { valueChange: "valueChange" }, usesInheritance: true, ngImport: i0 }); }
384
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: StepInputComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.NgControl }, { token: i1.ControlContainer }, { token: i1.NgForm }, { token: i2.PlatformFormField }, { token: i2.PlatformFormFieldControl }, { token: i3.StepInputConfig }, { token: i0.Renderer2 }, { token: i4.RtlService }], target: i0.ɵɵFactoryTarget.Directive }); }
385
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.4", type: StepInputComponent, inputs: { value: "value", min: "min", max: "max", step: "step", stepFn: "stepFn", precision: "precision", largerStep: "largerStep", showLabels: "showLabels", align: "align", incrementLabel: "incrementLabel", decrementLabel: "decrementLabel" }, outputs: { valueChange: "valueChange" }, usesInheritance: true, ngImport: i0 }); }
386
386
  }
387
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: StepInputComponent, decorators: [{
387
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: StepInputComponent, decorators: [{
388
388
  type: Directive
389
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.NgControl }, { type: i1.ControlContainer }, { type: i1.NgForm }, { type: i2.PlatformFormField }, { type: i2.PlatformFormFieldControl }, { type: i3.StepInputConfig }, { type: i0.Renderer2 }, { type: i4.RtlService }]; }, propDecorators: { value: [{
389
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.NgControl }, { type: i1.ControlContainer }, { type: i1.NgForm }, { type: i2.PlatformFormField }, { type: i2.PlatformFormFieldControl }, { type: i3.StepInputConfig }, { type: i0.Renderer2 }, { type: i4.RtlService }], propDecorators: { value: [{
390
390
  type: Input
391
391
  }], min: [{
392
392
  type: Input
@@ -411,4 +411,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImpor
411
411
  }], valueChange: [{
412
412
  type: Output
413
413
  }] } });
414
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5zdGVwLWlucHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL2Zvcm0vc3RlcC1pbnB1dC9iYXNlLnN0ZXAtaW5wdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLFNBQVMsRUFDVCxTQUFTLEVBRVQsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNELE9BQU8sRUFBa0IsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFeEUsT0FBTyxFQUFFLFNBQVMsRUFBRSx3QkFBd0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzFHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7O0FBRTlGLG1FQUFtRTtBQUNuRSxNQUFNLE9BQU8sb0JBQW9CO0lBQzdCOzs7O09BSUc7SUFDSDtJQUNJLDBDQUEwQztJQUNuQyxNQUFTO0lBQ2hCLGtDQUFrQztJQUMzQixPQUFVO1FBRlYsV0FBTSxHQUFOLE1BQU0sQ0FBRztRQUVULFlBQU8sR0FBUCxPQUFPLENBQUc7SUFDbEIsQ0FBQztDQUNQO0FBRUQsTUFBTSxDQUFOLElBQVksY0FJWDtBQUpELFdBQVksY0FBYztJQUN0QiwrQkFBYSxDQUFBO0lBQ2IsbUNB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V0FJRixLQUFLO3NCQURSLEtBQUs7Z0JBYUYsR0FBRztzQkFETixLQUFLO2dCQVdGLEdBQUc7c0JBRE4sS0FBSztnQkFXRixJQUFJO3NCQURQLEtBQUs7Z0JBWUYsTUFBTTtzQkFEVCxLQUFLO2dCQVFGLFNBQVM7c0JBRFosS0FBSztnQkFXTixVQUFVO3NCQURULEtBQUs7Z0JBS04sVUFBVTtzQkFEVCxLQUFLO2dCQUtGLEtBQUs7c0JBRFIsS0FBSztnQkFTTixjQUFjO3NCQURiLEtBQUs7Z0JBT04sY0FBYztzQkFEYixLQUFLO2dCQUtOLFdBQVc7c0JBRFYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBSZW5kZXJlcjIsXG4gICAgRGlyZWN0aXZlLFxuICAgIE9uSW5pdCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBFbGVtZW50UmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdGb3JtLCBOZ0NvbnRyb2wsIENvbnRyb2xDb250YWluZXIgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwsIHN3aXRjaE1hcCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eSwgUnRsU2VydmljZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQmFzZUlucHV0LCBQbGF0Zm9ybUZvcm1GaWVsZENvbnRyb2wsIFBsYXRmb3JtRm9ybUZpZWxkIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zaGFyZWQnO1xuaW1wb3J0IHsgU3RlcElucHV0Q29uZmlnIH0gZnJvbSAnLi9zdGVwLWlucHV0LmNvbmZpZyc7XG5pbXBvcnQgeyBhZGRBbmRDdXRGbG9hdGluZ051bWJlckRpc3RvcnRpb24sIGdldE51bWJlckRlY2ltYWxMZW5ndGggfSBmcm9tICcuL3N0ZXAtaW5wdXQudXRpbCc7XG5cbi8qKiBDaGFuZ2UgZXZlbnQgb2JqZWN0IGVtaXR0ZWQgYnkgUGxhdGZvcm0gU3RlcCBJbnB1dCBjb21wb25lbnQgKi9cbmV4cG9ydCBjbGFzcyBTdGVwSW5wdXRDaGFuZ2VFdmVudDxUIGV4dGVuZHMgU3RlcElucHV0Q29tcG9uZW50ID0gU3RlcElucHV0Q29tcG9uZW50LCBLID0gbnVtYmVyPiB7XG4gICAgLyoqXG4gICAgICogU3RlcCBpbnB1dCBzZWxlY3Rpb24gY2hhbmdlIGV2ZW50XG4gICAgICogQHBhcmFtIHNvdXJjZSBTdGVwIGlucHV0IGNvbXBvbmVudFxuICAgICAqIEBwYXJhbSBwYXlsb2FkIFNlbGVjdGVkIHZhbHVlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIC8qKiBUaGUgc291cmNlIFN0ZXAgSW5wdXQgb2YgdGhlIGV2ZW50LiAqL1xuICAgICAgICBwdWJsaWMgc291cmNlOiBULFxuICAgICAgICAvKiogVGhlIG5ldyB2YWx1ZSBvZiBhIGNvbnRyb2wuICovXG4gICAgICAgIHB1YmxpYyBwYXlsb2FkOiBLXG4gICAgKSB7fVxufVxuXG5leHBvcnQgZW51bSBTdGVwSW5wdXRBbGlnbiB7XG4gICAgTGVmdCA9ICdsZWZ0JyxcbiAgICBDZW50ZXIgPSAnY2VudGVyJyxcbiAgICBSaWdodCA9ICdyaWdodCdcbn1cblxuZXhwb3J0IHR5cGUgU3RlcElucHV0U3RlcEZ1bmN0aW9uQWN0aW9uID0gJ2luY3JlYXNlJyB8ICdkZWNyZWFzZSc7XG5leHBvcnQgdHlwZSBTdGVwSW5wdXRTdGVwRnVuY3Rpb24gPSAodmFsdWU6IG51bWJlciwgYWN0aW9uOiBTdGVwSW5wdXRTdGVwRnVuY3Rpb25BY3Rpb24pID0+IG51bWJlcjtcblxuY29uc3QgQUxJR05fSU5QVVRfT1BUSU9OU19MSVNUID0gW1N0ZXBJbnB1dEFsaWduLkxlZnQsIFN0ZXBJbnB1dEFsaWduLkNlbnRlciwgU3RlcElucHV0QWxpZ24uUmlnaHRdO1xuXG4vKipcbiAqIFN0ZXBJbnB1dENvbXBvbmVudCBpcyBhIGJhc2UgYWJzdHJhY3QgY2xhc3MgdGhhdCBzaG91bGQgYmUgdXNlZFxuICogdG8gY3JlYXRlIHR5cGUgc3BlY2lmaWMgU3RlcElucHV0IGNvbXBvbmVudHMgc3VjaCBhcyBudW1iZXIsIG1vbmV5LCB1bml0T2ZNZWFzdXJlXG4gKiBUaGlzIGhvbGRzIGJhc2UgU3RlcCBJbnB1dCBmdW5jdGlvbmFsaXR5IHRoYXQgY2FuIGJlIGFic3RyYWN0ZWRcbiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU3RlcElucHV0Q29tcG9uZW50IGV4dGVuZHMgQmFzZUlucHV0IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKiogU2V0cyBpbnB1dCB2YWx1ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHZhbHVlKHZhbHVlOiBOdWxsYWJsZTxudW1iZXI+KSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5fdmFsdWUpIHtcbiAgICAgICAgICAgIHN1cGVyLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNhbkRlY3JlbWVudEluY3JlbWVudCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCB2YWx1ZSgpOiBOdWxsYWJsZTxudW1iZXI+IHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqIFNldHMgbWluaW11bSB2YWx1ZSBib3VuZGFyeSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IG1pbihtaW46IG51bWJlcikge1xuICAgICAgICB0aGlzLl9taW4gPSAhaXNOYU4obWluKSA/IG1pbiA6IC1OdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVDYW5EZWNyZW1lbnQoKTtcbiAgICB9XG4gICAgZ2V0IG1pbigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWluO1xuICAgIH1cblxuICAgIC8qKiBTZXRzIG1heGltdW0gdmFsdWUgYm91bmRhcnkgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBtYXgobWF4OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fbWF4ID0gIWlzTmFOKG1heCkgPyBtYXggOiBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVDYW5JbmNyZW1lbnQoKTtcbiAgICB9XG4gICAgZ2V0IG1heCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWF4O1xuICAgIH1cblxuICAgIC8qKiBTZXRzIGlucHV0IHN0ZXAgdmFsdWUgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzdGVwKHN0ZXA6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9jaGVja0FuZFRocm93RXJyb3JJZlN0ZXBEb2VzbnRNYXRjaFByZWNpc2lvbih0aGlzLnByZWNpc2lvbiwgc3RlcCk7XG4gICAgICAgIHRoaXMuX3N0ZXAgPSBzdGVwO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVDYW5EZWNyZW1lbnRJbmNyZW1lbnQoKTtcbiAgICB9XG4gICAgZ2V0IHN0ZXAoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0ZXA7XG4gICAgfVxuXG4gICAgLyoqIEN1c3RvbSBmdW5jdGlvbiB0byBjYWxjdWxhdGUgc3RlcCBkeW5hbWljYWxseSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHN0ZXBGbihzdGVwRm46IFN0ZXBJbnB1dFN0ZXBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLl9zdGVwRm4gPSBzdGVwRm47XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNhbkRlY3JlbWVudEluY3JlbWVudCgpO1xuICAgIH1cblxuICAgIC8qKiBOdW1iZXIgb2YgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50ICovXG4gICAgQElucHV0KClcbiAgICBzZXQgcHJlY2lzaW9uKHByZWNpc2lvbjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2NoZWNrQW5kVGhyb3dFcnJvcklmU3RlcERvZXNudE1hdGNoUHJlY2lzaW9uKHByZWNpc2lvbiwgdGhpcy5zdGVwKTtcbiAgICAgICAgdGhpcy5fcHJlY2lzaW9uID0gcHJlY2lzaW9uO1xuICAgIH1cbiAgICBnZXQgcHJlY2lzaW9uKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcmVjaXNpb247XG4gICAgfVxuXG4gICAgLyoqIFNldHMgbGFyZ2VTdGVwIG11bHRpcGxpZXIgKi9cbiAgICBASW5wdXQoKVxuICAgIGxhcmdlclN0ZXAgPSAyO1xuXG4gICAgLyoqIEhpZGVzIC0vKyBpY29ucyBhbmQgc2hvd3MgbGFiZWxzICovXG4gICAgQElucHV0KClcbiAgICBzaG93TGFiZWxzID0gZmFsc2U7XG5cbiAgICAvKiogSG9yaXpvbnRhbGx5IGFsaWducyB2YWx1ZSBpbnNpZGUgaW5wdXQgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBhbGlnbihhbGlnbjogU3RlcElucHV0QWxpZ24pIHtcbiAgICAgICAgdGhpcy5fYWxpZ24kLm5leHQoYWxpZ24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFSSUEgbGFiZWwgZm9yIGluY3JlbWVudCBidXR0b25cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGluY3JlbWVudExhYmVsOiBzdHJpbmcgPSB0aGlzLmNvbmZpZy5pbmNyZW1lbnRMYWJlbDtcblxuICAgIC8qKlxuICAgICAqIEFSSUEgbGFiZWwgZm9yIGRlY3JlbWVudCBidXR0b25cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRlY3JlbWVudExhYmVsOiBzdHJpbmcgPSB0aGlzLmNvbmZpZy5kZWNyZW1lbnRMYWJlbDtcblxuICAgIC8qKiBFbWl0cyBuZXcgdmFsdWUgd2hlbiBjb250cm9sIHZhbHVlIGhhcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFN0ZXBJbnB1dENoYW5nZUV2ZW50PigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBsYXN0RW1pdHRlZFZhbHVlOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNhbkluY3JlbWVudCA9IHRydWU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNhbkRlY3JlbWVudCA9IHRydWU7XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIEluZGljYXRlcyBpZiBjb250cm9sIGhhcyBhbiBlcnJvclxuICAgICAqL1xuICAgIGlzRXJyb3JTdGF0ZSA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgY2FuQ2hhbmdlVmFsdWUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhKHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMuZWRpdGFibGUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2NvbnRlbnREZW5zaXR5OiBDb250ZW50RGVuc2l0eSA9IHRoaXMuY29uZmlnLmNvbnRlbnREZW5zaXR5O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfYWxpZ246IFN0ZXBJbnB1dEFsaWduIHwgbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbWF4OiBudW1iZXIgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9taW46IG51bWJlciA9IC1OdW1iZXIuTUFYX1ZBTFVFO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdGVwID0gMTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3RlcEZuOiBTdGVwSW5wdXRTdGVwRnVuY3Rpb247XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ByZWNpc2lvbjogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9hbGlnbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFN0ZXBJbnB1dEFsaWduIHwgbnVsbD4obnVsbCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3BlbmRpbmdFbnRlcmVkVmFsdWU6IG51bWJlciB8IEVycm9yIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgZ2V0IF9jdXJyZW50VmFsdWUoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHBlbmRpbmdWYWx1ZSA9IHRoaXMuX3BlbmRpbmdFbnRlcmVkVmFsdWU7XG5cbiAgICAgICAgaWYgKHBlbmRpbmdWYWx1ZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwZW5kaW5nVmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwZW5kaW5nVmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgICAgIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgbmdDb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgICAgIGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXG4gICAgICAgIG5nRm9ybTogTmdGb3JtLFxuICAgICAgICBmb3JtRmllbGQ6IFBsYXRmb3JtRm9ybUZpZWxkLFxuICAgICAgICBmb3JtQ29udHJvbDogUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sLFxuICAgICAgICBwcm90ZWN0ZWQgY29uZmlnOiBTdGVwSW5wdXRDb25maWcsXG4gICAgICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgX3J0bFNlcnZpY2U6IFJ0bFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoY2QsIGVsZW1lbnRSZWYsIG5nQ29udHJvbCwgY29udHJvbENvbnRhaW5lciwgbmdGb3JtLCBmb3JtRmllbGQsIGZvcm1Db250cm9sKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNhbkRlY3JlbWVudEluY3JlbWVudCgpO1xuXG4gICAgICAgIHRoaXMuX3VwZGF0ZVZpZXdWYWx1ZSgpO1xuXG4gICAgICAgIHRoaXMubGFzdEVtaXR0ZWRWYWx1ZSA9IHRoaXMuX3ZhbHVlO1xuXG4gICAgICAgIHRoaXMuX2xpc3RlblRvRm9ybUVycm9yU3RhdGUoKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub0FsaWduKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBPdmVycmlkZSB3cml0ZVZhbHVlIG1ldGhvZCB0byBrZWVwIGlucHV0IHZpZXcgdmFsdWUgdXAgdG8gZGF0ZVxuICAgICAqL1xuICAgIHdyaXRlVmFsdWUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBzdXBlci53cml0ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlVmlld1ZhbHVlKCk7XG4gICAgICAgIHRoaXMuX3Jlc2V0UGVuZGluZ0VudGVyZWRWYWx1ZSgpO1xuICAgIH1cblxuICAgIC8qKiBJbmNyZWFzZSB2YWx1ZSAqL1xuICAgIGluY3JlYXNlKHN0ZXAgPSB0aGlzLl9nZXRTdGVwVmFsdWVGb3JJbmNyZWFzZSgpKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jYW5JbmNyZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWx1ZSA9IGFkZEFuZEN1dEZsb2F0aW5nTnVtYmVyRGlzdG9ydGlvbih0aGlzLl9jdXJyZW50VmFsdWUsIHN0ZXApO1xuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5fdmFsaWRhdGVWYWx1ZUJ5TGltaXRzKHZhbHVlKTtcbiAgICAgICAgdGhpcy5fZW1pdENoYW5nZWRWYWx1ZSgpO1xuICAgIH1cblxuICAgIC8qKiBEZWNyZWFzZSB2YWx1ZSAqL1xuICAgIGRlY3JlYXNlKHN0ZXAgPSB0aGlzLl9nZXRTdGVwVmFsdWVGb3JEZWNyZWFzZSgpKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jYW5EZWNyZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWx1ZSA9IGFkZEFuZEN1dEZsb2F0aW5nTnVtYmVyRGlzdG9ydGlvbih0aGlzLl9jdXJyZW50VmFsdWUsIC1zdGVwKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuX3ZhbGlkYXRlVmFsdWVCeUxpbWl0cyh2YWx1ZSk7XG4gICAgICAgIHRoaXMuX2VtaXRDaGFuZ2VkVmFsdWUoKTtcbiAgICB9XG5cbiAgICAvKiogSW5jcmVhc2UgdmFsdWUgYnkgbGFyZ2Ugc3RlcCAqL1xuICAgIGxhcmdlU3RlcEluY3JlYXNlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGVwID0gdGhpcy5fZ2V0U3RlcFZhbHVlRm9ySW5jcmVhc2UoKSAqIHRoaXMubGFyZ2VyU3RlcDtcbiAgICAgICAgdGhpcy5pbmNyZWFzZShzdGVwKTtcbiAgICB9XG5cbiAgICAvKiogRGVjcmVhc2UgdmFsdWUgYnkgbGFyZ2Ugc3RlcCAqL1xuICAgIGxhcmdlU3RlcERlY3JlYXNlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGVwID0gdGhpcy5fZ2V0U3RlcFZhbHVlRm9yRGVjcmVhc2UoKSAqIHRoaXMubGFyZ2VyU3RlcDtcbiAgICAgICAgdGhpcy5kZWNyZWFzZShzdGVwKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIGNhdGNoIHZhbHVlIGR1cmluZyBlbnRlcmluZyBmcm9tIHZpZXcuXG4gICAgICovXG4gICAgb25FbnRlclZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVmFsdWUgPSB0aGlzLnBhcnNlVmFsdWVJbkZvY3VzTW9kZSh2YWx1ZSk7XG4gICAgICAgIGxldCBwZW5kaW5nVmFsdWUgPSBwYXJzZWRWYWx1ZTtcblxuICAgICAgICBpZiAocGVuZGluZ1ZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBwZW5kaW5nVmFsdWUgPSB0aGlzLl92YWxpZGF0ZVZhbHVlQnlMaW1pdHMocGVuZGluZ1ZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNvdWxkIG5vdCBwYXJzZSB2YWx1ZSwgdmFsdWUgaXMgaW52YWxpZFxuICAgICAgICBpZiAocGVuZGluZ1ZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRQZW5kaW5nRW50ZXJlZFZhbHVlKG5ldyBFcnJvcigndmFsdWUgaXMgaW52YWxpZCcpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFBlbmRpbmdFbnRlcmVkVmFsdWUocGVuZGluZ1ZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogQ29tbWl0IGVudGVyZWQgdmFsdWUgZnJvbSB2aWV3LlxuICAgICAqL1xuICAgIGNvbW1pdEVudGVyZWRWYWx1ZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLl9jdXJyZW50VmFsdWU7XG5cbiAgICAgICAgY29uc3QgbmVlZFRvVXBkYXRlVmlldyA9IHRoaXMuX3ZhbHVlID09PSBuZXdWYWx1ZTtcblxuICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG5cbiAgICAgICAgaWYgKG5lZWRUb1VwZGF0ZVZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVZpZXdWYWx1ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3ZhbHVlICE9PSB0aGlzLmxhc3RFbWl0dGVkVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFuZ2VkVmFsdWUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogSW5kaWNhdGVzIHdoZW4gaW5wdXQgZ2V0cyBmb2N1c2VkXG4gICAgICovXG4gICAgb25Gb2N1cygpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuX29uRm9jdXNDaGFuZ2VkKHRydWUpO1xuICAgICAgICAvLyBXaGVuIGZvY3VzIGhhcHBlbnMgYnkgXCJUYWJcIiBrZXkgYW4gaW5wdXQgZmllbGQgdmFsdWUgZ2V0cyBzZWxlY3RlZCBieSBkZWZhdWx0LlxuICAgICAgICAvLyBJbiBjYXNlcyB3aGVuIG5ld19mb3JtYXR0ZWRfdmFsdWUgIT09IHByZXZpb3VzX3ZhbHVlIHRoZSBzZWxlY3Rpb24gZ2V0cyBsb3N0LlxuICAgICAgICAvLyBTbyBpdCdzIG5lZWRlZCB0byB0cmFjayBzZWxlY3Rpb24gYmVmb3JlIG5ldyB2YWx1ZSByZW5kZXJpbmcgYW5kIHJlc3RvcmUgaXQuXG4gICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCB9ID0gdGhpcy5fZ2V0VmFsdWVTZWxlY3Rpb24oKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlVmlld1ZhbHVlKCk7XG4gICAgICAgIGlmIChzZWxlY3Rpb25FbmQgLSBzZWxlY3Rpb25TdGFydCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFZhbHVlU2VsZWN0aW9uKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBJbmRpY2F0ZXMgd2hlbiBpbnB1dCBsb3NlcyBmb2N1c1xuICAgICAqL1xuICAgIG9uQmx1cigpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuX29uRm9jdXNDaGFuZ2VkKGZhbHNlKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlVmlld1ZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqIENyZWF0ZSB2YWx1ZUNoYW5nZSBldmVudCAqL1xuICAgIGFic3RyYWN0IGNyZWF0ZUNoYW5nZUV2ZW50KHZhbHVlOiBudW1iZXIpOiBTdGVwSW5wdXRDaGFuZ2VFdmVudDtcblxuICAgIC8qKiBGb3JtYXQgdmFsdWUgZm9yIHZpZXcgcHJlc2VudGF0aW9uICovXG4gICAgYWJzdHJhY3QgZm9ybWF0VmFsdWUodmFsdWU6IG51bWJlciB8IG51bGwpOiBzdHJpbmc7XG5cbiAgICAvKiogRm9ybWF0IHZhbHVlIGZvciBcImluIGZvY3VzXCIgbW9kZSAqL1xuICAgIGFic3RyYWN0IGZvcm1hdFZhbHVlSW5Gb2N1c01vZGUodmFsdWU6IG51bWJlcik6IHN0cmluZztcblxuICAgIC8qKiBQYXJzZSB2YWx1ZSBlbnRlcmVkIFwiaW4gZm9jdXNcIiBtb2RlICovXG4gICAgYWJzdHJhY3QgcGFyc2VWYWx1ZUluRm9jdXNNb2RlKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIgfCBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub0Zvcm1FcnJvclN0YXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlc1xuICAgICAgICAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5pc0Vycm9yU3RhdGU7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0Vycm9yU3RhdGUgPSB0aGlzLnN0YXRlID09PSAnZXJyb3InO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRXJyb3JTdGF0ZSAhPT0gb2xkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub0FsaWduKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hbGlnbiRcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKChhbGlnbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3J0bFNlcnZpY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihhbGlnbik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcnRsU2VydmljZS5ydGwucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgoaXNSdGwpOiBTdGVwSW5wdXRBbGlnbiB8IG51bGwgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQUxJR05fSU5QVVRfT1BUSU9OU19MSVNULmluY2x1ZGVzKGFsaWduISkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1J0bCAmJiBhbGlnbiA9PT0gU3RlcElucHV0QWxpZ24uTGVmdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RlcElucHV0QWxpZ24uUmlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1J0bCAmJiBhbGlnbiA9PT0gU3RlcElucHV0QWxpZ24uUmlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0ZXBJbnB1dEFsaWduLkxlZnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhbGlnbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGFsaWduKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWxpZ24gPSBhbGlnbjtcbiAgICAgICAgICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZW1pdENoYW5nZWRWYWx1ZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl92YWx1ZTtcbiAgICAgICAgdGhpcy5sYXN0RW1pdHRlZFZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLmNyZWF0ZUNoYW5nZUV2ZW50KHZhbHVlKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRTdGVwVmFsdWVGb3JJbmNyZWFzZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0U3RlcFZhbHVlKCdpbmNyZWFzZScpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0U3RlcFZhbHVlRm9yRGVjcmVhc2UoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFN0ZXBWYWx1ZSgnZGVjcmVhc2UnKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIEdldCBzdGVwIHZhbHVlIGJhc2VkIGVpdGhlciBvbiBcInN0ZXBGblwiIG9yIFwic3RlcFwiXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0U3RlcFZhbHVlKGFjdGlvbjogU3RlcElucHV0U3RlcEZ1bmN0aW9uQWN0aW9uKTogbnVtYmVyIHtcbiAgICAgICAgLy8gc3RlRm4gaGFzIHByZWNlZGVuY2VcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9zdGVwRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhbGN1bGF0ZWRTdGVwID0gdGhpcy5fc3RlcEZuKHRoaXMuX2N1cnJlbnRWYWx1ZSA/PyB0aGlzLm1pbiwgYWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxjdWxhdGVkU3RlcDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zdGVwO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlVmlld1ZhbHVlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSB0aGlzLl9mb3JtYXRWYWx1ZSgpO1xuICAgICAgICB0aGlzLl9yZW5kZXJWYWx1ZShmb3JtYXR0ZWQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9ybWF0VmFsdWUodmFsdWUgPSB0aGlzLl92YWx1ZSk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmZvY3VzZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdFZhbHVlSW5Gb2N1c01vZGUodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdFZhbHVlKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3JlbmRlclZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5wdXRFbCA9IHRoaXMuX2dldElucHV0TmF0aXZlRWxlbWVudCgpO1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eShpbnB1dEVsLCAndmFsdWUnLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRJbnB1dE5hdGl2ZUVsZW1lbnQoKTogSFRNTElucHV0RWxlbWVudCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0VmFsdWVTZWxlY3Rpb24oKTogeyBzZWxlY3Rpb25TdGFydDogbnVtYmVyOyBzZWxlY3Rpb25FbmQ6IG51bWJlciB9IHtcbiAgICAgICAgY29uc3QgaW5wdXRFbCA9IHRoaXMuX2dldElucHV0TmF0aXZlRWxlbWVudCgpO1xuICAgICAgICBjb25zdCBzZWxlY3Rpb25TdGFydCA9IGlucHV0RWw/LnNlbGVjdGlvblN0YXJ0IHx8IDA7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbkVuZCA9IGlucHV0RWw/LnNlbGVjdGlvbkVuZCB8fCAwO1xuICAgICAgICByZXR1cm4geyBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kIH07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRWYWx1ZVNlbGVjdGlvbihzZWxlY3Rpb25TdGFydDogbnVtYmVyLCBzZWxlY3Rpb25FbmQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnB1dEVsID0gdGhpcy5fZ2V0SW5wdXROYXRpdmVFbGVtZW50KCk7XG4gICAgICAgIGlmICghaW5wdXRFbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlucHV0RWwuc2V0U2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVDYW5JbmNyZW1lbnQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSB0aGlzLl9nZXRTdGVwVmFsdWVGb3JJbmNyZWFzZSgpO1xuICAgICAgICB0aGlzLmNhbkluY3JlbWVudCA9ICh0aGlzLl92YWx1ZSB8fCAwKSArIHN0ZXAgPD0gdGhpcy5fbWF4O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlQ2FuRGVjcmVtZW50KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGVwID0gdGhpcy5fZ2V0U3RlcFZhbHVlRm9yRGVjcmVhc2UoKTtcbiAgICAgICAgdGhpcy5jYW5EZWNyZW1lbnQgPSAodGhpcy5fdmFsdWUgfHwgMCkgLSBzdGVwID49IHRoaXMuX21pbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZUNhbkRlY3JlbWVudEluY3JlbWVudCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlQ2FuRGVjcmVtZW50KCk7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNhbkluY3JlbWVudCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdmFsaWRhdGVWYWx1ZUJ5TGltaXRzKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgodmFsdWUsIHRoaXMuX21pbiksIHRoaXMuX21heCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jaGVja0FuZFRocm93RXJyb3JJZlN0ZXBEb2VzbnRNYXRjaFByZWNpc2lvbihwcmVjaXNpb246IG51bWJlciwgc3RlcDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIC8vIENoZWNrIGlmIFwicHJlY2lzaW9uXCIgaXMgdmFsaWQgY29tcGFyaW5nIHRvIFwic3RlcFwiXG4gICAgICAgIGNvbnN0IHN0ZXBEZWNpbWFsTGVuZ3RoID0gZ2V0TnVtYmVyRGVjaW1hbExlbmd0aChzdGVwKTtcbiAgICAgICAgY29uc3QgcHJlY2lzaW9uRGVjaW1hbExlbmd0aCA9IGdldE51bWJlckRlY2ltYWxMZW5ndGgocHJlY2lzaW9uKTtcbiAgICAgICAgaWYgKHN0ZXBEZWNpbWFsTGVuZ3RoID4gcHJlY2lzaW9uRGVjaW1hbExlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgYFN0ZXAgaW5wdXQ6IFRoZSB2YWx1ZSBvZiBzdGVwIHByb3BlcnR5IGNhbiBub3QgY29udGFpbiBtb3JlIGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludCB0aGFuIHdoYXQgaXMgc2V0IHRvIHRoZSBwcmVjaXNpb24gcHJvcGVydHlgXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRQZW5kaW5nRW50ZXJlZFZhbHVlKHZhbHVlOiBudW1iZXIgfCBFcnJvcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9wZW5kaW5nRW50ZXJlZFZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZXNldFBlbmRpbmdFbnRlcmVkVmFsdWUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdFbnRlcmVkVmFsdWUgPSBudWxsO1xuICAgIH1cbn1cbiJdfQ==
414
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5zdGVwLWlucHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL2Zvcm0vc3RlcC1pbnB1dC9iYXNlLnN0ZXAtaW5wdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLFNBQVMsRUFDVCxTQUFTLEVBRVQsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNELE9BQU8sRUFBa0IsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFeEUsT0FBTyxFQUFFLFNBQVMsRUFBRSx3QkFBd0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzFHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7O0FBRTlGLG1FQUFtRTtBQUNuRSxNQUFNLE9BQU8sb0JBQW9CO0lBQzdCOzs7O09BSUc7SUFDSDtJQUNJLDBDQUEwQztJQUNuQyxNQUFTO0lBQ2hCLGtDQUFrQztJQUMzQixPQUFVO1FBRlYsV0FBTSxHQUFOLE1BQU0sQ0FBRztRQUVULFlBQU8sR0FBUCxPQUFPLENBQUc7SUFDbEIsQ0FBQztDQUNQO0FBRUQsTUFBTSxDQUFOLElBQVksY0FJWDtBQUpELFdBQVksY0FBYztJQUN0QiwrQkFBYSxDQUFBO0lBQ2IsbUNB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VkFJRixLQUFLO3NCQURSLEtBQUs7Z0JBYUYsR0FBRztzQkFETixLQUFLO2dCQVdGLEdBQUc7c0JBRE4sS0FBSztnQkFXRixJQUFJO3NCQURQLEtBQUs7Z0JBWUYsTUFBTTtzQkFEVCxLQUFLO2dCQVFGLFNBQVM7c0JBRFosS0FBSztnQkFXTixVQUFVO3NCQURULEtBQUs7Z0JBS04sVUFBVTtzQkFEVCxLQUFLO2dCQUtGLEtBQUs7c0JBRFIsS0FBSztnQkFTTixjQUFjO3NCQURiLEtBQUs7Z0JBT04sY0FBYztzQkFEYixLQUFLO2dCQUtOLFdBQVc7c0JBRFYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBSZW5kZXJlcjIsXG4gICAgRGlyZWN0aXZlLFxuICAgIE9uSW5pdCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBFbGVtZW50UmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdGb3JtLCBOZ0NvbnRyb2wsIENvbnRyb2xDb250YWluZXIgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwsIHN3aXRjaE1hcCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eSwgUnRsU2VydmljZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQmFzZUlucHV0LCBQbGF0Zm9ybUZvcm1GaWVsZENvbnRyb2wsIFBsYXRmb3JtRm9ybUZpZWxkIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zaGFyZWQnO1xuaW1wb3J0IHsgU3RlcElucHV0Q29uZmlnIH0gZnJvbSAnLi9zdGVwLWlucHV0LmNvbmZpZyc7XG5pbXBvcnQgeyBhZGRBbmRDdXRGbG9hdGluZ051bWJlckRpc3RvcnRpb24sIGdldE51bWJlckRlY2ltYWxMZW5ndGggfSBmcm9tICcuL3N0ZXAtaW5wdXQudXRpbCc7XG5cbi8qKiBDaGFuZ2UgZXZlbnQgb2JqZWN0IGVtaXR0ZWQgYnkgUGxhdGZvcm0gU3RlcCBJbnB1dCBjb21wb25lbnQgKi9cbmV4cG9ydCBjbGFzcyBTdGVwSW5wdXRDaGFuZ2VFdmVudDxUIGV4dGVuZHMgU3RlcElucHV0Q29tcG9uZW50ID0gU3RlcElucHV0Q29tcG9uZW50LCBLID0gbnVtYmVyPiB7XG4gICAgLyoqXG4gICAgICogU3RlcCBpbnB1dCBzZWxlY3Rpb24gY2hhbmdlIGV2ZW50XG4gICAgICogQHBhcmFtIHNvdXJjZSBTdGVwIGlucHV0IGNvbXBvbmVudFxuICAgICAqIEBwYXJhbSBwYXlsb2FkIFNlbGVjdGVkIHZhbHVlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIC8qKiBUaGUgc291cmNlIFN0ZXAgSW5wdXQgb2YgdGhlIGV2ZW50LiAqL1xuICAgICAgICBwdWJsaWMgc291cmNlOiBULFxuICAgICAgICAvKiogVGhlIG5ldyB2YWx1ZSBvZiBhIGNvbnRyb2wuICovXG4gICAgICAgIHB1YmxpYyBwYXlsb2FkOiBLXG4gICAgKSB7fVxufVxuXG5leHBvcnQgZW51bSBTdGVwSW5wdXRBbGlnbiB7XG4gICAgTGVmdCA9ICdsZWZ0JyxcbiAgICBDZW50ZXIgPSAnY2VudGVyJyxcbiAgICBSaWdodCA9ICdyaWdodCdcbn1cblxuZXhwb3J0IHR5cGUgU3RlcElucHV0U3RlcEZ1bmN0aW9uQWN0aW9uID0gJ2luY3JlYXNlJyB8ICdkZWNyZWFzZSc7XG5leHBvcnQgdHlwZSBTdGVwSW5wdXRTdGVwRnVuY3Rpb24gPSAodmFsdWU6IG51bWJlciwgYWN0aW9uOiBTdGVwSW5wdXRTdGVwRnVuY3Rpb25BY3Rpb24pID0+IG51bWJlcjtcblxuY29uc3QgQUxJR05fSU5QVVRfT1BUSU9OU19MSVNUID0gW1N0ZXBJbnB1dEFsaWduLkxlZnQsIFN0ZXBJbnB1dEFsaWduLkNlbnRlciwgU3RlcElucHV0QWxpZ24uUmlnaHRdO1xuXG4vKipcbiAqIFN0ZXBJbnB1dENvbXBvbmVudCBpcyBhIGJhc2UgYWJzdHJhY3QgY2xhc3MgdGhhdCBzaG91bGQgYmUgdXNlZFxuICogdG8gY3JlYXRlIHR5cGUgc3BlY2lmaWMgU3RlcElucHV0IGNvbXBvbmVudHMgc3VjaCBhcyBudW1iZXIsIG1vbmV5LCB1bml0T2ZNZWFzdXJlXG4gKiBUaGlzIGhvbGRzIGJhc2UgU3RlcCBJbnB1dCBmdW5jdGlvbmFsaXR5IHRoYXQgY2FuIGJlIGFic3RyYWN0ZWRcbiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU3RlcElucHV0Q29tcG9uZW50IGV4dGVuZHMgQmFzZUlucHV0IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKiogU2V0cyBpbnB1dCB2YWx1ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHZhbHVlKHZhbHVlOiBOdWxsYWJsZTxudW1iZXI+KSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5fdmFsdWUpIHtcbiAgICAgICAgICAgIHN1cGVyLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNhbkRlY3JlbWVudEluY3JlbWVudCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCB2YWx1ZSgpOiBOdWxsYWJsZTxudW1iZXI+IHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqIFNldHMgbWluaW11bSB2YWx1ZSBib3VuZGFyeSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IG1pbihtaW46IG51bWJlcikge1xuICAgICAgICB0aGlzLl9taW4gPSAhaXNOYU4obWluKSA/IG1pbiA6IC1OdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVDYW5EZWNyZW1lbnQoKTtcbiAgICB9XG4gICAgZ2V0IG1pbigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWluO1xuICAgIH1cblxuICAgIC8qKiBTZXRzIG1heGltdW0gdmFsdWUgYm91bmRhcnkgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBtYXgobWF4OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fbWF4ID0gIWlzTmFOKG1heCkgPyBtYXggOiBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVDYW5JbmNyZW1lbnQoKTtcbiAgICB9XG4gICAgZ2V0IG1heCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWF4O1xuICAgIH1cblxuICAgIC8qKiBTZXRzIGlucHV0IHN0ZXAgdmFsdWUgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzdGVwKHN0ZXA6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9jaGVja0FuZFRocm93RXJyb3JJZlN0ZXBEb2VzbnRNYXRjaFByZWNpc2lvbih0aGlzLnByZWNpc2lvbiwgc3RlcCk7XG4gICAgICAgIHRoaXMuX3N0ZXAgPSBzdGVwO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVDYW5EZWNyZW1lbnRJbmNyZW1lbnQoKTtcbiAgICB9XG4gICAgZ2V0IHN0ZXAoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0ZXA7XG4gICAgfVxuXG4gICAgLyoqIEN1c3RvbSBmdW5jdGlvbiB0byBjYWxjdWxhdGUgc3RlcCBkeW5hbWljYWxseSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHN0ZXBGbihzdGVwRm46IFN0ZXBJbnB1dFN0ZXBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLl9zdGVwRm4gPSBzdGVwRm47XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNhbkRlY3JlbWVudEluY3JlbWVudCgpO1xuICAgIH1cblxuICAgIC8qKiBOdW1iZXIgb2YgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50ICovXG4gICAgQElucHV0KClcbiAgICBzZXQgcHJlY2lzaW9uKHByZWNpc2lvbjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2NoZWNrQW5kVGhyb3dFcnJvcklmU3RlcERvZXNudE1hdGNoUHJlY2lzaW9uKHByZWNpc2lvbiwgdGhpcy5zdGVwKTtcbiAgICAgICAgdGhpcy5fcHJlY2lzaW9uID0gcHJlY2lzaW9uO1xuICAgIH1cbiAgICBnZXQgcHJlY2lzaW9uKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcmVjaXNpb247XG4gICAgfVxuXG4gICAgLyoqIFNldHMgbGFyZ2VTdGVwIG11bHRpcGxpZXIgKi9cbiAgICBASW5wdXQoKVxuICAgIGxhcmdlclN0ZXAgPSAyO1xuXG4gICAgLyoqIEhpZGVzIC0vKyBpY29ucyBhbmQgc2hvd3MgbGFiZWxzICovXG4gICAgQElucHV0KClcbiAgICBzaG93TGFiZWxzID0gZmFsc2U7XG5cbiAgICAvKiogSG9yaXpvbnRhbGx5IGFsaWducyB2YWx1ZSBpbnNpZGUgaW5wdXQgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBhbGlnbihhbGlnbjogU3RlcElucHV0QWxpZ24pIHtcbiAgICAgICAgdGhpcy5fYWxpZ24kLm5leHQoYWxpZ24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFSSUEgbGFiZWwgZm9yIGluY3JlbWVudCBidXR0b25cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGluY3JlbWVudExhYmVsOiBzdHJpbmcgPSB0aGlzLmNvbmZpZy5pbmNyZW1lbnRMYWJlbDtcblxuICAgIC8qKlxuICAgICAqIEFSSUEgbGFiZWwgZm9yIGRlY3JlbWVudCBidXR0b25cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRlY3JlbWVudExhYmVsOiBzdHJpbmcgPSB0aGlzLmNvbmZpZy5kZWNyZW1lbnRMYWJlbDtcblxuICAgIC8qKiBFbWl0cyBuZXcgdmFsdWUgd2hlbiBjb250cm9sIHZhbHVlIGhhcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFN0ZXBJbnB1dENoYW5nZUV2ZW50PigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBsYXN0RW1pdHRlZFZhbHVlOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNhbkluY3JlbWVudCA9IHRydWU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNhbkRlY3JlbWVudCA9IHRydWU7XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIEluZGljYXRlcyBpZiBjb250cm9sIGhhcyBhbiBlcnJvclxuICAgICAqL1xuICAgIGlzRXJyb3JTdGF0ZSA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgY2FuQ2hhbmdlVmFsdWUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhKHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMuZWRpdGFibGUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2NvbnRlbnREZW5zaXR5OiBDb250ZW50RGVuc2l0eSA9IHRoaXMuY29uZmlnLmNvbnRlbnREZW5zaXR5O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfYWxpZ246IFN0ZXBJbnB1dEFsaWduIHwgbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbWF4OiBudW1iZXIgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9taW46IG51bWJlciA9IC1OdW1iZXIuTUFYX1ZBTFVFO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdGVwID0gMTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3RlcEZuOiBTdGVwSW5wdXRTdGVwRnVuY3Rpb247XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ByZWNpc2lvbjogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9hbGlnbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFN0ZXBJbnB1dEFsaWduIHwgbnVsbD4obnVsbCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3BlbmRpbmdFbnRlcmVkVmFsdWU6IG51bWJlciB8IEVycm9yIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgZ2V0IF9jdXJyZW50VmFsdWUoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHBlbmRpbmdWYWx1ZSA9IHRoaXMuX3BlbmRpbmdFbnRlcmVkVmFsdWU7XG5cbiAgICAgICAgaWYgKHBlbmRpbmdWYWx1ZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwZW5kaW5nVmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwZW5kaW5nVmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgICAgIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgbmdDb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgICAgIGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXG4gICAgICAgIG5nRm9ybTogTmdGb3JtLFxuICAgICAgICBmb3JtRmllbGQ6IFBsYXRmb3JtRm9ybUZpZWxkLFxuICAgICAgICBmb3JtQ29udHJvbDogUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sLFxuICAgICAgICBwcm90ZWN0ZWQgY29uZmlnOiBTdGVwSW5wdXRDb25maWcsXG4gICAgICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgX3J0bFNlcnZpY2U6IFJ0bFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoY2QsIGVsZW1lbnRSZWYsIG5nQ29udHJvbCwgY29udHJvbENvbnRhaW5lciwgbmdGb3JtLCBmb3JtRmllbGQsIGZvcm1Db250cm9sKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNhbkRlY3JlbWVudEluY3JlbWVudCgpO1xuXG4gICAgICAgIHRoaXMuX3VwZGF0ZVZpZXdWYWx1ZSgpO1xuXG4gICAgICAgIHRoaXMubGFzdEVtaXR0ZWRWYWx1ZSA9IHRoaXMuX3ZhbHVlO1xuXG4gICAgICAgIHRoaXMuX2xpc3RlblRvRm9ybUVycm9yU3RhdGUoKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub0FsaWduKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBPdmVycmlkZSB3cml0ZVZhbHVlIG1ldGhvZCB0byBrZWVwIGlucHV0IHZpZXcgdmFsdWUgdXAgdG8gZGF0ZVxuICAgICAqL1xuICAgIHdyaXRlVmFsdWUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBzdXBlci53cml0ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlVmlld1ZhbHVlKCk7XG4gICAgICAgIHRoaXMuX3Jlc2V0UGVuZGluZ0VudGVyZWRWYWx1ZSgpO1xuICAgIH1cblxuICAgIC8qKiBJbmNyZWFzZSB2YWx1ZSAqL1xuICAgIGluY3JlYXNlKHN0ZXAgPSB0aGlzLl9nZXRTdGVwVmFsdWVGb3JJbmNyZWFzZSgpKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jYW5JbmNyZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWx1ZSA9IGFkZEFuZEN1dEZsb2F0aW5nTnVtYmVyRGlzdG9ydGlvbih0aGlzLl9jdXJyZW50VmFsdWUsIHN0ZXApO1xuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5fdmFsaWRhdGVWYWx1ZUJ5TGltaXRzKHZhbHVlKTtcbiAgICAgICAgdGhpcy5fZW1pdENoYW5nZWRWYWx1ZSgpO1xuICAgIH1cblxuICAgIC8qKiBEZWNyZWFzZSB2YWx1ZSAqL1xuICAgIGRlY3JlYXNlKHN0ZXAgPSB0aGlzLl9nZXRTdGVwVmFsdWVGb3JEZWNyZWFzZSgpKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jYW5EZWNyZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWx1ZSA9IGFkZEFuZEN1dEZsb2F0aW5nTnVtYmVyRGlzdG9ydGlvbih0aGlzLl9jdXJyZW50VmFsdWUsIC1zdGVwKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuX3ZhbGlkYXRlVmFsdWVCeUxpbWl0cyh2YWx1ZSk7XG4gICAgICAgIHRoaXMuX2VtaXRDaGFuZ2VkVmFsdWUoKTtcbiAgICB9XG5cbiAgICAvKiogSW5jcmVhc2UgdmFsdWUgYnkgbGFyZ2Ugc3RlcCAqL1xuICAgIGxhcmdlU3RlcEluY3JlYXNlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGVwID0gdGhpcy5fZ2V0U3RlcFZhbHVlRm9ySW5jcmVhc2UoKSAqIHRoaXMubGFyZ2VyU3RlcDtcbiAgICAgICAgdGhpcy5pbmNyZWFzZShzdGVwKTtcbiAgICB9XG5cbiAgICAvKiogRGVjcmVhc2UgdmFsdWUgYnkgbGFyZ2Ugc3RlcCAqL1xuICAgIGxhcmdlU3RlcERlY3JlYXNlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGVwID0gdGhpcy5fZ2V0U3RlcFZhbHVlRm9yRGVjcmVhc2UoKSAqIHRoaXMubGFyZ2VyU3RlcDtcbiAgICAgICAgdGhpcy5kZWNyZWFzZShzdGVwKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIGNhdGNoIHZhbHVlIGR1cmluZyBlbnRlcmluZyBmcm9tIHZpZXcuXG4gICAgICovXG4gICAgb25FbnRlclZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVmFsdWUgPSB0aGlzLnBhcnNlVmFsdWVJbkZvY3VzTW9kZSh2YWx1ZSk7XG4gICAgICAgIGxldCBwZW5kaW5nVmFsdWUgPSBwYXJzZWRWYWx1ZTtcblxuICAgICAgICBpZiAocGVuZGluZ1ZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBwZW5kaW5nVmFsdWUgPSB0aGlzLl92YWxpZGF0ZVZhbHVlQnlMaW1pdHMocGVuZGluZ1ZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNvdWxkIG5vdCBwYXJzZSB2YWx1ZSwgdmFsdWUgaXMgaW52YWxpZFxuICAgICAgICBpZiAocGVuZGluZ1ZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRQZW5kaW5nRW50ZXJlZFZhbHVlKG5ldyBFcnJvcigndmFsdWUgaXMgaW52YWxpZCcpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFBlbmRpbmdFbnRlcmVkVmFsdWUocGVuZGluZ1ZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogQ29tbWl0IGVudGVyZWQgdmFsdWUgZnJvbSB2aWV3LlxuICAgICAqL1xuICAgIGNvbW1pdEVudGVyZWRWYWx1ZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLl9jdXJyZW50VmFsdWU7XG5cbiAgICAgICAgY29uc3QgbmVlZFRvVXBkYXRlVmlldyA9IHRoaXMuX3ZhbHVlID09PSBuZXdWYWx1ZTtcblxuICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG5cbiAgICAgICAgaWYgKG5lZWRUb1VwZGF0ZVZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVZpZXdWYWx1ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3ZhbHVlICE9PSB0aGlzLmxhc3RFbWl0dGVkVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFuZ2VkVmFsdWUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogSW5kaWNhdGVzIHdoZW4gaW5wdXQgZ2V0cyBmb2N1c2VkXG4gICAgICovXG4gICAgb25Gb2N1cygpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuX29uRm9jdXNDaGFuZ2VkKHRydWUpO1xuICAgICAgICAvLyBXaGVuIGZvY3VzIGhhcHBlbnMgYnkgXCJUYWJcIiBrZXkgYW4gaW5wdXQgZmllbGQgdmFsdWUgZ2V0cyBzZWxlY3RlZCBieSBkZWZhdWx0LlxuICAgICAgICAvLyBJbiBjYXNlcyB3aGVuIG5ld19mb3JtYXR0ZWRfdmFsdWUgIT09IHByZXZpb3VzX3ZhbHVlIHRoZSBzZWxlY3Rpb24gZ2V0cyBsb3N0LlxuICAgICAgICAvLyBTbyBpdCdzIG5lZWRlZCB0byB0cmFjayBzZWxlY3Rpb24gYmVmb3JlIG5ldyB2YWx1ZSByZW5kZXJpbmcgYW5kIHJlc3RvcmUgaXQuXG4gICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCB9ID0gdGhpcy5fZ2V0VmFsdWVTZWxlY3Rpb24oKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlVmlld1ZhbHVlKCk7XG4gICAgICAgIGlmIChzZWxlY3Rpb25FbmQgLSBzZWxlY3Rpb25TdGFydCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFZhbHVlU2VsZWN0aW9uKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBJbmRpY2F0ZXMgd2hlbiBpbnB1dCBsb3NlcyBmb2N1c1xuICAgICAqL1xuICAgIG9uQmx1cigpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuX29uRm9jdXNDaGFuZ2VkKGZhbHNlKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlVmlld1ZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqIENyZWF0ZSB2YWx1ZUNoYW5nZSBldmVudCAqL1xuICAgIGFic3RyYWN0IGNyZWF0ZUNoYW5nZUV2ZW50KHZhbHVlOiBudW1iZXIpOiBTdGVwSW5wdXRDaGFuZ2VFdmVudDtcblxuICAgIC8qKiBGb3JtYXQgdmFsdWUgZm9yIHZpZXcgcHJlc2VudGF0aW9uICovXG4gICAgYWJzdHJhY3QgZm9ybWF0VmFsdWUodmFsdWU6IG51bWJlciB8IG51bGwpOiBzdHJpbmc7XG5cbiAgICAvKiogRm9ybWF0IHZhbHVlIGZvciBcImluIGZvY3VzXCIgbW9kZSAqL1xuICAgIGFic3RyYWN0IGZvcm1hdFZhbHVlSW5Gb2N1c01vZGUodmFsdWU6IG51bWJlcik6IHN0cmluZztcblxuICAgIC8qKiBQYXJzZSB2YWx1ZSBlbnRlcmVkIFwiaW4gZm9jdXNcIiBtb2RlICovXG4gICAgYWJzdHJhY3QgcGFyc2VWYWx1ZUluRm9jdXNNb2RlKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIgfCBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub0Zvcm1FcnJvclN0YXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlc1xuICAgICAgICAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5pc0Vycm9yU3RhdGU7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0Vycm9yU3RhdGUgPSB0aGlzLnN0YXRlID09PSAnZXJyb3InO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRXJyb3JTdGF0ZSAhPT0gb2xkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub0FsaWduKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hbGlnbiRcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKChhbGlnbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3J0bFNlcnZpY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihhbGlnbik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcnRsU2VydmljZS5ydGwucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgoaXNSdGwpOiBTdGVwSW5wdXRBbGlnbiB8IG51bGwgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQUxJR05fSU5QVVRfT1BUSU9OU19MSVNULmluY2x1ZGVzKGFsaWduISkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1J0bCAmJiBhbGlnbiA9PT0gU3RlcElucHV0QWxpZ24uTGVmdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RlcElucHV0QWxpZ24uUmlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1J0bCAmJiBhbGlnbiA9PT0gU3RlcElucHV0QWxpZ24uUmlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0ZXBJbnB1dEFsaWduLkxlZnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhbGlnbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGFsaWduKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWxpZ24gPSBhbGlnbjtcbiAgICAgICAgICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZW1pdENoYW5nZWRWYWx1ZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl92YWx1ZTtcbiAgICAgICAgdGhpcy5sYXN0RW1pdHRlZFZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLmNyZWF0ZUNoYW5nZUV2ZW50KHZhbHVlKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRTdGVwVmFsdWVGb3JJbmNyZWFzZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0U3RlcFZhbHVlKCdpbmNyZWFzZScpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0U3RlcFZhbHVlRm9yRGVjcmVhc2UoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFN0ZXBWYWx1ZSgnZGVjcmVhc2UnKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIEdldCBzdGVwIHZhbHVlIGJhc2VkIGVpdGhlciBvbiBcInN0ZXBGblwiIG9yIFwic3RlcFwiXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0U3RlcFZhbHVlKGFjdGlvbjogU3RlcElucHV0U3RlcEZ1bmN0aW9uQWN0aW9uKTogbnVtYmVyIHtcbiAgICAgICAgLy8gc3RlRm4gaGFzIHByZWNlZGVuY2VcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9zdGVwRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhbGN1bGF0ZWRTdGVwID0gdGhpcy5fc3RlcEZuKHRoaXMuX2N1cnJlbnRWYWx1ZSA/PyB0aGlzLm1pbiwgYWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxjdWxhdGVkU3RlcDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zdGVwO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlVmlld1ZhbHVlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSB0aGlzLl9mb3JtYXRWYWx1ZSgpO1xuICAgICAgICB0aGlzLl9yZW5kZXJWYWx1ZShmb3JtYXR0ZWQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9ybWF0VmFsdWUodmFsdWUgPSB0aGlzLl92YWx1ZSk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmZvY3VzZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdFZhbHVlSW5Gb2N1c01vZGUodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdFZhbHVlKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3JlbmRlclZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5wdXRFbCA9IHRoaXMuX2dldElucHV0TmF0aXZlRWxlbWVudCgpO1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eShpbnB1dEVsLCAndmFsdWUnLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRJbnB1dE5hdGl2ZUVsZW1lbnQoKTogSFRNTElucHV0RWxlbWVudCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0VmFsdWVTZWxlY3Rpb24oKTogeyBzZWxlY3Rpb25TdGFydDogbnVtYmVyOyBzZWxlY3Rpb25FbmQ6IG51bWJlciB9IHtcbiAgICAgICAgY29uc3QgaW5wdXRFbCA9IHRoaXMuX2dldElucHV0TmF0aXZlRWxlbWVudCgpO1xuICAgICAgICBjb25zdCBzZWxlY3Rpb25TdGFydCA9IGlucHV0RWw/LnNlbGVjdGlvblN0YXJ0IHx8IDA7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbkVuZCA9IGlucHV0RWw/LnNlbGVjdGlvbkVuZCB8fCAwO1xuICAgICAgICByZXR1cm4geyBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kIH07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRWYWx1ZVNlbGVjdGlvbihzZWxlY3Rpb25TdGFydDogbnVtYmVyLCBzZWxlY3Rpb25FbmQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnB1dEVsID0gdGhpcy5fZ2V0SW5wdXROYXRpdmVFbGVtZW50KCk7XG4gICAgICAgIGlmICghaW5wdXRFbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlucHV0RWwuc2V0U2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVDYW5JbmNyZW1lbnQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSB0aGlzLl9nZXRTdGVwVmFsdWVGb3JJbmNyZWFzZSgpO1xuICAgICAgICB0aGlzLmNhbkluY3JlbWVudCA9ICh0aGlzLl92YWx1ZSB8fCAwKSArIHN0ZXAgPD0gdGhpcy5fbWF4O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlQ2FuRGVjcmVtZW50KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGVwID0gdGhpcy5fZ2V0U3RlcFZhbHVlRm9yRGVjcmVhc2UoKTtcbiAgICAgICAgdGhpcy5jYW5EZWNyZW1lbnQgPSAodGhpcy5fdmFsdWUgfHwgMCkgLSBzdGVwID49IHRoaXMuX21pbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZUNhbkRlY3JlbWVudEluY3JlbWVudCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlQ2FuRGVjcmVtZW50KCk7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNhbkluY3JlbWVudCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdmFsaWRhdGVWYWx1ZUJ5TGltaXRzKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgodmFsdWUsIHRoaXMuX21pbiksIHRoaXMuX21heCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jaGVja0FuZFRocm93RXJyb3JJZlN0ZXBEb2VzbnRNYXRjaFByZWNpc2lvbihwcmVjaXNpb246IG51bWJlciwgc3RlcDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIC8vIENoZWNrIGlmIFwicHJlY2lzaW9uXCIgaXMgdmFsaWQgY29tcGFyaW5nIHRvIFwic3RlcFwiXG4gICAgICAgIGNvbnN0IHN0ZXBEZWNpbWFsTGVuZ3RoID0gZ2V0TnVtYmVyRGVjaW1hbExlbmd0aChzdGVwKTtcbiAgICAgICAgY29uc3QgcHJlY2lzaW9uRGVjaW1hbExlbmd0aCA9IGdldE51bWJlckRlY2ltYWxMZW5ndGgocHJlY2lzaW9uKTtcbiAgICAgICAgaWYgKHN0ZXBEZWNpbWFsTGVuZ3RoID4gcHJlY2lzaW9uRGVjaW1hbExlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgYFN0ZXAgaW5wdXQ6IFRoZSB2YWx1ZSBvZiBzdGVwIHByb3BlcnR5IGNhbiBub3QgY29udGFpbiBtb3JlIGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludCB0aGFuIHdoYXQgaXMgc2V0IHRvIHRoZSBwcmVjaXNpb24gcHJvcGVydHlgXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRQZW5kaW5nRW50ZXJlZFZhbHVlKHZhbHVlOiBudW1iZXIgfCBFcnJvcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9wZW5kaW5nRW50ZXJlZFZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZXNldFBlbmRpbmdFbnRlcmVkVmFsdWUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdFbnRlcmVkVmFsdWUgPSBudWxsO1xuICAgIH1cbn1cbiJdfQ==