@smartbit4all/ng-client 6.0.39 → 6.0.40

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 (337) hide show
  1. package/README.md +386 -386
  2. package/esm2022/lib/component-factory-service/component-factory-service.module.mjs +1 -1
  3. package/esm2022/lib/component-factory-service/component-factory-service.service.mjs +1 -1
  4. package/esm2022/lib/component-factory-service/projects.mjs +1 -1
  5. package/esm2022/lib/session/api/api/api.mjs +1 -1
  6. package/esm2022/lib/session/api/api/session.service.mjs +1 -1
  7. package/esm2022/lib/session/api/configuration.mjs +1 -1
  8. package/esm2022/lib/session/api/encoder.mjs +1 -1
  9. package/esm2022/lib/session/api/index.mjs +1 -1
  10. package/esm2022/lib/session/api/model/accountInfo.mjs +1 -1
  11. package/esm2022/lib/session/api/model/apiError.mjs +1 -1
  12. package/esm2022/lib/session/api/model/authenticationProviderData.mjs +1 -1
  13. package/esm2022/lib/session/api/model/getAuthenticationProvidersResponse.mjs +1 -1
  14. package/esm2022/lib/session/api/model/models.mjs +1 -1
  15. package/esm2022/lib/session/api/model/refreshSessionRequest.mjs +1 -1
  16. package/esm2022/lib/session/api/model/session.mjs +1 -1
  17. package/esm2022/lib/session/api/model/sessionInfoData.mjs +1 -1
  18. package/esm2022/lib/session/api/model/userActivityLog.mjs +1 -1
  19. package/esm2022/lib/session/api/param.mjs +1 -1
  20. package/esm2022/lib/session/api/variables.mjs +1 -1
  21. package/esm2022/lib/session/cookie-service/smart-cookie.service.mjs +1 -1
  22. package/esm2022/lib/session/projects.mjs +1 -1
  23. package/esm2022/lib/session/smart-backend-bootstrap.config.mjs +1 -1
  24. package/esm2022/lib/session/smart-backend-bootstrap.service.mjs +1 -1
  25. package/esm2022/lib/session/smart-default-error-ui.service.mjs +1 -1
  26. package/esm2022/lib/session/smart-error-catching.interceptor.mjs +1 -1
  27. package/esm2022/lib/session/smart-header-maintainer.interceptor.mjs +1 -1
  28. package/esm2022/lib/session/smart-session-handler.service.mjs +1 -1
  29. package/esm2022/lib/session/smart-session.module.mjs +1 -1
  30. package/esm2022/lib/session/smart-session.service.mjs +1 -1
  31. package/esm2022/lib/session/smart-timer/smart-session-timer.component.mjs +3 -3
  32. package/esm2022/lib/shared/projects.mjs +1 -1
  33. package/esm2022/lib/shared/shared.module.mjs +1 -1
  34. package/esm2022/lib/shared/smart-tooltip.directive.mjs +1 -1
  35. package/esm2022/lib/shared/smarttable.date-pipe.mjs +1 -1
  36. package/esm2022/lib/smart-client/projects.mjs +1 -1
  37. package/esm2022/lib/smart-client/smart-component-api-client.mjs +1 -1
  38. package/esm2022/lib/smart-client/smart-file-uploader/smart-file-uploader.component.mjs +3 -3
  39. package/esm2022/lib/smart-client/smart.component.mjs +1 -1
  40. package/esm2022/lib/smart-client/smart.service.mjs +1 -1
  41. package/esm2022/lib/smart-component-layout/api/model/models.mjs +1 -1
  42. package/esm2022/lib/smart-component-layout/api/model/toolbarAlignment.mjs +1 -1
  43. package/esm2022/lib/smart-component-layout/api/model/toolbarProperties.mjs +1 -1
  44. package/esm2022/lib/smart-component-layout/projects.mjs +1 -1
  45. package/esm2022/lib/smart-component-layout/smart-component-layout-utility.mjs +1 -1
  46. package/esm2022/lib/smart-component-layout/smart-component-layout.component.mjs +3 -3
  47. package/esm2022/lib/smart-component-layout/smart-component-layout.module.mjs +1 -1
  48. package/esm2022/lib/smart-diagram/component/default-smart-diagram-options.provider.mjs +1 -1
  49. package/esm2022/lib/smart-diagram/component/smart-diagram.component.mjs +22 -22
  50. package/esm2022/lib/smart-diagram/component/smart-diagram.module.mjs +1 -1
  51. package/esm2022/lib/smart-diagram/component/smart-diagram.util.mjs +1 -1
  52. package/esm2022/lib/smart-diagram/projects.mjs +1 -1
  53. package/esm2022/lib/smart-dialog/projects.mjs +1 -1
  54. package/esm2022/lib/smart-dialog/smartdialog.component.mjs +3 -3
  55. package/esm2022/lib/smart-dialog/smartdialog.model.mjs +1 -1
  56. package/esm2022/lib/smart-dialog/smartdialog.module.mjs +1 -1
  57. package/esm2022/lib/smart-dialog/smartdialog.service.mjs +1 -1
  58. package/esm2022/lib/smart-expandable-section/expandable-section.component.mjs +3 -3
  59. package/esm2022/lib/smart-expandable-section/expandable-section.model.mjs +1 -1
  60. package/esm2022/lib/smart-expandable-section/projects.mjs +1 -1
  61. package/esm2022/lib/smart-expandable-section/smart-expandable-section.module.mjs +1 -1
  62. package/esm2022/lib/smart-expandable-section/smart-expandable-section.service.mjs +1 -1
  63. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionBoolOperator.mjs +1 -1
  64. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionBuilderField.mjs +1 -1
  65. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionBuilderGroup.mjs +1 -1
  66. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionBuilderModel.mjs +1 -1
  67. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionData.mjs +1 -1
  68. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionDataType.mjs +1 -1
  69. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionField.mjs +1 -1
  70. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionFieldList.mjs +1 -1
  71. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionFieldWidgetType.mjs +1 -1
  72. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionList.mjs +1 -1
  73. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionOperandData.mjs +1 -1
  74. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionOperation.mjs +1 -1
  75. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionOrderBy.mjs +1 -1
  76. package/esm2022/lib/smart-filter/api/filter/model/model.mjs +1 -1
  77. package/esm2022/lib/smart-filter/api/filter/model/searchIndexObjectDefinitionData.mjs +1 -1
  78. package/esm2022/lib/smart-filter/api/filter/model/searchIndexPropertyDefinitionData.mjs +1 -1
  79. package/esm2022/lib/smart-filter/api/value/model/value.mjs +1 -1
  80. package/esm2022/lib/smart-filter/projects.mjs +1 -1
  81. package/esm2022/lib/smart-filter/smart-filter/components/smart-filter-expression-field/smart-filter-expression-field.component.mjs +1 -1
  82. package/esm2022/lib/smart-filter/smart-filter/components/smart-filter-simple/components/smart-filter-simple-field/smart-filter-simple-field.component.mjs +3 -3
  83. package/esm2022/lib/smart-filter/smart-filter/components/smart-filter-simple/smart-filter-simple.component.mjs +3 -3
  84. package/esm2022/lib/smart-filter/smart-filter/smart-filter.component.mjs +3 -3
  85. package/esm2022/lib/smart-filter/smart-filter/smart-filter.service.mjs +1 -1
  86. package/esm2022/lib/smart-filter/smart-filter.model.mjs +1 -1
  87. package/esm2022/lib/smart-filter/smart-filter.module.mjs +1 -1
  88. package/esm2022/lib/smart-filter-editor/api/api/api.mjs +1 -1
  89. package/esm2022/lib/smart-filter-editor/api/api/filter.service.mjs +1 -1
  90. package/esm2022/lib/smart-filter-editor/api/api.module.mjs +1 -1
  91. package/esm2022/lib/smart-filter-editor/api/configuration.mjs +1 -1
  92. package/esm2022/lib/smart-filter-editor/api/encoder.mjs +1 -1
  93. package/esm2022/lib/smart-filter-editor/api/index.mjs +1 -1
  94. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBoolOperator.mjs +1 -1
  95. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilder.mjs +1 -1
  96. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderApiConfig.mjs +1 -1
  97. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderField.mjs +1 -1
  98. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderGroup.mjs +1 -1
  99. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderModel.mjs +1 -1
  100. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderUiModel.mjs +1 -1
  101. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionData.mjs +1 -1
  102. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionDataType.mjs +1 -1
  103. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionField.mjs +1 -1
  104. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionFieldEditor.mjs +1 -1
  105. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionFieldList.mjs +1 -1
  106. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionFieldWidgetType.mjs +1 -1
  107. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionList.mjs +1 -1
  108. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionOperandData.mjs +1 -1
  109. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionOperation.mjs +1 -1
  110. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionOrderBy.mjs +1 -1
  111. package/esm2022/lib/smart-filter-editor/api/model/models.mjs +1 -1
  112. package/esm2022/lib/smart-filter-editor/api/model/searchPageConfig.mjs +1 -1
  113. package/esm2022/lib/smart-filter-editor/api/model/smartFilterType.mjs +1 -1
  114. package/esm2022/lib/smart-filter-editor/api/param.mjs +1 -1
  115. package/esm2022/lib/smart-filter-editor/api/variables.mjs +1 -1
  116. package/esm2022/lib/smart-filter-editor/filter-utils.mjs +1 -1
  117. package/esm2022/lib/smart-filter-editor/filterExpressionBuilderApiActions.mjs +1 -1
  118. package/esm2022/lib/smart-filter-editor/project.mjs +1 -1
  119. package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/components/advanced/advanced-relation-button/advanced-relation-button.component.mjs +3 -3
  120. package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/components/advanced/advanced-smart-filter-expression-item/advanced-smart-filter-expression-item.component.mjs +3 -3
  121. package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/components/advanced/expression-editor-dialog/expression-editor-dialog.component.mjs +3 -3
  122. package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/components/advanced/expression-editor-dialog/expression-editor-dialog.service.mjs +1 -1
  123. package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-item/smart-filter-expression-item.component.mjs +3 -3
  124. package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-items/smart-filter-expression-items.component.mjs +3 -3
  125. package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/smart-filter-editor-content.component.mjs +3 -3
  126. package/esm2022/lib/smart-filter-editor/smart-filter-editor.model.mjs +1 -1
  127. package/esm2022/lib/smart-filter-editor/smart-filter-editor.module.mjs +1 -1
  128. package/esm2022/lib/smart-filter-editor/smart-filter-editor.service.mjs +1 -1
  129. package/esm2022/lib/smart-filter-editor/smart-filter-params/components/smart-filter-param/smart-filter-param.component.mjs +3 -3
  130. package/esm2022/lib/smart-filter-editor/smart-filter-params/smart-filter-params.component.mjs +3 -3
  131. package/esm2022/lib/smart-form/api/model/divProperties.mjs +1 -1
  132. package/esm2022/lib/smart-form/api/model/models.mjs +1 -1
  133. package/esm2022/lib/smart-form/highlightMacthingString-pipe.mjs +1 -1
  134. package/esm2022/lib/smart-form/projects.mjs +1 -1
  135. package/esm2022/lib/smart-form/services/smartform.layout-definition.service.mjs +1 -1
  136. package/esm2022/lib/smart-form/services/smartform.service.mjs +1 -1
  137. package/esm2022/lib/smart-form/smartfileuploader/large-file-snack-bar/large-file-snack-bar.component.mjs +3 -3
  138. package/esm2022/lib/smart-form/smartfileuploader/smartfileuploader.component.mjs +3 -3
  139. package/esm2022/lib/smart-form/smartfileuploader/smartfileuploader.model.mjs +1 -1
  140. package/esm2022/lib/smart-form/smartform.component.mjs +3 -3
  141. package/esm2022/lib/smart-form/smartform.form-model.mjs +1 -1
  142. package/esm2022/lib/smart-form/smartform.model.mjs +1 -1
  143. package/esm2022/lib/smart-form/widgets/components/smart-file-editor/smart-file-editor.component.mjs +3 -3
  144. package/esm2022/lib/smart-form/widgets/components/smart-month-picker/smart-month-picker.component.mjs +3 -3
  145. package/esm2022/lib/smart-form/widgets/components/smart-multi-file-editor/smart-multi-file-editor.component.mjs +3 -3
  146. package/esm2022/lib/smart-form/widgets/components/smart-voice-recorder/smart-voice-recorder.component.mjs +3 -3
  147. package/esm2022/lib/smart-form/widgets/directives/comparable-dropdown.directive.mjs +1 -1
  148. package/esm2022/lib/smart-form/widgets/directives/comparable-multiselect.directive.mjs +1 -1
  149. package/esm2022/lib/smart-form/widgets/smartformwidget/smartformwidget.component.mjs +3 -3
  150. package/esm2022/lib/smart-form/widgets/smartformwidget/sortable-widget/sortable-widget.component.mjs +3 -3
  151. package/esm2022/lib/smart-form/widgets/smartformwidget/trackCaps.directive.mjs +1 -1
  152. package/esm2022/lib/smart-generic-pages/acl-editing-view/acl-editing-view.component.mjs +3 -3
  153. package/esm2022/lib/smart-generic-pages/api/platform/acl/model/aCL.mjs +1 -1
  154. package/esm2022/lib/smart-generic-pages/api/platform/acl/model/aCLEntry.mjs +1 -1
  155. package/esm2022/lib/smart-generic-pages/api/platform/acl/model/objectValidationSeverity.mjs +1 -1
  156. package/esm2022/lib/smart-generic-pages/api/platform/acl/model/subject.mjs +1 -1
  157. package/esm2022/lib/smart-generic-pages/api/platform/api-default/objectHistoryRangeData.mjs +1 -1
  158. package/esm2022/lib/smart-generic-pages/api/platform/searchpage/model/searchPageModel.mjs +1 -1
  159. package/esm2022/lib/smart-generic-pages/api/platform/subjectselector/model/subjectSelectorPageModel.mjs +1 -1
  160. package/esm2022/lib/smart-generic-pages/api/platform/validation/model/validationItem.mjs +1 -1
  161. package/esm2022/lib/smart-generic-pages/api/platform/validation/model/validationResultPageModel.mjs +1 -1
  162. package/esm2022/lib/smart-generic-pages/generic-page/generic-page.component.mjs +3 -3
  163. package/esm2022/lib/smart-generic-pages/invalid-smartlink/invalid-smartlink.component.mjs +3 -3
  164. package/esm2022/lib/smart-generic-pages/no-permission-page/no-permission-page.component.mjs +3 -3
  165. package/esm2022/lib/smart-generic-pages/projects.mjs +1 -1
  166. package/esm2022/lib/smart-generic-pages/search-page/search-page.component.mjs +3 -3
  167. package/esm2022/lib/smart-generic-pages/smart-generic-pages.module.mjs +1 -1
  168. package/esm2022/lib/smart-generic-pages/subject-selector/subject-selector.component.mjs +3 -3
  169. package/esm2022/lib/smart-generic-pages/validation-result-page/validation-result-page.component.mjs +3 -3
  170. package/esm2022/lib/smart-grid/api/grid-api/api/api.mjs +1 -1
  171. package/esm2022/lib/smart-grid/api/grid-api/api/grid.service.mjs +1 -1
  172. package/esm2022/lib/smart-grid/api/grid-api/api.module.mjs +1 -1
  173. package/esm2022/lib/smart-grid/api/grid-api/configuration.mjs +1 -1
  174. package/esm2022/lib/smart-grid/api/grid-api/encoder.mjs +1 -1
  175. package/esm2022/lib/smart-grid/api/grid-api/index.mjs +1 -1
  176. package/esm2022/lib/smart-grid/api/grid-api/model/gridColumnContentType.mjs +1 -1
  177. package/esm2022/lib/smart-grid/api/grid-api/model/gridColumnMeta.mjs +1 -1
  178. package/esm2022/lib/smart-grid/api/grid-api/model/gridDataAccessConfig.mjs +1 -1
  179. package/esm2022/lib/smart-grid/api/grid-api/model/gridExportDescriptor.mjs +1 -1
  180. package/esm2022/lib/smart-grid/api/grid-api/model/gridPage.mjs +1 -1
  181. package/esm2022/lib/smart-grid/api/grid-api/model/gridRow.mjs +1 -1
  182. package/esm2022/lib/smart-grid/api/grid-api/model/gridRowLayoutDescriptor.mjs +1 -1
  183. package/esm2022/lib/smart-grid/api/grid-api/model/gridSelectionChange.mjs +1 -1
  184. package/esm2022/lib/smart-grid/api/grid-api/model/gridSelectionMode.mjs +1 -1
  185. package/esm2022/lib/smart-grid/api/grid-api/model/gridSelectionType.mjs +1 -1
  186. package/esm2022/lib/smart-grid/api/grid-api/model/gridServerModel.mjs +1 -1
  187. package/esm2022/lib/smart-grid/api/grid-api/model/gridUpdateData.mjs +1 -1
  188. package/esm2022/lib/smart-grid/api/grid-api/model/gridView.mjs +1 -1
  189. package/esm2022/lib/smart-grid/api/grid-api/model/gridViewDescriptor.mjs +1 -1
  190. package/esm2022/lib/smart-grid/api/grid-api/model/models.mjs +1 -1
  191. package/esm2022/lib/smart-grid/api/grid-api/param.mjs +1 -1
  192. package/esm2022/lib/smart-grid/api/grid-api/variables.mjs +1 -1
  193. package/esm2022/lib/smart-grid/components/expandable-grid/expandable-grid.component.mjs +3 -3
  194. package/esm2022/lib/smart-grid/components/generic-component/expanded-row-renderer.component.mjs +3 -3
  195. package/esm2022/lib/smart-grid/components/smart-grid-card/smart-grid-card.component.mjs +3 -3
  196. package/esm2022/lib/smart-grid/components/table-layout-definer/table-layout-definer.component.mjs +3 -3
  197. package/esm2022/lib/smart-grid/models/model.mjs +1 -1
  198. package/esm2022/lib/smart-grid/projects.mjs +1 -1
  199. package/esm2022/lib/smart-grid/smart-grid-toolbar-util.mjs +1 -1
  200. package/esm2022/lib/smart-grid/smart-grid.component.mjs +42 -6
  201. package/esm2022/lib/smart-grid/smart-grid.module.mjs +1 -1
  202. package/esm2022/lib/smart-grid/smart-grid.service.mjs +1 -1
  203. package/esm2022/lib/smart-icon/projects.mjs +1 -1
  204. package/esm2022/lib/smart-icon/smart-icon/smart-icon.component.mjs +3 -3
  205. package/esm2022/lib/smart-icon/smart-icon/ui-badge/ui-badge.component.mjs +3 -3
  206. package/esm2022/lib/smart-icon/smart-icon/ui-badge/ui-badge.directive.mjs +1 -1
  207. package/esm2022/lib/smart-icon/smart-icon.module.mjs +1 -1
  208. package/esm2022/lib/smart-icon/smart-icon.service.mjs +1 -1
  209. package/esm2022/lib/smart-map/abstract-map.mjs +1 -1
  210. package/esm2022/lib/smart-map/api-default/api-default.mjs +1 -1
  211. package/esm2022/lib/smart-map/impl/google-map.mjs +1 -1
  212. package/esm2022/lib/smart-map/impl/leaflet-map.mjs +1 -1
  213. package/esm2022/lib/smart-map/projects.mjs +1 -1
  214. package/esm2022/lib/smart-map/smart-map.component.mjs +3 -3
  215. package/esm2022/lib/smart-map/smart-map.module.mjs +1 -1
  216. package/esm2022/lib/smart-map/smart-map.types.mjs +1 -1
  217. package/esm2022/lib/smart-navbar/projects.mjs +1 -1
  218. package/esm2022/lib/smart-navbar/smart-navbar.component.mjs +3 -3
  219. package/esm2022/lib/smart-navbar/smart-navbar.model.mjs +1 -1
  220. package/esm2022/lib/smart-navbar/smart-navbar.module.mjs +1 -1
  221. package/esm2022/lib/smart-navbar/smart-navbar.service.mjs +1 -1
  222. package/esm2022/lib/smart-navigation/projects.mjs +1 -1
  223. package/esm2022/lib/smart-navigation/smart-navigation.interface.mjs +1 -1
  224. package/esm2022/lib/smart-navigation/smart-navigation.module.mjs +1 -1
  225. package/esm2022/lib/smart-navigation/smart-navigation.service.mjs +1 -1
  226. package/esm2022/lib/smart-ng-client.module.mjs +1 -1
  227. package/esm2022/lib/smart-ng-client.service.mjs +1 -1
  228. package/esm2022/lib/smart-subject/projects.mjs +1 -1
  229. package/esm2022/lib/smart-subject/smart-subject.mjs +1 -1
  230. package/esm2022/lib/smart-tab-group/projects.mjs +1 -1
  231. package/esm2022/lib/smart-tab-group/smart-tab-group.module.mjs +1 -1
  232. package/esm2022/lib/smart-table/components/default-actions-popup/default-actions-popup.component.mjs +3 -3
  233. package/esm2022/lib/smart-table/components/loading/loading.component.mjs +3 -3
  234. package/esm2022/lib/smart-table/directives/mat-context-menu-trigger-for.directive.mjs +1 -1
  235. package/esm2022/lib/smart-table/projects.mjs +1 -1
  236. package/esm2022/lib/smart-table/smarttable.component.mjs +3 -3
  237. package/esm2022/lib/smart-table/smarttable.model.mjs +1 -1
  238. package/esm2022/lib/smart-table/smarttable.module.mjs +1 -1
  239. package/esm2022/lib/smart-table/smarttable.service.mjs +1 -1
  240. package/esm2022/lib/smart-table/tables/material-table/material-table.component.mjs +3 -3
  241. package/esm2022/lib/smart-table/tables/mobile-table/mobile-table.component.mjs +3 -3
  242. package/esm2022/lib/smart-table/tables/table.mjs +1 -1
  243. package/esm2022/lib/smart-tree/projects.mjs +1 -1
  244. package/esm2022/lib/smart-tree/smarttree-generic.service.mjs +1 -1
  245. package/esm2022/lib/smart-tree/smarttree.component.mjs +3 -3
  246. package/esm2022/lib/smart-tree/smarttree.model.mjs +1 -1
  247. package/esm2022/lib/smart-tree/smarttree.module.mjs +1 -1
  248. package/esm2022/lib/smart-tree/smarttree.node.model.mjs +1 -1
  249. package/esm2022/lib/smart-tree/smarttree.service.interface.mjs +1 -1
  250. package/esm2022/lib/smart-tree/smarttree.service.mjs +1 -1
  251. package/esm2022/lib/smart-tree/tree-api/api/tree.service.mjs +1 -1
  252. package/esm2022/lib/smart-tree/tree-api/configuration.mjs +1 -1
  253. package/esm2022/lib/smart-tree/tree-api/encoder.mjs +1 -1
  254. package/esm2022/lib/smart-tree/tree-api/param.mjs +1 -1
  255. package/esm2022/lib/smart-tree/tree-api/variables.mjs +1 -1
  256. package/esm2022/lib/smart-validation/named-validator.service.mjs +1 -1
  257. package/esm2022/lib/smart-validation/projects.mjs +1 -1
  258. package/esm2022/lib/smart-validation/smart-validation.module.mjs +1 -1
  259. package/esm2022/lib/smart-validation/smart-validation.types.mjs +1 -1
  260. package/esm2022/lib/theme/theme.service.mjs +1 -1
  261. package/esm2022/lib/view-context/api/api-default/binaryContentData.mjs +1 -1
  262. package/esm2022/lib/view-context/api/api-default/binaryData.mjs +1 -1
  263. package/esm2022/lib/view-context/api/api-default/invocationError.mjs +1 -1
  264. package/esm2022/lib/view-context/api/api-default/invocationRequest.mjs +1 -1
  265. package/esm2022/lib/view-context/api/api-default/invocationRun.mjs +1 -1
  266. package/esm2022/lib/view-context/default-view-components.token.mjs +1 -1
  267. package/esm2022/lib/view-context/invalid-fields-snack-bar/invalid-fields-snack-bar.component.mjs +3 -3
  268. package/esm2022/lib/view-context/message-dialog/message-dialog.component.mjs +3 -3
  269. package/esm2022/lib/view-context/projects.mjs +1 -1
  270. package/esm2022/lib/view-context/property-definition-data.mjs +1 -1
  271. package/esm2022/lib/view-context/reuse-router-slot.token.mjs +1 -1
  272. package/esm2022/lib/view-context/smart-embedded-slot.directive.mjs +1 -1
  273. package/esm2022/lib/view-context/smart-ui-action/components/menu/click/menu.component.mjs +3 -3
  274. package/esm2022/lib/view-context/smart-ui-action/components/menu/hover/hover-menu.component.mjs +3 -3
  275. package/esm2022/lib/view-context/smart-ui-action/components/menu/menu.constants.mjs +1 -1
  276. package/esm2022/lib/view-context/smart-ui-action/components/menu/menu.service.mjs +1 -1
  277. package/esm2022/lib/view-context/smart-ui-action/components/success-snack-bar/success-snack-bar.component.mjs +3 -3
  278. package/esm2022/lib/view-context/smart-ui-action/components/theme-selector/theme-selector.component.mjs +3 -3
  279. package/esm2022/lib/view-context/smart-ui-action/components/upload-widget/photo-capture-widget/photo-capture-widget.component.mjs +3 -3
  280. package/esm2022/lib/view-context/smart-ui-action/components/upload-widget/prime-file-uploader/prime-file-uploader.component.mjs +3 -3
  281. package/esm2022/lib/view-context/smart-ui-action/components/upload-widget/upload-widget.component.mjs +3 -3
  282. package/esm2022/lib/view-context/smart-ui-action/components/upload-widget/upload-widget.utils.mjs +1 -1
  283. package/esm2022/lib/view-context/smart-ui-action/components/upload-widget/voice-record-widget/voice-record-widget.component.mjs +3 -3
  284. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.component.mjs +3 -3
  285. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.service.mjs +1 -1
  286. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-dialog-button/ui-action-dialog-button.component.mjs +3 -3
  287. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.component.mjs +3 -3
  288. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.service.mjs +1 -1
  289. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.mjs +3 -3
  290. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.service.mjs +1 -1
  291. package/esm2022/lib/view-context/smart-ui-action/file-editor-toolbar/file-editor-toolbar.component.mjs +3 -3
  292. package/esm2022/lib/view-context/smart-ui-action/ui-action-button/button-icon-placeholder.mjs +1 -1
  293. package/esm2022/lib/view-context/smart-ui-action/ui-action-button/ui-action-button.component.mjs +3 -3
  294. package/esm2022/lib/view-context/smart-ui-action/ui-action-toolbar.component.mjs +3 -3
  295. package/esm2022/lib/view-context/smart-ui-action/ui-action.descriptor.service.mjs +1 -1
  296. package/esm2022/lib/view-context/smart-ui-action/ui-action.model.mjs +1 -1
  297. package/esm2022/lib/view-context/smart-ui-action/ui-action.service.mjs +1 -1
  298. package/esm2022/lib/view-context/smart-view-context-dialog.service.mjs +1 -1
  299. package/esm2022/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.component.mjs +3 -3
  300. package/esm2022/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.service.mjs +1 -1
  301. package/esm2022/lib/view-context/smart-view-context.interceptor.mjs +1 -1
  302. package/esm2022/lib/view-context/smart-view-context.model.mjs +1 -1
  303. package/esm2022/lib/view-context/smart-view-context.module.mjs +1 -1
  304. package/esm2022/lib/view-context/smart-view-context.service.mjs +1 -1
  305. package/esm2022/lib/view-context/smart-view-redirect/smart-view-redirect.mjs +1 -1
  306. package/esm2022/lib/view-context/utility/componentLibrary.mjs +1 -1
  307. package/esm2022/lib/view-context/utility/smart-object-utility.mjs +1 -1
  308. package/esm2022/lib/view-context/utility/smart-style-utility.mjs +1 -1
  309. package/esm2022/lib/view-context/value-api/api/api.mjs +1 -1
  310. package/esm2022/lib/view-context/value-api/api/value.service.mjs +1 -1
  311. package/esm2022/lib/view-context/value-api/api.module.mjs +1 -1
  312. package/esm2022/lib/view-context/value-api/configuration.mjs +1 -1
  313. package/esm2022/lib/view-context/value-api/encoder.mjs +1 -1
  314. package/esm2022/lib/view-context/value-api/index.mjs +1 -1
  315. package/esm2022/lib/view-context/value-api/model/genericValue.mjs +1 -1
  316. package/esm2022/lib/view-context/value-api/model/models.mjs +1 -1
  317. package/esm2022/lib/view-context/value-api/model/value.mjs +1 -1
  318. package/esm2022/lib/view-context/value-api/model/valueSetData.mjs +1 -1
  319. package/esm2022/lib/view-context/value-api/model/valueSetDefinition.mjs +1 -1
  320. package/esm2022/lib/view-context/value-api/model/valueSetDefinitionData.mjs +1 -1
  321. package/esm2022/lib/view-context/value-api/model/valueSetDefinitionIdentifier.mjs +1 -1
  322. package/esm2022/lib/view-context/value-api/model/valueSetDefinitionKind.mjs +1 -1
  323. package/esm2022/lib/view-context/value-api/model/valueSetExpression.mjs +1 -1
  324. package/esm2022/lib/view-context/value-api/model/valueSetOperand.mjs +1 -1
  325. package/esm2022/lib/view-context/value-api/model/valueSetOperation.mjs +1 -1
  326. package/esm2022/lib/view-context/value-api/param.mjs +1 -1
  327. package/esm2022/lib/view-context/value-api/variables.mjs +1 -1
  328. package/esm2022/lib/view-context/view-handler-resolution.mjs +1 -1
  329. package/esm2022/lib/view-context/view-op.mjs +1 -1
  330. package/esm2022/lib/view-context/view-slot-resolution.mjs +1 -1
  331. package/esm2022/projects.mjs +1 -1
  332. package/fesm2022/smartbit4all-ng-client.mjs +190 -154
  333. package/fesm2022/smartbit4all-ng-client.mjs.map +1 -1
  334. package/lib/smart-grid/smart-grid.component.d.ts +7 -0
  335. package/package.json +1 -1
  336. package/smartbit4all-ng-client-6.0.40.tgz +0 -0
  337. package/smartbit4all-ng-client-6.0.39.tgz +0 -0
@@ -19,7 +19,7 @@ export class MaterialTableComponent extends Table {
19
19
  super(cfService);
20
20
  }
21
21
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: MaterialTableComponent, deps: [{ token: i1.ComponentFactoryService }], target: i0.ɵɵFactoryTarget.Component }); }
22
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: MaterialTableComponent, selector: "lib-material-table", usesInheritance: true, ngImport: i0, template: "<table\r\n #myTable\r\n mat-table\r\n [dataSource]=\"smartTable.tableRows\"\r\n class=\"full-width\"\r\n multiTemplateDataRows\r\n>\r\n <!-- Column Descriptor -->\r\n @if (smartTable.title) {\r\n <caption *ngIf=\"smartTable.title\" class=\"captionTitle\">\r\n {{ smartTable.title }}\r\n </caption>\r\n }\r\n <ng-container\r\n *ngFor=\"let header of smartTable.tableHeaders; let i = index\"\r\n matColumnDef=\"{{ header }}\"\r\n >\r\n <!-- my_menu is the implicit action column present on all tables: -->\r\n @if ('my_menu' === header) {\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n [ngClass]=\"getColumnClasses(smartTable.customSmartTableHeaders![i])\"\r\n [ngStyle]=\"getColumnStyles(smartTable.customSmartTableHeaders![i])\"\r\n [attr.data-testid]=\"smartTable.customSmartTableHeaders![i].propertyName\"\r\n >\r\n <smart-ui-action-toolbar\r\n #headerToolbar\r\n [id]=\"\r\n smartTable.getGridId()\r\n ? smartTable.getGridId() + '_headerToolbar'\r\n : 'grid_not_initialized'\r\n \"\r\n >\r\n </smart-ui-action-toolbar>\r\n </th>\r\n } @else {\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n [ngClass]=\"getColumnClasses(smartTable.customSmartTableHeaders![i])\"\r\n [ngStyle]=\"getColumnStyles(smartTable.customSmartTableHeaders![i])\"\r\n [attr.data-testid]=\"smartTable.customSmartTableHeaders![i].propertyName\"\r\n >\r\n <div\r\n *ngIf=\"\r\n header === 'icon' || header === 'img' || header === 'options' || header === 'button'\r\n \"\r\n ></div>\r\n <div *ngIf=\"header === 'select'\">\r\n <mat-checkbox\r\n *ngIf=\"smartTable.customSmartTableHeaders![i].showCheckboxInHeader\"\r\n (change)=\"$event ? toggleAllRows() : null\"\r\n [checked]=\"smartTable.selection!.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"smartTable.selection!.hasValue() && !isAllSelected()\"\r\n [aria-label]=\"checkboxLabel()\"\r\n >\r\n </mat-checkbox>\r\n <div *ngIf=\"!smartTable.customSmartTableHeaders![i].showCheckboxInHeader\">\r\n {{ smartTable.customTableHeaders[i] }}\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n header !== 'icon' &&\r\n header !== 'img' &&\r\n header !== 'options' &&\r\n header !== 'button' &&\r\n header !== 'select' &&\r\n header !== 'expand' &&\r\n header !== 'actions'\r\n \"\r\n >\r\n <div *ngIf=\"smartTable.sortable; then sortable; else notSortable\"></div>\r\n <ng-template #sortable>\r\n <button\r\n (click)=\"sortButtonClicked($event, smartTable.customSmartTableHeaders![i])\"\r\n *ngIf=\"smartTable.sortable && isSortable(smartTable.customSmartTableHeaders![i])\"\r\n mat-button\r\n class=\"sortableHeaderButton\"\r\n >\r\n {{ smartTable.customTableHeaders[i] }}\r\n <smart-icon\r\n class=\"sortableHeaderButtonIcon\"\r\n *ngIf=\"getSortIcon(header)\"\r\n title=\"sort\"\r\n [icon]=\"getSortIcon(header)!\"\r\n ></smart-icon>\r\n <smart-icon\r\n class=\"sortableHeaderButtonIcon\"\r\n *ngIf=\"hasSortNumIcon(header)\"\r\n title=\"sort\"\r\n [icon]=\"getSortNumIcon(header)\"\r\n ></smart-icon>\r\n </button>\r\n </ng-template>\r\n <ng-template #notSortable>\r\n {{ smartTable.customTableHeaders[i] }}\r\n </ng-template>\r\n </div>\r\n </th>\r\n }\r\n <td mat-cell *matCellDef=\"let element\" [ngClass]=\"isDisabled(element) ? 'disabledRow' : ''\">\r\n <mat-checkbox\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders &&\r\n smartTable.customSmartTableHeaders[i].propertyName === 'select' &&\r\n !isDisabled(element)\r\n \"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"\r\n $event\r\n ? setSelection(\r\n smartTable.selectionProperty\r\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\r\n : element\r\n )\r\n : null\r\n \"\r\n [disabled]=\"isDisabled(element)\"\r\n [checked]=\"\r\n smartTable.selection!.isSelected(\r\n smartTable.selectionProperty\r\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\r\n : element\r\n )\r\n \"\r\n [aria-label]=\"\r\n checkboxLabel(\r\n smartTable.selectionProperty\r\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\r\n : element\r\n )\r\n \"\r\n >\r\n </mat-checkbox>\r\n <div\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].properties\r\n \"\r\n >\r\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATETIME\">\r\n {{\r\n getValue(element, header)\r\n | smartDateTime: smartTable.customSmartTableHeaders[i].properties?.dateFormat\r\n }}\r\n </div>\r\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATE\">\r\n {{\r\n getValue(element, header)\r\n | smartDate: smartTable.customSmartTableHeaders[i].properties?.dateFormat\r\n }}\r\n </div>\r\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().TIME\">\r\n {{\r\n getValue(element, header)\r\n | smartTime: smartTable.customSmartTableHeaders[i].properties?.dateFormat\r\n }}\r\n </div>\r\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().CHECKBOX\">\r\n <mat-checkbox [disabled]=\"true\" [checked]=\"getValue(element, header)\"></mat-checkbox>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders[i].properties?.type === type().ICON &&\r\n smartTable.customSmartTableHeaders[i].properties?.icons?.length\r\n \"\r\n >\r\n <smart-icon\r\n [smartTooltip]=\"getToolTip(element, i)\"\r\n [icon]=\"getIcon(getValue(element, header), i)!\"\r\n [color]=\"getColor(getValue(element, header), i)\"\r\n >\r\n </smart-icon>\r\n </div>\r\n </div>\r\n <div class=\"smart-table-icon-container\">\r\n <div *ngFor=\"let ir of getImageResourceIcons(element, header)\">\r\n <smart-icon [imageResource]=\"ir\"> </smart-icon>\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].buttons\"\r\n class=\"smart-table-buttons-col\"\r\n >\r\n <div *ngFor=\"let button of smartTable.customSmartTableHeaders[i].buttons\">\r\n <div *ngIf=\"showButton(button, element)\" [ngSwitch]=\"button.type\">\r\n <button\r\n (click)=\"customButtonClicked($event, button, element)\"\r\n *ngSwitchCase=\"smartTableButtonType.ICON\"\r\n mat-icon-button\r\n color=\"{{ button.color }}\"\r\n >\r\n <smart-icon title=\"{{ button.label }}\" [icon]=\"button.icon!\"></smart-icon>\r\n </button>\r\n <button\r\n (click)=\"customButtonClicked($event, button, element)\"\r\n *ngSwitchCase=\"smartTableButtonType.NORMAL\"\r\n mat-button\r\n color=\"{{ button.color }}\"\r\n >\r\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\r\n {{ button.label ?? (button.translator ? button.translator(element).title : '') }}\r\n </button>\r\n <button\r\n (click)=\"customButtonClicked($event, button, element)\"\r\n *ngSwitchCase=\"smartTableButtonType.RAISED\"\r\n mat-raised-button\r\n color=\"{{ button.color }}\"\r\n >\r\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\r\n {{ button.label ?? (button.translator ? button.translator(element).title : '') }}\r\n </button>\r\n <!------ MENU ------>\r\n <div *ngSwitchCase=\"smartTableButtonType.MENU\" class=\"menu-button\">\r\n <!------ DEFAULT_ACTION_COLUMN ID TOOLBAR ------>\r\n <smart-ui-action-toolbar\r\n [uiActionModels]=\"getRowColumnAction(element, defaultActionToolbarId)\"\r\n ></smart-ui-action-toolbar>\r\n\r\n <!------ GENERIC HAMBURGER ------>\r\n <!------ TOOLBAR ------>\r\n <button\r\n *ngIf=\"showMenuButton(element, button)\"\r\n mat-button\r\n [matMenuTriggerFor]=\"menu\"\r\n (click)=\"customButtonClicked($event, button, element, undefined, true)\"\r\n color=\"{{ button.color }}\"\r\n >\r\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\r\n <!-- {{ button.label ?? (button.translator ? button.translator(element).title : '') }} -->\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <div *ngIf=\"button.menuItemButtons\">\r\n <button\r\n *ngFor=\"let btn of getMenuButtons(element, button)\"\r\n (click)=\"customButtonClicked($event, btn, element, undefined, true)\"\r\n mat-menu-item\r\n >\r\n <smart-icon\r\n *ngIf=\"btn?.translator(btn)?.icon\"\r\n [icon]=\"btn!.translator!(btn)!.icon!\"\r\n ></smart-icon>\r\n {{ btn?.translator(btn)?.title }}\r\n </button>\r\n </div>\r\n <div *ngIf=\"button.menuItemButtonsPropertyName\">\r\n <div *ngFor=\"let btn of getMenuItemButtonsPropertyName(element, button)\">\r\n <button\r\n *ngIf=\"btn.code !== ACTION_SEPERATOR\"\r\n (click)=\"customButtonClicked($event, button, element, btn, true)\"\r\n mat-menu-item\r\n [disabled]=\"btn.disabled\"\r\n [smartTooltip]=\"\r\n btn?.descriptor?.tooltip\r\n ? btn?.descriptor?.tooltip\r\n : button.translator!(btn).tooltip\r\n \"\r\n >\r\n <div\r\n class=\"smart-table-icon-container\"\r\n [ngClass]=\"\r\n button.translator!(btn).iconPosition === 'POST' ? 'reversed' : ''\r\n \"\r\n ><smart-icon\r\n *ngIf=\"button.translator!(btn).icon\"\r\n [icon]=\"button.translator!(btn).icon!\"\r\n ></smart-icon>\r\n {{ button.translator!(btn).title }}</div\r\n >\r\n </button>\r\n <mat-divider *ngIf=\"btn.code === ACTION_SEPERATOR\"></mat-divider>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </div>\r\n\r\n <!------ MENU ------>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].icon\">\r\n <smart-icon\r\n *ngIf=\"smartTable.customSmartTableHeaders[i].icon?.icon\"\r\n [ngClass]=\"smartTable.customSmartTableHeaders[i].icon?.cssClass ?? ''\"\r\n [color]=\"smartTable.customSmartTableHeaders[i].icon?.color\"\r\n [icon]=\"smartTable.customSmartTableHeaders[i].icon!.icon\"\r\n >\r\n </smart-icon>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders &&\r\n smartTable.customSmartTableHeaders[i].translator !== undefined\r\n \"\r\n >\r\n {{ smartTable.customSmartTableHeaders[i].translator!(getValue(element, header)) }}\r\n </div>\r\n <button\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders &&\r\n smartTable.customSmartTableHeaders[i].propertyName === 'expand'\r\n \"\r\n mat-icon-button\r\n aria-label=\"expand row\"\r\n (click)=\"onToggle(element, $event)\"\r\n >\r\n <smart-icon *ngIf=\"expandedElement !== element\" [icon]=\"'keyboard_arrow_down'\"></smart-icon>\r\n <smart-icon *ngIf=\"expandedElement === element\" [icon]=\"'keyboard_arrow_up'\"></smart-icon>\r\n </button>\r\n <div\r\n *ngIf=\"\r\n !smartTable.customSmartTableHeaders ||\r\n (smartTable.customSmartTableHeaders &&\r\n !smartTable.customSmartTableHeaders[i].properties &&\r\n !smartTable.customSmartTableHeaders[i].icon &&\r\n !smartTable.customSmartTableHeaders[i].buttons &&\r\n !smartTable.customSmartTableHeaders[i].translator &&\r\n !(smartTable.customSmartTableHeaders[i].propertyName === 'select') &&\r\n !(smartTable.customSmartTableHeaders[i].propertyName === 'expand'))\r\n \"\r\n >\r\n <smart-icon *ngIf=\"header === 'icon'\" [icon]=\"getValue(element, header)!\"> </smart-icon>\r\n <img\r\n *ngIf=\"header === 'img'\"\r\n [src]=\"getValue(element, header)\"\r\n alt=\"\"\r\n class=\"smarttableImg\"\r\n />\r\n <!------ TOOLBAR ------>\r\n <ng-container *ngIf=\"showCellToolbar(element, header)\">\r\n <smart-ui-action-toolbar\r\n [uiActionModels]=\"getRowColumnAction(element, header)\"\r\n ></smart-ui-action-toolbar>\r\n </ng-container>\r\n <!------ TOOLBAR ------>\r\n <div\r\n *ngIf=\"\r\n header !== 'icon' &&\r\n header !== 'img' &&\r\n header !== 'option' &&\r\n header !== 'button' &&\r\n !isImageResource(element, header)\r\n \"\r\n [innerHtml]=\"getValue(element, header)\"\r\n ></div>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Expanded Content Column - The detail row is made up of this one column that spans across all columns -->\r\n <ng-container matColumnDef=\"expandedDetail\">\r\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"smartTable.tableHeaders.length\">\r\n <div\r\n class=\"example-element-detail\"\r\n [@detailExpand]=\"element == expandedElement ? 'expanded' : 'collapsed'\"\r\n >\r\n <ng-template #expandedArea></ng-template>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"smartTable.tableHeaders; sticky: true\"></tr>\r\n <ng-container *matRowDef=\"let element; columns: smartTable.tableHeaders\">\r\n <tr\r\n mat-row\r\n class=\"example-element-row\"\r\n [class.example-expanded-row]=\"expandedElement === element\"\r\n [ngClass]=\"getRowClasses(element)\"\r\n [ngStyle]=\"getRowStyles(element)\"\r\n (click)=\"handleOnRowClick(element)\"\r\n (dblclick)=\"handleOnRowDoubleClick($event, element)\"\r\n [attr.data-testid]=\"element?.id ?? null\"\r\n ></tr>\r\n <lib-default-actions-popup\r\n *ngIf=\"smartTable.defaultActionCodes && smartTable.defaultActionCodes.length > 0\"\r\n #defaultActionMenu\r\n [buttons]=\"getDefaultActionsForRow(element)!\"\r\n [row]=\"element\"\r\n ></lib-default-actions-popup>\r\n </ng-container>\r\n <tr mat-row *matRowDef=\"let row; columns: ['expandedDetail']\" class=\"example-detail-row\"></tr>\r\n</table>\r\n", styles: [".full-width{width:100%}.smarttableImg{width:25px}.smartTableRowHover:hover{cursor:pointer}tr.example-detail-row{height:0}tr.example-element-row:not(.example-expanded-row):hover{background:#f5f5f5}tr.example-element-row:not(.example-expanded-row):active{background:#efefef}.example-element-row td{border-bottom-width:0}.example-element-detail{overflow:hidden;display:flex;flex-direction:column}.example-element-diagram{min-width:80px;border:2px solid black;padding:8px;font-weight:lighter;margin:8px 0;height:104px}.example-element-symbol{font-weight:700;font-size:40px;line-height:normal}.example-element-description{padding:16px}.example-element-description-attribution{opacity:.5}.disabledRow{color:var(--disabled)}.disabledRow:hover{cursor:default}.smart-table-buttons-col{display:flex;flex-direction:row;justify-content:flex-end}.sortableHeaderButton{margin:0!important;padding:0!important;text-align:left!important}.selected{background-color:var(--primary-light-color)}.smart-table-icon-container{display:flex;flex-direction:row;justify-content:space-between;white-space:initial}.reversed{flex-direction:row-reverse;gap:1rem}:host ::ng-deep .mat-mdc-menu-item{line-height:normal!important}.mat-mdc-menu-item[disabled]{cursor:default!important}.menu-button{display:flex;flex-direction:row;justify-content:flex-end;text-align:-webkit-right;align-items:center}.captionTitle{font-size:1.5rem;align-content:center;padding:.5rem .75rem;text-align:start;border-top:1px solid rgba(0,0,0,.12);border-bottom:1px solid rgba(0,0,0,.12);background:#f5f5f5}\n"], dependencies: [{ kind: "directive", type: i2.SmartTooltipDirective, selector: "[smartTooltip]", inputs: ["smartTooltip"] }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i6.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i6.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i6.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i6.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i6.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i6.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i6.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i6.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i6.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i6.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i7.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i7.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i8.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color", "imageResource"] }, { kind: "component", type: i9.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i10.UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService", "id", "scrollOnWrap", "toolbarPropertes"] }, { kind: "component", type: i11.DefaultActionsPopupComponent, selector: "lib-default-actions-popup", inputs: ["buttons", "row", "colIdx"] }, { kind: "pipe", type: i12.SmartDateTimePipe, name: "smartDateTime" }, { kind: "pipe", type: i12.SmartDatePipe, name: "smartDate" }, { kind: "pipe", type: i12.SmartTimePipe, name: "smartTime" }], animations: [
22
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: MaterialTableComponent, selector: "lib-material-table", usesInheritance: true, ngImport: i0, template: "<table\n #myTable\n mat-table\n [dataSource]=\"smartTable.tableRows\"\n class=\"full-width\"\n multiTemplateDataRows\n>\n <!-- Column Descriptor -->\n @if (smartTable.title) {\n <caption *ngIf=\"smartTable.title\" class=\"captionTitle\">\n {{ smartTable.title }}\n </caption>\n }\n <ng-container\n *ngFor=\"let header of smartTable.tableHeaders; let i = index\"\n matColumnDef=\"{{ header }}\"\n >\n <!-- my_menu is the implicit action column present on all tables: -->\n @if ('my_menu' === header) {\n <th\n mat-header-cell\n *matHeaderCellDef\n [ngClass]=\"getColumnClasses(smartTable.customSmartTableHeaders![i])\"\n [ngStyle]=\"getColumnStyles(smartTable.customSmartTableHeaders![i])\"\n [attr.data-testid]=\"smartTable.customSmartTableHeaders![i].propertyName\"\n >\n <smart-ui-action-toolbar\n #headerToolbar\n [id]=\"\n smartTable.getGridId()\n ? smartTable.getGridId() + '_headerToolbar'\n : 'grid_not_initialized'\n \"\n >\n </smart-ui-action-toolbar>\n </th>\n } @else {\n <th\n mat-header-cell\n *matHeaderCellDef\n [ngClass]=\"getColumnClasses(smartTable.customSmartTableHeaders![i])\"\n [ngStyle]=\"getColumnStyles(smartTable.customSmartTableHeaders![i])\"\n [attr.data-testid]=\"smartTable.customSmartTableHeaders![i].propertyName\"\n >\n <div\n *ngIf=\"\n header === 'icon' || header === 'img' || header === 'options' || header === 'button'\n \"\n ></div>\n <div *ngIf=\"header === 'select'\">\n <mat-checkbox\n *ngIf=\"smartTable.customSmartTableHeaders![i].showCheckboxInHeader\"\n (change)=\"$event ? toggleAllRows() : null\"\n [checked]=\"smartTable.selection!.hasValue() && isAllSelected()\"\n [indeterminate]=\"smartTable.selection!.hasValue() && !isAllSelected()\"\n [aria-label]=\"checkboxLabel()\"\n >\n </mat-checkbox>\n <div *ngIf=\"!smartTable.customSmartTableHeaders![i].showCheckboxInHeader\">\n {{ smartTable.customTableHeaders[i] }}\n </div>\n </div>\n <div\n *ngIf=\"\n header !== 'icon' &&\n header !== 'img' &&\n header !== 'options' &&\n header !== 'button' &&\n header !== 'select' &&\n header !== 'expand' &&\n header !== 'actions'\n \"\n >\n <div *ngIf=\"smartTable.sortable; then sortable; else notSortable\"></div>\n <ng-template #sortable>\n <button\n (click)=\"sortButtonClicked($event, smartTable.customSmartTableHeaders![i])\"\n *ngIf=\"smartTable.sortable && isSortable(smartTable.customSmartTableHeaders![i])\"\n mat-button\n class=\"sortableHeaderButton\"\n >\n {{ smartTable.customTableHeaders[i] }}\n <smart-icon\n class=\"sortableHeaderButtonIcon\"\n *ngIf=\"getSortIcon(header)\"\n title=\"sort\"\n [icon]=\"getSortIcon(header)!\"\n ></smart-icon>\n <smart-icon\n class=\"sortableHeaderButtonIcon\"\n *ngIf=\"hasSortNumIcon(header)\"\n title=\"sort\"\n [icon]=\"getSortNumIcon(header)\"\n ></smart-icon>\n </button>\n </ng-template>\n <ng-template #notSortable>\n {{ smartTable.customTableHeaders[i] }}\n </ng-template>\n </div>\n </th>\n }\n <td mat-cell *matCellDef=\"let element\" [ngClass]=\"isDisabled(element) ? 'disabledRow' : ''\">\n <mat-checkbox\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].propertyName === 'select' &&\n !isDisabled(element)\n \"\n (click)=\"$event.stopPropagation()\"\n (change)=\"\n $event\n ? setSelection(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\n : element\n )\n : null\n \"\n [disabled]=\"isDisabled(element)\"\n [checked]=\"\n smartTable.selection!.isSelected(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\n : element\n )\n \"\n [aria-label]=\"\n checkboxLabel(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\n : element\n )\n \"\n >\n </mat-checkbox>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].properties\n \"\n >\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATETIME\">\n {{\n getValue(element, header)\n | smartDateTime: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATE\">\n {{\n getValue(element, header)\n | smartDate: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().TIME\">\n {{\n getValue(element, header)\n | smartTime: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().CHECKBOX\">\n <mat-checkbox [disabled]=\"true\" [checked]=\"getValue(element, header)\"></mat-checkbox>\n </div>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders[i].properties?.type === type().ICON &&\n smartTable.customSmartTableHeaders[i].properties?.icons?.length\n \"\n >\n <smart-icon\n [smartTooltip]=\"getToolTip(element, i)\"\n [icon]=\"getIcon(getValue(element, header), i)!\"\n [color]=\"getColor(getValue(element, header), i)\"\n >\n </smart-icon>\n </div>\n </div>\n <div class=\"smart-table-icon-container\">\n <div *ngFor=\"let ir of getImageResourceIcons(element, header)\">\n <smart-icon [imageResource]=\"ir\"> </smart-icon>\n </div>\n </div>\n <div\n *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].buttons\"\n class=\"smart-table-buttons-col\"\n >\n <div *ngFor=\"let button of smartTable.customSmartTableHeaders[i].buttons\">\n <div *ngIf=\"showButton(button, element)\" [ngSwitch]=\"button.type\">\n <button\n (click)=\"customButtonClicked($event, button, element)\"\n *ngSwitchCase=\"smartTableButtonType.ICON\"\n mat-icon-button\n color=\"{{ button.color }}\"\n >\n <smart-icon title=\"{{ button.label }}\" [icon]=\"button.icon!\"></smart-icon>\n </button>\n <button\n (click)=\"customButtonClicked($event, button, element)\"\n *ngSwitchCase=\"smartTableButtonType.NORMAL\"\n mat-button\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n {{ button.label ?? (button.translator ? button.translator(element).title : '') }}\n </button>\n <button\n (click)=\"customButtonClicked($event, button, element)\"\n *ngSwitchCase=\"smartTableButtonType.RAISED\"\n mat-raised-button\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n {{ button.label ?? (button.translator ? button.translator(element).title : '') }}\n </button>\n <!------ MENU ------>\n <div *ngSwitchCase=\"smartTableButtonType.MENU\" class=\"menu-button\">\n <!------ DEFAULT_ACTION_COLUMN ID TOOLBAR ------>\n <smart-ui-action-toolbar\n [uiActionModels]=\"getRowColumnAction(element, defaultActionToolbarId)\"\n ></smart-ui-action-toolbar>\n\n <!------ GENERIC HAMBURGER ------>\n <!------ TOOLBAR ------>\n <button\n *ngIf=\"showMenuButton(element, button)\"\n mat-button\n [matMenuTriggerFor]=\"menu\"\n (click)=\"customButtonClicked($event, button, element, undefined, true)\"\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n <!-- {{ button.label ?? (button.translator ? button.translator(element).title : '') }} -->\n </button>\n <mat-menu #menu=\"matMenu\">\n <div *ngIf=\"button.menuItemButtons\">\n <button\n *ngFor=\"let btn of getMenuButtons(element, button)\"\n (click)=\"customButtonClicked($event, btn, element, undefined, true)\"\n mat-menu-item\n >\n <smart-icon\n *ngIf=\"btn?.translator(btn)?.icon\"\n [icon]=\"btn!.translator!(btn)!.icon!\"\n ></smart-icon>\n {{ btn?.translator(btn)?.title }}\n </button>\n </div>\n <div *ngIf=\"button.menuItemButtonsPropertyName\">\n <div *ngFor=\"let btn of getMenuItemButtonsPropertyName(element, button)\">\n <button\n *ngIf=\"btn.code !== ACTION_SEPERATOR\"\n (click)=\"customButtonClicked($event, button, element, btn, true)\"\n mat-menu-item\n [disabled]=\"btn.disabled\"\n [smartTooltip]=\"\n btn?.descriptor?.tooltip\n ? btn?.descriptor?.tooltip\n : button.translator!(btn).tooltip\n \"\n >\n <div\n class=\"smart-table-icon-container\"\n [ngClass]=\"\n button.translator!(btn).iconPosition === 'POST' ? 'reversed' : ''\n \"\n ><smart-icon\n *ngIf=\"button.translator!(btn).icon\"\n [icon]=\"button.translator!(btn).icon!\"\n ></smart-icon>\n {{ button.translator!(btn).title }}</div\n >\n </button>\n <mat-divider *ngIf=\"btn.code === ACTION_SEPERATOR\"></mat-divider>\n </div>\n </div>\n </mat-menu>\n </div>\n\n <!------ MENU ------>\n </div>\n </div>\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].icon\">\n <smart-icon\n *ngIf=\"smartTable.customSmartTableHeaders[i].icon?.icon\"\n [ngClass]=\"smartTable.customSmartTableHeaders[i].icon?.cssClass ?? ''\"\n [color]=\"smartTable.customSmartTableHeaders[i].icon?.color\"\n [icon]=\"smartTable.customSmartTableHeaders[i].icon!.icon\"\n >\n </smart-icon>\n </div>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].translator !== undefined\n \"\n >\n {{ smartTable.customSmartTableHeaders[i].translator!(getValue(element, header)) }}\n </div>\n <button\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].propertyName === 'expand'\n \"\n mat-icon-button\n aria-label=\"expand row\"\n (click)=\"onToggle(element, $event)\"\n >\n <smart-icon *ngIf=\"expandedElement !== element\" [icon]=\"'keyboard_arrow_down'\"></smart-icon>\n <smart-icon *ngIf=\"expandedElement === element\" [icon]=\"'keyboard_arrow_up'\"></smart-icon>\n </button>\n <div\n *ngIf=\"\n !smartTable.customSmartTableHeaders ||\n (smartTable.customSmartTableHeaders &&\n !smartTable.customSmartTableHeaders[i].properties &&\n !smartTable.customSmartTableHeaders[i].icon &&\n !smartTable.customSmartTableHeaders[i].buttons &&\n !smartTable.customSmartTableHeaders[i].translator &&\n !(smartTable.customSmartTableHeaders[i].propertyName === 'select') &&\n !(smartTable.customSmartTableHeaders[i].propertyName === 'expand'))\n \"\n >\n <smart-icon *ngIf=\"header === 'icon'\" [icon]=\"getValue(element, header)!\"> </smart-icon>\n <img\n *ngIf=\"header === 'img'\"\n [src]=\"getValue(element, header)\"\n alt=\"\"\n class=\"smarttableImg\"\n />\n <!------ TOOLBAR ------>\n <ng-container *ngIf=\"showCellToolbar(element, header)\">\n <smart-ui-action-toolbar\n [uiActionModels]=\"getRowColumnAction(element, header)\"\n ></smart-ui-action-toolbar>\n </ng-container>\n <!------ TOOLBAR ------>\n <div\n *ngIf=\"\n header !== 'icon' &&\n header !== 'img' &&\n header !== 'option' &&\n header !== 'button' &&\n !isImageResource(element, header)\n \"\n [innerHtml]=\"getValue(element, header)\"\n ></div>\n </div>\n </td>\n </ng-container>\n\n <!-- Expanded Content Column - The detail row is made up of this one column that spans across all columns -->\n <ng-container matColumnDef=\"expandedDetail\">\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"smartTable.tableHeaders.length\">\n <div\n class=\"example-element-detail\"\n [@detailExpand]=\"element == expandedElement ? 'expanded' : 'collapsed'\"\n >\n <ng-template #expandedArea></ng-template>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"smartTable.tableHeaders; sticky: true\"></tr>\n <ng-container *matRowDef=\"let element; columns: smartTable.tableHeaders\">\n <tr\n mat-row\n class=\"example-element-row\"\n [class.example-expanded-row]=\"expandedElement === element\"\n [ngClass]=\"getRowClasses(element)\"\n [ngStyle]=\"getRowStyles(element)\"\n (click)=\"handleOnRowClick(element)\"\n (dblclick)=\"handleOnRowDoubleClick($event, element)\"\n [attr.data-testid]=\"element?.id ?? null\"\n ></tr>\n <lib-default-actions-popup\n *ngIf=\"smartTable.defaultActionCodes && smartTable.defaultActionCodes.length > 0\"\n #defaultActionMenu\n [buttons]=\"getDefaultActionsForRow(element)!\"\n [row]=\"element\"\n ></lib-default-actions-popup>\n </ng-container>\n <tr mat-row *matRowDef=\"let row; columns: ['expandedDetail']\" class=\"example-detail-row\"></tr>\n</table>\n", styles: [".full-width{width:100%}.smarttableImg{width:25px}.smartTableRowHover:hover{cursor:pointer}tr.example-detail-row{height:0}tr.example-element-row:not(.example-expanded-row):hover{background:#f5f5f5}tr.example-element-row:not(.example-expanded-row):active{background:#efefef}.example-element-row td{border-bottom-width:0}.example-element-detail{overflow:hidden;display:flex;flex-direction:column}.example-element-diagram{min-width:80px;border:2px solid black;padding:8px;font-weight:lighter;margin:8px 0;height:104px}.example-element-symbol{font-weight:700;font-size:40px;line-height:normal}.example-element-description{padding:16px}.example-element-description-attribution{opacity:.5}.disabledRow{color:var(--disabled)}.disabledRow:hover{cursor:default}.smart-table-buttons-col{display:flex;flex-direction:row;justify-content:flex-end}.sortableHeaderButton{margin:0!important;padding:0!important;text-align:left!important}.selected{background-color:var(--primary-light-color)}.smart-table-icon-container{display:flex;flex-direction:row;justify-content:space-between;white-space:initial}.reversed{flex-direction:row-reverse;gap:1rem}:host ::ng-deep .mat-mdc-menu-item{line-height:normal!important}.mat-mdc-menu-item[disabled]{cursor:default!important}.menu-button{display:flex;flex-direction:row;justify-content:flex-end;text-align:-webkit-right;align-items:center}.captionTitle{font-size:1.5rem;align-content:center;padding:.5rem .75rem;text-align:start;border-top:1px solid rgba(0,0,0,.12);border-bottom:1px solid rgba(0,0,0,.12);background:#f5f5f5}\n"], dependencies: [{ kind: "directive", type: i2.SmartTooltipDirective, selector: "[smartTooltip]", inputs: ["smartTooltip"] }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i6.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i6.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i6.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i6.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i6.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i6.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i6.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i6.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i6.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i6.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i7.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i7.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i8.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color", "imageResource"] }, { kind: "component", type: i9.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i10.UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService", "id", "scrollOnWrap", "toolbarPropertes"] }, { kind: "component", type: i11.DefaultActionsPopupComponent, selector: "lib-default-actions-popup", inputs: ["buttons", "row", "colIdx"] }, { kind: "pipe", type: i12.SmartDateTimePipe, name: "smartDateTime" }, { kind: "pipe", type: i12.SmartDatePipe, name: "smartDate" }, { kind: "pipe", type: i12.SmartTimePipe, name: "smartTime" }], animations: [
23
23
  trigger('detailExpand', [
24
24
  state('collapsed', style({ height: '0px', minHeight: '0' })),
25
25
  state('expanded', style({ height: '*' })),
@@ -35,6 +35,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
35
35
  state('expanded', style({ height: '*' })),
36
36
  transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),
37
37
  ]),
38
- ], template: "<table\r\n #myTable\r\n mat-table\r\n [dataSource]=\"smartTable.tableRows\"\r\n class=\"full-width\"\r\n multiTemplateDataRows\r\n>\r\n <!-- Column Descriptor -->\r\n @if (smartTable.title) {\r\n <caption *ngIf=\"smartTable.title\" class=\"captionTitle\">\r\n {{ smartTable.title }}\r\n </caption>\r\n }\r\n <ng-container\r\n *ngFor=\"let header of smartTable.tableHeaders; let i = index\"\r\n matColumnDef=\"{{ header }}\"\r\n >\r\n <!-- my_menu is the implicit action column present on all tables: -->\r\n @if ('my_menu' === header) {\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n [ngClass]=\"getColumnClasses(smartTable.customSmartTableHeaders![i])\"\r\n [ngStyle]=\"getColumnStyles(smartTable.customSmartTableHeaders![i])\"\r\n [attr.data-testid]=\"smartTable.customSmartTableHeaders![i].propertyName\"\r\n >\r\n <smart-ui-action-toolbar\r\n #headerToolbar\r\n [id]=\"\r\n smartTable.getGridId()\r\n ? smartTable.getGridId() + '_headerToolbar'\r\n : 'grid_not_initialized'\r\n \"\r\n >\r\n </smart-ui-action-toolbar>\r\n </th>\r\n } @else {\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n [ngClass]=\"getColumnClasses(smartTable.customSmartTableHeaders![i])\"\r\n [ngStyle]=\"getColumnStyles(smartTable.customSmartTableHeaders![i])\"\r\n [attr.data-testid]=\"smartTable.customSmartTableHeaders![i].propertyName\"\r\n >\r\n <div\r\n *ngIf=\"\r\n header === 'icon' || header === 'img' || header === 'options' || header === 'button'\r\n \"\r\n ></div>\r\n <div *ngIf=\"header === 'select'\">\r\n <mat-checkbox\r\n *ngIf=\"smartTable.customSmartTableHeaders![i].showCheckboxInHeader\"\r\n (change)=\"$event ? toggleAllRows() : null\"\r\n [checked]=\"smartTable.selection!.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"smartTable.selection!.hasValue() && !isAllSelected()\"\r\n [aria-label]=\"checkboxLabel()\"\r\n >\r\n </mat-checkbox>\r\n <div *ngIf=\"!smartTable.customSmartTableHeaders![i].showCheckboxInHeader\">\r\n {{ smartTable.customTableHeaders[i] }}\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n header !== 'icon' &&\r\n header !== 'img' &&\r\n header !== 'options' &&\r\n header !== 'button' &&\r\n header !== 'select' &&\r\n header !== 'expand' &&\r\n header !== 'actions'\r\n \"\r\n >\r\n <div *ngIf=\"smartTable.sortable; then sortable; else notSortable\"></div>\r\n <ng-template #sortable>\r\n <button\r\n (click)=\"sortButtonClicked($event, smartTable.customSmartTableHeaders![i])\"\r\n *ngIf=\"smartTable.sortable && isSortable(smartTable.customSmartTableHeaders![i])\"\r\n mat-button\r\n class=\"sortableHeaderButton\"\r\n >\r\n {{ smartTable.customTableHeaders[i] }}\r\n <smart-icon\r\n class=\"sortableHeaderButtonIcon\"\r\n *ngIf=\"getSortIcon(header)\"\r\n title=\"sort\"\r\n [icon]=\"getSortIcon(header)!\"\r\n ></smart-icon>\r\n <smart-icon\r\n class=\"sortableHeaderButtonIcon\"\r\n *ngIf=\"hasSortNumIcon(header)\"\r\n title=\"sort\"\r\n [icon]=\"getSortNumIcon(header)\"\r\n ></smart-icon>\r\n </button>\r\n </ng-template>\r\n <ng-template #notSortable>\r\n {{ smartTable.customTableHeaders[i] }}\r\n </ng-template>\r\n </div>\r\n </th>\r\n }\r\n <td mat-cell *matCellDef=\"let element\" [ngClass]=\"isDisabled(element) ? 'disabledRow' : ''\">\r\n <mat-checkbox\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders &&\r\n smartTable.customSmartTableHeaders[i].propertyName === 'select' &&\r\n !isDisabled(element)\r\n \"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"\r\n $event\r\n ? setSelection(\r\n smartTable.selectionProperty\r\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\r\n : element\r\n )\r\n : null\r\n \"\r\n [disabled]=\"isDisabled(element)\"\r\n [checked]=\"\r\n smartTable.selection!.isSelected(\r\n smartTable.selectionProperty\r\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\r\n : element\r\n )\r\n \"\r\n [aria-label]=\"\r\n checkboxLabel(\r\n smartTable.selectionProperty\r\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\r\n : element\r\n )\r\n \"\r\n >\r\n </mat-checkbox>\r\n <div\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].properties\r\n \"\r\n >\r\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATETIME\">\r\n {{\r\n getValue(element, header)\r\n | smartDateTime: smartTable.customSmartTableHeaders[i].properties?.dateFormat\r\n }}\r\n </div>\r\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATE\">\r\n {{\r\n getValue(element, header)\r\n | smartDate: smartTable.customSmartTableHeaders[i].properties?.dateFormat\r\n }}\r\n </div>\r\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().TIME\">\r\n {{\r\n getValue(element, header)\r\n | smartTime: smartTable.customSmartTableHeaders[i].properties?.dateFormat\r\n }}\r\n </div>\r\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().CHECKBOX\">\r\n <mat-checkbox [disabled]=\"true\" [checked]=\"getValue(element, header)\"></mat-checkbox>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders[i].properties?.type === type().ICON &&\r\n smartTable.customSmartTableHeaders[i].properties?.icons?.length\r\n \"\r\n >\r\n <smart-icon\r\n [smartTooltip]=\"getToolTip(element, i)\"\r\n [icon]=\"getIcon(getValue(element, header), i)!\"\r\n [color]=\"getColor(getValue(element, header), i)\"\r\n >\r\n </smart-icon>\r\n </div>\r\n </div>\r\n <div class=\"smart-table-icon-container\">\r\n <div *ngFor=\"let ir of getImageResourceIcons(element, header)\">\r\n <smart-icon [imageResource]=\"ir\"> </smart-icon>\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].buttons\"\r\n class=\"smart-table-buttons-col\"\r\n >\r\n <div *ngFor=\"let button of smartTable.customSmartTableHeaders[i].buttons\">\r\n <div *ngIf=\"showButton(button, element)\" [ngSwitch]=\"button.type\">\r\n <button\r\n (click)=\"customButtonClicked($event, button, element)\"\r\n *ngSwitchCase=\"smartTableButtonType.ICON\"\r\n mat-icon-button\r\n color=\"{{ button.color }}\"\r\n >\r\n <smart-icon title=\"{{ button.label }}\" [icon]=\"button.icon!\"></smart-icon>\r\n </button>\r\n <button\r\n (click)=\"customButtonClicked($event, button, element)\"\r\n *ngSwitchCase=\"smartTableButtonType.NORMAL\"\r\n mat-button\r\n color=\"{{ button.color }}\"\r\n >\r\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\r\n {{ button.label ?? (button.translator ? button.translator(element).title : '') }}\r\n </button>\r\n <button\r\n (click)=\"customButtonClicked($event, button, element)\"\r\n *ngSwitchCase=\"smartTableButtonType.RAISED\"\r\n mat-raised-button\r\n color=\"{{ button.color }}\"\r\n >\r\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\r\n {{ button.label ?? (button.translator ? button.translator(element).title : '') }}\r\n </button>\r\n <!------ MENU ------>\r\n <div *ngSwitchCase=\"smartTableButtonType.MENU\" class=\"menu-button\">\r\n <!------ DEFAULT_ACTION_COLUMN ID TOOLBAR ------>\r\n <smart-ui-action-toolbar\r\n [uiActionModels]=\"getRowColumnAction(element, defaultActionToolbarId)\"\r\n ></smart-ui-action-toolbar>\r\n\r\n <!------ GENERIC HAMBURGER ------>\r\n <!------ TOOLBAR ------>\r\n <button\r\n *ngIf=\"showMenuButton(element, button)\"\r\n mat-button\r\n [matMenuTriggerFor]=\"menu\"\r\n (click)=\"customButtonClicked($event, button, element, undefined, true)\"\r\n color=\"{{ button.color }}\"\r\n >\r\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\r\n <!-- {{ button.label ?? (button.translator ? button.translator(element).title : '') }} -->\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <div *ngIf=\"button.menuItemButtons\">\r\n <button\r\n *ngFor=\"let btn of getMenuButtons(element, button)\"\r\n (click)=\"customButtonClicked($event, btn, element, undefined, true)\"\r\n mat-menu-item\r\n >\r\n <smart-icon\r\n *ngIf=\"btn?.translator(btn)?.icon\"\r\n [icon]=\"btn!.translator!(btn)!.icon!\"\r\n ></smart-icon>\r\n {{ btn?.translator(btn)?.title }}\r\n </button>\r\n </div>\r\n <div *ngIf=\"button.menuItemButtonsPropertyName\">\r\n <div *ngFor=\"let btn of getMenuItemButtonsPropertyName(element, button)\">\r\n <button\r\n *ngIf=\"btn.code !== ACTION_SEPERATOR\"\r\n (click)=\"customButtonClicked($event, button, element, btn, true)\"\r\n mat-menu-item\r\n [disabled]=\"btn.disabled\"\r\n [smartTooltip]=\"\r\n btn?.descriptor?.tooltip\r\n ? btn?.descriptor?.tooltip\r\n : button.translator!(btn).tooltip\r\n \"\r\n >\r\n <div\r\n class=\"smart-table-icon-container\"\r\n [ngClass]=\"\r\n button.translator!(btn).iconPosition === 'POST' ? 'reversed' : ''\r\n \"\r\n ><smart-icon\r\n *ngIf=\"button.translator!(btn).icon\"\r\n [icon]=\"button.translator!(btn).icon!\"\r\n ></smart-icon>\r\n {{ button.translator!(btn).title }}</div\r\n >\r\n </button>\r\n <mat-divider *ngIf=\"btn.code === ACTION_SEPERATOR\"></mat-divider>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </div>\r\n\r\n <!------ MENU ------>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].icon\">\r\n <smart-icon\r\n *ngIf=\"smartTable.customSmartTableHeaders[i].icon?.icon\"\r\n [ngClass]=\"smartTable.customSmartTableHeaders[i].icon?.cssClass ?? ''\"\r\n [color]=\"smartTable.customSmartTableHeaders[i].icon?.color\"\r\n [icon]=\"smartTable.customSmartTableHeaders[i].icon!.icon\"\r\n >\r\n </smart-icon>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders &&\r\n smartTable.customSmartTableHeaders[i].translator !== undefined\r\n \"\r\n >\r\n {{ smartTable.customSmartTableHeaders[i].translator!(getValue(element, header)) }}\r\n </div>\r\n <button\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders &&\r\n smartTable.customSmartTableHeaders[i].propertyName === 'expand'\r\n \"\r\n mat-icon-button\r\n aria-label=\"expand row\"\r\n (click)=\"onToggle(element, $event)\"\r\n >\r\n <smart-icon *ngIf=\"expandedElement !== element\" [icon]=\"'keyboard_arrow_down'\"></smart-icon>\r\n <smart-icon *ngIf=\"expandedElement === element\" [icon]=\"'keyboard_arrow_up'\"></smart-icon>\r\n </button>\r\n <div\r\n *ngIf=\"\r\n !smartTable.customSmartTableHeaders ||\r\n (smartTable.customSmartTableHeaders &&\r\n !smartTable.customSmartTableHeaders[i].properties &&\r\n !smartTable.customSmartTableHeaders[i].icon &&\r\n !smartTable.customSmartTableHeaders[i].buttons &&\r\n !smartTable.customSmartTableHeaders[i].translator &&\r\n !(smartTable.customSmartTableHeaders[i].propertyName === 'select') &&\r\n !(smartTable.customSmartTableHeaders[i].propertyName === 'expand'))\r\n \"\r\n >\r\n <smart-icon *ngIf=\"header === 'icon'\" [icon]=\"getValue(element, header)!\"> </smart-icon>\r\n <img\r\n *ngIf=\"header === 'img'\"\r\n [src]=\"getValue(element, header)\"\r\n alt=\"\"\r\n class=\"smarttableImg\"\r\n />\r\n <!------ TOOLBAR ------>\r\n <ng-container *ngIf=\"showCellToolbar(element, header)\">\r\n <smart-ui-action-toolbar\r\n [uiActionModels]=\"getRowColumnAction(element, header)\"\r\n ></smart-ui-action-toolbar>\r\n </ng-container>\r\n <!------ TOOLBAR ------>\r\n <div\r\n *ngIf=\"\r\n header !== 'icon' &&\r\n header !== 'img' &&\r\n header !== 'option' &&\r\n header !== 'button' &&\r\n !isImageResource(element, header)\r\n \"\r\n [innerHtml]=\"getValue(element, header)\"\r\n ></div>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Expanded Content Column - The detail row is made up of this one column that spans across all columns -->\r\n <ng-container matColumnDef=\"expandedDetail\">\r\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"smartTable.tableHeaders.length\">\r\n <div\r\n class=\"example-element-detail\"\r\n [@detailExpand]=\"element == expandedElement ? 'expanded' : 'collapsed'\"\r\n >\r\n <ng-template #expandedArea></ng-template>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"smartTable.tableHeaders; sticky: true\"></tr>\r\n <ng-container *matRowDef=\"let element; columns: smartTable.tableHeaders\">\r\n <tr\r\n mat-row\r\n class=\"example-element-row\"\r\n [class.example-expanded-row]=\"expandedElement === element\"\r\n [ngClass]=\"getRowClasses(element)\"\r\n [ngStyle]=\"getRowStyles(element)\"\r\n (click)=\"handleOnRowClick(element)\"\r\n (dblclick)=\"handleOnRowDoubleClick($event, element)\"\r\n [attr.data-testid]=\"element?.id ?? null\"\r\n ></tr>\r\n <lib-default-actions-popup\r\n *ngIf=\"smartTable.defaultActionCodes && smartTable.defaultActionCodes.length > 0\"\r\n #defaultActionMenu\r\n [buttons]=\"getDefaultActionsForRow(element)!\"\r\n [row]=\"element\"\r\n ></lib-default-actions-popup>\r\n </ng-container>\r\n <tr mat-row *matRowDef=\"let row; columns: ['expandedDetail']\" class=\"example-detail-row\"></tr>\r\n</table>\r\n", styles: [".full-width{width:100%}.smarttableImg{width:25px}.smartTableRowHover:hover{cursor:pointer}tr.example-detail-row{height:0}tr.example-element-row:not(.example-expanded-row):hover{background:#f5f5f5}tr.example-element-row:not(.example-expanded-row):active{background:#efefef}.example-element-row td{border-bottom-width:0}.example-element-detail{overflow:hidden;display:flex;flex-direction:column}.example-element-diagram{min-width:80px;border:2px solid black;padding:8px;font-weight:lighter;margin:8px 0;height:104px}.example-element-symbol{font-weight:700;font-size:40px;line-height:normal}.example-element-description{padding:16px}.example-element-description-attribution{opacity:.5}.disabledRow{color:var(--disabled)}.disabledRow:hover{cursor:default}.smart-table-buttons-col{display:flex;flex-direction:row;justify-content:flex-end}.sortableHeaderButton{margin:0!important;padding:0!important;text-align:left!important}.selected{background-color:var(--primary-light-color)}.smart-table-icon-container{display:flex;flex-direction:row;justify-content:space-between;white-space:initial}.reversed{flex-direction:row-reverse;gap:1rem}:host ::ng-deep .mat-mdc-menu-item{line-height:normal!important}.mat-mdc-menu-item[disabled]{cursor:default!important}.menu-button{display:flex;flex-direction:row;justify-content:flex-end;text-align:-webkit-right;align-items:center}.captionTitle{font-size:1.5rem;align-content:center;padding:.5rem .75rem;text-align:start;border-top:1px solid rgba(0,0,0,.12);border-bottom:1px solid rgba(0,0,0,.12);background:#f5f5f5}\n"] }]
38
+ ], template: "<table\n #myTable\n mat-table\n [dataSource]=\"smartTable.tableRows\"\n class=\"full-width\"\n multiTemplateDataRows\n>\n <!-- Column Descriptor -->\n @if (smartTable.title) {\n <caption *ngIf=\"smartTable.title\" class=\"captionTitle\">\n {{ smartTable.title }}\n </caption>\n }\n <ng-container\n *ngFor=\"let header of smartTable.tableHeaders; let i = index\"\n matColumnDef=\"{{ header }}\"\n >\n <!-- my_menu is the implicit action column present on all tables: -->\n @if ('my_menu' === header) {\n <th\n mat-header-cell\n *matHeaderCellDef\n [ngClass]=\"getColumnClasses(smartTable.customSmartTableHeaders![i])\"\n [ngStyle]=\"getColumnStyles(smartTable.customSmartTableHeaders![i])\"\n [attr.data-testid]=\"smartTable.customSmartTableHeaders![i].propertyName\"\n >\n <smart-ui-action-toolbar\n #headerToolbar\n [id]=\"\n smartTable.getGridId()\n ? smartTable.getGridId() + '_headerToolbar'\n : 'grid_not_initialized'\n \"\n >\n </smart-ui-action-toolbar>\n </th>\n } @else {\n <th\n mat-header-cell\n *matHeaderCellDef\n [ngClass]=\"getColumnClasses(smartTable.customSmartTableHeaders![i])\"\n [ngStyle]=\"getColumnStyles(smartTable.customSmartTableHeaders![i])\"\n [attr.data-testid]=\"smartTable.customSmartTableHeaders![i].propertyName\"\n >\n <div\n *ngIf=\"\n header === 'icon' || header === 'img' || header === 'options' || header === 'button'\n \"\n ></div>\n <div *ngIf=\"header === 'select'\">\n <mat-checkbox\n *ngIf=\"smartTable.customSmartTableHeaders![i].showCheckboxInHeader\"\n (change)=\"$event ? toggleAllRows() : null\"\n [checked]=\"smartTable.selection!.hasValue() && isAllSelected()\"\n [indeterminate]=\"smartTable.selection!.hasValue() && !isAllSelected()\"\n [aria-label]=\"checkboxLabel()\"\n >\n </mat-checkbox>\n <div *ngIf=\"!smartTable.customSmartTableHeaders![i].showCheckboxInHeader\">\n {{ smartTable.customTableHeaders[i] }}\n </div>\n </div>\n <div\n *ngIf=\"\n header !== 'icon' &&\n header !== 'img' &&\n header !== 'options' &&\n header !== 'button' &&\n header !== 'select' &&\n header !== 'expand' &&\n header !== 'actions'\n \"\n >\n <div *ngIf=\"smartTable.sortable; then sortable; else notSortable\"></div>\n <ng-template #sortable>\n <button\n (click)=\"sortButtonClicked($event, smartTable.customSmartTableHeaders![i])\"\n *ngIf=\"smartTable.sortable && isSortable(smartTable.customSmartTableHeaders![i])\"\n mat-button\n class=\"sortableHeaderButton\"\n >\n {{ smartTable.customTableHeaders[i] }}\n <smart-icon\n class=\"sortableHeaderButtonIcon\"\n *ngIf=\"getSortIcon(header)\"\n title=\"sort\"\n [icon]=\"getSortIcon(header)!\"\n ></smart-icon>\n <smart-icon\n class=\"sortableHeaderButtonIcon\"\n *ngIf=\"hasSortNumIcon(header)\"\n title=\"sort\"\n [icon]=\"getSortNumIcon(header)\"\n ></smart-icon>\n </button>\n </ng-template>\n <ng-template #notSortable>\n {{ smartTable.customTableHeaders[i] }}\n </ng-template>\n </div>\n </th>\n }\n <td mat-cell *matCellDef=\"let element\" [ngClass]=\"isDisabled(element) ? 'disabledRow' : ''\">\n <mat-checkbox\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].propertyName === 'select' &&\n !isDisabled(element)\n \"\n (click)=\"$event.stopPropagation()\"\n (change)=\"\n $event\n ? setSelection(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\n : element\n )\n : null\n \"\n [disabled]=\"isDisabled(element)\"\n [checked]=\"\n smartTable.selection!.isSelected(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\n : element\n )\n \"\n [aria-label]=\"\n checkboxLabel(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\n : element\n )\n \"\n >\n </mat-checkbox>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].properties\n \"\n >\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATETIME\">\n {{\n getValue(element, header)\n | smartDateTime: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATE\">\n {{\n getValue(element, header)\n | smartDate: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().TIME\">\n {{\n getValue(element, header)\n | smartTime: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().CHECKBOX\">\n <mat-checkbox [disabled]=\"true\" [checked]=\"getValue(element, header)\"></mat-checkbox>\n </div>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders[i].properties?.type === type().ICON &&\n smartTable.customSmartTableHeaders[i].properties?.icons?.length\n \"\n >\n <smart-icon\n [smartTooltip]=\"getToolTip(element, i)\"\n [icon]=\"getIcon(getValue(element, header), i)!\"\n [color]=\"getColor(getValue(element, header), i)\"\n >\n </smart-icon>\n </div>\n </div>\n <div class=\"smart-table-icon-container\">\n <div *ngFor=\"let ir of getImageResourceIcons(element, header)\">\n <smart-icon [imageResource]=\"ir\"> </smart-icon>\n </div>\n </div>\n <div\n *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].buttons\"\n class=\"smart-table-buttons-col\"\n >\n <div *ngFor=\"let button of smartTable.customSmartTableHeaders[i].buttons\">\n <div *ngIf=\"showButton(button, element)\" [ngSwitch]=\"button.type\">\n <button\n (click)=\"customButtonClicked($event, button, element)\"\n *ngSwitchCase=\"smartTableButtonType.ICON\"\n mat-icon-button\n color=\"{{ button.color }}\"\n >\n <smart-icon title=\"{{ button.label }}\" [icon]=\"button.icon!\"></smart-icon>\n </button>\n <button\n (click)=\"customButtonClicked($event, button, element)\"\n *ngSwitchCase=\"smartTableButtonType.NORMAL\"\n mat-button\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n {{ button.label ?? (button.translator ? button.translator(element).title : '') }}\n </button>\n <button\n (click)=\"customButtonClicked($event, button, element)\"\n *ngSwitchCase=\"smartTableButtonType.RAISED\"\n mat-raised-button\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n {{ button.label ?? (button.translator ? button.translator(element).title : '') }}\n </button>\n <!------ MENU ------>\n <div *ngSwitchCase=\"smartTableButtonType.MENU\" class=\"menu-button\">\n <!------ DEFAULT_ACTION_COLUMN ID TOOLBAR ------>\n <smart-ui-action-toolbar\n [uiActionModels]=\"getRowColumnAction(element, defaultActionToolbarId)\"\n ></smart-ui-action-toolbar>\n\n <!------ GENERIC HAMBURGER ------>\n <!------ TOOLBAR ------>\n <button\n *ngIf=\"showMenuButton(element, button)\"\n mat-button\n [matMenuTriggerFor]=\"menu\"\n (click)=\"customButtonClicked($event, button, element, undefined, true)\"\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n <!-- {{ button.label ?? (button.translator ? button.translator(element).title : '') }} -->\n </button>\n <mat-menu #menu=\"matMenu\">\n <div *ngIf=\"button.menuItemButtons\">\n <button\n *ngFor=\"let btn of getMenuButtons(element, button)\"\n (click)=\"customButtonClicked($event, btn, element, undefined, true)\"\n mat-menu-item\n >\n <smart-icon\n *ngIf=\"btn?.translator(btn)?.icon\"\n [icon]=\"btn!.translator!(btn)!.icon!\"\n ></smart-icon>\n {{ btn?.translator(btn)?.title }}\n </button>\n </div>\n <div *ngIf=\"button.menuItemButtonsPropertyName\">\n <div *ngFor=\"let btn of getMenuItemButtonsPropertyName(element, button)\">\n <button\n *ngIf=\"btn.code !== ACTION_SEPERATOR\"\n (click)=\"customButtonClicked($event, button, element, btn, true)\"\n mat-menu-item\n [disabled]=\"btn.disabled\"\n [smartTooltip]=\"\n btn?.descriptor?.tooltip\n ? btn?.descriptor?.tooltip\n : button.translator!(btn).tooltip\n \"\n >\n <div\n class=\"smart-table-icon-container\"\n [ngClass]=\"\n button.translator!(btn).iconPosition === 'POST' ? 'reversed' : ''\n \"\n ><smart-icon\n *ngIf=\"button.translator!(btn).icon\"\n [icon]=\"button.translator!(btn).icon!\"\n ></smart-icon>\n {{ button.translator!(btn).title }}</div\n >\n </button>\n <mat-divider *ngIf=\"btn.code === ACTION_SEPERATOR\"></mat-divider>\n </div>\n </div>\n </mat-menu>\n </div>\n\n <!------ MENU ------>\n </div>\n </div>\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].icon\">\n <smart-icon\n *ngIf=\"smartTable.customSmartTableHeaders[i].icon?.icon\"\n [ngClass]=\"smartTable.customSmartTableHeaders[i].icon?.cssClass ?? ''\"\n [color]=\"smartTable.customSmartTableHeaders[i].icon?.color\"\n [icon]=\"smartTable.customSmartTableHeaders[i].icon!.icon\"\n >\n </smart-icon>\n </div>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].translator !== undefined\n \"\n >\n {{ smartTable.customSmartTableHeaders[i].translator!(getValue(element, header)) }}\n </div>\n <button\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].propertyName === 'expand'\n \"\n mat-icon-button\n aria-label=\"expand row\"\n (click)=\"onToggle(element, $event)\"\n >\n <smart-icon *ngIf=\"expandedElement !== element\" [icon]=\"'keyboard_arrow_down'\"></smart-icon>\n <smart-icon *ngIf=\"expandedElement === element\" [icon]=\"'keyboard_arrow_up'\"></smart-icon>\n </button>\n <div\n *ngIf=\"\n !smartTable.customSmartTableHeaders ||\n (smartTable.customSmartTableHeaders &&\n !smartTable.customSmartTableHeaders[i].properties &&\n !smartTable.customSmartTableHeaders[i].icon &&\n !smartTable.customSmartTableHeaders[i].buttons &&\n !smartTable.customSmartTableHeaders[i].translator &&\n !(smartTable.customSmartTableHeaders[i].propertyName === 'select') &&\n !(smartTable.customSmartTableHeaders[i].propertyName === 'expand'))\n \"\n >\n <smart-icon *ngIf=\"header === 'icon'\" [icon]=\"getValue(element, header)!\"> </smart-icon>\n <img\n *ngIf=\"header === 'img'\"\n [src]=\"getValue(element, header)\"\n alt=\"\"\n class=\"smarttableImg\"\n />\n <!------ TOOLBAR ------>\n <ng-container *ngIf=\"showCellToolbar(element, header)\">\n <smart-ui-action-toolbar\n [uiActionModels]=\"getRowColumnAction(element, header)\"\n ></smart-ui-action-toolbar>\n </ng-container>\n <!------ TOOLBAR ------>\n <div\n *ngIf=\"\n header !== 'icon' &&\n header !== 'img' &&\n header !== 'option' &&\n header !== 'button' &&\n !isImageResource(element, header)\n \"\n [innerHtml]=\"getValue(element, header)\"\n ></div>\n </div>\n </td>\n </ng-container>\n\n <!-- Expanded Content Column - The detail row is made up of this one column that spans across all columns -->\n <ng-container matColumnDef=\"expandedDetail\">\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"smartTable.tableHeaders.length\">\n <div\n class=\"example-element-detail\"\n [@detailExpand]=\"element == expandedElement ? 'expanded' : 'collapsed'\"\n >\n <ng-template #expandedArea></ng-template>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"smartTable.tableHeaders; sticky: true\"></tr>\n <ng-container *matRowDef=\"let element; columns: smartTable.tableHeaders\">\n <tr\n mat-row\n class=\"example-element-row\"\n [class.example-expanded-row]=\"expandedElement === element\"\n [ngClass]=\"getRowClasses(element)\"\n [ngStyle]=\"getRowStyles(element)\"\n (click)=\"handleOnRowClick(element)\"\n (dblclick)=\"handleOnRowDoubleClick($event, element)\"\n [attr.data-testid]=\"element?.id ?? null\"\n ></tr>\n <lib-default-actions-popup\n *ngIf=\"smartTable.defaultActionCodes && smartTable.defaultActionCodes.length > 0\"\n #defaultActionMenu\n [buttons]=\"getDefaultActionsForRow(element)!\"\n [row]=\"element\"\n ></lib-default-actions-popup>\n </ng-container>\n <tr mat-row *matRowDef=\"let row; columns: ['expandedDetail']\" class=\"example-detail-row\"></tr>\n</table>\n", styles: [".full-width{width:100%}.smarttableImg{width:25px}.smartTableRowHover:hover{cursor:pointer}tr.example-detail-row{height:0}tr.example-element-row:not(.example-expanded-row):hover{background:#f5f5f5}tr.example-element-row:not(.example-expanded-row):active{background:#efefef}.example-element-row td{border-bottom-width:0}.example-element-detail{overflow:hidden;display:flex;flex-direction:column}.example-element-diagram{min-width:80px;border:2px solid black;padding:8px;font-weight:lighter;margin:8px 0;height:104px}.example-element-symbol{font-weight:700;font-size:40px;line-height:normal}.example-element-description{padding:16px}.example-element-description-attribution{opacity:.5}.disabledRow{color:var(--disabled)}.disabledRow:hover{cursor:default}.smart-table-buttons-col{display:flex;flex-direction:row;justify-content:flex-end}.sortableHeaderButton{margin:0!important;padding:0!important;text-align:left!important}.selected{background-color:var(--primary-light-color)}.smart-table-icon-container{display:flex;flex-direction:row;justify-content:space-between;white-space:initial}.reversed{flex-direction:row-reverse;gap:1rem}:host ::ng-deep .mat-mdc-menu-item{line-height:normal!important}.mat-mdc-menu-item[disabled]{cursor:default!important}.menu-button{display:flex;flex-direction:row;justify-content:flex-end;text-align:-webkit-right;align-items:center}.captionTitle{font-size:1.5rem;align-content:center;padding:.5rem .75rem;text-align:start;border-top:1px solid rgba(0,0,0,.12);border-bottom:1px solid rgba(0,0,0,.12);background:#f5f5f5}\n"] }]
39
39
  }], ctorParameters: () => [{ type: i1.ComponentFactoryService }] });
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtdGFibGUvdGFibGVzL21hdGVyaWFsLXRhYmxlL21hdGVyaWFsLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LXRhYmxlL3RhYmxlcy9tYXRlcmlhbC10YWJsZS9tYXRlcmlhbC10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDakMsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFnQmpGLE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxLQUFLO0lBQy9DLFlBQVksU0FBa0M7UUFDNUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25CLENBQUM7K0dBSFUsc0JBQXNCO21HQUF0QixzQkFBc0IsaUZDbEJuQyxxcGdCQStYQSxveUtEclhjO1lBQ1YsT0FBTyxDQUFDLGNBQWMsRUFBRTtnQkFDdEIsS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUM1RCxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUN6QyxVQUFVLENBQUMsd0JBQXdCLEVBQUUsT0FBTyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7YUFDdEYsQ0FBQztTQUNIOzs0RkFFVSxzQkFBc0I7a0JBWmxDLFNBQVM7K0JBQ0Usb0JBQW9CLGNBR2xCO3dCQUNWLE9BQU8sQ0FBQyxjQUFjLEVBQUU7NEJBQ3RCLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQzs0QkFDNUQsS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQzs0QkFDekMsVUFBVSxDQUFDLHdCQUF3QixFQUFFLE9BQU8sQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO3lCQUN0RixDQUFDO3FCQUNIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSAnLi4vdGFibGUnO1xyXG5pbXBvcnQgeyB0cmlnZ2VyLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIGFuaW1hdGUgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgQ29tcG9uZW50RmFjdG9yeVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnQtZmFjdG9yeS1zZXJ2aWNlL3Byb2plY3RzJztcclxuaW1wb3J0IHsgU21hcnRHcmlkVG9vbGJhckFjdGlvbnNVdGlsIH0gZnJvbSAnLi4vLi4vLi4vc21hcnQtZ3JpZC9zbWFydC1ncmlkLXRvb2xiYXItdXRpbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1tYXRlcmlhbC10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL21hdGVyaWFsLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9tYXRlcmlhbC10YWJsZS5jb21wb25lbnQuY3NzJ10sXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgdHJpZ2dlcignZGV0YWlsRXhwYW5kJywgW1xyXG4gICAgICBzdGF0ZSgnY29sbGFwc2VkJywgc3R5bGUoeyBoZWlnaHQ6ICcwcHgnLCBtaW5IZWlnaHQ6ICcwJyB9KSksXHJcbiAgICAgIHN0YXRlKCdleHBhbmRlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnKicgfSkpLFxyXG4gICAgICB0cmFuc2l0aW9uKCdleHBhbmRlZCA8PT4gY29sbGFwc2VkJywgYW5pbWF0ZSgnMjI1bXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpJykpLFxyXG4gICAgXSksXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1hdGVyaWFsVGFibGVDb21wb25lbnQgZXh0ZW5kcyBUYWJsZSB7XHJcbiAgY29uc3RydWN0b3IoY2ZTZXJ2aWNlOiBDb21wb25lbnRGYWN0b3J5U2VydmljZSkge1xyXG4gICAgc3VwZXIoY2ZTZXJ2aWNlKTtcclxuICB9XHJcbn1cclxuIiwiPHRhYmxlXHJcbiAgI215VGFibGVcclxuICBtYXQtdGFibGVcclxuICBbZGF0YVNvdXJjZV09XCJzbWFydFRhYmxlLnRhYmxlUm93c1wiXHJcbiAgY2xhc3M9XCJmdWxsLXdpZHRoXCJcclxuICBtdWx0aVRlbXBsYXRlRGF0YVJvd3NcclxuPlxyXG4gIDwhLS0gQ29sdW1uIERlc2NyaXB0b3IgLS0+XHJcbiAgQGlmIChzbWFydFRhYmxlLnRpdGxlKSB7XHJcbiAgICA8Y2FwdGlvbiAqbmdJZj1cInNtYXJ0VGFibGUudGl0bGVcIiBjbGFzcz1cImNhcHRpb25UaXRsZVwiPlxyXG4gICAgICB7eyBzbWFydFRhYmxlLnRpdGxlIH19XHJcbiAgICA8L2NhcHRpb24+XHJcbiAgfVxyXG4gIDxuZy1jb250YWluZXJcclxuICAgICpuZ0Zvcj1cImxldCBoZWFkZXIgb2Ygc21hcnRUYWJsZS50YWJsZUhlYWRlcnM7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgbWF0Q29sdW1uRGVmPVwie3sgaGVhZGVyIH19XCJcclxuICA+XHJcbiAgICA8IS0tIG15X21lbnUgaXMgdGhlIGltcGxpY2l0IGFjdGlvbiBjb2x1bW4gcHJlc2VudCBvbiBhbGwgdGFibGVzOiAtLT5cclxuICAgIEBpZiAoJ215X21lbnUnID09PSBoZWFkZXIpIHtcclxuICAgICAgPHRoXHJcbiAgICAgICAgbWF0LWhlYWRlci1jZWxsXHJcbiAgICAgICAgKm1hdEhlYWRlckNlbGxEZWZcclxuICAgICAgICBbbmdDbGFzc109XCJnZXRDb2x1bW5DbGFzc2VzKHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMhW2ldKVwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0Q29sdW1uU3R5bGVzKHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMhW2ldKVwiXHJcbiAgICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyFbaV0ucHJvcGVydHlOYW1lXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxzbWFydC11aS1hY3Rpb24tdG9vbGJhclxyXG4gICAgICAgICAgI2hlYWRlclRvb2xiYXJcclxuICAgICAgICAgIFtpZF09XCJcclxuICAgICAgICAgICAgc21hcnRUYWJsZS5nZXRHcmlkSWQoKVxyXG4gICAgICAgICAgICAgID8gc21hcnRUYWJsZS5nZXRHcmlkSWQoKSArICdfaGVhZGVyVG9vbGJhcidcclxuICAgICAgICAgICAgICA6ICdncmlkX25vdF9pbml0aWFsaXplZCdcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvc21hcnQtdWktYWN0aW9uLXRvb2xiYXI+XHJcbiAgICAgIDwvdGg+XHJcbiAgICB9IEBlbHNlIHtcclxuICAgICAgPHRoXHJcbiAgICAgICAgbWF0LWhlYWRlci1jZWxsXHJcbiAgICAgICAgKm1hdEhlYWRlckNlbGxEZWZcclxuICAgICAgICBbbmdDbGFzc109XCJnZXRDb2x1bW5DbGFzc2VzKHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMhW2ldKVwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0Q29sdW1uU3R5bGVzKHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMhW2ldKVwiXHJcbiAgICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyFbaV0ucHJvcGVydHlOYW1lXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIGhlYWRlciA9PT0gJ2ljb24nIHx8IGhlYWRlciA9PT0gJ2ltZycgfHwgaGVhZGVyID09PSAnb3B0aW9ucycgfHwgaGVhZGVyID09PSAnYnV0dG9uJ1xyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImhlYWRlciA9PT0gJ3NlbGVjdCdcIj5cclxuICAgICAgICAgIDxtYXQtY2hlY2tib3hcclxuICAgICAgICAgICAgKm5nSWY9XCJzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzIVtpXS5zaG93Q2hlY2tib3hJbkhlYWRlclwiXHJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwiJGV2ZW50ID8gdG9nZ2xlQWxsUm93cygpIDogbnVsbFwiXHJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cInNtYXJ0VGFibGUuc2VsZWN0aW9uIS5oYXNWYWx1ZSgpICYmIGlzQWxsU2VsZWN0ZWQoKVwiXHJcbiAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cInNtYXJ0VGFibGUuc2VsZWN0aW9uIS5oYXNWYWx1ZSgpICYmICFpc0FsbFNlbGVjdGVkKClcIlxyXG4gICAgICAgICAgICBbYXJpYS1sYWJlbF09XCJjaGVja2JveExhYmVsKClcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMhW2ldLnNob3dDaGVja2JveEluSGVhZGVyXCI+XHJcbiAgICAgICAgICAgIHt7IHNtYXJ0VGFibGUuY3VzdG9tVGFibGVIZWFkZXJzW2ldIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICBoZWFkZXIgIT09ICdpY29uJyAmJlxyXG4gICAgICAgICAgICBoZWFkZXIgIT09ICdpbWcnICYmXHJcbiAgICAgICAgICAgIGhlYWRlciAhPT0gJ29wdGlvbnMnICYmXHJcbiAgICAgICAgICAgIGhlYWRlciAhPT0gJ2J1dHRvbicgJiZcclxuICAgICAgICAgICAgaGVhZGVyICE9PSAnc2VsZWN0JyAmJlxyXG4gICAgICAgICAgICBoZWFkZXIgIT09ICdleHBhbmQnICYmXHJcbiAgICAgICAgICAgIGhlYWRlciAhPT0gJ2FjdGlvbnMnXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJzbWFydFRhYmxlLnNvcnRhYmxlOyB0aGVuIHNvcnRhYmxlOyBlbHNlIG5vdFNvcnRhYmxlXCI+PC9kaXY+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3NvcnRhYmxlPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNvcnRCdXR0b25DbGlja2VkKCRldmVudCwgc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyFbaV0pXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cInNtYXJ0VGFibGUuc29ydGFibGUgJiYgaXNTb3J0YWJsZShzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzIVtpXSlcIlxyXG4gICAgICAgICAgICAgIG1hdC1idXR0b25cclxuICAgICAgICAgICAgICBjbGFzcz1cInNvcnRhYmxlSGVhZGVyQnV0dG9uXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIHt7IHNtYXJ0VGFibGUuY3VzdG9tVGFibGVIZWFkZXJzW2ldIH19XHJcbiAgICAgICAgICAgICAgPHNtYXJ0LWljb25cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwic29ydGFibGVIZWFkZXJCdXR0b25JY29uXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0U29ydEljb24oaGVhZGVyKVwiXHJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInNvcnRcIlxyXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiZ2V0U29ydEljb24oaGVhZGVyKSFcIlxyXG4gICAgICAgICAgICAgID48L3NtYXJ0LWljb24+XHJcbiAgICAgICAgICAgICAgPHNtYXJ0LWljb25cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwic29ydGFibGVIZWFkZXJCdXR0b25JY29uXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaGFzU29ydE51bUljb24oaGVhZGVyKVwiXHJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInNvcnRcIlxyXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiZ2V0U29ydE51bUljb24oaGVhZGVyKVwiXHJcbiAgICAgICAgICAgICAgPjwvc21hcnQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNub3RTb3J0YWJsZT5cclxuICAgICAgICAgICAge3sgc21hcnRUYWJsZS5jdXN0b21UYWJsZUhlYWRlcnNbaV0gfX1cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvdGg+XHJcbiAgICB9XHJcbiAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiIFtuZ0NsYXNzXT1cImlzRGlzYWJsZWQoZWxlbWVudCkgPyAnZGlzYWJsZWRSb3cnIDogJydcIj5cclxuICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzICYmXHJcbiAgICAgICAgICBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnR5TmFtZSA9PT0gJ3NlbGVjdCcgJiZcclxuICAgICAgICAgICFpc0Rpc2FibGVkKGVsZW1lbnQpXHJcbiAgICAgICAgXCJcclxuICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICAoY2hhbmdlKT1cIlxyXG4gICAgICAgICAgJGV2ZW50XHJcbiAgICAgICAgICAgID8gc2V0U2VsZWN0aW9uKFxyXG4gICAgICAgICAgICAgICAgc21hcnRUYWJsZS5zZWxlY3Rpb25Qcm9wZXJ0eVxyXG4gICAgICAgICAgICAgICAgICA/IHNtYXJ0VGFibGUuZ2V0VmFsdWVEZWVwbHkoZWxlbWVudCwgc21hcnRUYWJsZS5zZWxlY3Rpb25Qcm9wZXJ0eSlcclxuICAgICAgICAgICAgICAgICAgOiBlbGVtZW50XHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICA6IG51bGxcclxuICAgICAgICBcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkKGVsZW1lbnQpXCJcclxuICAgICAgICBbY2hlY2tlZF09XCJcclxuICAgICAgICAgIHNtYXJ0VGFibGUuc2VsZWN0aW9uIS5pc1NlbGVjdGVkKFxyXG4gICAgICAgICAgICBzbWFydFRhYmxlLnNlbGVjdGlvblByb3BlcnR5XHJcbiAgICAgICAgICAgICAgPyBzbWFydFRhYmxlLmdldFZhbHVlRGVlcGx5KGVsZW1lbnQsIHNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHkpXHJcbiAgICAgICAgICAgICAgOiBlbGVtZW50XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgXCJcclxuICAgICAgICBbYXJpYS1sYWJlbF09XCJcclxuICAgICAgICAgIGNoZWNrYm94TGFiZWwoXHJcbiAgICAgICAgICAgIHNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHlcclxuICAgICAgICAgICAgICA/IHNtYXJ0VGFibGUuZ2V0VmFsdWVEZWVwbHkoZWxlbWVudCwgc21hcnRUYWJsZS5zZWxlY3Rpb25Qcm9wZXJ0eSlcclxuICAgICAgICAgICAgICA6IGVsZW1lbnRcclxuICAgICAgICAgIClcclxuICAgICAgICBcIlxyXG4gICAgICA+XHJcbiAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMgJiYgc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0aWVzXHJcbiAgICAgICAgXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnRpZXM/LnR5cGUgPT09IHR5cGUoKS5EQVRFVElNRVwiPlxyXG4gICAgICAgICAge3tcclxuICAgICAgICAgICAgZ2V0VmFsdWUoZWxlbWVudCwgaGVhZGVyKVxyXG4gICAgICAgICAgICAgIHwgc21hcnREYXRlVGltZTogc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0aWVzPy5kYXRlRm9ybWF0XHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnRpZXM/LnR5cGUgPT09IHR5cGUoKS5EQVRFXCI+XHJcbiAgICAgICAgICB7e1xyXG4gICAgICAgICAgICBnZXRWYWx1ZShlbGVtZW50LCBoZWFkZXIpXHJcbiAgICAgICAgICAgICAgfCBzbWFydERhdGU6IHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydGllcz8uZGF0ZUZvcm1hdFxyXG4gICAgICAgICAgfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0aWVzPy50eXBlID09PSB0eXBlKCkuVElNRVwiPlxyXG4gICAgICAgICAge3tcclxuICAgICAgICAgICAgZ2V0VmFsdWUoZWxlbWVudCwgaGVhZGVyKVxyXG4gICAgICAgICAgICAgIHwgc21hcnRUaW1lOiBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnRpZXM/LmRhdGVGb3JtYXRcclxuICAgICAgICAgIH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydGllcz8udHlwZSA9PT0gdHlwZSgpLkNIRUNLQk9YXCI+XHJcbiAgICAgICAgICA8bWF0LWNoZWNrYm94IFtkaXNhYmxlZF09XCJ0cnVlXCIgW2NoZWNrZWRdPVwiZ2V0VmFsdWUoZWxlbWVudCwgaGVhZGVyKVwiPjwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydGllcz8udHlwZSA9PT0gdHlwZSgpLklDT04gJiZcclxuICAgICAgICAgICAgc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0aWVzPy5pY29ucz8ubGVuZ3RoXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxzbWFydC1pY29uXHJcbiAgICAgICAgICAgIFtzbWFydFRvb2x0aXBdPVwiZ2V0VG9vbFRpcChlbGVtZW50LCBpKVwiXHJcbiAgICAgICAgICAgIFtpY29uXT1cImdldEljb24oZ2V0VmFsdWUoZWxlbWVudCwgaGVhZGVyKSwgaSkhXCJcclxuICAgICAgICAgICAgW2NvbG9yXT1cImdldENvbG9yKGdldFZhbHVlKGVsZW1lbnQsIGhlYWRlciksIGkpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgIDwvc21hcnQtaWNvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzbWFydC10YWJsZS1pY29uLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGlyIG9mIGdldEltYWdlUmVzb3VyY2VJY29ucyhlbGVtZW50LCBoZWFkZXIpXCI+XHJcbiAgICAgICAgICA8c21hcnQtaWNvbiBbaW1hZ2VSZXNvdXJjZV09XCJpclwiPiA8L3NtYXJ0LWljb24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgKm5nSWY9XCJzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzICYmIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0uYnV0dG9uc1wiXHJcbiAgICAgICAgY2xhc3M9XCJzbWFydC10YWJsZS1idXR0b25zLWNvbFwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBidXR0b24gb2Ygc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5idXR0b25zXCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0J1dHRvbihidXR0b24sIGVsZW1lbnQpXCIgW25nU3dpdGNoXT1cImJ1dHRvbi50eXBlXCI+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAoY2xpY2spPVwiY3VzdG9tQnV0dG9uQ2xpY2tlZCgkZXZlbnQsIGJ1dHRvbiwgZWxlbWVudClcIlxyXG4gICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJzbWFydFRhYmxlQnV0dG9uVHlwZS5JQ09OXCJcclxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgICBjb2xvcj1cInt7IGJ1dHRvbi5jb2xvciB9fVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c21hcnQtaWNvbiB0aXRsZT1cInt7IGJ1dHRvbi5sYWJlbCB9fVwiIFtpY29uXT1cImJ1dHRvbi5pY29uIVwiPjwvc21hcnQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAoY2xpY2spPVwiY3VzdG9tQnV0dG9uQ2xpY2tlZCgkZXZlbnQsIGJ1dHRvbiwgZWxlbWVudClcIlxyXG4gICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJzbWFydFRhYmxlQnV0dG9uVHlwZS5OT1JNQUxcIlxyXG4gICAgICAgICAgICAgIG1hdC1idXR0b25cclxuICAgICAgICAgICAgICBjb2xvcj1cInt7IGJ1dHRvbi5jb2xvciB9fVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c21hcnQtaWNvbiAqbmdJZj1cImJ1dHRvbi5pY29uXCIgW2ljb25dPVwiYnV0dG9uLmljb25cIj48L3NtYXJ0LWljb24+XHJcbiAgICAgICAgICAgICAge3sgYnV0dG9uLmxhYmVsID8/IChidXR0b24udHJhbnNsYXRvciA/IGJ1dHRvbi50cmFuc2xhdG9yKGVsZW1lbnQpLnRpdGxlIDogJycpIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImN1c3RvbUJ1dHRvbkNsaWNrZWQoJGV2ZW50LCBidXR0b24sIGVsZW1lbnQpXCJcclxuICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwic21hcnRUYWJsZUJ1dHRvblR5cGUuUkFJU0VEXCJcclxuICAgICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgICAgIGNvbG9yPVwie3sgYnV0dG9uLmNvbG9yIH19XCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzbWFydC1pY29uICpuZ0lmPVwiYnV0dG9uLmljb25cIiBbaWNvbl09XCJidXR0b24uaWNvblwiPjwvc21hcnQtaWNvbj5cclxuICAgICAgICAgICAgICB7eyBidXR0b24ubGFiZWwgPz8gKGJ1dHRvbi50cmFuc2xhdG9yID8gYnV0dG9uLnRyYW5zbGF0b3IoZWxlbWVudCkudGl0bGUgOiAnJykgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwhLS0tLS0tIE1FTlUgLS0tLS0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCJzbWFydFRhYmxlQnV0dG9uVHlwZS5NRU5VXCIgY2xhc3M9XCJtZW51LWJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgIDwhLS0tLS0tIERFRkFVTFRfQUNUSU9OX0NPTFVNTiBJRCBUT09MQkFSIC0tLS0tLT5cclxuICAgICAgICAgICAgICA8c21hcnQtdWktYWN0aW9uLXRvb2xiYXJcclxuICAgICAgICAgICAgICAgIFt1aUFjdGlvbk1vZGVsc109XCJnZXRSb3dDb2x1bW5BY3Rpb24oZWxlbWVudCwgZGVmYXVsdEFjdGlvblRvb2xiYXJJZClcIlxyXG4gICAgICAgICAgICAgID48L3NtYXJ0LXVpLWFjdGlvbi10b29sYmFyPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tLS0tLSBHRU5FUklDIEhBTUJVUkdFUiAtLS0tLS0+XHJcbiAgICAgICAgICAgICAgPCEtLS0tLS0gVE9PTEJBUiAtLS0tLS0+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93TWVudUJ1dHRvbihlbGVtZW50LCBidXR0b24pXCJcclxuICAgICAgICAgICAgICAgIG1hdC1idXR0b25cclxuICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjdXN0b21CdXR0b25DbGlja2VkKCRldmVudCwgYnV0dG9uLCBlbGVtZW50LCB1bmRlZmluZWQsIHRydWUpXCJcclxuICAgICAgICAgICAgICAgIGNvbG9yPVwie3sgYnV0dG9uLmNvbG9yIH19XCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8c21hcnQtaWNvbiAqbmdJZj1cImJ1dHRvbi5pY29uXCIgW2ljb25dPVwiYnV0dG9uLmljb25cIj48L3NtYXJ0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8IS0tIHt7IGJ1dHRvbi5sYWJlbCA/PyAoYnV0dG9uLnRyYW5zbGF0b3IgPyBidXR0b24udHJhbnNsYXRvcihlbGVtZW50KS50aXRsZSA6ICcnKSB9fSAtLT5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYnV0dG9uLm1lbnVJdGVtQnV0dG9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGJ0biBvZiBnZXRNZW51QnV0dG9ucyhlbGVtZW50LCBidXR0b24pXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY3VzdG9tQnV0dG9uQ2xpY2tlZCgkZXZlbnQsIGJ0biwgZWxlbWVudCwgdW5kZWZpbmVkLCB0cnVlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNtYXJ0LWljb25cclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYnRuPy50cmFuc2xhdG9yKGJ0bik/Lmljb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiYnRuIS50cmFuc2xhdG9yIShidG4pIS5pY29uIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvc21hcnQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBidG4/LnRyYW5zbGF0b3IoYnRuKT8udGl0bGUgfX1cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJidXR0b24ubWVudUl0ZW1CdXR0b25zUHJvcGVydHlOYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGJ0biBvZiBnZXRNZW51SXRlbUJ1dHRvbnNQcm9wZXJ0eU5hbWUoZWxlbWVudCwgYnV0dG9uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYnRuLmNvZGUgIT09IEFDVElPTl9TRVBFUkFUT1JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImN1c3RvbUJ1dHRvbkNsaWNrZWQoJGV2ZW50LCBidXR0b24sIGVsZW1lbnQsIGJ0biwgdHJ1ZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ0bi5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbc21hcnRUb29sdGlwXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBidG4/LmRlc2NyaXB0b3I/LnRvb2x0aXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IGJ0bj8uZGVzY3JpcHRvcj8udG9vbHRpcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogYnV0dG9uLnRyYW5zbGF0b3IhKGJ0bikudG9vbHRpcFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic21hcnQtdGFibGUtaWNvbi1jb250YWluZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b24udHJhbnNsYXRvciEoYnRuKS5pY29uUG9zaXRpb24gPT09ICdQT1NUJyA/ICdyZXZlcnNlZCcgOiAnJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PHNtYXJ0LWljb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImJ1dHRvbi50cmFuc2xhdG9yIShidG4pLmljb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cImJ1dHRvbi50cmFuc2xhdG9yIShidG4pLmljb24hXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvc21hcnQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgYnV0dG9uLnRyYW5zbGF0b3IhKGJ0bikudGl0bGUgfX08L2RpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZGl2aWRlciAqbmdJZj1cImJ0bi5jb2RlID09PSBBQ1RJT05fU0VQRVJBVE9SXCI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0tLS0tIE1FTlUgLS0tLS0tPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyAmJiBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLmljb25cIj5cclxuICAgICAgICA8c21hcnQtaWNvblxyXG4gICAgICAgICAgKm5nSWY9XCJzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLmljb24/Lmljb25cIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5pY29uPy5jc3NDbGFzcyA/PyAnJ1wiXHJcbiAgICAgICAgICBbY29sb3JdPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5pY29uPy5jb2xvclwiXHJcbiAgICAgICAgICBbaWNvbl09XCJzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLmljb24hLmljb25cIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L3NtYXJ0LWljb24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMgJiZcclxuICAgICAgICAgIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0udHJhbnNsYXRvciAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgXCJcclxuICAgICAgPlxyXG4gICAgICAgIHt7IHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0udHJhbnNsYXRvciEoZ2V0VmFsdWUoZWxlbWVudCwgaGVhZGVyKSkgfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyAmJlxyXG4gICAgICAgICAgc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0eU5hbWUgPT09ICdleHBhbmQnXHJcbiAgICAgICAgXCJcclxuICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICBhcmlhLWxhYmVsPVwiZXhwYW5kIHJvd1wiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uVG9nZ2xlKGVsZW1lbnQsICRldmVudClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHNtYXJ0LWljb24gKm5nSWY9XCJleHBhbmRlZEVsZW1lbnQgIT09IGVsZW1lbnRcIiBbaWNvbl09XCIna2V5Ym9hcmRfYXJyb3dfZG93bidcIj48L3NtYXJ0LWljb24+XHJcbiAgICAgICAgPHNtYXJ0LWljb24gKm5nSWY9XCJleHBhbmRlZEVsZW1lbnQgPT09IGVsZW1lbnRcIiBbaWNvbl09XCIna2V5Ym9hcmRfYXJyb3dfdXAnXCI+PC9zbWFydC1pY29uPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAhc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyB8fFxyXG4gICAgICAgICAgKHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMgJiZcclxuICAgICAgICAgICAgIXNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydGllcyAmJlxyXG4gICAgICAgICAgICAhc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5pY29uICYmXHJcbiAgICAgICAgICAgICFzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLmJ1dHRvbnMgJiZcclxuICAgICAgICAgICAgIXNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0udHJhbnNsYXRvciAmJlxyXG4gICAgICAgICAgICAhKHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydHlOYW1lID09PSAnc2VsZWN0JykgJiZcclxuICAgICAgICAgICAgIShzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnR5TmFtZSA9PT0gJ2V4cGFuZCcpKVxyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgICA8c21hcnQtaWNvbiAqbmdJZj1cImhlYWRlciA9PT0gJ2ljb24nXCIgW2ljb25dPVwiZ2V0VmFsdWUoZWxlbWVudCwgaGVhZGVyKSFcIj4gPC9zbWFydC1pY29uPlxyXG4gICAgICAgIDxpbWdcclxuICAgICAgICAgICpuZ0lmPVwiaGVhZGVyID09PSAnaW1nJ1wiXHJcbiAgICAgICAgICBbc3JjXT1cImdldFZhbHVlKGVsZW1lbnQsIGhlYWRlcilcIlxyXG4gICAgICAgICAgYWx0PVwiXCJcclxuICAgICAgICAgIGNsYXNzPVwic21hcnR0YWJsZUltZ1wiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8IS0tLS0tLSBUT09MQkFSIC0tLS0tLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0NlbGxUb29sYmFyKGVsZW1lbnQsIGhlYWRlcilcIj5cclxuICAgICAgICAgIDxzbWFydC11aS1hY3Rpb24tdG9vbGJhclxyXG4gICAgICAgICAgICBbdWlBY3Rpb25Nb2RlbHNdPVwiZ2V0Um93Q29sdW1uQWN0aW9uKGVsZW1lbnQsIGhlYWRlcilcIlxyXG4gICAgICAgICAgPjwvc21hcnQtdWktYWN0aW9uLXRvb2xiYXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPCEtLS0tLS0gVE9PTEJBUiAtLS0tLS0+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgaGVhZGVyICE9PSAnaWNvbicgJiZcclxuICAgICAgICAgICAgaGVhZGVyICE9PSAnaW1nJyAmJlxyXG4gICAgICAgICAgICBoZWFkZXIgIT09ICdvcHRpb24nICYmXHJcbiAgICAgICAgICAgIGhlYWRlciAhPT0gJ2J1dHRvbicgJiZcclxuICAgICAgICAgICAgIWlzSW1hZ2VSZXNvdXJjZShlbGVtZW50LCBoZWFkZXIpXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgW2lubmVySHRtbF09XCJnZXRWYWx1ZShlbGVtZW50LCBoZWFkZXIpXCJcclxuICAgICAgICA+PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC90ZD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPCEtLSBFeHBhbmRlZCBDb250ZW50IENvbHVtbiAtIFRoZSBkZXRhaWwgcm93IGlzIG1hZGUgdXAgb2YgdGhpcyBvbmUgY29sdW1uIHRoYXQgc3BhbnMgYWNyb3NzIGFsbCBjb2x1bW5zIC0tPlxyXG4gIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZXhwYW5kZWREZXRhaWxcIj5cclxuICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCIgW2F0dHIuY29sc3Bhbl09XCJzbWFydFRhYmxlLnRhYmxlSGVhZGVycy5sZW5ndGhcIj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiZXhhbXBsZS1lbGVtZW50LWRldGFpbFwiXHJcbiAgICAgICAgW0BkZXRhaWxFeHBhbmRdPVwiZWxlbWVudCA9PSBleHBhbmRlZEVsZW1lbnQgPyAnZXhwYW5kZWQnIDogJ2NvbGxhcHNlZCdcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNleHBhbmRlZEFyZWE+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L3RkPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cInNtYXJ0VGFibGUudGFibGVIZWFkZXJzOyBzdGlja3k6IHRydWVcIj48L3RyPlxyXG4gIDxuZy1jb250YWluZXIgKm1hdFJvd0RlZj1cImxldCBlbGVtZW50OyBjb2x1bW5zOiBzbWFydFRhYmxlLnRhYmxlSGVhZGVyc1wiPlxyXG4gICAgPHRyXHJcbiAgICAgIG1hdC1yb3dcclxuICAgICAgY2xhc3M9XCJleGFtcGxlLWVsZW1lbnQtcm93XCJcclxuICAgICAgW2NsYXNzLmV4YW1wbGUtZXhwYW5kZWQtcm93XT1cImV4cGFuZGVkRWxlbWVudCA9PT0gZWxlbWVudFwiXHJcbiAgICAgIFtuZ0NsYXNzXT1cImdldFJvd0NsYXNzZXMoZWxlbWVudClcIlxyXG4gICAgICBbbmdTdHlsZV09XCJnZXRSb3dTdHlsZXMoZWxlbWVudClcIlxyXG4gICAgICAoY2xpY2spPVwiaGFuZGxlT25Sb3dDbGljayhlbGVtZW50KVwiXHJcbiAgICAgIChkYmxjbGljayk9XCJoYW5kbGVPblJvd0RvdWJsZUNsaWNrKCRldmVudCwgZWxlbWVudClcIlxyXG4gICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCJlbGVtZW50Py5pZCA/PyBudWxsXCJcclxuICAgID48L3RyPlxyXG4gICAgPGxpYi1kZWZhdWx0LWFjdGlvbnMtcG9wdXBcclxuICAgICAgKm5nSWY9XCJzbWFydFRhYmxlLmRlZmF1bHRBY3Rpb25Db2RlcyAmJiBzbWFydFRhYmxlLmRlZmF1bHRBY3Rpb25Db2Rlcy5sZW5ndGggPiAwXCJcclxuICAgICAgI2RlZmF1bHRBY3Rpb25NZW51XHJcbiAgICAgIFtidXR0b25zXT1cImdldERlZmF1bHRBY3Rpb25zRm9yUm93KGVsZW1lbnQpIVwiXHJcbiAgICAgIFtyb3ddPVwiZWxlbWVudFwiXHJcbiAgICA+PC9saWItZGVmYXVsdC1hY3Rpb25zLXBvcHVwPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG4gIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBbJ2V4cGFuZGVkRGV0YWlsJ11cIiBjbGFzcz1cImV4YW1wbGUtZGV0YWlsLXJvd1wiPjwvdHI+XHJcbjwvdGFibGU+XHJcbiJdfQ==
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtdGFibGUvdGFibGVzL21hdGVyaWFsLXRhYmxlL21hdGVyaWFsLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LXRhYmxlL3RhYmxlcy9tYXRlcmlhbC10YWJsZS9tYXRlcmlhbC10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDakMsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFnQmpGLE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxLQUFLO0lBQy9DLFlBQVksU0FBa0M7UUFDNUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25CLENBQUM7K0dBSFUsc0JBQXNCO21HQUF0QixzQkFBc0IsaUZDbEJuQyx1NWVBK1hBLG95S0RyWGM7WUFDVixPQUFPLENBQUMsY0FBYyxFQUFFO2dCQUN0QixLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQzVELEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQ3pDLFVBQVUsQ0FBQyx3QkFBd0IsRUFBRSxPQUFPLENBQUMsc0NBQXNDLENBQUMsQ0FBQzthQUN0RixDQUFDO1NBQ0g7OzRGQUVVLHNCQUFzQjtrQkFabEMsU0FBUzsrQkFDRSxvQkFBb0IsY0FHbEI7d0JBQ1YsT0FBTyxDQUFDLGNBQWMsRUFBRTs0QkFDdEIsS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDOzRCQUM1RCxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDOzRCQUN6QyxVQUFVLENBQUMsd0JBQXdCLEVBQUUsT0FBTyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7eUJBQ3RGLENBQUM7cUJBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSAnLi4vdGFibGUnO1xuaW1wb3J0IHsgdHJpZ2dlciwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCBhbmltYXRlIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBDb21wb25lbnRGYWN0b3J5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudC1mYWN0b3J5LXNlcnZpY2UvcHJvamVjdHMnO1xuaW1wb3J0IHsgU21hcnRHcmlkVG9vbGJhckFjdGlvbnNVdGlsIH0gZnJvbSAnLi4vLi4vLi4vc21hcnQtZ3JpZC9zbWFydC1ncmlkLXRvb2xiYXItdXRpbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1tYXRlcmlhbC10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXRlcmlhbC10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21hdGVyaWFsLXRhYmxlLmNvbXBvbmVudC5jc3MnXSxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ2RldGFpbEV4cGFuZCcsIFtcbiAgICAgIHN0YXRlKCdjb2xsYXBzZWQnLCBzdHlsZSh7IGhlaWdodDogJzBweCcsIG1pbkhlaWdodDogJzAnIH0pKSxcbiAgICAgIHN0YXRlKCdleHBhbmRlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnKicgfSkpLFxuICAgICAgdHJhbnNpdGlvbignZXhwYW5kZWQgPD0+IGNvbGxhcHNlZCcsIGFuaW1hdGUoJzIyNW1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKScpKSxcbiAgICBdKSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTWF0ZXJpYWxUYWJsZUNvbXBvbmVudCBleHRlbmRzIFRhYmxlIHtcbiAgY29uc3RydWN0b3IoY2ZTZXJ2aWNlOiBDb21wb25lbnRGYWN0b3J5U2VydmljZSkge1xuICAgIHN1cGVyKGNmU2VydmljZSk7XG4gIH1cbn1cbiIsIjx0YWJsZVxuICAjbXlUYWJsZVxuICBtYXQtdGFibGVcbiAgW2RhdGFTb3VyY2VdPVwic21hcnRUYWJsZS50YWJsZVJvd3NcIlxuICBjbGFzcz1cImZ1bGwtd2lkdGhcIlxuICBtdWx0aVRlbXBsYXRlRGF0YVJvd3Ncbj5cbiAgPCEtLSBDb2x1bW4gRGVzY3JpcHRvciAtLT5cbiAgQGlmIChzbWFydFRhYmxlLnRpdGxlKSB7XG4gICAgPGNhcHRpb24gKm5nSWY9XCJzbWFydFRhYmxlLnRpdGxlXCIgY2xhc3M9XCJjYXB0aW9uVGl0bGVcIj5cbiAgICAgIHt7IHNtYXJ0VGFibGUudGl0bGUgfX1cbiAgICA8L2NhcHRpb24+XG4gIH1cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0Zvcj1cImxldCBoZWFkZXIgb2Ygc21hcnRUYWJsZS50YWJsZUhlYWRlcnM7IGxldCBpID0gaW5kZXhcIlxuICAgIG1hdENvbHVtbkRlZj1cInt7IGhlYWRlciB9fVwiXG4gID5cbiAgICA8IS0tIG15X21lbnUgaXMgdGhlIGltcGxpY2l0IGFjdGlvbiBjb2x1bW4gcHJlc2VudCBvbiBhbGwgdGFibGVzOiAtLT5cbiAgICBAaWYgKCdteV9tZW51JyA9PT0gaGVhZGVyKSB7XG4gICAgICA8dGhcbiAgICAgICAgbWF0LWhlYWRlci1jZWxsXG4gICAgICAgICptYXRIZWFkZXJDZWxsRGVmXG4gICAgICAgIFtuZ0NsYXNzXT1cImdldENvbHVtbkNsYXNzZXMoc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyFbaV0pXCJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0Q29sdW1uU3R5bGVzKHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMhW2ldKVwiXG4gICAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cInNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMhW2ldLnByb3BlcnR5TmFtZVwiXG4gICAgICA+XG4gICAgICAgIDxzbWFydC11aS1hY3Rpb24tdG9vbGJhclxuICAgICAgICAgICNoZWFkZXJUb29sYmFyXG4gICAgICAgICAgW2lkXT1cIlxuICAgICAgICAgICAgc21hcnRUYWJsZS5nZXRHcmlkSWQoKVxuICAgICAgICAgICAgICA/IHNtYXJ0VGFibGUuZ2V0R3JpZElkKCkgKyAnX2hlYWRlclRvb2xiYXInXG4gICAgICAgICAgICAgIDogJ2dyaWRfbm90X2luaXRpYWxpemVkJ1xuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgPC9zbWFydC11aS1hY3Rpb24tdG9vbGJhcj5cbiAgICAgIDwvdGg+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8dGhcbiAgICAgICAgbWF0LWhlYWRlci1jZWxsXG4gICAgICAgICptYXRIZWFkZXJDZWxsRGVmXG4gICAgICAgIFtuZ0NsYXNzXT1cImdldENvbHVtbkNsYXNzZXMoc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyFbaV0pXCJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0Q29sdW1uU3R5bGVzKHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMhW2ldKVwiXG4gICAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cInNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMhW2ldLnByb3BlcnR5TmFtZVwiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgaGVhZGVyID09PSAnaWNvbicgfHwgaGVhZGVyID09PSAnaW1nJyB8fCBoZWFkZXIgPT09ICdvcHRpb25zJyB8fCBoZWFkZXIgPT09ICdidXR0b24nXG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaGVhZGVyID09PSAnc2VsZWN0J1wiPlxuICAgICAgICAgIDxtYXQtY2hlY2tib3hcbiAgICAgICAgICAgICpuZ0lmPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyFbaV0uc2hvd0NoZWNrYm94SW5IZWFkZXJcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyB0b2dnbGVBbGxSb3dzKCkgOiBudWxsXCJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cInNtYXJ0VGFibGUuc2VsZWN0aW9uIS5oYXNWYWx1ZSgpICYmIGlzQWxsU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJzbWFydFRhYmxlLnNlbGVjdGlvbiEuaGFzVmFsdWUoKSAmJiAhaXNBbGxTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgIFthcmlhLWxhYmVsXT1cImNoZWNrYm94TGFiZWwoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCIhc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyFbaV0uc2hvd0NoZWNrYm94SW5IZWFkZXJcIj5cbiAgICAgICAgICAgIHt7IHNtYXJ0VGFibGUuY3VzdG9tVGFibGVIZWFkZXJzW2ldIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIGhlYWRlciAhPT0gJ2ljb24nICYmXG4gICAgICAgICAgICBoZWFkZXIgIT09ICdpbWcnICYmXG4gICAgICAgICAgICBoZWFkZXIgIT09ICdvcHRpb25zJyAmJlxuICAgICAgICAgICAgaGVhZGVyICE9PSAnYnV0dG9uJyAmJlxuICAgICAgICAgICAgaGVhZGVyICE9PSAnc2VsZWN0JyAmJlxuICAgICAgICAgICAgaGVhZGVyICE9PSAnZXhwYW5kJyAmJlxuICAgICAgICAgICAgaGVhZGVyICE9PSAnYWN0aW9ucydcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInNtYXJ0VGFibGUuc29ydGFibGU7IHRoZW4gc29ydGFibGU7IGVsc2Ugbm90U29ydGFibGVcIj48L2Rpdj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3NvcnRhYmxlPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPVwic29ydEJ1dHRvbkNsaWNrZWQoJGV2ZW50LCBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzIVtpXSlcIlxuICAgICAgICAgICAgICAqbmdJZj1cInNtYXJ0VGFibGUuc29ydGFibGUgJiYgaXNTb3J0YWJsZShzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzIVtpXSlcIlxuICAgICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwic29ydGFibGVIZWFkZXJCdXR0b25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBzbWFydFRhYmxlLmN1c3RvbVRhYmxlSGVhZGVyc1tpXSB9fVxuICAgICAgICAgICAgICA8c21hcnQtaWNvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwic29ydGFibGVIZWFkZXJCdXR0b25JY29uXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImdldFNvcnRJY29uKGhlYWRlcilcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwic29ydFwiXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiZ2V0U29ydEljb24oaGVhZGVyKSFcIlxuICAgICAgICAgICAgICA+PC9zbWFydC1pY29uPlxuICAgICAgICAgICAgICA8c21hcnQtaWNvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwic29ydGFibGVIZWFkZXJCdXR0b25JY29uXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImhhc1NvcnROdW1JY29uKGhlYWRlcilcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwic29ydFwiXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiZ2V0U29ydE51bUljb24oaGVhZGVyKVwiXG4gICAgICAgICAgICAgID48L3NtYXJ0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90U29ydGFibGU+XG4gICAgICAgICAgICB7eyBzbWFydFRhYmxlLmN1c3RvbVRhYmxlSGVhZGVyc1tpXSB9fVxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC90aD5cbiAgICB9XG4gICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIiBbbmdDbGFzc109XCJpc0Rpc2FibGVkKGVsZW1lbnQpID8gJ2Rpc2FibGVkUm93JyA6ICcnXCI+XG4gICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyAmJlxuICAgICAgICAgIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydHlOYW1lID09PSAnc2VsZWN0JyAmJlxuICAgICAgICAgICFpc0Rpc2FibGVkKGVsZW1lbnQpXG4gICAgICAgIFwiXG4gICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAoY2hhbmdlKT1cIlxuICAgICAgICAgICRldmVudFxuICAgICAgICAgICAgPyBzZXRTZWxlY3Rpb24oXG4gICAgICAgICAgICAgICAgc21hcnRUYWJsZS5zZWxlY3Rpb25Qcm9wZXJ0eVxuICAgICAgICAgICAgICAgICAgPyBzbWFydFRhYmxlLmdldFZhbHVlRGVlcGx5KGVsZW1lbnQsIHNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHkpXG4gICAgICAgICAgICAgICAgICA6IGVsZW1lbnRcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkKGVsZW1lbnQpXCJcbiAgICAgICAgW2NoZWNrZWRdPVwiXG4gICAgICAgICAgc21hcnRUYWJsZS5zZWxlY3Rpb24hLmlzU2VsZWN0ZWQoXG4gICAgICAgICAgICBzbWFydFRhYmxlLnNlbGVjdGlvblByb3BlcnR5XG4gICAgICAgICAgICAgID8gc21hcnRUYWJsZS5nZXRWYWx1ZURlZXBseShlbGVtZW50LCBzbWFydFRhYmxlLnNlbGVjdGlvblByb3BlcnR5KVxuICAgICAgICAgICAgICA6IGVsZW1lbnRcbiAgICAgICAgICApXG4gICAgICAgIFwiXG4gICAgICAgIFthcmlhLWxhYmVsXT1cIlxuICAgICAgICAgIGNoZWNrYm94TGFiZWwoXG4gICAgICAgICAgICBzbWFydFRhYmxlLnNlbGVjdGlvblByb3BlcnR5XG4gICAgICAgICAgICAgID8gc21hcnRUYWJsZS5nZXRWYWx1ZURlZXBseShlbGVtZW50LCBzbWFydFRhYmxlLnNlbGVjdGlvblByb3BlcnR5KVxuICAgICAgICAgICAgICA6IGVsZW1lbnRcbiAgICAgICAgICApXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzICYmIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydGllc1xuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0aWVzPy50eXBlID09PSB0eXBlKCkuREFURVRJTUVcIj5cbiAgICAgICAgICB7e1xuICAgICAgICAgICAgZ2V0VmFsdWUoZWxlbWVudCwgaGVhZGVyKVxuICAgICAgICAgICAgICB8IHNtYXJ0RGF0ZVRpbWU6IHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydGllcz8uZGF0ZUZvcm1hdFxuICAgICAgICAgIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0aWVzPy50eXBlID09PSB0eXBlKCkuREFURVwiPlxuICAgICAgICAgIHt7XG4gICAgICAgICAgICBnZXRWYWx1ZShlbGVtZW50LCBoZWFkZXIpXG4gICAgICAgICAgICAgIHwgc21hcnREYXRlOiBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnRpZXM/LmRhdGVGb3JtYXRcbiAgICAgICAgICB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydGllcz8udHlwZSA9PT0gdHlwZSgpLlRJTUVcIj5cbiAgICAgICAgICB7e1xuICAgICAgICAgICAgZ2V0VmFsdWUoZWxlbWVudCwgaGVhZGVyKVxuICAgICAgICAgICAgICB8IHNtYXJ0VGltZTogc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0aWVzPy5kYXRlRm9ybWF0XG4gICAgICAgICAgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnRpZXM/LnR5cGUgPT09IHR5cGUoKS5DSEVDS0JPWFwiPlxuICAgICAgICAgIDxtYXQtY2hlY2tib3ggW2Rpc2FibGVkXT1cInRydWVcIiBbY2hlY2tlZF09XCJnZXRWYWx1ZShlbGVtZW50LCBoZWFkZXIpXCI+PC9tYXQtY2hlY2tib3g+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydGllcz8udHlwZSA9PT0gdHlwZSgpLklDT04gJiZcbiAgICAgICAgICAgIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydGllcz8uaWNvbnM/Lmxlbmd0aFxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8c21hcnQtaWNvblxuICAgICAgICAgICAgW3NtYXJ0VG9vbHRpcF09XCJnZXRUb29sVGlwKGVsZW1lbnQsIGkpXCJcbiAgICAgICAgICAgIFtpY29uXT1cImdldEljb24oZ2V0VmFsdWUoZWxlbWVudCwgaGVhZGVyKSwgaSkhXCJcbiAgICAgICAgICAgIFtjb2xvcl09XCJnZXRDb2xvcihnZXRWYWx1ZShlbGVtZW50LCBoZWFkZXIpLCBpKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvc21hcnQtaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzbWFydC10YWJsZS1pY29uLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpciBvZiBnZXRJbWFnZVJlc291cmNlSWNvbnMoZWxlbWVudCwgaGVhZGVyKVwiPlxuICAgICAgICAgIDxzbWFydC1pY29uIFtpbWFnZVJlc291cmNlXT1cImlyXCI+IDwvc21hcnQtaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzICYmIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0uYnV0dG9uc1wiXG4gICAgICAgIGNsYXNzPVwic21hcnQtdGFibGUtYnV0dG9ucy1jb2xcIlxuICAgICAgPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBidXR0b24gb2Ygc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5idXR0b25zXCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dCdXR0b24oYnV0dG9uLCBlbGVtZW50KVwiIFtuZ1N3aXRjaF09XCJidXR0b24udHlwZVwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPVwiY3VzdG9tQnV0dG9uQ2xpY2tlZCgkZXZlbnQsIGJ1dHRvbiwgZWxlbWVudClcIlxuICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwic21hcnRUYWJsZUJ1dHRvblR5cGUuSUNPTlwiXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj1cInt7IGJ1dHRvbi5jb2xvciB9fVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzbWFydC1pY29uIHRpdGxlPVwie3sgYnV0dG9uLmxhYmVsIH19XCIgW2ljb25dPVwiYnV0dG9uLmljb24hXCI+PC9zbWFydC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJjdXN0b21CdXR0b25DbGlja2VkKCRldmVudCwgYnV0dG9uLCBlbGVtZW50KVwiXG4gICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJzbWFydFRhYmxlQnV0dG9uVHlwZS5OT1JNQUxcIlxuICAgICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPVwie3sgYnV0dG9uLmNvbG9yIH19XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNtYXJ0LWljb24gKm5nSWY9XCJidXR0b24uaWNvblwiIFtpY29uXT1cImJ1dHRvbi5pY29uXCI+PC9zbWFydC1pY29uPlxuICAgICAgICAgICAgICB7eyBidXR0b24ubGFiZWwgPz8gKGJ1dHRvbi50cmFuc2xhdG9yID8gYnV0dG9uLnRyYW5zbGF0b3IoZWxlbWVudCkudGl0bGUgOiAnJykgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPVwiY3VzdG9tQnV0dG9uQ2xpY2tlZCgkZXZlbnQsIGJ1dHRvbiwgZWxlbWVudClcIlxuICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwic21hcnRUYWJsZUJ1dHRvblR5cGUuUkFJU0VEXCJcbiAgICAgICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgY29sb3I9XCJ7eyBidXR0b24uY29sb3IgfX1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c21hcnQtaWNvbiAqbmdJZj1cImJ1dHRvbi5pY29uXCIgW2ljb25dPVwiYnV0dG9uLmljb25cIj48L3NtYXJ0LWljb24+XG4gICAgICAgICAgICAgIHt7IGJ1dHRvbi5sYWJlbCA/PyAoYnV0dG9uLnRyYW5zbGF0b3IgPyBidXR0b24udHJhbnNsYXRvcihlbGVtZW50KS50aXRsZSA6ICcnKSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8IS0tLS0tLSBNRU5VIC0tLS0tLT5cbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cInNtYXJ0VGFibGVCdXR0b25UeXBlLk1FTlVcIiBjbGFzcz1cIm1lbnUtYnV0dG9uXCI+XG4gICAgICAgICAgICAgIDwhLS0tLS0tIERFRkFVTFRfQUNUSU9OX0NPTFVNTiBJRCBUT09MQkFSIC0tLS0tLT5cbiAgICAgICAgICAgICAgPHNtYXJ0LXVpLWFjdGlvbi10b29sYmFyXG4gICAgICAgICAgICAgICAgW3VpQWN0aW9uTW9kZWxzXT1cImdldFJvd0NvbHVtbkFjdGlvbihlbGVtZW50LCBkZWZhdWx0QWN0aW9uVG9vbGJhcklkKVwiXG4gICAgICAgICAgICAgID48L3NtYXJ0LXVpLWFjdGlvbi10b29sYmFyPlxuXG4gICAgICAgICAgICAgIDwhLS0tLS0tIEdFTkVSSUMgSEFNQlVSR0VSIC0tLS0tLT5cbiAgICAgICAgICAgICAgPCEtLS0tLS0gVE9PTEJBUiAtLS0tLS0+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dNZW51QnV0dG9uKGVsZW1lbnQsIGJ1dHRvbilcIlxuICAgICAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImN1c3RvbUJ1dHRvbkNsaWNrZWQoJGV2ZW50LCBidXR0b24sIGVsZW1lbnQsIHVuZGVmaW5lZCwgdHJ1ZSlcIlxuICAgICAgICAgICAgICAgIGNvbG9yPVwie3sgYnV0dG9uLmNvbG9yIH19XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzbWFydC1pY29uICpuZ0lmPVwiYnV0dG9uLmljb25cIiBbaWNvbl09XCJidXR0b24uaWNvblwiPjwvc21hcnQtaWNvbj5cbiAgICAgICAgICAgICAgICA8IS0tIHt7IGJ1dHRvbi5sYWJlbCA/PyAoYnV0dG9uLnRyYW5zbGF0b3IgPyBidXR0b24udHJhbnNsYXRvcihlbGVtZW50KS50aXRsZSA6ICcnKSB9fSAtLT5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYnV0dG9uLm1lbnVJdGVtQnV0dG9uc1wiPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYnRuIG9mIGdldE1lbnVCdXR0b25zKGVsZW1lbnQsIGJ1dHRvbilcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY3VzdG9tQnV0dG9uQ2xpY2tlZCgkZXZlbnQsIGJ0biwgZWxlbWVudCwgdW5kZWZpbmVkLCB0cnVlKVwiXG4gICAgICAgICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNtYXJ0LWljb25cbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImJ0bj8udHJhbnNsYXRvcihidG4pPy5pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJidG4hLnRyYW5zbGF0b3IhKGJ0bikhLmljb24hXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvc21hcnQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAge3sgYnRuPy50cmFuc2xhdG9yKGJ0bik/LnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYnV0dG9uLm1lbnVJdGVtQnV0dG9uc1Byb3BlcnR5TmFtZVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYnRuIG9mIGdldE1lbnVJdGVtQnV0dG9uc1Byb3BlcnR5TmFtZShlbGVtZW50LCBidXR0b24pXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImJ0bi5jb2RlICE9PSBBQ1RJT05fU0VQRVJBVE9SXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY3VzdG9tQnV0dG9uQ2xpY2tlZCgkZXZlbnQsIGJ1dHRvbiwgZWxlbWVudCwgYnRuLCB0cnVlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidG4uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzbWFydFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBidG4/LmRlc2NyaXB0b3I/LnRvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBidG4/LmRlc2NyaXB0b3I/LnRvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBidXR0b24udHJhbnNsYXRvciEoYnRuKS50b29sdGlwXG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic21hcnQtdGFibGUtaWNvbi1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi50cmFuc2xhdG9yIShidG4pLmljb25Qb3NpdGlvbiA9PT0gJ1BPU1QnID8gJ3JldmVyc2VkJyA6ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjxzbWFydC1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYnV0dG9uLnRyYW5zbGF0b3IhKGJ0bikuaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cImJ1dHRvbi50cmFuc2xhdG9yIShidG4pLmljb24hXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NtYXJ0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBidXR0b24udHJhbnNsYXRvciEoYnRuKS50aXRsZSB9fTwvZGl2XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyICpuZ0lmPVwiYnRuLmNvZGUgPT09IEFDVElPTl9TRVBFUkFUT1JcIj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLS0tLS0gTUVOVSAtLS0tLS0+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyAmJiBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLmljb25cIj5cbiAgICAgICAgPHNtYXJ0LWljb25cbiAgICAgICAgICAqbmdJZj1cInNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0uaWNvbj8uaWNvblwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5pY29uPy5jc3NDbGFzcyA/PyAnJ1wiXG4gICAgICAgICAgW2NvbG9yXT1cInNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0uaWNvbj8uY29sb3JcIlxuICAgICAgICAgIFtpY29uXT1cInNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0uaWNvbiEuaWNvblwiXG4gICAgICAgID5cbiAgICAgICAgPC9zbWFydC1pY29uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyAmJlxuICAgICAgICAgIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0udHJhbnNsYXRvciAhPT0gdW5kZWZpbmVkXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIHt7IHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0udHJhbnNsYXRvciEoZ2V0VmFsdWUoZWxlbWVudCwgaGVhZGVyKSkgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMgJiZcbiAgICAgICAgICBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnR5TmFtZSA9PT0gJ2V4cGFuZCdcbiAgICAgICAgXCJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgIGFyaWEtbGFiZWw9XCJleHBhbmQgcm93XCJcbiAgICAgICAgKGNsaWNrKT1cIm9uVG9nZ2xlKGVsZW1lbnQsICRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8c21hcnQtaWNvbiAqbmdJZj1cImV4cGFuZGVkRWxlbWVudCAhPT0gZWxlbWVudFwiIFtpY29uXT1cIidrZXlib2FyZF9hcnJvd19kb3duJ1wiPjwvc21hcnQtaWNvbj5cbiAgICAgICAgPHNtYXJ0LWljb24gKm5nSWY9XCJleHBhbmRlZEVsZW1lbnQgPT09IGVsZW1lbnRcIiBbaWNvbl09XCIna2V5Ym9hcmRfYXJyb3dfdXAnXCI+PC9zbWFydC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgIXNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMgfHxcbiAgICAgICAgICAoc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyAmJlxuICAgICAgICAgICAgIXNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydGllcyAmJlxuICAgICAgICAgICAgIXNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0uaWNvbiAmJlxuICAgICAgICAgICAgIXNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0uYnV0dG9ucyAmJlxuICAgICAgICAgICAgIXNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0udHJhbnNsYXRvciAmJlxuICAgICAgICAgICAgIShzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnR5TmFtZSA9PT0gJ3NlbGVjdCcpICYmXG4gICAgICAgICAgICAhKHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydHlOYW1lID09PSAnZXhwYW5kJykpXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxzbWFydC1pY29uICpuZ0lmPVwiaGVhZGVyID09PSAnaWNvbidcIiBbaWNvbl09XCJnZXRWYWx1ZShlbGVtZW50LCBoZWFkZXIpIVwiPiA8L3NtYXJ0LWljb24+XG4gICAgICAgIDxpbWdcbiAgICAgICAgICAqbmdJZj1cImhlYWRlciA9PT0gJ2ltZydcIlxuICAgICAgICAgIFtzcmNdPVwiZ2V0VmFsdWUoZWxlbWVudCwgaGVhZGVyKVwiXG4gICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgICBjbGFzcz1cInNtYXJ0dGFibGVJbWdcIlxuICAgICAgICAvPlxuICAgICAgICA8IS0tLS0tLSBUT09MQkFSIC0tLS0tLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dDZWxsVG9vbGJhcihlbGVtZW50LCBoZWFkZXIpXCI+XG4gICAgICAgICAgPHNtYXJ0LXVpLWFjdGlvbi10b29sYmFyXG4gICAgICAgICAgICBbdWlBY3Rpb25Nb2RlbHNdPVwiZ2V0Um93Q29sdW1uQWN0aW9uKGVsZW1lbnQsIGhlYWRlcilcIlxuICAgICAgICAgID48L3NtYXJ0LXVpLWFjdGlvbi10b29sYmFyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLS0tLS0gVE9PTEJBUiAtLS0tLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgaGVhZGVyICE9PSAnaWNvbicgJiZcbiAgICAgICAgICAgIGhlYWRlciAhPT0gJ2ltZycgJiZcbiAgICAgICAgICAgIGhlYWRlciAhPT0gJ29wdGlvbicgJiZcbiAgICAgICAgICAgIGhlYWRlciAhPT0gJ2J1dHRvbicgJiZcbiAgICAgICAgICAgICFpc0ltYWdlUmVzb3VyY2UoZWxlbWVudCwgaGVhZGVyKVxuICAgICAgICAgIFwiXG4gICAgICAgICAgW2lubmVySHRtbF09XCJnZXRWYWx1ZShlbGVtZW50LCBoZWFkZXIpXCJcbiAgICAgICAgPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC90ZD5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSBFeHBhbmRlZCBDb250ZW50IENvbHVtbiAtIFRoZSBkZXRhaWwgcm93IGlzIG1hZGUgdXAgb2YgdGhpcyBvbmUgY29sdW1uIHRoYXQgc3BhbnMgYWNyb3NzIGFsbCBjb2x1bW5zIC0tPlxuICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImV4cGFuZGVkRGV0YWlsXCI+XG4gICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIiBbYXR0ci5jb2xzcGFuXT1cInNtYXJ0VGFibGUudGFibGVIZWFkZXJzLmxlbmd0aFwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImV4YW1wbGUtZWxlbWVudC1kZXRhaWxcIlxuICAgICAgICBbQGRldGFpbEV4cGFuZF09XCJlbGVtZW50ID09IGV4cGFuZGVkRWxlbWVudCA/ICdleHBhbmRlZCcgOiAnY29sbGFwc2VkJ1wiXG4gICAgICA+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZXhwYW5kZWRBcmVhPjwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L3RkPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cInNtYXJ0VGFibGUudGFibGVIZWFkZXJzOyBzdGlja3k6IHRydWVcIj48L3RyPlxuICA8bmctY29udGFpbmVyICptYXRSb3dEZWY9XCJsZXQgZWxlbWVudDsgY29sdW1uczogc21hcnRUYWJsZS50YWJsZUhlYWRlcnNcIj5cbiAgICA8dHJcbiAgICAgIG1hdC1yb3dcbiAgICAgIGNsYXNzPVwiZXhhbXBsZS1lbGVtZW50LXJvd1wiXG4gICAgICBbY2xhc3MuZXhhbXBsZS1leHBhbmRlZC1yb3ddPVwiZXhwYW5kZWRFbGVtZW50ID09PSBlbGVtZW50XCJcbiAgICAgIFtuZ0NsYXNzXT1cImdldFJvd0NsYXNzZXMoZWxlbWVudClcIlxuICAgICAgW25nU3R5bGVdPVwiZ2V0Um93U3R5bGVzKGVsZW1lbnQpXCJcbiAgICAgIChjbGljayk9XCJoYW5kbGVPblJvd0NsaWNrKGVsZW1lbnQpXCJcbiAgICAgIChkYmxjbGljayk9XCJoYW5kbGVPblJvd0RvdWJsZUNsaWNrKCRldmVudCwgZWxlbWVudClcIlxuICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiZWxlbWVudD8uaWQgPz8gbnVsbFwiXG4gICAgPjwvdHI+XG4gICAgPGxpYi1kZWZhdWx0LWFjdGlvbnMtcG9wdXBcbiAgICAgICpuZ0lmPVwic21hcnRUYWJsZS5kZWZhdWx0QWN0aW9uQ29kZXMgJiYgc21hcnRUYWJsZS5kZWZhdWx0QWN0aW9uQ29kZXMubGVuZ3RoID4gMFwiXG4gICAgICAjZGVmYXVsdEFjdGlvbk1lbnVcbiAgICAgIFtidXR0b25zXT1cImdldERlZmF1bHRBY3Rpb25zRm9yUm93KGVsZW1lbnQpIVwiXG4gICAgICBbcm93XT1cImVsZW1lbnRcIlxuICAgID48L2xpYi1kZWZhdWx0LWFjdGlvbnMtcG9wdXA+XG4gIDwvbmctY29udGFpbmVyPlxuICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogWydleHBhbmRlZERldGFpbCddXCIgY2xhc3M9XCJleGFtcGxlLWRldGFpbC1yb3dcIj48L3RyPlxuPC90YWJsZT5cbiJdfQ==
@@ -14,10 +14,10 @@ export class MobileTableComponent extends Table {
14
14
  super(cfService);
15
15
  }
16
16
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: MobileTableComponent, deps: [{ token: i1.ComponentFactoryService }], target: i0.ɵɵFactoryTarget.Component }); }
17
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: MobileTableComponent, selector: "lib-mobile-table", usesInheritance: true, ngImport: i0, template: "<div class=\"mobileTable\">\r\n <div\r\n class=\"mobileTableRow\"\r\n *ngFor=\"let row of smartTable.tableRows\"\r\n [ngClass]=\"getRowClasses(row)\"\r\n [ngStyle]=\"getRowStyles(row)\"\r\n [attr.data-testid]=\"row?.id ?? null\"\r\n >\r\n <div\r\n class=\"mobileTableCell\"\r\n *ngFor=\"let header of smartTable.customSmartTableHeaders; let i = index\"\r\n (click)=\"handleOnRowClick(row)\"\r\n (dblclick)=\"handleOnRowDoubleClick($event, row)\"\r\n >\r\n <div class=\"mobileTableCellHeader\" [attr.data-testid]=\"header.propertyName\">\r\n {{ header.label }}\r\n </div>\r\n\r\n <mat-checkbox\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders &&\r\n smartTable.customSmartTableHeaders[i].propertyName === 'select'\r\n \"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"\r\n $event\r\n ? setSelection(\r\n smartTable.selectionProperty\r\n ? smartTable.getValueDeeply(row, smartTable.selectionProperty)\r\n : row\r\n )\r\n : null\r\n \"\r\n [disabled]=\"isDisabled(row)\"\r\n [checked]=\"\r\n smartTable.selection!.isSelected(\r\n smartTable.selectionProperty\r\n ? smartTable.getValueDeeply(row, smartTable.selectionProperty)\r\n : row\r\n )\r\n \"\r\n [aria-label]=\"\r\n checkboxLabel(\r\n smartTable.selectionProperty\r\n ? smartTable.getValueDeeply(row, smartTable.selectionProperty)\r\n : row\r\n )\r\n \"\r\n >\r\n </mat-checkbox>\r\n <div\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].properties\r\n \"\r\n >\r\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATETIME\">\r\n {{\r\n getValue(row, header.propertyName)\r\n | smartDateTime: smartTable.customSmartTableHeaders[i].properties?.dateFormat\r\n }}\r\n </div>\r\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATE\">\r\n {{\r\n getValue(row, header.propertyName)\r\n | smartDate: smartTable.customSmartTableHeaders[i].properties?.dateFormat\r\n }}\r\n </div>\r\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().TIME\">\r\n {{\r\n getValue(row, header.propertyName)\r\n | smartTime: smartTable.customSmartTableHeaders[i].properties?.dateFormat\r\n }}\r\n </div>\r\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().CHECKBOX\">\r\n <mat-checkbox\r\n [disabled]=\"true\"\r\n [checked]=\"getValue(row, header.propertyName)\"\r\n ></mat-checkbox>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders[i].properties?.type === type().ICON &&\r\n smartTable.customSmartTableHeaders[i].properties?.icons?.length\r\n \"\r\n >\r\n <smart-icon\r\n [smartTooltip]=\"getToolTip(row, i)\"\r\n [icon]=\"getIcon(getValue(row, header.propertyName), i)!\"\r\n [color]=\"getColor(getValue(row, header.propertyName), i)\"\r\n >\r\n </smart-icon>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isImageResource(row, header.propertyName)\">\r\n <smart-icon\r\n [icon]=\"getImageResourceIcon(row, header.propertyName)\"\r\n [color]=\"getImageResourceColor(row, header.propertyName)\"\r\n >\r\n </smart-icon>\r\n </div>\r\n <div\r\n *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].buttons\"\r\n class=\"smart-table-buttons-col\"\r\n >\r\n <div *ngFor=\"let button of smartTable.customSmartTableHeaders[i].buttons\">\r\n <div *ngIf=\"showButton(button, row)\" [ngSwitch]=\"button.type\">\r\n <button\r\n (click)=\"customButtonClicked($event, button, row)\"\r\n *ngSwitchCase=\"smartTableButtonType.ICON\"\r\n mat-icon-button\r\n color=\"{{ button.color }}\"\r\n >\r\n <smart-icon title=\"{{ button.label }}\" [icon]=\"button.icon!\"></smart-icon>\r\n </button>\r\n <button\r\n (click)=\"customButtonClicked($event, button, row)\"\r\n *ngSwitchCase=\"smartTableButtonType.NORMAL\"\r\n mat-button\r\n color=\"{{ button.color }}\"\r\n >\r\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\r\n {{ button.label }}\r\n </button>\r\n <button\r\n (click)=\"customButtonClicked($event, button, row)\"\r\n *ngSwitchCase=\"smartTableButtonType.RAISED\"\r\n mat-raised-button\r\n color=\"{{ button.color }}\"\r\n >\r\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\r\n {{ button.label }}\r\n </button>\r\n <!------ MENU ------>\r\n <div *ngSwitchCase=\"smartTableButtonType.MENU\" class=\"menu-button\">\r\n <!------ DEFAULT_ACTION_COLUMN ID TOOLBAR ------>\r\n <smart-ui-action-toolbar\r\n [uiActionModels]=\"getRowColumnAction(element, defaultActionToolbarId)\"\r\n ></smart-ui-action-toolbar>\r\n\r\n <!------ GENERIC HAMBURGER ------>\r\n @if (shouldShowMenuButton(element)) {\r\n <smart-ui-action-toolbar\r\n [uiActionModels]=\"getRowMenuActionModelArray(element)\"\r\n ></smart-ui-action-toolbar>\r\n }\r\n <!------ MENU ------>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].icon\">\r\n <smart-icon\r\n *ngIf=\"smartTable.customSmartTableHeaders[i].icon?.icon\"\r\n [ngClass]=\"smartTable.customSmartTableHeaders[i].icon?.cssClass ?? ''\"\r\n [color]=\"smartTable.customSmartTableHeaders[i].icon?.color\"\r\n [icon]=\"smartTable.customSmartTableHeaders[i].icon!.icon\"\r\n >\r\n </smart-icon>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders &&\r\n smartTable.customSmartTableHeaders[i].translator !== undefined\r\n \"\r\n >\r\n {{ smartTable.customSmartTableHeaders[i].translator!(getValue(row, header.propertyName)) }}\r\n </div>\r\n <div\r\n *ngIf=\"\r\n !smartTable.customSmartTableHeaders ||\r\n (smartTable.customSmartTableHeaders &&\r\n !smartTable.customSmartTableHeaders[i].properties &&\r\n !smartTable.customSmartTableHeaders[i].icon &&\r\n !smartTable.customSmartTableHeaders[i].buttons &&\r\n !smartTable.customSmartTableHeaders[i].translator &&\r\n !(smartTable.customSmartTableHeaders[i].propertyName === 'select') &&\r\n !(smartTable.customSmartTableHeaders[i].propertyName === 'expand'))\r\n \"\r\n >\r\n <smart-icon\r\n *ngIf=\"header.propertyName === 'icon'\"\r\n [icon]=\"getValue(row, header.propertyName)!\"\r\n >\r\n </smart-icon>\r\n <img\r\n *ngIf=\"header.propertyName === 'img'\"\r\n [src]=\"getValue(row, header.propertyName)\"\r\n alt=\"\"\r\n class=\"smarttableImg\"\r\n />\r\n <div\r\n *ngIf=\"\r\n header.propertyName !== 'icon' &&\r\n header.propertyName !== 'img' &&\r\n header.propertyName !== 'option' &&\r\n header.propertyName !== 'button'\r\n \"\r\n [innerHtml]=\"getValue(row, header.propertyName)\"\r\n ></div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".mobileTable{display:flex;flex-direction:column}.mobileTableRow{display:flex;flex-direction:column;border-bottom:1px solid #ccc;padding:.5rem;gap:.5rem}.mobileTableCell{display:flex;flex-direction:column;gap:.25rem}.mobileTableCellHeader{font-weight:700;color:var(--primary-color)}.selected{background-color:var(--primary-light-color)}.mat-mdc-menu-item[disabled]{cursor:default!important}\n"], dependencies: [{ kind: "directive", type: i2.SmartTooltipDirective, selector: "[smartTooltip]", inputs: ["smartTooltip"] }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i6.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color", "imageResource"] }, { kind: "component", type: i7.UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService", "id", "scrollOnWrap", "toolbarPropertes"] }, { kind: "pipe", type: i8.SmartDateTimePipe, name: "smartDateTime" }, { kind: "pipe", type: i8.SmartDatePipe, name: "smartDate" }, { kind: "pipe", type: i8.SmartTimePipe, name: "smartTime" }] }); }
17
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: MobileTableComponent, selector: "lib-mobile-table", usesInheritance: true, ngImport: i0, template: "<div class=\"mobileTable\">\n <div\n class=\"mobileTableRow\"\n *ngFor=\"let row of smartTable.tableRows\"\n [ngClass]=\"getRowClasses(row)\"\n [ngStyle]=\"getRowStyles(row)\"\n [attr.data-testid]=\"row?.id ?? null\"\n >\n <div\n class=\"mobileTableCell\"\n *ngFor=\"let header of smartTable.customSmartTableHeaders; let i = index\"\n (click)=\"handleOnRowClick(row)\"\n (dblclick)=\"handleOnRowDoubleClick($event, row)\"\n >\n <div class=\"mobileTableCellHeader\" [attr.data-testid]=\"header.propertyName\">\n {{ header.label }}\n </div>\n\n <mat-checkbox\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].propertyName === 'select'\n \"\n (click)=\"$event.stopPropagation()\"\n (change)=\"\n $event\n ? setSelection(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(row, smartTable.selectionProperty)\n : row\n )\n : null\n \"\n [disabled]=\"isDisabled(row)\"\n [checked]=\"\n smartTable.selection!.isSelected(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(row, smartTable.selectionProperty)\n : row\n )\n \"\n [aria-label]=\"\n checkboxLabel(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(row, smartTable.selectionProperty)\n : row\n )\n \"\n >\n </mat-checkbox>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].properties\n \"\n >\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATETIME\">\n {{\n getValue(row, header.propertyName)\n | smartDateTime: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATE\">\n {{\n getValue(row, header.propertyName)\n | smartDate: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().TIME\">\n {{\n getValue(row, header.propertyName)\n | smartTime: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().CHECKBOX\">\n <mat-checkbox\n [disabled]=\"true\"\n [checked]=\"getValue(row, header.propertyName)\"\n ></mat-checkbox>\n </div>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders[i].properties?.type === type().ICON &&\n smartTable.customSmartTableHeaders[i].properties?.icons?.length\n \"\n >\n <smart-icon\n [smartTooltip]=\"getToolTip(row, i)\"\n [icon]=\"getIcon(getValue(row, header.propertyName), i)!\"\n [color]=\"getColor(getValue(row, header.propertyName), i)\"\n >\n </smart-icon>\n </div>\n </div>\n <div *ngIf=\"isImageResource(row, header.propertyName)\">\n <smart-icon\n [icon]=\"getImageResourceIcon(row, header.propertyName)\"\n [color]=\"getImageResourceColor(row, header.propertyName)\"\n >\n </smart-icon>\n </div>\n <div\n *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].buttons\"\n class=\"smart-table-buttons-col\"\n >\n <div *ngFor=\"let button of smartTable.customSmartTableHeaders[i].buttons\">\n <div *ngIf=\"showButton(button, row)\" [ngSwitch]=\"button.type\">\n <button\n (click)=\"customButtonClicked($event, button, row)\"\n *ngSwitchCase=\"smartTableButtonType.ICON\"\n mat-icon-button\n color=\"{{ button.color }}\"\n >\n <smart-icon title=\"{{ button.label }}\" [icon]=\"button.icon!\"></smart-icon>\n </button>\n <button\n (click)=\"customButtonClicked($event, button, row)\"\n *ngSwitchCase=\"smartTableButtonType.NORMAL\"\n mat-button\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n {{ button.label }}\n </button>\n <button\n (click)=\"customButtonClicked($event, button, row)\"\n *ngSwitchCase=\"smartTableButtonType.RAISED\"\n mat-raised-button\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n {{ button.label }}\n </button>\n <!------ MENU ------>\n <div *ngSwitchCase=\"smartTableButtonType.MENU\" class=\"menu-button\">\n <!------ DEFAULT_ACTION_COLUMN ID TOOLBAR ------>\n <smart-ui-action-toolbar\n [uiActionModels]=\"getRowColumnAction(element, defaultActionToolbarId)\"\n ></smart-ui-action-toolbar>\n\n <!------ GENERIC HAMBURGER ------>\n @if (shouldShowMenuButton(element)) {\n <smart-ui-action-toolbar\n [uiActionModels]=\"getRowMenuActionModelArray(element)\"\n ></smart-ui-action-toolbar>\n }\n <!------ MENU ------>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].icon\">\n <smart-icon\n *ngIf=\"smartTable.customSmartTableHeaders[i].icon?.icon\"\n [ngClass]=\"smartTable.customSmartTableHeaders[i].icon?.cssClass ?? ''\"\n [color]=\"smartTable.customSmartTableHeaders[i].icon?.color\"\n [icon]=\"smartTable.customSmartTableHeaders[i].icon!.icon\"\n >\n </smart-icon>\n </div>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].translator !== undefined\n \"\n >\n {{ smartTable.customSmartTableHeaders[i].translator!(getValue(row, header.propertyName)) }}\n </div>\n <div\n *ngIf=\"\n !smartTable.customSmartTableHeaders ||\n (smartTable.customSmartTableHeaders &&\n !smartTable.customSmartTableHeaders[i].properties &&\n !smartTable.customSmartTableHeaders[i].icon &&\n !smartTable.customSmartTableHeaders[i].buttons &&\n !smartTable.customSmartTableHeaders[i].translator &&\n !(smartTable.customSmartTableHeaders[i].propertyName === 'select') &&\n !(smartTable.customSmartTableHeaders[i].propertyName === 'expand'))\n \"\n >\n <smart-icon\n *ngIf=\"header.propertyName === 'icon'\"\n [icon]=\"getValue(row, header.propertyName)!\"\n >\n </smart-icon>\n <img\n *ngIf=\"header.propertyName === 'img'\"\n [src]=\"getValue(row, header.propertyName)\"\n alt=\"\"\n class=\"smarttableImg\"\n />\n <div\n *ngIf=\"\n header.propertyName !== 'icon' &&\n header.propertyName !== 'img' &&\n header.propertyName !== 'option' &&\n header.propertyName !== 'button'\n \"\n [innerHtml]=\"getValue(row, header.propertyName)\"\n ></div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".mobileTable{display:flex;flex-direction:column}.mobileTableRow{display:flex;flex-direction:column;border-bottom:1px solid #ccc;padding:.5rem;gap:.5rem}.mobileTableCell{display:flex;flex-direction:column;gap:.25rem}.mobileTableCellHeader{font-weight:700;color:var(--primary-color)}.selected{background-color:var(--primary-light-color)}.mat-mdc-menu-item[disabled]{cursor:default!important}\n"], dependencies: [{ kind: "directive", type: i2.SmartTooltipDirective, selector: "[smartTooltip]", inputs: ["smartTooltip"] }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i6.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color", "imageResource"] }, { kind: "component", type: i7.UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService", "id", "scrollOnWrap", "toolbarPropertes"] }, { kind: "pipe", type: i8.SmartDateTimePipe, name: "smartDateTime" }, { kind: "pipe", type: i8.SmartDatePipe, name: "smartDate" }, { kind: "pipe", type: i8.SmartTimePipe, name: "smartTime" }] }); }
18
18
  }
19
19
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: MobileTableComponent, decorators: [{
20
20
  type: Component,
21
- args: [{ selector: 'lib-mobile-table', template: "<div class=\"mobileTable\">\r\n <div\r\n class=\"mobileTableRow\"\r\n *ngFor=\"let row of smartTable.tableRows\"\r\n [ngClass]=\"getRowClasses(row)\"\r\n [ngStyle]=\"getRowStyles(row)\"\r\n [attr.data-testid]=\"row?.id ?? null\"\r\n >\r\n <div\r\n class=\"mobileTableCell\"\r\n *ngFor=\"let header of smartTable.customSmartTableHeaders; let i = index\"\r\n (click)=\"handleOnRowClick(row)\"\r\n (dblclick)=\"handleOnRowDoubleClick($event, row)\"\r\n >\r\n <div class=\"mobileTableCellHeader\" [attr.data-testid]=\"header.propertyName\">\r\n {{ header.label }}\r\n </div>\r\n\r\n <mat-checkbox\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders &&\r\n smartTable.customSmartTableHeaders[i].propertyName === 'select'\r\n \"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"\r\n $event\r\n ? setSelection(\r\n smartTable.selectionProperty\r\n ? smartTable.getValueDeeply(row, smartTable.selectionProperty)\r\n : row\r\n )\r\n : null\r\n \"\r\n [disabled]=\"isDisabled(row)\"\r\n [checked]=\"\r\n smartTable.selection!.isSelected(\r\n smartTable.selectionProperty\r\n ? smartTable.getValueDeeply(row, smartTable.selectionProperty)\r\n : row\r\n )\r\n \"\r\n [aria-label]=\"\r\n checkboxLabel(\r\n smartTable.selectionProperty\r\n ? smartTable.getValueDeeply(row, smartTable.selectionProperty)\r\n : row\r\n )\r\n \"\r\n >\r\n </mat-checkbox>\r\n <div\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].properties\r\n \"\r\n >\r\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATETIME\">\r\n {{\r\n getValue(row, header.propertyName)\r\n | smartDateTime: smartTable.customSmartTableHeaders[i].properties?.dateFormat\r\n }}\r\n </div>\r\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATE\">\r\n {{\r\n getValue(row, header.propertyName)\r\n | smartDate: smartTable.customSmartTableHeaders[i].properties?.dateFormat\r\n }}\r\n </div>\r\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().TIME\">\r\n {{\r\n getValue(row, header.propertyName)\r\n | smartTime: smartTable.customSmartTableHeaders[i].properties?.dateFormat\r\n }}\r\n </div>\r\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().CHECKBOX\">\r\n <mat-checkbox\r\n [disabled]=\"true\"\r\n [checked]=\"getValue(row, header.propertyName)\"\r\n ></mat-checkbox>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders[i].properties?.type === type().ICON &&\r\n smartTable.customSmartTableHeaders[i].properties?.icons?.length\r\n \"\r\n >\r\n <smart-icon\r\n [smartTooltip]=\"getToolTip(row, i)\"\r\n [icon]=\"getIcon(getValue(row, header.propertyName), i)!\"\r\n [color]=\"getColor(getValue(row, header.propertyName), i)\"\r\n >\r\n </smart-icon>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isImageResource(row, header.propertyName)\">\r\n <smart-icon\r\n [icon]=\"getImageResourceIcon(row, header.propertyName)\"\r\n [color]=\"getImageResourceColor(row, header.propertyName)\"\r\n >\r\n </smart-icon>\r\n </div>\r\n <div\r\n *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].buttons\"\r\n class=\"smart-table-buttons-col\"\r\n >\r\n <div *ngFor=\"let button of smartTable.customSmartTableHeaders[i].buttons\">\r\n <div *ngIf=\"showButton(button, row)\" [ngSwitch]=\"button.type\">\r\n <button\r\n (click)=\"customButtonClicked($event, button, row)\"\r\n *ngSwitchCase=\"smartTableButtonType.ICON\"\r\n mat-icon-button\r\n color=\"{{ button.color }}\"\r\n >\r\n <smart-icon title=\"{{ button.label }}\" [icon]=\"button.icon!\"></smart-icon>\r\n </button>\r\n <button\r\n (click)=\"customButtonClicked($event, button, row)\"\r\n *ngSwitchCase=\"smartTableButtonType.NORMAL\"\r\n mat-button\r\n color=\"{{ button.color }}\"\r\n >\r\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\r\n {{ button.label }}\r\n </button>\r\n <button\r\n (click)=\"customButtonClicked($event, button, row)\"\r\n *ngSwitchCase=\"smartTableButtonType.RAISED\"\r\n mat-raised-button\r\n color=\"{{ button.color }}\"\r\n >\r\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\r\n {{ button.label }}\r\n </button>\r\n <!------ MENU ------>\r\n <div *ngSwitchCase=\"smartTableButtonType.MENU\" class=\"menu-button\">\r\n <!------ DEFAULT_ACTION_COLUMN ID TOOLBAR ------>\r\n <smart-ui-action-toolbar\r\n [uiActionModels]=\"getRowColumnAction(element, defaultActionToolbarId)\"\r\n ></smart-ui-action-toolbar>\r\n\r\n <!------ GENERIC HAMBURGER ------>\r\n @if (shouldShowMenuButton(element)) {\r\n <smart-ui-action-toolbar\r\n [uiActionModels]=\"getRowMenuActionModelArray(element)\"\r\n ></smart-ui-action-toolbar>\r\n }\r\n <!------ MENU ------>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].icon\">\r\n <smart-icon\r\n *ngIf=\"smartTable.customSmartTableHeaders[i].icon?.icon\"\r\n [ngClass]=\"smartTable.customSmartTableHeaders[i].icon?.cssClass ?? ''\"\r\n [color]=\"smartTable.customSmartTableHeaders[i].icon?.color\"\r\n [icon]=\"smartTable.customSmartTableHeaders[i].icon!.icon\"\r\n >\r\n </smart-icon>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders &&\r\n smartTable.customSmartTableHeaders[i].translator !== undefined\r\n \"\r\n >\r\n {{ smartTable.customSmartTableHeaders[i].translator!(getValue(row, header.propertyName)) }}\r\n </div>\r\n <div\r\n *ngIf=\"\r\n !smartTable.customSmartTableHeaders ||\r\n (smartTable.customSmartTableHeaders &&\r\n !smartTable.customSmartTableHeaders[i].properties &&\r\n !smartTable.customSmartTableHeaders[i].icon &&\r\n !smartTable.customSmartTableHeaders[i].buttons &&\r\n !smartTable.customSmartTableHeaders[i].translator &&\r\n !(smartTable.customSmartTableHeaders[i].propertyName === 'select') &&\r\n !(smartTable.customSmartTableHeaders[i].propertyName === 'expand'))\r\n \"\r\n >\r\n <smart-icon\r\n *ngIf=\"header.propertyName === 'icon'\"\r\n [icon]=\"getValue(row, header.propertyName)!\"\r\n >\r\n </smart-icon>\r\n <img\r\n *ngIf=\"header.propertyName === 'img'\"\r\n [src]=\"getValue(row, header.propertyName)\"\r\n alt=\"\"\r\n class=\"smarttableImg\"\r\n />\r\n <div\r\n *ngIf=\"\r\n header.propertyName !== 'icon' &&\r\n header.propertyName !== 'img' &&\r\n header.propertyName !== 'option' &&\r\n header.propertyName !== 'button'\r\n \"\r\n [innerHtml]=\"getValue(row, header.propertyName)\"\r\n ></div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".mobileTable{display:flex;flex-direction:column}.mobileTableRow{display:flex;flex-direction:column;border-bottom:1px solid #ccc;padding:.5rem;gap:.5rem}.mobileTableCell{display:flex;flex-direction:column;gap:.25rem}.mobileTableCellHeader{font-weight:700;color:var(--primary-color)}.selected{background-color:var(--primary-light-color)}.mat-mdc-menu-item[disabled]{cursor:default!important}\n"] }]
21
+ args: [{ selector: 'lib-mobile-table', template: "<div class=\"mobileTable\">\n <div\n class=\"mobileTableRow\"\n *ngFor=\"let row of smartTable.tableRows\"\n [ngClass]=\"getRowClasses(row)\"\n [ngStyle]=\"getRowStyles(row)\"\n [attr.data-testid]=\"row?.id ?? null\"\n >\n <div\n class=\"mobileTableCell\"\n *ngFor=\"let header of smartTable.customSmartTableHeaders; let i = index\"\n (click)=\"handleOnRowClick(row)\"\n (dblclick)=\"handleOnRowDoubleClick($event, row)\"\n >\n <div class=\"mobileTableCellHeader\" [attr.data-testid]=\"header.propertyName\">\n {{ header.label }}\n </div>\n\n <mat-checkbox\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].propertyName === 'select'\n \"\n (click)=\"$event.stopPropagation()\"\n (change)=\"\n $event\n ? setSelection(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(row, smartTable.selectionProperty)\n : row\n )\n : null\n \"\n [disabled]=\"isDisabled(row)\"\n [checked]=\"\n smartTable.selection!.isSelected(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(row, smartTable.selectionProperty)\n : row\n )\n \"\n [aria-label]=\"\n checkboxLabel(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(row, smartTable.selectionProperty)\n : row\n )\n \"\n >\n </mat-checkbox>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].properties\n \"\n >\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATETIME\">\n {{\n getValue(row, header.propertyName)\n | smartDateTime: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATE\">\n {{\n getValue(row, header.propertyName)\n | smartDate: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().TIME\">\n {{\n getValue(row, header.propertyName)\n | smartTime: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().CHECKBOX\">\n <mat-checkbox\n [disabled]=\"true\"\n [checked]=\"getValue(row, header.propertyName)\"\n ></mat-checkbox>\n </div>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders[i].properties?.type === type().ICON &&\n smartTable.customSmartTableHeaders[i].properties?.icons?.length\n \"\n >\n <smart-icon\n [smartTooltip]=\"getToolTip(row, i)\"\n [icon]=\"getIcon(getValue(row, header.propertyName), i)!\"\n [color]=\"getColor(getValue(row, header.propertyName), i)\"\n >\n </smart-icon>\n </div>\n </div>\n <div *ngIf=\"isImageResource(row, header.propertyName)\">\n <smart-icon\n [icon]=\"getImageResourceIcon(row, header.propertyName)\"\n [color]=\"getImageResourceColor(row, header.propertyName)\"\n >\n </smart-icon>\n </div>\n <div\n *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].buttons\"\n class=\"smart-table-buttons-col\"\n >\n <div *ngFor=\"let button of smartTable.customSmartTableHeaders[i].buttons\">\n <div *ngIf=\"showButton(button, row)\" [ngSwitch]=\"button.type\">\n <button\n (click)=\"customButtonClicked($event, button, row)\"\n *ngSwitchCase=\"smartTableButtonType.ICON\"\n mat-icon-button\n color=\"{{ button.color }}\"\n >\n <smart-icon title=\"{{ button.label }}\" [icon]=\"button.icon!\"></smart-icon>\n </button>\n <button\n (click)=\"customButtonClicked($event, button, row)\"\n *ngSwitchCase=\"smartTableButtonType.NORMAL\"\n mat-button\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n {{ button.label }}\n </button>\n <button\n (click)=\"customButtonClicked($event, button, row)\"\n *ngSwitchCase=\"smartTableButtonType.RAISED\"\n mat-raised-button\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n {{ button.label }}\n </button>\n <!------ MENU ------>\n <div *ngSwitchCase=\"smartTableButtonType.MENU\" class=\"menu-button\">\n <!------ DEFAULT_ACTION_COLUMN ID TOOLBAR ------>\n <smart-ui-action-toolbar\n [uiActionModels]=\"getRowColumnAction(element, defaultActionToolbarId)\"\n ></smart-ui-action-toolbar>\n\n <!------ GENERIC HAMBURGER ------>\n @if (shouldShowMenuButton(element)) {\n <smart-ui-action-toolbar\n [uiActionModels]=\"getRowMenuActionModelArray(element)\"\n ></smart-ui-action-toolbar>\n }\n <!------ MENU ------>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].icon\">\n <smart-icon\n *ngIf=\"smartTable.customSmartTableHeaders[i].icon?.icon\"\n [ngClass]=\"smartTable.customSmartTableHeaders[i].icon?.cssClass ?? ''\"\n [color]=\"smartTable.customSmartTableHeaders[i].icon?.color\"\n [icon]=\"smartTable.customSmartTableHeaders[i].icon!.icon\"\n >\n </smart-icon>\n </div>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].translator !== undefined\n \"\n >\n {{ smartTable.customSmartTableHeaders[i].translator!(getValue(row, header.propertyName)) }}\n </div>\n <div\n *ngIf=\"\n !smartTable.customSmartTableHeaders ||\n (smartTable.customSmartTableHeaders &&\n !smartTable.customSmartTableHeaders[i].properties &&\n !smartTable.customSmartTableHeaders[i].icon &&\n !smartTable.customSmartTableHeaders[i].buttons &&\n !smartTable.customSmartTableHeaders[i].translator &&\n !(smartTable.customSmartTableHeaders[i].propertyName === 'select') &&\n !(smartTable.customSmartTableHeaders[i].propertyName === 'expand'))\n \"\n >\n <smart-icon\n *ngIf=\"header.propertyName === 'icon'\"\n [icon]=\"getValue(row, header.propertyName)!\"\n >\n </smart-icon>\n <img\n *ngIf=\"header.propertyName === 'img'\"\n [src]=\"getValue(row, header.propertyName)\"\n alt=\"\"\n class=\"smarttableImg\"\n />\n <div\n *ngIf=\"\n header.propertyName !== 'icon' &&\n header.propertyName !== 'img' &&\n header.propertyName !== 'option' &&\n header.propertyName !== 'button'\n \"\n [innerHtml]=\"getValue(row, header.propertyName)\"\n ></div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".mobileTable{display:flex;flex-direction:column}.mobileTableRow{display:flex;flex-direction:column;border-bottom:1px solid #ccc;padding:.5rem;gap:.5rem}.mobileTableCell{display:flex;flex-direction:column;gap:.25rem}.mobileTableCellHeader{font-weight:700;color:var(--primary-color)}.selected{background-color:var(--primary-light-color)}.mat-mdc-menu-item[disabled]{cursor:default!important}\n"] }]
22
22
  }], ctorParameters: () => [{ type: i1.ComponentFactoryService }] });
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9iaWxlLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LXRhYmxlL3RhYmxlcy9tb2JpbGUtdGFibGUvbW9iaWxlLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LXRhYmxlL3RhYmxlcy9tb2JpbGUtdGFibGUvbW9iaWxlLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFVBQVUsQ0FBQzs7Ozs7Ozs7OztBQVFqQyxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsS0FBSztJQUM3QyxZQUFZLFNBQWtDO1FBQzVDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNuQixDQUFDOytHQUhVLG9CQUFvQjttR0FBcEIsb0JBQW9CLCtFQ1RqQywwbVFBMk1BOzs0RkRsTWEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUYWJsZSB9IGZyb20gJy4uL3RhYmxlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50RmFjdG9yeVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnQtZmFjdG9yeS1zZXJ2aWNlL3Byb2plY3RzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLW1vYmlsZS10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL21vYmlsZS10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbW9iaWxlLXRhYmxlLmNvbXBvbmVudC5jc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1vYmlsZVRhYmxlQ29tcG9uZW50IGV4dGVuZHMgVGFibGUge1xyXG4gIGNvbnN0cnVjdG9yKGNmU2VydmljZTogQ29tcG9uZW50RmFjdG9yeVNlcnZpY2UpIHtcclxuICAgIHN1cGVyKGNmU2VydmljZSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJtb2JpbGVUYWJsZVwiPlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwibW9iaWxlVGFibGVSb3dcIlxyXG4gICAgKm5nRm9yPVwibGV0IHJvdyBvZiBzbWFydFRhYmxlLnRhYmxlUm93c1wiXHJcbiAgICBbbmdDbGFzc109XCJnZXRSb3dDbGFzc2VzKHJvdylcIlxyXG4gICAgW25nU3R5bGVdPVwiZ2V0Um93U3R5bGVzKHJvdylcIlxyXG4gICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwicm93Py5pZCA/PyBudWxsXCJcclxuICA+XHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzPVwibW9iaWxlVGFibGVDZWxsXCJcclxuICAgICAgKm5nRm9yPVwibGV0IGhlYWRlciBvZiBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgKGNsaWNrKT1cImhhbmRsZU9uUm93Q2xpY2socm93KVwiXHJcbiAgICAgIChkYmxjbGljayk9XCJoYW5kbGVPblJvd0RvdWJsZUNsaWNrKCRldmVudCwgcm93KVwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2JpbGVUYWJsZUNlbGxIZWFkZXJcIiBbYXR0ci5kYXRhLXRlc3RpZF09XCJoZWFkZXIucHJvcGVydHlOYW1lXCI+XHJcbiAgICAgICAge3sgaGVhZGVyLmxhYmVsIH19XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzICYmXHJcbiAgICAgICAgICBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnR5TmFtZSA9PT0gJ3NlbGVjdCdcclxuICAgICAgICBcIlxyXG4gICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgIChjaGFuZ2UpPVwiXHJcbiAgICAgICAgICAkZXZlbnRcclxuICAgICAgICAgICAgPyBzZXRTZWxlY3Rpb24oXHJcbiAgICAgICAgICAgICAgICBzbWFydFRhYmxlLnNlbGVjdGlvblByb3BlcnR5XHJcbiAgICAgICAgICAgICAgICAgID8gc21hcnRUYWJsZS5nZXRWYWx1ZURlZXBseShyb3csIHNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHkpXHJcbiAgICAgICAgICAgICAgICAgIDogcm93XHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICA6IG51bGxcclxuICAgICAgICBcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkKHJvdylcIlxyXG4gICAgICAgIFtjaGVja2VkXT1cIlxyXG4gICAgICAgICAgc21hcnRUYWJsZS5zZWxlY3Rpb24hLmlzU2VsZWN0ZWQoXHJcbiAgICAgICAgICAgIHNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHlcclxuICAgICAgICAgICAgICA/IHNtYXJ0VGFibGUuZ2V0VmFsdWVEZWVwbHkocm93LCBzbWFydFRhYmxlLnNlbGVjdGlvblByb3BlcnR5KVxyXG4gICAgICAgICAgICAgIDogcm93XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgXCJcclxuICAgICAgICBbYXJpYS1sYWJlbF09XCJcclxuICAgICAgICAgIGNoZWNrYm94TGFiZWwoXHJcbiAgICAgICAgICAgIHNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHlcclxuICAgICAgICAgICAgICA/IHNtYXJ0VGFibGUuZ2V0VmFsdWVEZWVwbHkocm93LCBzbWFydFRhYmxlLnNlbGVjdGlvblByb3BlcnR5KVxyXG4gICAgICAgICAgICAgIDogcm93XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgXCJcclxuICAgICAgPlxyXG4gICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgPGRpdlxyXG4gICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzICYmIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydGllc1xyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0aWVzPy50eXBlID09PSB0eXBlKCkuREFURVRJTUVcIj5cclxuICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgIGdldFZhbHVlKHJvdywgaGVhZGVyLnByb3BlcnR5TmFtZSlcclxuICAgICAgICAgICAgICB8IHNtYXJ0RGF0ZVRpbWU6IHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydGllcz8uZGF0ZUZvcm1hdFxyXG4gICAgICAgICAgfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0aWVzPy50eXBlID09PSB0eXBlKCkuREFURVwiPlxyXG4gICAgICAgICAge3tcclxuICAgICAgICAgICAgZ2V0VmFsdWUocm93LCBoZWFkZXIucHJvcGVydHlOYW1lKVxyXG4gICAgICAgICAgICAgIHwgc21hcnREYXRlOiBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnRpZXM/LmRhdGVGb3JtYXRcclxuICAgICAgICAgIH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydGllcz8udHlwZSA9PT0gdHlwZSgpLlRJTUVcIj5cclxuICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgIGdldFZhbHVlKHJvdywgaGVhZGVyLnByb3BlcnR5TmFtZSlcclxuICAgICAgICAgICAgICB8IHNtYXJ0VGltZTogc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0aWVzPy5kYXRlRm9ybWF0XHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnRpZXM/LnR5cGUgPT09IHR5cGUoKS5DSEVDS0JPWFwiPlxyXG4gICAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cImdldFZhbHVlKHJvdywgaGVhZGVyLnByb3BlcnR5TmFtZSlcIlxyXG4gICAgICAgICAgPjwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydGllcz8udHlwZSA9PT0gdHlwZSgpLklDT04gJiZcclxuICAgICAgICAgICAgc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0aWVzPy5pY29ucz8ubGVuZ3RoXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxzbWFydC1pY29uXHJcbiAgICAgICAgICAgIFtzbWFydFRvb2x0aXBdPVwiZ2V0VG9vbFRpcChyb3csIGkpXCJcclxuICAgICAgICAgICAgW2ljb25dPVwiZ2V0SWNvbihnZXRWYWx1ZShyb3csIGhlYWRlci5wcm9wZXJ0eU5hbWUpLCBpKSFcIlxyXG4gICAgICAgICAgICBbY29sb3JdPVwiZ2V0Q29sb3IoZ2V0VmFsdWUocm93LCBoZWFkZXIucHJvcGVydHlOYW1lKSwgaSlcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPC9zbWFydC1pY29uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiAqbmdJZj1cImlzSW1hZ2VSZXNvdXJjZShyb3csIGhlYWRlci5wcm9wZXJ0eU5hbWUpXCI+XHJcbiAgICAgICAgPHNtYXJ0LWljb25cclxuICAgICAgICAgIFtpY29uXT1cImdldEltYWdlUmVzb3VyY2VJY29uKHJvdywgaGVhZGVyLnByb3BlcnR5TmFtZSlcIlxyXG4gICAgICAgICAgW2NvbG9yXT1cImdldEltYWdlUmVzb3VyY2VDb2xvcihyb3csIGhlYWRlci5wcm9wZXJ0eU5hbWUpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC9zbWFydC1pY29uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgICpuZ0lmPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyAmJiBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLmJ1dHRvbnNcIlxyXG4gICAgICAgIGNsYXNzPVwic21hcnQtdGFibGUtYnV0dG9ucy1jb2xcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0uYnV0dG9uc1wiPlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dCdXR0b24oYnV0dG9uLCByb3cpXCIgW25nU3dpdGNoXT1cImJ1dHRvbi50eXBlXCI+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAoY2xpY2spPVwiY3VzdG9tQnV0dG9uQ2xpY2tlZCgkZXZlbnQsIGJ1dHRvbiwgcm93KVwiXHJcbiAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cInNtYXJ0VGFibGVCdXR0b25UeXBlLklDT05cIlxyXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgIGNvbG9yPVwie3sgYnV0dG9uLmNvbG9yIH19XCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzbWFydC1pY29uIHRpdGxlPVwie3sgYnV0dG9uLmxhYmVsIH19XCIgW2ljb25dPVwiYnV0dG9uLmljb24hXCI+PC9zbWFydC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJjdXN0b21CdXR0b25DbGlja2VkKCRldmVudCwgYnV0dG9uLCByb3cpXCJcclxuICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwic21hcnRUYWJsZUJ1dHRvblR5cGUuTk9STUFMXCJcclxuICAgICAgICAgICAgICBtYXQtYnV0dG9uXHJcbiAgICAgICAgICAgICAgY29sb3I9XCJ7eyBidXR0b24uY29sb3IgfX1cIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHNtYXJ0LWljb24gKm5nSWY9XCJidXR0b24uaWNvblwiIFtpY29uXT1cImJ1dHRvbi5pY29uXCI+PC9zbWFydC1pY29uPlxyXG4gICAgICAgICAgICAgIHt7IGJ1dHRvbi5sYWJlbCB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJjdXN0b21CdXR0b25DbGlja2VkKCRldmVudCwgYnV0dG9uLCByb3cpXCJcclxuICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwic21hcnRUYWJsZUJ1dHRvblR5cGUuUkFJU0VEXCJcclxuICAgICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgICAgIGNvbG9yPVwie3sgYnV0dG9uLmNvbG9yIH19XCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzbWFydC1pY29uICpuZ0lmPVwiYnV0dG9uLmljb25cIiBbaWNvbl09XCJidXR0b24uaWNvblwiPjwvc21hcnQtaWNvbj5cclxuICAgICAgICAgICAgICB7eyBidXR0b24ubGFiZWwgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwhLS0tLS0tIE1FTlUgLS0tLS0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCJzbWFydFRhYmxlQnV0dG9uVHlwZS5NRU5VXCIgY2xhc3M9XCJtZW51LWJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgIDwhLS0tLS0tIERFRkFVTFRfQUNUSU9OX0NPTFVNTiBJRCBUT09MQkFSIC0tLS0tLT5cclxuICAgICAgICAgICAgICA8c21hcnQtdWktYWN0aW9uLXRvb2xiYXJcclxuICAgICAgICAgICAgICAgIFt1aUFjdGlvbk1vZGVsc109XCJnZXRSb3dDb2x1bW5BY3Rpb24oZWxlbWVudCwgZGVmYXVsdEFjdGlvblRvb2xiYXJJZClcIlxyXG4gICAgICAgICAgICAgID48L3NtYXJ0LXVpLWFjdGlvbi10b29sYmFyPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tLS0tLSBHRU5FUklDIEhBTUJVUkdFUiAtLS0tLS0+XHJcbiAgICAgICAgICAgICAgQGlmIChzaG91bGRTaG93TWVudUJ1dHRvbihlbGVtZW50KSkge1xyXG4gICAgICAgICAgICAgICAgPHNtYXJ0LXVpLWFjdGlvbi10b29sYmFyXHJcbiAgICAgICAgICAgICAgICAgIFt1aUFjdGlvbk1vZGVsc109XCJnZXRSb3dNZW51QWN0aW9uTW9kZWxBcnJheShlbGVtZW50KVwiXHJcbiAgICAgICAgICAgICAgICA+PC9zbWFydC11aS1hY3Rpb24tdG9vbGJhcj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPCEtLS0tLS0gTUVOVSAtLS0tLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyAmJiBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLmljb25cIj5cclxuICAgICAgICA8c21hcnQtaWNvblxyXG4gICAgICAgICAgKm5nSWY9XCJzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLmljb24/Lmljb25cIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5pY29uPy5jc3NDbGFzcyA/PyAnJ1wiXHJcbiAgICAgICAgICBbY29sb3JdPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5pY29uPy5jb2xvclwiXHJcbiAgICAgICAgICBbaWNvbl09XCJzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLmljb24hLmljb25cIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L3NtYXJ0LWljb24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMgJiZcclxuICAgICAgICAgIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0udHJhbnNsYXRvciAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgXCJcclxuICAgICAgPlxyXG4gICAgICAgIHt7IHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0udHJhbnNsYXRvciEoZ2V0VmFsdWUocm93LCBoZWFkZXIucHJvcGVydHlOYW1lKSkgfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgIXNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMgfHxcclxuICAgICAgICAgIChzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzICYmXHJcbiAgICAgICAgICAgICFzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnRpZXMgJiZcclxuICAgICAgICAgICAgIXNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0uaWNvbiAmJlxyXG4gICAgICAgICAgICAhc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5idXR0b25zICYmXHJcbiAgICAgICAgICAgICFzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnRyYW5zbGF0b3IgJiZcclxuICAgICAgICAgICAgIShzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnR5TmFtZSA9PT0gJ3NlbGVjdCcpICYmXHJcbiAgICAgICAgICAgICEoc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0eU5hbWUgPT09ICdleHBhbmQnKSlcclxuICAgICAgICBcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHNtYXJ0LWljb25cclxuICAgICAgICAgICpuZ0lmPVwiaGVhZGVyLnByb3BlcnR5TmFtZSA9PT0gJ2ljb24nXCJcclxuICAgICAgICAgIFtpY29uXT1cImdldFZhbHVlKHJvdywgaGVhZGVyLnByb3BlcnR5TmFtZSkhXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC9zbWFydC1pY29uPlxyXG4gICAgICAgIDxpbWdcclxuICAgICAgICAgICpuZ0lmPVwiaGVhZGVyLnByb3BlcnR5TmFtZSA9PT0gJ2ltZydcIlxyXG4gICAgICAgICAgW3NyY109XCJnZXRWYWx1ZShyb3csIGhlYWRlci5wcm9wZXJ0eU5hbWUpXCJcclxuICAgICAgICAgIGFsdD1cIlwiXHJcbiAgICAgICAgICBjbGFzcz1cInNtYXJ0dGFibGVJbWdcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgaGVhZGVyLnByb3BlcnR5TmFtZSAhPT0gJ2ljb24nICYmXHJcbiAgICAgICAgICAgIGhlYWRlci5wcm9wZXJ0eU5hbWUgIT09ICdpbWcnICYmXHJcbiAgICAgICAgICAgIGhlYWRlci5wcm9wZXJ0eU5hbWUgIT09ICdvcHRpb24nICYmXHJcbiAgICAgICAgICAgIGhlYWRlci5wcm9wZXJ0eU5hbWUgIT09ICdidXR0b24nXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgW2lubmVySHRtbF09XCJnZXRWYWx1ZShyb3csIGhlYWRlci5wcm9wZXJ0eU5hbWUpXCJcclxuICAgICAgICA+PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9iaWxlLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LXRhYmxlL3RhYmxlcy9tb2JpbGUtdGFibGUvbW9iaWxlLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LXRhYmxlL3RhYmxlcy9tb2JpbGUtdGFibGUvbW9iaWxlLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFVBQVUsQ0FBQzs7Ozs7Ozs7OztBQVFqQyxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsS0FBSztJQUM3QyxZQUFZLFNBQWtDO1FBQzVDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNuQixDQUFDOytHQUhVLG9CQUFvQjttR0FBcEIsb0JBQW9CLCtFQ1RqQyxvdFBBMk1BOzs0RkRsTWEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGFibGUgfSBmcm9tICcuLi90YWJsZSc7XG5pbXBvcnQgeyBDb21wb25lbnRGYWN0b3J5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudC1mYWN0b3J5LXNlcnZpY2UvcHJvamVjdHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItbW9iaWxlLXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21vYmlsZS10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21vYmlsZS10YWJsZS5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIE1vYmlsZVRhYmxlQ29tcG9uZW50IGV4dGVuZHMgVGFibGUge1xuICBjb25zdHJ1Y3RvcihjZlNlcnZpY2U6IENvbXBvbmVudEZhY3RvcnlTZXJ2aWNlKSB7XG4gICAgc3VwZXIoY2ZTZXJ2aWNlKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1vYmlsZVRhYmxlXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cIm1vYmlsZVRhYmxlUm93XCJcbiAgICAqbmdGb3I9XCJsZXQgcm93IG9mIHNtYXJ0VGFibGUudGFibGVSb3dzXCJcbiAgICBbbmdDbGFzc109XCJnZXRSb3dDbGFzc2VzKHJvdylcIlxuICAgIFtuZ1N0eWxlXT1cImdldFJvd1N0eWxlcyhyb3cpXCJcbiAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCJyb3c/LmlkID8/IG51bGxcIlxuICA+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJtb2JpbGVUYWJsZUNlbGxcIlxuICAgICAgKm5nRm9yPVwibGV0IGhlYWRlciBvZiBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgIChjbGljayk9XCJoYW5kbGVPblJvd0NsaWNrKHJvdylcIlxuICAgICAgKGRibGNsaWNrKT1cImhhbmRsZU9uUm93RG91YmxlQ2xpY2soJGV2ZW50LCByb3cpXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9iaWxlVGFibGVDZWxsSGVhZGVyXCIgW2F0dHIuZGF0YS10ZXN0aWRdPVwiaGVhZGVyLnByb3BlcnR5TmFtZVwiPlxuICAgICAgICB7eyBoZWFkZXIubGFiZWwgfX1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyAmJlxuICAgICAgICAgIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydHlOYW1lID09PSAnc2VsZWN0J1xuICAgICAgICBcIlxuICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgKGNoYW5nZSk9XCJcbiAgICAgICAgICAkZXZlbnRcbiAgICAgICAgICAgID8gc2V0U2VsZWN0aW9uKFxuICAgICAgICAgICAgICAgIHNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHlcbiAgICAgICAgICAgICAgICAgID8gc21hcnRUYWJsZS5nZXRWYWx1ZURlZXBseShyb3csIHNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHkpXG4gICAgICAgICAgICAgICAgICA6IHJvd1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWQocm93KVwiXG4gICAgICAgIFtjaGVja2VkXT1cIlxuICAgICAgICAgIHNtYXJ0VGFibGUuc2VsZWN0aW9uIS5pc1NlbGVjdGVkKFxuICAgICAgICAgICAgc21hcnRUYWJsZS5zZWxlY3Rpb25Qcm9wZXJ0eVxuICAgICAgICAgICAgICA/IHNtYXJ0VGFibGUuZ2V0VmFsdWVEZWVwbHkocm93LCBzbWFydFRhYmxlLnNlbGVjdGlvblByb3BlcnR5KVxuICAgICAgICAgICAgICA6IHJvd1xuICAgICAgICAgIClcbiAgICAgICAgXCJcbiAgICAgICAgW2FyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgY2hlY2tib3hMYWJlbChcbiAgICAgICAgICAgIHNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHlcbiAgICAgICAgICAgICAgPyBzbWFydFRhYmxlLmdldFZhbHVlRGVlcGx5KHJvdywgc21hcnRUYWJsZS5zZWxlY3Rpb25Qcm9wZXJ0eSlcbiAgICAgICAgICAgICAgOiByb3dcbiAgICAgICAgICApXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzICYmIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydGllc1xuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0aWVzPy50eXBlID09PSB0eXBlKCkuREFURVRJTUVcIj5cbiAgICAgICAgICB7e1xuICAgICAgICAgICAgZ2V0VmFsdWUocm93LCBoZWFkZXIucHJvcGVydHlOYW1lKVxuICAgICAgICAgICAgICB8IHNtYXJ0RGF0ZVRpbWU6IHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydGllcz8uZGF0ZUZvcm1hdFxuICAgICAgICAgIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0aWVzPy50eXBlID09PSB0eXBlKCkuREFURVwiPlxuICAgICAgICAgIHt7XG4gICAgICAgICAgICBnZXRWYWx1ZShyb3csIGhlYWRlci5wcm9wZXJ0eU5hbWUpXG4gICAgICAgICAgICAgIHwgc21hcnREYXRlOiBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnRpZXM/LmRhdGVGb3JtYXRcbiAgICAgICAgICB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydGllcz8udHlwZSA9PT0gdHlwZSgpLlRJTUVcIj5cbiAgICAgICAgICB7e1xuICAgICAgICAgICAgZ2V0VmFsdWUocm93LCBoZWFkZXIucHJvcGVydHlOYW1lKVxuICAgICAgICAgICAgICB8IHNtYXJ0VGltZTogc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0aWVzPy5kYXRlRm9ybWF0XG4gICAgICAgICAgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnRpZXM/LnR5cGUgPT09IHR5cGUoKS5DSEVDS0JPWFwiPlxuICAgICAgICAgIDxtYXQtY2hlY2tib3hcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cImdldFZhbHVlKHJvdywgaGVhZGVyLnByb3BlcnR5TmFtZSlcIlxuICAgICAgICAgID48L21hdC1jaGVja2JveD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0aWVzPy50eXBlID09PSB0eXBlKCkuSUNPTiAmJlxuICAgICAgICAgICAgc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0aWVzPy5pY29ucz8ubGVuZ3RoXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzbWFydC1pY29uXG4gICAgICAgICAgICBbc21hcnRUb29sdGlwXT1cImdldFRvb2xUaXAocm93LCBpKVwiXG4gICAgICAgICAgICBbaWNvbl09XCJnZXRJY29uKGdldFZhbHVlKHJvdywgaGVhZGVyLnByb3BlcnR5TmFtZSksIGkpIVwiXG4gICAgICAgICAgICBbY29sb3JdPVwiZ2V0Q29sb3IoZ2V0VmFsdWUocm93LCBoZWFkZXIucHJvcGVydHlOYW1lKSwgaSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L3NtYXJ0LWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNJbWFnZVJlc291cmNlKHJvdywgaGVhZGVyLnByb3BlcnR5TmFtZSlcIj5cbiAgICAgICAgPHNtYXJ0LWljb25cbiAgICAgICAgICBbaWNvbl09XCJnZXRJbWFnZVJlc291cmNlSWNvbihyb3csIGhlYWRlci5wcm9wZXJ0eU5hbWUpXCJcbiAgICAgICAgICBbY29sb3JdPVwiZ2V0SW1hZ2VSZXNvdXJjZUNvbG9yKHJvdywgaGVhZGVyLnByb3BlcnR5TmFtZSlcIlxuICAgICAgICA+XG4gICAgICAgIDwvc21hcnQtaWNvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cInNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMgJiYgc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5idXR0b25zXCJcbiAgICAgICAgY2xhc3M9XCJzbWFydC10YWJsZS1idXR0b25zLWNvbFwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLmJ1dHRvbnNcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0J1dHRvbihidXR0b24sIHJvdylcIiBbbmdTd2l0Y2hdPVwiYnV0dG9uLnR5cGVcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT1cImN1c3RvbUJ1dHRvbkNsaWNrZWQoJGV2ZW50LCBidXR0b24sIHJvdylcIlxuICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwic21hcnRUYWJsZUJ1dHRvblR5cGUuSUNPTlwiXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj1cInt7IGJ1dHRvbi5jb2xvciB9fVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzbWFydC1pY29uIHRpdGxlPVwie3sgYnV0dG9uLmxhYmVsIH19XCIgW2ljb25dPVwiYnV0dG9uLmljb24hXCI+PC9zbWFydC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJjdXN0b21CdXR0b25DbGlja2VkKCRldmVudCwgYnV0dG9uLCByb3cpXCJcbiAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cInNtYXJ0VGFibGVCdXR0b25UeXBlLk5PUk1BTFwiXG4gICAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICAgY29sb3I9XCJ7eyBidXR0b24uY29sb3IgfX1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c21hcnQtaWNvbiAqbmdJZj1cImJ1dHRvbi5pY29uXCIgW2ljb25dPVwiYnV0dG9uLmljb25cIj48L3NtYXJ0LWljb24+XG4gICAgICAgICAgICAgIHt7IGJ1dHRvbi5sYWJlbCB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJjdXN0b21CdXR0b25DbGlja2VkKCRldmVudCwgYnV0dG9uLCByb3cpXCJcbiAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cInNtYXJ0VGFibGVCdXR0b25UeXBlLlJBSVNFRFwiXG4gICAgICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPVwie3sgYnV0dG9uLmNvbG9yIH19XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNtYXJ0LWljb24gKm5nSWY9XCJidXR0b24uaWNvblwiIFtpY29uXT1cImJ1dHRvbi5pY29uXCI+PC9zbWFydC1pY29uPlxuICAgICAgICAgICAgICB7eyBidXR0b24ubGFiZWwgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPCEtLS0tLS0gTUVOVSAtLS0tLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCJzbWFydFRhYmxlQnV0dG9uVHlwZS5NRU5VXCIgY2xhc3M9XCJtZW51LWJ1dHRvblwiPlxuICAgICAgICAgICAgICA8IS0tLS0tLSBERUZBVUxUX0FDVElPTl9DT0xVTU4gSUQgVE9PTEJBUiAtLS0tLS0+XG4gICAgICAgICAgICAgIDxzbWFydC11aS1hY3Rpb24tdG9vbGJhclxuICAgICAgICAgICAgICAgIFt1aUFjdGlvbk1vZGVsc109XCJnZXRSb3dDb2x1bW5BY3Rpb24oZWxlbWVudCwgZGVmYXVsdEFjdGlvblRvb2xiYXJJZClcIlxuICAgICAgICAgICAgICA+PC9zbWFydC11aS1hY3Rpb24tdG9vbGJhcj5cblxuICAgICAgICAgICAgICA8IS0tLS0tLSBHRU5FUklDIEhBTUJVUkdFUiAtLS0tLS0+XG4gICAgICAgICAgICAgIEBpZiAoc2hvdWxkU2hvd01lbnVCdXR0b24oZWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICA8c21hcnQtdWktYWN0aW9uLXRvb2xiYXJcbiAgICAgICAgICAgICAgICAgIFt1aUFjdGlvbk1vZGVsc109XCJnZXRSb3dNZW51QWN0aW9uTW9kZWxBcnJheShlbGVtZW50KVwiXG4gICAgICAgICAgICAgICAgPjwvc21hcnQtdWktYWN0aW9uLXRvb2xiYXI+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPCEtLS0tLS0gTUVOVSAtLS0tLS0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzICYmIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0uaWNvblwiPlxuICAgICAgICA8c21hcnQtaWNvblxuICAgICAgICAgICpuZ0lmPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5pY29uPy5pY29uXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLmljb24/LmNzc0NsYXNzID8/ICcnXCJcbiAgICAgICAgICBbY29sb3JdPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5pY29uPy5jb2xvclwiXG4gICAgICAgICAgW2ljb25dPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5pY29uIS5pY29uXCJcbiAgICAgICAgPlxuICAgICAgICA8L3NtYXJ0LWljb24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzICYmXG4gICAgICAgICAgc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS50cmFuc2xhdG9yICE9PSB1bmRlZmluZWRcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAge3sgc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS50cmFuc2xhdG9yIShnZXRWYWx1ZShyb3csIGhlYWRlci5wcm9wZXJ0eU5hbWUpKSB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgIXNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMgfHxcbiAgICAgICAgICAoc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyAmJlxuICAgICAgICAgICAgIXNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydGllcyAmJlxuICAgICAgICAgICAgIXNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0uaWNvbiAmJlxuICAgICAgICAgICAgIXNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0uYnV0dG9ucyAmJlxuICAgICAgICAgICAgIXNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0udHJhbnNsYXRvciAmJlxuICAgICAgICAgICAgIShzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnR5TmFtZSA9PT0gJ3NlbGVjdCcpICYmXG4gICAgICAgICAgICAhKHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydHlOYW1lID09PSAnZXhwYW5kJykpXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxzbWFydC1pY29uXG4gICAgICAgICAgKm5nSWY9XCJoZWFkZXIucHJvcGVydHlOYW1lID09PSAnaWNvbidcIlxuICAgICAgICAgIFtpY29uXT1cImdldFZhbHVlKHJvdywgaGVhZGVyLnByb3BlcnR5TmFtZSkhXCJcbiAgICAgICAgPlxuICAgICAgICA8L3NtYXJ0LWljb24+XG4gICAgICAgIDxpbWdcbiAgICAgICAgICAqbmdJZj1cImhlYWRlci5wcm9wZXJ0eU5hbWUgPT09ICdpbWcnXCJcbiAgICAgICAgICBbc3JjXT1cImdldFZhbHVlKHJvdywgaGVhZGVyLnByb3BlcnR5TmFtZSlcIlxuICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgICAgY2xhc3M9XCJzbWFydHRhYmxlSW1nXCJcbiAgICAgICAgLz5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBoZWFkZXIucHJvcGVydHlOYW1lICE9PSAnaWNvbicgJiZcbiAgICAgICAgICAgIGhlYWRlci5wcm9wZXJ0eU5hbWUgIT09ICdpbWcnICYmXG4gICAgICAgICAgICBoZWFkZXIucHJvcGVydHlOYW1lICE9PSAnb3B0aW9uJyAmJlxuICAgICAgICAgICAgaGVhZGVyLnByb3BlcnR5TmFtZSAhPT0gJ2J1dHRvbidcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtpbm5lckh0bWxdPVwiZ2V0VmFsdWUocm93LCBoZWFkZXIucHJvcGVydHlOYW1lKVwiXG4gICAgICAgID48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19