@smartbit4all/ng-client 3.3.205 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (839) hide show
  1. package/esm2022/lib/component-factory-service/component-factory-service.module.mjs +17 -0
  2. package/{esm2020 → esm2022}/lib/component-factory-service/component-factory-service.service.mjs +35 -35
  3. package/{esm2020 → esm2022}/lib/component-factory-service/projects.mjs +5 -5
  4. package/{esm2020 → esm2022}/lib/session/api/api/api.mjs +3 -3
  5. package/esm2022/lib/session/api/api/session.service.mjs +306 -0
  6. package/esm2022/lib/session/api/configuration.mjs +91 -0
  7. package/{esm2020 → esm2022}/lib/session/api/encoder.mjs +18 -18
  8. package/{esm2020 → esm2022}/lib/session/api/index.mjs +2 -2
  9. package/{esm2020 → esm2022}/lib/session/api/model/accountInfo.mjs +12 -12
  10. package/{esm2020 → esm2022}/lib/session/api/model/apiError.mjs +12 -12
  11. package/{esm2020 → esm2022}/lib/session/api/model/authenticationProviderData.mjs +12 -12
  12. package/{esm2020 → esm2022}/lib/session/api/model/getAuthenticationProvidersResponse.mjs +1 -1
  13. package/{esm2020 → esm2022}/lib/session/api/model/models.mjs +8 -8
  14. package/{esm2020 → esm2022}/lib/session/api/model/refreshSessionRequest.mjs +12 -12
  15. package/{esm2020 → esm2022}/lib/session/api/model/session.mjs +1 -1
  16. package/esm2022/lib/session/api/model/sessionInfoData.mjs +2 -0
  17. package/{esm2020 → esm2022}/lib/session/api/model/userActivityLog.mjs +12 -12
  18. package/{esm2020 → esm2022}/lib/session/api/param.mjs +1 -1
  19. package/{esm2020 → esm2022}/lib/session/api/variables.mjs +8 -8
  20. package/esm2022/lib/session/cookie-service/smart-cookie.service.mjs +225 -0
  21. package/{esm2020 → esm2022}/lib/session/projects.mjs +9 -9
  22. package/esm2022/lib/session/smart-error-catching.interceptor.mjs +71 -0
  23. package/esm2022/lib/session/smart-header-maintainer.interceptor.mjs +46 -0
  24. package/{esm2020 → esm2022}/lib/session/smart-session-handler.service.mjs +5 -5
  25. package/esm2022/lib/session/smart-session.module.mjs +58 -0
  26. package/esm2022/lib/session/smart-session.service.mjs +225 -0
  27. package/{esm2020 → esm2022}/lib/session/smart-timer/smart-session-timer.component.mjs +35 -35
  28. package/esm2022/lib/session/smart-timer/smart-session-timer.service.mjs +58 -0
  29. package/{esm2020 → esm2022}/lib/shared/projects.mjs +3 -3
  30. package/esm2022/lib/shared/shared.module.mjs +19 -0
  31. package/esm2022/lib/shared/smart-tooltip.directive.mjs +58 -0
  32. package/{esm2020 → esm2022}/lib/shared/smarttable.date-pipe.mjs +43 -43
  33. package/{esm2020 → esm2022}/lib/smart-client/projects.mjs +4 -4
  34. package/{esm2020 → esm2022}/lib/smart-client/smart-authentication.service.mjs +21 -21
  35. package/esm2022/lib/smart-client/smart-component-api-client.mjs +717 -0
  36. package/esm2022/lib/smart-client/smart-file-uploader/smart-file-uploader.component.mjs +53 -0
  37. package/{esm2020 → esm2022}/lib/smart-client/smart.component.mjs +77 -77
  38. package/{esm2020 → esm2022}/lib/smart-client/smart.service.mjs +75 -75
  39. package/{esm2020 → esm2022}/lib/smart-component-layout/api/api/api.mjs +4 -4
  40. package/esm2022/lib/smart-component-layout/api/api/default.service.mjs +133 -0
  41. package/esm2022/lib/smart-component-layout/api/api.module.mjs +40 -0
  42. package/esm2022/lib/smart-component-layout/api/configuration.mjs +91 -0
  43. package/{esm2020 → esm2022}/lib/smart-component-layout/api/encoder.mjs +19 -19
  44. package/{esm2020 → esm2022}/lib/smart-component-layout/api/index.mjs +7 -7
  45. package/{esm2020 → esm2022}/lib/smart-component-layout/api/model/componentType.mjs +18 -18
  46. package/{esm2020 → esm2022}/lib/smart-component-layout/api/model/componentWidgetType.mjs +19 -19
  47. package/{esm2020 → esm2022}/lib/smart-component-layout/api/model/layoutDirection.mjs +17 -17
  48. package/{esm2020 → esm2022}/lib/smart-component-layout/api/model/models.mjs +6 -6
  49. package/esm2022/lib/smart-component-layout/api/model/smartComponentLayoutDefinition.mjs +2 -0
  50. package/esm2022/lib/smart-component-layout/api/model/smartComponentWidgetDefinition.mjs +2 -0
  51. package/esm2022/lib/smart-component-layout/api/param.mjs +2 -0
  52. package/{esm2020 → esm2022}/lib/smart-component-layout/api/variables.mjs +9 -9
  53. package/{esm2020 → esm2022}/lib/smart-component-layout/projects.mjs +7 -7
  54. package/esm2022/lib/smart-component-layout/smart-component-layout-utility.mjs +94 -0
  55. package/esm2022/lib/smart-component-layout/smart-component-layout.component.mjs +259 -0
  56. package/esm2022/lib/smart-component-layout/smart-component-layout.module.mjs +41 -0
  57. package/{esm2020 → esm2022}/lib/smart-dialog/projects.mjs +7 -7
  58. package/esm2022/lib/smart-dialog/smartdialog.component.mjs +54 -0
  59. package/{esm2020 → esm2022}/lib/smart-dialog/smartdialog.model.mjs +15 -15
  60. package/esm2022/lib/smart-dialog/smartdialog.module.mjs +46 -0
  61. package/{esm2020 → esm2022}/lib/smart-dialog/smartdialog.service.mjs +54 -54
  62. package/esm2022/lib/smart-expandable-section/expandable-section.component.mjs +88 -0
  63. package/{esm2020 → esm2022}/lib/smart-expandable-section/expandable-section.model.mjs +11 -11
  64. package/{esm2020 → esm2022}/lib/smart-expandable-section/projects.mjs +7 -7
  65. package/esm2022/lib/smart-expandable-section/smart-expandable-section.module.mjs +49 -0
  66. package/{esm2020 → esm2022}/lib/smart-expandable-section/smart-expandable-section.service.mjs +14 -14
  67. package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/filterExpressionBoolOperator.mjs +17 -17
  68. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionBuilderField.mjs +2 -0
  69. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionBuilderGroup.mjs +8 -0
  70. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionBuilderModel.mjs +2 -0
  71. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionData.mjs +2 -0
  72. package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/filterExpressionDataType.mjs +20 -20
  73. package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/filterExpressionField.mjs +1 -1
  74. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionFieldList.mjs +2 -0
  75. package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/filterExpressionFieldWidgetType.mjs +27 -27
  76. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionList.mjs +2 -0
  77. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionOperandData.mjs +2 -0
  78. package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/filterExpressionOperation.mjs +32 -32
  79. package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/filterExpressionOrderBy.mjs +18 -18
  80. package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/model.mjs +15 -15
  81. package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/searchIndexObjectDefinitionData.mjs +1 -1
  82. package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/searchIndexPropertyDefinitionData.mjs +12 -12
  83. package/{esm2020 → esm2022}/lib/smart-filter/api/value/model/value.mjs +12 -12
  84. package/{esm2020 → esm2022}/lib/smart-filter/projects.mjs +8 -8
  85. package/{esm2020 → esm2022}/lib/smart-filter/smart-filter/components/smart-filter-expression-field/smart-filter-expression-field.component.mjs +14 -14
  86. package/esm2022/lib/smart-filter/smart-filter/components/smart-filter-simple/components/smart-filter-simple-field/smart-filter-simple-field.component.mjs +165 -0
  87. package/{esm2020 → esm2022}/lib/smart-filter/smart-filter/components/smart-filter-simple/smart-filter-simple.component.mjs +45 -45
  88. package/esm2022/lib/smart-filter/smart-filter/smart-filter.component.mjs +36 -0
  89. package/{esm2020 → esm2022}/lib/smart-filter/smart-filter/smart-filter.service.mjs +31 -31
  90. package/{esm2020 → esm2022}/lib/smart-filter/smart-filter.model.mjs +12 -12
  91. package/esm2022/lib/smart-filter/smart-filter.module.mjs +33 -0
  92. package/esm2022/lib/smart-filter-editor/api/api/filter.service.mjs +198 -0
  93. package/esm2022/lib/smart-filter-editor/api/configuration.mjs +91 -0
  94. package/{esm2020 → esm2022}/lib/smart-filter-editor/api/encoder.mjs +19 -19
  95. package/{esm2020 → esm2022}/lib/smart-filter-editor/api/model/filterExpressionBoolOperator.mjs +17 -17
  96. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderApiConfig.mjs +13 -0
  97. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderField.mjs +2 -0
  98. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderGroup.mjs +8 -0
  99. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderModel.mjs +2 -0
  100. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderUiModel.mjs +7 -0
  101. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionData.mjs +2 -0
  102. package/{esm2020 → esm2022}/lib/smart-filter-editor/api/model/filterExpressionDataType.mjs +20 -20
  103. package/{esm2020 → esm2022}/lib/smart-filter-editor/api/model/filterExpressionField.mjs +1 -1
  104. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionFieldEditor.mjs +2 -0
  105. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionFieldList.mjs +2 -0
  106. package/{esm2020 → esm2022}/lib/smart-filter-editor/api/model/filterExpressionFieldWidgetType.mjs +27 -27
  107. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionList.mjs +2 -0
  108. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionOperandData.mjs +2 -0
  109. package/{esm2020 → esm2022}/lib/smart-filter-editor/api/model/filterExpressionOperation.mjs +32 -32
  110. package/{esm2020 → esm2022}/lib/smart-filter-editor/api/model/filterExpressionOrderBy.mjs +18 -18
  111. package/{esm2020 → esm2022}/lib/smart-filter-editor/api/model/smartFilterType.mjs +17 -17
  112. package/esm2022/lib/smart-filter-editor/api/param.mjs +2 -0
  113. package/{esm2020 → esm2022}/lib/smart-filter-editor/api/variables.mjs +9 -9
  114. package/{esm2020 → esm2022}/lib/smart-filter-editor/filterExpressionBuilderApiActions.mjs +14 -14
  115. package/{esm2020 → esm2022}/lib/smart-filter-editor/project.mjs +7 -7
  116. package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-item/smart-filter-expression-item.component.mjs +73 -0
  117. package/{esm2020 → esm2022}/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-items/smart-filter-expression-items.component.mjs +40 -40
  118. package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/smart-filter-editor-content.component.mjs +235 -0
  119. package/{esm2020 → esm2022}/lib/smart-filter-editor/smart-filter-editor.model.mjs +1 -1
  120. package/esm2022/lib/smart-filter-editor/smart-filter-editor.module.mjs +69 -0
  121. package/esm2022/lib/smart-filter-editor/smart-filter-editor.service.mjs +47 -0
  122. package/{esm2020 → esm2022}/lib/smart-filter-editor/smart-filter-params/components/smart-filter-param/smart-filter-param.component.mjs +24 -24
  123. package/esm2022/lib/smart-filter-editor/smart-filter-params/smart-filter-params.component.mjs +57 -0
  124. package/{esm2020 → esm2022}/lib/smart-form/api/api/api.mjs +3 -3
  125. package/esm2022/lib/smart-form/api/api/default.service.mjs +133 -0
  126. package/esm2022/lib/smart-form/api/api.module.mjs +40 -0
  127. package/esm2022/lib/smart-form/api/configuration.mjs +91 -0
  128. package/{esm2020 → esm2022}/lib/smart-form/api/encoder.mjs +18 -18
  129. package/{esm2020 → esm2022}/lib/smart-form/api/index.mjs +6 -6
  130. package/{esm2020 → esm2022}/lib/smart-form/api/model/models.mjs +10 -10
  131. package/{esm2020 → esm2022}/lib/smart-form/api/model/propertyMapping.mjs +12 -12
  132. package/{esm2020 → esm2022}/lib/smart-form/api/model/selectionDefinition.mjs +6 -6
  133. package/{esm2020 → esm2022}/lib/smart-form/api/model/smartFormInputMode.mjs +21 -21
  134. package/{esm2020 → esm2022}/lib/smart-form/api/model/smartFormWidgetDirection.mjs +16 -16
  135. package/{esm2020 → esm2022}/lib/smart-form/api/model/smartFormWidgetType.mjs +44 -44
  136. package/{esm2020 → esm2022}/lib/smart-form/api/model/smartLayoutDefinition.mjs +1 -1
  137. package/esm2022/lib/smart-form/api/model/smartMatrixModel.mjs +2 -0
  138. package/{esm2020 → esm2022}/lib/smart-form/api/model/smartWidgetDefinition.mjs +1 -1
  139. package/{esm2020 → esm2022}/lib/smart-form/api/model/smartWidgetHint.mjs +17 -17
  140. package/{esm2020 → esm2022}/lib/smart-form/api/model/valueChangeMode.mjs +19 -19
  141. package/{esm2020 → esm2022}/lib/smart-form/api/param.mjs +1 -1
  142. package/{esm2020 → esm2022}/lib/smart-form/api/variables.mjs +8 -8
  143. package/{esm2020 → esm2022}/lib/smart-form/highlightMacthingString-pipe.mjs +20 -20
  144. package/{esm2020 → esm2022}/lib/smart-form/projects.mjs +12 -12
  145. package/{esm2020 → esm2022}/lib/smart-form/services/smartform.layout-definition.service.mjs +542 -502
  146. package/esm2022/lib/smart-form/services/smartform.service.mjs +640 -0
  147. package/{esm2020 → esm2022}/lib/smart-form/smartfileuploader/large-file-snack-bar/large-file-snack-bar.component.mjs +14 -14
  148. package/esm2022/lib/smart-form/smartfileuploader/smartfileuploader.component.mjs +78 -0
  149. package/{esm2020 → esm2022}/lib/smart-form/smartfileuploader/smartfileuploader.model.mjs +1 -1
  150. package/esm2022/lib/smart-form/smartform.component.mjs +178 -0
  151. package/{esm2020 → esm2022}/lib/smart-form/smartform.form-model.mjs +1 -1
  152. package/{esm2020 → esm2022}/lib/smart-form/smartform.model.mjs +37 -37
  153. package/esm2022/lib/smart-form/widgets/components/smart-month-picker/smart-month-picker.component.mjs +84 -0
  154. package/esm2022/lib/smart-form/widgets/smartformwidget/smartformwidget.component.mjs +735 -0
  155. package/esm2022/lib/smart-form/widgets/smartformwidget/sortable-widget/sortable-widget.component.mjs +59 -0
  156. package/{esm2020 → esm2022}/lib/smart-form/widgets/smartformwidget/trackCaps.directive.mjs +31 -31
  157. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/api/api.mjs +3 -3
  158. package/esm2022/lib/smart-grid/api/grid-api/api/grid.service.mjs +451 -0
  159. package/esm2022/lib/smart-grid/api/grid-api/api.module.mjs +40 -0
  160. package/esm2022/lib/smart-grid/api/grid-api/configuration.mjs +91 -0
  161. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/encoder.mjs +18 -18
  162. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/index.mjs +6 -6
  163. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridColumnContentType.mjs +16 -16
  164. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridColumnMeta.mjs +1 -1
  165. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridDataAccessConfig.mjs +19 -19
  166. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridModel.mjs +1 -1
  167. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridPage.mjs +1 -1
  168. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridRow.mjs +1 -1
  169. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridSelectionChange.mjs +12 -12
  170. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridSelectionMode.mjs +17 -17
  171. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridSelectionType.mjs +16 -16
  172. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridServerModel.mjs +1 -1
  173. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridUpdateData.mjs +1 -1
  174. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridView.mjs +1 -1
  175. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridViewDescriptor.mjs +7 -7
  176. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/models.mjs +13 -13
  177. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/param.mjs +1 -1
  178. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/variables.mjs +8 -8
  179. package/{esm2020 → esm2022}/lib/smart-grid/components/expandable-grid/expandable-grid.component.mjs +20 -20
  180. package/esm2022/lib/smart-grid/components/smart-grid-card/smart-grid-card.component.mjs +61 -0
  181. package/esm2022/lib/smart-grid/components/table-layout-definer/table-layout-definer.component.mjs +182 -0
  182. package/{esm2020 → esm2022}/lib/smart-grid/models/model.mjs +28 -28
  183. package/{esm2020 → esm2022}/lib/smart-grid/projects.mjs +8 -8
  184. package/{esm2020 → esm2022}/lib/smart-grid/smart-grid.component.mjs +767 -767
  185. package/esm2022/lib/smart-grid/smart-grid.module.mjs +76 -0
  186. package/esm2022/lib/smart-grid/smart-grid.service.mjs +80 -0
  187. package/{esm2020 → esm2022}/lib/smart-icon/projects.mjs +6 -6
  188. package/esm2022/lib/smart-icon/smart-icon/smart-icon.component.mjs +40 -0
  189. package/esm2022/lib/smart-icon/smart-icon.module.mjs +22 -0
  190. package/esm2022/lib/smart-icon/smart-icon.service.mjs +74 -0
  191. package/{esm2020 → esm2022}/lib/smart-navbar/projects.mjs +7 -7
  192. package/esm2022/lib/smart-navbar/smart-navbar.component.mjs +61 -0
  193. package/{esm2020 → esm2022}/lib/smart-navbar/smart-navbar.model.mjs +5 -5
  194. package/esm2022/lib/smart-navbar/smart-navbar.module.mjs +63 -0
  195. package/{esm2020 → esm2022}/lib/smart-navbar/smart-navbar.service.mjs +14 -14
  196. package/{esm2020 → esm2022}/lib/smart-navigation/projects.mjs +5 -5
  197. package/{esm2020 → esm2022}/lib/smart-navigation/smart-navigation.interface.mjs +1 -1
  198. package/esm2022/lib/smart-navigation/smart-navigation.module.mjs +18 -0
  199. package/esm2022/lib/smart-navigation/smart-navigation.service.mjs +56 -0
  200. package/esm2022/lib/smart-ng-client.module.mjs +126 -0
  201. package/{esm2020 → esm2022}/lib/smart-ng-client.service.mjs +19 -19
  202. package/{esm2020 → esm2022}/lib/smart-subject/projects.mjs +4 -4
  203. package/esm2022/lib/smart-subject/smart-subject.mjs +21 -0
  204. package/{esm2020 → esm2022}/lib/smart-tab-group/projects.mjs +8 -8
  205. package/{esm2020 → esm2022}/lib/smart-tab-group/smart-tab-group.component.mjs +43 -43
  206. package/esm2022/lib/smart-tab-group/smart-tab-group.module.mjs +25 -0
  207. package/{esm2020 → esm2022}/lib/smart-tab-group/smart-tab-group.service.mjs +14 -14
  208. package/esm2022/lib/smart-tab-group/tab-content/tab-content.component.mjs +31 -0
  209. package/esm2022/lib/smart-tab-group/tab-group-simplified/tab-group.component.mjs +66 -0
  210. package/{esm2020 → esm2022}/lib/smart-tab-group/tabTile.model.mjs +1 -1
  211. package/esm2022/lib/smart-table/components/default-actions-popup/default-actions-popup.component.mjs +43 -0
  212. package/{esm2020 → esm2022}/lib/smart-table/components/loading/loading.component.mjs +15 -15
  213. package/esm2022/lib/smart-table/directives/mat-context-menu-trigger-for.directive.mjs +52 -0
  214. package/{esm2020 → esm2022}/lib/smart-table/projects.mjs +7 -7
  215. package/esm2022/lib/smart-table/smarttable.component.mjs +98 -0
  216. package/esm2022/lib/smart-table/smarttable.model.mjs +169 -0
  217. package/esm2022/lib/smart-table/smarttable.module.mjs +105 -0
  218. package/{esm2020 → esm2022}/lib/smart-table/smarttable.service.mjs +14 -14
  219. package/esm2022/lib/smart-table/tables/material-table/material-table.component.mjs +39 -0
  220. package/{esm2020 → esm2022}/lib/smart-table/tables/mobile-table/mobile-table.component.mjs +23 -23
  221. package/esm2022/lib/smart-table/tables/table.mjs +520 -0
  222. package/{esm2020 → esm2022}/lib/smart-tree/projects.mjs +8 -8
  223. package/esm2022/lib/smart-tree/smarttree-generic.service.mjs +288 -0
  224. package/esm2022/lib/smart-tree/smarttree.component.mjs +181 -0
  225. package/{esm2020 → esm2022}/lib/smart-tree/smarttree.model.mjs +6 -6
  226. package/esm2022/lib/smart-tree/smarttree.module.mjs +60 -0
  227. package/{esm2020 → esm2022}/lib/smart-tree/smarttree.node.model.mjs +5 -5
  228. package/{esm2020 → esm2022}/lib/smart-tree/smarttree.service.interface.mjs +1 -1
  229. package/esm2022/lib/smart-tree/smarttree.service.mjs +47 -0
  230. package/esm2022/lib/smart-tree/tree-api/api/tree.service.mjs +1190 -0
  231. package/esm2022/lib/smart-tree/tree-api/configuration.mjs +91 -0
  232. package/{esm2020 → esm2022}/lib/smart-tree/tree-api/encoder.mjs +19 -19
  233. package/esm2022/lib/smart-tree/tree-api/param.mjs +2 -0
  234. package/{esm2020 → esm2022}/lib/smart-tree/tree-api/variables.mjs +9 -9
  235. package/{esm2020 → esm2022}/lib/view-context/api/api/api.mjs +3 -3
  236. package/esm2022/lib/view-context/api/api/view.service.mjs +903 -0
  237. package/esm2022/lib/view-context/api/api.module.mjs +40 -0
  238. package/esm2022/lib/view-context/api/configuration.mjs +91 -0
  239. package/{esm2020 → esm2022}/lib/view-context/api/encoder.mjs +18 -18
  240. package/{esm2020 → esm2022}/lib/view-context/api/index.mjs +6 -6
  241. package/esm2022/lib/view-context/api/model/clipboardData.mjs +13 -0
  242. package/{esm2020 → esm2022}/lib/view-context/api/model/closeResult.mjs +17 -17
  243. package/{esm2020 → esm2022}/lib/view-context/api/model/componentConstraint.mjs +1 -1
  244. package/{esm2020 → esm2022}/lib/view-context/api/model/componentModel.mjs +1 -1
  245. package/{esm2020 → esm2022}/lib/view-context/api/model/componentModelChange.mjs +12 -12
  246. package/{esm2020 → esm2022}/lib/view-context/api/model/dataChange.mjs +1 -1
  247. package/{esm2020 → esm2022}/lib/view-context/api/model/dataChangeEvent.mjs +1 -1
  248. package/{esm2020 → esm2022}/lib/view-context/api/model/dataChangeKind.mjs +20 -20
  249. package/{esm2020 → esm2022}/lib/view-context/api/model/downloadedFile.mjs +12 -12
  250. package/{esm2020 → esm2022}/lib/view-context/api/model/iconPosition.mjs +19 -19
  251. package/{esm2020 → esm2022}/lib/view-context/api/model/imageResource.mjs +7 -7
  252. package/{esm2020 → esm2022}/lib/view-context/api/model/link.mjs +19 -19
  253. package/{esm2020 → esm2022}/lib/view-context/api/model/messageData.mjs +1 -1
  254. package/{esm2020 → esm2022}/lib/view-context/api/model/messageOption.mjs +1 -1
  255. package/{esm2020 → esm2022}/lib/view-context/api/model/messageOptionType.mjs +17 -17
  256. package/{esm2020 → esm2022}/lib/view-context/api/model/messageResult.mjs +1 -1
  257. package/{esm2020 → esm2022}/lib/view-context/api/model/messageTextType.mjs +16 -16
  258. package/{esm2020 → esm2022}/lib/view-context/api/model/messageType.mjs +18 -18
  259. package/{esm2020 → esm2022}/lib/view-context/api/model/models.mjs +52 -52
  260. package/{esm2020 → esm2022}/lib/view-context/api/model/openPendingData.mjs +1 -1
  261. package/{esm2020 → esm2022}/lib/view-context/api/model/serverRequestExecutionStat.mjs +1 -1
  262. package/{esm2020 → esm2022}/lib/view-context/api/model/serverRequestTrack.mjs +1 -1
  263. package/{esm2020 → esm2022}/lib/view-context/api/model/serverRequestType.mjs +23 -23
  264. package/{esm2020 → esm2022}/lib/view-context/api/model/smartLinkData.mjs +1 -1
  265. package/{esm2020 → esm2022}/lib/view-context/api/model/statisticRecord.mjs +12 -12
  266. package/{esm2020 → esm2022}/lib/view-context/api/model/style.mjs +12 -12
  267. package/{esm2020 → esm2022}/lib/view-context/api/model/uiAction.mjs +1 -1
  268. package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionButtonDescriptor.mjs +12 -12
  269. package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionButtonType.mjs +26 -26
  270. package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionConstraint.mjs +12 -12
  271. package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionDescriptor.mjs +1 -1
  272. package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionDialogDescriptor.mjs +1 -1
  273. package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionFeedbackType.mjs +19 -19
  274. package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionInputType.mjs +20 -20
  275. package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionRequest.mjs +12 -12
  276. package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionTooltip.mjs +21 -21
  277. package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionUploadDescriptor.mjs +12 -12
  278. package/{esm2020 → esm2022}/lib/view-context/api/model/uploadedFile.mjs +12 -12
  279. package/{esm2020 → esm2022}/lib/view-context/api/model/valueSet.mjs +1 -1
  280. package/esm2022/lib/view-context/api/model/view.mjs +2 -0
  281. package/{esm2020 → esm2022}/lib/view-context/api/model/viewApiError.mjs +12 -12
  282. package/{esm2020 → esm2022}/lib/view-context/api/model/viewConstraint.mjs +1 -1
  283. package/esm2022/lib/view-context/api/model/viewContext.mjs +2 -0
  284. package/{esm2020 → esm2022}/lib/view-context/api/model/viewContextChange.mjs +1 -1
  285. package/esm2022/lib/view-context/api/model/viewContextData.mjs +2 -0
  286. package/{esm2020 → esm2022}/lib/view-context/api/model/viewContextUpdate.mjs +1 -1
  287. package/{esm2020 → esm2022}/lib/view-context/api/model/viewData.mjs +1 -1
  288. package/{esm2020 → esm2022}/lib/view-context/api/model/viewEventHandler.mjs +17 -17
  289. package/esm2022/lib/view-context/api/model/viewPlaceholder.mjs +13 -0
  290. package/{esm2020 → esm2022}/lib/view-context/api/model/viewState.mjs +21 -21
  291. package/{esm2020 → esm2022}/lib/view-context/api/model/viewStateUpdate.mjs +1 -1
  292. package/{esm2020 → esm2022}/lib/view-context/api/model/viewType.mjs +17 -17
  293. package/{esm2020 → esm2022}/lib/view-context/api/param.mjs +1 -1
  294. package/{esm2020 → esm2022}/lib/view-context/api/variables.mjs +8 -8
  295. package/{esm2020 → esm2022}/lib/view-context/invalid-fields-snack-bar/invalid-fields-snack-bar.component.mjs +19 -19
  296. package/esm2022/lib/view-context/message-dialog/message-dialog.component.mjs +66 -0
  297. package/{esm2020 → esm2022}/lib/view-context/projects.mjs +16 -16
  298. package/{esm2020 → esm2022}/lib/view-context/property-definition-data.mjs +1 -1
  299. package/esm2022/lib/view-context/smart-ui-action/components/success-snack-bar/success-snack-bar.component.mjs +30 -0
  300. package/{esm2020 → esm2022}/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.component.mjs +56 -56
  301. package/{esm2020 → esm2022}/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.service.mjs +48 -48
  302. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.component.mjs +72 -0
  303. package/{esm2020 → esm2022}/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.service.mjs +53 -53
  304. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.mjs +126 -0
  305. package/{esm2020 → esm2022}/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.service.mjs +52 -52
  306. package/esm2022/lib/view-context/smart-ui-action/ui-action-toolbar.component.mjs +146 -0
  307. package/esm2022/lib/view-context/smart-ui-action/ui-action.descriptor.service.mjs +180 -0
  308. package/{esm2020 → esm2022}/lib/view-context/smart-ui-action/ui-action.model.mjs +6 -6
  309. package/{esm2020 → esm2022}/lib/view-context/smart-ui-action/ui-action.service.mjs +211 -211
  310. package/esm2022/lib/view-context/smart-view-context-dialog.service.mjs +54 -0
  311. package/esm2022/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.component.mjs +29 -0
  312. package/esm2022/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.service.mjs +69 -0
  313. package/esm2022/lib/view-context/smart-view-context.interceptor.mjs +39 -0
  314. package/esm2022/lib/view-context/smart-view-context.model.mjs +2 -0
  315. package/esm2022/lib/view-context/smart-view-context.module.mjs +221 -0
  316. package/esm2022/lib/view-context/smart-view-context.service.mjs +685 -0
  317. package/esm2022/lib/view-context/smart-view-redirect/smart-view-redirect.mjs +33 -0
  318. package/esm2022/lib/view-context/utility/smart-object-utility.mjs +30 -0
  319. package/esm2022/lib/view-context/utility/smart-style-utility.mjs +68 -0
  320. package/{esm2020 → esm2022}/lib/view-context/value-api/api/api.mjs +4 -4
  321. package/esm2022/lib/view-context/value-api/api/value.service.mjs +138 -0
  322. package/esm2022/lib/view-context/value-api/api.module.mjs +40 -0
  323. package/esm2022/lib/view-context/value-api/configuration.mjs +91 -0
  324. package/{esm2020 → esm2022}/lib/view-context/value-api/encoder.mjs +19 -19
  325. package/{esm2020 → esm2022}/lib/view-context/value-api/index.mjs +7 -7
  326. package/esm2022/lib/view-context/value-api/model/genericValue.mjs +13 -0
  327. package/{esm2020 → esm2022}/lib/view-context/value-api/model/models.mjs +11 -11
  328. package/esm2022/lib/view-context/value-api/model/value.mjs +13 -0
  329. package/{esm2020 → esm2022}/lib/view-context/value-api/model/valueSetData.mjs +1 -1
  330. package/esm2022/lib/view-context/value-api/model/valueSetDefinition.mjs +2 -0
  331. package/{esm2020 → esm2022}/lib/view-context/value-api/model/valueSetDefinitionData.mjs +1 -1
  332. package/esm2022/lib/view-context/value-api/model/valueSetDefinitionIdentifier.mjs +13 -0
  333. package/{esm2020 → esm2022}/lib/view-context/value-api/model/valueSetDefinitionKind.mjs +23 -23
  334. package/{esm2020 → esm2022}/lib/view-context/value-api/model/valueSetExpression.mjs +1 -1
  335. package/esm2022/lib/view-context/value-api/model/valueSetOperand.mjs +2 -0
  336. package/{esm2020 → esm2022}/lib/view-context/value-api/model/valueSetOperation.mjs +18 -18
  337. package/esm2022/lib/view-context/value-api/param.mjs +2 -0
  338. package/{esm2020 → esm2022}/lib/view-context/value-api/variables.mjs +9 -9
  339. package/{esm2020 → esm2022}/projects.mjs +25 -25
  340. package/{esm2020 → esm2022}/smartbit4all-ng-client.mjs +4 -4
  341. package/{fesm2020 → fesm2022}/smartbit4all-ng-client.mjs +15917 -15886
  342. package/fesm2022/smartbit4all-ng-client.mjs.map +1 -0
  343. package/{smartbit4all-ng-client.d.ts → index.d.ts} +5 -5
  344. package/lib/component-factory-service/component-factory-service.module.d.ts +6 -6
  345. package/lib/component-factory-service/component-factory-service.service.d.ts +13 -13
  346. package/lib/component-factory-service/projects.d.ts +2 -2
  347. package/lib/session/api/api/api.d.ts +3 -3
  348. package/lib/session/api/api/session.service.d.ts +107 -107
  349. package/lib/session/api/configuration.d.ts +104 -104
  350. package/lib/session/api/encoder.d.ts +11 -11
  351. package/lib/session/api/index.d.ts +2 -2
  352. package/lib/session/api/model/accountInfo.d.ts +22 -22
  353. package/lib/session/api/model/apiError.d.ts +15 -15
  354. package/lib/session/api/model/authenticationProviderData.d.ts +17 -17
  355. package/lib/session/api/model/getAuthenticationProvidersResponse.d.ts +15 -15
  356. package/lib/session/api/model/models.d.ts +8 -8
  357. package/lib/session/api/model/refreshSessionRequest.d.ts +14 -14
  358. package/lib/session/api/model/session.d.ts +32 -32
  359. package/lib/session/api/model/sessionInfoData.d.ts +26 -26
  360. package/lib/session/api/model/userActivityLog.d.ts +33 -33
  361. package/lib/session/api/param.d.ts +37 -37
  362. package/lib/session/api/variables.d.ts +8 -8
  363. package/lib/session/cookie-service/smart-cookie.service.d.ts +129 -129
  364. package/lib/session/projects.d.ts +6 -6
  365. package/lib/session/smart-error-catching.interceptor.d.ts +13 -13
  366. package/lib/session/smart-header-maintainer.interceptor.d.ts +11 -11
  367. package/lib/session/smart-session-handler.service.d.ts +11 -11
  368. package/lib/session/smart-session.module.d.ts +12 -12
  369. package/lib/session/smart-session.service.d.ts +54 -54
  370. package/lib/session/smart-timer/smart-session-timer.component.d.ts +14 -14
  371. package/lib/session/smart-timer/smart-session-timer.service.d.ts +21 -21
  372. package/lib/shared/projects.d.ts +3 -3
  373. package/lib/shared/shared.module.d.ts +9 -9
  374. package/lib/shared/smart-tooltip.directive.d.ts +16 -16
  375. package/lib/shared/smarttable.date-pipe.d.ts +18 -18
  376. package/lib/smart-client/projects.d.ts +4 -4
  377. package/lib/smart-client/smart-authentication.service.d.ts +15 -15
  378. package/lib/smart-client/smart-component-api-client.d.ts +111 -111
  379. package/lib/smart-client/smart-file-uploader/smart-file-uploader.component.d.ts +18 -18
  380. package/lib/smart-client/smart.component.d.ts +30 -30
  381. package/lib/smart-client/smart.service.d.ts +30 -30
  382. package/lib/smart-component-layout/api/api/api.d.ts +3 -3
  383. package/lib/smart-component-layout/api/api/default.service.d.ts +33 -33
  384. package/lib/smart-component-layout/api/api.module.d.ts +11 -11
  385. package/lib/smart-component-layout/api/configuration.d.ts +104 -104
  386. package/lib/smart-component-layout/api/encoder.d.ts +11 -11
  387. package/lib/smart-component-layout/api/index.d.ts +6 -6
  388. package/lib/smart-component-layout/api/model/componentType.d.ts +16 -16
  389. package/lib/smart-component-layout/api/model/componentWidgetType.d.ts +17 -17
  390. package/lib/smart-component-layout/api/model/layoutDirection.d.ts +15 -15
  391. package/lib/smart-component-layout/api/model/models.d.ts +5 -5
  392. package/lib/smart-component-layout/api/model/smartComponentLayoutDefinition.d.ts +26 -26
  393. package/lib/smart-component-layout/api/model/smartComponentWidgetDefinition.d.ts +20 -20
  394. package/lib/smart-component-layout/api/param.d.ts +37 -37
  395. package/lib/smart-component-layout/api/variables.d.ts +8 -8
  396. package/lib/smart-component-layout/projects.d.ts +4 -4
  397. package/lib/smart-component-layout/smart-component-layout-utility.d.ts +14 -14
  398. package/lib/smart-component-layout/smart-component-layout.component.d.ts +58 -58
  399. package/lib/smart-component-layout/smart-component-layout.module.d.ts +13 -13
  400. package/lib/smart-dialog/projects.d.ts +4 -4
  401. package/lib/smart-dialog/smartdialog.component.d.ts +19 -19
  402. package/lib/smart-dialog/smartdialog.model.d.ts +67 -67
  403. package/lib/smart-dialog/smartdialog.module.d.ts +14 -14
  404. package/lib/smart-dialog/smartdialog.service.d.ts +23 -23
  405. package/lib/smart-expandable-section/expandable-section.component.d.ts +25 -25
  406. package/lib/smart-expandable-section/expandable-section.model.d.ts +42 -42
  407. package/lib/smart-expandable-section/projects.d.ts +4 -4
  408. package/lib/smart-expandable-section/smart-expandable-section.module.d.ts +15 -15
  409. package/lib/smart-expandable-section/smart-expandable-section.service.d.ts +6 -6
  410. package/lib/smart-filter/api/filter/model/filterExpressionBoolOperator.d.ts +15 -15
  411. package/lib/smart-filter/api/filter/model/filterExpressionBuilderField.d.ts +27 -27
  412. package/lib/smart-filter/api/filter/model/filterExpressionBuilderGroup.d.ts +36 -36
  413. package/lib/smart-filter/api/filter/model/filterExpressionBuilderModel.d.ts +27 -27
  414. package/lib/smart-filter/api/filter/model/filterExpressionData.d.ts +27 -27
  415. package/lib/smart-filter/api/filter/model/filterExpressionDataType.d.ts +18 -18
  416. package/lib/smart-filter/api/filter/model/filterExpressionField.d.ts +40 -40
  417. package/lib/smart-filter/api/filter/model/filterExpressionFieldList.d.ts +21 -21
  418. package/lib/smart-filter/api/filter/model/filterExpressionFieldWidgetType.d.ts +25 -25
  419. package/lib/smart-filter/api/filter/model/filterExpressionList.d.ts +18 -18
  420. package/lib/smart-filter/api/filter/model/filterExpressionOperandData.d.ts +24 -24
  421. package/lib/smart-filter/api/filter/model/filterExpressionOperation.d.ts +30 -30
  422. package/lib/smart-filter/api/filter/model/filterExpressionOrderBy.d.ts +25 -25
  423. package/lib/smart-filter/api/filter/model/model.d.ts +15 -15
  424. package/lib/smart-filter/api/filter/model/searchIndexObjectDefinitionData.d.ts +19 -19
  425. package/lib/smart-filter/api/filter/model/searchIndexPropertyDefinitionData.d.ts +18 -18
  426. package/lib/smart-filter/api/value/model/value.d.ts +29 -29
  427. package/lib/smart-filter/projects.d.ts +5 -5
  428. package/lib/smart-filter/smart-filter/components/smart-filter-expression-field/smart-filter-expression-field.component.d.ts +8 -8
  429. package/lib/smart-filter/smart-filter/components/smart-filter-simple/components/smart-filter-simple-field/smart-filter-simple-field.component.d.ts +31 -31
  430. package/lib/smart-filter/smart-filter/components/smart-filter-simple/smart-filter-simple.component.d.ts +18 -18
  431. package/lib/smart-filter/smart-filter/smart-filter.component.d.ts +15 -15
  432. package/lib/smart-filter/smart-filter/smart-filter.service.d.ts +16 -16
  433. package/lib/smart-filter/smart-filter.model.d.ts +25 -25
  434. package/lib/smart-filter/smart-filter.module.d.ts +15 -15
  435. package/lib/smart-filter-editor/api/api/filter.service.d.ts +57 -57
  436. package/lib/smart-filter-editor/api/configuration.d.ts +104 -104
  437. package/lib/smart-filter-editor/api/encoder.d.ts +11 -11
  438. package/lib/smart-filter-editor/api/model/filterExpressionBoolOperator.d.ts +15 -15
  439. package/lib/smart-filter-editor/api/model/filterExpressionBuilderApiConfig.d.ts +16 -16
  440. package/lib/smart-filter-editor/api/model/filterExpressionBuilderField.d.ts +27 -27
  441. package/lib/smart-filter-editor/api/model/filterExpressionBuilderGroup.d.ts +36 -36
  442. package/lib/smart-filter-editor/api/model/filterExpressionBuilderModel.d.ts +27 -27
  443. package/lib/smart-filter-editor/api/model/filterExpressionBuilderUiModel.d.ts +38 -38
  444. package/lib/smart-filter-editor/api/model/filterExpressionData.d.ts +27 -27
  445. package/lib/smart-filter-editor/api/model/filterExpressionDataType.d.ts +18 -18
  446. package/lib/smart-filter-editor/api/model/filterExpressionField.d.ts +40 -40
  447. package/lib/smart-filter-editor/api/model/filterExpressionFieldEditor.d.ts +17 -17
  448. package/lib/smart-filter-editor/api/model/filterExpressionFieldList.d.ts +21 -21
  449. package/lib/smart-filter-editor/api/model/filterExpressionFieldWidgetType.d.ts +25 -25
  450. package/lib/smart-filter-editor/api/model/filterExpressionList.d.ts +18 -18
  451. package/lib/smart-filter-editor/api/model/filterExpressionOperandData.d.ts +24 -24
  452. package/lib/smart-filter-editor/api/model/filterExpressionOperation.d.ts +30 -30
  453. package/lib/smart-filter-editor/api/model/filterExpressionOrderBy.d.ts +28 -28
  454. package/lib/smart-filter-editor/api/model/smartFilterType.d.ts +15 -15
  455. package/lib/smart-filter-editor/api/param.d.ts +37 -37
  456. package/lib/smart-filter-editor/api/variables.d.ts +8 -8
  457. package/lib/smart-filter-editor/filterExpressionBuilderApiActions.d.ts +13 -13
  458. package/lib/smart-filter-editor/project.d.ts +7 -7
  459. package/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-item/smart-filter-expression-item.component.d.ts +19 -19
  460. package/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-items/smart-filter-expression-items.component.d.ts +17 -17
  461. package/lib/smart-filter-editor/smart-filter-editor-content/smart-filter-editor-content.component.d.ts +40 -40
  462. package/lib/smart-filter-editor/smart-filter-editor.model.d.ts +4 -4
  463. package/lib/smart-filter-editor/smart-filter-editor.module.d.ts +18 -18
  464. package/lib/smart-filter-editor/smart-filter-editor.service.d.ts +35 -35
  465. package/lib/smart-filter-editor/smart-filter-params/components/smart-filter-param/smart-filter-param.component.d.ts +9 -9
  466. package/lib/smart-filter-editor/smart-filter-params/smart-filter-params.component.d.ts +21 -21
  467. package/lib/smart-form/api/api/api.d.ts +3 -3
  468. package/lib/smart-form/api/api/default.service.d.ts +33 -33
  469. package/lib/smart-form/api/api.module.d.ts +11 -11
  470. package/lib/smart-form/api/configuration.d.ts +104 -104
  471. package/lib/smart-form/api/encoder.d.ts +11 -11
  472. package/lib/smart-form/api/index.d.ts +6 -6
  473. package/lib/smart-form/api/model/models.d.ts +10 -10
  474. package/lib/smart-form/api/model/propertyMapping.d.ts +24 -24
  475. package/lib/smart-form/api/model/selectionDefinition.d.ts +41 -41
  476. package/lib/smart-form/api/model/smartFormInputMode.d.ts +20 -20
  477. package/lib/smart-form/api/model/smartFormWidgetDirection.d.ts +15 -15
  478. package/lib/smart-form/api/model/smartFormWidgetType.d.ts +43 -43
  479. package/lib/smart-form/api/model/smartLayoutDefinition.d.ts +15 -15
  480. package/lib/smart-form/api/model/smartMatrixModel.d.ts +29 -29
  481. package/lib/smart-form/api/model/smartWidgetDefinition.d.ts +106 -106
  482. package/lib/smart-form/api/model/smartWidgetHint.d.ts +19 -19
  483. package/lib/smart-form/api/model/valueChangeMode.d.ts +18 -18
  484. package/lib/smart-form/api/param.d.ts +37 -37
  485. package/lib/smart-form/api/variables.d.ts +8 -8
  486. package/lib/smart-form/highlightMacthingString-pipe.d.ts +7 -7
  487. package/lib/smart-form/projects.d.ts +9 -9
  488. package/lib/smart-form/services/smartform.layout-definition.service.d.ts +45 -42
  489. package/lib/smart-form/services/smartform.service.d.ts +46 -46
  490. package/lib/smart-form/smartfileuploader/large-file-snack-bar/large-file-snack-bar.component.d.ts +8 -8
  491. package/lib/smart-form/smartfileuploader/smartfileuploader.component.d.ts +22 -22
  492. package/lib/smart-form/smartfileuploader/smartfileuploader.model.d.ts +7 -7
  493. package/lib/smart-form/smartform.component.d.ts +40 -40
  494. package/lib/smart-form/smartform.form-model.d.ts +631 -631
  495. package/lib/smart-form/smartform.model.d.ts +120 -120
  496. package/lib/smart-form/widgets/components/smart-month-picker/smart-month-picker.component.d.ts +29 -29
  497. package/lib/smart-form/widgets/smartformwidget/smartformwidget.component.d.ts +132 -132
  498. package/lib/smart-form/widgets/smartformwidget/sortable-widget/sortable-widget.component.d.ts +20 -20
  499. package/lib/smart-form/widgets/smartformwidget/trackCaps.directive.d.ts +9 -9
  500. package/lib/smart-grid/api/grid-api/api/api.d.ts +3 -3
  501. package/lib/smart-grid/api/grid-api/api/grid.service.d.ts +161 -161
  502. package/lib/smart-grid/api/grid-api/api.module.d.ts +11 -11
  503. package/lib/smart-grid/api/grid-api/configuration.d.ts +104 -104
  504. package/lib/smart-grid/api/grid-api/encoder.d.ts +11 -11
  505. package/lib/smart-grid/api/grid-api/index.d.ts +6 -6
  506. package/lib/smart-grid/api/grid-api/model/gridColumnContentType.d.ts +15 -15
  507. package/lib/smart-grid/api/grid-api/model/gridColumnMeta.d.ts +33 -33
  508. package/lib/smart-grid/api/grid-api/model/gridDataAccessConfig.d.ts +40 -40
  509. package/lib/smart-grid/api/grid-api/model/gridModel.d.ts +34 -34
  510. package/lib/smart-grid/api/grid-api/model/gridPage.d.ts +26 -26
  511. package/lib/smart-grid/api/grid-api/model/gridRow.d.ts +39 -39
  512. package/lib/smart-grid/api/grid-api/model/gridSelectionChange.d.ts +18 -18
  513. package/lib/smart-grid/api/grid-api/model/gridSelectionMode.d.ts +16 -16
  514. package/lib/smart-grid/api/grid-api/model/gridSelectionType.d.ts +15 -15
  515. package/lib/smart-grid/api/grid-api/model/gridServerModel.d.ts +22 -22
  516. package/lib/smart-grid/api/grid-api/model/gridUpdateData.d.ts +20 -20
  517. package/lib/smart-grid/api/grid-api/model/gridView.d.ts +21 -21
  518. package/lib/smart-grid/api/grid-api/model/gridViewDescriptor.d.ts +37 -37
  519. package/lib/smart-grid/api/grid-api/model/models.d.ts +13 -13
  520. package/lib/smart-grid/api/grid-api/param.d.ts +37 -37
  521. package/lib/smart-grid/api/grid-api/variables.d.ts +8 -8
  522. package/lib/smart-grid/components/expandable-grid/expandable-grid.component.d.ts +10 -10
  523. package/lib/smart-grid/components/smart-grid-card/smart-grid-card.component.d.ts +23 -23
  524. package/lib/smart-grid/components/table-layout-definer/table-layout-definer.component.d.ts +46 -46
  525. package/lib/smart-grid/models/model.d.ts +71 -71
  526. package/lib/smart-grid/projects.d.ts +5 -5
  527. package/lib/smart-grid/smart-grid.component.d.ts +103 -103
  528. package/lib/smart-grid/smart-grid.module.d.ts +22 -22
  529. package/lib/smart-grid/smart-grid.service.d.ts +23 -23
  530. package/lib/smart-icon/projects.d.ts +3 -3
  531. package/lib/smart-icon/smart-icon/smart-icon.component.d.ts +16 -16
  532. package/lib/smart-icon/smart-icon.module.d.ts +10 -10
  533. package/lib/smart-icon/smart-icon.service.d.ts +28 -28
  534. package/lib/smart-navbar/projects.d.ts +4 -4
  535. package/lib/smart-navbar/smart-navbar.component.d.ts +20 -20
  536. package/lib/smart-navbar/smart-navbar.model.d.ts +48 -48
  537. package/lib/smart-navbar/smart-navbar.module.d.ts +18 -18
  538. package/lib/smart-navbar/smart-navbar.service.d.ts +6 -6
  539. package/lib/smart-navigation/projects.d.ts +2 -2
  540. package/lib/smart-navigation/smart-navigation.interface.d.ts +11 -11
  541. package/lib/smart-navigation/smart-navigation.module.d.ts +6 -6
  542. package/lib/smart-navigation/smart-navigation.service.d.ts +18 -18
  543. package/lib/smart-ng-client.module.d.ts +24 -24
  544. package/lib/smart-ng-client.service.d.ts +10 -10
  545. package/lib/smart-subject/projects.d.ts +1 -1
  546. package/lib/smart-subject/smart-subject.d.ts +6 -6
  547. package/lib/smart-tab-group/projects.d.ts +5 -5
  548. package/lib/smart-tab-group/smart-tab-group.component.d.ts +21 -21
  549. package/lib/smart-tab-group/smart-tab-group.module.d.ts +13 -13
  550. package/lib/smart-tab-group/smart-tab-group.service.d.ts +6 -6
  551. package/lib/smart-tab-group/tab-content/tab-content.component.d.ts +14 -14
  552. package/lib/smart-tab-group/tab-group-simplified/tab-group.component.d.ts +29 -29
  553. package/lib/smart-tab-group/tabTile.model.d.ts +8 -8
  554. package/lib/smart-table/components/default-actions-popup/default-actions-popup.component.d.ts +19 -19
  555. package/lib/smart-table/components/loading/loading.component.d.ts +8 -8
  556. package/lib/smart-table/directives/mat-context-menu-trigger-for.directive.d.ts +10 -10
  557. package/lib/smart-table/projects.d.ts +4 -4
  558. package/lib/smart-table/smarttable.component.d.ts +34 -34
  559. package/lib/smart-table/smarttable.model.d.ts +198 -198
  560. package/lib/smart-table/smarttable.module.d.ts +28 -28
  561. package/lib/smart-table/smarttable.service.d.ts +6 -6
  562. package/lib/smart-table/tables/material-table/material-table.component.d.ts +8 -8
  563. package/lib/smart-table/tables/mobile-table/mobile-table.component.d.ts +8 -8
  564. package/lib/smart-table/tables/table.d.ts +85 -85
  565. package/lib/smart-tree/projects.d.ts +5 -5
  566. package/lib/smart-tree/smarttree-generic.service.d.ts +49 -49
  567. package/lib/smart-tree/smarttree.component.d.ts +42 -42
  568. package/lib/smart-tree/smarttree.model.d.ts +41 -41
  569. package/lib/smart-tree/smarttree.module.d.ts +15 -15
  570. package/lib/smart-tree/smarttree.node.model.d.ts +13 -13
  571. package/lib/smart-tree/smarttree.service.d.ts +24 -24
  572. package/lib/smart-tree/smarttree.service.interface.d.ts +43 -43
  573. package/lib/smart-tree/tree-api/api/tree.service.d.ts +336 -336
  574. package/lib/smart-tree/tree-api/configuration.d.ts +104 -104
  575. package/lib/smart-tree/tree-api/encoder.d.ts +11 -11
  576. package/lib/smart-tree/tree-api/param.d.ts +37 -37
  577. package/lib/smart-tree/tree-api/variables.d.ts +8 -8
  578. package/lib/view-context/api/api/api.d.ts +3 -3
  579. package/lib/view-context/api/api/view.service.d.ts +331 -331
  580. package/lib/view-context/api/api.module.d.ts +11 -11
  581. package/lib/view-context/api/configuration.d.ts +104 -104
  582. package/lib/view-context/api/encoder.d.ts +11 -11
  583. package/lib/view-context/api/index.d.ts +6 -6
  584. package/lib/view-context/api/model/clipboardData.d.ts +20 -20
  585. package/lib/view-context/api/model/closeResult.d.ts +16 -16
  586. package/lib/view-context/api/model/componentConstraint.d.ts +25 -25
  587. package/lib/view-context/api/model/componentModel.d.ts +42 -42
  588. package/lib/view-context/api/model/componentModelChange.d.ts +29 -29
  589. package/lib/view-context/api/model/dataChange.d.ts +25 -25
  590. package/lib/view-context/api/model/dataChangeEvent.d.ts +31 -31
  591. package/lib/view-context/api/model/dataChangeKind.d.ts +19 -19
  592. package/lib/view-context/api/model/downloadedFile.d.ts +19 -19
  593. package/lib/view-context/api/model/iconPosition.d.ts +18 -18
  594. package/lib/view-context/api/model/imageResource.d.ts +26 -26
  595. package/lib/view-context/api/model/link.d.ts +35 -35
  596. package/lib/view-context/api/model/messageData.d.ts +29 -29
  597. package/lib/view-context/api/model/messageOption.d.ts +18 -18
  598. package/lib/view-context/api/model/messageOptionType.d.ts +16 -16
  599. package/lib/view-context/api/model/messageResult.d.ts +16 -16
  600. package/lib/view-context/api/model/messageTextType.d.ts +15 -15
  601. package/lib/view-context/api/model/messageType.d.ts +17 -17
  602. package/lib/view-context/api/model/models.d.ts +51 -51
  603. package/lib/view-context/api/model/openPendingData.d.ts +29 -29
  604. package/lib/view-context/api/model/serverRequestExecutionStat.d.ts +40 -40
  605. package/lib/view-context/api/model/serverRequestTrack.d.ts +60 -60
  606. package/lib/view-context/api/model/serverRequestType.d.ts +22 -22
  607. package/lib/view-context/api/model/smartLinkData.d.ts +21 -21
  608. package/lib/view-context/api/model/statisticRecord.d.ts +36 -36
  609. package/lib/view-context/api/model/style.d.ts +21 -21
  610. package/lib/view-context/api/model/uiAction.d.ts +48 -48
  611. package/lib/view-context/api/model/uiActionButtonDescriptor.d.ts +18 -18
  612. package/lib/view-context/api/model/uiActionButtonType.d.ts +25 -25
  613. package/lib/view-context/api/model/uiActionConstraint.d.ts +22 -22
  614. package/lib/view-context/api/model/uiActionDescriptor.d.ts +36 -36
  615. package/lib/view-context/api/model/uiActionDialogDescriptor.d.ts +23 -23
  616. package/lib/view-context/api/model/uiActionFeedbackType.d.ts +18 -18
  617. package/lib/view-context/api/model/uiActionInputType.d.ts +19 -19
  618. package/lib/view-context/api/model/uiActionRequest.d.ts +28 -28
  619. package/lib/view-context/api/model/uiActionTooltip.d.ts +25 -25
  620. package/lib/view-context/api/model/uiActionUploadDescriptor.d.ts +23 -23
  621. package/lib/view-context/api/model/uploadedFile.d.ts +19 -19
  622. package/lib/view-context/api/model/valueSet.d.ts +20 -20
  623. package/lib/view-context/api/model/view.d.ts +80 -80
  624. package/lib/view-context/api/model/viewApiError.d.ts +18 -18
  625. package/lib/view-context/api/model/viewConstraint.d.ts +18 -18
  626. package/lib/view-context/api/model/viewContext.d.ts +30 -30
  627. package/lib/view-context/api/model/viewContextChange.d.ts +24 -24
  628. package/lib/view-context/api/model/viewContextData.d.ts +25 -25
  629. package/lib/view-context/api/model/viewContextUpdate.d.ts +22 -22
  630. package/lib/view-context/api/model/viewData.d.ts +25 -25
  631. package/lib/view-context/api/model/viewEventHandler.d.ts +30 -30
  632. package/lib/view-context/api/model/viewPlaceholder.d.ts +21 -21
  633. package/lib/view-context/api/model/viewState.d.ts +20 -20
  634. package/lib/view-context/api/model/viewStateUpdate.d.ts +22 -22
  635. package/lib/view-context/api/model/viewType.d.ts +16 -16
  636. package/lib/view-context/api/param.d.ts +37 -37
  637. package/lib/view-context/api/variables.d.ts +8 -8
  638. package/lib/view-context/invalid-fields-snack-bar/invalid-fields-snack-bar.component.d.ts +9 -9
  639. package/lib/view-context/message-dialog/message-dialog.component.d.ts +18 -18
  640. package/lib/view-context/projects.d.ts +13 -13
  641. package/lib/view-context/property-definition-data.d.ts +5 -5
  642. package/lib/view-context/smart-ui-action/components/success-snack-bar/success-snack-bar.component.d.ts +13 -13
  643. package/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.component.d.ts +25 -25
  644. package/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.service.d.ts +18 -18
  645. package/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.component.d.ts +30 -30
  646. package/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.service.d.ts +22 -22
  647. package/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.d.ts +29 -29
  648. package/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.service.d.ts +25 -25
  649. package/lib/view-context/smart-ui-action/ui-action-toolbar.component.d.ts +36 -36
  650. package/lib/view-context/smart-ui-action/ui-action.descriptor.service.d.ts +23 -23
  651. package/lib/view-context/smart-ui-action/ui-action.model.d.ts +43 -43
  652. package/lib/view-context/smart-ui-action/ui-action.service.d.ts +39 -39
  653. package/lib/view-context/smart-view-context-dialog.service.d.ts +16 -16
  654. package/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.component.d.ts +13 -13
  655. package/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.service.d.ts +19 -19
  656. package/lib/view-context/smart-view-context.interceptor.d.ts +13 -13
  657. package/lib/view-context/smart-view-context.model.d.ts +31 -31
  658. package/lib/view-context/smart-view-context.module.d.ts +46 -47
  659. package/lib/view-context/smart-view-context.service.d.ts +119 -119
  660. package/lib/view-context/smart-view-redirect/smart-view-redirect.d.ts +14 -14
  661. package/lib/view-context/utility/smart-object-utility.d.ts +4 -4
  662. package/lib/view-context/utility/smart-style-utility.d.ts +12 -12
  663. package/lib/view-context/value-api/api/api.d.ts +3 -3
  664. package/lib/view-context/value-api/api/value.service.d.ts +35 -35
  665. package/lib/view-context/value-api/api.module.d.ts +11 -11
  666. package/lib/view-context/value-api/configuration.d.ts +104 -104
  667. package/lib/view-context/value-api/encoder.d.ts +11 -11
  668. package/lib/view-context/value-api/index.d.ts +6 -6
  669. package/lib/view-context/value-api/model/genericValue.d.ts +33 -33
  670. package/lib/view-context/value-api/model/models.d.ts +10 -10
  671. package/lib/view-context/value-api/model/value.d.ts +29 -29
  672. package/lib/view-context/value-api/model/valueSetData.d.ts +41 -41
  673. package/lib/view-context/value-api/model/valueSetDefinition.d.ts +16 -16
  674. package/lib/view-context/value-api/model/valueSetDefinitionData.d.ts +53 -53
  675. package/lib/view-context/value-api/model/valueSetDefinitionIdentifier.d.ts +21 -21
  676. package/lib/view-context/value-api/model/valueSetDefinitionKind.d.ts +22 -22
  677. package/lib/view-context/value-api/model/valueSetExpression.d.ts +18 -18
  678. package/lib/view-context/value-api/model/valueSetOperand.d.ts +25 -25
  679. package/lib/view-context/value-api/model/valueSetOperation.d.ts +17 -17
  680. package/lib/view-context/value-api/param.d.ts +37 -37
  681. package/lib/view-context/value-api/variables.d.ts +8 -8
  682. package/package.json +14 -20
  683. package/projects.d.ts +22 -22
  684. package/smartbit4all-ng-client-4.0.0.tgz +0 -0
  685. package/esm2020/lib/component-factory-service/component-factory-service.module.mjs +0 -17
  686. package/esm2020/lib/session/api/api/session.service.mjs +0 -306
  687. package/esm2020/lib/session/api/configuration.mjs +0 -91
  688. package/esm2020/lib/session/api/model/sessionInfoData.mjs +0 -2
  689. package/esm2020/lib/session/cookie-service/smart-cookie.service.mjs +0 -225
  690. package/esm2020/lib/session/smart-error-catching.interceptor.mjs +0 -71
  691. package/esm2020/lib/session/smart-header-maintainer.interceptor.mjs +0 -46
  692. package/esm2020/lib/session/smart-session.module.mjs +0 -58
  693. package/esm2020/lib/session/smart-session.service.mjs +0 -225
  694. package/esm2020/lib/session/smart-timer/smart-session-timer.service.mjs +0 -58
  695. package/esm2020/lib/shared/shared.module.mjs +0 -19
  696. package/esm2020/lib/shared/smart-tooltip.directive.mjs +0 -58
  697. package/esm2020/lib/smart-client/smart-component-api-client.mjs +0 -717
  698. package/esm2020/lib/smart-client/smart-file-uploader/smart-file-uploader.component.mjs +0 -53
  699. package/esm2020/lib/smart-component-layout/api/api/default.service.mjs +0 -133
  700. package/esm2020/lib/smart-component-layout/api/api.module.mjs +0 -40
  701. package/esm2020/lib/smart-component-layout/api/configuration.mjs +0 -91
  702. package/esm2020/lib/smart-component-layout/api/model/smartComponentLayoutDefinition.mjs +0 -2
  703. package/esm2020/lib/smart-component-layout/api/model/smartComponentWidgetDefinition.mjs +0 -2
  704. package/esm2020/lib/smart-component-layout/api/param.mjs +0 -2
  705. package/esm2020/lib/smart-component-layout/smart-component-layout-utility.mjs +0 -94
  706. package/esm2020/lib/smart-component-layout/smart-component-layout.component.mjs +0 -259
  707. package/esm2020/lib/smart-component-layout/smart-component-layout.module.mjs +0 -43
  708. package/esm2020/lib/smart-dialog/smartdialog.component.mjs +0 -54
  709. package/esm2020/lib/smart-dialog/smartdialog.module.mjs +0 -48
  710. package/esm2020/lib/smart-expandable-section/expandable-section.component.mjs +0 -88
  711. package/esm2020/lib/smart-expandable-section/smart-expandable-section.module.mjs +0 -51
  712. package/esm2020/lib/smart-filter/api/filter/model/filterExpressionBuilderField.mjs +0 -2
  713. package/esm2020/lib/smart-filter/api/filter/model/filterExpressionBuilderGroup.mjs +0 -8
  714. package/esm2020/lib/smart-filter/api/filter/model/filterExpressionBuilderModel.mjs +0 -2
  715. package/esm2020/lib/smart-filter/api/filter/model/filterExpressionData.mjs +0 -2
  716. package/esm2020/lib/smart-filter/api/filter/model/filterExpressionFieldList.mjs +0 -2
  717. package/esm2020/lib/smart-filter/api/filter/model/filterExpressionList.mjs +0 -2
  718. package/esm2020/lib/smart-filter/api/filter/model/filterExpressionOperandData.mjs +0 -2
  719. package/esm2020/lib/smart-filter/smart-filter/components/smart-filter-simple/components/smart-filter-simple-field/smart-filter-simple-field.component.mjs +0 -165
  720. package/esm2020/lib/smart-filter/smart-filter/smart-filter.component.mjs +0 -36
  721. package/esm2020/lib/smart-filter/smart-filter.module.mjs +0 -33
  722. package/esm2020/lib/smart-filter-editor/api/api/filter.service.mjs +0 -198
  723. package/esm2020/lib/smart-filter-editor/api/configuration.mjs +0 -91
  724. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionBuilderApiConfig.mjs +0 -13
  725. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionBuilderField.mjs +0 -2
  726. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionBuilderGroup.mjs +0 -8
  727. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionBuilderModel.mjs +0 -2
  728. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionBuilderUiModel.mjs +0 -7
  729. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionData.mjs +0 -2
  730. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionFieldEditor.mjs +0 -2
  731. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionFieldList.mjs +0 -2
  732. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionList.mjs +0 -2
  733. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionOperandData.mjs +0 -2
  734. package/esm2020/lib/smart-filter-editor/api/param.mjs +0 -2
  735. package/esm2020/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-item/smart-filter-expression-item.component.mjs +0 -73
  736. package/esm2020/lib/smart-filter-editor/smart-filter-editor-content/smart-filter-editor-content.component.mjs +0 -235
  737. package/esm2020/lib/smart-filter-editor/smart-filter-editor.module.mjs +0 -71
  738. package/esm2020/lib/smart-filter-editor/smart-filter-editor.service.mjs +0 -47
  739. package/esm2020/lib/smart-filter-editor/smart-filter-params/smart-filter-params.component.mjs +0 -57
  740. package/esm2020/lib/smart-form/api/api/default.service.mjs +0 -133
  741. package/esm2020/lib/smart-form/api/api.module.mjs +0 -40
  742. package/esm2020/lib/smart-form/api/configuration.mjs +0 -91
  743. package/esm2020/lib/smart-form/api/model/smartMatrixModel.mjs +0 -2
  744. package/esm2020/lib/smart-form/services/smartform.service.mjs +0 -640
  745. package/esm2020/lib/smart-form/smartfileuploader/smartfileuploader.component.mjs +0 -78
  746. package/esm2020/lib/smart-form/smartform.component.mjs +0 -178
  747. package/esm2020/lib/smart-form/widgets/components/smart-month-picker/smart-month-picker.component.mjs +0 -84
  748. package/esm2020/lib/smart-form/widgets/smartformwidget/smartformwidget.component.mjs +0 -736
  749. package/esm2020/lib/smart-form/widgets/smartformwidget/sortable-widget/sortable-widget.component.mjs +0 -59
  750. package/esm2020/lib/smart-grid/api/grid-api/api/grid.service.mjs +0 -451
  751. package/esm2020/lib/smart-grid/api/grid-api/api.module.mjs +0 -40
  752. package/esm2020/lib/smart-grid/api/grid-api/configuration.mjs +0 -91
  753. package/esm2020/lib/smart-grid/components/smart-grid-card/smart-grid-card.component.mjs +0 -61
  754. package/esm2020/lib/smart-grid/components/table-layout-definer/table-layout-definer.component.mjs +0 -182
  755. package/esm2020/lib/smart-grid/smart-grid.module.mjs +0 -78
  756. package/esm2020/lib/smart-grid/smart-grid.service.mjs +0 -80
  757. package/esm2020/lib/smart-icon/smart-icon/smart-icon.component.mjs +0 -40
  758. package/esm2020/lib/smart-icon/smart-icon.module.mjs +0 -22
  759. package/esm2020/lib/smart-icon/smart-icon.service.mjs +0 -74
  760. package/esm2020/lib/smart-navbar/smart-navbar.component.mjs +0 -61
  761. package/esm2020/lib/smart-navbar/smart-navbar.module.mjs +0 -65
  762. package/esm2020/lib/smart-navigation/smart-navigation.module.mjs +0 -18
  763. package/esm2020/lib/smart-navigation/smart-navigation.service.mjs +0 -56
  764. package/esm2020/lib/smart-ng-client.module.mjs +0 -128
  765. package/esm2020/lib/smart-subject/smart-subject.mjs +0 -21
  766. package/esm2020/lib/smart-tab-group/smart-tab-group.module.mjs +0 -25
  767. package/esm2020/lib/smart-tab-group/tab-content/tab-content.component.mjs +0 -31
  768. package/esm2020/lib/smart-tab-group/tab-group-simplified/tab-group.component.mjs +0 -66
  769. package/esm2020/lib/smart-table/components/default-actions-popup/default-actions-popup.component.mjs +0 -43
  770. package/esm2020/lib/smart-table/directives/mat-context-menu-trigger-for.directive.mjs +0 -52
  771. package/esm2020/lib/smart-table/smarttable.component.mjs +0 -98
  772. package/esm2020/lib/smart-table/smarttable.model.mjs +0 -169
  773. package/esm2020/lib/smart-table/smarttable.module.mjs +0 -107
  774. package/esm2020/lib/smart-table/tables/material-table/material-table.component.mjs +0 -39
  775. package/esm2020/lib/smart-table/tables/table.mjs +0 -520
  776. package/esm2020/lib/smart-tree/smarttree-generic.service.mjs +0 -288
  777. package/esm2020/lib/smart-tree/smarttree.component.mjs +0 -181
  778. package/esm2020/lib/smart-tree/smarttree.module.mjs +0 -62
  779. package/esm2020/lib/smart-tree/smarttree.service.mjs +0 -47
  780. package/esm2020/lib/smart-tree/tree-api/api/tree.service.mjs +0 -1190
  781. package/esm2020/lib/smart-tree/tree-api/configuration.mjs +0 -91
  782. package/esm2020/lib/smart-tree/tree-api/param.mjs +0 -2
  783. package/esm2020/lib/view-context/api/api/view.service.mjs +0 -903
  784. package/esm2020/lib/view-context/api/api.module.mjs +0 -40
  785. package/esm2020/lib/view-context/api/configuration.mjs +0 -91
  786. package/esm2020/lib/view-context/api/model/clipboardData.mjs +0 -13
  787. package/esm2020/lib/view-context/api/model/view.mjs +0 -2
  788. package/esm2020/lib/view-context/api/model/viewContext.mjs +0 -2
  789. package/esm2020/lib/view-context/api/model/viewContextData.mjs +0 -2
  790. package/esm2020/lib/view-context/api/model/viewPlaceholder.mjs +0 -13
  791. package/esm2020/lib/view-context/message-dialog/message-dialog.component.mjs +0 -66
  792. package/esm2020/lib/view-context/smart-ui-action/components/success-snack-bar/success-snack-bar.component.mjs +0 -30
  793. package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.component.mjs +0 -72
  794. package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.mjs +0 -126
  795. package/esm2020/lib/view-context/smart-ui-action/ui-action-toolbar.component.mjs +0 -146
  796. package/esm2020/lib/view-context/smart-ui-action/ui-action.descriptor.service.mjs +0 -180
  797. package/esm2020/lib/view-context/smart-view-context-dialog.service.mjs +0 -54
  798. package/esm2020/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.component.mjs +0 -29
  799. package/esm2020/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.service.mjs +0 -69
  800. package/esm2020/lib/view-context/smart-view-context.interceptor.mjs +0 -39
  801. package/esm2020/lib/view-context/smart-view-context.model.mjs +0 -2
  802. package/esm2020/lib/view-context/smart-view-context.module.mjs +0 -222
  803. package/esm2020/lib/view-context/smart-view-context.service.mjs +0 -685
  804. package/esm2020/lib/view-context/smart-view-redirect/smart-view-redirect.mjs +0 -33
  805. package/esm2020/lib/view-context/utility/smart-object-utility.mjs +0 -30
  806. package/esm2020/lib/view-context/utility/smart-style-utility.mjs +0 -68
  807. package/esm2020/lib/view-context/value-api/api/value.service.mjs +0 -138
  808. package/esm2020/lib/view-context/value-api/api.module.mjs +0 -40
  809. package/esm2020/lib/view-context/value-api/configuration.mjs +0 -91
  810. package/esm2020/lib/view-context/value-api/model/genericValue.mjs +0 -13
  811. package/esm2020/lib/view-context/value-api/model/value.mjs +0 -13
  812. package/esm2020/lib/view-context/value-api/model/valueSetDefinition.mjs +0 -2
  813. package/esm2020/lib/view-context/value-api/model/valueSetDefinitionIdentifier.mjs +0 -13
  814. package/esm2020/lib/view-context/value-api/model/valueSetOperand.mjs +0 -2
  815. package/esm2020/lib/view-context/value-api/param.mjs +0 -2
  816. package/fesm2015/smartbit4all-ng-client.mjs +0 -16397
  817. package/fesm2015/smartbit4all-ng-client.mjs.map +0 -1
  818. package/fesm2020/smartbit4all-ng-client.mjs.map +0 -1
  819. package/smartbit4all-ng-client-3.3.205.tgz +0 -0
  820. package/src/lib/component-factory-service/README.md +0 -99
  821. package/src/lib/session/api/README.md +0 -226
  822. package/src/lib/smart-component-layout/README.md +0 -31
  823. package/src/lib/smart-component-layout/api/README.md +0 -226
  824. package/src/lib/smart-dialog/README.md +0 -197
  825. package/src/lib/smart-expandable-section/README.md +0 -249
  826. package/src/lib/smart-filter/README.md +0 -101
  827. package/src/lib/smart-filter-editor/api/README.md +0 -226
  828. package/src/lib/smart-form/README.md +0 -1178
  829. package/src/lib/smart-form/api/README.md +0 -226
  830. package/src/lib/smart-grid/README.md +0 -24
  831. package/src/lib/smart-grid/api/grid-api/README.md +0 -226
  832. package/src/lib/smart-icon/README.md +0 -116
  833. package/src/lib/smart-navbar/README.md +0 -119
  834. package/src/lib/smart-navigation/README.md +0 -141
  835. package/src/lib/smart-tab-group/README.md +0 -155
  836. package/src/lib/smart-table/README.md +0 -667
  837. package/src/lib/smart-tree/tree-api/README.md +0 -226
  838. package/src/lib/view-context/api/README.md +0 -226
  839. package/src/lib/view-context/value-api/README.md +0 -226
@@ -0,0 +1,685 @@
1
+ import { Injectable, InjectionToken } from '@angular/core';
2
+ import { Subject, takeUntil } from 'rxjs';
3
+ import { LinkTargetEnum, ViewState, ViewType, } from './api';
4
+ import { MessageDialogComponent } from './message-dialog/message-dialog.component';
5
+ import { SmartSubject } from '../smart-subject/projects';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "./api";
8
+ import * as i2 from "../session/smart-session.service";
9
+ import * as i3 from "../smart-navigation/projects";
10
+ import * as i4 from "./smart-view-context-dialog.service";
11
+ export const SmartViewContextErrorDialogButtonLabel = 'SmartViewContextErrorDialogButtonLabel';
12
+ export const SmartViewContextErrorDialogTitle = 'SmartViewContextErrorDialogTitle';
13
+ export const SmartViewContextErrorDialogMessage = 'SmartViewContextErrorDialogMessage';
14
+ export const DefaultUiActionCode_CLOSE = 'DEFAULT_CLOSE';
15
+ export const DIALOG_DISABLE_CLOSE = new InjectionToken('dialogDisableClose');
16
+ export class SmartViewContextService {
17
+ set translateService(translateService) {
18
+ this._translateService = translateService;
19
+ this.translateServiceChanged.next();
20
+ this.translateServiceChanged.complete();
21
+ }
22
+ get translateService() {
23
+ if (this._translateService) {
24
+ return this._translateService;
25
+ }
26
+ return undefined;
27
+ }
28
+ constructor(view, session, navigation, dialog, apiQueueService, inject) {
29
+ this.view = view;
30
+ this.session = session;
31
+ this.navigation = navigation;
32
+ this.dialog = dialog;
33
+ this.apiQueueService = apiQueueService;
34
+ this.inject = inject;
35
+ this.viewContextUuidName = 'viewContextUuid';
36
+ this.viewContextUuidHeaderName = 'viewContextUuid';
37
+ this.pageNamePrefix = 'page.';
38
+ this.componentNamePrefix = 'component.';
39
+ this.viewHandlers = new Array();
40
+ this.openedViewUuids = new Array();
41
+ this.openedViewData = new Array();
42
+ this._destroy$ = new Subject();
43
+ this.uuidOfPageHasBeenChanged = new SmartSubject(this._destroy$);
44
+ this.viewContextHasBeenSynced = new SmartSubject(this._destroy$);
45
+ this.openSmartLink = new SmartSubject(this._destroy$);
46
+ this.isOpeningSmartLink = false;
47
+ this.dialogRefs = [];
48
+ this.smartApiClients = new Map();
49
+ this.translateServiceChanged = new SmartSubject(this._destroy$);
50
+ }
51
+ ngOnDestroy() {
52
+ this._destroy$.next();
53
+ this._destroy$.complete();
54
+ }
55
+ follow(uuid, detectChange) {
56
+ this.smartApiClients.set(uuid, detectChange);
57
+ }
58
+ unfollow(uuid) {
59
+ this.smartApiClients.delete(uuid);
60
+ }
61
+ setActionDescriptors(actionDescriptors) {
62
+ this.actionDescriptors = actionDescriptors;
63
+ }
64
+ getActionDescriptors() {
65
+ if (!this.actionDescriptors) {
66
+ console.error('No action descriptors has been set to ViewContext.');
67
+ }
68
+ return this.actionDescriptors;
69
+ }
70
+ setViewHandlers(viewHandlers) {
71
+ this.viewHandlers = viewHandlers;
72
+ }
73
+ setViewApiErrors(viewApiErrors) {
74
+ this.smartViewContextApiErrors = viewApiErrors;
75
+ }
76
+ setMessageDialogName(messageDialogName) {
77
+ this.messageDialogname = messageDialogName;
78
+ this.viewHandlers.push({
79
+ name: messageDialogName,
80
+ component: MessageDialogComponent,
81
+ });
82
+ }
83
+ setUpUrlForViewService() {
84
+ this.view.configuration.basePath = this.url;
85
+ }
86
+ setUrl(url) {
87
+ this.url = url + '/view';
88
+ this.setUpUrlForViewService();
89
+ }
90
+ async getAndSyncViewContext(uuid) {
91
+ if (!uuid) {
92
+ uuid = this.getViewContextUuid();
93
+ }
94
+ await this.getViewContext(uuid).then(() => {
95
+ this.syncView();
96
+ });
97
+ }
98
+ async getViewContext(uuid) {
99
+ this.viewContext = await this.view.getViewContext(uuid).toPromise();
100
+ if (!this.viewContext) {
101
+ throw new Error('ViewContext does not exist with the given uuid.');
102
+ }
103
+ return this.viewContext;
104
+ }
105
+ async getViewContextDataByPageName(pageName) {
106
+ if (!this.viewContext) {
107
+ await this.getViewContext(this.getViewContextUuid());
108
+ }
109
+ let pageUuid = this.getUuidOfPage(pageName);
110
+ let viewContextByPageName = this.viewContext?.views.find((view) => view.uuid === pageUuid);
111
+ if (!viewContextByPageName) {
112
+ throw new Error(`The ViewData of ${pageName} is not found!`);
113
+ }
114
+ return viewContextByPageName;
115
+ }
116
+ async updateViewContext(viewContextUpdate) {
117
+ this.viewContext = await this.view.updateViewContext(viewContextUpdate).toPromise();
118
+ return this.viewContext;
119
+ }
120
+ clearSessionStorage() {
121
+ sessionStorage.clear();
122
+ this.openedViewData = [];
123
+ this.openedViewUuids = [];
124
+ }
125
+ async startViewContext() {
126
+ this.clearSessionStorage();
127
+ let newViewContext = await this.view
128
+ .createViewContext()
129
+ .toPromise();
130
+ if (!newViewContext) {
131
+ throw new Error('No ViewContext was created');
132
+ }
133
+ this.viewContext = newViewContext;
134
+ this.setViewContextUuid(newViewContext.uuid);
135
+ return this.viewContext;
136
+ }
137
+ async initialize(uuid) {
138
+ if (this.initializeRunning) {
139
+ return this.initializeRunning.toPromise();
140
+ }
141
+ else {
142
+ this.initializeRunning = new SmartSubject(this._destroy$);
143
+ try {
144
+ if (this.viewHandlers.length === 0) {
145
+ throw new Error("There aren't any viewHandlers in SmartViewContextService! Provide some to use its functions.");
146
+ }
147
+ if (!this.messageDialogname) {
148
+ throw new Error('The messageDialogName provided by the backend has not been set.');
149
+ }
150
+ if (uuid) {
151
+ this.setViewContextUuid(uuid);
152
+ try {
153
+ await this.getViewContext(uuid);
154
+ }
155
+ catch (err) {
156
+ await this.startViewContext();
157
+ }
158
+ }
159
+ else {
160
+ await this.startViewContext();
161
+ }
162
+ return this.viewContext;
163
+ }
164
+ finally {
165
+ this.initializeRunning.next(this.viewContext);
166
+ this.initializeRunning.complete();
167
+ this.initializeRunning = undefined;
168
+ }
169
+ }
170
+ }
171
+ openView(view) {
172
+ let alreadyOpened = this.openedViewUuids.some((uuid) => uuid === view.uuid);
173
+ if (alreadyOpened)
174
+ return undefined;
175
+ let viewHandler = this.viewHandlers.find((handler) => handler.name === view.viewName);
176
+ if (!viewHandler) {
177
+ throw new Error(`SmartViewHandlerModel was not found by view name: ${view.viewName}`);
178
+ }
179
+ if (view.type === ViewType.DIALOG) {
180
+ if (!viewHandler.component) {
181
+ throw new Error(`Component is undefined in SmartViewHandlerModel with name: ${view.viewName}`);
182
+ }
183
+ let refIsAlradyAdded = this.dialogRefs.some((ref) => ref.uuid === view.uuid);
184
+ if (!refIsAlradyAdded) {
185
+ let dialogRef;
186
+ try {
187
+ this.openedViewUuids.push(view.uuid);
188
+ this.openedViewData.push(view);
189
+ this.setUuidOfPage(view.viewName, view.uuid, viewHandler.componentName);
190
+ dialogRef = this.dialog.openComponentAsDialog(viewHandler.component, viewHandler.name);
191
+ }
192
+ finally {
193
+ const index = this.openedViewUuids.indexOf(view.uuid);
194
+ if (index >= 0) {
195
+ this.openedViewUuids.splice(index, 1);
196
+ this.openedViewData.splice(index, 1);
197
+ this.clearUuidOfPage(view.viewName, viewHandler.componentName);
198
+ }
199
+ this.setUuidOfPage(view.viewName, view.uuid, viewHandler.componentName);
200
+ }
201
+ let dialogDisableClose = true;
202
+ let isMessageDialog = view.viewName === this.messageDialogname;
203
+ if (!isMessageDialog) {
204
+ try {
205
+ dialogDisableClose = this.inject.get(DIALOG_DISABLE_CLOSE);
206
+ }
207
+ catch {
208
+ console.error('Error during reading DIALOG_DISABLE_CLOSE');
209
+ }
210
+ }
211
+ dialogRef.disableClose = dialogDisableClose;
212
+ // if (isMessageDialog) {
213
+ // if (view.message?.options && view.message.options.length) {
214
+ // }
215
+ // }
216
+ if (!dialogDisableClose) {
217
+ dialogRef
218
+ .afterClosed()
219
+ .pipe(takeUntil(this._destroy$))
220
+ .subscribe(() => {
221
+ this.performAction(view.uuid, { code: DefaultUiActionCode_CLOSE, params: {} });
222
+ });
223
+ }
224
+ this.dialogRefs.push({
225
+ uuid: view.uuid,
226
+ dialogRef,
227
+ });
228
+ }
229
+ }
230
+ else if (view.type === ViewType.NORMAL) {
231
+ if (viewHandler.route === undefined) {
232
+ throw new Error(`Route is undefined in SmartViewHandlerModel with name: ${view.viewName}`);
233
+ }
234
+ this.navigation.navigateTo(viewHandler.route.split('/'));
235
+ }
236
+ else {
237
+ throw new Error('The type of the view and its viewHandler is not the same!');
238
+ }
239
+ view.state = ViewState.OPENED;
240
+ this.openedViewUuids.push(view.uuid);
241
+ this.openedViewData.push(view);
242
+ this.setUuidOfPage(view.viewName, view.uuid, viewHandler.componentName);
243
+ this.uuidOfPageHasBeenChanged.next(view.viewName);
244
+ return {
245
+ state: ViewState.OPENED,
246
+ uuid: view.uuid,
247
+ };
248
+ }
249
+ closeView(view) {
250
+ let viewHandler = this.viewHandlers.find((handler) => handler.name === view.viewName);
251
+ if (!viewHandler) {
252
+ throw new Error(`SmartViewHandlerModel was not found by view name: ${view.viewName}`);
253
+ }
254
+ if (view.type === ViewType.DIALOG) {
255
+ let dialogRef = this.dialogRefs.find((dialogRef) => dialogRef.uuid === view.uuid);
256
+ if (dialogRef) {
257
+ dialogRef.dialogRef.close();
258
+ let index = this.dialogRefs.indexOf(dialogRef);
259
+ this.dialogRefs.splice(index, 1);
260
+ }
261
+ else {
262
+ console.log('DialogRef is not found by uuid.');
263
+ }
264
+ }
265
+ else if (view.type === ViewType.NORMAL) {
266
+ // TODO: close normal page???
267
+ // this.navigation.navigateTo(viewHandler.route.split("/"));
268
+ }
269
+ else {
270
+ throw new Error('The type of the view and its viewHandler is not the same!');
271
+ }
272
+ view.state = ViewState.CLOSED;
273
+ const index = this.openedViewUuids.indexOf(view.uuid);
274
+ if (index >= 0) {
275
+ this.openedViewUuids.splice(index, 1);
276
+ this.openedViewData.splice(index, 1);
277
+ this.clearUuidOfPage(view.viewName, viewHandler.componentName);
278
+ }
279
+ return {
280
+ state: ViewState.CLOSED,
281
+ uuid: view.uuid,
282
+ };
283
+ }
284
+ sendViewContextUpdates(updatesToSend) {
285
+ const updates = [];
286
+ updatesToSend.forEach((update) => {
287
+ if (update !== undefined && update !== null)
288
+ updates.push(update);
289
+ });
290
+ if (updates.length > 0) {
291
+ this.updateViewContext({
292
+ updates,
293
+ uuid: this.viewContext?.uuid,
294
+ });
295
+ }
296
+ }
297
+ async restoreViews(uuid) {
298
+ const updates = [];
299
+ if (!this.viewContext) {
300
+ await this.getViewContext(uuid);
301
+ }
302
+ this.viewContext.views.filter((view) => view.state === ViewState.OPENED || view.state === ViewState.TO_OPEN).map((view) => {
303
+ const update = this.openView(view);
304
+ if (update) {
305
+ updates.push(update);
306
+ }
307
+ });
308
+ this.sendViewContextUpdates(updates);
309
+ }
310
+ syncView() {
311
+ const updates = [];
312
+ this.viewContext?.views.map((view) => {
313
+ switch (view.state) {
314
+ case ViewState.TO_OPEN:
315
+ updates.push(this.openView(view));
316
+ break;
317
+ case ViewState.TO_CLOSE:
318
+ updates.push(this.closeView(view));
319
+ break;
320
+ }
321
+ });
322
+ const viewDataToClose = this.openedViewData.filter((viewData) => !this.viewContext?.views
323
+ .flatMap((viewData) => viewData.uuid)
324
+ .includes(viewData.uuid));
325
+ if (viewDataToClose?.length) {
326
+ viewDataToClose.map((viewData) => {
327
+ updates.push(this.closeView(viewData));
328
+ });
329
+ }
330
+ this.sendViewContextUpdates(updates);
331
+ this.viewContext?.links?.map((data) => {
332
+ const link = document.createElement('a');
333
+ let target = '_blank'; // default
334
+ switch (data.target ?? LinkTargetEnum.BLANK) {
335
+ case 'SELF':
336
+ target = '_self';
337
+ break;
338
+ case 'BLANK':
339
+ target = '_blank';
340
+ break;
341
+ case 'PARENT':
342
+ target = '_parent';
343
+ break;
344
+ case 'TOP':
345
+ target = '_top';
346
+ break;
347
+ }
348
+ link.setAttribute('target', target);
349
+ link.setAttribute('href', data.url);
350
+ if (data.download) {
351
+ link.setAttribute('download', data.filename ?? '');
352
+ }
353
+ document.body.appendChild(link);
354
+ link.click();
355
+ link.remove();
356
+ });
357
+ this.viewContext?.downloads?.map(async (file) => {
358
+ try {
359
+ let blob = await this.downloadResource(file.uuid, file.identifier);
360
+ let url = URL.createObjectURL(blob);
361
+ const link = document.createElement('a');
362
+ link.setAttribute('target', '_blank');
363
+ link.setAttribute('href', url);
364
+ link.setAttribute('download', file.filename);
365
+ document.body.appendChild(link);
366
+ link.click();
367
+ link.remove();
368
+ }
369
+ catch (e) {
370
+ console.error('Error downloading file');
371
+ console.error(e);
372
+ }
373
+ });
374
+ const clipboardText = this.viewContext?.clipboardData
375
+ ?.map((cd) => cd.text || '')
376
+ .join('');
377
+ if (clipboardText) {
378
+ const clipboard = navigator.clipboard;
379
+ // available only in secure contexts.
380
+ if (clipboard) {
381
+ try {
382
+ clipboard
383
+ .writeText(clipboardText)
384
+ .catch((e) => console.error('Failed to copy text to clipboard', e));
385
+ }
386
+ catch (e) {
387
+ console.error('Error accessing clipboard', e);
388
+ }
389
+ }
390
+ }
391
+ this.viewContextHasBeenSynced.next();
392
+ }
393
+ setViewContextUuid(uuid) {
394
+ sessionStorage.setItem(this.viewContextUuidName, uuid);
395
+ this.session.addHeaderParam({
396
+ headerName: this.viewContextUuidHeaderName,
397
+ value: uuid,
398
+ });
399
+ }
400
+ getViewContextUuid() {
401
+ let viewContextUuid = sessionStorage.getItem(this.viewContextUuidName);
402
+ if (!viewContextUuid) {
403
+ throw new Error('View context is not initialized!');
404
+ }
405
+ return viewContextUuid;
406
+ }
407
+ hasViewContextUuid() {
408
+ let viewContextUuid = sessionStorage.getItem(this.viewContextUuidName);
409
+ return viewContextUuid !== null && viewContextUuid !== undefined;
410
+ }
411
+ setUuidOfPage(pageName, uuid, componentName) {
412
+ sessionStorage.setItem(this.pageNamePrefix + pageName, uuid);
413
+ if (componentName) {
414
+ sessionStorage.setItem(this.componentNamePrefix + componentName, pageName);
415
+ }
416
+ }
417
+ clearUuidOfPage(pageName, componentName) {
418
+ sessionStorage.removeItem(this.pageNamePrefix + pageName);
419
+ if (componentName) {
420
+ sessionStorage.removeItem(this.componentNamePrefix + componentName);
421
+ }
422
+ }
423
+ getUuidOfPage(pageName) {
424
+ let uuid = sessionStorage.getItem(this.pageNamePrefix + pageName);
425
+ if (!uuid) {
426
+ throw new Error(`The uuid of ${pageName} is not available.`);
427
+ }
428
+ return uuid;
429
+ }
430
+ getPageNameOfComponent(componentName) {
431
+ let pageName = sessionStorage.getItem(this.componentNamePrefix + componentName);
432
+ if (!pageName) {
433
+ throw new Error(`The pageName of ${componentName} is not available.`);
434
+ }
435
+ return pageName;
436
+ }
437
+ async message(messageData, messageResult) {
438
+ return await this.handlePerformActionResponse(await this.view
439
+ .message(messageData.viewUuid ?? '', messageData.uuid, messageResult)
440
+ .toPromise());
441
+ // in future use this.apiQueueService.addToQueue
442
+ }
443
+ async getSmartViewContextApiErrorByCode(code) {
444
+ let buttonLabel;
445
+ let dialogTitle;
446
+ let message;
447
+ if (this.translateService) {
448
+ buttonLabel = await this.translateService
449
+ .get(SmartViewContextErrorDialogButtonLabel)
450
+ .toPromise();
451
+ dialogTitle = await this.translateService.get(SmartViewContextErrorDialogTitle).toPromise();
452
+ message = await this.translateService.get(SmartViewContextErrorDialogMessage).toPromise();
453
+ }
454
+ else {
455
+ buttonLabel = 'Ok';
456
+ dialogTitle = 'Hiba';
457
+ message = 'An error has occured.';
458
+ }
459
+ if (!this.smartViewContextApiErrors) {
460
+ return {
461
+ code,
462
+ message,
463
+ buttonLabel,
464
+ dialogTitle,
465
+ };
466
+ }
467
+ let apiErrorsWithCode = this.smartViewContextApiErrors.viewContextApiErrors.filter((apiError) => {
468
+ return apiError.code === code;
469
+ });
470
+ if (!apiErrorsWithCode || (apiErrorsWithCode && !apiErrorsWithCode.length)) {
471
+ console.error(`SmartViewContextApiError with code ${code} could not be found.`);
472
+ return {
473
+ code,
474
+ message,
475
+ buttonLabel,
476
+ dialogTitle,
477
+ };
478
+ }
479
+ return apiErrorsWithCode[0];
480
+ }
481
+ async getViewConstraint(uuid) {
482
+ let viewConstraintResponse = await this.view.getViewConstraint(uuid).toPromise();
483
+ if (!viewConstraintResponse)
484
+ throw new Error('Could not get ViewConstraint with the given uuid.');
485
+ return viewConstraintResponse;
486
+ }
487
+ async showPublishedView(channel, uuid) {
488
+ await this.session.initialize();
489
+ // TODO init view context automatically
490
+ // await this.initialize();
491
+ this.isOpeningSmartLink = true;
492
+ this.openSmartLink.next();
493
+ await this.openSmartLink.toPromise();
494
+ await this.view.showPublishedView(channel, uuid).toPromise();
495
+ await this.getAndSyncViewContext();
496
+ this.isOpeningSmartLink = false;
497
+ }
498
+ async downloadResource(uuid, item) {
499
+ return await this.view.downloadItem(uuid, item).toPromise();
500
+ }
501
+ async performAction(uuid, uiActionRequest) {
502
+ return await this._performAction({
503
+ uuid,
504
+ uiActionRequest,
505
+ });
506
+ // const isCompleted = new Subject<void>();
507
+ // this.apiQueueService.addToQueue({
508
+ // callback: this._performAction.bind(this),
509
+ // config: {
510
+ // uuid,
511
+ // uiActionRequest,
512
+ // },
513
+ // isCompleted,
514
+ // });
515
+ // return await isCompleted.toPromise();
516
+ }
517
+ async performWidgetAction(uuid, widgetId, nodeId, uiActionRequest) {
518
+ return await this._performWidgetAction({ uuid, widgetId, nodeId, uiActionRequest });
519
+ // const isCompleted = new Subject<void>();
520
+ // this.apiQueueService.addToQueue({
521
+ // callback: this._performWidgetAction.bind(this),
522
+ // config: {
523
+ // uuid,
524
+ // widgetId,
525
+ // nodeId,
526
+ // uiActionRequest,
527
+ // },
528
+ // isCompleted,
529
+ // });
530
+ // return await isCompleted.toPromise();
531
+ }
532
+ async performWidgetMainAction(uuid, widgetId, uiActionRequest) {
533
+ return await this._performWidgetMainAction({ uuid, widgetId, uiActionRequest });
534
+ // const isCompleted = new Subject<void>();
535
+ // this.apiQueueService.addToQueue({
536
+ // callback: this._performWidgetMainAction.bind(this),
537
+ // config: {
538
+ // uuid,
539
+ // widgetId,
540
+ // uiActionRequest,
541
+ // },
542
+ // isCompleted,
543
+ // });
544
+ // return await isCompleted.toPromise();
545
+ }
546
+ async performUploadAction(uuid, uiActionRequest, param, content) {
547
+ this._performUploadAction({
548
+ uuid,
549
+ uiActionRequest,
550
+ param,
551
+ content,
552
+ });
553
+ }
554
+ async performUploadMultipleAction(uuid, uiActionRequest, param, content) {
555
+ this._performUploadMultipleAction({
556
+ uuid,
557
+ uiActionRequest,
558
+ param,
559
+ content,
560
+ });
561
+ }
562
+ async dataChanged(uuid, dataChange) {
563
+ return await this._dataChanged({ uuid, dataChange });
564
+ // const isCompleted = new Subject<void>();
565
+ // this.apiQueueService.addToQueue(
566
+ // {
567
+ // callback: this._dataChanged.bind(this),
568
+ // config: {
569
+ // uuid,
570
+ // dataChange,
571
+ // },
572
+ // isCompleted,
573
+ // },
574
+ // true
575
+ // );
576
+ // return await isCompleted.toPromise();
577
+ }
578
+ async _performAction(config) {
579
+ return await this.handlePerformActionResponse(await this.view.performAction(config.uuid, config.uiActionRequest).toPromise());
580
+ }
581
+ async _performWidgetAction(config) {
582
+ return await this.handlePerformActionResponse(await this.view
583
+ .performWidgetAction(config.uuid, config.widgetId, config.nodeId, config.uiActionRequest)
584
+ .toPromise());
585
+ }
586
+ async _performWidgetMainAction(config) {
587
+ return await this.handlePerformActionResponse(await this.view
588
+ .performWidgetMainAction(config.uuid, config.widgetId, config.uiActionRequest)
589
+ .toPromise());
590
+ }
591
+ async _performUploadAction(config) {
592
+ return await this.handlePerformActionResponse(await this.view
593
+ .uploadAction(config.uuid, JSON.stringify(config.uiActionRequest), config.param, config.content)
594
+ .toPromise());
595
+ }
596
+ async _performUploadMultipleAction(config) {
597
+ return await this.handlePerformActionResponse(await this.view
598
+ .uploadMultipleAction(config.uuid, JSON.stringify(config.uiActionRequest), config.param, config.content)
599
+ .toPromise());
600
+ }
601
+ async _dataChanged(config) {
602
+ return await this.handlePerformActionResponse(await this.view.dataChanged(config.uuid, config.dataChange).toPromise());
603
+ }
604
+ async handlePerformActionResponse(viewContextChange) {
605
+ this.viewContext = viewContextChange?.viewContext;
606
+ this.syncView();
607
+ if (viewContextChange?.changes) {
608
+ this.handleChanges(viewContextChange.changes);
609
+ }
610
+ return viewContextChange?.result;
611
+ }
612
+ handleChanges(changes) {
613
+ changes.forEach((componentModelChange) => {
614
+ let detectChange = this.smartApiClients.get(componentModelChange.uuid);
615
+ if (detectChange) {
616
+ detectChange.next(componentModelChange);
617
+ }
618
+ });
619
+ }
620
+ async load(uuid) {
621
+ return await this.view.getComponentModel(uuid).toPromise();
622
+ }
623
+ async load2(uuid) {
624
+ let change = await this.view.getComponentModel2(uuid).toPromise();
625
+ this.handlePerformActionResponse(change);
626
+ return change;
627
+ }
628
+ getCurrentViewContext() {
629
+ return this.viewContext;
630
+ }
631
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: SmartViewContextService, deps: [{ token: i1.ViewService }, { token: i2.SmartSessionService }, { token: i3.SmartNavigationService }, { token: i4.SmartViewContextDialogService }, { token: ApiQueueService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
632
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: SmartViewContextService, providedIn: 'root' }); }
633
+ }
634
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: SmartViewContextService, decorators: [{
635
+ type: Injectable,
636
+ args: [{
637
+ providedIn: 'root',
638
+ }]
639
+ }], ctorParameters: () => [{ type: i1.ViewService }, { type: i2.SmartSessionService }, { type: i3.SmartNavigationService }, { type: i4.SmartViewContextDialogService }, { type: ApiQueueService }, { type: i0.Injector }] });
640
+ export const IS_ASYNC_PARAM_NAME = 'isAsync';
641
+ export class ApiQueueService {
642
+ constructor() {
643
+ this._destroy$ = new Subject();
644
+ this.queue = [];
645
+ this.isProcessing = false;
646
+ this.queueSubject = new SmartSubject(this._destroy$);
647
+ this.queueSubject.pipe(takeUntil(this._destroy$)).subscribe(() => this.processQueue());
648
+ }
649
+ ngOnDestroy() {
650
+ this._destroy$.next();
651
+ this._destroy$.complete();
652
+ }
653
+ addToQueue(call, priority = false) {
654
+ if (priority) {
655
+ this.queue.unshift(call); // Add at the beginning of the queue if it has higher priority
656
+ }
657
+ else {
658
+ this.queue.push(call); // Add at the end of the queue if it has lower priority
659
+ }
660
+ if (!this.isProcessing) {
661
+ this.processQueue();
662
+ }
663
+ }
664
+ async processQueue() {
665
+ if (this.queue.length === 0) {
666
+ this.isProcessing = false;
667
+ return;
668
+ }
669
+ const apiQueueCall = this.queue.shift();
670
+ if (apiQueueCall) {
671
+ await apiQueueCall.callback(apiQueueCall.config);
672
+ apiQueueCall.isCompleted.complete();
673
+ this.queueSubject.next();
674
+ }
675
+ }
676
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ApiQueueService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
677
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ApiQueueService, providedIn: 'root' }); }
678
+ }
679
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ApiQueueService, decorators: [{
680
+ type: Injectable,
681
+ args: [{
682
+ providedIn: 'root',
683
+ }]
684
+ }], ctorParameters: () => [] });
685
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdmlldy1jb250ZXh0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdmlldy1jb250ZXh0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQXVCLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFDLE9BQU8sRUFPTCxjQUFjLEVBV2QsU0FBUyxFQUVULFFBQVEsR0FDVCxNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBUW5GLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7O0FBSXpELE1BQU0sQ0FBQyxNQUFNLHNDQUFzQyxHQUFHLHdDQUF3QyxDQUFDO0FBQy9GLE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxHQUFHLGtDQUFrQyxDQUFDO0FBQ25GLE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLG9DQUFvQyxDQUFDO0FBQ3ZGLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLGVBQWUsQ0FBQztBQUV6RCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLGNBQWMsQ0FBVSxvQkFBb0IsQ0FBQyxDQUFDO0FBS3RGLE1BQU0sT0FBTyx1QkFBdUI7SUE4QmxDLElBQVcsZ0JBQWdCLENBQUMsZ0JBQW1EO1FBQzdFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztRQUMxQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUFXLGdCQUFnQjtRQUN6QixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzNCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQ2hDLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBS0QsWUFDVSxJQUFpQixFQUNqQixPQUE0QixFQUM1QixVQUFrQyxFQUNsQyxNQUFxQyxFQUNyQyxlQUFnQyxFQUNoQyxNQUFnQjtRQUxoQixTQUFJLEdBQUosSUFBSSxDQUFhO1FBQ2pCLFlBQU8sR0FBUCxPQUFPLENBQXFCO1FBQzVCLGVBQVUsR0FBVixVQUFVLENBQXdCO1FBQ2xDLFdBQU0sR0FBTixNQUFNLENBQStCO1FBQ3JDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxXQUFNLEdBQU4sTUFBTSxDQUFVO1FBbkRULHdCQUFtQixHQUFXLGlCQUFpQixDQUFDO1FBQ2hELDhCQUF5QixHQUFXLGlCQUFpQixDQUFDO1FBQ3RELG1CQUFjLEdBQVcsT0FBTyxDQUFDO1FBQ2pDLHdCQUFtQixHQUFXLFlBQVksQ0FBQztRQUlwRCxpQkFBWSxHQUFpQyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3pELG9CQUFlLEdBQWtCLElBQUksS0FBSyxFQUFFLENBQUM7UUFDN0MsbUJBQWMsR0FBb0IsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUU5QyxjQUFTLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7UUFDMUMsNkJBQXdCLEdBQW9CLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3RSw2QkFBd0IsR0FBa0IsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBSzNFLGtCQUFhLEdBQWtCLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRSx1QkFBa0IsR0FBWSxLQUFLLENBQUM7UUFFbkMsZUFBVSxHQUF5QixFQUFFLENBQUM7UUFNdkMsb0JBQWUsR0FBbUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQWdCNUQsNEJBQXVCLEdBQWtCLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQVM5RSxDQUFDO0lBRUosV0FBVztRQUNULElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRU0sTUFBTSxDQUFDLElBQVksRUFBRSxZQUErQjtRQUN6RCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUNNLFFBQVEsQ0FBQyxJQUFZO1FBQzFCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTSxvQkFBb0IsQ0FBQyxpQkFBa0Q7UUFDNUUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO0lBQzdDLENBQUM7SUFFTSxvQkFBb0I7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztJQUVNLGVBQWUsQ0FBQyxZQUEwQztRQUMvRCxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztJQUNuQyxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsYUFBd0M7UUFDOUQsSUFBSSxDQUFDLHlCQUF5QixHQUFHLGFBQWEsQ0FBQztJQUNqRCxDQUFDO0lBRU0sb0JBQW9CLENBQUMsaUJBQXlCO1FBQ25ELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztRQUMzQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztZQUNyQixJQUFJLEVBQUUsaUJBQWlCO1lBQ3ZCLFNBQVMsRUFBRSxzQkFBc0I7U0FDbEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUM5QyxDQUFDO0lBRU0sTUFBTSxDQUFDLEdBQVc7UUFDdkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsT0FBTyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTSxLQUFLLENBQUMscUJBQXFCLENBQUMsSUFBYTtRQUM5QyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixJQUFJLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDbkMsQ0FBQztRQUNELE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ3hDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxLQUFLLENBQUMsY0FBYyxDQUFDLElBQVk7UUFDdEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3BFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVNLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxRQUFnQjtRQUN4RCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFDRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTVDLElBQUkscUJBQXFCLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDO1FBQzNGLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLFFBQVEsZ0JBQWdCLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBQ0QsT0FBTyxxQkFBcUIsQ0FBQztJQUMvQixDQUFDO0lBRU0sS0FBSyxDQUFDLGlCQUFpQixDQUM1QixpQkFBb0M7UUFFcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVwRixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVNLEtBQUssQ0FBQyxnQkFBZ0I7UUFDM0IsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFFM0IsSUFBSSxjQUFjLEdBQWdDLE1BQU0sSUFBSSxDQUFDLElBQUk7YUFDOUQsaUJBQWlCLEVBQUU7YUFDbkIsU0FBUyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLGNBQWMsQ0FBQztRQUNsQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLElBQUssQ0FBQyxDQUFDO1FBRTlDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRU0sS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFhO1FBQ25DLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDM0IsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDNUMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzFELElBQUksQ0FBQztnQkFDSCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUNuQyxNQUFNLElBQUksS0FBSyxDQUNiLDhGQUE4RixDQUMvRixDQUFDO2dCQUNKLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO29CQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLGlFQUFpRSxDQUFDLENBQUM7Z0JBQ3JGLENBQUM7Z0JBQ0QsSUFBSSxJQUFJLEVBQUUsQ0FBQztvQkFDVCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzlCLElBQUksQ0FBQzt3QkFDSCxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2xDLENBQUM7b0JBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQzt3QkFDYixNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO29CQUNoQyxDQUFDO2dCQUNILENBQUM7cUJBQU0sQ0FBQztvQkFDTixNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUNoQyxDQUFDO2dCQUVELE9BQU8sSUFBSSxDQUFDLFdBQVksQ0FBQztZQUMzQixDQUFDO29CQUFTLENBQUM7Z0JBQ1QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBWSxDQUFDLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQztZQUNyQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTSxRQUFRLENBQUMsSUFBYztRQUM1QixJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RSxJQUFJLGFBQWE7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUVwQyxJQUFJLFdBQVcsR0FBc0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQ3pFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQzVDLENBQUM7UUFFRixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDeEYsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDM0IsTUFBTSxJQUFJLEtBQUssQ0FDYiw4REFBOEQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUM5RSxDQUFDO1lBQ0osQ0FBQztZQUNELElBQUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQ3pDLENBQUMsR0FBdUIsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUNwRCxDQUFDO1lBQ0YsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3RCLElBQUksU0FBUyxDQUFDO2dCQUNkLElBQUksQ0FBQztvQkFDSCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQ3hFLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN6RixDQUFDO3dCQUFTLENBQUM7b0JBQ1QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN0RCxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQzt3QkFDZixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ3RDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDckMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDakUsQ0FBQztvQkFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzFFLENBQUM7Z0JBQ0QsSUFBSSxrQkFBa0IsR0FBRyxJQUFJLENBQUM7Z0JBQzlCLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLGlCQUFpQixDQUFDO2dCQUMvRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQ3JCLElBQUksQ0FBQzt3QkFDSCxrQkFBa0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO29CQUM3RCxDQUFDO29CQUFDLE1BQU0sQ0FBQzt3QkFDUCxPQUFPLENBQUMsS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7b0JBQzdELENBQUM7Z0JBQ0gsQ0FBQztnQkFFRCxTQUFTLENBQUMsWUFBWSxHQUFHLGtCQUFrQixDQUFDO2dCQUM1Qyx5QkFBeUI7Z0JBQ3pCLGdFQUFnRTtnQkFDaEUsTUFBTTtnQkFDTixJQUFJO2dCQUNKLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO29CQUN4QixTQUFTO3lCQUNOLFdBQVcsRUFBRTt5QkFDYixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzt5QkFDL0IsU0FBUyxDQUFDLEdBQUcsRUFBRTt3QkFDZCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ2pGLENBQUMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7Z0JBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7b0JBQ25CLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtvQkFDZixTQUFTO2lCQUNWLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN6QyxJQUFJLFdBQVcsQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsMERBQTBELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQzdGLENBQUM7WUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzNELENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO1FBQy9FLENBQUM7UUFFRCxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFFOUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRS9CLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVsRCxPQUFPO1lBQ0wsS0FBSyxFQUFFLFNBQVMsQ0FBQyxNQUFNO1lBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtTQUNoQixDQUFDO0lBQ0osQ0FBQztJQUVNLFNBQVMsQ0FBQyxJQUFjO1FBQzdCLElBQUksV0FBVyxHQUFzQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDekUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FDNUMsQ0FBQztRQUVGLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN4RixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDbEMsQ0FBQyxTQUE2QixFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQ2hFLENBQUM7WUFDRixJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNkLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzVCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUMvQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbkMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUNBQWlDLENBQUMsQ0FBQztZQUNqRCxDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDekMsNkJBQTZCO1lBQzdCLDREQUE0RDtRQUM5RCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztRQUMvRSxDQUFDO1FBRUQsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBRTlCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0RCxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBRUQsT0FBTztZQUNMLEtBQUssRUFBRSxTQUFTLENBQUMsTUFBTTtZQUN2QixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7U0FDaEIsQ0FBQztJQUNKLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxhQUE4QztRQUMzRSxNQUFNLE9BQU8sR0FBc0IsRUFBRSxDQUFDO1FBQ3RDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUMvQixJQUFJLE1BQU0sS0FBSyxTQUFTLElBQUksTUFBTSxLQUFLLElBQUk7Z0JBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwRSxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsaUJBQWlCLENBQUM7Z0JBQ3JCLE9BQU87Z0JBQ1AsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSTthQUM3QixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUNNLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBWTtRQUNwQyxNQUFNLE9BQU8sR0FBc0IsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdEIsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFFRCxJQUFJLENBQUMsV0FBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQzVCLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsT0FBTyxDQUM5RSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQWMsRUFBRSxFQUFFO1lBQ3ZCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkMsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU0sUUFBUTtRQUNiLE1BQU0sT0FBTyxHQUFvQyxFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBYyxFQUFFLEVBQUU7WUFDN0MsUUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ25CLEtBQUssU0FBUyxDQUFDLE9BQU87b0JBQ3BCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUNsQyxNQUFNO2dCQUNSLEtBQUssU0FBUyxDQUFDLFFBQVE7b0JBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUNuQyxNQUFNO1lBQ1YsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQ2hELENBQUMsUUFBa0IsRUFBRSxFQUFFLENBQ3JCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLO2FBQ3JCLE9BQU8sQ0FBQyxDQUFDLFFBQWtCLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7YUFDOUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FDN0IsQ0FBQztRQUNGLElBQUksZUFBZSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQzVCLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFrQixFQUFFLEVBQUU7Z0JBQ3pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVyQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFVLEVBQUUsRUFBRTtZQUMxQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pDLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLFVBQVU7WUFDakMsUUFBUSxJQUFJLENBQUMsTUFBTSxJQUFJLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDNUMsS0FBSyxNQUFNO29CQUNULE1BQU0sR0FBRyxPQUFPLENBQUM7b0JBQ2pCLE1BQU07Z0JBQ1IsS0FBSyxPQUFPO29CQUNWLE1BQU0sR0FBRyxRQUFRLENBQUM7b0JBQ2xCLE1BQU07Z0JBQ1IsS0FBSyxRQUFRO29CQUNYLE1BQU0sR0FBRyxTQUFTLENBQUM7b0JBQ25CLE1BQU07Z0JBQ1IsS0FBSyxLQUFLO29CQUNSLE1BQU0sR0FBRyxNQUFNLENBQUM7b0JBQ2hCLE1BQU07WUFDVixDQUFDO1lBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3JELENBQUM7WUFDRCxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQW9CLEVBQWlCLEVBQUU7WUFDN0UsSUFBSSxDQUFDO2dCQUNILElBQUksSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVcsQ0FBQyxDQUFDO2dCQUNyRSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUVwQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN6QyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFTLENBQUMsQ0FBQztnQkFDOUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDYixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO2dCQUN4QyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25CLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsYUFBYTtZQUNuRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQWlCLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO2FBQzFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNaLElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQztZQUN0QyxxQ0FBcUM7WUFDckMsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDZCxJQUFJLENBQUM7b0JBQ0gsU0FBUzt5QkFDTixTQUFTLENBQUMsYUFBYSxDQUFDO3lCQUN4QixLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsa0NBQWtDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEUsQ0FBQztnQkFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkJBQTJCLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hELENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRU8sa0JBQWtCLENBQUMsSUFBWTtRQUNyQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQztZQUMxQixVQUFVLEVBQUUsSUFBSSxDQUFDLHlCQUF5QjtZQUMxQyxLQUFLLEVBQUUsSUFBSTtTQUNaLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxrQkFBa0I7UUFDdkIsSUFBSSxlQUFlLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFDRCxPQUFPLGVBQWUsQ0FBQztJQUN6QixDQUFDO0lBRU0sa0JBQWtCO1FBQ3ZCLElBQUksZUFBZSxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDdkUsT0FBTyxlQUFlLEtBQUssSUFBSSxJQUFJLGVBQWUsS0FBSyxTQUFTLENBQUM7SUFDbkUsQ0FBQztJQUVNLGFBQWEsQ0FBQyxRQUFnQixFQUFFLElBQVksRUFBRSxhQUFzQjtRQUN6RSxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzdELElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzdFLENBQUM7SUFDSCxDQUFDO0lBRU0sZUFBZSxDQUFDLFFBQWdCLEVBQUUsYUFBc0I7UUFDN0QsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQzFELElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsYUFBYSxDQUFDLENBQUM7UUFDdEUsQ0FBQztJQUNILENBQUM7SUFFTSxhQUFhLENBQUMsUUFBZ0I7UUFDbkMsSUFBSSxJQUFJLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxRQUFRLG9CQUFvQixDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVNLHNCQUFzQixDQUFDLGFBQXFCO1FBQ2pELElBQUksUUFBUSxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGFBQWEsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLGFBQWEsb0JBQW9CLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBd0IsRUFBRSxhQUE0QjtRQUN6RSxPQUFPLE1BQU0sSUFBSSxDQUFDLDJCQUEyQixDQUMzQyxNQUFNLElBQUksQ0FBQyxJQUFJO2FBQ1osT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksRUFBRSxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDO2FBQ3BFLFNBQVMsRUFBRSxDQUNmLENBQUM7UUFDRixnREFBZ0Q7SUFDbEQsQ0FBQztJQUVNLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxJQUFZO1FBQ3pELElBQUksV0FBVyxDQUFDO1FBQ2hCLElBQUksV0FBVyxDQUFDO1FBQ2hCLElBQUksT0FBTyxDQUFDO1FBQ1osSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCO2lCQUN0QyxHQUFHLENBQUMsc0NBQXNDLENBQUM7aUJBQzNDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzVGLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsa0NBQWtDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM1RixDQUFDO2FBQU0sQ0FBQztZQUNOLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDbkIsV0FBVyxHQUFHLE1BQU0sQ0FBQztZQUNyQixPQUFPLEdBQUcsdUJBQXVCLENBQUM7UUFDcEMsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztZQUNwQyxPQUFPO2dCQUNMLElBQUk7Z0JBQ0osT0FBTztnQkFDUCxXQUFXO2dCQUNYLFdBQVc7YUFDWixDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksaUJBQWlCLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FDaEYsQ0FBQyxRQUFrQyxFQUFFLEVBQUU7WUFDckMsT0FBTyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQztRQUNoQyxDQUFDLENBQ0YsQ0FBQztRQUNGLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLGlCQUFpQixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMzRSxPQUFPLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxJQUFJLHNCQUFzQixDQUFDLENBQUM7WUFFaEYsT0FBTztnQkFDTCxJQUFJO2dCQUNKLE9BQU87Z0JBQ1AsV0FBVztnQkFDWCxXQUFXO2FBQ1osQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTSxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBWTtRQUN6QyxJQUFJLHNCQUFzQixHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqRixJQUFJLENBQUMsc0JBQXNCO1lBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsbURBQW1ELENBQUMsQ0FBQztRQUN2RSxPQUFPLHNCQUFzQixDQUFDO0lBQ2hDLENBQUM7SUFFTSxLQUFLLENBQUMsaUJBQWlCLENBQUMsT0FBZSxFQUFFLElBQVk7UUFDMUQsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hDLHVDQUF1QztRQUN2QywyQkFBMkI7UUFFM0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztRQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFCLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVyQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzdELE1BQU0sSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztJQUNsQyxDQUFDO0lBRU0sS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQVksRUFBRSxJQUFZO1FBQ3RELE9BQU8sTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDOUQsQ0FBQztJQUVNLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBWSxFQUFFLGVBQWdDO1FBQ3ZFLE9BQU8sTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDO1lBQy9CLElBQUk7WUFDSixlQUFlO1NBQ2hCLENBQUMsQ0FBQztRQUNILDJDQUEyQztRQUMzQyxvQ0FBb0M7UUFDcEMsOENBQThDO1FBQzlDLGNBQWM7UUFDZCxZQUFZO1FBQ1osdUJBQXVCO1FBQ3ZCLE9BQU87UUFDUCxpQkFBaUI7UUFDakIsTUFBTTtRQUNOLHdDQUF3QztJQUMxQyxDQUFDO0lBRU0sS0FBSyxDQUFDLG1CQUFtQixDQUM5QixJQUFZLEVBQ1osUUFBZ0IsRUFDaEIsTUFBYyxFQUNkLGVBQWdDO1FBRWhDLE9BQU8sTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO1FBQ3BGLDJDQUEyQztRQUMzQyxvQ0FBb0M7UUFDcEMsb0RBQW9EO1FBQ3BELGNBQWM7UUFDZCxZQUFZO1FBQ1osZ0JBQWdCO1FBQ2hCLGNBQWM7UUFDZCx1QkFBdUI7UUFDdkIsT0FBTztRQUNQLGlCQUFpQjtRQUNqQixNQUFNO1FBQ04sd0NBQXdDO0lBQzFDLENBQUM7SUFFTSxLQUFLLENBQUMsdUJBQXVCLENBQ2xDLElBQVksRUFDWixRQUFnQixFQUNoQixlQUFnQztRQUVoQyxPQUFPLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO1FBQ2hGLDJDQUEyQztRQUMzQyxvQ0FBb0M7UUFDcEMsd0RBQXdEO1FBQ3hELGNBQWM7UUFDZCxZQUFZO1FBQ1osZ0JBQWdCO1FBQ2hCLHVCQUF1QjtRQUN2QixPQUFPO1FBQ1AsaUJBQWlCO1FBQ2pCLE1BQU07UUFDTix3Q0FBd0M7SUFDMUMsQ0FBQztJQUVNLEtBQUssQ0FBQyxtQkFBbUIsQ0FDOUIsSUFBWSxFQUNaLGVBQWdDLEVBQ2hDLEtBQXlCLEVBQ3pCLE9BQVk7UUFFWixJQUFJLENBQUMsb0JBQW9CLENBQUM7WUFDeEIsSUFBSTtZQUNKLGVBQWU7WUFDZixLQUFLO1lBQ0wsT0FBTztTQUNSLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxLQUFLLENBQUMsMkJBQTJCLENBQ3RDLElBQVksRUFDWixlQUFnQyxFQUNoQyxLQUF5QixFQUN6QixPQUFjO1FBRWQsSUFBSSxDQUFDLDRCQUE0QixDQUFDO1lBQ2hDLElBQUk7WUFDSixlQUFlO1lBQ2YsS0FBSztZQUNMLE9BQU87U0FDUixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFZLEVBQUUsVUFBc0I7UUFDM0QsT0FBTyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNyRCwyQ0FBMkM7UUFDM0MsbUNBQW1DO1FBQ25DLE1BQU07UUFDTiw4Q0FBOEM7UUFDOUMsZ0JBQWdCO1FBQ2hCLGNBQWM7UUFDZCxvQkFBb0I7UUFDcEIsU0FBUztRQUNULG1CQUFtQjtRQUNuQixPQUFPO1FBQ1AsU0FBUztRQUNULEtBQUs7UUFDTCx3Q0FBd0M7SUFDMUMsQ0FBQztJQUVPLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBVztRQUN0QyxPQUFPLE1BQU0sSUFBSSxDQUFDLDJCQUEyQixDQUMzQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUMvRSxDQUFDO0lBQ0osQ0FBQztJQUVPLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxNQUFXO1FBQzVDLE9BQU8sTUFBTSxJQUFJLENBQUMsMkJBQTJCLENBQzNDLE1BQU0sSUFBSSxDQUFDLElBQUk7YUFDWixtQkFBbUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsZUFBZSxDQUFDO2FBQ3hGLFNBQVMsRUFBRSxDQUNmLENBQUM7SUFDSixDQUFDO0lBRU8sS0FBSyxDQUFDLHdCQUF3QixDQUFDLE1BQVc7UUFDaEQsT0FBTyxNQUFNLElBQUksQ0FBQywyQkFBMkIsQ0FDM0MsTUFBTSxJQUFJLENBQUMsSUFBSTthQUNaLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsZUFBZSxDQUFDO2FBQzdFLFNBQVMsRUFBRSxDQUNmLENBQUM7SUFDSixDQUFDO0lBRU8sS0FBSyxDQUFDLG9CQUFvQixDQUFDLE1BQVc7UUFDNUMsT0FBTyxNQUFNLElBQUksQ0FBQywyQkFBMkIsQ0FDM0MsTUFBTSxJQUFJLENBQUMsSUFBSTthQUNaLFlBQVksQ0FDWCxNQUFNLENBQUMsSUFBSSxFQUNYLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxFQUN0QyxNQUFNLENBQUMsS0FBSyxFQUNaLE1BQU0sQ0FBQyxPQUFPLENBQ2Y7YUFDQSxTQUFTLEVBQUUsQ0FDZixDQUFDO0lBQ0osQ0FBQztJQUNPLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxNQUFXO1FBQ3BELE9BQU8sTUFBTSxJQUFJLENBQUMsMkJBQTJCLENBQzNDLE1BQU0sSUFBSSxDQUFDLElBQUk7YUFDWixvQkFBb0IsQ0FDbkIsTUFBTSxDQUFDLElBQUksRUFDWCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsRUFDdEMsTUFBTSxDQUFDLEtBQUssRUFDWixNQUFNLENBQUMsT0FBTyxDQUNmO2FBQ0EsU0FBUyxFQUFFLENBQ2YsQ0FBQztJQUNKLENBQUM7SUFFTyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQVc7UUFDcEMsT0FBTyxNQUFNLElBQUksQ0FBQywyQkFBMkIsQ0FDM0MsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FDeEUsQ0FBQztJQUNKLENBQUM7SUFFTSxLQUFLLENBQUMsMkJBQTJCLENBQ3RDLGlCQUFnRDtRQUVoRCxJQUFJLENBQUMsV0FBVyxHQUFHLGlCQUFpQixFQUFFLFdBQVcsQ0FBQztRQUNsRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFaEIsSUFBSSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCxPQUFPLGlCQUFpQixFQUFFLE1BQU0sQ0FBQztJQUNuQyxDQUFDO0lBRU8sYUFBYSxDQUFDLE9BQW9DO1FBQ3hELE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxvQkFBMEMsRUFBRSxFQUFFO1lBQzdELElBQUksWUFBWSxHQUFtRCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FDekYsb0JBQW9CLENBQUMsSUFBSSxDQUMxQixDQUFDO1lBQ0YsSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDakIsWUFBWSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQzFDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQVk7UUFDNUIsT0FBTyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDN0QsQ0FBQztJQUVNLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBWTtRQUM3QixJQUFJLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbEUsSUFBSSxDQUFDLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7OEdBNXZCVSx1QkFBdUI7a0hBQXZCLHVCQUF1QixjQUZ0QixNQUFNOzsyRkFFUCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COztBQWd3QkQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsU0FBUyxDQUFDO0FBVzdDLE1BQU0sT0FBTyxlQUFlO0lBTzFCO1FBTlEsY0FBUyxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRXpDLFVBQUssR0FBbUIsRUFBRSxDQUFDO1FBQzNCLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLGlCQUFZLEdBQWtCLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUdyRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFDRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBa0IsRUFBRSxXQUFvQixLQUFLO1FBQ3RELElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLDhEQUE4RDtRQUMxRixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsdURBQXVEO1FBQ2hGLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZO1FBQ2hCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDMUIsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3hDLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsTUFBTSxZQUFZLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqRCxZQUFZLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7OEdBdENVLGVBQWU7a0hBQWYsZUFBZSxjQUZkLE1BQU07OzJGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIEluamVjdG9yLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFNtYXJ0U2Vzc2lvblNlcnZpY2UgfSBmcm9tICcuLi9zZXNzaW9uL3NtYXJ0LXNlc3Npb24uc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQ2xpcGJvYXJkRGF0YSxcclxuICBDb21wb25lbnRNb2RlbCxcclxuICBDb21wb25lbnRNb2RlbENoYW5nZSxcclxuICBEYXRhQ2hhbmdlLFxyXG4gIERvd25sb2FkZWRGaWxlLFxyXG4gIExpbmssXHJcbiAgTGlua1RhcmdldEVudW0sXHJcbiAgTWVzc2FnZURhdGEsXHJcbiAgTWVzc2FnZVJlc3VsdCxcclxuICBVaUFjdGlvbkRlc2NyaXB0b3IsXHJcbiAgVWlBY3Rpb25SZXF1ZXN0LFxyXG4gIFZpZXdDb25zdHJhaW50LFxyXG4gIFZpZXdDb250ZXh0Q2hhbmdlLFxyXG4gIFZpZXdDb250ZXh0RGF0YSxcclxuICBWaWV3Q29udGV4dFVwZGF0ZSxcclxuICBWaWV3RGF0YSxcclxuICBWaWV3U2VydmljZSxcclxuICBWaWV3U3RhdGUsXHJcbiAgVmlld1N0YXRlVXBkYXRlLFxyXG4gIFZpZXdUeXBlLFxyXG59IGZyb20gJy4vYXBpJztcclxuaW1wb3J0IHsgTWVzc2FnZURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vbWVzc2FnZS1kaWFsb2cvbWVzc2FnZS1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuICBTbWFydFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgU21hcnRWaWV3Q29udGV4dEFwaUVycm9yLFxyXG4gIFNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvcnMsXHJcbiAgU21hcnRWaWV3RGlhbG9nUmVmLFxyXG4gIFNtYXJ0Vmlld0hhbmRsZXJNb2RlbCxcclxufSBmcm9tICcuL3NtYXJ0LXZpZXctY29udGV4dC5tb2RlbCc7XHJcbmltcG9ydCB7IFNtYXJ0U3ViamVjdCB9IGZyb20gJy4uL3NtYXJ0LXN1YmplY3QvcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBTbWFydE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc21hcnQtbmF2aWdhdGlvbi9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IFNtYXJ0Vmlld0NvbnRleHREaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi9zbWFydC12aWV3LWNvbnRleHQtZGlhbG9nLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGNvbnN0IFNtYXJ0Vmlld0NvbnRleHRFcnJvckRpYWxvZ0J1dHRvbkxhYmVsID0gJ1NtYXJ0Vmlld0NvbnRleHRFcnJvckRpYWxvZ0J1dHRvbkxhYmVsJztcclxuZXhwb3J0IGNvbnN0IFNtYXJ0Vmlld0NvbnRleHRFcnJvckRpYWxvZ1RpdGxlID0gJ1NtYXJ0Vmlld0NvbnRleHRFcnJvckRpYWxvZ1RpdGxlJztcclxuZXhwb3J0IGNvbnN0IFNtYXJ0Vmlld0NvbnRleHRFcnJvckRpYWxvZ01lc3NhZ2UgPSAnU21hcnRWaWV3Q29udGV4dEVycm9yRGlhbG9nTWVzc2FnZSc7XHJcbmV4cG9ydCBjb25zdCBEZWZhdWx0VWlBY3Rpb25Db2RlX0NMT1NFID0gJ0RFRkFVTFRfQ0xPU0UnO1xyXG5cclxuZXhwb3J0IGNvbnN0IERJQUxPR19ESVNBQkxFX0NMT1NFID0gbmV3IEluamVjdGlvblRva2VuPGJvb2xlYW4+KCdkaWFsb2dEaXNhYmxlQ2xvc2UnKTtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbWFydFZpZXdDb250ZXh0U2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGV4dFV1aWROYW1lOiBzdHJpbmcgPSAndmlld0NvbnRleHRVdWlkJztcclxuICBwcml2YXRlIHJlYWRvbmx5IHZpZXdDb250ZXh0VXVpZEhlYWRlck5hbWU6IHN0cmluZyA9ICd2aWV3Q29udGV4dFV1aWQnO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcGFnZU5hbWVQcmVmaXg6IHN0cmluZyA9ICdwYWdlLic7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjb21wb25lbnROYW1lUHJlZml4OiBzdHJpbmcgPSAnY29tcG9uZW50Lic7XHJcbiAgcHVibGljIG1lc3NhZ2VEaWFsb2duYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSB1cmw/OiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSB2aWV3Q29udGV4dD86IFZpZXdDb250ZXh0RGF0YTtcclxuICBwcml2YXRlIHZpZXdIYW5kbGVyczogQXJyYXk8U21hcnRWaWV3SGFuZGxlck1vZGVsPiA9IG5ldyBBcnJheSgpO1xyXG4gIHByaXZhdGUgb3BlbmVkVmlld1V1aWRzOiBBcnJheTxzdHJpbmc+ID0gbmV3IEFycmF5KCk7XHJcbiAgcHJpdmF0ZSBvcGVuZWRWaWV3RGF0YTogQXJyYXk8Vmlld0RhdGE+ID0gbmV3IEFycmF5KCk7XHJcblxyXG4gIHByaXZhdGUgX2Rlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuICBwdWJsaWMgdXVpZE9mUGFnZUhhc0JlZW5DaGFuZ2VkOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU21hcnRTdWJqZWN0KHRoaXMuX2Rlc3Ryb3kkKTtcclxuICBwdWJsaWMgdmlld0NvbnRleHRIYXNCZWVuU3luY2VkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XHJcbiAgcHJpdmF0ZSBpbml0aWFsaXplUnVubmluZzogU3ViamVjdDxWaWV3Q29udGV4dERhdGE+IHwgdW5kZWZpbmVkO1xyXG5cclxuICBwdWJsaWMgc21hcnRWaWV3Q29udGV4dEFwaUVycm9ycz86IFNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvcnM7XHJcblxyXG4gIHB1YmxpYyBvcGVuU21hcnRMaW5rOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XHJcbiAgcHVibGljIGlzT3BlbmluZ1NtYXJ0TGluazogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIGRpYWxvZ1JlZnM6IFNtYXJ0Vmlld0RpYWxvZ1JlZltdID0gW107XHJcblxyXG4gIHByaXZhdGUgYWN0aW9uRGVzY3JpcHRvcnM/OiBNYXA8c3RyaW5nLCBVaUFjdGlvbkRlc2NyaXB0b3I+O1xyXG5cclxuICBwdWJsaWMgY29tbW9uRmVlZGJhY2tUZXh0Pzogc3RyaW5nO1xyXG5cclxuICBwdWJsaWMgc21hcnRBcGlDbGllbnRzOiBNYXA8c3RyaW5nLCBTbWFydFN1YmplY3Q8YW55Pj4gPSBuZXcgTWFwKCk7XHJcblxyXG4gIHB1YmxpYyBzZXQgdHJhbnNsYXRlU2VydmljZSh0cmFuc2xhdGVTZXJ2aWNlOiBTbWFydFRyYW5zbGF0ZVNlcnZpY2UgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UgPSB0cmFuc2xhdGVTZXJ2aWNlO1xyXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlQ2hhbmdlZC5uZXh0KCk7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2VDaGFuZ2VkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHRyYW5zbGF0ZVNlcnZpY2UoKTogU21hcnRUcmFuc2xhdGVTZXJ2aWNlIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICh0aGlzLl90cmFuc2xhdGVTZXJ2aWNlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U/OiBTbWFydFRyYW5zbGF0ZVNlcnZpY2U7XHJcbiAgcHVibGljIHRyYW5zbGF0ZVNlcnZpY2VDaGFuZ2VkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB2aWV3OiBWaWV3U2VydmljZSxcclxuICAgIHByaXZhdGUgc2Vzc2lvbjogU21hcnRTZXNzaW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgbmF2aWdhdGlvbjogU21hcnROYXZpZ2F0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgZGlhbG9nOiBTbWFydFZpZXdDb250ZXh0RGlhbG9nU2VydmljZSxcclxuICAgIHByaXZhdGUgYXBpUXVldWVTZXJ2aWNlOiBBcGlRdWV1ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGluamVjdDogSW5qZWN0b3JcclxuICApIHt9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmb2xsb3codXVpZDogc3RyaW5nLCBkZXRlY3RDaGFuZ2U6IFNtYXJ0U3ViamVjdDxhbnk+KTogdm9pZCB7XHJcbiAgICB0aGlzLnNtYXJ0QXBpQ2xpZW50cy5zZXQodXVpZCwgZGV0ZWN0Q2hhbmdlKTtcclxuICB9XHJcbiAgcHVibGljIHVuZm9sbG93KHV1aWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5zbWFydEFwaUNsaWVudHMuZGVsZXRlKHV1aWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEFjdGlvbkRlc2NyaXB0b3JzKGFjdGlvbkRlc2NyaXB0b3JzOiBNYXA8c3RyaW5nLCBVaUFjdGlvbkRlc2NyaXB0b3I+KTogdm9pZCB7XHJcbiAgICB0aGlzLmFjdGlvbkRlc2NyaXB0b3JzID0gYWN0aW9uRGVzY3JpcHRvcnM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0QWN0aW9uRGVzY3JpcHRvcnMoKTogTWFwPHN0cmluZywgVWlBY3Rpb25EZXNjcmlwdG9yPiB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAoIXRoaXMuYWN0aW9uRGVzY3JpcHRvcnMpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignTm8gYWN0aW9uIGRlc2NyaXB0b3JzIGhhcyBiZWVuIHNldCB0byBWaWV3Q29udGV4dC4nKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmFjdGlvbkRlc2NyaXB0b3JzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFZpZXdIYW5kbGVycyh2aWV3SGFuZGxlcnM6IEFycmF5PFNtYXJ0Vmlld0hhbmRsZXJNb2RlbD4pOiB2b2lkIHtcclxuICAgIHRoaXMudmlld0hhbmRsZXJzID0gdmlld0hhbmRsZXJzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFZpZXdBcGlFcnJvcnModmlld0FwaUVycm9yczogU21hcnRWaWV3Q29udGV4dEFwaUVycm9ycyk6IHZvaWQge1xyXG4gICAgdGhpcy5zbWFydFZpZXdDb250ZXh0QXBpRXJyb3JzID0gdmlld0FwaUVycm9ycztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRNZXNzYWdlRGlhbG9nTmFtZShtZXNzYWdlRGlhbG9nTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLm1lc3NhZ2VEaWFsb2duYW1lID0gbWVzc2FnZURpYWxvZ05hbWU7XHJcbiAgICB0aGlzLnZpZXdIYW5kbGVycy5wdXNoKHtcclxuICAgICAgbmFtZTogbWVzc2FnZURpYWxvZ05hbWUsXHJcbiAgICAgIGNvbXBvbmVudDogTWVzc2FnZURpYWxvZ0NvbXBvbmVudCxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRVcFVybEZvclZpZXdTZXJ2aWNlKCk6IHZvaWQge1xyXG4gICAgdGhpcy52aWV3LmNvbmZpZ3VyYXRpb24uYmFzZVBhdGggPSB0aGlzLnVybDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRVcmwodXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMudXJsID0gdXJsICsgJy92aWV3JztcclxuICAgIHRoaXMuc2V0VXBVcmxGb3JWaWV3U2VydmljZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEFuZFN5bmNWaWV3Q29udGV4dCh1dWlkPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXV1aWQpIHtcclxuICAgICAgdXVpZCA9IHRoaXMuZ2V0Vmlld0NvbnRleHRVdWlkKCk7XHJcbiAgICB9XHJcbiAgICBhd2FpdCB0aGlzLmdldFZpZXdDb250ZXh0KHV1aWQpLnRoZW4oKCkgPT4ge1xyXG4gICAgICB0aGlzLnN5bmNWaWV3KCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRWaWV3Q29udGV4dCh1dWlkOiBzdHJpbmcpOiBQcm9taXNlPFZpZXdDb250ZXh0RGF0YT4ge1xyXG4gICAgdGhpcy52aWV3Q29udGV4dCA9IGF3YWl0IHRoaXMudmlldy5nZXRWaWV3Q29udGV4dCh1dWlkKS50b1Byb21pc2UoKTtcclxuICAgIGlmICghdGhpcy52aWV3Q29udGV4dCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZpZXdDb250ZXh0IGRvZXMgbm90IGV4aXN0IHdpdGggdGhlIGdpdmVuIHV1aWQuJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy52aWV3Q29udGV4dDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRWaWV3Q29udGV4dERhdGFCeVBhZ2VOYW1lKHBhZ2VOYW1lOiBzdHJpbmcpOiBQcm9taXNlPFZpZXdEYXRhPiB7XHJcbiAgICBpZiAoIXRoaXMudmlld0NvbnRleHQpIHtcclxuICAgICAgYXdhaXQgdGhpcy5nZXRWaWV3Q29udGV4dCh0aGlzLmdldFZpZXdDb250ZXh0VXVpZCgpKTtcclxuICAgIH1cclxuICAgIGxldCBwYWdlVXVpZCA9IHRoaXMuZ2V0VXVpZE9mUGFnZShwYWdlTmFtZSk7XHJcblxyXG4gICAgbGV0IHZpZXdDb250ZXh0QnlQYWdlTmFtZSA9IHRoaXMudmlld0NvbnRleHQ/LnZpZXdzLmZpbmQoKHZpZXcpID0+IHZpZXcudXVpZCA9PT0gcGFnZVV1aWQpO1xyXG4gICAgaWYgKCF2aWV3Q29udGV4dEJ5UGFnZU5hbWUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgVmlld0RhdGEgb2YgJHtwYWdlTmFtZX0gaXMgbm90IGZvdW5kIWApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZpZXdDb250ZXh0QnlQYWdlTmFtZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVWaWV3Q29udGV4dChcclxuICAgIHZpZXdDb250ZXh0VXBkYXRlOiBWaWV3Q29udGV4dFVwZGF0ZVxyXG4gICk6IFByb21pc2U8Vmlld0NvbnRleHREYXRhIHwgdW5kZWZpbmVkPiB7XHJcbiAgICB0aGlzLnZpZXdDb250ZXh0ID0gYXdhaXQgdGhpcy52aWV3LnVwZGF0ZVZpZXdDb250ZXh0KHZpZXdDb250ZXh0VXBkYXRlKS50b1Byb21pc2UoKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy52aWV3Q29udGV4dDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJTZXNzaW9uU3RvcmFnZSgpOiB2b2lkIHtcclxuICAgIHNlc3Npb25TdG9yYWdlLmNsZWFyKCk7XHJcbiAgICB0aGlzLm9wZW5lZFZpZXdEYXRhID0gW107XHJcbiAgICB0aGlzLm9wZW5lZFZpZXdVdWlkcyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHN0YXJ0Vmlld0NvbnRleHQoKTogUHJvbWlzZTxWaWV3Q29udGV4dERhdGE+IHtcclxuICAgIHRoaXMuY2xlYXJTZXNzaW9uU3RvcmFnZSgpO1xyXG5cclxuICAgIGxldCBuZXdWaWV3Q29udGV4dDogVmlld0NvbnRleHREYXRhIHwgdW5kZWZpbmVkID0gYXdhaXQgdGhpcy52aWV3XHJcbiAgICAgIC5jcmVhdGVWaWV3Q29udGV4dCgpXHJcbiAgICAgIC50b1Byb21pc2UoKTtcclxuICAgIGlmICghbmV3Vmlld0NvbnRleHQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBWaWV3Q29udGV4dCB3YXMgY3JlYXRlZCcpO1xyXG4gICAgfVxyXG4gICAgdGhpcy52aWV3Q29udGV4dCA9IG5ld1ZpZXdDb250ZXh0O1xyXG4gICAgdGhpcy5zZXRWaWV3Q29udGV4dFV1aWQobmV3Vmlld0NvbnRleHQudXVpZCEpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnZpZXdDb250ZXh0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGluaXRpYWxpemUodXVpZD86IHN0cmluZyk6IFByb21pc2U8Vmlld0NvbnRleHREYXRhIHwgdW5kZWZpbmVkPiB7XHJcbiAgICBpZiAodGhpcy5pbml0aWFsaXplUnVubmluZykge1xyXG4gICAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplUnVubmluZy50b1Byb21pc2UoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVJ1bm5pbmcgPSBuZXcgU21hcnRTdWJqZWN0KHRoaXMuX2Rlc3Ryb3kkKTtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpZiAodGhpcy52aWV3SGFuZGxlcnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgIFwiVGhlcmUgYXJlbid0IGFueSB2aWV3SGFuZGxlcnMgaW4gU21hcnRWaWV3Q29udGV4dFNlcnZpY2UhIFByb3ZpZGUgc29tZSB0byB1c2UgaXRzIGZ1bmN0aW9ucy5cIlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLm1lc3NhZ2VEaWFsb2duYW1lKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtZXNzYWdlRGlhbG9nTmFtZSBwcm92aWRlZCBieSB0aGUgYmFja2VuZCBoYXMgbm90IGJlZW4gc2V0LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodXVpZCkge1xyXG4gICAgICAgICAgdGhpcy5zZXRWaWV3Q29udGV4dFV1aWQodXVpZCk7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmdldFZpZXdDb250ZXh0KHV1aWQpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RhcnRWaWV3Q29udGV4dCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnN0YXJ0Vmlld0NvbnRleHQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdDb250ZXh0ITtcclxuICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVSdW5uaW5nLm5leHQodGhpcy52aWV3Q29udGV4dCEpO1xyXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVJ1bm5pbmcuY29tcGxldGUoKTtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVSdW5uaW5nID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb3BlblZpZXcodmlldzogVmlld0RhdGEpOiBWaWV3U3RhdGVVcGRhdGUgfCB1bmRlZmluZWQge1xyXG4gICAgbGV0IGFscmVhZHlPcGVuZWQgPSB0aGlzLm9wZW5lZFZpZXdVdWlkcy5zb21lKCh1dWlkKSA9PiB1dWlkID09PSB2aWV3LnV1aWQpO1xyXG4gICAgaWYgKGFscmVhZHlPcGVuZWQpIHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG4gICAgbGV0IHZpZXdIYW5kbGVyOiBTbWFydFZpZXdIYW5kbGVyTW9kZWwgfCB1bmRlZmluZWQgPSB0aGlzLnZpZXdIYW5kbGVycy5maW5kKFxyXG4gICAgICAoaGFuZGxlcikgPT4gaGFuZGxlci5uYW1lID09PSB2aWV3LnZpZXdOYW1lXHJcbiAgICApO1xyXG5cclxuICAgIGlmICghdmlld0hhbmRsZXIpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTbWFydFZpZXdIYW5kbGVyTW9kZWwgd2FzIG5vdCBmb3VuZCBieSB2aWV3IG5hbWU6ICR7dmlldy52aWV3TmFtZX1gKTtcclxuICAgIH1cclxuICAgIGlmICh2aWV3LnR5cGUgPT09IFZpZXdUeXBlLkRJQUxPRykge1xyXG4gICAgICBpZiAoIXZpZXdIYW5kbGVyLmNvbXBvbmVudCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgIGBDb21wb25lbnQgaXMgdW5kZWZpbmVkIGluIFNtYXJ0Vmlld0hhbmRsZXJNb2RlbCB3aXRoIG5hbWU6ICR7dmlldy52aWV3TmFtZX1gXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgcmVmSXNBbHJhZHlBZGRlZCA9IHRoaXMuZGlhbG9nUmVmcy5zb21lKFxyXG4gICAgICAgIChyZWY6IFNtYXJ0Vmlld0RpYWxvZ1JlZikgPT4gcmVmLnV1aWQgPT09IHZpZXcudXVpZFxyXG4gICAgICApO1xyXG4gICAgICBpZiAoIXJlZklzQWxyYWR5QWRkZWQpIHtcclxuICAgICAgICBsZXQgZGlhbG9nUmVmO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICB0aGlzLm9wZW5lZFZpZXdVdWlkcy5wdXNoKHZpZXcudXVpZCk7XHJcbiAgICAgICAgICB0aGlzLm9wZW5lZFZpZXdEYXRhLnB1c2godmlldyk7XHJcbiAgICAgICAgICB0aGlzLnNldFV1aWRPZlBhZ2Uodmlldy52aWV3TmFtZSwgdmlldy51dWlkLCB2aWV3SGFuZGxlci5jb21wb25lbnROYW1lKTtcclxuICAgICAgICAgIGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW5Db21wb25lbnRBc0RpYWxvZyh2aWV3SGFuZGxlci5jb21wb25lbnQsIHZpZXdIYW5kbGVyLm5hbWUpO1xyXG4gICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMub3BlbmVkVmlld1V1aWRzLmluZGV4T2Yodmlldy51dWlkKTtcclxuICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3BlbmVkVmlld1V1aWRzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgIHRoaXMub3BlbmVkVmlld0RhdGEuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclV1aWRPZlBhZ2Uodmlldy52aWV3TmFtZSwgdmlld0hhbmRsZXIuY29tcG9uZW50TmFtZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5zZXRVdWlkT2ZQYWdlKHZpZXcudmlld05hbWUsIHZpZXcudXVpZCwgdmlld0hhbmRsZXIuY29tcG9uZW50TmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBkaWFsb2dEaXNhYmxlQ2xvc2UgPSB0cnVlO1xyXG4gICAgICAgIGxldCBpc01lc3NhZ2VEaWFsb2cgPSB2aWV3LnZpZXdOYW1lID09PSB0aGlzLm1lc3NhZ2VEaWFsb2duYW1lO1xyXG4gICAgICAgIGlmICghaXNNZXNzYWdlRGlhbG9nKSB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBkaWFsb2dEaXNhYmxlQ2xvc2UgPSB0aGlzLmluamVjdC5nZXQoRElBTE9HX0RJU0FCTEVfQ0xPU0UpO1xyXG4gICAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGR1cmluZyByZWFkaW5nIERJQUxPR19ESVNBQkxFX0NMT1NFJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkaWFsb2dSZWYuZGlzYWJsZUNsb3NlID0gZGlhbG9nRGlzYWJsZUNsb3NlO1xyXG4gICAgICAgIC8vIGlmIChpc01lc3NhZ2VEaWFsb2cpIHtcclxuICAgICAgICAvLyAgIGlmICh2aWV3Lm1lc3NhZ2U/Lm9wdGlvbnMgJiYgdmlldy5tZXNzYWdlLm9wdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgLy8gICB9XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIGlmICghZGlhbG9nRGlzYWJsZUNsb3NlKSB7XHJcbiAgICAgICAgICBkaWFsb2dSZWZcclxuICAgICAgICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtQWN0aW9uKHZpZXcudXVpZCwgeyBjb2RlOiBEZWZhdWx0VWlBY3Rpb25Db2RlX0NMT1NFLCBwYXJhbXM6IHt9IH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmcy5wdXNoKHtcclxuICAgICAgICAgIHV1aWQ6IHZpZXcudXVpZCxcclxuICAgICAgICAgIGRpYWxvZ1JlZixcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh2aWV3LnR5cGUgPT09IFZpZXdUeXBlLk5PUk1BTCkge1xyXG4gICAgICBpZiAodmlld0hhbmRsZXIucm91dGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUm91dGUgaXMgdW5kZWZpbmVkIGluIFNtYXJ0Vmlld0hhbmRsZXJNb2RlbCB3aXRoIG5hbWU6ICR7dmlldy52aWV3TmFtZX1gKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm5hdmlnYXRpb24ubmF2aWdhdGVUbyh2aWV3SGFuZGxlci5yb3V0ZS5zcGxpdCgnLycpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHR5cGUgb2YgdGhlIHZpZXcgYW5kIGl0cyB2aWV3SGFuZGxlciBpcyBub3QgdGhlIHNhbWUhJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdmlldy5zdGF0ZSA9IFZpZXdTdGF0ZS5PUEVORUQ7XHJcblxyXG4gICAgdGhpcy5vcGVuZWRWaWV3VXVpZHMucHVzaCh2aWV3LnV1aWQpO1xyXG4gICAgdGhpcy5vcGVuZWRWaWV3RGF0YS5wdXNoKHZpZXcpO1xyXG5cclxuICAgIHRoaXMuc2V0VXVpZE9mUGFnZSh2aWV3LnZpZXdOYW1lLCB2aWV3LnV1aWQsIHZpZXdIYW5kbGVyLmNvbXBvbmVudE5hbWUpO1xyXG4gICAgdGhpcy51dWlkT2ZQYWdlSGFzQmVlbkNoYW5nZWQubmV4dCh2aWV3LnZpZXdOYW1lKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzdGF0ZTogVmlld1N0YXRlLk9QRU5FRCxcclxuICAgICAgdXVpZDogdmlldy51dWlkLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbG9zZVZpZXcodmlldzogVmlld0RhdGEpOiBWaWV3U3RhdGVVcGRhdGUge1xyXG4gICAgbGV0IHZpZXdIYW5kbGVyOiBTbWFydFZpZXdIYW5kbGVyTW9kZWwgfCB1bmRlZmluZWQgPSB0aGlzLnZpZXdIYW5kbGVycy5maW5kKFxyXG4gICAgICAoaGFuZGxlcikgPT4gaGFuZGxlci5uYW1lID09PSB2aWV3LnZpZXdOYW1lXHJcbiAgICApO1xyXG5cclxuICAgIGlmICghdmlld0hhbmRsZXIpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTbWFydFZpZXdIYW5kbGVyTW9kZWwgd2FzIG5vdCBmb3VuZCBieSB2aWV3IG5hbWU6ICR7dmlldy52aWV3TmFtZX1gKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodmlldy50eXBlID09PSBWaWV3VHlwZS5ESUFMT0cpIHtcclxuICAgICAgbGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nUmVmcy5maW5kKFxyXG4gICAgICAgIChkaWFsb2dSZWY6IFNtYXJ0Vmlld0RpYWxvZ1JlZikgPT4gZGlhbG9nUmVmLnV1aWQgPT09IHZpZXcudXVpZFxyXG4gICAgICApO1xyXG4gICAgICBpZiAoZGlhbG9nUmVmKSB7XHJcbiAgICAgICAgZGlhbG9nUmVmLmRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gICAgICAgIGxldCBpbmRleCA9IHRoaXMuZGlhbG9nUmVmcy5pbmRleE9mKGRpYWxvZ1JlZik7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dSZWZzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0RpYWxvZ1JlZiBpcyBub3QgZm91bmQgYnkgdXVpZC4nKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh2aWV3LnR5cGUgPT09IFZpZXdUeXBlLk5PUk1BTCkge1xyXG4gICAgICAvLyBUT0RPOiBjbG9zZSBub3JtYWwgcGFnZT8/P1xyXG4gICAgICAvLyB0aGlzLm5hdmlnYXRpb24ubmF2aWdhdGVUbyh2aWV3SGFuZGxlci5yb3V0ZS5zcGxpdChcIi9cIikpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgdHlwZSBvZiB0aGUgdmlldyBhbmQgaXRzIHZpZXdIYW5kbGVyIGlzIG5vdCB0aGUgc2FtZSEnKTtcclxuICAgIH1cclxuXHJcbiAgICB2aWV3LnN0YXRlID0gVmlld1N0YXRlLkNMT1NFRDtcclxuXHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMub3BlbmVkVmlld1V1aWRzLmluZGV4T2Yodmlldy51dWlkKTtcclxuICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgIHRoaXMub3BlbmVkVmlld1V1aWRzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIHRoaXMub3BlbmVkVmlld0RhdGEuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgdGhpcy5jbGVhclV1aWRPZlBhZ2Uodmlldy52aWV3TmFtZSwgdmlld0hhbmRsZXIuY29tcG9uZW50TmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc3RhdGU6IFZpZXdTdGF0ZS5DTE9TRUQsXHJcbiAgICAgIHV1aWQ6IHZpZXcudXVpZCxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbmRWaWV3Q29udGV4dFVwZGF0ZXModXBkYXRlc1RvU2VuZDogKFZpZXdTdGF0ZVVwZGF0ZSB8IHVuZGVmaW5lZClbXSkge1xyXG4gICAgY29uc3QgdXBkYXRlczogVmlld1N0YXRlVXBkYXRlW10gPSBbXTtcclxuICAgIHVwZGF0ZXNUb1NlbmQuZm9yRWFjaCgodXBkYXRlKSA9PiB7XHJcbiAgICAgIGlmICh1cGRhdGUgIT09IHVuZGVmaW5lZCAmJiB1cGRhdGUgIT09IG51bGwpIHVwZGF0ZXMucHVzaCh1cGRhdGUpO1xyXG4gICAgfSk7XHJcbiAgICBpZiAodXBkYXRlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlVmlld0NvbnRleHQoe1xyXG4gICAgICAgIHVwZGF0ZXMsXHJcbiAgICAgICAgdXVpZDogdGhpcy52aWV3Q29udGV4dD8udXVpZCxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHB1YmxpYyBhc3luYyByZXN0b3JlVmlld3ModXVpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCB1cGRhdGVzOiBWaWV3U3RhdGVVcGRhdGVbXSA9IFtdO1xyXG4gICAgaWYgKCF0aGlzLnZpZXdDb250ZXh0KSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuZ2V0Vmlld0NvbnRleHQodXVpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy52aWV3Q29udGV4dCEudmlld3MuZmlsdGVyKFxyXG4gICAgICAodmlldykgPT4gdmlldy5zdGF0ZSA9PT0gVmlld1N0YXRlLk9QRU5FRCB8fCB2aWV3LnN0YXRlID09PSBWaWV3U3RhdGUuVE9fT1BFTlxyXG4gICAgKS5tYXAoKHZpZXc6IFZpZXdEYXRhKSA9PiB7XHJcbiAgICAgIGNvbnN0IHVwZGF0ZSA9IHRoaXMub3BlblZpZXcodmlldyk7XHJcbiAgICAgIGlmICh1cGRhdGUpIHtcclxuICAgICAgICB1cGRhdGVzLnB1c2godXBkYXRlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNlbmRWaWV3Q29udGV4dFVwZGF0ZXModXBkYXRlcyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3luY1ZpZXcoKTogdm9pZCB7XHJcbiAgICBjb25zdCB1cGRhdGVzOiAoVmlld1N0YXRlVXBkYXRlIHwgdW5kZWZpbmVkKVtdID0gW107XHJcbiAgICB0aGlzLnZpZXdDb250ZXh0Py52aWV3cy5tYXAoKHZpZXc6IFZpZXdEYXRhKSA9PiB7XHJcbiAgICAgIHN3aXRjaCAodmlldy5zdGF0ZSkge1xyXG4gICAgICAgIGNhc2UgVmlld1N0YXRlLlRPX09QRU46XHJcbiAgICAgICAgICB1cGRhdGVzLnB1c2godGhpcy5vcGVuVmlldyh2aWV3KSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFZpZXdTdGF0ZS5UT19DTE9TRTpcclxuICAgICAgICAgIHVwZGF0ZXMucHVzaCh0aGlzLmNsb3NlVmlldyh2aWV3KSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgdmlld0RhdGFUb0Nsb3NlID0gdGhpcy5vcGVuZWRWaWV3RGF0YS5maWx0ZXIoXHJcbiAgICAgICh2aWV3RGF0YTogVmlld0RhdGEpID0+XHJcbiAgICAgICAgIXRoaXMudmlld0NvbnRleHQ/LnZpZXdzXHJcbiAgICAgICAgICAuZmxhdE1hcCgodmlld0RhdGE6IFZpZXdEYXRhKSA9PiB2aWV3RGF0YS51dWlkKVxyXG4gICAgICAgICAgLmluY2x1ZGVzKHZpZXdEYXRhLnV1aWQpXHJcbiAgICApO1xyXG4gICAgaWYgKHZpZXdEYXRhVG9DbG9zZT8ubGVuZ3RoKSB7XHJcbiAgICAgIHZpZXdEYXRhVG9DbG9zZS5tYXAoKHZpZXdEYXRhOiBWaWV3RGF0YSkgPT4ge1xyXG4gICAgICAgIHVwZGF0ZXMucHVzaCh0aGlzLmNsb3NlVmlldyh2aWV3RGF0YSkpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuc2VuZFZpZXdDb250ZXh0VXBkYXRlcyh1cGRhdGVzKTtcclxuXHJcbiAgICB0aGlzLnZpZXdDb250ZXh0Py5saW5rcz8ubWFwKChkYXRhOiBMaW5rKSA9PiB7XHJcbiAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICAgIGxldCB0YXJnZXQgPSAnX2JsYW5rJzsgLy8gZGVmYXVsdFxyXG4gICAgICBzd2l0Y2ggKGRhdGEudGFyZ2V0ID8/IExpbmtUYXJnZXRFbnVtLkJMQU5LKSB7XHJcbiAgICAgICAgY2FzZSAnU0VMRic6XHJcbiAgICAgICAgICB0YXJnZXQgPSAnX3NlbGYnO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnQkxBTksnOlxyXG4gICAgICAgICAgdGFyZ2V0ID0gJ19ibGFuayc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdQQVJFTlQnOlxyXG4gICAgICAgICAgdGFyZ2V0ID0gJ19wYXJlbnQnO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnVE9QJzpcclxuICAgICAgICAgIHRhcmdldCA9ICdfdG9wJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCd0YXJnZXQnLCB0YXJnZXQpO1xyXG4gICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIGRhdGEudXJsKTtcclxuICAgICAgaWYgKGRhdGEuZG93bmxvYWQpIHtcclxuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBkYXRhLmZpbGVuYW1lID8/ICcnKTtcclxuICAgICAgfVxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xyXG4gICAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICAgIGxpbmsucmVtb3ZlKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnZpZXdDb250ZXh0Py5kb3dubG9hZHM/Lm1hcChhc3luYyAoZmlsZTogRG93bmxvYWRlZEZpbGUpOiBQcm9taXNlPHZvaWQ+ID0+IHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBsZXQgYmxvYiA9IGF3YWl0IHRoaXMuZG93bmxvYWRSZXNvdXJjZShmaWxlLnV1aWQhLCBmaWxlLmlkZW50aWZpZXIhKTtcclxuICAgICAgICBsZXQgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuXHJcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywgJ19ibGFuaycpO1xyXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgdXJsKTtcclxuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBmaWxlLmZpbGVuYW1lISk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcclxuICAgICAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICAgICAgbGluay5yZW1vdmUoKTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGRvd25sb2FkaW5nIGZpbGUnKTtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBjbGlwYm9hcmRUZXh0ID0gdGhpcy52aWV3Q29udGV4dD8uY2xpcGJvYXJkRGF0YVxyXG4gICAgICA/Lm1hcCgoY2Q6IENsaXBib2FyZERhdGEpID0+IGNkLnRleHQgfHwgJycpXHJcbiAgICAgIC5qb2luKCcnKTtcclxuICAgIGlmIChjbGlwYm9hcmRUZXh0KSB7XHJcbiAgICAgIGNvbnN0IGNsaXBib2FyZCA9IG5hdmlnYXRvci5jbGlwYm9hcmQ7XHJcbiAgICAgIC8vIGF2YWlsYWJsZSBvbmx5IGluIHNlY3VyZSBjb250ZXh0cy5cclxuICAgICAgaWYgKGNsaXBib2FyZCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjbGlwYm9hcmRcclxuICAgICAgICAgICAgLndyaXRlVGV4dChjbGlwYm9hcmRUZXh0KVxyXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBjb3B5IHRleHQgdG8gY2xpcGJvYXJkJywgZSkpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGFjY2Vzc2luZyBjbGlwYm9hcmQnLCBlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnZpZXdDb250ZXh0SGFzQmVlblN5bmNlZC5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFZpZXdDb250ZXh0VXVpZCh1dWlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGhpcy52aWV3Q29udGV4dFV1aWROYW1lLCB1dWlkKTtcclxuICAgIHRoaXMuc2Vzc2lvbi5hZGRIZWFkZXJQYXJhbSh7XHJcbiAgICAgIGhlYWRlck5hbWU6IHRoaXMudmlld0NvbnRleHRVdWlkSGVhZGVyTmFtZSxcclxuICAgICAgdmFsdWU6IHV1aWQsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRWaWV3Q29udGV4dFV1aWQoKTogc3RyaW5nIHtcclxuICAgIGxldCB2aWV3Q29udGV4dFV1aWQgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMudmlld0NvbnRleHRVdWlkTmFtZSk7XHJcbiAgICBpZiAoIXZpZXdDb250ZXh0VXVpZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZpZXcgY29udGV4dCBpcyBub3QgaW5pdGlhbGl6ZWQhJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmlld0NvbnRleHRVdWlkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhc1ZpZXdDb250ZXh0VXVpZCgpOiBib29sZWFuIHtcclxuICAgIGxldCB2aWV3Q29udGV4dFV1aWQgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMudmlld0NvbnRleHRVdWlkTmFtZSk7XHJcbiAgICByZXR1cm4gdmlld0NvbnRleHRVdWlkICE9PSBudWxsICYmIHZpZXdDb250ZXh0VXVpZCAhPT0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFV1aWRPZlBhZ2UocGFnZU5hbWU6IHN0cmluZywgdXVpZDogc3RyaW5nLCBjb21wb25lbnROYW1lPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMucGFnZU5hbWVQcmVmaXggKyBwYWdlTmFtZSwgdXVpZCk7XHJcbiAgICBpZiAoY29tcG9uZW50TmFtZSkge1xyXG4gICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMuY29tcG9uZW50TmFtZVByZWZpeCArIGNvbXBvbmVudE5hbWUsIHBhZ2VOYW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGVhclV1aWRPZlBhZ2UocGFnZU5hbWU6IHN0cmluZywgY29tcG9uZW50TmFtZT86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLnBhZ2VOYW1lUHJlZml4ICsgcGFnZU5hbWUpO1xyXG4gICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcclxuICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmNvbXBvbmVudE5hbWVQcmVmaXggKyBjb21wb25lbnROYW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRVdWlkT2ZQYWdlKHBhZ2VOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IHV1aWQgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMucGFnZU5hbWVQcmVmaXggKyBwYWdlTmFtZSk7XHJcbiAgICBpZiAoIXV1aWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgdXVpZCBvZiAke3BhZ2VOYW1lfSBpcyBub3QgYXZhaWxhYmxlLmApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHV1aWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UGFnZU5hbWVPZkNvbXBvbmVudChjb21wb25lbnROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IHBhZ2VOYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmNvbXBvbmVudE5hbWVQcmVmaXggKyBjb21wb25lbnROYW1lKTtcclxuICAgIGlmICghcGFnZU5hbWUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgcGFnZU5hbWUgb2YgJHtjb21wb25lbnROYW1lfSBpcyBub3QgYXZhaWxhYmxlLmApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBhZ2VOYW1lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIG1lc3NhZ2UobWVzc2FnZURhdGE6IE1lc3NhZ2VEYXRhLCBtZXNzYWdlUmVzdWx0OiBNZXNzYWdlUmVzdWx0KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXHJcbiAgICAgIGF3YWl0IHRoaXMudmlld1xyXG4gICAgICAgIC5tZXNzYWdlKG1lc3NhZ2VEYXRhLnZpZXdVdWlkID8/ICcnLCBtZXNzYWdlRGF0YS51dWlkLCBtZXNzYWdlUmVzdWx0KVxyXG4gICAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgKTtcclxuICAgIC8vIGluIGZ1dHVyZSB1c2UgdGhpcy5hcGlRdWV1ZVNlcnZpY2UuYWRkVG9RdWV1ZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvckJ5Q29kZShjb2RlOiBzdHJpbmcpOiBQcm9taXNlPFNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvcj4ge1xyXG4gICAgbGV0IGJ1dHRvbkxhYmVsO1xyXG4gICAgbGV0IGRpYWxvZ1RpdGxlO1xyXG4gICAgbGV0IG1lc3NhZ2U7XHJcbiAgICBpZiAodGhpcy50cmFuc2xhdGVTZXJ2aWNlKSB7XHJcbiAgICAgIGJ1dHRvbkxhYmVsID0gYXdhaXQgdGhpcy50cmFuc2xhdGVTZXJ2aWNlXHJcbiAgICAgICAgLmdldChTbWFydFZpZXdDb250ZXh0RXJyb3JEaWFsb2dCdXR0b25MYWJlbClcclxuICAgICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICAgIGRpYWxvZ1RpdGxlID0gYXdhaXQgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldChTbWFydFZpZXdDb250ZXh0RXJyb3JEaWFsb2dUaXRsZSkudG9Qcm9taXNlKCk7XHJcbiAgICAgIG1lc3NhZ2UgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KFNtYXJ0Vmlld0NvbnRleHRFcnJvckRpYWxvZ01lc3NhZ2UpLnRvUHJvbWlzZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYnV0dG9uTGFiZWwgPSAnT2snO1xyXG4gICAgICBkaWFsb2dUaXRsZSA9ICdIaWJhJztcclxuICAgICAgbWVzc2FnZSA9ICdBbiBlcnJvciBoYXMgb2NjdXJlZC4nO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5zbWFydFZpZXdDb250ZXh0QXBpRXJyb3JzKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgY29kZSxcclxuICAgICAgICBtZXNzYWdlLFxyXG4gICAgICAgIGJ1dHRvbkxhYmVsLFxyXG4gICAgICAgIGRpYWxvZ1RpdGxlLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgbGV0IGFwaUVycm9yc1dpdGhDb2RlID0gdGhpcy5zbWFydFZpZXdDb250ZXh0QXBpRXJyb3JzLnZpZXdDb250ZXh0QXBpRXJyb3JzLmZpbHRlcihcclxuICAgICAgKGFwaUVycm9yOiBTbWFydFZpZXdDb250ZXh0QXBpRXJyb3IpID0+IHtcclxuICAgICAgICByZXR1cm4gYXBpRXJyb3IuY29kZSA9PT0gY29kZTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIGlmICghYXBpRXJyb3JzV2l0aENvZGUgfHwgKGFwaUVycm9yc1dpdGhDb2RlICYmICFhcGlFcnJvcnNXaXRoQ29kZS5sZW5ndGgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvciB3aXRoIGNvZGUgJHtjb2RlfSBjb3VsZCBub3QgYmUgZm91bmQuYCk7XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGNvZGUsXHJcbiAgICAgICAgbWVzc2FnZSxcclxuICAgICAgICBidXR0b25MYWJlbCxcclxuICAgICAgICBkaWFsb2dUaXRsZSxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiBhcGlFcnJvcnNXaXRoQ29kZVswXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRWaWV3Q29uc3RyYWludCh1dWlkOiBzdHJpbmcpOiBQcm9taXNlPFZpZXdDb25zdHJhaW50PiB7XHJcbiAgICBsZXQgdmlld0NvbnN0cmFpbnRSZXNwb25zZSA9IGF3YWl0IHRoaXMudmlldy5nZXRWaWV3Q29uc3RyYWludCh1dWlkKS50b1Byb21pc2UoKTtcclxuICAgIGlmICghdmlld0NvbnN0cmFpbnRSZXNwb25zZSlcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZ2V0IFZpZXdDb25zdHJhaW50IHdpdGggdGhlIGdpdmVuIHV1aWQuJyk7XHJcbiAgICByZXR1cm4gdmlld0NvbnN0cmFpbnRSZXNwb25zZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzaG93UHVibGlzaGVkVmlldyhjaGFubmVsOiBzdHJpbmcsIHV1aWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgdGhpcy5zZXNzaW9uLmluaXRpYWxpemUoKTtcclxuICAgIC8vIFRPRE8gaW5pdCB2aWV3IGNvbnRleHQgYXV0b21hdGljYWxseVxyXG4gICAgLy8gYXdhaXQgdGhpcy5pbml0aWFsaXplKCk7XHJcblxyXG4gICAgdGhpcy5pc09wZW5pbmdTbWFydExpbmsgPSB0cnVlO1xyXG4gICAgdGhpcy5vcGVuU21hcnRMaW5rLm5leHQoKTtcclxuICAgIGF3YWl0IHRoaXMub3BlblNtYXJ0TGluay50b1Byb21pc2UoKTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLnZpZXcuc2hvd1B1Ymxpc2hlZFZpZXcoY2hhbm5lbCwgdXVpZCkudG9Qcm9taXNlKCk7XHJcbiAgICBhd2FpdCB0aGlzLmdldEFuZFN5bmNWaWV3Q29udGV4dCgpO1xyXG4gICAgdGhpcy5pc09wZW5pbmdTbWFydExpbmsgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBkb3dubG9hZFJlc291cmNlKHV1aWQ6IHN0cmluZywgaXRlbTogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLnZpZXcuZG93bmxvYWRJdGVtKHV1aWQsIGl0ZW0pLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHBlcmZvcm1BY3Rpb24odXVpZDogc3RyaW5nLCB1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX3BlcmZvcm1BY3Rpb24oe1xyXG4gICAgICB1dWlkLFxyXG4gICAgICB1aUFjdGlvblJlcXVlc3QsXHJcbiAgICB9KTtcclxuICAgIC8vIGNvbnN0IGlzQ29tcGxldGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIC8vIHRoaXMuYXBpUXVldWVTZXJ2aWNlLmFkZFRvUXVldWUoe1xyXG4gICAgLy8gICBjYWxsYmFjazogdGhpcy5fcGVyZm9ybUFjdGlvbi5iaW5kKHRoaXMpLFxyXG4gICAgLy8gICBjb25maWc6IHtcclxuICAgIC8vICAgICB1dWlkLFxyXG4gICAgLy8gICAgIHVpQWN0aW9uUmVxdWVzdCxcclxuICAgIC8vICAgfSxcclxuICAgIC8vICAgaXNDb21wbGV0ZWQsXHJcbiAgICAvLyB9KTtcclxuICAgIC8vIHJldHVybiBhd2FpdCBpc0NvbXBsZXRlZC50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBwZXJmb3JtV2lkZ2V0QWN0aW9uKFxyXG4gICAgdXVpZDogc3RyaW5nLFxyXG4gICAgd2lkZ2V0SWQ6IHN0cmluZyxcclxuICAgIG5vZGVJZDogc3RyaW5nLFxyXG4gICAgdWlBY3Rpb25SZXF1ZXN0OiBVaUFjdGlvblJlcXVlc3RcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLl9wZXJmb3JtV2lkZ2V0QWN0aW9uKHsgdXVpZCwgd2lkZ2V0SWQsIG5vZGVJZCwgdWlBY3Rpb25SZXF1ZXN0IH0pO1xyXG4gICAgLy8gY29uc3QgaXNDb21wbGV0ZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgLy8gdGhpcy5hcGlRdWV1ZVNlcnZpY2UuYWRkVG9RdWV1ZSh7XHJcbiAgICAvLyAgIGNhbGxiYWNrOiB0aGlzLl9wZXJmb3JtV2lkZ2V0QWN0aW9uLmJpbmQodGhpcyksXHJcbiAgICAvLyAgIGNvbmZpZzoge1xyXG4gICAgLy8gICAgIHV1aWQsXHJcbiAgICAvLyAgICAgd2lkZ2V0SWQsXHJcbiAgICAvLyAgICAgbm9kZUlkLFxyXG4gICAgLy8gICAgIHVpQWN0aW9uUmVxdWVzdCxcclxuICAgIC8vICAgfSxcclxuICAgIC8vICAgaXNDb21wbGV0ZWQsXHJcbiAgICAvLyB9KTtcclxuICAgIC8vIHJldHVybiBhd2FpdCBpc0NvbXBsZXRlZC50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBwZXJmb3JtV2lkZ2V0TWFpbkFjdGlvbihcclxuICAgIHV1aWQ6IHN0cmluZyxcclxuICAgIHdpZGdldElkOiBzdHJpbmcsXHJcbiAgICB1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdFxyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX3BlcmZvcm1XaWRnZXRNYWluQWN0aW9uKHsgdXVpZCwgd2lkZ2V0SWQsIHVpQWN0aW9uUmVxdWVzdCB9KTtcclxuICAgIC8vIGNvbnN0IGlzQ29tcGxldGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIC8vIHRoaXMuYXBpUXVldWVTZXJ2aWNlLmFkZFRvUXVldWUoe1xyXG4gICAgLy8gICBjYWxsYmFjazogdGhpcy5fcGVyZm9ybVdpZGdldE1haW5BY3Rpb24uYmluZCh0aGlzKSxcclxuICAgIC8vICAgY29uZmlnOiB7XHJcbiAgICAvLyAgICAgdXVpZCxcclxuICAgIC8vICAgICB3aWRnZXRJZCxcclxuICAgIC8vICAgICB1aUFjdGlvblJlcXVlc3QsXHJcbiAgICAvLyAgIH0sXHJcbiAgICAvLyAgIGlzQ29tcGxldGVkLFxyXG4gICAgLy8gfSk7XHJcbiAgICAvLyByZXR1cm4gYXdhaXQgaXNDb21wbGV0ZWQudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcGVyZm9ybVVwbG9hZEFjdGlvbihcclxuICAgIHV1aWQ6IHN0cmluZyxcclxuICAgIHVpQWN0aW9uUmVxdWVzdDogVWlBY3Rpb25SZXF1ZXN0LFxyXG4gICAgcGFyYW06ICdpbnB1dCcgfCAnaW5wdXRcIicsXHJcbiAgICBjb250ZW50OiBhbnlcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuX3BlcmZvcm1VcGxvYWRBY3Rpb24oe1xyXG4gICAgICB1dWlkLFxyXG4gICAgICB1aUFjdGlvblJlcXVlc3QsXHJcbiAgICAgIHBhcmFtLFxyXG4gICAgICBjb250ZW50LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcGVyZm9ybVVwbG9hZE11bHRpcGxlQWN0aW9uKFxyXG4gICAgdXVpZDogc3RyaW5nLFxyXG4gICAgdWlBY3Rpb25SZXF1ZXN0OiBVaUFjdGlvblJlcXVlc3QsXHJcbiAgICBwYXJhbTogJ2lucHV0JyB8ICdpbnB1dDInLFxyXG4gICAgY29udGVudDogYW55W11cclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuX3BlcmZvcm1VcGxvYWRNdWx0aXBsZUFjdGlvbih7XHJcbiAgICAgIHV1aWQsXHJcbiAgICAgIHVpQWN0aW9uUmVxdWVzdCxcclxuICAgICAgcGFyYW0sXHJcbiAgICAgIGNvbnRlbnQsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBkYXRhQ2hhbmdlZCh1dWlkOiBzdHJpbmcsIGRhdGFDaGFuZ2U6IERhdGFDaGFuZ2UpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLl9kYXRhQ2hhbmdlZCh7IHV1aWQsIGRhdGFDaGFuZ2UgfSk7XHJcbiAgICAvLyBjb25zdCBpc0NvbXBsZXRlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICAvLyB0aGlzLmFwaVF1ZXVlU2VydmljZS5hZGRUb1F1ZXVlKFxyXG4gICAgLy8gICB7XHJcbiAgICAvLyAgICAgY2FsbGJhY2s6IHRoaXMuX2RhdGFDaGFuZ2VkLmJpbmQodGhpcyksXHJcbiAgICAvLyAgICAgY29uZmlnOiB7XHJcbiAgICAvLyAgICAgICB1dWlkLFxyXG4gICAgLy8gICAgICAgZGF0YUNoYW5nZSxcclxuICAgIC8vICAgICB9LFxyXG4gICAgLy8gICAgIGlzQ29tcGxldGVkLFxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gICB0cnVlXHJcbiAgICAvLyApO1xyXG4gICAgLy8gcmV0dXJuIGF3YWl0IGlzQ29tcGxldGVkLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfcGVyZm9ybUFjdGlvbihjb25maWc6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuaGFuZGxlUGVyZm9ybUFjdGlvblJlc3BvbnNlKFxyXG4gICAgICBhd2FpdCB0aGlzLnZpZXcucGVyZm9ybUFjdGlvbihjb25maWcudXVpZCwgY29uZmlnLnVpQWN0aW9uUmVxdWVzdCkudG9Qcm9taXNlKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9wZXJmb3JtV2lkZ2V0QWN0aW9uKGNvbmZpZzogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXHJcbiAgICAgIGF3YWl0IHRoaXMudmlld1xyXG4gICAgICAgIC5wZXJmb3JtV2lkZ2V0QWN0aW9uKGNvbmZpZy51dWlkLCBjb25maWcud2lkZ2V0SWQsIGNvbmZpZy5ub2RlSWQsIGNvbmZpZy51aUFjdGlvblJlcXVlc3QpXHJcbiAgICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfcGVyZm9ybVdpZGdldE1haW5BY3Rpb24oY29uZmlnOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZShcclxuICAgICAgYXdhaXQgdGhpcy52aWV3XHJcbiAgICAgICAgLnBlcmZvcm1XaWRnZXRNYWluQWN0aW9uKGNvbmZpZy51dWlkLCBjb25maWcud2lkZ2V0SWQsIGNvbmZpZy51aUFjdGlvblJlcXVlc3QpXHJcbiAgICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfcGVyZm9ybVVwbG9hZEFjdGlvbihjb25maWc6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuaGFuZGxlUGVyZm9ybUFjdGlvblJlc3BvbnNlKFxyXG4gICAgICBhd2FpdCB0aGlzLnZpZXdcclxuICAgICAgICAudXBsb2FkQWN0aW9uKFxyXG4gICAgICAgICAgY29uZmlnLnV1aWQsXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShjb25maWcudWlBY3Rpb25SZXF1ZXN0KSxcclxuICAgICAgICAgIGNvbmZpZy5wYXJhbSxcclxuICAgICAgICAgIGNvbmZpZy5jb250ZW50XHJcbiAgICAgICAgKVxyXG4gICAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBhc3luYyBfcGVyZm9ybVVwbG9hZE11bHRpcGxlQWN0aW9uKGNvbmZpZzogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXHJcbiAgICAgIGF3YWl0IHRoaXMudmlld1xyXG4gICAgICAgIC51cGxvYWRNdWx0aXBsZUFjdGlvbihcclxuICAgICAgICAgIGNvbmZpZy51dWlkLFxyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoY29uZmlnLnVpQWN0aW9uUmVxdWVzdCksXHJcbiAgICAgICAgICBjb25maWcucGFyYW0sXHJcbiAgICAgICAgICBjb25maWcuY29udGVudFxyXG4gICAgICAgIClcclxuICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9kYXRhQ2hhbmdlZChjb25maWc6IGFueSk6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXHJcbiAgICAgIGF3YWl0IHRoaXMudmlldy5kYXRhQ2hhbmdlZChjb25maWcudXVpZCwgY29uZmlnLmRhdGFDaGFuZ2UpLnRvUHJvbWlzZSgpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZShcclxuICAgIHZpZXdDb250ZXh0Q2hhbmdlOiBWaWV3Q29udGV4dENoYW5nZSB8IHVuZGVmaW5lZFxyXG4gICk6IFByb21pc2U8YW55PiB7XHJcbiAgICB0aGlzLnZpZXdDb250ZXh0ID0gdmlld0NvbnRleHRDaGFuZ2U/LnZpZXdDb250ZXh0O1xyXG4gICAgdGhpcy5zeW5jVmlldygpO1xyXG5cclxuICAgIGlmICh2aWV3Q29udGV4dENoYW5nZT8uY2hhbmdlcykge1xyXG4gICAgICB0aGlzLmhhbmRsZUNoYW5nZXModmlld0NvbnRleHRDaGFuZ2UuY2hhbmdlcyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmlld0NvbnRleHRDaGFuZ2U/LnJlc3VsdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlQ2hhbmdlcyhjaGFuZ2VzOiBBcnJheTxDb21wb25lbnRNb2RlbENoYW5nZT4pOiB2b2lkIHtcclxuICAgIGNoYW5nZXMuZm9yRWFjaCgoY29tcG9uZW50TW9kZWxDaGFuZ2U6IENvbXBvbmVudE1vZGVsQ2hhbmdlKSA9PiB7XHJcbiAgICAgIGxldCBkZXRlY3RDaGFuZ2U6IFNtYXJ0U3ViamVjdDxDb21wb25lbnRNb2RlbENoYW5nZT4gfCB1bmRlZmluZWQgPSB0aGlzLnNtYXJ0QXBpQ2xpZW50cy5nZXQoXHJcbiAgICAgICAgY29tcG9uZW50TW9kZWxDaGFuZ2UudXVpZFxyXG4gICAgICApO1xyXG4gICAgICBpZiAoZGV0ZWN0Q2hhbmdlKSB7XHJcbiAgICAgICAgZGV0ZWN0Q2hhbmdlLm5leHQoY29tcG9uZW50TW9kZWxDaGFuZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBsb2FkKHV1aWQ6IHN0cmluZyk6IFByb21pc2U8Q29tcG9uZW50TW9kZWwgfCB1bmRlZmluZWQ+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLnZpZXcuZ2V0Q29tcG9uZW50TW9kZWwodXVpZCkudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgbG9hZDIodXVpZDogc3RyaW5nKTogUHJvbWlzZTxWaWV3Q29udGV4dENoYW5nZSB8IHVuZGVmaW5lZD4ge1xyXG4gICAgbGV0IGNoYW5nZSA9IGF3YWl0IHRoaXMudmlldy5nZXRDb21wb25lbnRNb2RlbDIodXVpZCkudG9Qcm9taXNlKCk7XHJcbiAgICB0aGlzLmhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZShjaGFuZ2UpO1xyXG4gICAgcmV0dXJuIGNoYW5nZTtcclxuICB9XHJcblxyXG4gIGdldEN1cnJlbnRWaWV3Q29udGV4dCgpOiBWaWV3Q29udGV4dERhdGEgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMudmlld0NvbnRleHQ7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgSVNfQVNZTkNfUEFSQU1fTkFNRSA9ICdpc0FzeW5jJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXBpUXVldWVDYWxsIHtcclxuICBjYWxsYmFjazogKGNvbmZpZzogYW55KSA9PiBQcm9taXNlPGFueT47XHJcbiAgY29uZmlnOiBhbnk7XHJcbiAgaXNDb21wbGV0ZWQ6IFN1YmplY3Q8dm9pZD47XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBcGlRdWV1ZVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgX2Rlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgcHJpdmF0ZSBxdWV1ZTogQXBpUXVldWVDYWxsW10gPSBbXTtcclxuICBwcml2YXRlIGlzUHJvY2Vzc2luZyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgcXVldWVTdWJqZWN0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5xdWV1ZVN1YmplY3QucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5wcm9jZXNzUXVldWUoKSk7XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIGFkZFRvUXVldWUoY2FsbDogQXBpUXVldWVDYWxsLCBwcmlvcml0eTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBpZiAocHJpb3JpdHkpIHtcclxuICAgICAgdGhpcy5xdWV1ZS51bnNoaWZ0KGNhbGwpOyAvLyBBZGQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcXVldWUgaWYgaXQgaGFzIGhpZ2hlciBwcmlvcml0eVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5xdWV1ZS5wdXNoKGNhbGwpOyAvLyBBZGQgYXQgdGhlIGVuZCBvZiB0aGUgcXVldWUgaWYgaXQgaGFzIGxvd2VyIHByaW9yaXR5XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuaXNQcm9jZXNzaW5nKSB7XHJcbiAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBwcm9jZXNzUXVldWUoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5pc1Byb2Nlc3NpbmcgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGFwaVF1ZXVlQ2FsbCA9IHRoaXMucXVldWUuc2hpZnQoKTtcclxuICAgIGlmIChhcGlRdWV1ZUNhbGwpIHtcclxuICAgICAgYXdhaXQgYXBpUXVldWVDYWxsLmNhbGxiYWNrKGFwaVF1ZXVlQ2FsbC5jb25maWcpO1xyXG4gICAgICBhcGlRdWV1ZUNhbGwuaXNDb21wbGV0ZWQuY29tcGxldGUoKTtcclxuICAgICAgdGhpcy5xdWV1ZVN1YmplY3QubmV4dCgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=