@ethlete/cdk 3.5.3 → 3.7.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 (218) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/esm2022/lib/components/accordion/components/accordion/accordion.component.mjs +3 -3
  3. package/esm2022/lib/components/accordion/components/accordion-group/accordion-group.component.mjs +3 -3
  4. package/esm2022/lib/components/accordion/partials/accordion-hint/accordion-hint.directive.mjs +3 -3
  5. package/esm2022/lib/components/accordion/partials/accordion-hint-wrapper/accordion-hint-wrapper.directive.mjs +3 -3
  6. package/esm2022/lib/components/accordion/partials/accordion-label/accordion-label.directive.mjs +3 -3
  7. package/esm2022/lib/components/accordion/partials/accordion-label-wrapper/accordion-label-wrapper.directive.mjs +3 -3
  8. package/esm2022/lib/components/bracket/components/bracket/bracket.component.mjs +3 -3
  9. package/esm2022/lib/components/bracket/directives/bracket-match/bracket-match.directive.mjs +3 -3
  10. package/esm2022/lib/components/bracket/directives/bracket-round/bracket-round.directive.mjs +3 -3
  11. package/esm2022/lib/components/bracket/partials/bracket-match/bracket-match.component.mjs +3 -3
  12. package/esm2022/lib/components/bracket/partials/bracket-round-header/bracket-round-header.component.mjs +3 -3
  13. package/esm2022/lib/components/button/components/button/button.component.mjs +3 -3
  14. package/esm2022/lib/components/button/components/query-button/query-button.component.mjs +3 -3
  15. package/esm2022/lib/components/button/directives/button/button.directive.mjs +3 -3
  16. package/esm2022/lib/components/button/directives/query-button/query-button.directive.mjs +3 -3
  17. package/esm2022/lib/components/forms/components/checkbox/components/checkbox/checkbox.component.mjs +3 -3
  18. package/esm2022/lib/components/forms/components/checkbox/components/checkbox-field/checkbox-field.component.mjs +3 -3
  19. package/esm2022/lib/components/forms/components/checkbox/components/checkbox-group/checkbox-group.component.mjs +3 -3
  20. package/esm2022/lib/components/forms/components/checkbox/directives/checkbox/checkbox.directive.mjs +3 -3
  21. package/esm2022/lib/components/forms/components/checkbox/directives/checkbox-field/checkbox-field.directive.mjs +3 -3
  22. package/esm2022/lib/components/forms/components/checkbox/directives/checkbox-group/checkbox-group.directive.mjs +3 -3
  23. package/esm2022/lib/components/forms/components/checkbox/directives/checkbox-group-control/checkbox-group-control.directive.mjs +3 -3
  24. package/esm2022/lib/components/forms/components/error/components/error/error.component.mjs +3 -3
  25. package/esm2022/lib/components/forms/components/input/components/date-input/date-input.component.mjs +3 -3
  26. package/esm2022/lib/components/forms/components/input/components/email-input/email-input.component.mjs +3 -3
  27. package/esm2022/lib/components/forms/components/input/components/input-field/input-field.component.mjs +3 -3
  28. package/esm2022/lib/components/forms/components/input/components/number-input/number-input.component.mjs +3 -3
  29. package/esm2022/lib/components/forms/components/input/components/password-input/password-input.component.mjs +3 -3
  30. package/esm2022/lib/components/forms/components/input/components/search-input/search-input.component.mjs +3 -3
  31. package/esm2022/lib/components/forms/components/input/components/text-input/text-input.component.mjs +3 -3
  32. package/esm2022/lib/components/forms/components/input/components/textarea-input/textarea-input.component.mjs +3 -3
  33. package/esm2022/lib/components/forms/components/input/directives/autosize-textarea/autosize-textarea.directive.mjs +3 -3
  34. package/esm2022/lib/components/forms/components/input/directives/date-input/date-input.directive.mjs +3 -3
  35. package/esm2022/lib/components/forms/components/input/directives/email-input/email-input.directive.mjs +3 -3
  36. package/esm2022/lib/components/forms/components/input/directives/number-input/number-input.directive.mjs +3 -3
  37. package/esm2022/lib/components/forms/components/input/directives/password-input/password-input.directive.mjs +3 -3
  38. package/esm2022/lib/components/forms/components/input/directives/search-input/search-input.directive.mjs +3 -3
  39. package/esm2022/lib/components/forms/components/input/directives/text-input/text-input.directive.mjs +3 -3
  40. package/esm2022/lib/components/forms/components/input/directives/textarea-input/textarea-input.directive.mjs +3 -3
  41. package/esm2022/lib/components/forms/components/input/partials/password-input-toggle/password-input-toggle.component.mjs +3 -3
  42. package/esm2022/lib/components/forms/components/input/partials/search-input-clear/search-input-clear.component.mjs +3 -3
  43. package/esm2022/lib/components/forms/components/label/components/label/label.component.mjs +3 -3
  44. package/esm2022/lib/components/forms/components/label/directives/label-suffix/label-suffix.directive.mjs +3 -3
  45. package/esm2022/lib/components/forms/components/radio/components/radio/radio.component.mjs +3 -3
  46. package/esm2022/lib/components/forms/components/radio/components/radio-field/radio-field.component.mjs +3 -3
  47. package/esm2022/lib/components/forms/components/radio/components/radio-group/radio-group.component.mjs +3 -3
  48. package/esm2022/lib/components/forms/components/radio/directives/radio/radio.directive.mjs +3 -3
  49. package/esm2022/lib/components/forms/components/radio/directives/radio-field/radio-field.directive.mjs +3 -3
  50. package/esm2022/lib/components/forms/components/radio/directives/radio-group/radio-group.directive.mjs +3 -3
  51. package/esm2022/lib/components/forms/components/segmented-button/components/segmented-button/segmented-button.component.mjs +3 -3
  52. package/esm2022/lib/components/forms/components/segmented-button/components/segmented-button-field/segmented-button-field.component.mjs +3 -3
  53. package/esm2022/lib/components/forms/components/segmented-button/components/segmented-button-group/segmented-button-group.component.mjs +3 -3
  54. package/esm2022/lib/components/forms/components/segmented-button/directives/segmented-button/segmented-button.directive.mjs +3 -3
  55. package/esm2022/lib/components/forms/components/segmented-button/directives/segmented-button-field/segmented-button-field.directive.mjs +3 -3
  56. package/esm2022/lib/components/forms/components/segmented-button/directives/segmented-button-group/segmented-button-group.directive.mjs +3 -3
  57. package/esm2022/lib/components/forms/components/select/components/combobox/combobox.imports.mjs +5 -2
  58. package/esm2022/lib/components/forms/components/select/components/combobox/components/combobox/combobox.component.mjs +9 -6
  59. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox/combobox.directive.mjs +90 -14
  60. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-body-empty-template/combobox-body-empty-template.directive.mjs +30 -0
  61. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-body-empty-template/index.mjs +2 -0
  62. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-body-empty-template/public-api.mjs +2 -0
  63. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-body-error-template/combobox-body-error-template.directive.mjs +30 -0
  64. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-body-error-template/index.mjs +2 -0
  65. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-body-error-template/public-api.mjs +2 -0
  66. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-body-loading-template/combobox-body-loading-template.directive.mjs +30 -0
  67. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-body-loading-template/index.mjs +2 -0
  68. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-body-loading-template/public-api.mjs +2 -0
  69. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-option-template/combobox-option-template.directive.mjs +3 -3
  70. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-selected-option-template/combobox-selected-option-template.directive.mjs +3 -3
  71. package/esm2022/lib/components/forms/components/select/components/combobox/directives/public-api.mjs +4 -1
  72. package/esm2022/lib/components/forms/components/select/components/combobox/partials/combobox-body/combobox-body.component.mjs +22 -11
  73. package/esm2022/lib/components/forms/components/select/components/combobox/partials/combobox-option/combobox-option.component.mjs +6 -5
  74. package/esm2022/lib/components/forms/components/select/components/combobox/private/combobox.private.errors.mjs +1 -1
  75. package/esm2022/lib/components/forms/components/select/components/combobox/private/combobox.private.types.mjs +1 -1
  76. package/esm2022/lib/components/forms/components/select/components/native-select/components/native-select/native-select.component.mjs +3 -3
  77. package/esm2022/lib/components/forms/components/select/components/native-select/directives/native-select-input/native-select-input.directive.mjs +3 -3
  78. package/esm2022/lib/components/forms/components/select/components/native-select/directives/native-select-option/native-select-option.directive.mjs +3 -3
  79. package/esm2022/lib/components/forms/components/select/components/native-select/partials/native-select-option/native-select-option.component.mjs +3 -3
  80. package/esm2022/lib/components/forms/components/select/components/select/components/select/select.component.mjs +3 -3
  81. package/esm2022/lib/components/forms/components/select/components/select/directives/select/select.directive.mjs +3 -3
  82. package/esm2022/lib/components/forms/components/select/components/select/directives/select-body/select-body.directive.mjs +3 -3
  83. package/esm2022/lib/components/forms/components/select/components/select/directives/select-option/select-option.directive.mjs +3 -3
  84. package/esm2022/lib/components/forms/components/select/components/select/partials/select-body/select-body.component.mjs +3 -3
  85. package/esm2022/lib/components/forms/components/select/components/select/partials/select-option/select-option.component.mjs +3 -3
  86. package/esm2022/lib/components/forms/components/select/components/select-field/select-field.component.mjs +3 -3
  87. package/esm2022/lib/components/forms/components/select/directives/select-field/select-field.directive.mjs +3 -3
  88. package/esm2022/lib/components/forms/components/selection-list/components/selection-list-field/selection-list-field.component.mjs +3 -3
  89. package/esm2022/lib/components/forms/components/selection-list/components/selection-list-option/selection-list-option.component.mjs +3 -3
  90. package/esm2022/lib/components/forms/components/selection-list/directives/selection-list-field/selection-list-field.directive.mjs +3 -3
  91. package/esm2022/lib/components/forms/components/selection-list/directives/selection-list-option/selection-list-option.directive.mjs +3 -3
  92. package/esm2022/lib/components/forms/components/slide-toggle/components/slide-toggle/slide-toggle.component.mjs +3 -3
  93. package/esm2022/lib/components/forms/components/slide-toggle/components/slide-toggle-field/slide-toggle-field.component.mjs +3 -3
  94. package/esm2022/lib/components/forms/components/slide-toggle/directives/slide-toggle/slide-toggle.directive.mjs +3 -3
  95. package/esm2022/lib/components/forms/components/slider/components/slider/slider.component.mjs +3 -3
  96. package/esm2022/lib/components/forms/components/slider/components/slider-field/slider-field.component.mjs +3 -3
  97. package/esm2022/lib/components/forms/directives/dynamic-form-field/dynamic-form-field.directive.mjs +3 -3
  98. package/esm2022/lib/components/forms/directives/dynamic-form-group/dynamic-form-group.directive.mjs +3 -3
  99. package/esm2022/lib/components/forms/directives/if-input-empty/if-input-empty.directive.mjs +3 -3
  100. package/esm2022/lib/components/forms/directives/if-input-filled/if-input-filled.directive.mjs +3 -3
  101. package/esm2022/lib/components/forms/directives/input/input.directive.mjs +23 -5
  102. package/esm2022/lib/components/forms/directives/input-prefix/input-prefix.directive.mjs +3 -3
  103. package/esm2022/lib/components/forms/directives/input-suffix/input-suffix.directive.mjs +3 -3
  104. package/esm2022/lib/components/forms/directives/native-input-ref/native-input-ref.directive.mjs +3 -3
  105. package/esm2022/lib/components/forms/directives/static-form-field/static-form-field.directive.mjs +3 -3
  106. package/esm2022/lib/components/forms/directives/static-form-group/static-form-group.directive.mjs +3 -3
  107. package/esm2022/lib/components/forms/directives/writeable-input/writeable-input.directive.mjs +3 -3
  108. package/esm2022/lib/components/forms/services/default-validator-errors.service.mjs +3 -3
  109. package/esm2022/lib/components/forms/services/form-field-state.service.mjs +3 -3
  110. package/esm2022/lib/components/forms/services/form-group-state.service.mjs +3 -3
  111. package/esm2022/lib/components/forms/services/input-state.service.mjs +9 -5
  112. package/esm2022/lib/components/forms/utils/decorated-form-field.base.mjs +3 -3
  113. package/esm2022/lib/components/forms/utils/decorated-input.base.mjs +3 -3
  114. package/esm2022/lib/components/forms/utils/input.base.mjs +3 -3
  115. package/esm2022/lib/components/icons/chevron-icon/chevron-icon.component.mjs +3 -3
  116. package/esm2022/lib/components/masonry/components/masonry/masonry.component.mjs +3 -3
  117. package/esm2022/lib/components/masonry/partials/masonry-item/masonry-item.component.mjs +3 -3
  118. package/esm2022/lib/components/overlay/components/bottom-sheet/components/bottom-sheet-container/bottom-sheet-container.component.mjs +3 -3
  119. package/esm2022/lib/components/overlay/components/bottom-sheet/partials/bottom-sheet-container-base/bottom-sheet-container-base.component.mjs +3 -3
  120. package/esm2022/lib/components/overlay/components/bottom-sheet/partials/bottom-sheet-drag-handle/bottom-sheet-drag-handle.component.mjs +3 -3
  121. package/esm2022/lib/components/overlay/components/bottom-sheet/partials/bottom-sheet-title/bottom-sheet-title.directive.mjs +3 -3
  122. package/esm2022/lib/components/overlay/components/bottom-sheet/services/bottom-sheet-base.service.mjs +3 -3
  123. package/esm2022/lib/components/overlay/components/bottom-sheet/services/bottom-sheet-swipe-handler.service.mjs +3 -3
  124. package/esm2022/lib/components/overlay/components/bottom-sheet/services/bottom-sheet.service.mjs +3 -3
  125. package/esm2022/lib/components/overlay/components/dialog/components/dialog-container/dialog-container.component.mjs +3 -3
  126. package/esm2022/lib/components/overlay/components/dialog/partials/dialog-close/dialog-close.directive.mjs +3 -3
  127. package/esm2022/lib/components/overlay/components/dialog/partials/dialog-container-base/dialog-container-base.component.mjs +3 -3
  128. package/esm2022/lib/components/overlay/components/dialog/partials/dialog-title/dialog-title.directive.mjs +3 -3
  129. package/esm2022/lib/components/overlay/components/dialog/services/dialog-base.service.mjs +3 -3
  130. package/esm2022/lib/components/overlay/components/dialog/services/dialog.service.mjs +3 -3
  131. package/esm2022/lib/components/overlay/components/menu/context-menu-trigger.mjs +6 -6
  132. package/esm2022/lib/components/overlay/components/menu/menu-aim.mjs +6 -6
  133. package/esm2022/lib/components/overlay/components/menu/menu-bar.mjs +3 -3
  134. package/esm2022/lib/components/overlay/components/menu/menu-base.mjs +3 -3
  135. package/esm2022/lib/components/overlay/components/menu/menu-group.mjs +3 -3
  136. package/esm2022/lib/components/overlay/components/menu/menu-item-checkbox.mjs +3 -3
  137. package/esm2022/lib/components/overlay/components/menu/menu-item-radio.mjs +3 -3
  138. package/esm2022/lib/components/overlay/components/menu/menu-item-selectable.mjs +3 -3
  139. package/esm2022/lib/components/overlay/components/menu/menu-item.mjs +3 -3
  140. package/esm2022/lib/components/overlay/components/menu/menu-module.mjs +4 -4
  141. package/esm2022/lib/components/overlay/components/menu/menu-stack.mjs +3 -3
  142. package/esm2022/lib/components/overlay/components/menu/menu-trigger-base.mjs +3 -3
  143. package/esm2022/lib/components/overlay/components/menu/menu-trigger.mjs +3 -3
  144. package/esm2022/lib/components/overlay/components/menu/menu.mjs +3 -3
  145. package/esm2022/lib/components/overlay/components/toggletip/components/toggletip/toggletip.component.mjs +3 -3
  146. package/esm2022/lib/components/overlay/components/toggletip/directives/toggletip/toggletip.directive.mjs +3 -3
  147. package/esm2022/lib/components/overlay/components/tooltip/components/tooltip/tooltip.component.mjs +3 -3
  148. package/esm2022/lib/components/overlay/components/tooltip/directives/tooltip/tooltip.directive.mjs +3 -3
  149. package/esm2022/lib/components/overlay/directives/dynamic-overlay-title/dynamic-overlay-title.directive.mjs +3 -3
  150. package/esm2022/lib/components/overlay/services/dynamic-overlay.service.mjs +3 -3
  151. package/esm2022/lib/components/pagination/components/pagination/pagination.component.mjs +3 -3
  152. package/esm2022/lib/components/pagination/partials/pagination-link/pagination-link.directive.mjs +3 -3
  153. package/esm2022/lib/components/pagination/services/pagination-head.service.mjs +3 -3
  154. package/esm2022/lib/components/picture/picture-data.directive.mjs +3 -3
  155. package/esm2022/lib/components/picture/picture.component.mjs +3 -3
  156. package/esm2022/lib/components/progress-spinner/progress-spinner.component.mjs +3 -3
  157. package/esm2022/lib/components/query-error/components/query-error/query-error.component.mjs +3 -3
  158. package/esm2022/lib/components/query-error/directives/query-error/query-error.directive.mjs +3 -3
  159. package/esm2022/lib/components/scrollable/components/scrollable/scrollable.component.mjs +3 -3
  160. package/esm2022/lib/components/skeleton/components/skeleton/skeleton.component.mjs +3 -3
  161. package/esm2022/lib/components/skeleton/partials/skeleton-item/skeleton-item.component.mjs +3 -3
  162. package/esm2022/lib/components/sort/components/sort-header/sort-header.component.mjs +3 -3
  163. package/esm2022/lib/components/sort/partials/sort/sort.directive.mjs +3 -3
  164. package/esm2022/lib/components/sort/services/sort-header-intl.mjs +3 -3
  165. package/esm2022/lib/components/table/components/table/table.component.mjs +3 -3
  166. package/esm2022/lib/components/table/partials/cells/cell/cell.directive.mjs +3 -3
  167. package/esm2022/lib/components/table/partials/cells/cell-def/cell-def.directive.mjs +3 -3
  168. package/esm2022/lib/components/table/partials/cells/column-def/column-def.directive.mjs +3 -3
  169. package/esm2022/lib/components/table/partials/cells/footer-cell/footer-cell.directive.mjs +3 -3
  170. package/esm2022/lib/components/table/partials/cells/footer-cell-def/footer-cell-def.directive.mjs +3 -3
  171. package/esm2022/lib/components/table/partials/cells/header-cell/header-cell.directive.mjs +3 -3
  172. package/esm2022/lib/components/table/partials/cells/header-cell-def/header-cell-def.directive.mjs +3 -3
  173. package/esm2022/lib/components/table/partials/cells/text-column/text-column.component.mjs +3 -3
  174. package/esm2022/lib/components/table/partials/rows/footer-row/footer-row.component.mjs +3 -3
  175. package/esm2022/lib/components/table/partials/rows/footer-row-def/footer-row-def.directive.mjs +3 -3
  176. package/esm2022/lib/components/table/partials/rows/header-row/header-row.component.mjs +3 -3
  177. package/esm2022/lib/components/table/partials/rows/header-row-def/header-row-def.directive.mjs +3 -3
  178. package/esm2022/lib/components/table/partials/rows/no-data-row/no-data-row.directive.mjs +3 -3
  179. package/esm2022/lib/components/table/partials/rows/recycle-rows/recycle-rows.directive.mjs +3 -3
  180. package/esm2022/lib/components/table/partials/rows/row/row.component.mjs +3 -3
  181. package/esm2022/lib/components/table/partials/rows/row-def/row-def.directive.mjs +3 -3
  182. package/esm2022/lib/components/table/partials/table-busy/table-busy.directive.mjs +3 -3
  183. package/esm2022/lib/components/table/partials/table-busy-outlet/table-busy-outlet.directive.mjs +3 -3
  184. package/esm2022/lib/components/tabs/components/inline-tabs/inline-tabs.component.mjs +3 -3
  185. package/esm2022/lib/components/tabs/components/nav-tabs/nav-tabs.component.mjs +3 -3
  186. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab/inline-tab.component.mjs +3 -3
  187. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-body/inline-tab-body.component.mjs +3 -3
  188. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-body-host/inline-tab-body-host.directive.mjs +3 -3
  189. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-content/inline-tab-content.directive.mjs +3 -3
  190. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-header/inline-tab-header.component.mjs +3 -3
  191. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-label/inline-tab-label.directive.mjs +3 -3
  192. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-label-wrapper/inline-tab-label-wrapper.directive.mjs +3 -3
  193. package/esm2022/lib/components/tabs/partials/nav-tabs/nav-tab-link/nav-tab-link.directive.mjs +3 -3
  194. package/esm2022/lib/components/tabs/partials/nav-tabs/nav-tabs-outlet/nav-tabs-outlet.component.mjs +3 -3
  195. package/esm2022/lib/components/tabs/utils/active-tab-underline.util.mjs +3 -3
  196. package/esm2022/lib/components/tabs/utils/paginated-tab-header.directive.mjs +3 -3
  197. package/esm2022/lib/services/swipe-handler.service.mjs +3 -3
  198. package/fesm2022/ethlete-cdk.mjs +770 -574
  199. package/fesm2022/ethlete-cdk.mjs.map +1 -1
  200. package/lib/components/forms/components/select/components/combobox/combobox.imports.d.ts +2 -2
  201. package/lib/components/forms/components/select/components/combobox/components/combobox/combobox.component.d.ts +1 -1
  202. package/lib/components/forms/components/select/components/combobox/directives/combobox/combobox.directive.d.ts +37 -6
  203. package/lib/components/forms/components/select/components/combobox/directives/combobox-body-empty-template/combobox-body-empty-template.directive.d.ts +8 -0
  204. package/lib/components/forms/components/select/components/combobox/directives/combobox-body-empty-template/index.d.ts +1 -0
  205. package/lib/components/forms/components/select/components/combobox/directives/combobox-body-empty-template/public-api.d.ts +1 -0
  206. package/lib/components/forms/components/select/components/combobox/directives/combobox-body-error-template/combobox-body-error-template.directive.d.ts +8 -0
  207. package/lib/components/forms/components/select/components/combobox/directives/combobox-body-error-template/index.d.ts +1 -0
  208. package/lib/components/forms/components/select/components/combobox/directives/combobox-body-error-template/public-api.d.ts +1 -0
  209. package/lib/components/forms/components/select/components/combobox/directives/combobox-body-loading-template/combobox-body-loading-template.directive.d.ts +8 -0
  210. package/lib/components/forms/components/select/components/combobox/directives/combobox-body-loading-template/index.d.ts +1 -0
  211. package/lib/components/forms/components/select/components/combobox/directives/combobox-body-loading-template/public-api.d.ts +1 -0
  212. package/lib/components/forms/components/select/components/combobox/directives/public-api.d.ts +3 -0
  213. package/lib/components/forms/components/select/components/combobox/partials/combobox-body/combobox-body.component.d.ts +11 -3
  214. package/lib/components/forms/components/select/components/combobox/partials/combobox-option/combobox-option.component.d.ts +6 -3
  215. package/lib/components/forms/components/select/components/combobox/private/combobox.private.types.d.ts +6 -0
  216. package/lib/components/forms/directives/input/input.directive.d.ts +4 -0
  217. package/lib/components/forms/services/input-state.service.d.ts +6 -0
  218. package/package.json +4 -4
@@ -16,10 +16,10 @@ export class ComboboxComponent extends DecoratedInputBase {
16
16
  this.combobox = inject(COMBOBOX_TOKEN);
17
17
  this.combobox.setBodyComponent(ComboboxBodyComponent);
18
18
  }
19
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: ComboboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
20
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.1", type: ComboboxComponent, isStandalone: true, selector: "et-combobox", host: { listeners: { "click": "combobox.selectInputAndOpen()" }, classAttribute: "et-combobox" }, usesInheritance: true, hostDirectives: [{ directive: i1.AnimatedOverlayDirective }, { directive: i2.InputDirective }, { directive: i3.ComboboxDirective, inputs: ["options", "options", "initialValue", "initialValue", "filterInternal", "filterInternal", "loading", "loading", "error", "error", "emptyText", "emptyText", "placeholder", "placeholder", "multiple", "multiple", "bindLabel", "bindLabel", "bindValue", "bindValue", "allowCustomValues", "allowCustomValues", "selectedOptionComponent", "selectedOptionComponent", "optionComponent", "optionComponent"], outputs: ["filterChange", "filterChange"] }], ngImport: i0, template: "<!-- eslint-disable @angular-eslint/template/click-events-have-key-events -->\n<ng-content select=\"[etInputPrefix]\" />\n\n<div class=\"et-combobox-wrapper\">\n <ul *ngIf=\"combobox.multiple$ | async\" class=\"et-combobox-selected-options\">\n <li\n *ngFor=\"let item of combobox.selectedOptions$ | async; trackBy: combobox.trackByOptionKeyFn\"\n class=\"et-combobox-selected-option\"\n >\n <ng-container\n *ngIf=\"\n combobox.customSelectedOptionTpl$ | async as customSelectedOptionTpl;\n else compOrDefaultSelectedOptionLabelTpl\n \"\n >\n <ng-container *ngTemplateOutlet=\"customSelectedOptionTpl; context: { option: item }\" />\n </ng-container>\n\n <ng-template #compOrDefaultSelectedOptionLabelTpl>\n <ng-container\n *ngIf=\"combobox.customSelectedOptionComponent$ | async as comp; else defaultSelectedOptionLabelTpl\"\n >\n <ng-container *ngComponentOutlet=\"comp; inputs: { option: item }\"></ng-container>\n </ng-container>\n <ng-template #defaultSelectedOptionLabelTpl>\n {{ combobox.getOptionLabel(item) | async }}\n </ng-template>\n </ng-template>\n\n <span\n (click)=\"combobox.removeSelectedOption(item); $event.stopPropagation()\"\n class=\"et-combobox-selected-option-remove\"\n tabindex=\"-1\"\n >\n x\n </span>\n </li>\n <li class=\"et-combobox-muliple-input\">\n <ng-container *ngTemplateOutlet=\"inputTpl\" />\n </li>\n </ul>\n\n <ng-template #inputTpl>\n <input\n (keydown)=\"combobox._processKeydownEvent($event)\"\n (keyup)=\"combobox._processKeyupEvent()\"\n (click)=\"combobox.open()\"\n (blur)=\"combobox._handleBlurEvent()\"\n (input)=\"combobox._processInputEvent($event)\"\n type=\"text\"\n etNativeInputRef\n />\n </ng-template>\n\n <ng-container *ngIf=\"(combobox.multiple$ | async) === false\">\n <ng-container *ngTemplateOutlet=\"inputTpl\" />\n </ng-container>\n\n <et-chevron-icon class=\"et-combobox-chevron\" />\n</div>\n\n<ng-content select=\"[etInputSuffix]\" />\n\n<ng-template>\n <ng-content />\n</ng-template>\n", styles: [".et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-enter-from,.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-leave-to{opacity:0;transform:scaleY(0)}.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-enter-active{transition:transform 125ms var(--ease-out-5),opacity 125ms var(--ease-out-5)}.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-leave-active{transition:transform 50ms var(--ease-in-5),opacity 50ms var(--ease-in-5)}.et-combobox-body.et-with-default-animation[et-floating-placement^=top] .et-combobox-body-container{transform-origin:bottom}.et-combobox-body.et-with-default-animation[et-floating-placement^=bottom] .et-combobox-body-container{transform-origin:top}.et-combobox-body-container{display:block;background-color:#3d3d3d;color:#fff;max-height:min(200px,var(--et-floating-max-height, 200px));overflow:auto}@supports (overflow: overlay){.et-combobox-body-container{overflow:overlay}}.et-combobox-body{width:100%;display:grid;transform:var(--et-floating-translate);will-change:transform}.et-combobox-option{display:block}:where(.et-combobox-option--active){background-color:#1e1e1e}.et-combobox{display:block;border:1px solid #ccc;padding:15px;position:relative}.et-combobox-chevron{transform:rotate(180deg);display:block;inline-size:15px;block-size:15px;position:absolute;inset-inline-end:15px;inset-block-start:7px}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NativeInputRefDirective, selector: "input[etNativeInputRef], textarea[etNativeInputRef], select[etNativeInputRef], button[etNativeInputRef]" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: ChevronIconComponent, selector: "et-chevron-icon" }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
19
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: ComboboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
20
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: ComboboxComponent, isStandalone: true, selector: "et-combobox", host: { listeners: { "click": "combobox.selectInputAndOpen()" }, classAttribute: "et-combobox" }, usesInheritance: true, hostDirectives: [{ directive: i1.AnimatedOverlayDirective }, { directive: i2.InputDirective, inputs: ["placeholder", "placeholder"] }, { directive: i3.ComboboxDirective, inputs: ["options", "options", "initialValue", "initialValue", "filterInternal", "filterInternal", "loading", "loading", "error", "error", "emptyText", "emptyText", "placeholder", "placeholder", "multiple", "multiple", "bindLabel", "bindLabel", "bindValue", "bindValue", "allowCustomValues", "allowCustomValues", "selectedOptionComponent", "selectedOptionComponent", "optionComponent", "optionComponent", "bodyErrorComponent", "bodyErrorComponent", "bodyLoadingComponent", "bodyLoadingComponent", "bodyEmptyComponent", "bodyEmptyComponent"], outputs: ["filterChange", "filterChange"] }], ngImport: i0, template: "<!-- eslint-disable @angular-eslint/template/click-events-have-key-events -->\n<ng-content select=\"[etInputPrefix]\" />\n\n<div class=\"et-combobox-wrapper\">\n <ul *ngIf=\"combobox.multiple$ | async\" class=\"et-combobox-selected-options\">\n <li\n *ngFor=\"let item of combobox.selectedOptions$ | async; trackBy: combobox.trackByOptionKeyFn\"\n class=\"et-combobox-selected-option\"\n >\n <ng-container\n *ngIf=\"\n combobox.customSelectedOptionTpl$ | async as customSelectedOptionTpl;\n else compOrDefaultSelectedOptionLabelTpl\n \"\n >\n <ng-container *ngTemplateOutlet=\"customSelectedOptionTpl; context: { option: item }\" />\n </ng-container>\n\n <ng-template #compOrDefaultSelectedOptionLabelTpl>\n <ng-container\n *ngIf=\"combobox.customSelectedOptionComponent$ | async as comp; else defaultSelectedOptionLabelTpl\"\n >\n <ng-container *ngComponentOutlet=\"comp; inputs: { option: item }\"></ng-container>\n </ng-container>\n <ng-template #defaultSelectedOptionLabelTpl>\n {{ combobox.getOptionLabel(item) | async }}\n </ng-template>\n </ng-template>\n\n <span\n (click)=\"combobox.removeSelectedOption(item); $event.stopPropagation()\"\n class=\"et-combobox-selected-option-remove\"\n tabindex=\"-1\"\n >\n x\n </span>\n </li>\n <li class=\"et-combobox-muliple-input\">\n <ng-container *ngTemplateOutlet=\"inputTpl\" />\n </li>\n </ul>\n\n <span\n *ngIf=\"(combobox.multiple$ | async) && input.placeholder\"\n class=\"et-combobox-muliple-placeholder\"\n aria-hidden=\"true\"\n >\n {{ input.placeholder }}\n </span>\n\n <ng-template #inputTpl>\n <input\n [disabled]=\"input.disabled\"\n [attr.placeholder]=\"(combobox.multiple$ | async) ? null : input.placeholder\"\n (keydown)=\"combobox._processKeydownEvent($event)\"\n (keyup)=\"combobox._processKeyupEvent()\"\n (click)=\"combobox.open()\"\n (blur)=\"combobox._handleBlurEvent()\"\n (input)=\"combobox._processInputEvent($event)\"\n type=\"text\"\n value=\"{{ combobox.currentFilter }}\"\n etNativeInputRef\n />\n </ng-template>\n\n <ng-container *ngIf=\"(combobox.multiple$ | async) === false\">\n <ng-container *ngTemplateOutlet=\"inputTpl\" />\n </ng-container>\n\n <et-chevron-icon class=\"et-combobox-chevron\" />\n</div>\n\n<ng-content select=\"[etInputSuffix]\" />\n\n<ng-template>\n <ng-content />\n</ng-template>\n", styles: [".et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-enter-from,.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-leave-to{opacity:0;transform:scaleY(0)}.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-enter-active{transition:transform 125ms var(--ease-out-5),opacity 125ms var(--ease-out-5)}.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-leave-active{transition:transform 50ms var(--ease-in-5),opacity 50ms var(--ease-in-5)}.et-combobox-body.et-with-default-animation[et-floating-placement^=top] .et-combobox-body-container{transform-origin:bottom}.et-combobox-body.et-with-default-animation[et-floating-placement^=bottom] .et-combobox-body-container{transform-origin:top}.et-combobox-body-container{display:block;background-color:#3d3d3d;color:#fff;max-height:min(200px,var(--et-floating-max-height, 200px));overflow:auto}@supports (overflow: overlay){.et-combobox-body-container{overflow:overlay}}.et-combobox-body{width:100%;display:grid;transform:var(--et-floating-translate);will-change:transform}.et-combobox-option{display:block}:where(.et-combobox-option--active){background-color:#1e1e1e}.et-combobox{display:block;border:1px solid #ccc;padding:15px;position:relative}.et-combobox-chevron{transform:rotate(180deg);display:block;inline-size:15px;block-size:15px;position:absolute;inset-inline-end:15px;inset-block-start:7px}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NativeInputRefDirective, selector: "input[etNativeInputRef], textarea[etNativeInputRef], select[etNativeInputRef], button[etNativeInputRef]" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: ChevronIconComponent, selector: "et-chevron-icon" }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
21
21
  }
22
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: ComboboxComponent, decorators: [{
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: ComboboxComponent, decorators: [{
23
23
  type: Component,
24
24
  args: [{ selector: 'et-combobox', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
25
25
  class: 'et-combobox',
@@ -35,7 +35,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
35
35
  NgComponentOutlet,
36
36
  ], hostDirectives: [
37
37
  AnimatedOverlayDirective,
38
- { directive: InputDirective },
38
+ { directive: InputDirective, inputs: ['placeholder'] },
39
39
  {
40
40
  directive: ComboboxDirective,
41
41
  inputs: [
@@ -52,10 +52,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
52
52
  'allowCustomValues',
53
53
  'selectedOptionComponent',
54
54
  'optionComponent',
55
+ 'bodyErrorComponent',
56
+ 'bodyLoadingComponent',
57
+ 'bodyEmptyComponent',
55
58
  ],
56
59
  // eslint-disable-next-line @angular-eslint/no-outputs-metadata-property
57
60
  outputs: ['filterChange'],
58
61
  },
59
- ], template: "<!-- eslint-disable @angular-eslint/template/click-events-have-key-events -->\n<ng-content select=\"[etInputPrefix]\" />\n\n<div class=\"et-combobox-wrapper\">\n <ul *ngIf=\"combobox.multiple$ | async\" class=\"et-combobox-selected-options\">\n <li\n *ngFor=\"let item of combobox.selectedOptions$ | async; trackBy: combobox.trackByOptionKeyFn\"\n class=\"et-combobox-selected-option\"\n >\n <ng-container\n *ngIf=\"\n combobox.customSelectedOptionTpl$ | async as customSelectedOptionTpl;\n else compOrDefaultSelectedOptionLabelTpl\n \"\n >\n <ng-container *ngTemplateOutlet=\"customSelectedOptionTpl; context: { option: item }\" />\n </ng-container>\n\n <ng-template #compOrDefaultSelectedOptionLabelTpl>\n <ng-container\n *ngIf=\"combobox.customSelectedOptionComponent$ | async as comp; else defaultSelectedOptionLabelTpl\"\n >\n <ng-container *ngComponentOutlet=\"comp; inputs: { option: item }\"></ng-container>\n </ng-container>\n <ng-template #defaultSelectedOptionLabelTpl>\n {{ combobox.getOptionLabel(item) | async }}\n </ng-template>\n </ng-template>\n\n <span\n (click)=\"combobox.removeSelectedOption(item); $event.stopPropagation()\"\n class=\"et-combobox-selected-option-remove\"\n tabindex=\"-1\"\n >\n x\n </span>\n </li>\n <li class=\"et-combobox-muliple-input\">\n <ng-container *ngTemplateOutlet=\"inputTpl\" />\n </li>\n </ul>\n\n <ng-template #inputTpl>\n <input\n (keydown)=\"combobox._processKeydownEvent($event)\"\n (keyup)=\"combobox._processKeyupEvent()\"\n (click)=\"combobox.open()\"\n (blur)=\"combobox._handleBlurEvent()\"\n (input)=\"combobox._processInputEvent($event)\"\n type=\"text\"\n etNativeInputRef\n />\n </ng-template>\n\n <ng-container *ngIf=\"(combobox.multiple$ | async) === false\">\n <ng-container *ngTemplateOutlet=\"inputTpl\" />\n </ng-container>\n\n <et-chevron-icon class=\"et-combobox-chevron\" />\n</div>\n\n<ng-content select=\"[etInputSuffix]\" />\n\n<ng-template>\n <ng-content />\n</ng-template>\n", styles: [".et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-enter-from,.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-leave-to{opacity:0;transform:scaleY(0)}.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-enter-active{transition:transform 125ms var(--ease-out-5),opacity 125ms var(--ease-out-5)}.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-leave-active{transition:transform 50ms var(--ease-in-5),opacity 50ms var(--ease-in-5)}.et-combobox-body.et-with-default-animation[et-floating-placement^=top] .et-combobox-body-container{transform-origin:bottom}.et-combobox-body.et-with-default-animation[et-floating-placement^=bottom] .et-combobox-body-container{transform-origin:top}.et-combobox-body-container{display:block;background-color:#3d3d3d;color:#fff;max-height:min(200px,var(--et-floating-max-height, 200px));overflow:auto}@supports (overflow: overlay){.et-combobox-body-container{overflow:overlay}}.et-combobox-body{width:100%;display:grid;transform:var(--et-floating-translate);will-change:transform}.et-combobox-option{display:block}:where(.et-combobox-option--active){background-color:#1e1e1e}.et-combobox{display:block;border:1px solid #ccc;padding:15px;position:relative}.et-combobox-chevron{transform:rotate(180deg);display:block;inline-size:15px;block-size:15px;position:absolute;inset-inline-end:15px;inset-block-start:7px}\n"] }]
62
+ ], template: "<!-- eslint-disable @angular-eslint/template/click-events-have-key-events -->\n<ng-content select=\"[etInputPrefix]\" />\n\n<div class=\"et-combobox-wrapper\">\n <ul *ngIf=\"combobox.multiple$ | async\" class=\"et-combobox-selected-options\">\n <li\n *ngFor=\"let item of combobox.selectedOptions$ | async; trackBy: combobox.trackByOptionKeyFn\"\n class=\"et-combobox-selected-option\"\n >\n <ng-container\n *ngIf=\"\n combobox.customSelectedOptionTpl$ | async as customSelectedOptionTpl;\n else compOrDefaultSelectedOptionLabelTpl\n \"\n >\n <ng-container *ngTemplateOutlet=\"customSelectedOptionTpl; context: { option: item }\" />\n </ng-container>\n\n <ng-template #compOrDefaultSelectedOptionLabelTpl>\n <ng-container\n *ngIf=\"combobox.customSelectedOptionComponent$ | async as comp; else defaultSelectedOptionLabelTpl\"\n >\n <ng-container *ngComponentOutlet=\"comp; inputs: { option: item }\"></ng-container>\n </ng-container>\n <ng-template #defaultSelectedOptionLabelTpl>\n {{ combobox.getOptionLabel(item) | async }}\n </ng-template>\n </ng-template>\n\n <span\n (click)=\"combobox.removeSelectedOption(item); $event.stopPropagation()\"\n class=\"et-combobox-selected-option-remove\"\n tabindex=\"-1\"\n >\n x\n </span>\n </li>\n <li class=\"et-combobox-muliple-input\">\n <ng-container *ngTemplateOutlet=\"inputTpl\" />\n </li>\n </ul>\n\n <span\n *ngIf=\"(combobox.multiple$ | async) && input.placeholder\"\n class=\"et-combobox-muliple-placeholder\"\n aria-hidden=\"true\"\n >\n {{ input.placeholder }}\n </span>\n\n <ng-template #inputTpl>\n <input\n [disabled]=\"input.disabled\"\n [attr.placeholder]=\"(combobox.multiple$ | async) ? null : input.placeholder\"\n (keydown)=\"combobox._processKeydownEvent($event)\"\n (keyup)=\"combobox._processKeyupEvent()\"\n (click)=\"combobox.open()\"\n (blur)=\"combobox._handleBlurEvent()\"\n (input)=\"combobox._processInputEvent($event)\"\n type=\"text\"\n value=\"{{ combobox.currentFilter }}\"\n etNativeInputRef\n />\n </ng-template>\n\n <ng-container *ngIf=\"(combobox.multiple$ | async) === false\">\n <ng-container *ngTemplateOutlet=\"inputTpl\" />\n </ng-container>\n\n <et-chevron-icon class=\"et-combobox-chevron\" />\n</div>\n\n<ng-content select=\"[etInputSuffix]\" />\n\n<ng-template>\n <ng-content />\n</ng-template>\n", styles: [".et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-enter-from,.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-leave-to{opacity:0;transform:scaleY(0)}.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-enter-active{transition:transform 125ms var(--ease-out-5),opacity 125ms var(--ease-out-5)}.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-leave-active{transition:transform 50ms var(--ease-in-5),opacity 50ms var(--ease-in-5)}.et-combobox-body.et-with-default-animation[et-floating-placement^=top] .et-combobox-body-container{transform-origin:bottom}.et-combobox-body.et-with-default-animation[et-floating-placement^=bottom] .et-combobox-body-container{transform-origin:top}.et-combobox-body-container{display:block;background-color:#3d3d3d;color:#fff;max-height:min(200px,var(--et-floating-max-height, 200px));overflow:auto}@supports (overflow: overlay){.et-combobox-body-container{overflow:overlay}}.et-combobox-body{width:100%;display:grid;transform:var(--et-floating-translate);will-change:transform}.et-combobox-option{display:block}:where(.et-combobox-option--active){background-color:#1e1e1e}.et-combobox{display:block;border:1px solid #ccc;padding:15px;position:relative}.et-combobox-chevron{transform:rotate(180deg);display:block;inline-size:15px;block-size:15px;position:absolute;inset-inline-end:15px;inset-block-start:7px}\n"] }]
60
63
  }], ctorParameters: function () { return []; } });
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm1zL2NvbXBvbmVudHMvc2VsZWN0L2NvbXBvbmVudHMvY29tYm9ib3gvY29tcG9uZW50cy9jb21ib2JveC9jb21ib2JveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvY29tcG9uZW50cy9zZWxlY3QvY29tcG9uZW50cy9jb21ib2JveC9jb21wb25lbnRzL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFnRHZELE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxrQkFBa0I7SUFHdkQ7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQUhTLGFBQVEsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFLbkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3hELENBQUM7OEdBUFUsaUJBQWlCO2tHQUFqQixpQkFBaUIsc3dCQ3ZEOUIsK3BFQWtFQSw4L0NEN0NJLElBQUksNkZBQ0osdUJBQXVCLCtJQUN2QixTQUFTLDhDQUNULG9CQUFvQiw0REFFcEIsS0FBSyxtSEFDTCxnQkFBZ0Isb0pBQ2hCLGlCQUFpQjs7MkZBMkJSLGlCQUFpQjtrQkE5QzdCLFNBQVM7K0JBQ0UsYUFBYSxjQUdYLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxRQUMvQjt3QkFDSixLQUFLLEVBQUUsYUFBYTt3QkFDcEIsU0FBUyxFQUFFLCtCQUErQjtxQkFDM0MsV0FDUTt3QkFDUCxJQUFJO3dCQUNKLHVCQUF1Qjt3QkFDdkIsU0FBUzt3QkFDVCxvQkFBb0I7d0JBQ3BCLFlBQVk7d0JBQ1osS0FBSzt3QkFDTCxnQkFBZ0I7d0JBQ2hCLGlCQUFpQjtxQkFDbEIsa0JBQ2U7d0JBQ2Qsd0JBQXdCO3dCQUN4QixFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUU7d0JBQzdCOzRCQUNFLFNBQVMsRUFBRSxpQkFBaUI7NEJBQzVCLE1BQU0sRUFBRTtnQ0FDTixTQUFTO2dDQUNULGNBQWM7Z0NBQ2QsZ0JBQWdCO2dDQUNoQixTQUFTO2dDQUNULE9BQU87Z0NBQ1AsV0FBVztnQ0FDWCxhQUFhO2dDQUNiLFVBQVU7Z0NBQ1YsV0FBVztnQ0FDWCxXQUFXO2dDQUNYLG1CQUFtQjtnQ0FDbkIseUJBQXlCO2dDQUN6QixpQkFBaUI7NkJBQ2xCOzRCQUNELHdFQUF3RTs0QkFDeEUsT0FBTyxFQUFFLENBQUMsY0FBYyxDQUFDO3lCQUMxQjtxQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSwgTmdDb21wb25lbnRPdXRsZXQsIE5nRm9yLCBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIFZpZXdFbmNhcHN1bGF0aW9uLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFuaW1hdGVkT3ZlcmxheURpcmVjdGl2ZSwgTGV0RGlyZWN0aXZlIH0gZnJvbSAnQGV0aGxldGUvY29yZSc7XG5pbXBvcnQgeyBDaGV2cm9uSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uL2ljb25zJztcbmltcG9ydCB7IElucHV0RGlyZWN0aXZlLCBOYXRpdmVJbnB1dFJlZkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgRGVjb3JhdGVkSW5wdXRCYXNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgQ09NQk9CT1hfVE9LRU4sIENvbWJvYm94RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBDb21ib2JveEJvZHlDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wYXJ0aWFscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2V0LWNvbWJvYm94JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbWJvYm94LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY29tYm9ib3guY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2V0LWNvbWJvYm94JyxcbiAgICAnKGNsaWNrKSc6ICdjb21ib2JveC5zZWxlY3RJbnB1dEFuZE9wZW4oKScsXG4gIH0sXG4gIGltcG9ydHM6IFtcbiAgICBOZ0lmLFxuICAgIE5hdGl2ZUlucHV0UmVmRGlyZWN0aXZlLFxuICAgIEFzeW5jUGlwZSxcbiAgICBDaGV2cm9uSWNvbkNvbXBvbmVudCxcbiAgICBMZXREaXJlY3RpdmUsXG4gICAgTmdGb3IsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBOZ0NvbXBvbmVudE91dGxldCxcbiAgXSxcbiAgaG9zdERpcmVjdGl2ZXM6IFtcbiAgICBBbmltYXRlZE92ZXJsYXlEaXJlY3RpdmUsXG4gICAgeyBkaXJlY3RpdmU6IElucHV0RGlyZWN0aXZlIH0sXG4gICAge1xuICAgICAgZGlyZWN0aXZlOiBDb21ib2JveERpcmVjdGl2ZSxcbiAgICAgIGlucHV0czogW1xuICAgICAgICAnb3B0aW9ucycsXG4gICAgICAgICdpbml0aWFsVmFsdWUnLFxuICAgICAgICAnZmlsdGVySW50ZXJuYWwnLFxuICAgICAgICAnbG9hZGluZycsXG4gICAgICAgICdlcnJvcicsXG4gICAgICAgICdlbXB0eVRleHQnLFxuICAgICAgICAncGxhY2Vob2xkZXInLFxuICAgICAgICAnbXVsdGlwbGUnLFxuICAgICAgICAnYmluZExhYmVsJyxcbiAgICAgICAgJ2JpbmRWYWx1ZScsXG4gICAgICAgICdhbGxvd0N1c3RvbVZhbHVlcycsXG4gICAgICAgICdzZWxlY3RlZE9wdGlvbkNvbXBvbmVudCcsXG4gICAgICAgICdvcHRpb25Db21wb25lbnQnLFxuICAgICAgXSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0cy1tZXRhZGF0YS1wcm9wZXJ0eVxuICAgICAgb3V0cHV0czogWydmaWx0ZXJDaGFuZ2UnXSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDb21ib2JveENvbXBvbmVudCBleHRlbmRzIERlY29yYXRlZElucHV0QmFzZSB7XG4gIHByb3RlY3RlZCByZWFkb25seSBjb21ib2JveCA9IGluamVjdChDT01CT0JPWF9UT0tFTik7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuY29tYm9ib3guc2V0Qm9keUNvbXBvbmVudChDb21ib2JveEJvZHlDb21wb25lbnQpO1xuICB9XG59XG4iLCI8IS0tIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC90ZW1wbGF0ZS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzIC0tPlxuPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2V0SW5wdXRQcmVmaXhdXCIgLz5cblxuPGRpdiBjbGFzcz1cImV0LWNvbWJvYm94LXdyYXBwZXJcIj5cbiAgPHVsICpuZ0lmPVwiY29tYm9ib3gubXVsdGlwbGUkIHwgYXN5bmNcIiBjbGFzcz1cImV0LWNvbWJvYm94LXNlbGVjdGVkLW9wdGlvbnNcIj5cbiAgICA8bGlcbiAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbWJvYm94LnNlbGVjdGVkT3B0aW9ucyQgfCBhc3luYzsgdHJhY2tCeTogY29tYm9ib3gudHJhY2tCeU9wdGlvbktleUZuXCJcbiAgICAgIGNsYXNzPVwiZXQtY29tYm9ib3gtc2VsZWN0ZWQtb3B0aW9uXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgY29tYm9ib3guY3VzdG9tU2VsZWN0ZWRPcHRpb25UcGwkIHwgYXN5bmMgYXMgY3VzdG9tU2VsZWN0ZWRPcHRpb25UcGw7XG4gICAgICAgICAgZWxzZSBjb21wT3JEZWZhdWx0U2VsZWN0ZWRPcHRpb25MYWJlbFRwbFxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tU2VsZWN0ZWRPcHRpb25UcGw7IGNvbnRleHQ6IHsgb3B0aW9uOiBpdGVtIH1cIiAvPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjY29tcE9yRGVmYXVsdFNlbGVjdGVkT3B0aW9uTGFiZWxUcGw+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdJZj1cImNvbWJvYm94LmN1c3RvbVNlbGVjdGVkT3B0aW9uQ29tcG9uZW50JCB8IGFzeW5jIGFzIGNvbXA7IGVsc2UgZGVmYXVsdFNlbGVjdGVkT3B0aW9uTGFiZWxUcGxcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdDb21wb25lbnRPdXRsZXQ9XCJjb21wOyBpbnB1dHM6IHsgb3B0aW9uOiBpdGVtIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFNlbGVjdGVkT3B0aW9uTGFiZWxUcGw+XG4gICAgICAgICAge3sgY29tYm9ib3guZ2V0T3B0aW9uTGFiZWwoaXRlbSkgfCBhc3luYyB9fVxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPHNwYW5cbiAgICAgICAgKGNsaWNrKT1cImNvbWJvYm94LnJlbW92ZVNlbGVjdGVkT3B0aW9uKGl0ZW0pOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICBjbGFzcz1cImV0LWNvbWJvYm94LXNlbGVjdGVkLW9wdGlvbi1yZW1vdmVcIlxuICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgID5cbiAgICAgICAgeFxuICAgICAgPC9zcGFuPlxuICAgIDwvbGk+XG4gICAgPGxpIGNsYXNzPVwiZXQtY29tYm9ib3gtbXVsaXBsZS1pbnB1dFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0VHBsXCIgLz5cbiAgICA8L2xpPlxuICA8L3VsPlxuXG4gIDxuZy10ZW1wbGF0ZSAjaW5wdXRUcGw+XG4gICAgPGlucHV0XG4gICAgICAoa2V5ZG93bik9XCJjb21ib2JveC5fcHJvY2Vzc0tleWRvd25FdmVudCgkZXZlbnQpXCJcbiAgICAgIChrZXl1cCk9XCJjb21ib2JveC5fcHJvY2Vzc0tleXVwRXZlbnQoKVwiXG4gICAgICAoY2xpY2spPVwiY29tYm9ib3gub3BlbigpXCJcbiAgICAgIChibHVyKT1cImNvbWJvYm94Ll9oYW5kbGVCbHVyRXZlbnQoKVwiXG4gICAgICAoaW5wdXQpPVwiY29tYm9ib3guX3Byb2Nlc3NJbnB1dEV2ZW50KCRldmVudClcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgZXROYXRpdmVJbnB1dFJlZlxuICAgIC8+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihjb21ib2JveC5tdWx0aXBsZSQgfCBhc3luYykgPT09IGZhbHNlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0VHBsXCIgLz5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPGV0LWNoZXZyb24taWNvbiBjbGFzcz1cImV0LWNvbWJvYm94LWNoZXZyb25cIiAvPlxuPC9kaXY+XG5cbjxuZy1jb250ZW50IHNlbGVjdD1cIltldElucHV0U3VmZml4XVwiIC8+XG5cbjxuZy10ZW1wbGF0ZT5cbiAgPG5nLWNvbnRlbnQgLz5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm1zL2NvbXBvbmVudHMvc2VsZWN0L2NvbXBvbmVudHMvY29tYm9ib3gvY29tcG9uZW50cy9jb21ib2JveC9jb21ib2JveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvY29tcG9uZW50cy9zZWxlY3QvY29tcG9uZW50cy9jb21ib2JveC9jb21wb25lbnRzL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFtRHZELE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxrQkFBa0I7SUFHdkQ7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQUhTLGFBQVEsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFLbkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3hELENBQUM7OEdBUFUsaUJBQWlCO2tHQUFqQixpQkFBaUIsczdCQzFEOUIsMGdGQTZFQSw4L0NEeERJLElBQUksNkZBQ0osdUJBQXVCLCtJQUN2QixTQUFTLDhDQUNULG9CQUFvQiw0REFFcEIsS0FBSyxtSEFDTCxnQkFBZ0Isb0pBQ2hCLGlCQUFpQjs7MkZBOEJSLGlCQUFpQjtrQkFqRDdCLFNBQVM7K0JBQ0UsYUFBYSxjQUdYLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxRQUMvQjt3QkFDSixLQUFLLEVBQUUsYUFBYTt3QkFDcEIsU0FBUyxFQUFFLCtCQUErQjtxQkFDM0MsV0FDUTt3QkFDUCxJQUFJO3dCQUNKLHVCQUF1Qjt3QkFDdkIsU0FBUzt3QkFDVCxvQkFBb0I7d0JBQ3BCLFlBQVk7d0JBQ1osS0FBSzt3QkFDTCxnQkFBZ0I7d0JBQ2hCLGlCQUFpQjtxQkFDbEIsa0JBQ2U7d0JBQ2Qsd0JBQXdCO3dCQUN4QixFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUU7d0JBQ3REOzRCQUNFLFNBQVMsRUFBRSxpQkFBaUI7NEJBQzVCLE1BQU0sRUFBRTtnQ0FDTixTQUFTO2dDQUNULGNBQWM7Z0NBQ2QsZ0JBQWdCO2dDQUNoQixTQUFTO2dDQUNULE9BQU87Z0NBQ1AsV0FBVztnQ0FDWCxhQUFhO2dDQUNiLFVBQVU7Z0NBQ1YsV0FBVztnQ0FDWCxXQUFXO2dDQUNYLG1CQUFtQjtnQ0FDbkIseUJBQXlCO2dDQUN6QixpQkFBaUI7Z0NBQ2pCLG9CQUFvQjtnQ0FDcEIsc0JBQXNCO2dDQUN0QixvQkFBb0I7NkJBQ3JCOzRCQUNELHdFQUF3RTs0QkFDeEUsT0FBTyxFQUFFLENBQUMsY0FBYyxDQUFDO3lCQUMxQjtxQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSwgTmdDb21wb25lbnRPdXRsZXQsIE5nRm9yLCBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIFZpZXdFbmNhcHN1bGF0aW9uLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFuaW1hdGVkT3ZlcmxheURpcmVjdGl2ZSwgTGV0RGlyZWN0aXZlIH0gZnJvbSAnQGV0aGxldGUvY29yZSc7XG5pbXBvcnQgeyBDaGV2cm9uSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uL2ljb25zJztcbmltcG9ydCB7IElucHV0RGlyZWN0aXZlLCBOYXRpdmVJbnB1dFJlZkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgRGVjb3JhdGVkSW5wdXRCYXNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgQ09NQk9CT1hfVE9LRU4sIENvbWJvYm94RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBDb21ib2JveEJvZHlDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wYXJ0aWFscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2V0LWNvbWJvYm94JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbWJvYm94LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY29tYm9ib3guY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2V0LWNvbWJvYm94JyxcbiAgICAnKGNsaWNrKSc6ICdjb21ib2JveC5zZWxlY3RJbnB1dEFuZE9wZW4oKScsXG4gIH0sXG4gIGltcG9ydHM6IFtcbiAgICBOZ0lmLFxuICAgIE5hdGl2ZUlucHV0UmVmRGlyZWN0aXZlLFxuICAgIEFzeW5jUGlwZSxcbiAgICBDaGV2cm9uSWNvbkNvbXBvbmVudCxcbiAgICBMZXREaXJlY3RpdmUsXG4gICAgTmdGb3IsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBOZ0NvbXBvbmVudE91dGxldCxcbiAgXSxcbiAgaG9zdERpcmVjdGl2ZXM6IFtcbiAgICBBbmltYXRlZE92ZXJsYXlEaXJlY3RpdmUsXG4gICAgeyBkaXJlY3RpdmU6IElucHV0RGlyZWN0aXZlLCBpbnB1dHM6IFsncGxhY2Vob2xkZXInXSB9LFxuICAgIHtcbiAgICAgIGRpcmVjdGl2ZTogQ29tYm9ib3hEaXJlY3RpdmUsXG4gICAgICBpbnB1dHM6IFtcbiAgICAgICAgJ29wdGlvbnMnLFxuICAgICAgICAnaW5pdGlhbFZhbHVlJyxcbiAgICAgICAgJ2ZpbHRlckludGVybmFsJyxcbiAgICAgICAgJ2xvYWRpbmcnLFxuICAgICAgICAnZXJyb3InLFxuICAgICAgICAnZW1wdHlUZXh0JyxcbiAgICAgICAgJ3BsYWNlaG9sZGVyJyxcbiAgICAgICAgJ211bHRpcGxlJyxcbiAgICAgICAgJ2JpbmRMYWJlbCcsXG4gICAgICAgICdiaW5kVmFsdWUnLFxuICAgICAgICAnYWxsb3dDdXN0b21WYWx1ZXMnLFxuICAgICAgICAnc2VsZWN0ZWRPcHRpb25Db21wb25lbnQnLFxuICAgICAgICAnb3B0aW9uQ29tcG9uZW50JyxcbiAgICAgICAgJ2JvZHlFcnJvckNvbXBvbmVudCcsXG4gICAgICAgICdib2R5TG9hZGluZ0NvbXBvbmVudCcsXG4gICAgICAgICdib2R5RW1wdHlDb21wb25lbnQnLFxuICAgICAgXSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0cy1tZXRhZGF0YS1wcm9wZXJ0eVxuICAgICAgb3V0cHV0czogWydmaWx0ZXJDaGFuZ2UnXSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDb21ib2JveENvbXBvbmVudCBleHRlbmRzIERlY29yYXRlZElucHV0QmFzZSB7XG4gIHByb3RlY3RlZCByZWFkb25seSBjb21ib2JveCA9IGluamVjdChDT01CT0JPWF9UT0tFTik7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuY29tYm9ib3guc2V0Qm9keUNvbXBvbmVudChDb21ib2JveEJvZHlDb21wb25lbnQpO1xuICB9XG59XG4iLCI8IS0tIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC90ZW1wbGF0ZS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzIC0tPlxuPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2V0SW5wdXRQcmVmaXhdXCIgLz5cblxuPGRpdiBjbGFzcz1cImV0LWNvbWJvYm94LXdyYXBwZXJcIj5cbiAgPHVsICpuZ0lmPVwiY29tYm9ib3gubXVsdGlwbGUkIHwgYXN5bmNcIiBjbGFzcz1cImV0LWNvbWJvYm94LXNlbGVjdGVkLW9wdGlvbnNcIj5cbiAgICA8bGlcbiAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbWJvYm94LnNlbGVjdGVkT3B0aW9ucyQgfCBhc3luYzsgdHJhY2tCeTogY29tYm9ib3gudHJhY2tCeU9wdGlvbktleUZuXCJcbiAgICAgIGNsYXNzPVwiZXQtY29tYm9ib3gtc2VsZWN0ZWQtb3B0aW9uXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgY29tYm9ib3guY3VzdG9tU2VsZWN0ZWRPcHRpb25UcGwkIHwgYXN5bmMgYXMgY3VzdG9tU2VsZWN0ZWRPcHRpb25UcGw7XG4gICAgICAgICAgZWxzZSBjb21wT3JEZWZhdWx0U2VsZWN0ZWRPcHRpb25MYWJlbFRwbFxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tU2VsZWN0ZWRPcHRpb25UcGw7IGNvbnRleHQ6IHsgb3B0aW9uOiBpdGVtIH1cIiAvPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjY29tcE9yRGVmYXVsdFNlbGVjdGVkT3B0aW9uTGFiZWxUcGw+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdJZj1cImNvbWJvYm94LmN1c3RvbVNlbGVjdGVkT3B0aW9uQ29tcG9uZW50JCB8IGFzeW5jIGFzIGNvbXA7IGVsc2UgZGVmYXVsdFNlbGVjdGVkT3B0aW9uTGFiZWxUcGxcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdDb21wb25lbnRPdXRsZXQ9XCJjb21wOyBpbnB1dHM6IHsgb3B0aW9uOiBpdGVtIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFNlbGVjdGVkT3B0aW9uTGFiZWxUcGw+XG4gICAgICAgICAge3sgY29tYm9ib3guZ2V0T3B0aW9uTGFiZWwoaXRlbSkgfCBhc3luYyB9fVxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPHNwYW5cbiAgICAgICAgKGNsaWNrKT1cImNvbWJvYm94LnJlbW92ZVNlbGVjdGVkT3B0aW9uKGl0ZW0pOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICBjbGFzcz1cImV0LWNvbWJvYm94LXNlbGVjdGVkLW9wdGlvbi1yZW1vdmVcIlxuICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgID5cbiAgICAgICAgeFxuICAgICAgPC9zcGFuPlxuICAgIDwvbGk+XG4gICAgPGxpIGNsYXNzPVwiZXQtY29tYm9ib3gtbXVsaXBsZS1pbnB1dFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0VHBsXCIgLz5cbiAgICA8L2xpPlxuICA8L3VsPlxuXG4gIDxzcGFuXG4gICAgKm5nSWY9XCIoY29tYm9ib3gubXVsdGlwbGUkIHwgYXN5bmMpICYmIGlucHV0LnBsYWNlaG9sZGVyXCJcbiAgICBjbGFzcz1cImV0LWNvbWJvYm94LW11bGlwbGUtcGxhY2Vob2xkZXJcIlxuICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gID5cbiAgICB7eyBpbnB1dC5wbGFjZWhvbGRlciB9fVxuICA8L3NwYW4+XG5cbiAgPG5nLXRlbXBsYXRlICNpbnB1dFRwbD5cbiAgICA8aW5wdXRcbiAgICAgIFtkaXNhYmxlZF09XCJpbnB1dC5kaXNhYmxlZFwiXG4gICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCIoY29tYm9ib3gubXVsdGlwbGUkIHwgYXN5bmMpID8gbnVsbCA6IGlucHV0LnBsYWNlaG9sZGVyXCJcbiAgICAgIChrZXlkb3duKT1cImNvbWJvYm94Ll9wcm9jZXNzS2V5ZG93bkV2ZW50KCRldmVudClcIlxuICAgICAgKGtleXVwKT1cImNvbWJvYm94Ll9wcm9jZXNzS2V5dXBFdmVudCgpXCJcbiAgICAgIChjbGljayk9XCJjb21ib2JveC5vcGVuKClcIlxuICAgICAgKGJsdXIpPVwiY29tYm9ib3guX2hhbmRsZUJsdXJFdmVudCgpXCJcbiAgICAgIChpbnB1dCk9XCJjb21ib2JveC5fcHJvY2Vzc0lucHV0RXZlbnQoJGV2ZW50KVwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICB2YWx1ZT1cInt7IGNvbWJvYm94LmN1cnJlbnRGaWx0ZXIgfX1cIlxuICAgICAgZXROYXRpdmVJbnB1dFJlZlxuICAgIC8+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihjb21ib2JveC5tdWx0aXBsZSQgfCBhc3luYykgPT09IGZhbHNlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0VHBsXCIgLz5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPGV0LWNoZXZyb24taWNvbiBjbGFzcz1cImV0LWNvbWJvYm94LWNoZXZyb25cIiAvPlxuPC9kaXY+XG5cbjxuZy1jb250ZW50IHNlbGVjdD1cIltldElucHV0U3VmZml4XVwiIC8+XG5cbjxuZy10ZW1wbGF0ZT5cbiAgPG5nLWNvbnRlbnQgLz5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -1,11 +1,15 @@
1
1
  import { A, BACKSPACE, ENTER, ESCAPE, TAB } from '@angular/cdk/keycodes';
2
2
  import { ContentChild, Directive, EventEmitter, InjectionToken, Input, Output, TemplateRef, booleanAttribute, inject, isDevMode, } from '@angular/core';
3
- import { ActiveSelectionModel, AnimatedOverlayDirective, KeyPressManager, SelectionModel, createDestroy, createReactiveBindings, isEmptyArray, isObjectArray, isPrimitiveArray, } from '@ethlete/core';
4
- import { BehaviorSubject, catchError, combineLatest, debounceTime, distinctUntilChanged, filter, map, skip, skipWhile, take, takeUntil, tap, throwError, } from 'rxjs';
3
+ import { toSignal } from '@angular/core/rxjs-interop';
4
+ import { ActiveSelectionModel, AnimatedOverlayDirective, KeyPressManager, SelectionModel, createDestroy, createReactiveBindings, isEmptyArray, isObjectArray, isPrimitiveArray, scrollToElement, } from '@ethlete/core';
5
+ import { BehaviorSubject, catchError, combineLatest, debounceTime, distinctUntilChanged, map, of, skip, skipWhile, startWith, switchMap, takeUntil, tap, throwError, } from 'rxjs';
5
6
  import { INPUT_TOKEN } from '../../../../../../directives';
6
7
  import { SELECT_FIELD_TOKEN } from '../../../../directives';
7
8
  import { ComboboxOptionType, assetComboboxBodyComponentSet, comboboxError, } from '../../private';
8
9
  import { isOptionDisabled } from '../../utils';
10
+ import { COMBOBOX_BODY_EMPTY_TEMPLATE_TOKEN } from '../combobox-body-empty-template';
11
+ import { COMBOBOX_BODY_ERROR_TEMPLATE_TOKEN } from '../combobox-body-error-template';
12
+ import { COMBOBOX_BODY_LOADING_TEMPLATE_TOKEN } from '../combobox-body-loading-template';
9
13
  import { COMBOBOX_OPTION_TEMPLATE_TOKEN } from '../combobox-option-template';
10
14
  import { COMBOBOX_SELECTED_OPTION_TEMPLATE_TOKEN } from '../combobox-selected-option-template';
11
15
  import * as i0 from "@angular/core";
@@ -32,7 +36,7 @@ export class ComboboxDirective {
32
36
  this._selectionModel.setFilter('');
33
37
  }
34
38
  else {
35
- this._selectionModel.setFilter(this._currentFilter);
39
+ this._selectionModel.setFilter(this.currentFilter);
36
40
  }
37
41
  }
38
42
  get loading() {
@@ -83,7 +87,25 @@ export class ComboboxDirective {
83
87
  set selectedOptionComponent(component) {
84
88
  this._selectedOptionComponent$.next(component);
85
89
  }
86
- get _currentFilter() {
90
+ get bodyErrorComponent() {
91
+ return this._bodyErrorComponent$.value;
92
+ }
93
+ set bodyErrorComponent(value) {
94
+ this._bodyErrorComponent$.next(value);
95
+ }
96
+ get bodyLoadingComponent() {
97
+ return this._bodyLoadingComponent$.value;
98
+ }
99
+ set bodyLoadingComponent(value) {
100
+ this._bodyLoadingComponent$.next(value);
101
+ }
102
+ get bodyEmptyComponent() {
103
+ return this._bodyEmptyComponent$.value;
104
+ }
105
+ set bodyEmptyComponent(value) {
106
+ this._bodyEmptyComponent$.next(value);
107
+ }
108
+ get currentFilter() {
87
109
  return this._currentFilter$.value;
88
110
  }
89
111
  get _isOpen() {
@@ -95,6 +117,15 @@ export class ComboboxDirective {
95
117
  set selectedOptionTemplate(value) {
96
118
  this._selectedOptionTemplate$.next(value ?? null);
97
119
  }
120
+ set bodyLoadingTemplate(value) {
121
+ this._bodyLoadingTemplate$.next(value ?? null);
122
+ }
123
+ set bodyErrorTemplate(value) {
124
+ this._bodyErrorTemplate$.next(value ?? null);
125
+ }
126
+ set bodyEmptyTemplate(value) {
127
+ this._bodyEmptyTemplate$.next(value ?? null);
128
+ }
98
129
  //#endregion
99
130
  //#region Lifecycle
100
131
  constructor() {
@@ -113,6 +144,9 @@ export class ComboboxDirective {
113
144
  this._allowCustomValues$ = new BehaviorSubject(false);
114
145
  this._optionComponent$ = new BehaviorSubject(null);
115
146
  this._selectedOptionComponent$ = new BehaviorSubject(null);
147
+ this._bodyErrorComponent$ = new BehaviorSubject(null);
148
+ this._bodyLoadingComponent$ = new BehaviorSubject(null);
149
+ this._bodyEmptyComponent$ = new BehaviorSubject(null);
116
150
  //#endregion
117
151
  //#region Outputs
118
152
  this.filterChange = new EventEmitter();
@@ -127,10 +161,14 @@ export class ComboboxDirective {
127
161
  this._backspaceKeyPressManager = new KeyPressManager(BACKSPACE);
128
162
  this.selectedOptions$ = this._selectionModel.selection$;
129
163
  this.multiple$ = this._selectionModel.allowMultiple$;
164
+ this.multipleSignal = toSignal(this.multiple$, { requireSync: true });
130
165
  this.options$ = this._selectionModel.filteredOptions$;
131
166
  this.rawOptions$ = this._selectionModel.options$;
132
167
  this._optionTemplate$ = new BehaviorSubject(null);
133
168
  this._selectedOptionTemplate$ = new BehaviorSubject(null);
169
+ this._bodyLoadingTemplate$ = new BehaviorSubject(null);
170
+ this._bodyErrorTemplate$ = new BehaviorSubject(null);
171
+ this._bodyEmptyTemplate$ = new BehaviorSubject(null);
134
172
  this._bindings = createReactiveBindings({
135
173
  attribute: 'class.et-combobox--loading',
136
174
  observable: this._loading$,
@@ -154,6 +192,12 @@ export class ComboboxDirective {
154
192
  this.customOptionComponent$ = this._optionComponent$.asObservable();
155
193
  this.customSelectedOptionTpl$ = this._selectedOptionTemplate$.asObservable();
156
194
  this.customSelectedOptionComponent$ = this._selectedOptionComponent$.asObservable();
195
+ this.customBodyLoadingTpl$ = this._bodyLoadingTemplate$.asObservable();
196
+ this.customBodyLoadingComponent$ = this._bodyLoadingComponent$.asObservable();
197
+ this.customBodyErrorTpl$ = this._bodyErrorTemplate$.asObservable();
198
+ this.customBodyErrorComponent$ = this._bodyErrorComponent$.asObservable();
199
+ this.customBodyEmptyTpl$ = this._bodyEmptyTemplate$.asObservable();
200
+ this.customBodyEmptyComponent$ = this._bodyEmptyComponent$.asObservable();
157
201
  this.trackByOptionKeyFn = (index, item) => this._selectionModel.getKey(item);
158
202
  this._activeSelectionModel.setSelectionModel(this._selectionModel);
159
203
  this._animatedOverlay.placement = 'bottom';
@@ -180,8 +224,8 @@ export class ComboboxDirective {
180
224
  this._setFilterFromInputValue();
181
225
  }))
182
226
  .subscribe();
183
- this._input.nativeInputRef$
184
- .pipe(takeUntil(this._destroy$), debounceTime(0), filter((ref) => !!ref?.element.nativeElement), tap(() => this._updateFilter(this._currentFilter)), take(1))
227
+ this._input.onExternalUpdate$
228
+ .pipe(takeUntil(this._destroy$), tap(() => this._selectionModel.setSelection(this._input.value)))
185
229
  .subscribe();
186
230
  }
187
231
  //#endregion
@@ -203,10 +247,25 @@ export class ComboboxDirective {
203
247
  assetComboboxBodyComponentSet(this._comboboxBodyComponent);
204
248
  if (this._isOpen || this._input.disabled || this._animatedOverlay.isMounting)
205
249
  return;
206
- this._animatedOverlay.mount({
250
+ const bodyRef = this._animatedOverlay.mount({
207
251
  component: this._comboboxBodyComponent,
208
252
  mirrorWidth: true,
209
253
  });
254
+ bodyRef?._options$
255
+ .pipe(switchMap((queryList) => combineLatest([
256
+ queryList?.changes.pipe(startWith(queryList), map((l) => l.toArray())) ?? of([]),
257
+ this._activeSelectionModel.activeOption$,
258
+ ])), tap(([options, activeOptionData]) => {
259
+ const optionRef = options.find((o) => o._option$.value === activeOptionData);
260
+ if (!optionRef?._elementRef?.nativeElement)
261
+ return;
262
+ scrollToElement({
263
+ behavior: 'instant',
264
+ element: optionRef._elementRef.nativeElement,
265
+ container: bodyRef._containerElementRef?.nativeElement,
266
+ });
267
+ }), takeUntil(this._destroy$), takeUntil(this._animatedOverlay.afterClosed()))
268
+ .subscribe();
210
269
  }
211
270
  close() {
212
271
  if (!this._isOpen || this._animatedOverlay.isUnmounting)
@@ -346,7 +405,7 @@ export class ComboboxDirective {
346
405
  this._updateFilter('');
347
406
  return;
348
407
  }
349
- if (this._currentFilter === '') {
408
+ if (this.currentFilter === '') {
350
409
  this._selectionModel.clearSelectedOptions();
351
410
  return;
352
411
  }
@@ -363,7 +422,7 @@ export class ComboboxDirective {
363
422
  if (this._input.nativeInputRef && this._input.nativeInputRef.element.nativeElement.value !== value) {
364
423
  this._input.nativeInputRef.element.nativeElement.value = value;
365
424
  }
366
- if (this._currentFilter === value)
425
+ if (this.currentFilter === value)
367
426
  return;
368
427
  this._currentFilter$.next(value);
369
428
  if (this.filterInternal) {
@@ -459,6 +518,8 @@ export class ComboboxDirective {
459
518
  takeUntil(this._destroy$), tap(([options, initialValue]) => {
460
519
  if (initialValue === null || initialValue === undefined)
461
520
  return;
521
+ if (!this.multiple)
522
+ return;
462
523
  const isPrimitive = isPrimitiveArray(options);
463
524
  const initialValueIsPrimitive = this.multiple
464
525
  ? isPrimitiveArray(initialValue)
@@ -479,15 +540,15 @@ export class ComboboxDirective {
479
540
  }))
480
541
  .subscribe();
481
542
  }
482
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: ComboboxDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
483
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.1", type: ComboboxDirective, isStandalone: true, inputs: { options: "options", initialValue: "initialValue", filterInternal: "filterInternal", loading: "loading", error: "error", emptyText: "emptyText", placeholder: "placeholder", multiple: "multiple", bindLabel: "bindLabel", bindValue: "bindValue", bindKey: "bindKey", allowCustomValues: "allowCustomValues", optionComponent: "optionComponent", selectedOptionComponent: "selectedOptionComponent" }, outputs: { filterChange: "filterChange" }, providers: [
543
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: ComboboxDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
544
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.2", type: ComboboxDirective, isStandalone: true, inputs: { options: "options", initialValue: "initialValue", filterInternal: "filterInternal", loading: "loading", error: "error", emptyText: "emptyText", placeholder: "placeholder", multiple: "multiple", bindLabel: "bindLabel", bindValue: "bindValue", bindKey: "bindKey", allowCustomValues: "allowCustomValues", optionComponent: "optionComponent", selectedOptionComponent: "selectedOptionComponent", bodyErrorComponent: "bodyErrorComponent", bodyLoadingComponent: "bodyLoadingComponent", bodyEmptyComponent: "bodyEmptyComponent" }, outputs: { filterChange: "filterChange" }, providers: [
484
545
  {
485
546
  provide: COMBOBOX_TOKEN,
486
547
  useExisting: ComboboxDirective,
487
548
  },
488
- ], queries: [{ propertyName: "optionTemplate", first: true, predicate: COMBOBOX_OPTION_TEMPLATE_TOKEN, descendants: true, read: TemplateRef }, { propertyName: "selectedOptionTemplate", first: true, predicate: COMBOBOX_SELECTED_OPTION_TEMPLATE_TOKEN, descendants: true, read: TemplateRef }], ngImport: i0 }); }
549
+ ], queries: [{ propertyName: "optionTemplate", first: true, predicate: COMBOBOX_OPTION_TEMPLATE_TOKEN, descendants: true, read: TemplateRef }, { propertyName: "selectedOptionTemplate", first: true, predicate: COMBOBOX_SELECTED_OPTION_TEMPLATE_TOKEN, descendants: true, read: TemplateRef }, { propertyName: "bodyLoadingTemplate", first: true, predicate: COMBOBOX_BODY_LOADING_TEMPLATE_TOKEN, descendants: true, read: TemplateRef }, { propertyName: "bodyErrorTemplate", first: true, predicate: COMBOBOX_BODY_ERROR_TEMPLATE_TOKEN, descendants: true, read: TemplateRef }, { propertyName: "bodyEmptyTemplate", first: true, predicate: COMBOBOX_BODY_EMPTY_TEMPLATE_TOKEN, descendants: true, read: TemplateRef }], ngImport: i0 }); }
489
550
  }
490
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: ComboboxDirective, decorators: [{
551
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: ComboboxDirective, decorators: [{
491
552
  type: Directive,
492
553
  args: [{
493
554
  standalone: true,
@@ -527,6 +588,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
527
588
  type: Input
528
589
  }], selectedOptionComponent: [{
529
590
  type: Input
591
+ }], bodyErrorComponent: [{
592
+ type: Input
593
+ }], bodyLoadingComponent: [{
594
+ type: Input
595
+ }], bodyEmptyComponent: [{
596
+ type: Input
530
597
  }], filterChange: [{
531
598
  type: Output
532
599
  }], optionTemplate: [{
@@ -535,5 +602,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
535
602
  }], selectedOptionTemplate: [{
536
603
  type: ContentChild,
537
604
  args: [COMBOBOX_SELECTED_OPTION_TEMPLATE_TOKEN, { read: TemplateRef }]
605
+ }], bodyLoadingTemplate: [{
606
+ type: ContentChild,
607
+ args: [COMBOBOX_BODY_LOADING_TEMPLATE_TOKEN, { read: TemplateRef }]
608
+ }], bodyErrorTemplate: [{
609
+ type: ContentChild,
610
+ args: [COMBOBOX_BODY_ERROR_TEMPLATE_TOKEN, { read: TemplateRef }]
611
+ }], bodyEmptyTemplate: [{
612
+ type: ContentChild,
613
+ args: [COMBOBOX_BODY_EMPTY_TEMPLATE_TOKEN, { read: TemplateRef }]
538
614
  }] } });
539
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm1zL2NvbXBvbmVudHMvc2VsZWN0L2NvbXBvbmVudHMvY29tYm9ib3gvZGlyZWN0aXZlcy9jb21ib2JveC9jb21ib2JveC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV6RSxPQUFPLEVBQ0wsWUFBWSxFQUNaLFNBQVMsRUFDVCxZQUFZLEVBQ1osY0FBYyxFQUNkLEtBQUssRUFFTCxNQUFNLEVBQ04sV0FBVyxFQUVYLGdCQUFnQixFQUNoQixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxvQkFBb0IsRUFFcEIsd0JBQXdCLEVBQ3hCLGVBQWUsRUFDZixjQUFjLEVBRWQsYUFBYSxFQUNiLHNCQUFzQixFQUN0QixZQUFZLEVBQ1osYUFBYSxFQUNiLGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsZUFBZSxFQUNmLFVBQVUsRUFDVixhQUFhLEVBQ2IsWUFBWSxFQUNaLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sR0FBRyxFQUNILElBQUksRUFDSixTQUFTLEVBQ1QsSUFBSSxFQUNKLFNBQVMsRUFDVCxHQUFHLEVBQ0gsVUFBVSxHQUNYLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFDTCxrQkFBa0IsRUFJbEIsNkJBQTZCLEVBQzdCLGFBQWEsR0FD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LEtBQUs7Z0JBUUYsY0FBYztzQkFEakIsS0FBSztnQkFpQkYsT0FBTztzQkFEVixLQUFLO2dCQVdGLEtBQUs7c0JBRFIsS0FBSztnQkFVTixTQUFTO3NCQURSLEtBQUs7Z0JBSUYsV0FBVztzQkFEZCxLQUFLO2dCQVVGLFFBQVE7c0JBRFgsS0FBSztnQkFNRixTQUFTO3NCQURaLEtBQUs7Z0JBTUYsU0FBUztzQkFEWixLQUFLO2dCQU1GLE9BQU87c0JBRFYsS0FBSztnQkFNRixpQkFBaUI7c0JBRHBCLEtBQUs7Z0JBVUYsZUFBZTtzQkFEbEIsS0FBSztnQkFVRix1QkFBdUI7c0JBRDFCLEtBQUs7Z0JBY2EsWUFBWTtzQkFEOUIsTUFBTTtnQkE4QkgsY0FBYztzQkFEakIsWUFBWTt1QkFBQyw4QkFBOEIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBTy9ELHNCQUFzQjtzQkFEekIsWUFBWTt1QkFBQyx1Q0FBdUMsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBLCBCQUNLU1BBQ0UsIEVOVEVSLCBFU0NBUEUsIFRBQiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBDb21wb25lbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHtcbiAgQ29udGVudENoaWxkLFxuICBEaXJlY3RpdmUsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFRyYWNrQnlGdW5jdGlvbixcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgaW5qZWN0LFxuICBpc0Rldk1vZGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWN0aXZlU2VsZWN0aW9uTW9kZWwsXG4gIEFuaW1hdGVkT3ZlcmxheUNvbXBvbmVudEJhc2UsXG4gIEFuaW1hdGVkT3ZlcmxheURpcmVjdGl2ZSxcbiAgS2V5UHJlc3NNYW5hZ2VyLFxuICBTZWxlY3Rpb25Nb2RlbCxcbiAgU2VsZWN0aW9uTW9kZWxCaW5kaW5nLFxuICBjcmVhdGVEZXN0cm95LFxuICBjcmVhdGVSZWFjdGl2ZUJpbmRpbmdzLFxuICBpc0VtcHR5QXJyYXksXG4gIGlzT2JqZWN0QXJyYXksXG4gIGlzUHJpbWl0aXZlQXJyYXksXG59IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjYXRjaEVycm9yLFxuICBjb21iaW5lTGF0ZXN0LFxuICBkZWJvdW5jZVRpbWUsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIG1hcCxcbiAgc2tpcCxcbiAgc2tpcFdoaWxlLFxuICB0YWtlLFxuICB0YWtlVW50aWwsXG4gIHRhcCxcbiAgdGhyb3dFcnJvcixcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJTlBVVF9UT0tFTiB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgU0VMRUNUX0ZJRUxEX1RPS0VOIH0gZnJvbSAnLi4vLi4vLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQge1xuICBDb21ib2JveE9wdGlvblR5cGUsXG4gIENvbXBvbmVudFdpdGhPcHRpb24sXG4gIEtleUhhbmRsZXJSZXN1bHQsXG4gIFRlbXBsYXRlUmVmV2l0aE9wdGlvbixcbiAgYXNzZXRDb21ib2JveEJvZHlDb21wb25lbnRTZXQsXG4gIGNvbWJvYm94RXJyb3IsXG59IGZyb20gJy4uLy4uL3ByaXZhdGUnO1xuaW1wb3J0IHsgaXNPcHRpb25EaXNhYmxlZCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IENPTUJPQk9YX09QVElPTl9URU1QTEFURV9UT0tFTiB9IGZyb20gJy4uL2NvbWJvYm94LW9wdGlvbi10ZW1wbGF0ZSc7XG5pbXBvcnQgeyBDT01CT0JPWF9TRUxFQ1RFRF9PUFRJT05fVEVNUExBVEVfVE9LRU4gfSBmcm9tICcuLi9jb21ib2JveC1zZWxlY3RlZC1vcHRpb24tdGVtcGxhdGUnO1xuXG5leHBvcnQgY29uc3QgQ09NQk9CT1hfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW48Q29tYm9ib3hEaXJlY3RpdmU+KCdFVF9DT01CT0JPWF9JTlBVVF9UT0tFTicpO1xuXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogQ09NQk9CT1hfVE9LRU4sXG4gICAgICB1c2VFeGlzdGluZzogQ29tYm9ib3hEaXJlY3RpdmUsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQ29tYm9ib3hEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuICAvLyNyZWdpb24gSW5qZWN0c1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kkID0gY3JlYXRlRGVzdHJveSgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbnB1dCA9IGluamVjdChJTlBVVF9UT0tFTik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlbGVjdEZpZWxkID0gaW5qZWN0KFNFTEVDVF9GSUVMRF9UT0tFTik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FuaW1hdGVkT3ZlcmxheSA9XG4gICAgaW5qZWN0PEFuaW1hdGVkT3ZlcmxheURpcmVjdGl2ZTxBbmltYXRlZE92ZXJsYXlDb21wb25lbnRCYXNlPj4oQW5pbWF0ZWRPdmVybGF5RGlyZWN0aXZlKTtcblxuICAvLyNyZWdpb24gSW5wdXRzXG5cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmdldEZpbHRlcmVkT3B0aW9ucygpO1xuICB9XG4gIHNldCBvcHRpb25zKHZhbHVlOiB1bmtub3duW10pIHtcbiAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZXRPcHRpb25zKHZhbHVlKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBpbml0aWFsVmFsdWUodmFsdWU6IHVua25vd24pIHtcbiAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZXRTZWxlY3Rpb24odmFsdWUpO1xuICAgIHRoaXMuX2luaXRpYWxWYWx1ZSQubmV4dCh2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBfaW5pdGlhbFZhbHVlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8dW5rbm93bj4obnVsbCk7XG5cbiAgQElucHV0KClcbiAgZ2V0IGZpbHRlckludGVybmFsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJJbnRlcm5hbCQudmFsdWU7XG4gIH1cbiAgc2V0IGZpbHRlckludGVybmFsKHZhbHVlOiB1bmtub3duKSB7XG4gICAgY29uc3QgdmFsID0gYm9vbGVhbkF0dHJpYnV0ZSh2YWx1ZSk7XG4gICAgdGhpcy5fZmlsdGVySW50ZXJuYWwkLm5leHQodmFsKTtcblxuICAgIGlmICghdmFsKSB7XG4gICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZXRGaWx0ZXIoJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZXRGaWx0ZXIodGhpcy5fY3VycmVudEZpbHRlcik7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgX2ZpbHRlckludGVybmFsJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9sb2FkaW5nJC52YWx1ZTtcbiAgfVxuICBzZXQgbG9hZGluZyh2YWx1ZTogdW5rbm93bikge1xuICAgIHRoaXMuX2xvYWRpbmckLm5leHQoYm9vbGVhbkF0dHJpYnV0ZSh2YWx1ZSkpO1xuICB9XG4gIHByaXZhdGUgX2xvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIHJlYWRvbmx5IGxvYWRpbmckID0gdGhpcy5fbG9hZGluZyQuYXNPYnNlcnZhYmxlKCk7XG5cbiAgQElucHV0KClcbiAgZ2V0IGVycm9yKCkge1xuICAgIHJldHVybiB0aGlzLl9lcnJvciQudmFsdWU7XG4gIH1cbiAgc2V0IGVycm9yKHZhbHVlOiB1bmtub3duKSB7XG4gICAgdGhpcy5fZXJyb3IkLm5leHQodmFsdWUpO1xuICB9XG4gIHByaXZhdGUgX2Vycm9yJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8dW5rbm93bj4obnVsbCk7XG5cbiAgQElucHV0KClcbiAgZW1wdHlUZXh0ID0gJ05vIHJlc3VsdHMgZm91bmQnO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBwbGFjZWhvbGRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXIkLnZhbHVlO1xuICB9XG4gIHNldCBwbGFjZWhvbGRlcih2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgIHRoaXMuX3BsYWNlaG9sZGVyJC5uZXh0KHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIF9wbGFjZWhvbGRlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBtdWx0aXBsZSh2YWx1ZTogdW5rbm93bikge1xuICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNldEFsbG93TXVsdGlwbGUoYm9vbGVhbkF0dHJpYnV0ZSh2YWx1ZSkpO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IGJpbmRMYWJlbCh2YWx1ZTogU2VsZWN0aW9uTW9kZWxCaW5kaW5nIHwgbnVsbCkge1xuICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNldExhYmVsQmluZGluZyh2YWx1ZSk7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgYmluZFZhbHVlKHZhbHVlOiBTZWxlY3Rpb25Nb2RlbEJpbmRpbmcgfCBudWxsKSB7XG4gICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2V0VmFsdWVCaW5kaW5nKHZhbHVlKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBiaW5kS2V5KHZhbHVlOiBTZWxlY3Rpb25Nb2RlbEJpbmRpbmcgfCBudWxsKSB7XG4gICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2V0S2V5QmluZGluZyh2YWx1ZSk7XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgYWxsb3dDdXN0b21WYWx1ZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2FsbG93Q3VzdG9tVmFsdWVzJC52YWx1ZTtcbiAgfVxuICBzZXQgYWxsb3dDdXN0b21WYWx1ZXModmFsdWU6IHVua25vd24pIHtcbiAgICB0aGlzLl9hbGxvd0N1c3RvbVZhbHVlcyQubmV4dChib29sZWFuQXR0cmlidXRlKHZhbHVlKSk7XG4gIH1cbiAgcHJpdmF0ZSBfYWxsb3dDdXN0b21WYWx1ZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgQElucHV0KClcbiAgZ2V0IG9wdGlvbkNvbXBvbmVudCgpOiBDb21wb25lbnRXaXRoT3B0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbkNvbXBvbmVudCQudmFsdWU7XG4gIH1cbiAgc2V0IG9wdGlvbkNvbXBvbmVudChjb21wb25lbnQ6IENvbXBvbmVudFdpdGhPcHRpb24gfCBudWxsKSB7XG4gICAgdGhpcy5fb3B0aW9uQ29tcG9uZW50JC5uZXh0KGNvbXBvbmVudCk7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uQ29tcG9uZW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29tcG9uZW50V2l0aE9wdGlvbiB8IG51bGw+KG51bGwpO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBzZWxlY3RlZE9wdGlvbkNvbXBvbmVudCgpOiBDb21wb25lbnRXaXRoT3B0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkT3B0aW9uQ29tcG9uZW50JC52YWx1ZTtcbiAgfVxuICBzZXQgc2VsZWN0ZWRPcHRpb25Db21wb25lbnQoY29tcG9uZW50OiBDb21wb25lbnRXaXRoT3B0aW9uIHwgbnVsbCkge1xuICAgIHRoaXMuX3NlbGVjdGVkT3B0aW9uQ29tcG9uZW50JC5uZXh0KGNvbXBvbmVudCk7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfc2VsZWN0ZWRPcHRpb25Db21wb25lbnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb21wb25lbnRXaXRoT3B0aW9uIHwgbnVsbD4obnVsbCk7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIE91dHB1dHNcblxuICBAT3V0cHV0KClcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZpbHRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBNZW1iZXJzXG5cbiAgcHJpdmF0ZSBfc2hvdWxkSWdub3JlTmV4dEJsdXJFdmVudCA9IGZhbHNlO1xuICBwcml2YXRlIF9kZWxldGVkU2VhcmNoV2l0aEtleVByZXNzID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBnZXQgX2N1cnJlbnRGaWx0ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRGaWx0ZXIkLnZhbHVlO1xuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgX2N1cnJlbnRGaWx0ZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcblxuICBwcml2YXRlIGdldCBfaXNPcGVuKCkge1xuICAgIHJldHVybiB0aGlzLl9hbmltYXRlZE92ZXJsYXkuaXNNb3VudGVkO1xuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzT3BlbiQgPSB0aGlzLl9hbmltYXRlZE92ZXJsYXkuaXNNb3VudGVkJDtcblxuICByZWFkb25seSBfc2VsZWN0aW9uTW9kZWwgPSBuZXcgU2VsZWN0aW9uTW9kZWwoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYWN0aXZlU2VsZWN0aW9uTW9kZWwgPSBuZXcgQWN0aXZlU2VsZWN0aW9uTW9kZWwoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYmFja3NwYWNlS2V5UHJlc3NNYW5hZ2VyID0gbmV3IEtleVByZXNzTWFuYWdlcihCQUNLU1BBQ0UpO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkT3B0aW9ucyQgPSB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3Rpb24kO1xuICByZWFkb25seSBtdWx0aXBsZSQgPSB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5hbGxvd011bHRpcGxlJDtcbiAgcmVhZG9ubHkgb3B0aW9ucyQgPSB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5maWx0ZXJlZE9wdGlvbnMkO1xuICByZWFkb25seSByYXdPcHRpb25zJCA9IHRoaXMuX3NlbGVjdGlvbk1vZGVsLm9wdGlvbnMkO1xuXG4gIEBDb250ZW50Q2hpbGQoQ09NQk9CT1hfT1BUSU9OX1RFTVBMQVRFX1RPS0VOLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIHNldCBvcHRpb25UZW1wbGF0ZSh2YWx1ZTogVGVtcGxhdGVSZWZXaXRoT3B0aW9uIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fb3B0aW9uVGVtcGxhdGUkLm5leHQodmFsdWUgPz8gbnVsbCk7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZW1wbGF0ZVJlZldpdGhPcHRpb24gfCBudWxsPihudWxsKTtcblxuICBAQ29udGVudENoaWxkKENPTUJPQk9YX1NFTEVDVEVEX09QVElPTl9URU1QTEFURV9UT0tFTiwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBzZXQgc2VsZWN0ZWRPcHRpb25UZW1wbGF0ZSh2YWx1ZTogVGVtcGxhdGVSZWZXaXRoT3B0aW9uIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fc2VsZWN0ZWRPcHRpb25UZW1wbGF0ZSQubmV4dCh2YWx1ZSA/PyBudWxsKTtcbiAgfVxuICBwcml2YXRlIHJlYWRvbmx5IF9zZWxlY3RlZE9wdGlvblRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGVtcGxhdGVSZWZXaXRoT3B0aW9uIHwgbnVsbD4obnVsbCk7XG5cbiAgcmVhZG9ubHkgX2JpbmRpbmdzID0gY3JlYXRlUmVhY3RpdmVCaW5kaW5ncyhcbiAgICB7XG4gICAgICBhdHRyaWJ1dGU6ICdjbGFzcy5ldC1jb21ib2JveC0tbG9hZGluZycsXG4gICAgICBvYnNlcnZhYmxlOiB0aGlzLl9sb2FkaW5nJCxcbiAgICB9LFxuICAgIHtcbiAgICAgIGF0dHJpYnV0ZTogJ2NsYXNzLmV0LWNvbWJvYm94LS1lcnJvcicsXG4gICAgICBvYnNlcnZhYmxlOiB0aGlzLl9lcnJvciQucGlwZShtYXAoKHYpID0+ICEhdikpLFxuICAgIH0sXG4gICAge1xuICAgICAgYXR0cmlidXRlOiAnY2xhc3MuZXQtY29tYm9ib3gtLW9wZW4nLFxuICAgICAgb2JzZXJ2YWJsZTogdGhpcy5faXNPcGVuJCxcbiAgICB9LFxuICAgIHtcbiAgICAgIGF0dHJpYnV0ZTogJ2NsYXNzLmV0LXNlbGVjdC1maWVsZC0tbXVsdGlwbGUnLFxuICAgICAgb2JzZXJ2YWJsZTogdGhpcy5tdWx0aXBsZSQsXG4gICAgfSxcbiAgICB7XG4gICAgICBhdHRyaWJ1dGU6ICdjbGFzcy5ldC1zZWxlY3QtZmllbGQtLW9wZW4nLFxuICAgICAgb2JzZXJ2YWJsZTogdGhpcy5faXNPcGVuJCxcbiAgICB9LFxuICApO1xuXG4gIHByaXZhdGUgX2NvbWJvYm94Qm9keUNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxBbmltYXRlZE92ZXJsYXlDb21wb25lbnRCYXNlPiB8IG51bGwgPSBudWxsO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBDb21wdXRlc1xuXG4gIHJlYWRvbmx5IGN1c3RvbU9wdGlvblRwbCQgPSB0aGlzLl9vcHRpb25UZW1wbGF0ZSQuYXNPYnNlcnZhYmxlKCk7XG4gIHJlYWRvbmx5IGN1c3RvbU9wdGlvbkNvbXBvbmVudCQgPSB0aGlzLl9vcHRpb25Db21wb25lbnQkLmFzT2JzZXJ2YWJsZSgpO1xuICByZWFkb25seSBjdXN0b21TZWxlY3RlZE9wdGlvblRwbCQgPSB0aGlzLl9zZWxlY3RlZE9wdGlvblRlbXBsYXRlJC5hc09ic2VydmFibGUoKTtcbiAgcmVhZG9ubHkgY3VzdG9tU2VsZWN0ZWRPcHRpb25Db21wb25lbnQkID0gdGhpcy5fc2VsZWN0ZWRPcHRpb25Db21wb25lbnQkLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBMaWZlY3ljbGVcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9hY3RpdmVTZWxlY3Rpb25Nb2RlbC5zZXRTZWxlY3Rpb25Nb2RlbCh0aGlzLl9zZWxlY3Rpb25Nb2RlbCk7XG5cbiAgICB0aGlzLl9hbmltYXRlZE92ZXJsYXkucGxhY2VtZW50ID0gJ2JvdHRvbSc7XG4gICAgdGhpcy5fYW5pbWF0ZWRPdmVybGF5LmZhbGxiYWNrUGxhY2VtZW50cyA9IFsnYm90dG9tJywgJ3RvcCddO1xuICAgIHRoaXMuX2FuaW1hdGVkT3ZlcmxheS5hdXRvUmVzaXplID0gdHJ1ZTtcblxuICAgIHRoaXMuX3NlbGVjdEZpZWxkLl9iaW5kaW5ncy5wdXNoKHtcbiAgICAgIGF0dHJpYnV0ZTogJ2NsYXNzLmV0LXNlbGVjdC1maWVsZC0tb3BlbicsXG4gICAgICBvYnNlcnZhYmxlOiB0aGlzLl9pc09wZW4kLFxuICAgIH0pO1xuXG4gICAgdGhpcy5fc2VsZWN0RmllbGQuX2JpbmRpbmdzLnB1c2goe1xuICAgICAgYXR0cmlidXRlOiAnY2xhc3MuZXQtc2VsZWN0LWZpZWxkLS1tdWx0aXBsZScsXG4gICAgICBvYnNlcnZhYmxlOiB0aGlzLm11bHRpcGxlJCxcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX2luaXREaXNwYXRjaEZpbHRlckNoYW5nZXMoKTtcblxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgdGhpcy5fZGVidWdWYWxpZGF0ZUNvbWJvYm94Q29uZmlnKCk7XG4gICAgICB0aGlzLl9kZWJ1Z1ZhbGlkYXRlT3B0aW9uQW5kSW5pdGlhbFZhbHVlU2NoZW1hKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwudmFsdWUkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgdGFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIHRoaXMuX2lucHV0Ll91cGRhdGVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgdGhpcy5fc2V0RmlsdGVyRnJvbUlucHV0VmFsdWUoKTtcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLl9pbnB1dC5uYXRpdmVJbnB1dFJlZiRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICBkZWJvdW5jZVRpbWUoMCksXG4gICAgICAgIGZpbHRlcigocmVmKSA9PiAhIXJlZj8uZWxlbWVudC5uYXRpdmVFbGVtZW50KSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuX3VwZGF0ZUZpbHRlcih0aGlzLl9jdXJyZW50RmlsdGVyKSksXG4gICAgICAgIHRha2UoMSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gUHVibGljIE1ldGhvZHNcblxuICBzZXRCb2R5Q29tcG9uZW50KGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxBbmltYXRlZE92ZXJsYXlDb21wb25lbnRCYXNlPikge1xuICAgIHRoaXMuX2NvbWJvYm94Qm9keUNvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgfVxuXG4gIGdldE9wdGlvbkxhYmVsKG9wdGlvbjogdW5rbm93bikge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5nZXRMYWJlbCQob3B0aW9uKTtcbiAgfVxuXG4gIGdldE9wdGlvblZhbHVlKG9wdGlvbjogdW5rbm93bikge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5nZXRWYWx1ZSQob3B0aW9uKTtcbiAgfVxuXG4gIHJlbW92ZVNlbGVjdGVkT3B0aW9uKG9wdGlvbjogdW5rbm93bikge1xuICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnJlbW92ZVNlbGVjdGVkT3B0aW9uKG9wdGlvbik7XG5cbiAgICB0aGlzLl9pbnB1dC5fbWFya0FzVG91Y2hlZCgpO1xuICB9XG5cbiAgb3BlbigpIHtcbiAgICBhc3NldENvbWJvYm94Qm9keUNvbXBvbmVudFNldCh0aGlzLl9jb21ib2JveEJvZHlDb21wb25lbnQpO1xuXG4gICAgaWYgKHRoaXMuX2lzT3BlbiB8fCB0aGlzLl9pbnB1dC5kaXNhYmxlZCB8fCB0aGlzLl9hbmltYXRlZE92ZXJsYXkuaXNNb3VudGluZykgcmV0dXJuO1xuXG4gICAgdGhpcy5fYW5pbWF0ZWRPdmVybGF5Lm1vdW50KHtcbiAgICAgIGNvbXBvbmVudDogdGhpcy5fY29tYm9ib3hCb2R5Q29tcG9uZW50LFxuICAgICAgbWlycm9yV2lkdGg6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzT3BlbiB8fCB0aGlzLl9hbmltYXRlZE92ZXJsYXkuaXNVbm1vdW50aW5nKSByZXR1cm47XG5cbiAgICB0aGlzLl9hbmltYXRlZE92ZXJsYXkudW5tb3VudCgpO1xuICB9XG5cbiAgZm9jdXMoKSB7XG4gICAgdGhpcy5faW5wdXQubmF0aXZlSW5wdXRSZWY/LmVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgc2VsZWN0SW5wdXRBbmRPcGVuKCkge1xuICAgIGlmICh0aGlzLl9pbnB1dC5kaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgdGhpcy5faW5wdXQubmF0aXZlSW5wdXRSZWY/LmVsZW1lbnQubmF0aXZlRWxlbWVudC5zZWxlY3QoKTtcbiAgICB0aGlzLm9wZW4oKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWVGcm9tT3B0aW9uKG9wdGlvbjogdW5rbm93bikge1xuICAgIHRoaXMuX2lucHV0Ll9tYXJrQXNUb3VjaGVkKCk7XG5cbiAgICBpZiAodGhpcy5fc2VsZWN0aW9uTW9kZWwuYWxsb3dNdWx0aXBsZSkge1xuICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwudG9nZ2xlU2VsZWN0ZWRPcHRpb24ob3B0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuYWRkU2VsZWN0ZWRPcHRpb24ob3B0aW9uKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3NlbGVjdGlvbk1vZGVsLmFsbG93TXVsdGlwbGUpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIHRoaXMuX3NldEZpbHRlckZyb21JbnB1dFZhbHVlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3VwZGF0ZUZpbHRlcignJyk7XG4gICAgfVxuICB9XG5cbiAgaXNPcHRpb25TZWxlY3RlZChvcHRpb246IHVua25vd24pIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZCQob3B0aW9uKTtcbiAgfVxuXG4gIGlzT3B0aW9uQWN0aXZlKG9wdGlvbjogdW5rbm93bikge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVTZWxlY3Rpb25Nb2RlbC5hY3RpdmVPcHRpb24kLnBpcGUobWFwKChhY3RpdmVPcHRpb24pID0+IGFjdGl2ZU9wdGlvbiA9PT0gb3B0aW9uKSk7XG4gIH1cblxuICB0cmFja0J5T3B0aW9uS2V5Rm46IFRyYWNrQnlGdW5jdGlvbjx1bmtub3duPiA9IChpbmRleCwgaXRlbSkgPT4gdGhpcy5fc2VsZWN0aW9uTW9kZWwuZ2V0S2V5KGl0ZW0pO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBQcm90ZWN0ZWQgTWV0aG9kc1xuXG4gIF9pZ25vcmVOZXh0Qmx1ckV2ZW50KCkge1xuICAgIHRoaXMuX3Nob3VsZElnbm9yZU5leHRCbHVyRXZlbnQgPSB0cnVlO1xuICB9XG5cbiAgX3Byb2Nlc3NLZXlkb3duRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBjb25zdCBrZXlDb2RlID0gZXZlbnQua2V5Q29kZTtcbiAgICBjb25zdCBpc09wZW4gPSB0aGlzLl9pc09wZW47XG4gICAgY29uc3QgaXNNdWx0aXBsZSA9IHRoaXMuX3NlbGVjdGlvbk1vZGVsLmFsbG93TXVsdGlwbGU7XG4gICAgY29uc3QgY2FuQWRkQ3VzdG9tVmFsdWUgPSB0aGlzLmFsbG93Q3VzdG9tVmFsdWVzO1xuICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgICBjb25zdCBoYXNGaWx0ZXJWYWx1ZSA9ICEhdmFsdWU7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0aW9uO1xuICAgIGNvbnN0IGlzQmFja3NwYWNlUHJlc3NlZCA9IHRoaXMuX2JhY2tzcGFjZUtleVByZXNzTWFuYWdlci5pc1ByZXNzZWQoZXZlbnQpO1xuXG4gICAgY29uc3QgcmVzdWx0OiBLZXlIYW5kbGVyUmVzdWx0ID0ge307XG5cbiAgICBpZiAoa2V5Q29kZSA9PT0gRU5URVIpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgLy8gVGhlIHVzZXIgdHlwZWQgYSBjdXN0b20gdmFsdWUgYW5kIHByZXNzZWQgZW50ZXIuIEFkZCBpdCB0byB0aGUgc2VsZWN0ZWQgb3B0aW9ucy5cbiAgICAgIC8vIEZJWE1FOiBDdXJyZW50bHkgaXQgaXMgaW1wb3NzaWJsZSB0byBzZWxlY3QgdGhlIGFjdGl2ZSBvcHRpb24gd2l0aCB0aGUga2V5Ym9hcmQgaWYgY2FuQWRkQ3VzdG9tVmFsdWUgaXMgdHJ1ZS5cbiAgICAgIC8vIFRvIGZpeCB0aGlzLCB0aGUgYWN0aXZlIG9wdGlvbiBzaG91bGQgYWxzbyBpbmNsdWRlIHRoZSBvcmlnaW4gaXQgZ290IGFjdGl2ZSBmcm9tIChrZXlib2FyZCBvciBwcm9ncmFtbWF0aWMpLlxuICAgICAgLy8gVGhlIFwidmFsdWVcIiBjaGFuZ2luZyBzaG91bGQgcHV0IHRoZSBjb21ib2JveCBpbnRvIGEgXCJ1c2UgdGhlIGN1c3RvbSBpbnB1dCBvbiBlbnRlclwiIG1vZGUuXG4gICAgICAvLyBUaGUgXCJhY3RpdmUgb3B0aW9uXCIgY2hhbmdpbmcgdmlhIGtleWJvYXJkIHNob3VsZCBwdXQgdGhlIGNvbWJvYm94IGludG8gYSBcInVzZSB0aGUgYWN0aXZlIG9wdGlvbiBvbiBlbnRlclwiIG1vZGUuXG4gICAgICBpZiAoY2FuQWRkQ3VzdG9tVmFsdWUgJiYgaGFzRmlsdGVyVmFsdWUpIHtcbiAgICAgICAgcmVzdWx0Lm9wdGlvbkFjdGlvbiA9IHsgdHlwZTogJ2FkZCcsIG9wdGlvbjogdmFsdWUgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZU9wdGlvbiA9IHRoaXMuX2FjdGl2ZVNlbGVjdGlvbk1vZGVsLmFjdGl2ZU9wdGlvbjtcblxuICAgICAgICBpZiAoYWN0aXZlT3B0aW9uKSB7XG4gICAgICAgICAgaWYgKGlzTXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHJlc3VsdC5vcHRpb25BY3Rpb24gPSB7IHR5cGU6ICd0b2dnbGUnLCBvcHRpb246IGFjdGl2ZU9wdGlvbiB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQub3B0aW9uQWN0aW9uID0geyB0eXBlOiAnYWRkJywgb3B0aW9uOiBhY3RpdmVPcHRpb24gfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzTXVsdGlwbGUpIHtcbiAgICAgICAgcmVzdWx0LnNldEZpbHRlciA9ICcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0Lm92ZXJsYXlPcGVyYXRpb24gPSAnY2xvc2UnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5faW50ZXJwcmV0S2V5SGFuZGxlclJlc3VsdChyZXN1bHQpO1xuICAgIH1cblxuICAgIGlmIChrZXlDb2RlID09PSBFU0NBUEUpIHtcbiAgICAgIGlmIChpc09wZW4pIHtcbiAgICAgICAgcmVzdWx0Lm92ZXJsYXlPcGVyYXRpb24gPSAnY2xvc2UnO1xuICAgICAgfSBlbHNlIGlmICghaXNNdWx0aXBsZSkge1xuICAgICAgICByZXN1bHQuc2V0RmlsdGVyID0gJyc7XG4gICAgICAgIHJlc3VsdC5vcHRpb25BY3Rpb24gPSAnY2xlYXInO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5faW50ZXJwcmV0S2V5SGFuZGxlclJlc3VsdChyZXN1bHQpO1xuICAgIH1cblxuICAgIGlmIChrZXlDb2RlID09PSBUQUIpIHtcbiAgICAgIHJlc3VsdC5vdmVybGF5T3BlcmF0aW9uID0gJ2Nsb3NlJztcbiAgICAgIHJldHVybiB0aGlzLl9pbnRlcnByZXRLZXlIYW5kbGVyUmVzdWx0KHJlc3VsdCk7XG4gICAgfVxuXG4gICAgaWYgKGtleUNvZGUgPT09IEJBQ0tTUEFDRSkge1xuICAgICAgaWYgKGlzQmFja3NwYWNlUHJlc3NlZCAmJiB2YWx1ZSkge1xuICAgICAgICB0aGlzLl9kZWxldGVkU2VhcmNoV2l0aEtleVByZXNzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFoYXNGaWx0ZXJWYWx1ZSAmJiBpc011bHRpcGxlICYmIHNlbGVjdGlvbi5sZW5ndGggJiYgIXRoaXMuX2RlbGV0ZWRTZWFyY2hXaXRoS2V5UHJlc3MpIHtcbiAgICAgICAgcmVzdWx0Lm9wdGlvbkFjdGlvbiA9IHsgdHlwZTogJ3JlbW92ZScsIG9wdGlvbjogc2VsZWN0aW9uW3NlbGVjdGlvbi5sZW5ndGggLSAxXSB9O1xuICAgICAgICByZXR1cm4gdGhpcy5faW50ZXJwcmV0S2V5SGFuZGxlclJlc3VsdChyZXN1bHQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzQmFja3NwYWNlUHJlc3NlZCkge1xuICAgICAgICB0aGlzLl9kZWxldGVkU2VhcmNoV2l0aEtleVByZXNzID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2RlbGV0ZWRTZWFyY2hXaXRoS2V5UHJlc3MgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIWlzT3Blbikge1xuICAgICAgcmVzdWx0Lm92ZXJsYXlPcGVyYXRpb24gPSAnb3Blbic7XG4gICAgfVxuXG4gICAgdGhpcy5fYWN0aXZlU2VsZWN0aW9uTW9kZWwuZXZhbHVhdGVLZXlib2FyZEV2ZW50KGV2ZW50KTtcblxuICAgIGlmIChrZXlDb2RlID09PSBBICYmIGV2ZW50LmN0cmxLZXkgJiYgaXNNdWx0aXBsZSkge1xuICAgICAgcmVzdWx0Lm9wdGlvbkFjdGlvbiA9ICd0b2dnbGVBbGwnO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5faW50ZXJwcmV0S2V5SGFuZGxlclJlc3VsdChyZXN1bHQpO1xuICB9XG5cbiAgX3Byb2Nlc3NLZXl1cEV2ZW50KCkge1xuICAgIHRoaXMuX2JhY2tzcGFjZUtleVByZXNzTWFuYWdlci5jbGVhcigpO1xuICB9XG5cbiAgX3Byb2Nlc3NJbnB1dEV2ZW50KGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcblxuICAgIHRoaXMuX3VwZGF0ZUZpbHRlcih2YWx1ZSk7XG4gIH1cblxuICBfaGFuZGxlQmx1ckV2ZW50KCkge1xuICAgIGlmICh0aGlzLl9zaG91bGRJZ25vcmVOZXh0Qmx1ckV2ZW50KSB7XG4gICAgICB0aGlzLl9zaG91bGRJZ25vcmVOZXh0Qmx1ckV2ZW50ID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW5wdXQuX21hcmtBc1RvdWNoZWQoKTtcbiAgICB0aGlzLl9pbnB1dC5fc2V0U2hvdWxkRGlzcGxheUVycm9yKHRydWUpO1xuXG4gICAgaWYgKHRoaXMuX3NlbGVjdGlvbk1vZGVsLmFsbG93TXVsdGlwbGUpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZUZpbHRlcignJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRGaWx0ZXIgPT09ICcnKSB7XG4gICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jbGVhclNlbGVjdGVkT3B0aW9ucygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3NldEZpbHRlckZyb21JbnB1dFZhbHVlKCk7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gUHJpdmF0ZSBNZXRob2RzXG5cbiAgcHJpdmF0ZSBfaW5pdERpc3BhdGNoRmlsdGVyQ2hhbmdlcygpIHtcbiAgICB0aGlzLl9jdXJyZW50RmlsdGVyJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHNraXBXaGlsZSgoKSA9PiB0aGlzLmZpbHRlckludGVybmFsKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKDMwMCksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIHRhcCgodikgPT4gdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdCh2KSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVGaWx0ZXIodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLl9pbnB1dC5uYXRpdmVJbnB1dFJlZiAmJiB0aGlzLl9pbnB1dC5uYXRpdmVJbnB1dFJlZi5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl9pbnB1dC5uYXRpdmVJbnB1dFJlZi5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY3VycmVudEZpbHRlciA9PT0gdmFsdWUpIHJldHVybjtcblxuICAgIHRoaXMuX2N1cnJlbnRGaWx0ZXIkLm5leHQodmFsdWUpO1xuXG4gICAgaWYgKHRoaXMuZmlsdGVySW50ZXJuYWwpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNldEZpbHRlcih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2V0RmlsdGVyRnJvbUlucHV0VmFsdWUoKSB7XG4gICAgaWYgKHRoaXMuX3NlbGVjdGlvbk1vZGVsLmFsbG93TXVsdGlwbGUpIHJldHVybjtcblxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5faW5wdXQudmFsdWU7XG5cbiAgICBpZiAoIXZhbHVlIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB0aGlzLl91cGRhdGVGaWx0ZXIoJycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuX3NlbGVjdGlvbk1vZGVsLmdldE9wdGlvbkJ5VmFsdWUodmFsdWUpO1xuXG4gICAgaWYgKCFvcHRpb24pIHJldHVybjtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fc2VsZWN0aW9uTW9kZWwuZ2V0TGFiZWwob3B0aW9uKTtcblxuICAgIGlmICh0eXBlb2YgbGFiZWwgIT09ICdzdHJpbmcnKSByZXR1cm47XG5cbiAgICB0aGlzLl91cGRhdGVGaWx0ZXIobGFiZWwpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW50ZXJwcmV0S2V5SGFuZGxlclJlc3VsdChyZXN1bHQ6IEtleUhhbmRsZXJSZXN1bHQpIHtcbiAgICBpZiAocmVzdWx0Lm92ZXJsYXlPcGVyYXRpb24gPT09ICdjbG9zZScpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9IGVsc2UgaWYgKHJlc3VsdC5vdmVybGF5T3BlcmF0aW9uID09PSAnb3BlbicpIHtcbiAgICAgIHRoaXMub3BlbigpO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQuc2V0RmlsdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZUZpbHRlcihyZXN1bHQuc2V0RmlsdGVyKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0Lm9wdGlvbkFjdGlvbikge1xuICAgICAgaWYgKHR5cGVvZiByZXN1bHQub3B0aW9uQWN0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAocmVzdWx0Lm9wdGlvbkFjdGlvbiA9PT0gJ2NsZWFyJykge1xuICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNsZWFyU2VsZWN0ZWRPcHRpb25zKCk7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0Lm9wdGlvbkFjdGlvbiA9PT0gJ3RvZ2dsZUFsbCcpIHtcbiAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC50b2dnbGVBbGxTZWxlY3RlZE9wdGlvbnMoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgeyB0eXBlLCBvcHRpb24gfSA9IHJlc3VsdC5vcHRpb25BY3Rpb247XG5cbiAgICAgICAgaWYgKGlzT3B0aW9uRGlzYWJsZWQob3B0aW9uKSkgcmV0dXJuO1xuXG4gICAgICAgIGlmICh0eXBlID09PSAnYWRkJykge1xuICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmFkZFNlbGVjdGVkT3B0aW9uKG9wdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZSA9PT0gJ3JlbW92ZScpIHtcbiAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5yZW1vdmVTZWxlY3RlZE9wdGlvbihvcHRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGUgPT09ICd0b2dnbGUnKSB7XG4gICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwudG9nZ2xlU2VsZWN0ZWRPcHRpb24ob3B0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBEZXYgbW9kZVxuXG4gIHByaXZhdGUgX2RlYnVnVmFsaWRhdGVDb21ib2JveENvbmZpZyhpc1JldHJ5ID0gZmFsc2UpIHtcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLl9zZWxlY3Rpb25Nb2RlbC5sYWJlbEJpbmRpbmckLCB0aGlzLl9zZWxlY3Rpb25Nb2RlbC52YWx1ZUJpbmRpbmckLCB0aGlzLl9hbGxvd0N1c3RvbVZhbHVlcyRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHNraXAoaXNSZXRyeSA/IDEgOiAwKSwgLy8gU2tpcCBpZiByZXRyeWluZyB0byBhdm9pZCBpbmZpbml0ZSBsb29wXG4gICAgICAgIGRlYm91bmNlVGltZSgwKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgbWFwKChbYmluZExhYmVsLCBiaW5kVmFsdWUsIGFsbG93Q3VzdG9tVmFsdWVzXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNob3VsZEJlT2JqZWN0cyA9IGJpbmRMYWJlbCAmJiBiaW5kVmFsdWUgJiYgIWFsbG93Q3VzdG9tVmFsdWVzO1xuXG4gICAgICAgICAgaWYgKHNob3VsZEJlT2JqZWN0cykge1xuICAgICAgICAgICAgcmV0dXJuIENvbWJvYm94T3B0aW9uVHlwZS5PYmplY3Q7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIENvbWJvYm94T3B0aW9uVHlwZS5QcmltaXRpdmU7XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoKGV4cGVjdGVkT3B0aW9uVHlwZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5vcHRpb25zO1xuXG4gICAgICAgICAgaWYgKGlzRW1wdHlBcnJheShvcHRpb25zKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChleHBlY3RlZE9wdGlvblR5cGUgPT09IENvbWJvYm94T3B0aW9uVHlwZS5PYmplY3QpIHtcbiAgICAgICAgICAgIGlmICghaXNPYmplY3RBcnJheShvcHRpb25zKSkge1xuICAgICAgICAgICAgICB0aHJvdyBjb21ib2JveEVycm9yKCdvcHRpb25zX29iamVjdF9taXNtYXRjaCcsIHRydWUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoZXhwZWN0ZWRPcHRpb25UeXBlID09PSBDb21ib2JveE9wdGlvblR5cGUuUHJpbWl0aXZlKSB7XG4gICAgICAgICAgICBpZiAoIWlzUHJpbWl0aXZlQXJyYXkob3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgdGhyb3cgY29tYm9ib3hFcnJvcignb3B0aW9uc19wcmltaXRpdmVfbWlzbWF0Y2gnLCB0cnVlLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKChlKSA9PiB7XG4gICAgICAgICAgdGhpcy5fZGVidWdWYWxpZGF0ZUNvbWJvYm94Q29uZmlnKHRydWUpO1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGUpO1xuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2RlYnVnVmFsaWRhdGVPcHRpb25BbmRJbml0aWFsVmFsdWVTY2hlbWEoaXNSZXRyeSA9IGZhbHNlKSB7XG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5vcHRpb25zJCwgdGhpcy5faW5pdGlhbFZhbHVlJF0pXG4gICAgICAucGlwZShcbiAgICAgICAgc2tpcChpc1JldHJ5ID8gMSA6IDApLCAvLyBTa2lwIGlmIHJldHJ5aW5nIHRvIGF2b2lkIGluZmluaXRlIGxvb3BcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgdGFwKChbb3B0aW9ucywgaW5pdGlhbFZhbHVlXSkgPT4ge1xuICAgICAgICAgIGlmIChpbml0aWFsVmFsdWUgPT09IG51bGwgfHwgaW5pdGlhbFZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybjtcblxuICAgICAgICAgIGNvbnN0IGlzUHJpbWl0aXZlID0gaXNQcmltaXRpdmVBcnJheShvcHRpb25zKTtcbiAgICAgICAgICBjb25zdCBpbml0aWFsVmFsdWVJc1ByaW1pdGl2ZSA9IHRoaXMubXVsdGlwbGVcbiAgICAgICAgICAgID8gaXNQcmltaXRpdmVBcnJheShpbml0aWFsVmFsdWUpXG4gICAgICAgICAgICA6IHR5cGVvZiBpbml0aWFsVmFsdWUgIT09ICdvYmplY3QnO1xuXG4gICAgICAgICAgaWYgKGlzUHJpbWl0aXZlKSB7XG4gICAgICAgICAgICBpZiAoIWluaXRpYWxWYWx1ZUlzUHJpbWl0aXZlKSB7XG4gICAgICAgICAgICAgIHRocm93IGNvbWJvYm94RXJyb3IoJ2luaXRfdmFsX3ByaW1pdGl2ZV9taXNtYXRjaCcsIHRydWUsIHsgaW5pdGlhbFZhbHVlLCBvcHRpb25zIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaW5pdGlhbFZhbHVlSXNQcmltaXRpdmUpIHtcbiAgICAgICAgICAgICAgdGhyb3cgY29tYm9ib3hFcnJvcignaW5pdF92YWxfb2JqZWN0X21pc21hdGNoJywgdHJ1ZSwgeyBpbml0aWFsVmFsdWUsIG9wdGlvbnMgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZSkgPT4ge1xuICAgICAgICAgIHRoaXMuX2RlYnVnVmFsaWRhdGVPcHRpb25BbmRJbml0aWFsVmFsdWVTY2hlbWEodHJ1ZSk7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZSk7XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG59XG4iXX0=
615
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm1zL2NvbXBvbmVudHMvc2VsZWN0L2NvbXBvbmVudHMvY29tYm9ib3gvZGlyZWN0aXZlcy9jb21ib2JveC9jb21ib2JveC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV6RSxPQUFPLEVBQ0wsWUFBWSxFQUNaLFNBQVMsRUFFVCxZQUFZLEVBQ1osY0FBYyxFQUNkLEtBQUssRUFFTCxNQUFNLEVBQ04sV0FBVyxFQUVYLGdCQUFnQixFQUNoQixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQ0wsb0JBQW9CLEVBRXBCLHdCQUF3QixFQUN4QixlQUFlLEVBQ2YsY0FBYyxFQUdkLGFBQWEsRUFDYixzQkFBc0IsRUFDdEIsWUFBWSxFQUNaLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsZUFBZSxHQUNoQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsZUFBZSxFQUNmLFVBQVUsRUFDVixhQUFhLEVBQ2IsWUFBWSxFQUNaLG9CQUFvQixFQUNwQixHQUFHLEVBQ0gsRUFBRSxFQUNGLElBQUksRUFDSixTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsR0FBRyxFQUNILFVBQVUsR0FDWCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFB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QUFLO2dCQU1GLGlCQUFpQjtzQkFEcEIsS0FBSztnQkFVRixlQUFlO3NCQURsQixLQUFLO2dCQVVGLHVCQUF1QjtzQkFEMUIsS0FBSztnQkFVRixrQkFBa0I7c0JBRHJCLEtBQUs7Z0JBVUYsb0JBQW9CO3NCQUR2QixLQUFLO2dCQVVGLGtCQUFrQjtzQkFEckIsS0FBSztnQkFjYSxZQUFZO3NCQUQ5QixNQUFNO2dCQStCSCxjQUFjO3NCQURqQixZQUFZO3VCQUFDLDhCQUE4QixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFPL0Qsc0JBQXNCO3NCQUR6QixZQUFZO3VCQUFDLHVDQUF1QyxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFPeEUsbUJBQW1CO3NCQUR0QixZQUFZO3VCQUFDLG9DQUFvQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFPckUsaUJBQWlCO3NCQURwQixZQUFZO3VCQUFDLGtDQUFrQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFPbkUsaUJBQWlCO3NCQURwQixZQUFZO3VCQUFDLGtDQUFrQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEEsIEJBQ0tTUEFDRSwgRU5URVIsIEVTQ0FQRSwgVEFCIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7IENvbXBvbmVudFR5cGUgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQge1xuICBDb250ZW50Q2hpbGQsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVHJhY2tCeUZ1bmN0aW9uLFxuICBib29sZWFuQXR0cmlidXRlLFxuICBpbmplY3QsXG4gIGlzRGV2TW9kZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7XG4gIEFjdGl2ZVNlbGVjdGlvbk1vZGVsLFxuICBBbmltYXRlZE92ZXJsYXlDb21wb25lbnRCYXNlLFxuICBBbmltYXRlZE92ZXJsYXlEaXJlY3RpdmUsXG4gIEtleVByZXNzTWFuYWdlcixcbiAgU2VsZWN0aW9uTW9kZWwsXG4gIFNlbGVjdGlvbk1vZGVsQmluZGluZyxcbiAgVHlwZWRRdWVyeUxpc3QsXG4gIGNyZWF0ZURlc3Ryb3ksXG4gIGNyZWF0ZVJlYWN0aXZlQmluZGluZ3MsXG4gIGlzRW1wdHlBcnJheSxcbiAgaXNPYmplY3RBcnJheSxcbiAgaXNQcmltaXRpdmVBcnJheSxcbiAgc2Nyb2xsVG9FbGVtZW50LFxufSBmcm9tICdAZXRobGV0ZS9jb3JlJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY2F0Y2hFcnJvcixcbiAgY29tYmluZUxhdGVzdCxcbiAgZGVib3VuY2VUaW1lLFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgbWFwLFxuICBvZixcbiAgc2tpcCxcbiAgc2tpcFdoaWxlLFxuICBzdGFydFdpdGgsXG4gIHN3aXRjaE1hcCxcbiAgdGFrZVVudGlsLFxuICB0YXAsXG4gIHRocm93RXJyb3IsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSU5QVVRfVE9LRU4gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7IFNFTEVDVF9GSUVMRF9UT0tFTiB9IGZyb20gJy4uLy4uLy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHtcbiAgQ29tYm9ib3hPcHRpb25UeXBlLFxuICBDb21wb25lbnRXaXRoRXJyb3IsXG4gIENvbXBvbmVudFdpdGhPcHRpb24sXG4gIEtleUhhbmRsZXJSZXN1bHQsXG4gIFRlbXBsYXRlUmVmV2l0aEVycm9yLFxuICBUZW1wbGF0ZVJlZldpdGhPcHRpb24sXG4gIGFzc2V0Q29tYm9ib3hCb2R5Q29tcG9uZW50U2V0LFxuICBjb21ib2JveEVycm9yLFxufSBmcm9tICcuLi8uLi9wcml2YXRlJztcbmltcG9ydCB7IGlzT3B0aW9uRGlzYWJsZWQgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBDT01CT0JPWF9CT0RZX0VNUFRZX1RFTVBMQVRFX1RPS0VOIH0gZnJvbSAnLi4vY29tYm9ib3gtYm9keS1lbXB0eS10ZW1wbGF0ZSc7XG5pbXBvcnQgeyBDT01CT0JPWF9CT0RZX0VSUk9SX1RFTVBMQVRFX1RPS0VOIH0gZnJvbSAnLi4vY29tYm9ib3gtYm9keS1lcnJvci10ZW1wbGF0ZSc7XG5pbXBvcnQgeyBDT01CT0JPWF9CT0RZX0xPQURJTkdfVEVNUExBVEVfVE9LRU4gfSBmcm9tICcuLi9jb21ib2JveC1ib2R5LWxvYWRpbmctdGVtcGxhdGUnO1xuaW1wb3J0IHsgQ09NQk9CT1hfT1BUSU9OX1RFTVBMQVRFX1RPS0VOIH0gZnJvbSAnLi4vY29tYm9ib3gtb3B0aW9uLXRlbXBsYXRlJztcbmltcG9ydCB7IENPTUJPQk9YX1NFTEVDVEVEX09QVElPTl9URU1QTEFURV9UT0tFTiB9IGZyb20gJy4uL2NvbWJvYm94LXNlbGVjdGVkLW9wdGlvbi10ZW1wbGF0ZSc7XG5cbmV4cG9ydCBjb25zdCBDT01CT0JPWF9UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxDb21ib2JveERpcmVjdGl2ZT4oJ0VUX0NPTUJPQk9YX0lOUFVUX1RPS0VOJyk7XG5cbmV4cG9ydCB0eXBlIEFic3RyYWN0Q29tYm9ib3hCb2R5ID0gQW5pbWF0ZWRPdmVybGF5Q29tcG9uZW50QmFzZSAmIHtcbiAgX29wdGlvbnMkOiBCZWhhdmlvclN1YmplY3Q8VHlwZWRRdWVyeUxpc3Q8QWJzdHJhY3RDb21ib2JveE9wdGlvbj4gfCBudWxsPjtcbiAgX2NvbnRhaW5lckVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IHR5cGUgQWJzdHJhY3RDb21ib2JveE9wdGlvbiA9IHtcbiAgX29wdGlvbiQ6IEJlaGF2aW9yU3ViamVjdDx1bmtub3duPjtcbiAgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xufTtcblxuQERpcmVjdGl2ZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IENPTUJPQk9YX1RPS0VOLFxuICAgICAgdXNlRXhpc3Rpbmc6IENvbWJvYm94RGlyZWN0aXZlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIENvbWJvYm94RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgLy8jcmVnaW9uIEluamVjdHNcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95JCA9IGNyZWF0ZURlc3Ryb3koKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaW5wdXQgPSBpbmplY3QoSU5QVVRfVE9LRU4pO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZWxlY3RGaWVsZCA9IGluamVjdChTRUxFQ1RfRklFTERfVE9LRU4pO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hbmltYXRlZE92ZXJsYXkgPSBpbmplY3Q8QW5pbWF0ZWRPdmVybGF5RGlyZWN0aXZlPEFic3RyYWN0Q29tYm9ib3hCb2R5Pj4oQW5pbWF0ZWRPdmVybGF5RGlyZWN0aXZlKTtcblxuICAvLyNyZWdpb24gSW5wdXRzXG5cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmdldEZpbHRlcmVkT3B0aW9ucygpO1xuICB9XG4gIHNldCBvcHRpb25zKHZhbHVlOiB1bmtub3duW10pIHtcbiAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZXRPcHRpb25zKHZhbHVlKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBpbml0aWFsVmFsdWUodmFsdWU6IHVua25vd24pIHtcbiAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZXRTZWxlY3Rpb24odmFsdWUpO1xuICAgIHRoaXMuX2luaXRpYWxWYWx1ZSQubmV4dCh2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBfaW5pdGlhbFZhbHVlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8dW5rbm93bj4obnVsbCk7XG5cbiAgQElucHV0KClcbiAgZ2V0IGZpbHRlckludGVybmFsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJJbnRlcm5hbCQudmFsdWU7XG4gIH1cbiAgc2V0IGZpbHRlckludGVybmFsKHZhbHVlOiB1bmtub3duKSB7XG4gICAgY29uc3QgdmFsID0gYm9vbGVhbkF0dHJpYnV0ZSh2YWx1ZSk7XG4gICAgdGhpcy5fZmlsdGVySW50ZXJuYWwkLm5leHQodmFsKTtcblxuICAgIGlmICghdmFsKSB7XG4gICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZXRGaWx0ZXIoJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZXRGaWx0ZXIodGhpcy5jdXJyZW50RmlsdGVyKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfZmlsdGVySW50ZXJuYWwkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgQElucHV0KClcbiAgZ2V0IGxvYWRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2xvYWRpbmckLnZhbHVlO1xuICB9XG4gIHNldCBsb2FkaW5nKHZhbHVlOiB1bmtub3duKSB7XG4gICAgdGhpcy5fbG9hZGluZyQubmV4dChib29sZWFuQXR0cmlidXRlKHZhbHVlKSk7XG4gIH1cbiAgcHJpdmF0ZSBfbG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgcmVhZG9ubHkgbG9hZGluZyQgPSB0aGlzLl9sb2FkaW5nJC5hc09ic2VydmFibGUoKTtcblxuICBASW5wdXQoKVxuICBnZXQgZXJyb3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Vycm9yJC52YWx1ZTtcbiAgfVxuICBzZXQgZXJyb3IodmFsdWU6IHVua25vd24pIHtcbiAgICB0aGlzLl9lcnJvciQubmV4dCh2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBfZXJyb3IkID0gbmV3IEJlaGF2aW9yU3ViamVjdDx1bmtub3duPihudWxsKTtcblxuICBASW5wdXQoKVxuICBlbXB0eVRleHQgPSAnTm8gcmVzdWx0cyBmb3VuZCc7XG5cbiAgQElucHV0KClcbiAgZ2V0IHBsYWNlaG9sZGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlciQudmFsdWU7XG4gIH1cbiAgc2V0IHBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgdGhpcy5fcGxhY2Vob2xkZXIkLm5leHQodmFsdWUpO1xuICB9XG4gIHByaXZhdGUgX3BsYWNlaG9sZGVyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgQElucHV0KClcbiAgc2V0IG11bHRpcGxlKHZhbHVlOiB1bmtub3duKSB7XG4gICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2V0QWxsb3dNdWx0aXBsZShib29sZWFuQXR0cmlidXRlKHZhbHVlKSk7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgYmluZExhYmVsKHZhbHVlOiBTZWxlY3Rpb25Nb2RlbEJpbmRpbmcgfCBudWxsKSB7XG4gICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2V0TGFiZWxCaW5kaW5nKHZhbHVlKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBiaW5kVmFsdWUodmFsdWU6IFNlbGVjdGlvbk1vZGVsQmluZGluZyB8IG51bGwpIHtcbiAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZXRWYWx1ZUJpbmRpbmcodmFsdWUpO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IGJpbmRLZXkodmFsdWU6IFNlbGVjdGlvbk1vZGVsQmluZGluZyB8IG51bGwpIHtcbiAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZXRLZXlCaW5kaW5nKHZhbHVlKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGdldCBhbGxvd0N1c3RvbVZhbHVlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fYWxsb3dDdXN0b21WYWx1ZXMkLnZhbHVlO1xuICB9XG4gIHNldCBhbGxvd0N1c3RvbVZhbHVlcyh2YWx1ZTogdW5rbm93bikge1xuICAgIHRoaXMuX2FsbG93Q3VzdG9tVmFsdWVzJC5uZXh0KGJvb2xlYW5BdHRyaWJ1dGUodmFsdWUpKTtcbiAgfVxuICBwcml2YXRlIF9hbGxvd0N1c3RvbVZhbHVlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICBASW5wdXQoKVxuICBnZXQgb3B0aW9uQ29tcG9uZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25Db21wb25lbnQkLnZhbHVlO1xuICB9XG4gIHNldCBvcHRpb25Db21wb25lbnQoY29tcG9uZW50OiBDb21wb25lbnRXaXRoT3B0aW9uIHwgbnVsbCkge1xuICAgIHRoaXMuX29wdGlvbkNvbXBvbmVudCQubmV4dChjb21wb25lbnQpO1xuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbkNvbXBvbmVudCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvbXBvbmVudFdpdGhPcHRpb24gfCBudWxsPihudWxsKTtcblxuICBASW5wdXQoKVxuICBnZXQgc2VsZWN0ZWRPcHRpb25Db21wb25lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkT3B0aW9uQ29tcG9uZW50JC52YWx1ZTtcbiAgfVxuICBzZXQgc2VsZWN0ZWRPcHRpb25Db21wb25lbnQoY29tcG9uZW50OiBDb21wb25lbnRXaXRoT3B0aW9uIHwgbnVsbCkge1xuICAgIHRoaXMuX3NlbGVjdGVkT3B0aW9uQ29tcG9uZW50JC5uZXh0KGNvbXBvbmVudCk7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfc2VsZWN0ZWRPcHRpb25Db21wb25lbnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb21wb25lbnRXaXRoT3B0aW9uIHwgbnVsbD4obnVsbCk7XG5cbiAgQElucHV0KClcbiAgZ2V0IGJvZHlFcnJvckNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYm9keUVycm9yQ29tcG9uZW50JC52YWx1ZTtcbiAgfVxuICBzZXQgYm9keUVycm9yQ29tcG9uZW50KHZhbHVlOiBDb21wb25lbnRXaXRoRXJyb3IgfCBudWxsKSB7XG4gICAgdGhpcy5fYm9keUVycm9yQ29tcG9uZW50JC5uZXh0KHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIF9ib2R5RXJyb3JDb21wb25lbnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb21wb25lbnRXaXRoRXJyb3IgfCBudWxsPihudWxsKTtcblxuICBASW5wdXQoKVxuICBnZXQgYm9keUxvYWRpbmdDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JvZHlMb2FkaW5nQ29tcG9uZW50JC52YWx1ZTtcbiAgfVxuICBzZXQgYm9keUxvYWRpbmdDb21wb25lbnQodmFsdWU6IENvbXBvbmVudFR5cGU8dW5rbm93bj4gfCBudWxsKSB7XG4gICAgdGhpcy5fYm9keUxvYWRpbmdDb21wb25lbnQkLm5leHQodmFsdWUpO1xuICB9XG4gIHByaXZhdGUgX2JvZHlMb2FkaW5nQ29tcG9uZW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29tcG9uZW50VHlwZTx1bmtub3duPiB8IG51bGw+KG51bGwpO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBib2R5RW1wdHlDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JvZHlFbXB0eUNvbXBvbmVudCQudmFsdWU7XG4gIH1cbiAgc2V0IGJvZHlFbXB0eUNvbXBvbmVudCh2YWx1ZTogQ29tcG9uZW50VHlwZTx1bmtub3duPiB8IG51bGwpIHtcbiAgICB0aGlzLl9ib2R5RW1wdHlDb21wb25lbnQkLm5leHQodmFsdWUpO1xuICB9XG4gIHByaXZhdGUgX2JvZHlFbXB0eUNvbXBvbmVudCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvbXBvbmVudFR5cGU8dW5rbm93bj4gfCBudWxsPihudWxsKTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gT3V0cHV0c1xuXG4gIEBPdXRwdXQoKVxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmlsdGVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIE1lbWJlcnNcblxuICBwcml2YXRlIF9zaG91bGRJZ25vcmVOZXh0Qmx1ckV2ZW50ID0gZmFsc2U7XG4gIHByaXZhdGUgX2RlbGV0ZWRTZWFyY2hXaXRoS2V5UHJlc3MgPSBmYWxzZTtcblxuICBnZXQgY3VycmVudEZpbHRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEZpbHRlciQudmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfY3VycmVudEZpbHRlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuXG4gIHByaXZhdGUgZ2V0IF9pc09wZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FuaW1hdGVkT3ZlcmxheS5pc01vdW50ZWQ7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfaXNPcGVuJCA9IHRoaXMuX2FuaW1hdGVkT3ZlcmxheS5pc01vdW50ZWQkO1xuXG4gIHJlYWRvbmx5IF9zZWxlY3Rpb25Nb2RlbCA9IG5ldyBTZWxlY3Rpb25Nb2RlbCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hY3RpdmVTZWxlY3Rpb25Nb2RlbCA9IG5ldyBBY3RpdmVTZWxlY3Rpb25Nb2RlbCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9iYWNrc3BhY2VLZXlQcmVzc01hbmFnZXIgPSBuZXcgS2V5UHJlc3NNYW5hZ2VyKEJBQ0tTUEFDRSk7XG5cbiAgcmVhZG9ubHkgc2VsZWN0ZWRPcHRpb25zJCA9IHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGlvbiQ7XG4gIHJlYWRvbmx5IG11bHRpcGxlJCA9IHRoaXMuX3NlbGVjdGlvbk1vZGVsLmFsbG93TXVsdGlwbGUkO1xuICByZWFkb25seSBtdWx0aXBsZVNpZ25hbCA9IHRvU2lnbmFsKHRoaXMubXVsdGlwbGUkLCB7IHJlcXVpcmVTeW5jOiB0cnVlIH0pO1xuICByZWFkb25seSBvcHRpb25zJCA9IHRoaXMuX3NlbGVjdGlvbk1vZGVsLmZpbHRlcmVkT3B0aW9ucyQ7XG4gIHJlYWRvbmx5IHJhd09wdGlvbnMkID0gdGhpcy5fc2VsZWN0aW9uTW9kZWwub3B0aW9ucyQ7XG5cbiAgQENvbnRlbnRDaGlsZChDT01CT0JPWF9PUFRJT05fVEVNUExBVEVfVE9LRU4sIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgc2V0IG9wdGlvblRlbXBsYXRlKHZhbHVlOiBUZW1wbGF0ZVJlZldpdGhPcHRpb24gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9vcHRpb25UZW1wbGF0ZSQubmV4dCh2YWx1ZSA/PyBudWxsKTtcbiAgfVxuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25UZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRlbXBsYXRlUmVmV2l0aE9wdGlvbiB8IG51bGw+KG51bGwpO1xuXG4gIEBDb250ZW50Q2hpbGQoQ09NQk9CT1hfU0VMRUNURURfT1BUSU9OX1RFTVBMQVRFX1RPS0VOLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIHNldCBzZWxlY3RlZE9wdGlvblRlbXBsYXRlKHZhbHVlOiBUZW1wbGF0ZVJlZldpdGhPcHRpb24gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9zZWxlY3RlZE9wdGlvblRlbXBsYXRlJC5uZXh0KHZhbHVlID8/IG51bGwpO1xuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlbGVjdGVkT3B0aW9uVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZW1wbGF0ZVJlZldpdGhPcHRpb24gfCBudWxsPihudWxsKTtcblxuICBAQ29udGVudENoaWxkKENPTUJPQk9YX0JPRFlfTE9BRElOR19URU1QTEFURV9UT0tFTiwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBzZXQgYm9keUxvYWRpbmdUZW1wbGF0ZSh2YWx1ZTogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9ib2R5TG9hZGluZ1RlbXBsYXRlJC5uZXh0KHZhbHVlID8/IG51bGwpO1xuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgX2JvZHlMb2FkaW5nVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZW1wbGF0ZVJlZjx1bmtub3duPiB8IG51bGw+KG51bGwpO1xuXG4gIEBDb250ZW50Q2hpbGQoQ09NQk9CT1hfQk9EWV9FUlJPUl9URU1QTEFURV9UT0tFTiwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBzZXQgYm9keUVycm9yVGVtcGxhdGUodmFsdWU6IFRlbXBsYXRlUmVmV2l0aEVycm9yIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fYm9keUVycm9yVGVtcGxhdGUkLm5leHQodmFsdWUgPz8gbnVsbCk7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfYm9keUVycm9yVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZW1wbGF0ZVJlZldpdGhFcnJvciB8IG51bGw+KG51bGwpO1xuXG4gIEBDb250ZW50Q2hpbGQoQ09NQk9CT1hfQk9EWV9FTVBUWV9URU1QTEFURV9UT0tFTiwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBzZXQgYm9keUVtcHR5VGVtcGxhdGUodmFsdWU6IFRlbXBsYXRlUmVmPHVua25vd24+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fYm9keUVtcHR5VGVtcGxhdGUkLm5leHQodmFsdWUgPz8gbnVsbCk7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfYm9keUVtcHR5VGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZW1wbGF0ZVJlZjx1bmtub3duPiB8IG51bGw+KG51bGwpO1xuXG4gIHJlYWRvbmx5IF9iaW5kaW5ncyA9IGNyZWF0ZVJlYWN0aXZlQmluZGluZ3MoXG4gICAge1xuICAgICAgYXR0cmlidXRlOiAnY2xhc3MuZXQtY29tYm9ib3gtLWxvYWRpbmcnLFxuICAgICAgb2JzZXJ2YWJsZTogdGhpcy5fbG9hZGluZyQsXG4gICAgfSxcbiAgICB7XG4gICAgICBhdHRyaWJ1dGU6ICdjbGFzcy5ldC1jb21ib2JveC0tZXJyb3InLFxuICAgICAgb2JzZXJ2YWJsZTogdGhpcy5fZXJyb3IkLnBpcGUobWFwKCh2KSA9PiAhIXYpKSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGF0dHJpYnV0ZTogJ2NsYXNzLmV0LWNvbWJvYm94LS1vcGVuJyxcbiAgICAgIG9ic2VydmFibGU6IHRoaXMuX2lzT3BlbiQsXG4gICAgfSxcbiAgICB7XG4gICAgICBhdHRyaWJ1dGU6ICdjbGFzcy5ldC1zZWxlY3QtZmllbGQtLW11bHRpcGxlJyxcbiAgICAgIG9ic2VydmFibGU6IHRoaXMubXVsdGlwbGUkLFxuICAgIH0sXG4gICAge1xuICAgICAgYXR0cmlidXRlOiAnY2xhc3MuZXQtc2VsZWN0LWZpZWxkLS1vcGVuJyxcbiAgICAgIG9ic2VydmFibGU6IHRoaXMuX2lzT3BlbiQsXG4gICAgfSxcbiAgKTtcblxuICBwcml2YXRlIF9jb21ib2JveEJvZHlDb21wb25lbnQ6IENvbXBvbmVudFR5cGU8QWJzdHJhY3RDb21ib2JveEJvZHk+IHwgbnVsbCA9IG51bGw7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIENvbXB1dGVzXG5cbiAgcmVhZG9ubHkgY3VzdG9tT3B0aW9uVHBsJCA9IHRoaXMuX29wdGlvblRlbXBsYXRlJC5hc09ic2VydmFibGUoKTtcbiAgcmVhZG9ubHkgY3VzdG9tT3B0aW9uQ29tcG9uZW50JCA9IHRoaXMuX29wdGlvbkNvbXBvbmVudCQuYXNPYnNlcnZhYmxlKCk7XG4gIHJlYWRvbmx5IGN1c3RvbVNlbGVjdGVkT3B0aW9uVHBsJCA9IHRoaXMuX3NlbGVjdGVkT3B0aW9uVGVtcGxhdGUkLmFzT2JzZXJ2YWJsZSgpO1xuICByZWFkb25seSBjdXN0b21TZWxlY3RlZE9wdGlvbkNvbXBvbmVudCQgPSB0aGlzLl9zZWxlY3RlZE9wdGlvbkNvbXBvbmVudCQuYXNPYnNlcnZhYmxlKCk7XG4gIHJlYWRvbmx5IGN1c3RvbUJvZHlMb2FkaW5nVHBsJCA9IHRoaXMuX2JvZHlMb2FkaW5nVGVtcGxhdGUkLmFzT2JzZXJ2YWJsZSgpO1xuICByZWFkb25seSBjdXN0b21Cb2R5TG9hZGluZ0NvbXBvbmVudCQgPSB0aGlzLl9ib2R5TG9hZGluZ0NvbXBvbmVudCQuYXNPYnNlcnZhYmxlKCk7XG4gIHJlYWRvbmx5IGN1c3RvbUJvZHlFcnJvclRwbCQgPSB0aGlzLl9ib2R5RXJyb3JUZW1wbGF0ZSQuYXNPYnNlcnZhYmxlKCk7XG4gIHJlYWRvbmx5IGN1c3RvbUJvZHlFcnJvckNvbXBvbmVudCQgPSB0aGlzLl9ib2R5RXJyb3JDb21wb25lbnQkLmFzT2JzZXJ2YWJsZSgpO1xuICByZWFkb25seSBjdXN0b21Cb2R5RW1wdHlUcGwkID0gdGhpcy5fYm9keUVtcHR5VGVtcGxhdGUkLmFzT2JzZXJ2YWJsZSgpO1xuICByZWFkb25seSBjdXN0b21Cb2R5RW1wdHlDb21wb25lbnQkID0gdGhpcy5fYm9keUVtcHR5Q29tcG9uZW50JC5hc09ic2VydmFibGUoKTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gTGlmZWN5Y2xlXG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fYWN0aXZlU2VsZWN0aW9uTW9kZWwuc2V0U2VsZWN0aW9uTW9kZWwodGhpcy5fc2VsZWN0aW9uTW9kZWwpO1xuXG4gICAgdGhpcy5fYW5pbWF0ZWRPdmVybGF5LnBsYWNlbWVudCA9ICdib3R0b20nO1xuICAgIHRoaXMuX2FuaW1hdGVkT3ZlcmxheS5mYWxsYmFja1BsYWNlbWVudHMgPSBbJ2JvdHRvbScsICd0b3AnXTtcbiAgICB0aGlzLl9hbmltYXRlZE92ZXJsYXkuYXV0b1Jlc2l6ZSA9IHRydWU7XG5cbiAgICB0aGlzLl9zZWxlY3RGaWVsZC5fYmluZGluZ3MucHVzaCh7XG4gICAgICBhdHRyaWJ1dGU6ICdjbGFzcy5ldC1zZWxlY3QtZmllbGQtLW9wZW4nLFxuICAgICAgb2JzZXJ2YWJsZTogdGhpcy5faXNPcGVuJCxcbiAgICB9KTtcblxuICAgIHRoaXMuX3NlbGVjdEZpZWxkLl9iaW5kaW5ncy5wdXNoKHtcbiAgICAgIGF0dHJpYnV0ZTogJ2NsYXNzLmV0LXNlbGVjdC1maWVsZC0tbXVsdGlwbGUnLFxuICAgICAgb2JzZXJ2YWJsZTogdGhpcy5tdWx0aXBsZSQsXG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9pbml0RGlzcGF0Y2hGaWx0ZXJDaGFuZ2VzKCk7XG5cbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgIHRoaXMuX2RlYnVnVmFsaWRhdGVDb21ib2JveENvbmZpZygpO1xuICAgICAgdGhpcy5fZGVidWdWYWxpZGF0ZU9wdGlvbkFuZEluaXRpYWxWYWx1ZVNjaGVtYSgpO1xuICAgIH1cblxuICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnZhbHVlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIHRhcCgodmFsdWUpID0+IHtcbiAgICAgICAgICB0aGlzLl9pbnB1dC5fdXBkYXRlVmFsdWUodmFsdWUpO1xuICAgICAgICAgIHRoaXMuX3NldEZpbHRlckZyb21JbnB1dFZhbHVlKCk7XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5faW5wdXQub25FeHRlcm5hbFVwZGF0ZSRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2V0U2VsZWN0aW9uKHRoaXMuX2lucHV0LnZhbHVlKSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gUHVibGljIE1ldGhvZHNcblxuICBzZXRCb2R5Q29tcG9uZW50KGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxBYnN0cmFjdENvbWJvYm94Qm9keT4pIHtcbiAgICB0aGlzLl9jb21ib2JveEJvZHlDb21wb25lbnQgPSBjb21wb25lbnQ7XG4gIH1cblxuICBnZXRPcHRpb25MYWJlbChvcHRpb246IHVua25vd24pIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwuZ2V0TGFiZWwkKG9wdGlvbik7XG4gIH1cblxuICBnZXRPcHRpb25WYWx1ZShvcHRpb246IHVua25vd24pIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwuZ2V0VmFsdWUkKG9wdGlvbik7XG4gIH1cblxuICByZW1vdmVTZWxlY3RlZE9wdGlvbihvcHRpb246IHVua25vd24pIHtcbiAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5yZW1vdmVTZWxlY3RlZE9wdGlvbihvcHRpb24pO1xuXG4gICAgdGhpcy5faW5wdXQuX21hcmtBc1RvdWNoZWQoKTtcbiAgfVxuXG4gIG9wZW4oKSB7XG4gICAgYXNzZXRDb21ib2JveEJvZHlDb21wb25lbnRTZXQodGhpcy5fY29tYm9ib3hCb2R5Q29tcG9uZW50KTtcblxuICAgIGlmICh0aGlzLl9pc09wZW4gfHwgdGhpcy5faW5wdXQuZGlzYWJsZWQgfHwgdGhpcy5fYW5pbWF0ZWRPdmVybGF5LmlzTW91bnRpbmcpIHJldHVybjtcblxuICAgIGNvbnN0IGJvZHlSZWYgPSB0aGlzLl9hbmltYXRlZE92ZXJsYXkubW91bnQoe1xuICAgICAgY29tcG9uZW50OiB0aGlzLl9jb21ib2JveEJvZHlDb21wb25lbnQsXG4gICAgICBtaXJyb3JXaWR0aDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIGJvZHlSZWY/Ll9vcHRpb25zJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgocXVlcnlMaXN0KSA9PlxuICAgICAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgcXVlcnlMaXN0Py5jaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgIHN0YXJ0V2l0aChxdWVyeUxpc3QpLFxuICAgICAgICAgICAgICBtYXAoKGwpID0+IGwudG9BcnJheSgpKSxcbiAgICAgICAgICAgICkgPz8gb2YoW10gYXMgQWJzdHJhY3RDb21ib2JveE9wdGlvbltdKSxcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNlbGVjdGlvbk1vZGVsLmFjdGl2ZU9wdGlvbiQsXG4gICAgICAgICAgXSksXG4gICAgICAgICksXG4gICAgICAgIHRhcCgoW29wdGlvbnMsIGFjdGl2ZU9wdGlvbkRhdGFdKSA9PiB7XG4gICAgICAgICAgY29uc3Qgb3B0aW9uUmVmID0gb3B0aW9ucy5maW5kKChvKSA9PiBvLl9vcHRpb24kLnZhbHVlID09PSBhY3RpdmVPcHRpb25EYXRhKTtcblxuICAgICAgICAgIGlmICghb3B0aW9uUmVmPy5fZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudCkgcmV0dXJuO1xuXG4gICAgICAgICAgc2Nyb2xsVG9FbGVtZW50KHtcbiAgICAgICAgICAgIGJlaGF2aW9yOiAnaW5zdGFudCcsXG4gICAgICAgICAgICBlbGVtZW50OiBvcHRpb25SZWYuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgIGNvbnRhaW5lcjogYm9keVJlZi5fY29udGFpbmVyRWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9hbmltYXRlZE92ZXJsYXkuYWZ0ZXJDbG9zZWQoKSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzT3BlbiB8fCB0aGlzLl9hbmltYXRlZE92ZXJsYXkuaXNVbm1vdW50aW5nKSByZXR1cm47XG5cbiAgICB0aGlzLl9hbmltYXRlZE92ZXJsYXkudW5tb3VudCgpO1xuICB9XG5cbiAgZm9jdXMoKSB7XG4gICAgdGhpcy5faW5wdXQubmF0aXZlSW5wdXRSZWY/LmVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgc2VsZWN0SW5wdXRBbmRPcGVuKCkge1xuICAgIGlmICh0aGlzLl9pbnB1dC5kaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgdGhpcy5faW5wdXQubmF0aXZlSW5wdXRSZWY/LmVsZW1lbnQubmF0aXZlRWxlbWVudC5zZWxlY3QoKTtcbiAgICB0aGlzLm9wZW4oKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWVGcm9tT3B0aW9uKG9wdGlvbjogdW5rbm93bikge1xuICAgIHRoaXMuX2lucHV0Ll9tYXJrQXNUb3VjaGVkKCk7XG5cbiAgICBpZiAodGhpcy5fc2VsZWN0aW9uTW9kZWwuYWxsb3dNdWx0aXBsZSkge1xuICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwudG9nZ2xlU2VsZWN0ZWRPcHRpb24ob3B0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuYWRkU2VsZWN0ZWRPcHRpb24ob3B0aW9uKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3NlbGVjdGlvbk1vZGVsLmFsbG93TXVsdGlwbGUpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIHRoaXMuX3NldEZpbHRlckZyb21JbnB1dFZhbHVlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3VwZGF0ZUZpbHRlcignJyk7XG4gICAgfVxuICB9XG5cbiAgaXNPcHRpb25TZWxlY3RlZChvcHRpb246IHVua25vd24pIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZCQob3B0aW9uKTtcbiAgfVxuXG4gIGlzT3B0aW9uQWN0aXZlKG9wdGlvbjogdW5rbm93bikge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVTZWxlY3Rpb25Nb2RlbC5hY3RpdmVPcHRpb24kLnBpcGUobWFwKChhY3RpdmVPcHRpb24pID0+IGFjdGl2ZU9wdGlvbiA9PT0gb3B0aW9uKSk7XG4gIH1cblxuICB0cmFja0J5T3B0aW9uS2V5Rm46IFRyYWNrQnlGdW5jdGlvbjx1bmtub3duPiA9IChpbmRleCwgaXRlbSkgPT4gdGhpcy5fc2VsZWN0aW9uTW9kZWwuZ2V0S2V5KGl0ZW0pO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBQcm90ZWN0ZWQgTWV0aG9kc1xuXG4gIF9pZ25vcmVOZXh0Qmx1ckV2ZW50KCkge1xuICAgIHRoaXMuX3Nob3VsZElnbm9yZU5leHRCbHVyRXZlbnQgPSB0cnVlO1xuICB9XG5cbiAgX3Byb2Nlc3NLZXlkb3duRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBjb25zdCBrZXlDb2RlID0gZXZlbnQua2V5Q29kZTtcbiAgICBjb25zdCBpc09wZW4gPSB0aGlzLl9pc09wZW47XG4gICAgY29uc3QgaXNNdWx0aXBsZSA9IHRoaXMuX3NlbGVjdGlvbk1vZGVsLmFsbG93TXVsdGlwbGU7XG4gICAgY29uc3QgY2FuQWRkQ3VzdG9tVmFsdWUgPSB0aGlzLmFsbG93Q3VzdG9tVmFsdWVzO1xuICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgICBjb25zdCBoYXNGaWx0ZXJWYWx1ZSA9ICEhdmFsdWU7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0aW9uO1xuICAgIGNvbnN0IGlzQmFja3NwYWNlUHJlc3NlZCA9IHRoaXMuX2JhY2tzcGFjZUtleVByZXNzTWFuYWdlci5pc1ByZXNzZWQoZXZlbnQpO1xuXG4gICAgY29uc3QgcmVzdWx0OiBLZXlIYW5kbGVyUmVzdWx0ID0ge307XG5cbiAgICBpZiAoa2V5Q29kZSA9PT0gRU5URVIpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgLy8gVGhlIHVzZXIgdHlwZWQgYSBjdXN0b20gdmFsdWUgYW5kIHByZXNzZWQgZW50ZXIuIEFkZCBpdCB0byB0aGUgc2VsZWN0ZWQgb3B0aW9ucy5cbiAgICAgIC8vIEZJWE1FOiBDdXJyZW50bHkgaXQgaXMgaW1wb3NzaWJsZSB0byBzZWxlY3QgdGhlIGFjdGl2ZSBvcHRpb24gd2l0aCB0aGUga2V5Ym9hcmQgaWYgY2FuQWRkQ3VzdG9tVmFsdWUgaXMgdHJ1ZS5cbiAgICAgIC8vIFRvIGZpeCB0aGlzLCB0aGUgYWN0aXZlIG9wdGlvbiBzaG91bGQgYWxzbyBpbmNsdWRlIHRoZSBvcmlnaW4gaXQgZ290IGFjdGl2ZSBmcm9tIChrZXlib2FyZCBvciBwcm9ncmFtbWF0aWMpLlxuICAgICAgLy8gVGhlIFwidmFsdWVcIiBjaGFuZ2luZyBzaG91bGQgcHV0IHRoZSBjb21ib2JveCBpbnRvIGEgXCJ1c2UgdGhlIGN1c3RvbSBpbnB1dCBvbiBlbnRlclwiIG1vZGUuXG4gICAgICAvLyBUaGUgXCJhY3RpdmUgb3B0aW9uXCIgY2hhbmdpbmcgdmlhIGtleWJvYXJkIHNob3VsZCBwdXQgdGhlIGNvbWJvYm94IGludG8gYSBcInVzZSB0aGUgYWN0aXZlIG9wdGlvbiBvbiBlbnRlclwiIG1vZGUuXG4gICAgICBpZiAoY2FuQWRkQ3VzdG9tVmFsdWUgJiYgaGFzRmlsdGVyVmFsdWUpIHtcbiAgICAgICAgcmVzdWx0Lm9wdGlvbkFjdGlvbiA9IHsgdHlwZTogJ2FkZCcsIG9wdGlvbjogdmFsdWUgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZU9wdGlvbiA9IHRoaXMuX2FjdGl2ZVNlbGVjdGlvbk1vZGVsLmFjdGl2ZU9wdGlvbjtcblxuICAgICAgICBpZiAoYWN0aXZlT3B0aW9uKSB7XG4gICAgICAgICAgaWYgKGlzTXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHJlc3VsdC5vcHRpb25BY3Rpb24gPSB7IHR5cGU6ICd0b2dnbGUnLCBvcHRpb246IGFjdGl2ZU9wdGlvbiB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQub3B0aW9uQWN0aW9uID0geyB0eXBlOiAnYWRkJywgb3B0aW9uOiBhY3RpdmVPcHRpb24gfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzTXVsdGlwbGUpIHtcbiAgICAgICAgcmVzdWx0LnNldEZpbHRlciA9ICcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0Lm92ZXJsYXlPcGVyYXRpb24gPSAnY2xvc2UnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5faW50ZXJwcmV0S2V5SGFuZGxlclJlc3VsdChyZXN1bHQpO1xuICAgIH1cblxuICAgIGlmIChrZXlDb2RlID09PSBFU0NBUEUpIHtcbiAgICAgIGlmIChpc09wZW4pIHtcbiAgICAgICAgcmVzdWx0Lm92ZXJsYXlPcGVyYXRpb24gPSAnY2xvc2UnO1xuICAgICAgfSBlbHNlIGlmICghaXNNdWx0aXBsZSkge1xuICAgICAgICByZXN1bHQuc2V0RmlsdGVyID0gJyc7XG4gICAgICAgIHJlc3VsdC5vcHRpb25BY3Rpb24gPSAnY2xlYXInO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5faW50ZXJwcmV0S2V5SGFuZGxlclJlc3VsdChyZXN1bHQpO1xuICAgIH1cblxuICAgIGlmIChrZXlDb2RlID09PSBUQUIpIHtcbiAgICAgIHJlc3VsdC5vdmVybGF5T3BlcmF0aW9uID0gJ2Nsb3NlJztcbiAgICAgIHJldHVybiB0aGlzLl9pbnRlcnByZXRLZXlIYW5kbGVyUmVzdWx0KHJlc3VsdCk7XG4gICAgfVxuXG4gICAgaWYgKGtleUNvZGUgPT09IEJBQ0tTUEFDRSkge1xuICAgICAgaWYgKGlzQmFja3NwYWNlUHJlc3NlZCAmJiB2YWx1ZSkge1xuICAgICAgICB0aGlzLl9kZWxldGVkU2VhcmNoV2l0aEtleVByZXNzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFoYXNGaWx0ZXJWYWx1ZSAmJiBpc011bHRpcGxlICYmIHNlbGVjdGlvbi5sZW5ndGggJiYgIXRoaXMuX2RlbGV0ZWRTZWFyY2hXaXRoS2V5UHJlc3MpIHtcbiAgICAgICAgcmVzdWx0Lm9wdGlvbkFjdGlvbiA9IHsgdHlwZTogJ3JlbW92ZScsIG9wdGlvbjogc2VsZWN0aW9uW3NlbGVjdGlvbi5sZW5ndGggLSAxXSB9O1xuICAgICAgICByZXR1cm4gdGhpcy5faW50ZXJwcmV0S2V5SGFuZGxlclJlc3VsdChyZXN1bHQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzQmFja3NwYWNlUHJlc3NlZCkge1xuICAgICAgICB0aGlzLl9kZWxldGVkU2VhcmNoV2l0aEtleVByZXNzID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2RlbGV0ZWRTZWFyY2hXaXRoS2V5UHJlc3MgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIWlzT3Blbikge1xuICAgICAgcmVzdWx0Lm92ZXJsYXlPcGVyYXRpb24gPSAnb3Blbic7XG4gICAgfVxuXG4gICAgdGhpcy5fYWN0aXZlU2VsZWN0aW9uTW9kZWwuZXZhbHVhdGVLZXlib2FyZEV2ZW50KGV2ZW50KTtcblxuICAgIGlmIChrZXlDb2RlID09PSBBICYmIGV2ZW50LmN0cmxLZXkgJiYgaXNNdWx0aXBsZSkge1xuICAgICAgcmVzdWx0Lm9wdGlvbkFjdGlvbiA9ICd0b2dnbGVBbGwnO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5faW50ZXJwcmV0S2V5SGFuZGxlclJlc3VsdChyZXN1bHQpO1xuICB9XG5cbiAgX3Byb2Nlc3NLZXl1cEV2ZW50KCkge1xuICAgIHRoaXMuX2JhY2tzcGFjZUtleVByZXNzTWFuYWdlci5jbGVhcigpO1xuICB9XG5cbiAgX3Byb2Nlc3NJbnB1dEV2ZW50KGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcblxuICAgIHRoaXMuX3VwZGF0ZUZpbHRlcih2YWx1ZSk7XG4gIH1cblxuICBfaGFuZGxlQmx1ckV2ZW50KCkge1xuICAgIGlmICh0aGlzLl9zaG91bGRJZ25vcmVOZXh0Qmx1ckV2ZW50KSB7XG4gICAgICB0aGlzLl9zaG91bGRJZ25vcmVOZXh0Qmx1ckV2ZW50ID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW5wdXQuX21hcmtBc1RvdWNoZWQoKTtcbiAgICB0aGlzLl9pbnB1dC5fc2V0U2hvdWxkRGlzcGxheUVycm9yKHRydWUpO1xuXG4gICAgaWYgKHRoaXMuX3NlbGVjdGlvbk1vZGVsLmFsbG93TXVsdGlwbGUpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZUZpbHRlcignJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY3VycmVudEZpbHRlciA9PT0gJycpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNsZWFyU2VsZWN0ZWRPcHRpb25zKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fc2V0RmlsdGVyRnJvbUlucHV0VmFsdWUoKTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBQcml2YXRlIE1ldGhvZHNcblxuICBwcml2YXRlIF9pbml0RGlzcGF0Y2hGaWx0ZXJDaGFuZ2VzKCkge1xuICAgIHRoaXMuX2N1cnJlbnRGaWx0ZXIkXG4gICAgICAucGlwZShcbiAgICAgICAgc2tpcFdoaWxlKCgpID0+IHRoaXMuZmlsdGVySW50ZXJuYWwpLFxuICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgdGFwKCh2KSA9PiB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHYpKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZUZpbHRlcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuX2lucHV0Lm5hdGl2ZUlucHV0UmVmICYmIHRoaXMuX2lucHV0Lm5hdGl2ZUlucHV0UmVmLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuX2lucHV0Lm5hdGl2ZUlucHV0UmVmLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmN1cnJlbnRGaWx0ZXIgPT09IHZhbHVlKSByZXR1cm47XG5cbiAgICB0aGlzLl9jdXJyZW50RmlsdGVyJC5uZXh0KHZhbHVlKTtcblxuICAgIGlmICh0aGlzLmZpbHRlckludGVybmFsKSB7XG4gICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZXRGaWx0ZXIodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NldEZpbHRlckZyb21JbnB1dFZhbHVlKCkge1xuICAgIGlmICh0aGlzLl9zZWxlY3Rpb25Nb2RlbC5hbGxvd011bHRpcGxlKSByZXR1cm47XG5cbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2lucHV0LnZhbHVlO1xuXG4gICAgaWYgKCF2YWx1ZSB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgdGhpcy5fdXBkYXRlRmlsdGVyKCcnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb24gPSB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5nZXRPcHRpb25CeVZhbHVlKHZhbHVlKTtcblxuICAgIGlmICghb3B0aW9uKSByZXR1cm47XG5cbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuX3NlbGVjdGlvbk1vZGVsLmdldExhYmVsKG9wdGlvbik7XG5cbiAgICBpZiAodHlwZW9mIGxhYmVsICE9PSAnc3RyaW5nJykgcmV0dXJuO1xuXG4gICAgdGhpcy5fdXBkYXRlRmlsdGVyKGxhYmVsKTtcbiAgfVxuXG4gIHByaXZhdGUgX2ludGVycHJldEtleUhhbmRsZXJSZXN1bHQocmVzdWx0OiBLZXlIYW5kbGVyUmVzdWx0KSB7XG4gICAgaWYgKHJlc3VsdC5vdmVybGF5T3BlcmF0aW9uID09PSAnY2xvc2UnKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfSBlbHNlIGlmIChyZXN1bHQub3ZlcmxheU9wZXJhdGlvbiA9PT0gJ29wZW4nKSB7XG4gICAgICB0aGlzLm9wZW4oKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0LnNldEZpbHRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl91cGRhdGVGaWx0ZXIocmVzdWx0LnNldEZpbHRlcik7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5vcHRpb25BY3Rpb24pIHtcbiAgICAgIGlmICh0eXBlb2YgcmVzdWx0Lm9wdGlvbkFjdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHJlc3VsdC5vcHRpb25BY3Rpb24gPT09ICdjbGVhcicpIHtcbiAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jbGVhclNlbGVjdGVkT3B0aW9ucygpO1xuICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdC5vcHRpb25BY3Rpb24gPT09ICd0b2dnbGVBbGwnKSB7XG4gICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwudG9nZ2xlQWxsU2VsZWN0ZWRPcHRpb25zKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHsgdHlwZSwgb3B0aW9uIH0gPSByZXN1bHQub3B0aW9uQWN0aW9uO1xuXG4gICAgICAgIGlmIChpc09wdGlvbkRpc2FibGVkKG9wdGlvbikpIHJldHVybjtcblxuICAgICAgICBpZiAodHlwZSA9PT0gJ2FkZCcpIHtcbiAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5hZGRTZWxlY3RlZE9wdGlvbihvcHRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGUgPT09ICdyZW1vdmUnKSB7XG4gICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwucmVtb3ZlU2VsZWN0ZWRPcHRpb24ob3B0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlID09PSAndG9nZ2xlJykge1xuICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnRvZ2dsZVNlbGVjdGVkT3B0aW9uKG9wdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gRGV2IG1vZGVcblxuICBwcml2YXRlIF9kZWJ1Z1ZhbGlkYXRlQ29tYm9ib3hDb25maWcoaXNSZXRyeSA9IGZhbHNlKSB7XG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5fc2VsZWN0aW9uTW9kZWwubGFiZWxCaW5kaW5nJCwgdGhpcy5fc2VsZWN0aW9uTW9kZWwudmFsdWVCaW5kaW5nJCwgdGhpcy5fYWxsb3dDdXN0b21WYWx1ZXMkXSlcbiAgICAgIC5waXBlKFxuICAgICAgICBza2lwKGlzUmV0cnkgPyAxIDogMCksIC8vIFNraXAgaWYgcmV0cnlpbmcgdG8gYXZvaWQgaW5maW5pdGUgbG9vcFxuICAgICAgICBkZWJvdW5jZVRpbWUoMCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIG1hcCgoW2JpbmRMYWJlbCwgYmluZFZhbHVlLCBhbGxvd0N1c3RvbVZhbHVlc10pID0+IHtcbiAgICAgICAgICBjb25zdCBzaG91bGRCZU9iamVjdHMgPSBiaW5kTGFiZWwgJiYgYmluZFZhbHVlICYmICFhbGxvd0N1c3RvbVZhbHVlcztcblxuICAgICAgICAgIGlmIChzaG91bGRCZU9iamVjdHMpIHtcbiAgICAgICAgICAgIHJldHVybiBDb21ib2JveE9wdGlvblR5cGUuT2JqZWN0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBDb21ib2JveE9wdGlvblR5cGUuUHJpbWl0aXZlO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFwKChleHBlY3RlZE9wdGlvblR5cGUpID0+IHtcbiAgICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fc2VsZWN0aW9uTW9kZWwub3B0aW9ucztcblxuICAgICAgICAgIGlmIChpc0VtcHR5QXJyYXkob3B0aW9ucykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZXhwZWN0ZWRPcHRpb25UeXBlID09PSBDb21ib2JveE9wdGlvblR5cGUuT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoIWlzT2JqZWN0QXJyYXkob3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgdGhyb3cgY29tYm9ib3hFcnJvcignb3B0aW9uc19vYmplY3RfbWlzbWF0Y2gnLCB0cnVlLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGV4cGVjdGVkT3B0aW9uVHlwZSA9PT0gQ29tYm9ib3hPcHRpb25UeXBlLlByaW1pdGl2ZSkge1xuICAgICAgICAgICAgaWYgKCFpc1ByaW1pdGl2ZUFycmF5KG9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgIHRocm93IGNvbWJvYm94RXJyb3IoJ29wdGlvbnNfcHJpbWl0aXZlX21pc21hdGNoJywgdHJ1ZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZSkgPT4ge1xuICAgICAgICAgIHRoaXMuX2RlYnVnVmFsaWRhdGVDb21ib2JveENvbmZpZyh0cnVlKTtcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlKTtcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIF9kZWJ1Z1ZhbGlkYXRlT3B0aW9uQW5kSW5pdGlhbFZhbHVlU2NoZW1hKGlzUmV0cnkgPSBmYWxzZSkge1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMub3B0aW9ucyQsIHRoaXMuX2luaXRpYWxWYWx1ZSRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHNraXAoaXNSZXRyeSA/IDEgOiAwKSwgLy8gU2tpcCBpZiByZXRyeWluZyB0byBhdm9pZCBpbmZpbml0ZSBsb29wXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIHRhcCgoW29wdGlvbnMsIGluaXRpYWxWYWx1ZV0pID0+IHtcbiAgICAgICAgICBpZiAoaW5pdGlhbFZhbHVlID09PSBudWxsIHx8IGluaXRpYWxWYWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG5cbiAgICAgICAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHJldHVybjtcblxuICAgICAgICAgIGNvbnN0IGlzUHJpbWl0aXZlID0gaXNQcmltaXRpdmVBcnJheShvcHRpb25zKTtcbiAgICAgICAgICBjb25zdCBpbml0aWFsVmFsdWVJc1ByaW1pdGl2ZSA9IHRoaXMubXVsdGlwbGVcbiAgICAgICAgICAgID8gaXNQcmltaXRpdmVBcnJheShpbml0aWFsVmFsdWUpXG4gICAgICAgICAgICA6IHR5cGVvZiBpbml0aWFsVmFsdWUgIT09ICdvYmplY3QnO1xuXG4gICAgICAgICAgaWYgKGlzUHJpbWl0aXZlKSB7XG4gICAgICAgICAgICBpZiAoIWluaXRpYWxWYWx1ZUlzUHJpbWl0aXZlKSB7XG4gICAgICAgICAgICAgIHRocm93IGNvbWJvYm94RXJyb3IoJ2luaXRfdmFsX3ByaW1pdGl2ZV9taXNtYXRjaCcsIHRydWUsIHsgaW5pdGlhbFZhbHVlLCBvcHRpb25zIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaW5pdGlhbFZhbHVlSXNQcmltaXRpdmUpIHtcbiAgICAgICAgICAgICAgdGhyb3cgY29tYm9ib3hFcnJvcignaW5pdF92YWxfb2JqZWN0X21pc21hdGNoJywgdHJ1ZSwgeyBpbml0aWFsVmFsdWUsIG9wdGlvbnMgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZSkgPT4ge1xuICAgICAgICAgIHRoaXMuX2RlYnVnVmFsaWRhdGVPcHRpb25BbmRJbml0aWFsVmFsdWVTY2hlbWEodHJ1ZSk7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZSk7XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG59XG4iXX0=