@elderbyte/ngx-starter 18.14.1 → 18.15.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 (323) hide show
  1. package/esm2022/lib/common/enums/elder-enum-translation.service.mjs +4 -4
  2. package/esm2022/lib/common/forms/elder-form-field-control-base.directive.mjs +45 -48
  3. package/esm2022/lib/common/forms/elder-from-field-base.mjs +4 -4
  4. package/esm2022/lib/common/forms/elder-from-field-customizable-base.mjs +4 -4
  5. package/esm2022/lib/common/forms/elder-from-field-entity-base.mjs +4 -4
  6. package/esm2022/lib/common/forms/elder-from-field-multi-entity-base.mjs +4 -4
  7. package/esm2022/lib/common/forms/form-field-base.component.mjs +4 -4
  8. package/esm2022/lib/common/forms/multi-model-base.component.mjs +4 -4
  9. package/esm2022/lib/common/forms/template-composite-control.mjs +4 -4
  10. package/esm2022/lib/common/forms/value-accessor-base.mjs +4 -4
  11. package/esm2022/lib/common/http/http-client-builder.service.mjs +4 -4
  12. package/esm2022/lib/common/http/http-client-pristine.mjs +4 -4
  13. package/esm2022/lib/common/http/transfer/data-transfer-factory.mjs +4 -4
  14. package/esm2022/lib/common/url/elder-router.service.mjs +4 -4
  15. package/esm2022/lib/common/url/elder-url-fragment-params.service.mjs +4 -4
  16. package/esm2022/lib/common/utils/public_api.mjs +2 -1
  17. package/esm2022/lib/components/access-denied/elder-access-denied.component.mjs +4 -4
  18. package/esm2022/lib/components/access-denied/elder-access-denied.module.mjs +5 -5
  19. package/esm2022/lib/components/auditing/audited-entity/elder-audited-entity.component.mjs +4 -4
  20. package/esm2022/lib/components/auditing/elder-audit.module.mjs +5 -5
  21. package/esm2022/lib/components/badge/elder-badge/elder-badge.component.mjs +10 -10
  22. package/esm2022/lib/components/badge/elder-badge.directive.mjs +4 -4
  23. package/esm2022/lib/components/badge/elder-badge.module.mjs +5 -5
  24. package/esm2022/lib/components/button-group/elder-button-group/elder-button-group.component.mjs +4 -4
  25. package/esm2022/lib/components/button-group/elder-button-group.module.mjs +5 -5
  26. package/esm2022/lib/components/card-organizer/card-organizer/elder-card-organizer.component.mjs +4 -4
  27. package/esm2022/lib/components/card-organizer/card-organizer/elder-stack-card.directive.mjs +4 -4
  28. package/esm2022/lib/components/card-organizer/card-stack/elder-card-stack.component.mjs +4 -4
  29. package/esm2022/lib/components/card-organizer/elder-card-organizer.module.mjs +5 -5
  30. package/esm2022/lib/components/cards/elder-card/elder-card-header/elder-card-header.component.mjs +4 -4
  31. package/esm2022/lib/components/cards/elder-card/elder-card.component.mjs +19 -19
  32. package/esm2022/lib/components/cards/elder-card/elder-card.module.mjs +5 -5
  33. package/esm2022/lib/components/chips/elder-chip-label.directive.mjs +4 -4
  34. package/esm2022/lib/components/chips/elder-chips.module.mjs +5 -5
  35. package/esm2022/lib/components/connectivity/elder-connectivity.module.mjs +5 -5
  36. package/esm2022/lib/components/connectivity/elder-connectivity.service.mjs +4 -4
  37. package/esm2022/lib/components/connectivity/offline-indicator/elder-offline-indicator.component.mjs +4 -4
  38. package/esm2022/lib/components/containers/elder-containers.module.mjs +5 -5
  39. package/esm2022/lib/components/containers/elder-scroll-container/elder-scroll-container.component.mjs +4 -4
  40. package/esm2022/lib/components/csv/elder-csv-export-btn/elder-csv-export-btn.component.mjs +4 -4
  41. package/esm2022/lib/components/csv/elder-csv-stream-exporter-builder.service.mjs +4 -4
  42. package/esm2022/lib/components/csv/elder-csv.module.mjs +5 -5
  43. package/esm2022/lib/components/currency/elder-currency.module.mjs +5 -5
  44. package/esm2022/lib/components/currency/elder-currency.pipe.mjs +4 -4
  45. package/esm2022/lib/components/data-transfer/elder-data-transfer.module.mjs +5 -5
  46. package/esm2022/lib/components/data-transfer/elder-data-transfer.service.mjs +4 -4
  47. package/esm2022/lib/components/data-transfer/http-data-transfer/http-data-transfer.component.mjs +4 -4
  48. package/esm2022/lib/components/data-transfer/http-data-transfer-aggregate/http-data-transfer-aggregate.component.mjs +4 -4
  49. package/esm2022/lib/components/data-transfer/http-data-transfer-indicator/http-data-transfer-indicator.component.mjs +4 -4
  50. package/esm2022/lib/components/data-transfer/http-data-transfer-overview/http-data-transfer-overview.component.mjs +4 -4
  51. package/esm2022/lib/components/data-view/base/elder-data-view-base.mjs +4 -4
  52. package/esm2022/lib/components/data-view/common/composite-sort/composite-sort-dc.directive.mjs +4 -4
  53. package/esm2022/lib/components/data-view/common/composite-sort/elder-composite-sort/elder-composite-sort.component.mjs +4 -4
  54. package/esm2022/lib/components/data-view/common/data-context-state-indicator/data-context-state-indicator.component.mjs +4 -4
  55. package/esm2022/lib/components/data-view/common/elder-data-common.module.mjs +5 -5
  56. package/esm2022/lib/components/data-view/common/elder-data-toolbar/elder-data-toolbar.component.mjs +7 -7
  57. package/esm2022/lib/components/data-view/common/elder-single-sort/elder-single-sort.component.mjs +4 -4
  58. package/esm2022/lib/components/data-view/common/selection/data-context-selection.directive.mjs +4 -4
  59. package/esm2022/lib/components/data-view/common/selection/elder-selection-master-checkbox/elder-selection-master-checkbox.component.mjs +4 -4
  60. package/esm2022/lib/components/data-view/grid/elder-grid/elder-grid.component.mjs +10 -10
  61. package/esm2022/lib/components/data-view/grid/elder-grid.module.mjs +5 -5
  62. package/esm2022/lib/components/data-view/master-detail/elder-detail-dialog/elder-detail-dialog.component.mjs +4 -4
  63. package/esm2022/lib/components/data-view/master-detail/elder-detail.directive.mjs +4 -4
  64. package/esm2022/lib/components/data-view/master-detail/elder-master-activation.directive.mjs +4 -4
  65. package/esm2022/lib/components/data-view/master-detail/elder-master-detail.component.mjs +4 -4
  66. package/esm2022/lib/components/data-view/master-detail/elder-master-detail.module.mjs +5 -5
  67. package/esm2022/lib/components/data-view/master-detail/elder-master-detail.service.mjs +4 -4
  68. package/esm2022/lib/components/data-view/master-detail/elder-master.directive.mjs +4 -4
  69. package/esm2022/lib/components/data-view/simple/elder-simple-selection-view/elder-simple-selection-view.component.mjs +4 -4
  70. package/esm2022/lib/components/data-view/simple/elder-simple-selection-view/elder-simple-selection-view.module.mjs +5 -5
  71. package/esm2022/lib/components/data-view/table/activation/elder-delete-active.directive.mjs +4 -4
  72. package/esm2022/lib/components/data-view/table/activation/elder-table-activation.directive.mjs +4 -4
  73. package/esm2022/lib/components/data-view/table/elder-center-cell.directive.mjs +4 -4
  74. package/esm2022/lib/components/data-view/table/elder-number-cell.directive.mjs +4 -4
  75. package/esm2022/lib/components/data-view/table/elder-paginator-intl.mjs +4 -4
  76. package/esm2022/lib/components/data-view/table/elder-table/elder-table-toolbar.directive.mjs +4 -4
  77. package/esm2022/lib/components/data-view/table/elder-table/elder-table.component.mjs +4 -4
  78. package/esm2022/lib/components/data-view/table/elder-table-column.directive.mjs +4 -4
  79. package/esm2022/lib/components/data-view/table/elder-table-extension.directive.mjs +4 -4
  80. package/esm2022/lib/components/data-view/table/elder-table-root.directive.mjs +4 -4
  81. package/esm2022/lib/components/data-view/table/elder-table-row.directive.mjs +4 -4
  82. package/esm2022/lib/components/data-view/table/elder-table-sort.directive.mjs +4 -4
  83. package/esm2022/lib/components/data-view/table/elder-table.module.mjs +5 -5
  84. package/esm2022/lib/components/data-view/table/model/elder-table-model.mjs +4 -4
  85. package/esm2022/lib/components/dialogs/confirm-dialog/elder-confirm-dialog.component.mjs +4 -4
  86. package/esm2022/lib/components/dialogs/elder-dialog.module.mjs +5 -5
  87. package/esm2022/lib/components/dialogs/elder-dialog.service.mjs +4 -4
  88. package/esm2022/lib/components/dialogs/question-dialog/elder-question-dialog.component.mjs +4 -4
  89. package/esm2022/lib/components/dialogs/selection-dialog/elder-selection-dialog/elder-selection-dialog.component.mjs +4 -4
  90. package/esm2022/lib/components/dialogs/selection-dialog/elder-selection-dialog.directive.mjs +4 -4
  91. package/esm2022/lib/components/errors/elder-error.module.mjs +5 -5
  92. package/esm2022/lib/components/errors/exception-detail/elder-exception-detail.component.mjs +4 -4
  93. package/esm2022/lib/components/expand-toggle-button/elder-expand-toggle-button.component.mjs +4 -4
  94. package/esm2022/lib/components/expand-toggle-button/elder-expand-toggle-button.module.mjs +5 -5
  95. package/esm2022/lib/components/files/blob-viewer/elder-blob-viewer.component.mjs +4 -4
  96. package/esm2022/lib/components/files/drag-n-drop/elder-drop-zone/elder-drop-zone.component.mjs +4 -4
  97. package/esm2022/lib/components/files/drag-n-drop/global-drag-drop.service.mjs +4 -4
  98. package/esm2022/lib/components/files/elder-file-drop-zone.directive.mjs +4 -4
  99. package/esm2022/lib/components/files/elder-file-select.directive.mjs +4 -4
  100. package/esm2022/lib/components/files/elder-file.module.mjs +5 -5
  101. package/esm2022/lib/components/files/file-select/file-select.component.mjs +4 -4
  102. package/esm2022/lib/components/files/file-upload/file-upload.component.mjs +4 -4
  103. package/esm2022/lib/components/forms/clipboard/elder-clipboard.service.mjs +4 -4
  104. package/esm2022/lib/components/forms/directives/base/elder-class-hostbinding-base.mjs +4 -4
  105. package/esm2022/lib/components/forms/directives/checkbox/elder-single-state-checkbox.directive.mjs +4 -4
  106. package/esm2022/lib/components/forms/directives/checkbox/elder-triple-state-checkbox.directive.mjs +4 -4
  107. package/esm2022/lib/components/forms/directives/elder-clipboard-put.directive.mjs +4 -4
  108. package/esm2022/lib/components/forms/directives/elder-delayed-focus.directive.mjs +4 -4
  109. package/esm2022/lib/components/forms/directives/elder-form-field-dense.directive.mjs +4 -4
  110. package/esm2022/lib/components/forms/directives/elder-form-field-label.directive.mjs +4 -4
  111. package/esm2022/lib/components/forms/directives/elder-form-field-no-hint.directive.mjs +4 -4
  112. package/esm2022/lib/components/forms/directives/elder-form-field-no-spinner.directive.mjs +4 -4
  113. package/esm2022/lib/components/forms/directives/elder-forms-directives.module.mjs +5 -5
  114. package/esm2022/lib/components/forms/directives/elder-initial-value.directive.mjs +4 -4
  115. package/esm2022/lib/components/forms/directives/elder-input-pattern.directive.mjs +4 -4
  116. package/esm2022/lib/components/forms/directives/elder-key-event.directive.mjs +4 -4
  117. package/esm2022/lib/components/forms/directives/elder-next-focusable.directive.mjs +4 -4
  118. package/esm2022/lib/components/forms/directives/elder-plug-parent-form.directive.mjs +4 -4
  119. package/esm2022/lib/components/forms/directives/elder-stop-event-propagation.directive.mjs +4 -4
  120. package/esm2022/lib/components/forms/directives/elder-tab-focus-trap.directive.mjs +4 -4
  121. package/esm2022/lib/components/forms/directives/elder-touched.directive.mjs +4 -4
  122. package/esm2022/lib/components/forms/directives/validation/elder-validation-error.directive.mjs +4 -4
  123. package/esm2022/lib/components/forms/directives/validation/strategies/common-validation-message-strategy.mjs +4 -4
  124. package/esm2022/lib/components/forms/directives/validation/strategies/dynamic-validation-message-strategy.mjs +4 -4
  125. package/esm2022/lib/components/forms/directives/validation/validation-message-renderer.service.mjs +4 -4
  126. package/esm2022/lib/components/forms/directives/validation/validators/elder-max.validator.mjs +4 -4
  127. package/esm2022/lib/components/forms/directives/validation/validators/elder-min.validator.mjs +4 -4
  128. package/esm2022/lib/components/forms/directives/validation/validators/elder-multiple-of.validator.mjs +4 -4
  129. package/esm2022/lib/components/forms/directives/validation/validators/elder-required-ignore-zero.validator.mjs +4 -4
  130. package/esm2022/lib/components/forms/elder-forms.module.mjs +5 -5
  131. package/esm2022/lib/components/forms/search/domain/context/search-context.service.mjs +4 -4
  132. package/esm2022/lib/components/forms/search/domain/url/elder-search-url.directive.mjs +4 -4
  133. package/esm2022/lib/components/forms/search/domain/url/elder-search-url.service.mjs +4 -4
  134. package/esm2022/lib/components/forms/search/elder-search-context.directive.mjs +4 -4
  135. package/esm2022/lib/components/forms/search/elder-search-input.directive.mjs +4 -4
  136. package/esm2022/lib/components/forms/search/elder-search.module.mjs +5 -5
  137. package/esm2022/lib/components/forms/search/search-box/elder-search-box.component.mjs +4 -4
  138. package/esm2022/lib/components/forms/search/search-box/elder-search-panel.component.mjs +4 -4
  139. package/esm2022/lib/components/global-search/elder-global-search.component.mjs +4 -4
  140. package/esm2022/lib/components/global-search/elder-global-search.module.mjs +5 -5
  141. package/esm2022/lib/components/global-search/elder-global-search.service.mjs +4 -4
  142. package/esm2022/lib/components/graph/elder-progress-bar/elder-progress-bar.component.mjs +4 -4
  143. package/esm2022/lib/components/graph/elder-progress-bar/elder-progress-bar.module.mjs +5 -5
  144. package/esm2022/lib/components/headers/elder-header/elder-header.component.mjs +4 -4
  145. package/esm2022/lib/components/headers/elder-header.module.mjs +5 -5
  146. package/esm2022/lib/components/http-support/elder-http-client.service.mjs +4 -4
  147. package/esm2022/lib/components/i18n/entities/elder-i18n-entities.module.mjs +5 -5
  148. package/esm2022/lib/components/i18n/entities/elder-localized-input/elder-localized-input.component.mjs +4 -4
  149. package/esm2022/lib/components/i18n/entities/elder-localized-input-dialog/elder-localized-input-dialog.component.mjs +4 -4
  150. package/esm2022/lib/components/i18n/entities/elder-localized-input-dialog.service.mjs +4 -4
  151. package/esm2022/lib/components/i18n/entities/elder-localized-input-table/elder-localized-input-table.component.mjs +4 -4
  152. package/esm2022/lib/components/i18n/entities/elder-localized-text-column.directive.mjs +4 -4
  153. package/esm2022/lib/components/i18n/entities/elder-localized-texts.directive.mjs +4 -4
  154. package/esm2022/lib/components/i18n/entities/picker/i18n-pick-async.pipe.mjs +4 -4
  155. package/esm2022/lib/components/i18n/entities/picker/i18n-pick.pipe.mjs +4 -4
  156. package/esm2022/lib/components/i18n/entities/picker/localisation-picker.service.mjs +4 -4
  157. package/esm2022/lib/components/i18n/language/elder-language-interceptor.mjs +4 -4
  158. package/esm2022/lib/components/i18n/language/elder-language.module.mjs +5 -5
  159. package/esm2022/lib/components/i18n/language/elder-language.service.mjs +4 -4
  160. package/esm2022/lib/components/i18n/language/language-switcher/elder-language-switcher.component.mjs +4 -4
  161. package/esm2022/lib/components/i18n/locales/elder-locales-de-ch.module.mjs +5 -5
  162. package/esm2022/lib/components/iframes/data-view/data-view-iframe/data-view-iframe.component.mjs +4 -4
  163. package/esm2022/lib/components/iframes/data-view/data-view-iframe-adapter.directive.mjs +4 -4
  164. package/esm2022/lib/components/iframes/elder-iframe.module.mjs +5 -5
  165. package/esm2022/lib/components/iframes/iframe-close.directive.mjs +4 -4
  166. package/esm2022/lib/components/iframes/iframe-dialog/iframe-dialog.component.mjs +4 -4
  167. package/esm2022/lib/components/iframes/iframe-host/iframe-host.component.mjs +4 -4
  168. package/esm2022/lib/components/iframes/iframe-side-content/iframe-side-content.component.mjs +4 -4
  169. package/esm2022/lib/components/iframes/iframe.service.mjs +4 -4
  170. package/esm2022/lib/components/infinitescroll/elder-infinite-autocomplete.directive.mjs +4 -4
  171. package/esm2022/lib/components/infinitescroll/elder-infinite-scroll.directive.mjs +4 -4
  172. package/esm2022/lib/components/infinitescroll/elder-infinite-scroll.module.mjs +5 -5
  173. package/esm2022/lib/components/input/autocomplete/elder-autocomplete/elder-suggestion-panel.component.mjs +5 -5
  174. package/esm2022/lib/components/input/autocomplete/elder-autocomplete-many.directive.mjs +4 -4
  175. package/esm2022/lib/components/input/autocomplete/elder-autocomplete.directive.mjs +4 -4
  176. package/esm2022/lib/components/input/autocomplete/elder-autocomplete.module.mjs +5 -5
  177. package/esm2022/lib/components/labels/elder-labels.module.mjs +5 -5
  178. package/esm2022/lib/components/labels/labels-input/labels-input.component.mjs +4 -4
  179. package/esm2022/lib/components/measures/dimensions/dimensions-input/elder-dimensions-input.component.mjs +9 -16
  180. package/esm2022/lib/components/measures/dimensions/validation/elder-required-dimensions.validator.mjs +4 -4
  181. package/esm2022/lib/components/measures/directives/elder-unit-select.directive.mjs +4 -4
  182. package/esm2022/lib/components/measures/elder-measures.module.mjs +9 -9
  183. package/esm2022/lib/components/measures/elder-quantity-transform.pipe.mjs +4 -4
  184. package/esm2022/lib/components/measures/elder-quantity.pipe.mjs +4 -4
  185. package/esm2022/lib/components/measures/elder-unit.service.mjs +4 -4
  186. package/esm2022/lib/components/measures/quantity-input/quantity-form-field/elder-quantity-form-field.component.mjs +4 -4
  187. package/esm2022/lib/components/measures/quantity-input/quantity-input-control/elder-quantity-input-control.component.mjs +12 -18
  188. package/esm2022/lib/components/measures/quantity-input/validation/elder-quantity-range.validator.mjs +4 -4
  189. package/esm2022/lib/components/measures/quantity-input/validation/elder-required-quantity.validator.mjs +4 -4
  190. package/esm2022/lib/components/measures/util/elder-quantity.service.mjs +4 -4
  191. package/esm2022/lib/components/navigation/bread-crumbs/bread-crumbs/elder-bread-crumbs.component.mjs +4 -4
  192. package/esm2022/lib/components/navigation/bread-crumbs/elder-bread-crumbs.module.mjs +5 -5
  193. package/esm2022/lib/components/navigation/nav/elder-nav.module.mjs +5 -5
  194. package/esm2022/lib/components/navigation/nav/nav-group/elder-nav-group.component.mjs +4 -4
  195. package/esm2022/lib/components/navigation/nav/nav-link/elder-nav-link.component.mjs +4 -4
  196. package/esm2022/lib/components/navigation/nav/nav-list/elder-nav-list.component.mjs +4 -4
  197. package/esm2022/lib/components/navigation/toolbar/elder-toolbar-column.directive.mjs +4 -4
  198. package/esm2022/lib/components/navigation/toolbar/elder-toolbar.module.mjs +5 -5
  199. package/esm2022/lib/components/navigation/toolbar/elder-toolbar.service.mjs +4 -4
  200. package/esm2022/lib/components/navigation/toolbar/toolbar/elder-toolbar.component.mjs +4 -4
  201. package/esm2022/lib/components/navigation/toolbar/toolbar-title/elder-toolbar-title.component.mjs +4 -4
  202. package/esm2022/lib/components/navigation/toolbar/toolbar-title/elder-toolbar-title.service.mjs +4 -4
  203. package/esm2022/lib/components/overlays/elder-overlay-origin.directive.mjs +4 -4
  204. package/esm2022/lib/components/overlays/elder-overlay-ref.mjs +4 -4
  205. package/esm2022/lib/components/overlays/elder-overlay-trigger.directive.mjs +4 -4
  206. package/esm2022/lib/components/overlays/elder-overlay.component.mjs +4 -4
  207. package/esm2022/lib/components/overlays/elder-overlay.module.mjs +5 -5
  208. package/esm2022/lib/components/page/exit-guard/page-exit-guard.module.mjs +5 -5
  209. package/esm2022/lib/components/page/exit-guard/page-exit-guard.service.mjs +4 -4
  210. package/esm2022/lib/components/page/exit-guard/page-exit-lock/page-exit-lock.component.mjs +4 -4
  211. package/esm2022/lib/components/page/exit-guard/page-exit-lock-indicator/page-exit-lock-indicator.component.mjs +4 -4
  212. package/esm2022/lib/components/page/exit-guard/page-exit-lock-overview/page-exit-lock-overview.component.mjs +4 -4
  213. package/esm2022/lib/components/panels/card-panel/elder-card-panel.component.mjs +4 -4
  214. package/esm2022/lib/components/panels/elder-dialog-panel/elder-dialog-panel.component.mjs +4 -4
  215. package/esm2022/lib/components/panels/elder-panel.module.mjs +5 -5
  216. package/esm2022/lib/components/panels/flat/elder-panel.component.mjs +4 -4
  217. package/esm2022/lib/components/panels/toggle-panel/elder-toggle-panel-trigger.directive.mjs +4 -4
  218. package/esm2022/lib/components/panels/toggle-panel/elder-toggle-panel.component.mjs +10 -10
  219. package/esm2022/lib/components/scrollbar/elder-scrollbar.directive.mjs +4 -4
  220. package/esm2022/lib/components/scrollbar/elder-scrollbar.module.mjs +5 -5
  221. package/esm2022/lib/components/select/auto/elder-auto-select-first.directive.mjs +4 -4
  222. package/esm2022/lib/components/select/auto/elder-auto-select-first.service.mjs +4 -4
  223. package/esm2022/lib/components/select/auto/elder-auto-select-suggest-first.directive.mjs +4 -4
  224. package/esm2022/lib/components/select/elder-select-base.mjs +40 -24
  225. package/esm2022/lib/components/select/elder-select-chip.directive.mjs +10 -10
  226. package/esm2022/lib/components/select/elder-select-on-tab.directive.mjs +4 -4
  227. package/esm2022/lib/components/select/elder-select-value.directive.mjs +4 -4
  228. package/esm2022/lib/components/select/elder-select.module.mjs +5 -5
  229. package/esm2022/lib/components/select/filter/elder-chips-include-exclude.directive.mjs +4 -4
  230. package/esm2022/lib/components/select/filter/elder-filter-chip-template/elder-filter-chip-template.component.mjs +4 -4
  231. package/esm2022/lib/components/select/multi/elder-chip-select-option/elder-select-option.component.mjs +4 -4
  232. package/esm2022/lib/components/select/multi/elder-multi-select-base.mjs +10 -13
  233. package/esm2022/lib/components/select/multi/elder-multi-select-chip-options/chip-options-provider.mjs +4 -3
  234. package/esm2022/lib/components/select/multi/elder-multi-select-chip-options/elder-multi-select-chip-options.component.mjs +22 -31
  235. package/esm2022/lib/components/select/multi/elder-multi-select-chips/elder-multi-select-chips.component.mjs +24 -37
  236. package/esm2022/lib/components/select/multi/elder-multi-select-form-field.mjs +4 -4
  237. package/esm2022/lib/components/select/multi/elder-mutli-select-all-directive.mjs +4 -4
  238. package/esm2022/lib/components/select/multi/elder-search-include-exclude.directive.mjs +4 -4
  239. package/esm2022/lib/components/select/popup/selection-model-popup-trigger-adapter.directive.mjs +4 -4
  240. package/esm2022/lib/components/select/popup/selection-model-popup.directive.mjs +4 -4
  241. package/esm2022/lib/components/select/popup/templated-selection-dialog/templated-selection-dialog.component.mjs +4 -4
  242. package/esm2022/lib/components/select/single/elder-clear-select.directive.mjs +4 -4
  243. package/esm2022/lib/components/select/single/elder-select/elder-select.component.mjs +30 -49
  244. package/esm2022/lib/components/select/single/elder-select-form-field.mjs +4 -4
  245. package/esm2022/lib/components/select-chip-list/chip-list-select/elder-chip-list-select.component.mjs +4 -4
  246. package/esm2022/lib/components/select-chip-list/elder-chip-list-select.module.mjs +5 -5
  247. package/esm2022/lib/components/shell/drawers/elder-route-outlet-drawer.service.mjs +4 -4
  248. package/esm2022/lib/components/shell/drawers/elder-router-outlet.service.mjs +4 -4
  249. package/esm2022/lib/components/shell/elder-shell-slot.directive.mjs +4 -4
  250. package/esm2022/lib/components/shell/elder-shell.module.mjs +5 -5
  251. package/esm2022/lib/components/shell/elder-shell.service.mjs +4 -4
  252. package/esm2022/lib/components/shell/header/elder-app-header/elder-app-header.component.mjs +4 -4
  253. package/esm2022/lib/components/shell/shell/elder-shell.component.mjs +13 -13
  254. package/esm2022/lib/components/shell/shell-navigation-toggle/elder-shell-navigation-toggle.component.mjs +4 -4
  255. package/esm2022/lib/components/tabs/elder-tab/elder-tab.directive.mjs +4 -4
  256. package/esm2022/lib/components/tabs/elder-tab-group-routing/elder-tab-group-routing.directive.mjs +4 -4
  257. package/esm2022/lib/components/tabs/elder-tab.module.mjs +5 -5
  258. package/esm2022/lib/components/theme/elder-theme-applier.directive.mjs +4 -4
  259. package/esm2022/lib/components/theme/elder-theme-preference.service.mjs +4 -4
  260. package/esm2022/lib/components/theme/elder-theme-toggle/elder-theme-toggle.component.mjs +4 -4
  261. package/esm2022/lib/components/theme/elder-theme.directive.mjs +4 -4
  262. package/esm2022/lib/components/theme/elder-theme.module.mjs +5 -5
  263. package/esm2022/lib/components/theme/elder-theme.service.mjs +4 -4
  264. package/esm2022/lib/components/time/date-adapters/custom-date-adapter.mjs +4 -4
  265. package/esm2022/lib/components/time/duration/elder-duration-input/elder-duration-input.component.mjs +9 -16
  266. package/esm2022/lib/components/time/elder-date-switcher/elder-date-switcher.component.mjs +4 -4
  267. package/esm2022/lib/components/time/elder-date-time-input/elder-date-time-input.component.mjs +10 -16
  268. package/esm2022/lib/components/time/elder-interval-input/elder-interval-input.component.mjs +12 -17
  269. package/esm2022/lib/components/time/elder-interval-picker/elder-interval-picker.component.mjs +4 -4
  270. package/esm2022/lib/components/time/elder-interval-picker/interval-picker-binding/elder-interval-picker-binding.directive.mjs +4 -4
  271. package/esm2022/lib/components/time/elder-interval-picker/interval-picker-toggle/elder-interval-picker-toggle.component.mjs +4 -4
  272. package/esm2022/lib/components/time/elder-local-date-input/elder-local-date-input.component.mjs +10 -16
  273. package/esm2022/lib/components/time/elder-local-time-input/elder-local-time-input.component.mjs +10 -16
  274. package/esm2022/lib/components/time/elder-time.module.mjs +5 -5
  275. package/esm2022/lib/components/time/period/elder-period-input/elder-period-input.component.mjs +9 -16
  276. package/esm2022/lib/components/time/pipes/to-iso-date-string.pipe.mjs +4 -4
  277. package/esm2022/lib/components/toasts/elder-toast.module.mjs +5 -5
  278. package/esm2022/lib/components/toasts/elder-toast.service.mjs +4 -4
  279. package/esm2022/lib/components/toasts/standard-toast/standard-toast.component.mjs +4 -4
  280. package/esm2022/lib/components/url-fragment/elder-url-fragment.module.mjs +5 -5
  281. package/esm2022/lib/components/url-fragment/url-fragment-switcher/elder-url-fragment-switcher.component.mjs +4 -4
  282. package/esm2022/lib/components/viewers/elder-svg-viewer/elder-svg-viewer.component.mjs +4 -4
  283. package/esm2022/lib/components/viewers/elder-viewers.module.mjs +5 -5
  284. package/esm2022/lib/features/event-source/fetch/reactive-fetch-event-source.service.mjs +4 -4
  285. package/esm2022/lib/features/event-source/standard/elder-event-source.service.mjs +4 -4
  286. package/esm2022/lib/features/kafent/access-token-provider.mjs +4 -4
  287. package/esm2022/lib/features/kafent/kafent-config.mjs +4 -4
  288. package/esm2022/lib/features/kafent/kafent-event-stream.mjs +4 -4
  289. package/esm2022/lib/features/kafent/kafent-event.service.mjs +4 -4
  290. package/esm2022/lib/features/kafent/kafent.module.mjs +5 -5
  291. package/esm2022/lib/features/kafent/sse/kafent-event-stream-sse.service.mjs +4 -4
  292. package/esm2022/lib/pipes/bytes.pipe.mjs +4 -4
  293. package/esm2022/lib/pipes/elder-pipes.module.mjs +11 -11
  294. package/esm2022/lib/pipes/elder-repeat.pipe.mjs +4 -4
  295. package/esm2022/lib/pipes/elder-round.pipe.mjs +4 -4
  296. package/esm2022/lib/pipes/elder-safe-url.pipe.mjs +4 -4
  297. package/esm2022/lib/pipes/elder-truncate.pipe.mjs +4 -4
  298. package/esm2022/lib/pipes/iso-duration.pipe.mjs +4 -4
  299. package/esm2022/lib/pipes/iso-interval-parse.pipe.mjs +4 -4
  300. package/esm2022/lib/pipes/iso-interval.pipe.mjs +4 -4
  301. package/esm2022/lib/pipes/time-ago.pipe.mjs +4 -4
  302. package/esm2022/lib/pipes/time-duration.pipe.mjs +4 -4
  303. package/esm2022/lib/pipes/weight.pipe.mjs +4 -4
  304. package/fesm2022/elderbyte-ngx-starter.mjs +1257 -1314
  305. package/fesm2022/elderbyte-ngx-starter.mjs.map +1 -1
  306. package/lib/common/forms/elder-form-field-control-base.directive.d.ts +14 -18
  307. package/lib/common/utils/public_api.d.ts +1 -0
  308. package/lib/components/measures/dimensions/dimensions-input/elder-dimensions-input.component.d.ts +3 -7
  309. package/lib/components/measures/quantity-input/quantity-input-control/elder-quantity-input-control.component.d.ts +3 -7
  310. package/lib/components/select/elder-select-base.d.ts +13 -12
  311. package/lib/components/select/multi/elder-multi-select-base.d.ts +2 -7
  312. package/lib/components/select/multi/elder-multi-select-chip-options/chip-options-provider.d.ts +2 -1
  313. package/lib/components/select/multi/elder-multi-select-chip-options/elder-multi-select-chip-options.component.d.ts +5 -9
  314. package/lib/components/select/multi/elder-multi-select-chips/elder-multi-select-chips.component.d.ts +7 -11
  315. package/lib/components/select/single/elder-select/elder-select.component.d.ts +8 -15
  316. package/lib/components/time/duration/elder-duration-input/elder-duration-input.component.d.ts +2 -7
  317. package/lib/components/time/elder-date-time-input/elder-date-time-input.component.d.ts +3 -7
  318. package/lib/components/time/elder-interval-input/elder-interval-input.component.d.ts +3 -7
  319. package/lib/components/time/elder-local-date-input/elder-local-date-input.component.d.ts +3 -7
  320. package/lib/components/time/elder-local-time-input/elder-local-time-input.component.d.ts +3 -7
  321. package/lib/components/time/period/elder-period-input/elder-period-input.component.d.ts +2 -7
  322. package/package.json +1 -1
  323. package/src/lib/components/select/multi/elder-select-include-exclude-chip/elder-select-include-exclude-chip.component.scss +0 -0
@@ -1,4 +1,4 @@
1
- import { ChangeDetectionStrategy, Component, ContentChild, forwardRef, Input, Optional, Self, TemplateRef, ViewChild, } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, ContentChild, forwardRef, Input, TemplateRef, ViewChild, } from '@angular/core';
2
2
  import { ElderMultiSelectBase } from '../elder-multi-select-base';
3
3
  import { LoggerFactory } from '@elderbyte/ts-logger';
4
4
  import { BehaviorSubject, combineLatest } from 'rxjs';
@@ -13,24 +13,20 @@ import ChipOptionsProvider from './chip-options-provider';
13
13
  import { ElderTruncatePipe } from '../../../../pipes/elder-truncate.pipe';
14
14
  import { ElderStopEventPropagationDirective } from '../../../forms/directives/elder-stop-event-propagation.directive';
15
15
  import { MatIconButton } from '@angular/material/button';
16
- import { NgTemplateOutlet, AsyncPipe } from '@angular/common';
16
+ import { NgTemplateOutlet } from '@angular/common';
17
17
  import { ElderChipLabelDirective } from '../../../chips/elder-chip-label.directive';
18
18
  import { MatIcon } from '@angular/material/icon';
19
19
  import { MatTooltip } from '@angular/material/tooltip';
20
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
20
+ import { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';
21
21
  import * as i0 from "@angular/core";
22
- import * as i1 from "@angular/cdk/a11y";
23
- import * as i2 from "@ngx-translate/core";
24
- import * as i3 from "../../../dialogs/elder-dialog.service";
25
- import * as i4 from "@angular/forms";
26
22
  export class ElderMultiSelectChipOptionsComponent extends ElderMultiSelectBase {
27
23
  /***************************************************************************
28
24
  * *
29
25
  * Constructor *
30
26
  * *
31
27
  **************************************************************************/
32
- constructor(hostRef, zone, focusMonitor, translateService, dialogService, destroyRef, ngControl) {
33
- super(zone, hostRef, 'multi-select-chip-options', focusMonitor, translateService, dialogService, ngControl);
28
+ constructor(destroyRef) {
29
+ super('multi-select-chip-options');
34
30
  this.destroyRef = destroyRef;
35
31
  /***************************************************************************
36
32
  * *
@@ -45,10 +41,10 @@ export class ElderMultiSelectChipOptionsComponent extends ElderMultiSelectBase {
45
41
  this.stacked = false;
46
42
  this._multiple = false;
47
43
  this.context$ = combineLatest([
48
- this.state$,
49
- this.displayPropertyResolver$,
50
- this.readonly$,
51
- this.disabled$,
44
+ toObservable(this.state),
45
+ toObservable(this.displayPropertyResolverS),
46
+ toObservable(this.readonlyS),
47
+ toObservable(this.disabledS),
52
48
  ]).pipe(map(([state, dPR, readonly, disabled]) => {
53
49
  return {
54
50
  state: state,
@@ -63,19 +59,19 @@ export class ElderMultiSelectChipOptionsComponent extends ElderMultiSelectBase {
63
59
  this.chipSpecFn$,
64
60
  this.templateOptions$,
65
61
  ]).pipe(map(([dc, data, chipSpecFn, templateChips]) => new ChipOptionsProvider(dc.dataSource, this.buildAvailableEntities(data, templateChips), chipSpecFn)));
66
- this.selectChips$ = combineLatest([
62
+ this.selectChips = toSignal(combineLatest([
67
63
  optionsProvider$,
68
64
  this.entities$,
69
65
  this.entityIds$,
70
66
  this.templateOptions$,
71
67
  this.context$,
72
- ]).pipe(takeUntilDestroyed(this.destroyRef), map(([optionsProvider, entities, entityIds, templateSelectChips, context]) => this.buildChipModels(optionsProvider, entities, entityIds, this.buildEntitiesLabelMap(templateSelectChips), context)));
73
- this.templates$ = combineLatest([this.chipTemplate$, this.chipAvatarTemplate$]).pipe(map(([chip, avatar]) => {
68
+ ]).pipe(takeUntilDestroyed(this.destroyRef), map(([optionsProvider, entities, entityIds, templateSelectChips, context]) => this.buildChipModels(optionsProvider, entities, entityIds, this.buildEntitiesLabelMap(templateSelectChips), context))));
69
+ this.templates = toSignal(combineLatest([this.chipTemplate$, this.chipAvatarTemplate$]).pipe(map(([chip, avatar]) => {
74
70
  return {
75
71
  chip,
76
72
  avatar,
77
73
  };
78
- }));
74
+ })));
79
75
  }
80
76
  /***************************************************************************
81
77
  * *
@@ -192,7 +188,7 @@ export class ElderMultiSelectChipOptionsComponent extends ElderMultiSelectBase {
192
188
  }
193
189
  }
194
190
  isEntityIdSelected(entityId) {
195
- return this.entities.some((e) => this.getEntityId(e) == entityId);
191
+ return this.entities.some((e) => this.getEntityId(e) === entityId);
196
192
  }
197
193
  buildChipModels(optionsProvider, entities, entityIds, entitiesLabels, context) {
198
194
  return optionsProvider.buildChipModelsOrFallback(entities, entityIds, {
@@ -209,19 +205,19 @@ export class ElderMultiSelectChipOptionsComponent extends ElderMultiSelectBase {
209
205
  }
210
206
  buildEntitiesLabelMap(templateChips) {
211
207
  return new Map(templateChips
212
- .filter((chip) => chip.label != undefined)
208
+ .filter((chip) => chip.label !== undefined)
213
209
  .map((chip) => [chip.value, chip.label]));
214
210
  }
215
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ElderMultiSelectChipOptionsComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i1.FocusMonitor }, { token: i2.TranslateService }, { token: i3.ElderDialogService }, { token: i0.DestroyRef }, { token: i4.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component }); }
216
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.5", type: ElderMultiSelectChipOptionsComponent, isStandalone: true, selector: "elder-multi-select-chip-options", inputs: { defaultChipSpec: "defaultChipSpec", stacked: "stacked", multiple: "multiple", chipSpecFn: "chipSpecFn", chipTemplate: "chipTemplate", chipAvatarTemplate: "chipAvatarTemplate" }, providers: [
211
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElderMultiSelectChipOptionsComponent, deps: [{ token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component }); }
212
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ElderMultiSelectChipOptionsComponent, isStandalone: true, selector: "elder-multi-select-chip-options", inputs: { defaultChipSpec: "defaultChipSpec", stacked: "stacked", multiple: "multiple", chipSpecFn: "chipSpecFn", chipTemplate: "chipTemplate", chipAvatarTemplate: "chipAvatarTemplate" }, providers: [
217
213
  { provide: MatFormFieldControl, useExisting: ElderMultiSelectChipOptionsComponent },
218
214
  {
219
215
  provide: ELDER_SELECT_BASE,
220
216
  useExisting: forwardRef(() => ElderMultiSelectChipOptionsComponent),
221
217
  },
222
- ], queries: [{ propertyName: "chipTemplateQuery", first: true, predicate: ElderSelectChipDirective, descendants: true, read: TemplateRef }, { propertyName: "chipAvatarTemplateQuery", first: true, predicate: ElderSelectChipAvatarDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "_listBox", first: true, predicate: MatChipListbox, descendants: true }], usesInheritance: true, ngImport: i0, template: "@if (selectChips$ | async; as selectChips) {\n <div class=\"elder-flex-control\" [matTooltip]=\"(state$ | async)?.error\">\n <mat-chip-listbox #chips [class.mat-mdc-chip-set-stacked]=\"stacked\" [multiple]=\"multiple\">\n @if (state$ | async; as state) {\n @if (icon) {\n <div class=\"elder-input-prefix-icon-container flex-none\">\n <mat-icon\n disabled\n class=\"elder-prefix-icon elder-mdc-control-icon elder-icon-small noselect\"\n [class.loading]=\"state.loading\"\n >\n {{ icon }}\n </mat-icon>\n </div>\n }\n }\n\n @if (templates$ | async; as templates) {\n <ng-content></ng-content>\n\n @for (chipModel of selectChips; track chipModel.value) {\n <mat-chip-option\n class=\"noselect\"\n [value]=\"resolveChipValue(chipModel.value)\"\n elderChipLabel\n [levelColor]=\"chipModel.colorSpec?.levelColor\"\n [stateColor]=\"chipModel.colorSpec?.stateColor\"\n [color]=\"chipModel.colorSpec?.themeColor\"\n [selectable]=\"!chipModel.locked\"\n [disabled]=\"chipModel.locked\"\n [selected]=\"chipModel.selected\"\n (selectionChange)=\"selectionChanged($event, chipModel.value)\"\n >\n @if (templates.avatar && !chipModel.avatarSpec?.hide) {\n <mat-chip-avatar [class.chip-avatar-xl]=\"chipModel.avatarSpec?.large\">\n <ng-container\n *ngTemplateOutlet=\"templates.avatar; context: { $implicit: chipModel }\"\n >\n </ng-container>\n </mat-chip-avatar>\n }\n\n <ng-container\n *ngTemplateOutlet=\"\n templates.chip || simpleChipTemplate;\n context: { $implicit: chipModel }\n \"\n >\n </ng-container>\n\n @if (chipModel.trailingSpec?.icon) {\n <mat-icon\n matChipTrailingIcon\n class=\"elder-trailing-icon\"\n [fontSet]=\"chipModel.trailingSpec?.iconFontSet\"\n >{{ chipModel.trailingSpec?.icon }}\n </mat-icon>\n }\n </mat-chip-option>\n }\n\n <div class=\"layout-row place-start-center elder-chip-input\">\n @if (selectionPopup) {\n <button\n mat-icon-button\n type=\"button\"\n class=\"elder-control-icon-button elder-browse-icon\"\n [disabled]=\"isLocked\"\n (click)=\"openSelectionPopup($event)\"\n aria-label=\"Search\"\n elderStopEventPropagation\n tabIndex=\"-1\"\n >\n <mat-icon class=\"elder-mdc-control-icon\">search</mat-icon>\n </button>\n }\n </div>\n }\n </mat-chip-listbox>\n </div>\n}\n\n<ng-template #simpleChipTemplate let-chipModel>\n <span class=\"elder-chip-text\">{{ chipModel.displayText | elderTruncate: 20 }}</span>\n</ng-template>\n", styles: [".elder-chip-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.elder-trailing-icon{color:var(--mdc-chip-with-trailing-icon-trailing-icon-color);opacity:.54}\n"], dependencies: [{ kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatChipListbox, selector: "mat-chip-listbox", inputs: ["multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatChipOption, selector: "mat-basic-chip-option, [mat-basic-chip-option], mat-chip-option, [mat-chip-option]", inputs: ["selectable", "selected"], outputs: ["selectionChange"] }, { kind: "directive", type: ElderChipLabelDirective, selector: "[elderChipLabel]", inputs: ["appearance", "color", "stateColor", "levelColor"] }, { kind: "directive", type: MatChipAvatar, selector: "mat-chip-avatar, [matChipAvatar]" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: MatChipTrailingIcon, selector: "mat-chip-trailing-icon, [matChipTrailingIcon]" }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: ElderStopEventPropagationDirective, selector: "[elderStopEventPropagation]" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: ElderTruncatePipe, name: "elderTruncate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
218
+ ], queries: [{ propertyName: "chipTemplateQuery", first: true, predicate: ElderSelectChipDirective, descendants: true, read: TemplateRef }, { propertyName: "chipAvatarTemplateQuery", first: true, predicate: ElderSelectChipAvatarDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "_listBox", first: true, predicate: MatChipListbox, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"elder-flex-control\" [matTooltip]=\"state()?.error\">\n <mat-chip-listbox #chips [class.mat-mdc-chip-set-stacked]=\"stacked\" [multiple]=\"multiple\">\n @if (state(); as state) {\n @if (icon) {\n <div class=\"elder-input-prefix-icon-container flex-none\">\n <mat-icon\n disabled\n class=\"elder-prefix-icon elder-mdc-control-icon elder-icon-small noselect\"\n [class.loading]=\"state.loading\"\n >\n {{ icon }}\n </mat-icon>\n </div>\n }\n }\n\n <ng-content></ng-content>\n\n @for (chipModel of selectChips(); track chipModel.id) {\n <mat-chip-option\n class=\"noselect\"\n [value]=\"resolveChipValue(chipModel.value)\"\n elderChipLabel\n [levelColor]=\"chipModel.colorSpec?.levelColor\"\n [stateColor]=\"chipModel.colorSpec?.stateColor\"\n [color]=\"chipModel.colorSpec?.themeColor\"\n [selectable]=\"!chipModel.locked\"\n [disabled]=\"chipModel.locked\"\n [selected]=\"chipModel.selected\"\n (selectionChange)=\"selectionChanged($event, chipModel.value)\"\n >\n @if (templates()?.avatar && !chipModel.avatarSpec?.hide) {\n <mat-chip-avatar [class.chip-avatar-xl]=\"chipModel.avatarSpec?.large\">\n <ng-container *ngTemplateOutlet=\"templates().avatar; context: { $implicit: chipModel }\">\n </ng-container>\n </mat-chip-avatar>\n }\n\n <ng-container\n *ngTemplateOutlet=\"\n templates()?.chip || simpleChipTemplate;\n context: { $implicit: chipModel }\n \"\n >\n </ng-container>\n\n @if (chipModel.trailingSpec?.icon) {\n <mat-icon\n matChipTrailingIcon\n class=\"elder-trailing-icon\"\n [fontSet]=\"chipModel.trailingSpec?.iconFontSet\"\n >{{ chipModel.trailingSpec?.icon }}\n </mat-icon>\n }\n </mat-chip-option>\n }\n\n <div class=\"layout-row place-start-center elder-chip-input\">\n @if (selectionPopup) {\n <button\n mat-icon-button\n type=\"button\"\n class=\"elder-control-icon-button elder-browse-icon\"\n [disabled]=\"isLocked\"\n (click)=\"openSelectionPopup($event)\"\n aria-label=\"Search\"\n elderStopEventPropagation\n tabIndex=\"-1\"\n >\n <mat-icon class=\"elder-mdc-control-icon\">search</mat-icon>\n </button>\n }\n </div>\n </mat-chip-listbox>\n</div>\n\n<ng-template #simpleChipTemplate let-chipModel>\n <span class=\"elder-chip-text\">{{ chipModel.displayText | elderTruncate: 20 }}</span>\n</ng-template>\n", styles: [".elder-chip-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.elder-trailing-icon{color:var(--mdc-chip-with-trailing-icon-trailing-icon-color);opacity:.54}\n"], dependencies: [{ kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatChipListbox, selector: "mat-chip-listbox", inputs: ["multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatChipOption, selector: "mat-basic-chip-option, [mat-basic-chip-option], mat-chip-option, [mat-chip-option]", inputs: ["selectable", "selected"], outputs: ["selectionChange"] }, { kind: "directive", type: ElderChipLabelDirective, selector: "[elderChipLabel]", inputs: ["appearance", "color", "stateColor", "levelColor"] }, { kind: "directive", type: MatChipAvatar, selector: "mat-chip-avatar, [matChipAvatar]" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: MatChipTrailingIcon, selector: "mat-chip-trailing-icon, [matChipTrailingIcon]" }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: ElderStopEventPropagationDirective, selector: "[elderStopEventPropagation]" }, { kind: "pipe", type: ElderTruncatePipe, name: "elderTruncate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
223
219
  }
224
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ElderMultiSelectChipOptionsComponent, decorators: [{
220
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElderMultiSelectChipOptionsComponent, decorators: [{
225
221
  type: Component,
226
222
  args: [{ selector: 'elder-multi-select-chip-options', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
227
223
  { provide: MatFormFieldControl, useExisting: ElderMultiSelectChipOptionsComponent },
@@ -240,14 +236,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImpor
240
236
  MatChipTrailingIcon,
241
237
  MatIconButton,
242
238
  ElderStopEventPropagationDirective,
243
- AsyncPipe,
244
239
  ElderTruncatePipe,
245
- ], template: "@if (selectChips$ | async; as selectChips) {\n <div class=\"elder-flex-control\" [matTooltip]=\"(state$ | async)?.error\">\n <mat-chip-listbox #chips [class.mat-mdc-chip-set-stacked]=\"stacked\" [multiple]=\"multiple\">\n @if (state$ | async; as state) {\n @if (icon) {\n <div class=\"elder-input-prefix-icon-container flex-none\">\n <mat-icon\n disabled\n class=\"elder-prefix-icon elder-mdc-control-icon elder-icon-small noselect\"\n [class.loading]=\"state.loading\"\n >\n {{ icon }}\n </mat-icon>\n </div>\n }\n }\n\n @if (templates$ | async; as templates) {\n <ng-content></ng-content>\n\n @for (chipModel of selectChips; track chipModel.value) {\n <mat-chip-option\n class=\"noselect\"\n [value]=\"resolveChipValue(chipModel.value)\"\n elderChipLabel\n [levelColor]=\"chipModel.colorSpec?.levelColor\"\n [stateColor]=\"chipModel.colorSpec?.stateColor\"\n [color]=\"chipModel.colorSpec?.themeColor\"\n [selectable]=\"!chipModel.locked\"\n [disabled]=\"chipModel.locked\"\n [selected]=\"chipModel.selected\"\n (selectionChange)=\"selectionChanged($event, chipModel.value)\"\n >\n @if (templates.avatar && !chipModel.avatarSpec?.hide) {\n <mat-chip-avatar [class.chip-avatar-xl]=\"chipModel.avatarSpec?.large\">\n <ng-container\n *ngTemplateOutlet=\"templates.avatar; context: { $implicit: chipModel }\"\n >\n </ng-container>\n </mat-chip-avatar>\n }\n\n <ng-container\n *ngTemplateOutlet=\"\n templates.chip || simpleChipTemplate;\n context: { $implicit: chipModel }\n \"\n >\n </ng-container>\n\n @if (chipModel.trailingSpec?.icon) {\n <mat-icon\n matChipTrailingIcon\n class=\"elder-trailing-icon\"\n [fontSet]=\"chipModel.trailingSpec?.iconFontSet\"\n >{{ chipModel.trailingSpec?.icon }}\n </mat-icon>\n }\n </mat-chip-option>\n }\n\n <div class=\"layout-row place-start-center elder-chip-input\">\n @if (selectionPopup) {\n <button\n mat-icon-button\n type=\"button\"\n class=\"elder-control-icon-button elder-browse-icon\"\n [disabled]=\"isLocked\"\n (click)=\"openSelectionPopup($event)\"\n aria-label=\"Search\"\n elderStopEventPropagation\n tabIndex=\"-1\"\n >\n <mat-icon class=\"elder-mdc-control-icon\">search</mat-icon>\n </button>\n }\n </div>\n }\n </mat-chip-listbox>\n </div>\n}\n\n<ng-template #simpleChipTemplate let-chipModel>\n <span class=\"elder-chip-text\">{{ chipModel.displayText | elderTruncate: 20 }}</span>\n</ng-template>\n", styles: [".elder-chip-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.elder-trailing-icon{color:var(--mdc-chip-with-trailing-icon-trailing-icon-color);opacity:.54}\n"] }]
246
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i1.FocusMonitor }, { type: i2.TranslateService }, { type: i3.ElderDialogService }, { type: i0.DestroyRef }, { type: i4.NgControl, decorators: [{
247
- type: Optional
248
- }, {
249
- type: Self
250
- }] }], propDecorators: { defaultChipSpec: [{
240
+ ], template: "<div class=\"elder-flex-control\" [matTooltip]=\"state()?.error\">\n <mat-chip-listbox #chips [class.mat-mdc-chip-set-stacked]=\"stacked\" [multiple]=\"multiple\">\n @if (state(); as state) {\n @if (icon) {\n <div class=\"elder-input-prefix-icon-container flex-none\">\n <mat-icon\n disabled\n class=\"elder-prefix-icon elder-mdc-control-icon elder-icon-small noselect\"\n [class.loading]=\"state.loading\"\n >\n {{ icon }}\n </mat-icon>\n </div>\n }\n }\n\n <ng-content></ng-content>\n\n @for (chipModel of selectChips(); track chipModel.id) {\n <mat-chip-option\n class=\"noselect\"\n [value]=\"resolveChipValue(chipModel.value)\"\n elderChipLabel\n [levelColor]=\"chipModel.colorSpec?.levelColor\"\n [stateColor]=\"chipModel.colorSpec?.stateColor\"\n [color]=\"chipModel.colorSpec?.themeColor\"\n [selectable]=\"!chipModel.locked\"\n [disabled]=\"chipModel.locked\"\n [selected]=\"chipModel.selected\"\n (selectionChange)=\"selectionChanged($event, chipModel.value)\"\n >\n @if (templates()?.avatar && !chipModel.avatarSpec?.hide) {\n <mat-chip-avatar [class.chip-avatar-xl]=\"chipModel.avatarSpec?.large\">\n <ng-container *ngTemplateOutlet=\"templates().avatar; context: { $implicit: chipModel }\">\n </ng-container>\n </mat-chip-avatar>\n }\n\n <ng-container\n *ngTemplateOutlet=\"\n templates()?.chip || simpleChipTemplate;\n context: { $implicit: chipModel }\n \"\n >\n </ng-container>\n\n @if (chipModel.trailingSpec?.icon) {\n <mat-icon\n matChipTrailingIcon\n class=\"elder-trailing-icon\"\n [fontSet]=\"chipModel.trailingSpec?.iconFontSet\"\n >{{ chipModel.trailingSpec?.icon }}\n </mat-icon>\n }\n </mat-chip-option>\n }\n\n <div class=\"layout-row place-start-center elder-chip-input\">\n @if (selectionPopup) {\n <button\n mat-icon-button\n type=\"button\"\n class=\"elder-control-icon-button elder-browse-icon\"\n [disabled]=\"isLocked\"\n (click)=\"openSelectionPopup($event)\"\n aria-label=\"Search\"\n elderStopEventPropagation\n tabIndex=\"-1\"\n >\n <mat-icon class=\"elder-mdc-control-icon\">search</mat-icon>\n </button>\n }\n </div>\n </mat-chip-listbox>\n</div>\n\n<ng-template #simpleChipTemplate let-chipModel>\n <span class=\"elder-chip-text\">{{ chipModel.displayText | elderTruncate: 20 }}</span>\n</ng-template>\n", styles: [".elder-chip-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.elder-trailing-icon{color:var(--mdc-chip-with-trailing-icon-trailing-icon-color);opacity:.54}\n"] }]
241
+ }], ctorParameters: () => [{ type: i0.DestroyRef }], propDecorators: { defaultChipSpec: [{
251
242
  type: Input
252
243
  }], stacked: [{
253
244
  type: Input
@@ -269,4 +260,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImpor
269
260
  }], chipAvatarTemplate: [{
270
261
  type: Input
271
262
  }] } });
272
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItbXVsdGktc2VsZWN0LWNoaXAtb3B0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC9tdWx0aS9lbGRlci1tdWx0aS1zZWxlY3QtY2hpcC1vcHRpb25zL2VsZGVyLW11bHRpLXNlbGVjdC1jaGlwLW9wdGlvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy9zZWxlY3QvbXVsdGkvZWxkZXItbXVsdGktc2VsZWN0LWNoaXAtb3B0aW9ucy9lbGRlci1tdWx0aS1zZWxlY3QtY2hpcC1vcHRpb25zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFHWixVQUFVLEVBQ1YsS0FBSyxFQUVMLFFBQVEsRUFDUixJQUFJLEVBQ0osV0FBVyxFQUNYLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUNqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFLcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWMsTUFBTSxNQUFNLENBQUE7QUFDakUsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDdkQsT0FBTyxFQUNMLDhCQUE4QixFQUM5Qix3QkFBd0IsR0FDekIsTUFBTSxtQ0FBbUMsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUMzRCxPQUFPLEVB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cnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIERlc3Ryb3lSZWYsXG4gIEVsZW1lbnRSZWYsXG4gIGZvcndhcmRSZWYsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9wdGlvbmFsLFxuICBTZWxmLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgRWxkZXJNdWx0aVNlbGVjdEJhc2UgfSBmcm9tICcuLi9lbGRlci1tdWx0aS1zZWxlY3QtYmFzZSdcbmltcG9ydCB7IExvZ2dlckZhY3RvcnkgfSBmcm9tICdAZWxkZXJieXRlL3RzLWxvZ2dlcidcbmltcG9ydCB7IEZvY3VzTW9uaXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5J1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnXG5pbXBvcnQgeyBFbGRlckRpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9kaWFsb2dzL2VsZGVyLWRpYWxvZy5zZXJ2aWNlJ1xuaW1wb3J0IHsgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IHtcbiAgRWxkZXJTZWxlY3RDaGlwQXZhdGFyRGlyZWN0aXZlLFxuICBFbGRlclNlbGVjdENoaXBEaXJlY3RpdmUsXG59IGZyb20gJy4uLy4uL2VsZGVyLXNlbGVjdC1jaGlwLmRpcmVjdGl2ZSdcbmltcG9ydCB7IEVMREVSX1NFTEVDVF9CQVNFIH0gZnJvbSAnLi4vLi4vZWxkZXItc2VsZWN0LWJhc2UnXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCdcbmltcG9ydCB7IElEYXRhQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uLy4uL2NvbW1vbi9kYXRhL2RhdGEtY29udGV4dC9kYXRhLWNvbnRleHQnXG5pbXBvcnQgeyBTZWxlY3RPcHRpb25DaGlwU3BlYywgU2VsZWN0T3B0aW9uQ2hpcFNwZWNVdGlsIH0gZnJvbSAnLi9zZWxlY3Qtb3B0aW9uLWNoaXAtc3BlYydcbmltcG9ydCB7XG4gIE1hdENoaXBMaXN0Ym94LFxuICBNYXRDaGlwU2VsZWN0aW9uQ2hhbmdlLFxuICBNYXRDaGlwT3B0aW9uLFxuICBNYXRDaGlwQXZhdGFyLFxuICBNYXRDaGlwVHJhaWxpbmdJY29uLFxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGlwcydcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCwgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJ1xuaW1wb3J0IHsgRWxkZXJTZWxlY3RPcHRpb25Db21wb25lbnQgfSBmcm9tICcuLi9lbGRlci1jaGlwLXNlbGVjdC1vcHRpb24vZWxkZXItc2VsZWN0LW9wdGlvbi5jb21wb25lbnQnXG5pbXBvcnQgQ2hpcE9wdGlvbnNQcm92aWRlciwge1xuICBDaGlwT3B0aW9uTW9kZWwsXG4gIE11bHRpU2VsZWN0Q2hpcE9wdGlvbnNDb250ZXh0LFxufSBmcm9tICcuL2NoaXAtb3B0aW9ucy1wcm92aWRlcidcbmltcG9ydCB7IEVsZGVyVHJ1bmNhdGVQaXBlIH0gZnJvbSAnLi4vLi4vLi4vLi4vcGlwZXMvZWxkZXItdHJ1bmNhdGUucGlwZSdcbmltcG9ydCB7IEVsZGVyU3RvcEV2ZW50UHJvcGFnYXRpb25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9mb3Jtcy9kaXJlY3RpdmVzL2VsZGVyLXN0b3AtZXZlbnQtcHJvcGFnYXRpb24uZGlyZWN0aXZlJ1xuaW1wb3J0IHsgTWF0SWNvbkJ1dHRvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbidcbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQsIEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbidcbmltcG9ydCB7IEVsZGVyQ2hpcExhYmVsRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vY2hpcHMvZWxkZXItY2hpcC1sYWJlbC5kaXJlY3RpdmUnXG5pbXBvcnQgeyBNYXRJY29uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbidcbmltcG9ydCB7IE1hdFRvb2x0aXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJ1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnXG5cbmludGVyZmFjZSBUZW1wbGF0ZVdyYXBwZXIge1xuICBjaGlwOiBUZW1wbGF0ZVJlZjxhbnk+XG4gIGF2YXRhcjogVGVtcGxhdGVSZWY8YW55PlxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdlbGRlci1tdWx0aS1zZWxlY3QtY2hpcC1vcHRpb25zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2VsZGVyLW11bHRpLXNlbGVjdC1jaGlwLW9wdGlvbnMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lbGRlci1tdWx0aS1zZWxlY3QtY2hpcC1vcHRpb25zLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7IHByb3ZpZGU6IE1hdEZvcm1GaWVsZENvbnRyb2wsIHVzZUV4aXN0aW5nOiBFbGRlck11bHRpU2VsZWN0Q2hpcE9wdGlvbnNDb21wb25lbnQgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBFTERFUl9TRUxFQ1RfQkFTRSxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEVsZGVyTXVsdGlTZWxlY3RDaGlwT3B0aW9uc0NvbXBvbmVudCksXG4gICAgfSxcbiAgXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE1hdFRvb2x0aXAsXG4gICAgTWF0Q2hpcExpc3Rib3gsXG4gICAgTWF0SWNvbixcbiAgICBNYXRDaGlwT3B0aW9uLFxuICAgIEVsZGVyQ2hpcExhYmVsRGlyZWN0aXZlLFxuICAgIE1hdENoaXBBdmF0YXIsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBNYXRDaGlwVHJhaWxpbmdJY29uLFxuICAgIE1hdEljb25CdXR0b24sXG4gICAgRWxkZXJTdG9wRXZlbnRQcm9wYWdhdGlvbkRpcmVjdGl2ZSxcbiAgICBBc3luY1BpcGUsXG4gICAgRWxkZXJUcnVuY2F0ZVBpcGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEVsZGVyTXVsdGlTZWxlY3RDaGlwT3B0aW9uc0NvbXBvbmVudDxcbiAgVElkID0gYW55LFxuICBURW50aXR5ID0gYW55LFxuICBUVmFsdWUgPSBhbnksXG4+IGV4dGVuZHMgRWxkZXJNdWx0aVNlbGVjdEJhc2U8VElkLCBURW50aXR5LCBUVmFsdWU+IHtcbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2cgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpXG5cbiAgcmVhZG9ubHkgdGVtcGxhdGVzJDogT2JzZXJ2YWJsZTxUZW1wbGF0ZVdyYXBwZXI+XG4gIHByaXZhdGUgcmVhZG9ubHkgY29udGV4dCQ6IE9ic2VydmFibGU8TXVsdGlTZWxlY3RDaGlwT3B0aW9uc0NvbnRleHQ+XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjaGlwVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZW1wbGF0ZVJlZjxhbnk+PihudWxsKVxuICBwcml2YXRlIHJlYWRvbmx5IGNoaXBBdmF0YXJUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRlbXBsYXRlUmVmPGFueT4+KG51bGwpXG5cbiAgcHVibGljIHJlYWRvbmx5IHNlbGVjdENoaXBzJDogT2JzZXJ2YWJsZTxDaGlwT3B0aW9uTW9kZWw8VEVudGl0eT5bXT5cbiAgQElucHV0KClcbiAgcHVibGljIGRlZmF1bHRDaGlwU3BlYzogU2VsZWN0T3B0aW9uQ2hpcFNwZWMgPSBTZWxlY3RPcHRpb25DaGlwU3BlY1V0aWwuRGVmYXVsdENoaXBTcGVjXG5cbiAgcHVibGljIF9jaGlwU3BlY0ZuJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8KGU6IFRFbnRpdHkpID0+IFNlbGVjdE9wdGlvbkNoaXBTcGVjPihcbiAgICAoZSkgPT4gdGhpcy5kZWZhdWx0Q2hpcFNwZWNcbiAgKVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzdGFja2VkID0gZmFsc2VcblxuICBwcml2YXRlIF9tdWx0aXBsZTogYm9vbGVhbiA9IGZhbHNlXG5cbiAgQFZpZXdDaGlsZChNYXRDaGlwTGlzdGJveCkgX2xpc3RCb3g6IE1hdENoaXBMaXN0Ym94XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIENvbnN0cnVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgY29uc3RydWN0b3IoXG4gICAgaG9zdFJlZjogRWxlbWVudFJlZixcbiAgICB6b25lOiBOZ1pvbmUsXG4gICAgZm9jdXNNb25pdG9yOiBGb2N1c01vbml0b3IsXG4gICAgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBkaWFsb2dTZXJ2aWNlOiBFbGRlckRpYWxvZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBkZXN0cm95UmVmOiBEZXN0cm95UmVmLFxuICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgbmdDb250cm9sOiBOZ0NvbnRyb2xcbiAgKSB7XG4gICAgc3VwZXIoXG4gICAgICB6b25lLFxuICAgICAgaG9zdFJlZixcbiAgICAgICdtdWx0aS1zZWxlY3QtY2hpcC1vcHRpb25zJyxcbiAgICAgIGZvY3VzTW9uaXRvcixcbiAgICAgIHRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICBkaWFsb2dTZXJ2aWNlLFxuICAgICAgbmdDb250cm9sXG4gICAgKVxuXG4gICAgdGhpcy5jb250ZXh0JCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5zdGF0ZSQsXG4gICAgICB0aGlzLmRpc3BsYXlQcm9wZXJ0eVJlc29sdmVyJCxcbiAgICAgIHRoaXMucmVhZG9ubHkkLFxuICAgICAgdGhpcy5kaXNhYmxlZCQsXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW3N0YXRlLCBkUFIsIHJlYWRvbmx5LCBkaXNhYmxlZF0pID0+IHtcbiAgICAgICAgcmV0dXJuIDxNdWx0aVNlbGVjdENoaXBPcHRpb25zQ29udGV4dD57XG4gICAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICAgIGRpc3BsYXlQcm9wZXJ0eVJlc29sdmVyOiBkUFIsXG4gICAgICAgICAgcmVhZG9ubHk6IHJlYWRvbmx5LFxuICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApXG5cbiAgICBjb25zdCBvcHRpb25zUHJvdmlkZXIkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmRhdGFDb250ZXh0JCxcbiAgICAgIHRoaXMuZGF0YUNvbnRleHQkLnBpcGUoXG4gICAgICAgIGZpbHRlcigoZGMpID0+ICEhZGMpLFxuICAgICAgICBzd2l0Y2hNYXAoKGRjKSA9PiBkYy5kYXRhKVxuICAgICAgKSxcbiAgICAgIHRoaXMuY2hpcFNwZWNGbiQsXG4gICAgICB0aGlzLnRlbXBsYXRlT3B0aW9ucyQsXG4gICAgXSkucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKFtkYywgZGF0YSwgY2hpcFNwZWNGbiwgdGVtcGxhdGVDaGlwc10pID0+XG4gICAgICAgICAgbmV3IENoaXBPcHRpb25zUHJvdmlkZXI8VElkLCBURW50aXR5PihcbiAgICAgICAgICAgIGRjLmRhdGFTb3VyY2UsXG4gICAgICAgICAgICB0aGlzLmJ1aWxkQXZhaWxhYmxlRW50aXRpZXMoZGF0YSwgdGVtcGxhdGVDaGlwcyksXG4gICAgICAgICAgICBjaGlwU3BlY0ZuXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcblxuICAgIHRoaXMuc2VsZWN0Q2hpcHMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICBvcHRpb25zUHJvdmlkZXIkLFxuICAgICAgdGhpcy5lbnRpdGllcyQsXG4gICAgICB0aGlzLmVudGl0eUlkcyQsXG4gICAgICB0aGlzLnRlbXBsYXRlT3B0aW9ucyQsXG4gICAgICB0aGlzLmNvbnRleHQkLFxuICAgIF0pLnBpcGUoXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSxcbiAgICAgIG1hcCgoW29wdGlvbnNQcm92aWRlciwgZW50aXRpZXMsIGVudGl0eUlkcywgdGVtcGxhdGVTZWxlY3RDaGlwcywgY29udGV4dF0pID0+XG4gICAgICAgIHRoaXMuYnVpbGRDaGlwTW9kZWxzKFxuICAgICAgICAgIG9wdGlvbnNQcm92aWRlcixcbiAgICAgICAgICBlbnRpdGllcyxcbiAgICAgICAgICBlbnRpdHlJZHMsXG4gICAgICAgICAgdGhpcy5idWlsZEVudGl0aWVzTGFiZWxNYXAodGVtcGxhdGVTZWxlY3RDaGlwcyksXG4gICAgICAgICAgY29udGV4dFxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuXG4gICAgdGhpcy50ZW1wbGF0ZXMkID0gY29tYmluZUxhdGVzdChbdGhpcy5jaGlwVGVtcGxhdGUkLCB0aGlzLmNoaXBBdmF0YXJUZW1wbGF0ZSRdKS5waXBlKFxuICAgICAgbWFwKChbY2hpcCwgYXZhdGFyXSkgPT4ge1xuICAgICAgICByZXR1cm4gPFRlbXBsYXRlV3JhcHBlcj57XG4gICAgICAgICAgY2hpcCxcbiAgICAgICAgICBhdmF0YXIsXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByb3BlcnRpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtdWx0aXBsZSh2YWw6IEJvb2xlYW5JbnB1dCkge1xuICAgIHRoaXMuX211bHRpcGxlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbClcbiAgICBpZiAoIXRoaXMuX211bHRpcGxlICYmIHRoaXMuZW50aXRpZXMubGVuZ3RoID4gMSkge1xuICAgICAgdGhpcy5zZWxlY3RFbnRpdHkodGhpcy5lbnRpdGllc1t0aGlzLmVudGl0aWVzLmxlbmd0aCAtIDFdKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvd3MgdG8gY3VzdG9taXplIGVhY2ggY2hpcCBpbmRpdmlkdWFsbHkgKENvbG9yLCBSZW1vdmFibGUsIEF2YXRhcikuXG4gICAqXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGNoaXBTcGVjRm4oZm46IChlOiBURW50aXR5KSA9PiBTZWxlY3RPcHRpb25DaGlwU3BlYykge1xuICAgIHRoaXMuX2NoaXBTcGVjRm4kLm5leHQoZm4pXG4gIH1cblxuICBwdWJsaWMgZ2V0IGNoaXBTcGVjRm4kKCk6IE9ic2VydmFibGU8KGU6IFRFbnRpdHkpID0+IFNlbGVjdE9wdGlvbkNoaXBTcGVjPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NoaXBTcGVjRm4kLmFzT2JzZXJ2YWJsZSgpXG4gIH1cblxuICBwdWJsaWMgZ2V0IG11bHRpcGxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9tdWx0aXBsZVxuICB9XG5cbiAgQENvbnRlbnRDaGlsZChFbGRlclNlbGVjdENoaXBEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogZmFsc2UgfSlcbiAgcHVibGljIHNldCBjaGlwVGVtcGxhdGVRdWVyeSh0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pikge1xuICAgIHRoaXMuY2hpcFRlbXBsYXRlID0gdGVtcGxhdGVcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgY2hpcFRlbXBsYXRlKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgdGhpcy5jaGlwVGVtcGxhdGUkLm5leHQodGVtcGxhdGUpXG4gIH1cblxuICBwdWJsaWMgZ2V0IGNoaXBUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5jaGlwVGVtcGxhdGUkLmdldFZhbHVlKClcbiAgfVxuXG4gIEBDb250ZW50Q2hpbGQoRWxkZXJTZWxlY3RDaGlwQXZhdGFyRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IGZhbHNlIH0pXG4gIHB1YmxpYyBzZXQgY2hpcEF2YXRhclRlbXBsYXRlUXVlcnkodGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICB0aGlzLmNoaXBBdmF0YXJUZW1wbGF0ZSA9IHRlbXBsYXRlXG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGNoaXBBdmF0YXJUZW1wbGF0ZSh0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pikge1xuICAgIHRoaXMuY2hpcEF2YXRhclRlbXBsYXRlJC5uZXh0KHRlbXBsYXRlKVxuICB9XG5cbiAgcHVibGljIGdldCBjaGlwQXZhdGFyVGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuY2hpcEF2YXRhclRlbXBsYXRlJC5nZXRWYWx1ZSgpXG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHNob3VsZExhYmVsRmxvYXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQdWJsaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBzZWxlY3Rpb25DaGFuZ2VkKGNoYW5nZUV2ZW50OiBNYXRDaGlwU2VsZWN0aW9uQ2hhbmdlLCBlbnRpdHk6IFRFbnRpdHkpOiB2b2lkIHtcbiAgICAvKiovXG4gICAgdGhpcy5sb2cuZGVidWcoJ3NlbGVjdGlvbkNoYW5nZWQnLCB7XG4gICAgICBjaGFuZ2VFdmVudDogY2hhbmdlRXZlbnQsXG4gICAgICBlbnRpdHk6IGVudGl0eSxcbiAgICB9KVxuXG4gICAgaWYgKGNoYW5nZUV2ZW50LmlzVXNlcklucHV0KSB7XG4gICAgICBpZiAoY2hhbmdlRXZlbnQuc2VsZWN0ZWQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RFbnRpdHkoZW50aXR5KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW1vdmVFbnRpdHkoZW50aXR5KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZXNvbHZlQ2hpcFZhbHVlKGUxOiBURW50aXR5KTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRFbnRpdHlJZChlMSlcbiAgfVxuXG4gIHB1YmxpYyBmb2N1cyhvcHRpb25zPzogRm9jdXNPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2xpc3RCb3gpIHtcbiAgICAgIHRoaXMuX2xpc3RCb3guZm9jdXMoKVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBibHVyKCk6IHZvaWQge1xuICAgIHRoaXMubG9nLndhcm4oJ2JsdXIoKSBub3QgeWV0IHN1cHBvcnRlZCEnKVxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByb3RlY3RlZCBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIEF1dG9tYXRpY2FsbHkgc3RhcnQgREMgaWYgbm90IHlldCBzdGFydGVkXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBvbkRhdGFDb250ZXh0Q2hhbmdlZChkYXRhOiBJRGF0YUNvbnRleHQ8VEVudGl0eT4pOiB2b2lkIHtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKCFkYXRhLmlzU3RhcnRlZCkge1xuICAgICAgICBkYXRhLnN0YXJ0KHRoaXMuc29ydHMsIHRoaXMuZmlsdGVycykuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgICBzdXBlci5vbkRhdGFDb250ZXh0Q2hhbmdlZChkYXRhKVxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdXBlci5vbkRhdGFDb250ZXh0Q2hhbmdlZChkYXRhKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcml2YXRlIG1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgc2VsZWN0RW50aXR5KGVudGl0eTogVEVudGl0eSk6IHZvaWQge1xuICAgIGNvbnN0IGlkVG9TZWxlY3QgPSB0aGlzLmdldEVudGl0eUlkKGVudGl0eSlcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMucmVtb3ZlRW50aXRpZXModGhpcy5lbnRpdGllcy5maWx0ZXIoKGUpID0+IHRoaXMuZ2V0RW50aXR5SWQoZSkgIT09IGlkVG9TZWxlY3QpKVxuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNFbnRpdHlJZFNlbGVjdGVkKGlkVG9TZWxlY3QpKSB7XG4gICAgICB0aGlzLmFwcGVuZEVudGl0eShlbnRpdHkpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc0VudGl0eUlkU2VsZWN0ZWQoZW50aXR5SWQ6IFRJZCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVudGl0aWVzLnNvbWUoKGUpID0+IHRoaXMuZ2V0RW50aXR5SWQoZSkgPT0gZW50aXR5SWQpXG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQ2hpcE1vZGVscyhcbiAgICBvcHRpb25zUHJvdmlkZXI6IENoaXBPcHRpb25zUHJvdmlkZXI8VElkLCBURW50aXR5PixcbiAgICBlbnRpdGllczogVEVudGl0eVtdLFxuICAgIGVudGl0eUlkczogVElkW10sXG4gICAgZW50aXRpZXNMYWJlbHM6IE1hcDxhbnksIHN0cmluZz4sXG4gICAgY29udGV4dDogTXVsdGlTZWxlY3RDaGlwT3B0aW9uc0NvbnRleHRcbiAgKTogQ2hpcE9wdGlvbk1vZGVsPFRFbnRpdHk+W10ge1xuICAgIHJldHVybiBvcHRpb25zUHJvdmlkZXIuYnVpbGRDaGlwTW9kZWxzT3JGYWxsYmFjayhlbnRpdGllcywgZW50aXR5SWRzLCB7XG4gICAgICBjb250ZXh0OiBjb250ZXh0LFxuICAgICAgaXNMb2NrZWQ6IHRoaXMuaXNMb2NrZWQsXG4gICAgICBlbnRpdHlMYWJlbE1hcDogZW50aXRpZXNMYWJlbHMsXG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRBdmFpbGFibGVFbnRpdGllcyhcbiAgICBkYXRhOiBURW50aXR5W10sXG4gICAgdGVtcGxhdGVDaGlwczogRWxkZXJTZWxlY3RPcHRpb25Db21wb25lbnQ8VEVudGl0eT5bXVxuICApOiBURW50aXR5W10ge1xuICAgIHJldHVybiBbLi4udGhpcy5leHRyYWN0RW50aXRpZXNGcm9tVGVtcGxhdGVDaGlwcyh0ZW1wbGF0ZUNoaXBzKSwgLi4uZGF0YV1cbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdEVudGl0aWVzRnJvbVRlbXBsYXRlQ2hpcHMoXG4gICAgdGVtcGxhdGVDaGlwczogRWxkZXJTZWxlY3RPcHRpb25Db21wb25lbnQ8VEVudGl0eT5bXVxuICApOiBURW50aXR5W10ge1xuICAgIHJldHVybiB0ZW1wbGF0ZUNoaXBzLm1hcCgoY2hpcCkgPT4gY2hpcC52YWx1ZSlcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRFbnRpdGllc0xhYmVsTWFwKFxuICAgIHRlbXBsYXRlQ2hpcHM6IEVsZGVyU2VsZWN0T3B0aW9uQ29tcG9uZW50PFRFbnRpdHk+W11cbiAgKTogTWFwPFRFbnRpdHksIHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgTWFwKFxuICAgICAgdGVtcGxhdGVDaGlwc1xuICAgICAgICAuZmlsdGVyKChjaGlwKSA9PiBjaGlwLmxhYmVsICE9IHVuZGVmaW5lZClcbiAgICAgICAgLm1hcCgoY2hpcCkgPT4gW2NoaXAudmFsdWUsIGNoaXAubGFiZWxdKVxuICAgIClcbiAgfVxufVxuIiwiQGlmIChzZWxlY3RDaGlwcyQgfCBhc3luYzsgYXMgc2VsZWN0Q2hpcHMpIHtcbiAgPGRpdiBjbGFzcz1cImVsZGVyLWZsZXgtY29udHJvbFwiIFttYXRUb29sdGlwXT1cIihzdGF0ZSQgfCBhc3luYyk/LmVycm9yXCI+XG4gICAgPG1hdC1jaGlwLWxpc3Rib3ggI2NoaXBzIFtjbGFzcy5tYXQtbWRjLWNoaXAtc2V0LXN0YWNrZWRdPVwic3RhY2tlZFwiIFttdWx0aXBsZV09XCJtdWx0aXBsZVwiPlxuICAgICAgQGlmIChzdGF0ZSQgfCBhc3luYzsgYXMgc3RhdGUpIHtcbiAgICAgICAgQGlmIChpY29uKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImVsZGVyLWlucHV0LXByZWZpeC1pY29uLWNvbnRhaW5lciBmbGV4LW5vbmVcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvblxuICAgICAgICAgICAgICBkaXNhYmxlZFxuICAgICAgICAgICAgICBjbGFzcz1cImVsZGVyLXByZWZpeC1pY29uIGVsZGVyLW1kYy1jb250cm9sLWljb24gZWxkZXItaWNvbi1zbWFsbCBub3NlbGVjdFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5sb2FkaW5nXT1cInN0YXRlLmxvYWRpbmdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBpY29uIH19XG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIEBpZiAodGVtcGxhdGVzJCB8IGFzeW5jOyBhcyB0ZW1wbGF0ZXMpIHtcbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXG4gICAgICAgIEBmb3IgKGNoaXBNb2RlbCBvZiBzZWxlY3RDaGlwczsgdHJhY2sgY2hpcE1vZGVsLnZhbHVlKSB7XG4gICAgICAgICAgPG1hdC1jaGlwLW9wdGlvblxuICAgICAgICAgICAgY2xhc3M9XCJub3NlbGVjdFwiXG4gICAgICAgICAgICBbdmFsdWVdPVwicmVzb2x2ZUNoaXBWYWx1ZShjaGlwTW9kZWwudmFsdWUpXCJcbiAgICAgICAgICAgIGVsZGVyQ2hpcExhYmVsXG4gICAgICAgICAgICBbbGV2ZWxDb2xvcl09XCJjaGlwTW9kZWwuY29sb3JTcGVjPy5sZXZlbENvbG9yXCJcbiAgICAgICAgICAgIFtzdGF0ZUNvbG9yXT1cImNoaXBNb2RlbC5jb2xvclNwZWM/LnN0YXRlQ29sb3JcIlxuICAgICAgICAgICAgW2NvbG9yXT1cImNoaXBNb2RlbC5jb2xvclNwZWM/LnRoZW1lQ29sb3JcIlxuICAgICAgICAgICAgW3NlbGVjdGFibGVdPVwiIWNoaXBNb2RlbC5sb2NrZWRcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNoaXBNb2RlbC5sb2NrZWRcIlxuICAgICAgICAgICAgW3NlbGVjdGVkXT1cImNoaXBNb2RlbC5zZWxlY3RlZFwiXG4gICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cInNlbGVjdGlvbkNoYW5nZWQoJGV2ZW50LCBjaGlwTW9kZWwudmFsdWUpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKHRlbXBsYXRlcy5hdmF0YXIgJiYgIWNoaXBNb2RlbC5hdmF0YXJTcGVjPy5oaWRlKSB7XG4gICAgICAgICAgICAgIDxtYXQtY2hpcC1hdmF0YXIgW2NsYXNzLmNoaXAtYXZhdGFyLXhsXT1cImNoaXBNb2RlbC5hdmF0YXJTcGVjPy5sYXJnZVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVzLmF2YXRhcjsgY29udGV4dDogeyAkaW1wbGljaXQ6IGNoaXBNb2RlbCB9XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbWF0LWNoaXAtYXZhdGFyPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVzLmNoaXAgfHwgc2ltcGxlQ2hpcFRlbXBsYXRlO1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjaGlwTW9kZWwgfVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIEBpZiAoY2hpcE1vZGVsLnRyYWlsaW5nU3BlYz8uaWNvbikge1xuICAgICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgICBtYXRDaGlwVHJhaWxpbmdJY29uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJlbGRlci10cmFpbGluZy1pY29uXCJcbiAgICAgICAgICAgICAgICBbZm9udFNldF09XCJjaGlwTW9kZWwudHJhaWxpbmdTcGVjPy5pY29uRm9udFNldFwiXG4gICAgICAgICAgICAgICAgPnt7IGNoaXBNb2RlbC50cmFpbGluZ1NwZWM/Lmljb24gfX1cbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L21hdC1jaGlwLW9wdGlvbj5cbiAgICAgICAgfVxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsYXlvdXQtcm93IHBsYWNlLXN0YXJ0LWNlbnRlciBlbGRlci1jaGlwLWlucHV0XCI+XG4gICAgICAgICAgQGlmIChzZWxlY3Rpb25Qb3B1cCkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWxkZXItY29udHJvbC1pY29uLWJ1dHRvbiBlbGRlci1icm93c2UtaWNvblwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0xvY2tlZFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvcGVuU2VsZWN0aW9uUG9wdXAoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTZWFyY2hcIlxuICAgICAgICAgICAgICBlbGRlclN0b3BFdmVudFByb3BhZ2F0aW9uXG4gICAgICAgICAgICAgIHRhYkluZGV4PVwiLTFcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJlbGRlci1tZGMtY29udHJvbC1pY29uXCI+c2VhcmNoPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICA8L2Rpdj5cbn1cblxuPG5nLXRlbXBsYXRlICNzaW1wbGVDaGlwVGVtcGxhdGUgbGV0LWNoaXBNb2RlbD5cbiAgPHNwYW4gY2xhc3M9XCJlbGRlci1jaGlwLXRleHRcIj57eyBjaGlwTW9kZWwuZGlzcGxheVRleHQgfCBlbGRlclRydW5jYXRlOiAyMCB9fTwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
263
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItbXVsdGktc2VsZWN0LWNoaXAtb3B0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC9tdWx0aS9lbGRlci1tdWx0aS1zZWxlY3QtY2hpcC1vcHRpb25zL2VsZGVyLW11bHRpLXNlbGVjdC1jaGlwLW9wdGlvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy9zZWxlY3QvbXVsdGkvZWxkZXItbXVsdGktc2VsZWN0LWNoaXAtb3B0aW9ucy9lbGRlci1tdWx0aS1zZWxlY3QtY2hpcC1vcHRpb25zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFHWixVQUFVLEVBQ1YsS0FBSyxFQUtMLFdBQVcsRUFDWCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBS3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFjLE1BQU0sTUFBTSxDQUFBO0FBQ2pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ3ZELE9BQU8sRUFDTCw4QkFBOEIsRUFDOUIsd0JBQXdCLEdBQ3pCLE1BQU0sbUNBQW1DLENBQUE7QUFDMUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUE7QUFFbEUsT0FBTyxFQUF3Qix3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQzFGLE9BQU8sRUFDTCxjQUFjLEVBRWQsYUFBYSxFQUNiLGFBQWEsRUFDYixtQkFBbUIsR0FDcEIsTUFBTSx5QkFBeUIsQ0FBQTtBQUNoQyxPQUFPLEVBQWdCLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFFM0UsT0FBTyxtQkFHTixNQUFNLHlCQUF5QixDQUFBO0FBQ2hDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFBO0FBQ3pFLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLGtFQUFrRSxDQUFBO0FBQ3JILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQWEsTUFBTSxpQkFBaUIsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQTtBQUNuRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUE7O0FBa0N2RixNQUFNLE9BQU8sb0NBSVgsU0FBUSxvQkFBMEM7SUE4QmxEOzs7O2dGQUk0RTtJQUU1RSxZQUFvQixVQUFzQjtRQUN4QyxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQTtRQURoQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBbkMxQzs7OztvRkFJNEU7UUFFM0QsUUFBRyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUtwRCxrQkFBYSxHQUFHLElBQUksZUFBZSxDQUFtQixJQUFJLENBQUMsQ0FBQTtRQUMzRCx3QkFBbUIsR0FBRyxJQUFJLGVBQWUsQ0FBbUIsSUFBSSxDQUFDLENBQUE7UUFJM0Usb0JBQWUsR0FBeUIsd0JBQXdCLENBQUMsZUFBZSxDQUFBO1FBRWhGLGlCQUFZLEdBQUcsSUFBSSxlQUFlLENBQ3ZDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUM1QixDQUFBO1FBR00sWUFBTyxHQUFHLEtBQUssQ0FBQTtRQUVkLGNBQVMsR0FBWSxLQUFLLENBQUE7UUFhaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUM7WUFDNUIsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDeEIsWUFBWSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztZQUMzQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUM1QixZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztTQUM3QixDQUFDLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRTtZQUN2QyxPQUFzQztnQkFDcEMsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osdUJBQXVCLEVBQUUsR0FBRztnQkFDNUIsUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLFFBQVEsRUFBRSxRQUFRO2FBQ25CLENBQUE7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFBO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxhQUFhLENBQUM7WUFDckMsSUFBSSxDQUFDLFlBQVk7WUFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQ3BCLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUNwQixTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FDM0I7WUFDRCxJQUFJLENBQUMsV0FBVztZQUNoQixJQUFJLENBQUMsZ0JBQWdCO1NBQ3RCLENBQUMsQ0FBQyxJQUFJLENBQ0wsR0FBRyxDQUNELENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxhQUFhLENBQUMsRUFBRSxFQUFFLENBQ3hDLElBQUksbUJBQW1CLENBQ3JCLEVBQUUsQ0FBQyxVQUFVLEVBQ2IsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsRUFDaEQsVUFBVSxDQUNYLENBQ0osQ0FDRixDQUFBO1FBRUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQ3pCLGFBQWEsQ0FBQztZQUNaLGdCQUFnQjtZQUNoQixJQUFJLENBQUMsU0FBUztZQUNkLElBQUksQ0FBQyxVQUFVO1lBQ2YsSUFBSSxDQUFDLGdCQUFnQjtZQUNyQixJQUFJLENBQUMsUUFBUTtTQUNkLENBQUMsQ0FBQyxJQUFJLENBQ0wsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUNuQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FDM0UsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsZUFBZSxFQUNmLFFBQVEsRUFDUixTQUFTLEVBQ1QsSUFBSSxDQUFDLHFCQUFxQixDQUFDLG1CQUFtQixDQUFDLEVBQy9DLE9BQU8sQ0FDUixDQUNGLENBQ0YsQ0FDRixDQUFBO1FBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQ3ZCLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ2hFLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUU7WUFDckIsT0FBd0I7Z0JBQ3RCLElBQUk7Z0JBQ0osTUFBTTthQUNQLENBQUE7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUNGLENBQUE7SUFDSCxDQUFDO0lBRUQ7Ozs7Z0ZBSTRFO0lBRTVFLElBQ1csUUFBUSxDQUFDLEdBQWlCO1FBQ25DLElBQUksQ0FBQyxTQUFTLEdBQUcscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDM0MsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDNUQsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUNXLFVBQVUsQ0FBQyxFQUF3QztRQUM1RCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUM1QixDQUFDO0lBRUQsSUFBVyxXQUFXO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQTtJQUN6QyxDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQTtJQUN2QixDQUFDO0lBRUQsSUFDVyxpQkFBaUIsQ0FBQyxRQUEwQjtRQUNyRCxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQTtJQUM5QixDQUFDO0lBRUQsSUFDVyxZQUFZLENBQUMsUUFBMEI7UUFDaEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDbkMsQ0FBQztJQUVELElBQVcsWUFBWTtRQUNyQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUE7SUFDdEMsQ0FBQztJQUVELElBQ1csdUJBQXVCLENBQUMsUUFBMEI7UUFDM0QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFFBQVEsQ0FBQTtJQUNwQyxDQUFDO0lBRUQsSUFDVyxrQkFBa0IsQ0FBQyxRQUEwQjtRQUN0RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ3pDLENBQUM7SUFFRCxJQUFXLGtCQUFrQjtRQUMzQixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUM1QyxDQUFDO0lBRUQsSUFBb0IsZ0JBQWdCO1FBQ2xDLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVEOzs7O2dGQUk0RTtJQUVyRSxnQkFBZ0IsQ0FBQyxXQUFtQyxFQUFFLE1BQWU7UUFDMUUsSUFBSTtRQUNKLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFO1lBQ2pDLFdBQVcsRUFBRSxXQUFXO1lBQ3hCLE1BQU0sRUFBRSxNQUFNO1NBQ2YsQ0FBQyxDQUFBO1FBRUYsSUFBSSxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDNUIsSUFBSSxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDM0IsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDM0IsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsRUFBVztRQUNqQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDN0IsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFzQjtRQUNqQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0lBRU0sSUFBSTtRQUNULElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUE7SUFDNUMsQ0FBQztJQUVEOzs7O2dGQUk0RTtJQUU1RTs7OztPQUlHO0lBQ08sb0JBQW9CLENBQUMsSUFBMkI7UUFDeEQsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDO29CQUM3QyxJQUFJLEVBQUUsR0FBRyxFQUFFO3dCQUNULEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQTtvQkFDbEMsQ0FBQztpQkFDRixDQUFDLENBQUE7WUFDSixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sS0FBSyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ2xDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O2dGQUk0RTtJQUVwRSxZQUFZLENBQUMsTUFBZTtRQUNsQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFBO1FBQ3RGLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVPLGtCQUFrQixDQUFDLFFBQWE7UUFDdEMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQTtJQUNwRSxDQUFDO0lBRU8sZUFBZSxDQUNyQixlQUFrRCxFQUNsRCxRQUFtQixFQUNuQixTQUFnQixFQUNoQixjQUFnQyxFQUNoQyxPQUFzQztRQUV0QyxPQUFPLGVBQWUsQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFO1lBQ3BFLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixjQUFjLEVBQUUsY0FBYztTQUMvQixDQUFDLENBQUE7SUFDSixDQUFDO0lBRU8sc0JBQXNCLENBQzVCLElBQWUsRUFDZixhQUFvRDtRQUVwRCxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQTtJQUMzRSxDQUFDO0lBRU8sZ0NBQWdDLENBQ3RDLGFBQW9EO1FBRXBELE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2hELENBQUM7SUFFTyxxQkFBcUIsQ0FDM0IsYUFBb0Q7UUFFcEQsT0FBTyxJQUFJLEdBQUcsQ0FDWixhQUFhO2FBQ1YsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQzthQUMxQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDM0MsQ0FBQTtJQUNILENBQUM7K0dBbFNVLG9DQUFvQzttR0FBcEMsb0NBQW9DLDBRQXRCcEM7WUFDVCxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsb0NBQW9DLEVBQUU7WUFDbkY7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxvQ0FBb0MsQ0FBQzthQUNwRTtTQUNGLHlFQThKYSx3QkFBd0IsMkJBQVUsV0FBVyx1RUFjN0MsOEJBQThCLDJCQUFVLFdBQVcsdUVBNUh0RCxjQUFjLHVFQ3JIM0IsaXNGQStFQSxxT0RQSSxVQUFVLGlSQUNWLGNBQWMsOE1BQ2QsT0FBTywySUFDUCxhQUFhLGlNQUNiLHVCQUF1QiwwSEFDdkIsYUFBYSw2RUFDYixnQkFBZ0Isb0pBQ2hCLG1CQUFtQiwwRkFDbkIsYUFBYSw2RkFDYixrQ0FBa0MsbUVBQ2xDLGlCQUFpQjs7NEZBR1Isb0NBQW9DO2tCQTNCaEQsU0FBUzsrQkFDRSxpQ0FBaUMsbUJBRzFCLHVCQUF1QixDQUFDLE1BQU0sYUFDcEM7d0JBQ1QsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxzQ0FBc0MsRUFBRTt3QkFDbkY7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUscUNBQXFDLENBQUM7eUJBQ3BFO3FCQUNGLGNBQ1csSUFBSSxXQUNQO3dCQUNQLFVBQVU7d0JBQ1YsY0FBYzt3QkFDZCxPQUFPO3dCQUNQLGFBQWE7d0JBQ2IsdUJBQXVCO3dCQUN2QixhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsbUJBQW1CO3dCQUNuQixhQUFhO3dCQUNiLGtDQUFrQzt3QkFDbEMsaUJBQWlCO3FCQUNsQjsrRUF1Qk0sZUFBZTtzQkFEckIsS0FBSztnQkFRQyxPQUFPO3NCQURiLEtBQUs7Z0JBS3FCLFFBQVE7c0JBQWxDLFNBQVM7dUJBQUMsY0FBYztnQkFzRmQsUUFBUTtzQkFEbEIsS0FBSztnQkFhSyxVQUFVO3NCQURwQixLQUFLO2dCQWNLLGlCQUFpQjtzQkFEM0IsWUFBWTt1QkFBQyx3QkFBd0IsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFNakUsWUFBWTtzQkFEdEIsS0FBSztnQkFVSyx1QkFBdUI7c0JBRGpDLFlBQVk7dUJBQUMsOEJBQThCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBTXZFLGtCQUFrQjtzQkFENUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRGVzdHJveVJlZixcbiAgRWxlbWVudFJlZixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT3B0aW9uYWwsXG4gIFNlbGYsXG4gIFNpZ25hbCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEVsZGVyTXVsdGlTZWxlY3RCYXNlIH0gZnJvbSAnLi4vZWxkZXItbXVsdGktc2VsZWN0LWJhc2UnXG5pbXBvcnQgeyBMb2dnZXJGYWN0b3J5IH0gZnJvbSAnQGVsZGVyYnl0ZS90cy1sb2dnZXInXG5pbXBvcnQgeyBGb2N1c01vbml0b3IgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSdcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJ1xuaW1wb3J0IHsgRWxkZXJEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vZGlhbG9ncy9lbGRlci1kaWFsb2cuc2VydmljZSdcbmltcG9ydCB7IE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJ1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcbmltcG9ydCB7XG4gIEVsZGVyU2VsZWN0Q2hpcEF2YXRhckRpcmVjdGl2ZSxcbiAgRWxkZXJTZWxlY3RDaGlwRGlyZWN0aXZlLFxufSBmcm9tICcuLi8uLi9lbGRlci1zZWxlY3QtY2hpcC5kaXJlY3RpdmUnXG5pbXBvcnQgeyBFTERFUl9TRUxFQ1RfQkFTRSB9IGZyb20gJy4uLy4uL2VsZGVyLXNlbGVjdC1iYXNlJ1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnXG5pbXBvcnQgeyBJRGF0YUNvbnRleHQgfSBmcm9tICcuLi8uLi8uLi8uLi9jb21tb24vZGF0YS9kYXRhLWNvbnRleHQvZGF0YS1jb250ZXh0J1xuaW1wb3J0IHsgU2VsZWN0T3B0aW9uQ2hpcFNwZWMsIFNlbGVjdE9wdGlvbkNoaXBTcGVjVXRpbCB9IGZyb20gJy4vc2VsZWN0LW9wdGlvbi1jaGlwLXNwZWMnXG5pbXBvcnQge1xuICBNYXRDaGlwTGlzdGJveCxcbiAgTWF0Q2hpcFNlbGVjdGlvbkNoYW5nZSxcbiAgTWF0Q2hpcE9wdGlvbixcbiAgTWF0Q2hpcEF2YXRhcixcbiAgTWF0Q2hpcFRyYWlsaW5nSWNvbixcbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hpcHMnXG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbidcbmltcG9ydCB7IEVsZGVyU2VsZWN0T3B0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vZWxkZXItY2hpcC1zZWxlY3Qtb3B0aW9uL2VsZGVyLXNlbGVjdC1vcHRpb24uY29tcG9uZW50J1xuaW1wb3J0IENoaXBPcHRpb25zUHJvdmlkZXIsIHtcbiAgQ2hpcE9wdGlvbk1vZGVsLFxuICBNdWx0aVNlbGVjdENoaXBPcHRpb25zQ29udGV4dCxcbn0gZnJvbSAnLi9jaGlwLW9wdGlvbnMtcHJvdmlkZXInXG5pbXBvcnQgeyBFbGRlclRydW5jYXRlUGlwZSB9IGZyb20gJy4uLy4uLy4uLy4uL3BpcGVzL2VsZGVyLXRydW5jYXRlLnBpcGUnXG5pbXBvcnQgeyBFbGRlclN0b3BFdmVudFByb3BhZ2F0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZm9ybXMvZGlyZWN0aXZlcy9lbGRlci1zdG9wLWV2ZW50LXByb3BhZ2F0aW9uLmRpcmVjdGl2ZSdcbmltcG9ydCB7IE1hdEljb25CdXR0b24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nXG5pbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0LCBBc3luY1BpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nXG5pbXBvcnQgeyBFbGRlckNoaXBMYWJlbERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2NoaXBzL2VsZGVyLWNoaXAtbGFiZWwuZGlyZWN0aXZlJ1xuaW1wb3J0IHsgTWF0SWNvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nXG5pbXBvcnQgeyBNYXRUb29sdGlwIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCdcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJ1xuXG5pbnRlcmZhY2UgVGVtcGxhdGVXcmFwcGVyIHtcbiAgY2hpcDogVGVtcGxhdGVSZWY8YW55PlxuICBhdmF0YXI6IFRlbXBsYXRlUmVmPGFueT5cbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZWxkZXItbXVsdGktc2VsZWN0LWNoaXAtb3B0aW9ucycsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbGRlci1tdWx0aS1zZWxlY3QtY2hpcC1vcHRpb25zLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZWxkZXItbXVsdGktc2VsZWN0LWNoaXAtb3B0aW9ucy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbXG4gICAgeyBwcm92aWRlOiBNYXRGb3JtRmllbGRDb250cm9sLCB1c2VFeGlzdGluZzogRWxkZXJNdWx0aVNlbGVjdENoaXBPcHRpb25zQ29tcG9uZW50IH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogRUxERVJfU0VMRUNUX0JBU0UsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBFbGRlck11bHRpU2VsZWN0Q2hpcE9wdGlvbnNDb21wb25lbnQpLFxuICAgIH0sXG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBNYXRUb29sdGlwLFxuICAgIE1hdENoaXBMaXN0Ym94LFxuICAgIE1hdEljb24sXG4gICAgTWF0Q2hpcE9wdGlvbixcbiAgICBFbGRlckNoaXBMYWJlbERpcmVjdGl2ZSxcbiAgICBNYXRDaGlwQXZhdGFyLFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgTWF0Q2hpcFRyYWlsaW5nSWNvbixcbiAgICBNYXRJY29uQnV0dG9uLFxuICAgIEVsZGVyU3RvcEV2ZW50UHJvcGFnYXRpb25EaXJlY3RpdmUsXG4gICAgRWxkZXJUcnVuY2F0ZVBpcGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEVsZGVyTXVsdGlTZWxlY3RDaGlwT3B0aW9uc0NvbXBvbmVudDxcbiAgVElkID0gYW55LFxuICBURW50aXR5ID0gYW55LFxuICBUVmFsdWUgPSBhbnksXG4+IGV4dGVuZHMgRWxkZXJNdWx0aVNlbGVjdEJhc2U8VElkLCBURW50aXR5LCBUVmFsdWU+IHtcbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2cgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpXG5cbiAgcmVhZG9ubHkgdGVtcGxhdGVzOiBTaWduYWw8VGVtcGxhdGVXcmFwcGVyPlxuICBwcml2YXRlIHJlYWRvbmx5IGNvbnRleHQkOiBPYnNlcnZhYmxlPE11bHRpU2VsZWN0Q2hpcE9wdGlvbnNDb250ZXh0PlxuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2hpcFRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGVtcGxhdGVSZWY8YW55Pj4obnVsbClcbiAgcHJpdmF0ZSByZWFkb25seSBjaGlwQXZhdGFyVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZW1wbGF0ZVJlZjxhbnk+PihudWxsKVxuXG4gIHB1YmxpYyByZWFkb25seSBzZWxlY3RDaGlwczogU2lnbmFsPENoaXBPcHRpb25Nb2RlbDxURW50aXR5PltdPlxuICBASW5wdXQoKVxuICBwdWJsaWMgZGVmYXVsdENoaXBTcGVjOiBTZWxlY3RPcHRpb25DaGlwU3BlYyA9IFNlbGVjdE9wdGlvbkNoaXBTcGVjVXRpbC5EZWZhdWx0Q2hpcFNwZWNcblxuICBwdWJsaWMgX2NoaXBTcGVjRm4kID0gbmV3IEJlaGF2aW9yU3ViamVjdDwoZTogVEVudGl0eSkgPT4gU2VsZWN0T3B0aW9uQ2hpcFNwZWM+KFxuICAgIChlKSA9PiB0aGlzLmRlZmF1bHRDaGlwU3BlY1xuICApXG5cbiAgQElucHV0KClcbiAgcHVibGljIHN0YWNrZWQgPSBmYWxzZVxuXG4gIHByaXZhdGUgX211bHRpcGxlOiBib29sZWFuID0gZmFsc2VcblxuICBAVmlld0NoaWxkKE1hdENoaXBMaXN0Ym94KSBfbGlzdEJveDogTWF0Q2hpcExpc3Rib3hcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQ29uc3RydWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRlc3Ryb3lSZWY6IERlc3Ryb3lSZWYpIHtcbiAgICBzdXBlcignbXVsdGktc2VsZWN0LWNoaXAtb3B0aW9ucycpXG5cbiAgICB0aGlzLmNvbnRleHQkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0b09ic2VydmFibGUodGhpcy5zdGF0ZSksXG4gICAgICB0b09ic2VydmFibGUodGhpcy5kaXNwbGF5UHJvcGVydHlSZXNvbHZlclMpLFxuICAgICAgdG9PYnNlcnZhYmxlKHRoaXMucmVhZG9ubHlTKSxcbiAgICAgIHRvT2JzZXJ2YWJsZSh0aGlzLmRpc2FibGVkUyksXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW3N0YXRlLCBkUFIsIHJlYWRvbmx5LCBkaXNhYmxlZF0pID0+IHtcbiAgICAgICAgcmV0dXJuIDxNdWx0aVNlbGVjdENoaXBPcHRpb25zQ29udGV4dD57XG4gICAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICAgIGRpc3BsYXlQcm9wZXJ0eVJlc29sdmVyOiBkUFIsXG4gICAgICAgICAgcmVhZG9ubHk6IHJlYWRvbmx5LFxuICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApXG5cbiAgICBjb25zdCBvcHRpb25zUHJvdmlkZXIkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmRhdGFDb250ZXh0JCxcbiAgICAgIHRoaXMuZGF0YUNvbnRleHQkLnBpcGUoXG4gICAgICAgIGZpbHRlcigoZGMpID0+ICEhZGMpLFxuICAgICAgICBzd2l0Y2hNYXAoKGRjKSA9PiBkYy5kYXRhKVxuICAgICAgKSxcbiAgICAgIHRoaXMuY2hpcFNwZWNGbiQsXG4gICAgICB0aGlzLnRlbXBsYXRlT3B0aW9ucyQsXG4gICAgXSkucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKFtkYywgZGF0YSwgY2hpcFNwZWNGbiwgdGVtcGxhdGVDaGlwc10pID0+XG4gICAgICAgICAgbmV3IENoaXBPcHRpb25zUHJvdmlkZXI8VElkLCBURW50aXR5PihcbiAgICAgICAgICAgIGRjLmRhdGFTb3VyY2UsXG4gICAgICAgICAgICB0aGlzLmJ1aWxkQXZhaWxhYmxlRW50aXRpZXMoZGF0YSwgdGVtcGxhdGVDaGlwcyksXG4gICAgICAgICAgICBjaGlwU3BlY0ZuXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcblxuICAgIHRoaXMuc2VsZWN0Q2hpcHMgPSB0b1NpZ25hbChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICBvcHRpb25zUHJvdmlkZXIkLFxuICAgICAgICB0aGlzLmVudGl0aWVzJCxcbiAgICAgICAgdGhpcy5lbnRpdHlJZHMkLFxuICAgICAgICB0aGlzLnRlbXBsYXRlT3B0aW9ucyQsXG4gICAgICAgIHRoaXMuY29udGV4dCQsXG4gICAgICBdKS5waXBlKFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSxcbiAgICAgICAgbWFwKChbb3B0aW9uc1Byb3ZpZGVyLCBlbnRpdGllcywgZW50aXR5SWRzLCB0ZW1wbGF0ZVNlbGVjdENoaXBzLCBjb250ZXh0XSkgPT5cbiAgICAgICAgICB0aGlzLmJ1aWxkQ2hpcE1vZGVscyhcbiAgICAgICAgICAgIG9wdGlvbnNQcm92aWRlcixcbiAgICAgICAgICAgIGVudGl0aWVzLFxuICAgICAgICAgICAgZW50aXR5SWRzLFxuICAgICAgICAgICAgdGhpcy5idWlsZEVudGl0aWVzTGFiZWxNYXAodGVtcGxhdGVTZWxlY3RDaGlwcyksXG4gICAgICAgICAgICBjb250ZXh0XG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuXG4gICAgdGhpcy50ZW1wbGF0ZXMgPSB0b1NpZ25hbChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuY2hpcFRlbXBsYXRlJCwgdGhpcy5jaGlwQXZhdGFyVGVtcGxhdGUkXSkucGlwZShcbiAgICAgICAgbWFwKChbY2hpcCwgYXZhdGFyXSkgPT4ge1xuICAgICAgICAgIHJldHVybiA8VGVtcGxhdGVXcmFwcGVyPntcbiAgICAgICAgICAgIGNoaXAsXG4gICAgICAgICAgICBhdmF0YXIsXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIClcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbXVsdGlwbGUodmFsOiBCb29sZWFuSW5wdXQpIHtcbiAgICB0aGlzLl9tdWx0aXBsZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWwpXG4gICAgaWYgKCF0aGlzLl9tdWx0aXBsZSAmJiB0aGlzLmVudGl0aWVzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRoaXMuc2VsZWN0RW50aXR5KHRoaXMuZW50aXRpZXNbdGhpcy5lbnRpdGllcy5sZW5ndGggLSAxXSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWxsb3dzIHRvIGN1c3RvbWl6ZSBlYWNoIGNoaXAgaW5kaXZpZHVhbGx5IChDb2xvciwgUmVtb3ZhYmxlLCBBdmF0YXIpLlxuICAgKlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBjaGlwU3BlY0ZuKGZuOiAoZTogVEVudGl0eSkgPT4gU2VsZWN0T3B0aW9uQ2hpcFNwZWMpIHtcbiAgICB0aGlzLl9jaGlwU3BlY0ZuJC5uZXh0KGZuKVxuICB9XG5cbiAgcHVibGljIGdldCBjaGlwU3BlY0ZuJCgpOiBPYnNlcnZhYmxlPChlOiBURW50aXR5KSA9PiBTZWxlY3RPcHRpb25DaGlwU3BlYz4ge1xuICAgIHJldHVybiB0aGlzLl9jaGlwU3BlY0ZuJC5hc09ic2VydmFibGUoKVxuICB9XG5cbiAgcHVibGljIGdldCBtdWx0aXBsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbXVsdGlwbGVcbiAgfVxuXG4gIEBDb250ZW50Q2hpbGQoRWxkZXJTZWxlY3RDaGlwRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IGZhbHNlIH0pXG4gIHB1YmxpYyBzZXQgY2hpcFRlbXBsYXRlUXVlcnkodGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICB0aGlzLmNoaXBUZW1wbGF0ZSA9IHRlbXBsYXRlXG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGNoaXBUZW1wbGF0ZSh0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pikge1xuICAgIHRoaXMuY2hpcFRlbXBsYXRlJC5uZXh0KHRlbXBsYXRlKVxuICB9XG5cbiAgcHVibGljIGdldCBjaGlwVGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuY2hpcFRlbXBsYXRlJC5nZXRWYWx1ZSgpXG4gIH1cblxuICBAQ29udGVudENoaWxkKEVsZGVyU2VsZWN0Q2hpcEF2YXRhckRpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiBmYWxzZSB9KVxuICBwdWJsaWMgc2V0IGNoaXBBdmF0YXJUZW1wbGF0ZVF1ZXJ5KHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgdGhpcy5jaGlwQXZhdGFyVGVtcGxhdGUgPSB0ZW1wbGF0ZVxuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBjaGlwQXZhdGFyVGVtcGxhdGUodGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICB0aGlzLmNoaXBBdmF0YXJUZW1wbGF0ZSQubmV4dCh0ZW1wbGF0ZSlcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2hpcEF2YXRhclRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmNoaXBBdmF0YXJUZW1wbGF0ZSQuZ2V0VmFsdWUoKVxuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGdldCBzaG91bGRMYWJlbEZsb2F0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHVibGljIEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgc2VsZWN0aW9uQ2hhbmdlZChjaGFuZ2VFdmVudDogTWF0Q2hpcFNlbGVjdGlvbkNoYW5nZSwgZW50aXR5OiBURW50aXR5KTogdm9pZCB7XG4gICAgLyoqL1xuICAgIHRoaXMubG9nLmRlYnVnKCdzZWxlY3Rpb25DaGFuZ2VkJywge1xuICAgICAgY2hhbmdlRXZlbnQ6IGNoYW5nZUV2ZW50LFxuICAgICAgZW50aXR5OiBlbnRpdHksXG4gICAgfSlcblxuICAgIGlmIChjaGFuZ2VFdmVudC5pc1VzZXJJbnB1dCkge1xuICAgICAgaWYgKGNoYW5nZUV2ZW50LnNlbGVjdGVkKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0RW50aXR5KGVudGl0eSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVtb3ZlRW50aXR5KGVudGl0eSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVzb2x2ZUNoaXBWYWx1ZShlMTogVEVudGl0eSk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RW50aXR5SWQoZTEpXG4gIH1cblxuICBwdWJsaWMgZm9jdXMob3B0aW9ucz86IEZvY3VzT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9saXN0Qm94KSB7XG4gICAgICB0aGlzLl9saXN0Qm94LmZvY3VzKClcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYmx1cigpOiB2b2lkIHtcbiAgICB0aGlzLmxvZy53YXJuKCdibHVyKCkgbm90IHlldCBzdXBwb3J0ZWQhJylcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcm90ZWN0ZWQgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIC8qKlxuICAgKiBBdXRvbWF0aWNhbGx5IHN0YXJ0IERDIGlmIG5vdCB5ZXQgc3RhcnRlZFxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgb25EYXRhQ29udGV4dENoYW5nZWQoZGF0YTogSURhdGFDb250ZXh0PFRFbnRpdHk+KTogdm9pZCB7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmICghZGF0YS5pc1N0YXJ0ZWQpIHtcbiAgICAgICAgZGF0YS5zdGFydCh0aGlzLnNvcnRzLCB0aGlzLmZpbHRlcnMpLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgc3VwZXIub25EYXRhQ29udGV4dENoYW5nZWQoZGF0YSlcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3VwZXIub25EYXRhQ29udGV4dENoYW5nZWQoZGF0YSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJpdmF0ZSBtZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIHNlbGVjdEVudGl0eShlbnRpdHk6IFRFbnRpdHkpOiB2b2lkIHtcbiAgICBjb25zdCBpZFRvU2VsZWN0ID0gdGhpcy5nZXRFbnRpdHlJZChlbnRpdHkpXG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XG4gICAgICB0aGlzLnJlbW92ZUVudGl0aWVzKHRoaXMuZW50aXRpZXMuZmlsdGVyKChlKSA9PiB0aGlzLmdldEVudGl0eUlkKGUpICE9PSBpZFRvU2VsZWN0KSlcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzRW50aXR5SWRTZWxlY3RlZChpZFRvU2VsZWN0KSkge1xuICAgICAgdGhpcy5hcHBlbmRFbnRpdHkoZW50aXR5KVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNFbnRpdHlJZFNlbGVjdGVkKGVudGl0eUlkOiBUSWQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lbnRpdGllcy5zb21lKChlKSA9PiB0aGlzLmdldEVudGl0eUlkKGUpID09PSBlbnRpdHlJZClcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDaGlwTW9kZWxzKFxuICAgIG9wdGlvbnNQcm92aWRlcjogQ2hpcE9wdGlvbnNQcm92aWRlcjxUSWQsIFRFbnRpdHk+LFxuICAgIGVudGl0aWVzOiBURW50aXR5W10sXG4gICAgZW50aXR5SWRzOiBUSWRbXSxcbiAgICBlbnRpdGllc0xhYmVsczogTWFwPGFueSwgc3RyaW5nPixcbiAgICBjb250ZXh0OiBNdWx0aVNlbGVjdENoaXBPcHRpb25zQ29udGV4dFxuICApOiBDaGlwT3B0aW9uTW9kZWw8VEVudGl0eT5bXSB7XG4gICAgcmV0dXJuIG9wdGlvbnNQcm92aWRlci5idWlsZENoaXBNb2RlbHNPckZhbGxiYWNrKGVudGl0aWVzLCBlbnRpdHlJZHMsIHtcbiAgICAgIGNvbnRleHQ6IGNvbnRleHQsXG4gICAgICBpc0xvY2tlZDogdGhpcy5pc0xvY2tlZCxcbiAgICAgIGVudGl0eUxhYmVsTWFwOiBlbnRpdGllc0xhYmVscyxcbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEF2YWlsYWJsZUVudGl0aWVzKFxuICAgIGRhdGE6IFRFbnRpdHlbXSxcbiAgICB0ZW1wbGF0ZUNoaXBzOiBFbGRlclNlbGVjdE9wdGlvbkNvbXBvbmVudDxURW50aXR5PltdXG4gICk6IFRFbnRpdHlbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmV4dHJhY3RFbnRpdGllc0Zyb21UZW1wbGF0ZUNoaXBzKHRlbXBsYXRlQ2hpcHMpLCAuLi5kYXRhXVxuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0RW50aXRpZXNGcm9tVGVtcGxhdGVDaGlwcyhcbiAgICB0ZW1wbGF0ZUNoaXBzOiBFbGRlclNlbGVjdE9wdGlvbkNvbXBvbmVudDxURW50aXR5PltdXG4gICk6IFRFbnRpdHlbXSB7XG4gICAgcmV0dXJuIHRlbXBsYXRlQ2hpcHMubWFwKChjaGlwKSA9PiBjaGlwLnZhbHVlKVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEVudGl0aWVzTGFiZWxNYXAoXG4gICAgdGVtcGxhdGVDaGlwczogRWxkZXJTZWxlY3RPcHRpb25Db21wb25lbnQ8VEVudGl0eT5bXVxuICApOiBNYXA8VEVudGl0eSwgc3RyaW5nPiB7XG4gICAgcmV0dXJuIG5ldyBNYXAoXG4gICAgICB0ZW1wbGF0ZUNoaXBzXG4gICAgICAgIC5maWx0ZXIoKGNoaXApID0+IGNoaXAubGFiZWwgIT09IHVuZGVmaW5lZClcbiAgICAgICAgLm1hcCgoY2hpcCkgPT4gW2NoaXAudmFsdWUsIGNoaXAubGFiZWxdKVxuICAgIClcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImVsZGVyLWZsZXgtY29udHJvbFwiIFttYXRUb29sdGlwXT1cInN0YXRlKCk/LmVycm9yXCI+XG4gIDxtYXQtY2hpcC1saXN0Ym94ICNjaGlwcyBbY2xhc3MubWF0LW1kYy1jaGlwLXNldC1zdGFja2VkXT1cInN0YWNrZWRcIiBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIj5cbiAgICBAaWYgKHN0YXRlKCk7IGFzIHN0YXRlKSB7XG4gICAgICBAaWYgKGljb24pIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImVsZGVyLWlucHV0LXByZWZpeC1pY29uLWNvbnRhaW5lciBmbGV4LW5vbmVcIj5cbiAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgIGRpc2FibGVkXG4gICAgICAgICAgICBjbGFzcz1cImVsZGVyLXByZWZpeC1pY29uIGVsZGVyLW1kYy1jb250cm9sLWljb24gZWxkZXItaWNvbi1zbWFsbCBub3NlbGVjdFwiXG4gICAgICAgICAgICBbY2xhc3MubG9hZGluZ109XCJzdGF0ZS5sb2FkaW5nXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBpY29uIH19XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgfVxuXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXG4gICAgQGZvciAoY2hpcE1vZGVsIG9mIHNlbGVjdENoaXBzKCk7IHRyYWNrIGNoaXBNb2RlbC5pZCkge1xuICAgICAgPG1hdC1jaGlwLW9wdGlvblxuICAgICAgICBjbGFzcz1cIm5vc2VsZWN0XCJcbiAgICAgICAgW3ZhbHVlXT1cInJlc29sdmVDaGlwVmFsdWUoY2hpcE1vZGVsLnZhbHVlKVwiXG4gICAgICAgIGVsZGVyQ2hpcExhYmVsXG4gICAgICAgIFtsZXZlbENvbG9yXT1cImNoaXBNb2RlbC5jb2xvclNwZWM/LmxldmVsQ29sb3JcIlxuICAgICAgICBbc3RhdGVDb2xvcl09XCJjaGlwTW9kZWwuY29sb3JTcGVjPy5zdGF0ZUNvbG9yXCJcbiAgICAgICAgW2NvbG9yXT1cImNoaXBNb2RlbC5jb2xvclNwZWM/LnRoZW1lQ29sb3JcIlxuICAgICAgICBbc2VsZWN0YWJsZV09XCIhY2hpcE1vZGVsLmxvY2tlZFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJjaGlwTW9kZWwubG9ja2VkXCJcbiAgICAgICAgW3NlbGVjdGVkXT1cImNoaXBNb2RlbC5zZWxlY3RlZFwiXG4gICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwic2VsZWN0aW9uQ2hhbmdlZCgkZXZlbnQsIGNoaXBNb2RlbC52YWx1ZSlcIlxuICAgICAgPlxuICAgICAgICBAaWYgKHRlbXBsYXRlcygpPy5hdmF0YXIgJiYgIWNoaXBNb2RlbC5hdmF0YXJTcGVjPy5oaWRlKSB7XG4gICAgICAgICAgPG1hdC1jaGlwLWF2YXRhciBbY2xhc3MuY2hpcC1hdmF0YXIteGxdPVwiY2hpcE1vZGVsLmF2YXRhclNwZWM/LmxhcmdlXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVzKCkuYXZhdGFyOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogY2hpcE1vZGVsIH1cIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbWF0LWNoaXAtYXZhdGFyPlxuICAgICAgICB9XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICB0ZW1wbGF0ZXMoKT8uY2hpcCB8fCBzaW1wbGVDaGlwVGVtcGxhdGU7XG4gICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogY2hpcE1vZGVsIH1cbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIEBpZiAoY2hpcE1vZGVsLnRyYWlsaW5nU3BlYz8uaWNvbikge1xuICAgICAgICAgIDxtYXQtaWNvblxuICAgICAgICAgICAgbWF0Q2hpcFRyYWlsaW5nSWNvblxuICAgICAgICAgICAgY2xhc3M9XCJlbGRlci10cmFpbGluZy1pY29uXCJcbiAgICAgICAgICAgIFtmb250U2V0XT1cImNoaXBNb2RlbC50cmFpbGluZ1NwZWM/Lmljb25Gb250U2V0XCJcbiAgICAgICAgICAgID57eyBjaGlwTW9kZWwudHJhaWxpbmdTcGVjPy5pY29uIH19XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgfVxuICAgICAgPC9tYXQtY2hpcC1vcHRpb24+XG4gICAgfVxuXG4gICAgPGRpdiBjbGFzcz1cImxheW91dC1yb3cgcGxhY2Utc3RhcnQtY2VudGVyIGVsZGVyLWNoaXAtaW5wdXRcIj5cbiAgICAgIEBpZiAoc2VsZWN0aW9uUG9wdXApIHtcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiZWxkZXItY29udHJvbC1pY29uLWJ1dHRvbiBlbGRlci1icm93c2UtaWNvblwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImlzTG9ja2VkXCJcbiAgICAgICAgICAoY2xpY2spPVwib3BlblNlbGVjdGlvblBvcHVwKCRldmVudClcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJTZWFyY2hcIlxuICAgICAgICAgIGVsZGVyU3RvcEV2ZW50UHJvcGFnYXRpb25cbiAgICAgICAgICB0YWJJbmRleD1cIi0xXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImVsZGVyLW1kYy1jb250cm9sLWljb25cIj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9tYXQtY2hpcC1saXN0Ym94PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjc2ltcGxlQ2hpcFRlbXBsYXRlIGxldC1jaGlwTW9kZWw+XG4gIDxzcGFuIGNsYXNzPVwiZWxkZXItY2hpcC10ZXh0XCI+e3sgY2hpcE1vZGVsLmRpc3BsYXlUZXh0IHwgZWxkZXJUcnVuY2F0ZTogMjAgfX08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuIl19