@alfresco/aca-content 5.1.1 → 5.2.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 (396) hide show
  1. package/assets/app.extensions.json +9 -0
  2. package/assets/i18n/ar.json +600 -599
  3. package/assets/i18n/cs.json +600 -599
  4. package/assets/i18n/da.json +600 -599
  5. package/assets/i18n/de.json +600 -599
  6. package/assets/i18n/en.json +40 -1
  7. package/assets/i18n/es.json +600 -599
  8. package/assets/i18n/fi.json +600 -599
  9. package/assets/i18n/fr.json +600 -599
  10. package/assets/i18n/it.json +600 -599
  11. package/assets/i18n/ja.json +600 -599
  12. package/assets/i18n/nb.json +600 -599
  13. package/assets/i18n/nl.json +600 -599
  14. package/assets/i18n/pl.json +600 -599
  15. package/assets/i18n/pt-BR.json +600 -599
  16. package/assets/i18n/ru.json +600 -599
  17. package/assets/i18n/sv.json +600 -599
  18. package/assets/i18n/zh-CN.json +600 -599
  19. package/esm2022/about/about.component.mjs +70 -0
  20. package/esm2022/about/aca-about.module.mjs +47 -0
  21. package/esm2022/folder-rules/folder-rules.module.mjs +116 -0
  22. package/esm2022/folder-rules/manage-rules/manage-rules.smart-component.mjs +280 -0
  23. package/esm2022/folder-rules/rule-details/actions/rule-action-list.ui-component.mjs +117 -0
  24. package/esm2022/folder-rules/rule-details/actions/rule-action.ui-component.mjs +359 -0
  25. package/esm2022/folder-rules/rule-details/conditions/rule-composite-condition.ui-component.mjs +171 -0
  26. package/esm2022/folder-rules/rule-details/conditions/rule-simple-condition.ui-component.mjs +237 -0
  27. package/esm2022/folder-rules/rule-details/edit-rule-dialog.ui-component.mjs +80 -0
  28. package/esm2022/folder-rules/rule-details/options/rule-options.ui-component.mjs +129 -0
  29. package/esm2022/folder-rules/rule-details/rule-details.ui-component.mjs +192 -0
  30. package/esm2022/folder-rules/rule-details/triggers/rule-triggers.ui-component.mjs +87 -0
  31. package/esm2022/folder-rules/rule-details/validators/rule-actions.validator.mjs +36 -0
  32. package/esm2022/folder-rules/rule-list/rule-list/rule-list.ui-component.mjs +166 -0
  33. package/esm2022/folder-rules/rule-list/rule-list-grouping/rule-list-grouping.ui-component.mjs +80 -0
  34. package/esm2022/folder-rules/rule-list/rule-list-item/rule-list-item.ui-component.mjs +59 -0
  35. package/esm2022/folder-rules/rule-set-picker/rule-set-picker.smart-component.mjs +125 -0
  36. package/esm2022/folder-rules/services/actions.service.mjs +117 -0
  37. package/esm2022/folder-rules/services/folder-rule-sets.service.mjs +230 -0
  38. package/esm2022/folder-rules/services/folder-rules.service.mjs +195 -0
  39. package/esm2022/lib/aca-content.module.mjs +303 -0
  40. package/esm2022/lib/aca-content.routes.mjs +369 -0
  41. package/esm2022/lib/components/bulk-actions-dropdown/bulk-actions-dropdown.component.mjs +82 -0
  42. package/{esm2020 → esm2022}/lib/components/common/language-picker/language-picker.component.mjs +9 -8
  43. package/esm2022/lib/components/common/location-link/location-link.component.mjs +182 -0
  44. package/{esm2020 → esm2022}/lib/components/common/logout/logout.component.mjs +8 -6
  45. package/esm2022/lib/components/common/toggle-shared/toggle-shared.component.mjs +81 -0
  46. package/esm2022/lib/components/common/user-info/user-info.component.mjs +46 -0
  47. package/esm2022/lib/components/context-menu/base-context-menu.directive.mjs +77 -0
  48. package/esm2022/lib/components/context-menu/context-menu-item.component.mjs +65 -0
  49. package/esm2022/lib/components/context-menu/context-menu-outside-event.directive.mjs +62 -0
  50. package/esm2022/lib/components/context-menu/context-menu-overlay.mjs +33 -0
  51. package/esm2022/lib/components/context-menu/context-menu.component.mjs +84 -0
  52. package/esm2022/lib/components/context-menu/context-menu.service.mjs +127 -0
  53. package/esm2022/lib/components/context-menu/custom-context-menu-actions.token.mjs +26 -0
  54. package/esm2022/lib/components/context-menu/custom-context-menu.component.mjs +79 -0
  55. package/esm2022/lib/components/details/details.component.mjs +154 -0
  56. package/esm2022/lib/components/dl-custom-components/datatable-cell-badges/datatable-cell-badges.component.mjs +75 -0
  57. package/esm2022/lib/components/dl-custom-components/name-column/name-column.component.mjs +106 -0
  58. package/esm2022/lib/components/dl-custom-components/tags-column/tags-column.component.mjs +52 -0
  59. package/esm2022/lib/components/dl-custom-components/thumbnail-column/thumbnail-column.component.mjs +77 -0
  60. package/esm2022/lib/components/favorite-libraries/favorite-libraries.component.mjs +126 -0
  61. package/esm2022/lib/components/favorites/favorites.component.mjs +105 -0
  62. package/esm2022/lib/components/files/files.component.mjs +336 -0
  63. package/esm2022/lib/components/home/home.component.mjs +46 -0
  64. package/esm2022/lib/components/info-drawer/comments-tab/comments-tab.component.mjs +62 -0
  65. package/esm2022/lib/components/info-drawer/info.drawer.module.mjs +74 -0
  66. package/esm2022/lib/components/info-drawer/library-metadata-tab/library-metadata-form.component.mjs +213 -0
  67. package/esm2022/lib/components/info-drawer/library-metadata-tab/library-metadata-tab.component.mjs +47 -0
  68. package/esm2022/lib/components/info-drawer/metadata-tab/metadata-tab.component.mjs +145 -0
  69. package/esm2022/lib/components/info-drawer/versions-tab/versions-tab.component.mjs +107 -0
  70. package/esm2022/lib/components/knowledge-retrieval/search-ai/agents-button/agents-button.component.mjs +135 -0
  71. package/esm2022/lib/components/knowledge-retrieval/search-ai/search-ai-input/search-ai-input.component.mjs +181 -0
  72. package/esm2022/lib/components/knowledge-retrieval/search-ai/search-ai-input-container/search-ai-input-container.component.mjs +77 -0
  73. package/esm2022/lib/components/knowledge-retrieval/search-ai/search-ai-results/search-ai-results.component.mjs +210 -0
  74. package/esm2022/lib/components/libraries/libraries.component.mjs +81 -0
  75. package/esm2022/lib/components/recent-files/recent-files.component.mjs +80 -0
  76. package/esm2022/lib/components/search/search-action-menu/search-action-menu.component.mjs +66 -0
  77. package/esm2022/lib/components/search/search-input/search-input.component.mjs +297 -0
  78. package/esm2022/lib/components/search/search-input-control/search-input-control.component.mjs +94 -0
  79. package/esm2022/lib/components/search/search-libraries-results/search-libraries-query-builder.service.mjs +93 -0
  80. package/esm2022/lib/components/search/search-libraries-results/search-libraries-results.component.mjs +155 -0
  81. package/esm2022/lib/components/search/search-navigation.service.mjs +62 -0
  82. package/esm2022/lib/components/search/search-results/search-results.component.mjs +279 -0
  83. package/esm2022/lib/components/search/search-results-row/search-results-row.component.mjs +149 -0
  84. package/esm2022/lib/components/search/search-save/dialog/delete/saved-search-delete-dialog.component.mjs +82 -0
  85. package/esm2022/lib/components/search/search-save/dialog/edit/saved-search-edit-dialog.component.mjs +116 -0
  86. package/esm2022/lib/components/search/search-save/dialog/save-search-dialog.component.mjs +125 -0
  87. package/esm2022/lib/components/search/search-save/dialog/saved-search-form.interface.mjs +25 -0
  88. package/esm2022/lib/components/search/search-save/dialog/unique-search-name-validator.mjs +45 -0
  89. package/esm2022/lib/components/search/search-save/directive/save-search.directive.mjs +64 -0
  90. package/esm2022/lib/components/search/search-save/list/saved-searches-list-ui.service.mjs +51 -0
  91. package/esm2022/lib/components/search/search-save/list/smart-list/saved-searches-list-schema.mjs +44 -0
  92. package/esm2022/lib/components/search/search-save/list/smart-list/saved-searches-smart-list.component.mjs +50 -0
  93. package/esm2022/lib/components/search/search-save/list/ui-list/saved-searches-list.ui-component.mjs +153 -0
  94. package/esm2022/lib/components/search/search-save/sidenav/save-search-sidenav.component.mjs +94 -0
  95. package/esm2022/lib/components/shared-files/shared-files.component.mjs +85 -0
  96. package/esm2022/lib/components/shared-link-view/shared-link-view.component.mjs +89 -0
  97. package/esm2022/lib/components/sidenav/components/button-menu.component.mjs +66 -0
  98. package/esm2022/lib/components/sidenav/components/expand-menu.component.mjs +73 -0
  99. package/esm2022/lib/components/sidenav/components/sidenav-header.component.mjs +65 -0
  100. package/esm2022/lib/components/sidenav/directives/action.directive.mjs +86 -0
  101. package/esm2022/lib/components/sidenav/directives/active-link.directive.mjs +100 -0
  102. package/esm2022/lib/components/sidenav/directives/expansion-panel.directive.mjs +107 -0
  103. package/esm2022/lib/components/sidenav/directives/menu-panel.directive.mjs +103 -0
  104. package/esm2022/lib/components/sidenav/sidenav.component.mjs +101 -0
  105. package/esm2022/lib/components/sidenav/user-menu/user-menu.component.mjs +57 -0
  106. package/esm2022/lib/components/toolbar/toggle-edit-offline/toggle-edit-offline.component.mjs +143 -0
  107. package/esm2022/lib/components/toolbar/toggle-favorite/toggle-favorite.component.mjs +91 -0
  108. package/esm2022/lib/components/toolbar/toggle-favorite-library/toggle-favorite-library.component.mjs +112 -0
  109. package/esm2022/lib/components/toolbar/toggle-info-drawer/toggle-info-drawer.component.mjs +77 -0
  110. package/esm2022/lib/components/toolbar/toggle-join-library/toggle-join-library-button.component.mjs +107 -0
  111. package/{esm2020 → esm2022}/lib/components/toolbar/toggle-join-library/toggle-join-library-menu.component.mjs +7 -6
  112. package/esm2022/lib/components/toolbar/view-node/view-node.component.mjs +128 -0
  113. package/esm2022/lib/components/trashcan/trashcan.component.mjs +66 -0
  114. package/esm2022/lib/components/upload-files-dialog/upload-files-dialog.component.mjs +55 -0
  115. package/esm2022/lib/components/view-profile/view-profile.component.mjs +200 -0
  116. package/esm2022/lib/dialogs/node-template/create-from-template.dialog.mjs +127 -0
  117. package/esm2022/lib/directives/document-list.directive.mjs +207 -0
  118. package/esm2022/lib/extensions/core.extensions.module.mjs +56 -0
  119. package/esm2022/lib/services/content-management.service.mjs +892 -0
  120. package/esm2022/lib/services/content-url.service.mjs +74 -0
  121. package/esm2022/lib/services/modal-ai.service.mjs +65 -0
  122. package/esm2022/lib/services/node-actions.service.mjs +609 -0
  123. package/esm2022/lib/services/node-template.service.mjs +145 -0
  124. package/esm2022/lib/services/search-ai-navigation.service.mjs +63 -0
  125. package/esm2022/lib/store/app-store.module.mjs +101 -0
  126. package/esm2022/lib/store/effects/app.effects.mjs +46 -0
  127. package/esm2022/lib/store/effects/contextmenu.effects.mjs +65 -0
  128. package/esm2022/lib/store/effects/download.effects.mjs +153 -0
  129. package/esm2022/lib/store/effects/favorite.effects.mjs +72 -0
  130. package/esm2022/lib/store/effects/library.effects.mjs +108 -0
  131. package/esm2022/lib/store/effects/node.effects.mjs +318 -0
  132. package/esm2022/lib/store/effects/search-ai.effects.mjs +54 -0
  133. package/esm2022/lib/store/effects/search.effects.mjs +52 -0
  134. package/esm2022/lib/store/effects/template.effects.mjs +116 -0
  135. package/esm2022/lib/store/effects/upload.effects.mjs +166 -0
  136. package/esm2022/lib/store/effects/viewer.effects.mjs +169 -0
  137. package/esm2022/lib/utils/aca-search-utils.mjs +129 -0
  138. package/esm2022/ms-office/actions/aos.actions.mjs +32 -0
  139. package/esm2022/ms-office/aos-extension.module.mjs +53 -0
  140. package/esm2022/ms-office/aos-extension.service.mjs +136 -0
  141. package/esm2022/ms-office/effects/aos.effects.mjs +45 -0
  142. package/esm2022/public-api.mjs +33 -0
  143. package/esm2022/viewer/lib/components/preview/preview.component.mjs +246 -0
  144. package/esm2022/viewer/lib/components/viewer/viewer.component.mjs +261 -0
  145. package/esm2022/viewer/lib/services/viewer.service.mjs +229 -0
  146. package/esm2022/viewer/lib/viewer.module.mjs +53 -0
  147. package/{fesm2015 → fesm2022}/alfresco-aca-content-about.mjs +17 -19
  148. package/fesm2022/alfresco-aca-content-about.mjs.map +1 -0
  149. package/{fesm2020 → fesm2022}/alfresco-aca-content-folder-rules.mjs +357 -316
  150. package/fesm2022/alfresco-aca-content-folder-rules.mjs.map +1 -0
  151. package/{fesm2020 → fesm2022}/alfresco-aca-content-ms-office.mjs +28 -26
  152. package/fesm2022/alfresco-aca-content-ms-office.mjs.map +1 -0
  153. package/{fesm2020 → fesm2022}/alfresco-aca-content-viewer.mjs +95 -64
  154. package/fesm2022/alfresco-aca-content-viewer.mjs.map +1 -0
  155. package/fesm2022/alfresco-aca-content.mjs +11091 -0
  156. package/fesm2022/alfresco-aca-content.mjs.map +1 -0
  157. package/folder-rules/rule-details/actions/rule-action-list.ui-component.d.ts +1 -1
  158. package/folder-rules/rule-details/actions/rule-action.ui-component.d.ts +1 -1
  159. package/folder-rules/rule-details/conditions/rule-composite-condition.ui-component.d.ts +1 -1
  160. package/folder-rules/rule-details/conditions/rule-simple-condition.ui-component.d.ts +1 -1
  161. package/folder-rules/rule-details/options/rule-options.ui-component.d.ts +1 -1
  162. package/folder-rules/rule-details/rule-details.ui-component.d.ts +1 -1
  163. package/folder-rules/rule-list/rule-list/rule-list.ui-component.d.ts +1 -1
  164. package/folder-rules/rule-list/rule-list-grouping/rule-list-grouping.ui-component.d.ts +1 -1
  165. package/folder-rules/rule-list/rule-list-item/rule-list-item.ui-component.d.ts +1 -1
  166. package/folder-rules/services/folder-rule-sets.service.d.ts +4 -4
  167. package/folder-rules/services/folder-rules.service.d.ts +1 -1
  168. package/lib/components/bulk-actions-dropdown/bulk-actions-dropdown.component.d.ts +5 -10
  169. package/lib/components/common/location-link/location-link.component.d.ts +1 -1
  170. package/lib/components/common/toggle-shared/toggle-shared.component.d.ts +1 -1
  171. package/lib/components/context-menu/base-context-menu.directive.d.ts +20 -0
  172. package/lib/components/context-menu/context-menu-item.component.d.ts +1 -1
  173. package/lib/components/context-menu/context-menu-outside-event.directive.d.ts +1 -1
  174. package/lib/components/context-menu/context-menu.component.d.ts +4 -15
  175. package/lib/components/context-menu/context-menu.service.d.ts +4 -1
  176. package/lib/components/{knowledge-retrieval/search-ai/search-ai-utils.d.ts → context-menu/custom-context-menu-actions.token.d.ts} +2 -2
  177. package/lib/components/context-menu/custom-context-menu.component.d.ts +36 -0
  178. package/lib/components/details/details.component.d.ts +1 -1
  179. package/lib/components/dl-custom-components/datatable-cell-badges/datatable-cell-badges.component.d.ts +1 -1
  180. package/lib/components/dl-custom-components/tags-column/tags-column.component.d.ts +1 -1
  181. package/lib/components/dl-custom-components/thumbnail-column/thumbnail-column.component.d.ts +1 -1
  182. package/lib/components/info-drawer/comments-tab/comments-tab.component.d.ts +1 -1
  183. package/lib/components/info-drawer/library-metadata-tab/library-metadata-form.component.d.ts +1 -1
  184. package/lib/components/info-drawer/library-metadata-tab/library-metadata-tab.component.d.ts +1 -1
  185. package/lib/components/info-drawer/metadata-tab/metadata-tab.component.d.ts +1 -1
  186. package/lib/components/info-drawer/versions-tab/versions-tab.component.d.ts +1 -1
  187. package/lib/components/knowledge-retrieval/search-ai/agents-button/agents-button.component.d.ts +1 -2
  188. package/lib/components/knowledge-retrieval/search-ai/search-ai-input/search-ai-input.component.d.ts +4 -5
  189. package/lib/components/knowledge-retrieval/search-ai/search-ai-input-container/search-ai-input-container.component.d.ts +8 -8
  190. package/lib/components/knowledge-retrieval/search-ai/search-ai-results/search-ai-results.component.d.ts +2 -3
  191. package/lib/components/search/search-input/search-input.component.d.ts +12 -14
  192. package/lib/components/search/search-input-control/search-input-control.component.d.ts +1 -1
  193. package/lib/components/search/search-libraries-results/search-libraries-results.component.d.ts +0 -1
  194. package/lib/components/search/search-results/search-results.component.d.ts +15 -9
  195. package/lib/components/search/search-results-row/search-results-row.component.d.ts +1 -1
  196. package/lib/components/search/search-save/dialog/delete/saved-search-delete-dialog.component.d.ts +16 -0
  197. package/lib/components/search/search-save/dialog/edit/saved-search-edit-dialog.component.d.ts +22 -0
  198. package/lib/components/search/search-save/dialog/save-search-dialog.component.d.ts +23 -0
  199. package/lib/components/search/search-save/dialog/saved-search-form.interface.d.ts +28 -0
  200. package/lib/components/search/search-save/dialog/unique-search-name-validator.d.ts +34 -0
  201. package/lib/components/search/search-save/directive/save-search.directive.d.ts +13 -0
  202. package/lib/components/search/search-save/list/saved-searches-list-ui.service.d.ts +9 -0
  203. package/lib/components/search/search-save/list/smart-list/saved-searches-list-schema.d.ts +33 -0
  204. package/lib/components/search/search-save/list/smart-list/saved-searches-smart-list.component.d.ts +13 -0
  205. package/lib/components/search/search-save/list/ui-list/saved-searches-list.ui-component.d.ts +66 -0
  206. package/lib/components/search/search-save/sidenav/save-search-sidenav.component.d.ts +44 -0
  207. package/lib/components/sidenav/components/button-menu.component.d.ts +1 -1
  208. package/lib/components/sidenav/components/expand-menu.component.d.ts +3 -2
  209. package/lib/components/sidenav/directives/action.directive.d.ts +28 -1
  210. package/lib/components/sidenav/directives/active-link.directive.d.ts +2 -2
  211. package/lib/components/sidenav/directives/expansion-panel.directive.d.ts +1 -1
  212. package/lib/components/sidenav/directives/menu-panel.directive.d.ts +1 -1
  213. package/lib/components/sidenav/sidenav.component.d.ts +4 -3
  214. package/lib/components/sidenav/user-menu/user-menu.component.d.ts +1 -1
  215. package/lib/components/toolbar/toggle-favorite/toggle-favorite.component.d.ts +1 -1
  216. package/lib/components/toolbar/view-node/view-node.component.d.ts +1 -1
  217. package/lib/services/search-ai-navigation.service.d.ts +4 -2
  218. package/lib/store/effects/app.effects.d.ts +2 -3
  219. package/lib/store/effects/contextmenu.effects.d.ts +3 -3
  220. package/lib/store/effects/download.effects.d.ts +0 -30
  221. package/lib/store/effects/favorite.effects.d.ts +0 -28
  222. package/lib/store/effects/library.effects.d.ts +2 -7
  223. package/lib/store/effects/node.effects.d.ts +7 -38
  224. package/lib/store/effects/search-ai.effects.d.ts +0 -4
  225. package/lib/store/effects/search.effects.d.ts +3 -30
  226. package/lib/store/effects/template.effects.d.ts +5 -7
  227. package/lib/store/effects/upload.effects.d.ts +8 -32
  228. package/lib/store/effects/viewer.effects.d.ts +0 -29
  229. package/lib/utils/aca-search-utils.d.ts +67 -0
  230. package/ms-office/effects/aos.effects.d.ts +0 -3
  231. package/package.json +21 -35
  232. package/public-api.d.ts +1 -0
  233. package/ui/overrides/adf-pagination.theme.scss +0 -4
  234. package/ui/theme.scss +9 -4
  235. package/assets/images/agent-avatar-blue.png +0 -0
  236. package/assets/images/agent-avatar-gold.png +0 -0
  237. package/assets/images/agent-avatar-pink.png +0 -0
  238. package/esm2020/about/about.component.mjs +0 -71
  239. package/esm2020/about/aca-about.module.mjs +0 -46
  240. package/esm2020/folder-rules/folder-rules.module.mjs +0 -115
  241. package/esm2020/folder-rules/manage-rules/manage-rules.smart-component.mjs +0 -261
  242. package/esm2020/folder-rules/rule-details/actions/rule-action-list.ui-component.mjs +0 -117
  243. package/esm2020/folder-rules/rule-details/actions/rule-action.ui-component.mjs +0 -351
  244. package/esm2020/folder-rules/rule-details/conditions/rule-composite-condition.ui-component.mjs +0 -172
  245. package/esm2020/folder-rules/rule-details/conditions/rule-simple-condition.ui-component.mjs +0 -234
  246. package/esm2020/folder-rules/rule-details/edit-rule-dialog.ui-component.mjs +0 -74
  247. package/esm2020/folder-rules/rule-details/options/rule-options.ui-component.mjs +0 -129
  248. package/esm2020/folder-rules/rule-details/rule-details.ui-component.mjs +0 -185
  249. package/esm2020/folder-rules/rule-details/triggers/rule-triggers.ui-component.mjs +0 -88
  250. package/esm2020/folder-rules/rule-details/validators/rule-actions.validator.mjs +0 -37
  251. package/esm2020/folder-rules/rule-list/rule-list/rule-list.ui-component.mjs +0 -164
  252. package/esm2020/folder-rules/rule-list/rule-list-grouping/rule-list-grouping.ui-component.mjs +0 -81
  253. package/esm2020/folder-rules/rule-list/rule-list-item/rule-list-item.ui-component.mjs +0 -58
  254. package/esm2020/folder-rules/rule-set-picker/rule-set-picker.smart-component.mjs +0 -120
  255. package/esm2020/folder-rules/services/actions.service.mjs +0 -114
  256. package/esm2020/folder-rules/services/folder-rule-sets.service.mjs +0 -225
  257. package/esm2020/folder-rules/services/folder-rules.service.mjs +0 -193
  258. package/esm2020/lib/aca-content.module.mjs +0 -299
  259. package/esm2020/lib/aca-content.routes.mjs +0 -359
  260. package/esm2020/lib/components/bulk-actions-dropdown/bulk-actions-dropdown.component.mjs +0 -83
  261. package/esm2020/lib/components/common/location-link/location-link.component.mjs +0 -180
  262. package/esm2020/lib/components/common/toggle-shared/toggle-shared.component.mjs +0 -76
  263. package/esm2020/lib/components/common/user-info/user-info.component.mjs +0 -47
  264. package/esm2020/lib/components/context-menu/context-menu-item.component.mjs +0 -62
  265. package/esm2020/lib/components/context-menu/context-menu-outside-event.directive.mjs +0 -63
  266. package/esm2020/lib/components/context-menu/context-menu-overlay.mjs +0 -32
  267. package/esm2020/lib/components/context-menu/context-menu.component.mjs +0 -114
  268. package/esm2020/lib/components/context-menu/context-menu.service.mjs +0 -99
  269. package/esm2020/lib/components/details/details.component.mjs +0 -147
  270. package/esm2020/lib/components/dl-custom-components/datatable-cell-badges/datatable-cell-badges.component.mjs +0 -71
  271. package/esm2020/lib/components/dl-custom-components/name-column/name-column.component.mjs +0 -101
  272. package/esm2020/lib/components/dl-custom-components/tags-column/tags-column.component.mjs +0 -48
  273. package/esm2020/lib/components/dl-custom-components/thumbnail-column/thumbnail-column.component.mjs +0 -75
  274. package/esm2020/lib/components/favorite-libraries/favorite-libraries.component.mjs +0 -120
  275. package/esm2020/lib/components/favorites/favorites.component.mjs +0 -103
  276. package/esm2020/lib/components/files/files.component.mjs +0 -330
  277. package/esm2020/lib/components/home/home.component.mjs +0 -47
  278. package/esm2020/lib/components/info-drawer/comments-tab/comments-tab.component.mjs +0 -59
  279. package/esm2020/lib/components/info-drawer/info.drawer.module.mjs +0 -73
  280. package/esm2020/lib/components/info-drawer/library-metadata-tab/library-metadata-form.component.mjs +0 -206
  281. package/esm2020/lib/components/info-drawer/library-metadata-tab/library-metadata-tab.component.mjs +0 -45
  282. package/esm2020/lib/components/info-drawer/metadata-tab/metadata-tab.component.mjs +0 -134
  283. package/esm2020/lib/components/info-drawer/versions-tab/versions-tab.component.mjs +0 -95
  284. package/esm2020/lib/components/knowledge-retrieval/search-ai/agents-button/agents-button.component.mjs +0 -129
  285. package/esm2020/lib/components/knowledge-retrieval/search-ai/search-ai-input/search-ai-input.component.mjs +0 -171
  286. package/esm2020/lib/components/knowledge-retrieval/search-ai/search-ai-input-container/search-ai-input-container.component.mjs +0 -82
  287. package/esm2020/lib/components/knowledge-retrieval/search-ai/search-ai-results/search-ai-results.component.mjs +0 -199
  288. package/esm2020/lib/components/knowledge-retrieval/search-ai/search-ai-utils.mjs +0 -33
  289. package/esm2020/lib/components/libraries/libraries.component.mjs +0 -79
  290. package/esm2020/lib/components/recent-files/recent-files.component.mjs +0 -82
  291. package/esm2020/lib/components/search/search-action-menu/search-action-menu.component.mjs +0 -64
  292. package/esm2020/lib/components/search/search-input/search-input.component.mjs +0 -301
  293. package/esm2020/lib/components/search/search-input-control/search-input-control.component.mjs +0 -94
  294. package/esm2020/lib/components/search/search-libraries-results/search-libraries-query-builder.service.mjs +0 -90
  295. package/esm2020/lib/components/search/search-libraries-results/search-libraries-results.component.mjs +0 -153
  296. package/esm2020/lib/components/search/search-navigation.service.mjs +0 -60
  297. package/esm2020/lib/components/search/search-results/search-results.component.mjs +0 -255
  298. package/esm2020/lib/components/search/search-results-row/search-results-row.component.mjs +0 -142
  299. package/esm2020/lib/components/shared-files/shared-files.component.mjs +0 -83
  300. package/esm2020/lib/components/shared-link-view/shared-link-view.component.mjs +0 -82
  301. package/esm2020/lib/components/sidenav/components/button-menu.component.mjs +0 -62
  302. package/esm2020/lib/components/sidenav/components/expand-menu.component.mjs +0 -67
  303. package/esm2020/lib/components/sidenav/components/sidenav-header.component.mjs +0 -66
  304. package/esm2020/lib/components/sidenav/directives/action.directive.mjs +0 -75
  305. package/esm2020/lib/components/sidenav/directives/active-link.directive.mjs +0 -93
  306. package/esm2020/lib/components/sidenav/directives/expansion-panel.directive.mjs +0 -102
  307. package/esm2020/lib/components/sidenav/directives/menu-panel.directive.mjs +0 -99
  308. package/esm2020/lib/components/sidenav/sidenav.component.mjs +0 -89
  309. package/esm2020/lib/components/sidenav/user-menu/user-menu.component.mjs +0 -56
  310. package/esm2020/lib/components/toolbar/toggle-edit-offline/toggle-edit-offline.component.mjs +0 -137
  311. package/esm2020/lib/components/toolbar/toggle-favorite/toggle-favorite.component.mjs +0 -86
  312. package/esm2020/lib/components/toolbar/toggle-favorite-library/toggle-favorite-library.component.mjs +0 -107
  313. package/esm2020/lib/components/toolbar/toggle-info-drawer/toggle-info-drawer.component.mjs +0 -74
  314. package/esm2020/lib/components/toolbar/toggle-join-library/toggle-join-library-button.component.mjs +0 -105
  315. package/esm2020/lib/components/toolbar/view-node/view-node.component.mjs +0 -122
  316. package/esm2020/lib/components/trashcan/trashcan.component.mjs +0 -68
  317. package/esm2020/lib/components/upload-files-dialog/upload-files-dialog.component.mjs +0 -52
  318. package/esm2020/lib/components/view-profile/view-profile.component.mjs +0 -193
  319. package/esm2020/lib/dialogs/node-template/create-from-template.dialog.mjs +0 -120
  320. package/esm2020/lib/directives/document-list.directive.mjs +0 -199
  321. package/esm2020/lib/extensions/core.extensions.module.mjs +0 -55
  322. package/esm2020/lib/services/content-management.service.mjs +0 -873
  323. package/esm2020/lib/services/content-url.service.mjs +0 -71
  324. package/esm2020/lib/services/modal-ai.service.mjs +0 -66
  325. package/esm2020/lib/services/node-actions.service.mjs +0 -600
  326. package/esm2020/lib/services/node-template.service.mjs +0 -144
  327. package/esm2020/lib/services/search-ai-navigation.service.mjs +0 -52
  328. package/esm2020/lib/store/app-store.module.mjs +0 -102
  329. package/esm2020/lib/store/effects/app.effects.mjs +0 -49
  330. package/esm2020/lib/store/effects/contextmenu.effects.mjs +0 -55
  331. package/esm2020/lib/store/effects/download.effects.mjs +0 -159
  332. package/esm2020/lib/store/effects/favorite.effects.mjs +0 -76
  333. package/esm2020/lib/store/effects/library.effects.mjs +0 -113
  334. package/esm2020/lib/store/effects/node.effects.mjs +0 -325
  335. package/esm2020/lib/store/effects/search-ai.effects.mjs +0 -57
  336. package/esm2020/lib/store/effects/search.effects.mjs +0 -60
  337. package/esm2020/lib/store/effects/template.effects.mjs +0 -121
  338. package/esm2020/lib/store/effects/upload.effects.mjs +0 -166
  339. package/esm2020/lib/store/effects/viewer.effects.mjs +0 -175
  340. package/esm2020/ms-office/actions/aos.actions.mjs +0 -31
  341. package/esm2020/ms-office/aos-extension.module.mjs +0 -52
  342. package/esm2020/ms-office/aos-extension.service.mjs +0 -132
  343. package/esm2020/ms-office/effects/aos.effects.mjs +0 -48
  344. package/esm2020/public-api.mjs +0 -32
  345. package/esm2020/viewer/lib/components/preview/preview.component.mjs +0 -236
  346. package/esm2020/viewer/lib/components/viewer/viewer.component.mjs +0 -240
  347. package/esm2020/viewer/lib/services/viewer.service.mjs +0 -226
  348. package/esm2020/viewer/lib/viewer.module.mjs +0 -52
  349. package/fesm2015/alfresco-aca-content-about.mjs.map +0 -1
  350. package/fesm2015/alfresco-aca-content-folder-rules.mjs +0 -2662
  351. package/fesm2015/alfresco-aca-content-folder-rules.mjs.map +0 -1
  352. package/fesm2015/alfresco-aca-content-ms-office.mjs +0 -256
  353. package/fesm2015/alfresco-aca-content-ms-office.mjs.map +0 -1
  354. package/fesm2015/alfresco-aca-content-viewer.mjs +0 -700
  355. package/fesm2015/alfresco-aca-content-viewer.mjs.map +0 -1
  356. package/fesm2015/alfresco-aca-content.mjs +0 -9835
  357. package/fesm2015/alfresco-aca-content.mjs.map +0 -1
  358. package/fesm2020/alfresco-aca-content-about.mjs +0 -193
  359. package/fesm2020/alfresco-aca-content-about.mjs.map +0 -1
  360. package/fesm2020/alfresco-aca-content-folder-rules.mjs.map +0 -1
  361. package/fesm2020/alfresco-aca-content-ms-office.mjs.map +0 -1
  362. package/fesm2020/alfresco-aca-content-viewer.mjs.map +0 -1
  363. package/fesm2020/alfresco-aca-content.mjs +0 -9934
  364. package/fesm2020/alfresco-aca-content.mjs.map +0 -1
  365. /package/{esm2020 → esm2022}/about/alfresco-aca-content-about.mjs +0 -0
  366. /package/{esm2020 → esm2022}/about/dev-mode.tokens.mjs +0 -0
  367. /package/{esm2020 → esm2022}/about/package-json.token.mjs +0 -0
  368. /package/{esm2020 → esm2022}/about/public-api.mjs +0 -0
  369. /package/{esm2020 → esm2022}/alfresco-aca-content.mjs +0 -0
  370. /package/{esm2020 → esm2022}/folder-rules/alfresco-aca-content-folder-rules.mjs +0 -0
  371. /package/{esm2020 → esm2022}/folder-rules/folder-rules.rules.mjs +0 -0
  372. /package/{esm2020 → esm2022}/folder-rules/model/action-parameter-constraint.model.mjs +0 -0
  373. /package/{esm2020 → esm2022}/folder-rules/model/rule-action.model.mjs +0 -0
  374. /package/{esm2020 → esm2022}/folder-rules/model/rule-composite-condition.model.mjs +0 -0
  375. /package/{esm2020 → esm2022}/folder-rules/model/rule-grouping-item.model.mjs +0 -0
  376. /package/{esm2020 → esm2022}/folder-rules/model/rule-set.model.mjs +0 -0
  377. /package/{esm2020 → esm2022}/folder-rules/model/rule-simple-condition.model.mjs +0 -0
  378. /package/{esm2020 → esm2022}/folder-rules/model/rule.model.mjs +0 -0
  379. /package/{esm2020 → esm2022}/folder-rules/public-api.mjs +0 -0
  380. /package/{esm2020 → esm2022}/folder-rules/rule-details/conditions/rule-condition-comparators.mjs +0 -0
  381. /package/{esm2020 → esm2022}/folder-rules/rule-details/conditions/rule-condition-fields.mjs +0 -0
  382. /package/{esm2020 → esm2022}/folder-rules/rule-details/validators/rule-composite-condition.validator.mjs +0 -0
  383. /package/{esm2020 → esm2022}/lib/components/common/index.mjs +0 -0
  384. /package/{esm2020 → esm2022}/lib/components/context-menu/direction.token.mjs +0 -0
  385. /package/{esm2020 → esm2022}/lib/components/context-menu/interfaces.mjs +0 -0
  386. /package/{esm2020 → esm2022}/lib/components/search/index.mjs +0 -0
  387. /package/{esm2020 → esm2022}/lib/components/sidenav/index.mjs +0 -0
  388. /package/{esm2020 → esm2022}/lib/components/toolbar/index.mjs +0 -0
  389. /package/{esm2020 → esm2022}/lib/components/view-profile/view-profile.guard.mjs +0 -0
  390. /package/{esm2020 → esm2022}/lib/store/effects.mjs +0 -0
  391. /package/{esm2020 → esm2022}/lib/store/initial-state.mjs +0 -0
  392. /package/{esm2020 → esm2022}/lib/store/reducers/app.reducer.mjs +0 -0
  393. /package/{esm2020 → esm2022}/ms-office/alfresco-aca-content-ms-office.mjs +0 -0
  394. /package/{esm2020 → esm2022}/ms-office/public-api.mjs +0 -0
  395. /package/{esm2020 → esm2022}/viewer/alfresco-aca-content-viewer.mjs +0 -0
  396. /package/{esm2020 → esm2022}/viewer/public-api.mjs +0 -0
@@ -0,0 +1,280 @@
1
+ /*!
2
+ * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
3
+ *
4
+ * Alfresco Example Content Application
5
+ *
6
+ * This file is part of the Alfresco Example Content Application.
7
+ * If the software was purchased under a paid Alfresco license, the terms of
8
+ * the paid license agreement will prevail. Otherwise, the software is
9
+ * provided under the following open source license terms:
10
+ *
11
+ * The Alfresco Example Content Application is free software: you can redistribute it and/or modify
12
+ * it under the terms of the GNU Lesser General Public License as published by
13
+ * the Free Software Foundation, either version 3 of the License, or
14
+ * (at your option) any later version.
15
+ *
16
+ * The Alfresco Example Content Application is distributed in the hope that it will be useful,
17
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
+ * GNU Lesser General Public License for more details.
20
+ *
21
+ * You should have received a copy of the GNU Lesser General Public License
22
+ * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.
23
+ */
24
+ import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';
25
+ import { CommonModule, Location } from '@angular/common';
26
+ import { FolderRulesService } from '../services/folder-rules.service';
27
+ import { Subject } from 'rxjs';
28
+ import { ActivatedRoute, RouterModule } from '@angular/router';
29
+ import { delay, takeUntil } from 'rxjs/operators';
30
+ import { EditRuleDialogUiComponent } from '../rule-details/edit-rule-dialog.ui-component';
31
+ import { MatDialog, MatDialogModule } from '@angular/material/dialog';
32
+ import { NotificationService, TemplateModule, ToolbarModule, ConfirmDialogComponent } from '@alfresco/adf-core';
33
+ import { ActionsService } from '../services/actions.service';
34
+ import { FolderRuleSetsService } from '../services/folder-rule-sets.service';
35
+ import { RuleSetPickerSmartComponent } from '../rule-set-picker/rule-set-picker.smart-component';
36
+ import { MatSlideToggleModule } from '@angular/material/slide-toggle';
37
+ import { TranslateModule } from '@ngx-translate/core';
38
+ import { GenericErrorComponent, PageLayoutComponent } from '@alfresco/aca-shared';
39
+ import { MatButtonModule } from '@angular/material/button';
40
+ import { MatIconModule } from '@angular/material/icon';
41
+ import { MatProgressBarModule } from '@angular/material/progress-bar';
42
+ import { MatDividerModule } from '@angular/material/divider';
43
+ import { RuleListUiComponent } from '../rule-list/rule-list/rule-list.ui-component';
44
+ import { RuleDetailsUiComponent } from '../rule-details/rule-details.ui-component';
45
+ import * as i0 from "@angular/core";
46
+ import * as i1 from "@angular/common";
47
+ import * as i2 from "../services/folder-rules.service";
48
+ import * as i3 from "@angular/router";
49
+ import * as i4 from "@angular/material/dialog";
50
+ import * as i5 from "@alfresco/adf-core";
51
+ import * as i6 from "../services/actions.service";
52
+ import * as i7 from "../services/folder-rule-sets.service";
53
+ import * as i8 from "@ngx-translate/core";
54
+ import * as i9 from "@angular/material/button";
55
+ import * as i10 from "@angular/material/icon";
56
+ import * as i11 from "@angular/material/progress-bar";
57
+ import * as i12 from "@angular/material/slide-toggle";
58
+ import * as i13 from "@angular/material/divider";
59
+ class ManageRulesSmartComponent {
60
+ location;
61
+ folderRulesService;
62
+ route;
63
+ matDialogService;
64
+ notificationService;
65
+ actionsService;
66
+ folderRuleSetsService;
67
+ nodeId = '';
68
+ isInheritanceEnabled = true;
69
+ isInheritanceToggleDisabled = false;
70
+ mainRuleSet$;
71
+ inheritedRuleSets$;
72
+ selectedRule$;
73
+ selectedRuleSet$;
74
+ hasMoreRuleSets$;
75
+ ruleSetsLoading$;
76
+ folderInfo$;
77
+ actionsLoading$;
78
+ actionDefinitions$;
79
+ parameterConstraints$;
80
+ canEditMainRule = false;
81
+ canEditSelectedRule = false;
82
+ isMainRuleSetNotEmpty = false;
83
+ isInheritedRuleSetsNotEmpty = false;
84
+ destroyed$ = new Subject();
85
+ _actionDefinitionsSub;
86
+ constructor(location, folderRulesService, route, matDialogService, notificationService, actionsService, folderRuleSetsService) {
87
+ this.location = location;
88
+ this.folderRulesService = folderRulesService;
89
+ this.route = route;
90
+ this.matDialogService = matDialogService;
91
+ this.notificationService = notificationService;
92
+ this.actionsService = actionsService;
93
+ this.folderRuleSetsService = folderRuleSetsService;
94
+ }
95
+ ngOnInit() {
96
+ this.mainRuleSet$ = this.folderRuleSetsService.mainRuleSet$;
97
+ this.inheritedRuleSets$ = this.folderRuleSetsService.inheritedRuleSets$;
98
+ this.selectedRule$ = this.folderRulesService.selectedRule$;
99
+ this.selectedRuleSet$ = this.folderRuleSetsService.selectedRuleSet$;
100
+ this.hasMoreRuleSets$ = this.folderRuleSetsService.hasMoreRuleSets$;
101
+ this.ruleSetsLoading$ = this.folderRuleSetsService.isLoading$;
102
+ this.folderInfo$ = this.folderRuleSetsService.folderInfo$;
103
+ this.actionsLoading$ = this.actionsService.loading$.pipe(delay(0));
104
+ this.actionDefinitions$ = this.actionsService.actionDefinitionsListing$;
105
+ this.parameterConstraints$ = this.actionsService.parameterConstraints$;
106
+ this.folderRulesService.deletedRuleId$.pipe(takeUntil(this.destroyed$)).subscribe((deletedRuleId) => this.onRuleDelete(deletedRuleId));
107
+ this.actionsService.loadActionDefinitions();
108
+ this.route.params.subscribe((params) => {
109
+ this.nodeId = params.nodeId;
110
+ if (this.nodeId) {
111
+ this.folderRulesService.getRuleSettings(this.nodeId).then((ruleSettings) => {
112
+ this.isInheritanceEnabled = ruleSettings.value;
113
+ });
114
+ this.folderRuleSetsService.loadRuleSets(this.nodeId);
115
+ }
116
+ });
117
+ this._actionDefinitionsSub = this.actionDefinitions$.subscribe((actionDefinitions) => this.actionsService.loadActionParameterConstraints(actionDefinitions));
118
+ this.mainRuleSet$.pipe(takeUntil(this.destroyed$)).subscribe((ruleSet) => {
119
+ this.canEditMainRule = this.canEditRule(ruleSet);
120
+ this.isMainRuleSetNotEmpty = !!ruleSet;
121
+ });
122
+ this.inheritedRuleSets$.pipe(takeUntil(this.destroyed$)).subscribe((inheritedRuleSet) => {
123
+ this.isInheritedRuleSetsNotEmpty = inheritedRuleSet.some((ruleSet) => ruleSet.rules.some((rule) => rule.isEnabled));
124
+ });
125
+ this.selectedRuleSet$.pipe(takeUntil(this.destroyed$)).subscribe((ruleSet) => {
126
+ this.canEditSelectedRule = this.canEditRule(ruleSet);
127
+ });
128
+ }
129
+ ngOnDestroy() {
130
+ this.destroyed$.next();
131
+ this.destroyed$.complete();
132
+ this._actionDefinitionsSub.unsubscribe();
133
+ }
134
+ goBack() {
135
+ this.location.back();
136
+ }
137
+ onSelectRule(rule) {
138
+ this.folderRulesService.selectRule(rule);
139
+ }
140
+ openCreateUpdateRuleDialog(model = {}) {
141
+ const dialogRef = this.matDialogService.open(EditRuleDialogUiComponent, {
142
+ width: '90%',
143
+ panelClass: 'aca-edit-rule-dialog-container',
144
+ data: {
145
+ model,
146
+ nodeId: this.nodeId,
147
+ parameterConstraints$: this.parameterConstraints$,
148
+ actionDefinitions$: this.actionDefinitions$
149
+ }
150
+ });
151
+ this.onSubmitRuleDialog(dialogRef);
152
+ }
153
+ onSubmitRuleDialog(dialogRef) {
154
+ dialogRef.componentInstance.submitted.subscribe(async (rule) => {
155
+ try {
156
+ if (rule.id) {
157
+ await this.onRuleUpdate(rule);
158
+ }
159
+ else {
160
+ await this.onRuleCreate(rule);
161
+ }
162
+ dialogRef.close();
163
+ }
164
+ catch (error) {
165
+ this.notificationService.showError(error.response.body.error.errorKey);
166
+ }
167
+ });
168
+ }
169
+ async onRuleUpdate(rule) {
170
+ const newRule = await this.folderRulesService.updateRule(this.nodeId, rule.id, rule);
171
+ this.folderRuleSetsService.addOrUpdateRuleInMainRuleSet(newRule);
172
+ }
173
+ async onRuleCreate(ruleCreateParams) {
174
+ const newRule = await this.folderRulesService.createRule(this.nodeId, ruleCreateParams);
175
+ this.folderRuleSetsService.addOrUpdateRuleInMainRuleSet(newRule);
176
+ }
177
+ async onRuleEnabledToggle(rule, isEnabled) {
178
+ const updatedRule = await this.folderRulesService.updateRule(this.nodeId, rule.id, { ...rule, isEnabled });
179
+ this.folderRuleSetsService.addOrUpdateRuleInMainRuleSet(updatedRule);
180
+ }
181
+ async onInheritanceToggleChange(event) {
182
+ this.isInheritanceToggleDisabled = true;
183
+ const ruleSettings = await this.folderRulesService.updateRuleSettings(this.nodeId, '-isInheritanceEnabled-', { value: event.checked });
184
+ this.isInheritanceEnabled = ruleSettings.value;
185
+ this.folderRuleSetsService.loadRuleSets(this.nodeId);
186
+ this.isInheritanceToggleDisabled = false;
187
+ }
188
+ onRuleDeleteButtonClicked(rule) {
189
+ this.matDialogService
190
+ .open(ConfirmDialogComponent, {
191
+ data: {
192
+ title: 'ACA_FOLDER_RULES.CONFIRMATION_DIALOG.DELETE_RULE.TITLE',
193
+ message: 'ACA_FOLDER_RULES.CONFIRMATION_DIALOG.DELETE_RULE.MESSAGE'
194
+ },
195
+ minWidth: '346px'
196
+ })
197
+ .afterClosed()
198
+ .subscribe((result) => {
199
+ if (result) {
200
+ this.folderRulesService.deleteRule(this.nodeId, rule.id);
201
+ }
202
+ });
203
+ }
204
+ onRuleDelete(deletedRuleId) {
205
+ this.folderRuleSetsService.removeRuleFromMainRuleSet(deletedRuleId);
206
+ }
207
+ onLoadMoreRuleSets() {
208
+ this.folderRuleSetsService.loadMoreInheritedRuleSets();
209
+ }
210
+ onLoadMoreRules(ruleSet) {
211
+ this.folderRulesService.loadRules(ruleSet);
212
+ }
213
+ canEditRule(ruleSet) {
214
+ return !ruleSet || FolderRuleSetsService.isOwnedRuleSet(ruleSet, this.nodeId);
215
+ }
216
+ openLinkRulesDialog(existingRuleSet) {
217
+ this.matDialogService
218
+ .open(RuleSetPickerSmartComponent, {
219
+ width: '90%',
220
+ panelClass: 'aca-rule-set-picker-container',
221
+ data: {
222
+ nodeId: this.nodeId,
223
+ defaultNodeId: this.nodeId,
224
+ existingRuleSet
225
+ }
226
+ })
227
+ .afterClosed()
228
+ .subscribe((result) => {
229
+ if (result) {
230
+ this.folderRuleSetsService.refreshMainRuleSet();
231
+ }
232
+ });
233
+ }
234
+ onRuleSetUnlinkClicked(linkedRuleSet) {
235
+ this.matDialogService
236
+ .open(ConfirmDialogComponent, {
237
+ data: {
238
+ title: 'ACA_FOLDER_RULES.CONFIRMATION_DIALOG.DELETE_RULE_SET_LINK.TITLE',
239
+ message: 'ACA_FOLDER_RULES.CONFIRMATION_DIALOG.DELETE_RULE_SET_LINK.MESSAGE'
240
+ },
241
+ minWidth: '346px'
242
+ })
243
+ .afterClosed()
244
+ .subscribe(async (result) => {
245
+ if (result) {
246
+ try {
247
+ await this.folderRuleSetsService.deleteRuleSetLink(this.nodeId, linkedRuleSet.id);
248
+ this.folderRuleSetsService.refreshMainRuleSet();
249
+ }
250
+ catch (error) {
251
+ this.notificationService.showError('ACA_FOLDER_RULES.ERRORS.DELETE_RULE_SET_LINK_FAILED');
252
+ }
253
+ }
254
+ });
255
+ }
256
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ManageRulesSmartComponent, deps: [{ token: i1.Location }, { token: i2.FolderRulesService }, { token: i3.ActivatedRoute }, { token: i4.MatDialog }, { token: i5.NotificationService }, { token: i6.ActionsService }, { token: i7.FolderRuleSetsService }], target: i0.ɵɵFactoryTarget.Component });
257
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: ManageRulesSmartComponent, isStandalone: true, selector: "aca-manage-rules", host: { classAttribute: "aca-manage-rules" }, ngImport: i0, template: "<aca-page-layout>\n\n <div class=\"aca-page-layout-header\">\n <adf-toolbar class=\"adf-toolbar--inline\">\n <button mat-icon-button (click)=\"goBack()\">\n <mat-icon>arrow_back</mat-icon>\n </button>\n </adf-toolbar>\n <h1 class=\"aca-page-title\">{{ 'ACA_FOLDER_RULES.ACTIONS.MANAGE_RULES' | translate }}</h1>\n </div>\n\n <div class=\"aca-page-layout-content\">\n <div class=\"aca-main-content\">\n\n <ng-container *ngIf=\"((ruleSetsLoading$ | async) && (inheritedRuleSets$ | async).length === 0) || (actionsLoading$ | async); else onLoaded\">\n <mat-progress-bar color=\"primary\" mode=\"indeterminate\" />\n </ng-container>\n\n <ng-template #onLoaded>\n <ng-container *ngIf=\"folderInfo$ | async; else genericError\">\n <adf-toolbar class=\"adf-toolbar--inline aca-manage-rules__actions-bar\">\n\n <adf-toolbar-title class=\"aca-manage-rules__actions-bar__title\">\n <mat-icon class=\"icon-aligner\">folder</mat-icon>\n <h2 class=\"aca-page-title\">{{ (folderInfo$ | async).name }}:{{'ACA_FOLDER_RULES.MANAGE_RULES.TOOLBAR.BREADCRUMB.RULES' | translate}}</h2>\n </adf-toolbar-title>\n\n <mat-slide-toggle\n data-automation-id=\"manage-rules-inheritance-toggle-button\"\n class=\"aca-manage-rules__actions-bar__toggle\"\n [checked]=\"isInheritanceEnabled\"\n (change)=\"onInheritanceToggleChange($event)\"\n [disabled]=\"isInheritanceToggleDisabled\"\n [labelPosition]=\"'before'\">\n {{ 'ACA_FOLDER_RULES.MANAGE_RULES.TOOLBAR.ACTIONS.INHERIT_RULES' | translate }}\n </mat-slide-toggle>\n\n <mat-divider vertical class=\"aca-manage-rules__actions-bar__vertical-divider\" />\n\n <div class=\"aca-manage-rules__actions-bar__buttons\">\n <button\n *ngIf=\"!(mainRuleSet$ | async)\"\n data-automation-id=\"manage-rules-link-button\"\n mat-stroked-button\n (click)=\"openLinkRulesDialog()\">\n {{ 'ACA_FOLDER_RULES.MANAGE_RULES.TOOLBAR.ACTIONS.LINK_RULES' | translate }}\n </button>\n\n <button\n *ngIf=\"canEditMainRule\"\n data-automation-id=\"manage-rules-create-button\"\n mat-flat-button color=\"primary\"\n (click)=\"openCreateUpdateRuleDialog()\">\n {{ 'ACA_FOLDER_RULES.MANAGE_RULES.TOOLBAR.ACTIONS.CREATE_RULE' | translate }}\n </button>\n </div>\n\n </adf-toolbar>\n <mat-divider />\n\n <div class=\"aca-manage-rules__container\" *ngIf=\"isMainRuleSetNotEmpty || isInheritedRuleSetsNotEmpty; else emptyContent\">\n <aca-rule-list\n [mainRuleSet$]=\"mainRuleSet$\"\n [folderId]=\"nodeId\"\n [inheritedRuleSets]=\"inheritedRuleSets$ | async\"\n [hasMoreRuleSets]=\"hasMoreRuleSets$ | async\"\n [ruleSetsLoading]=\"ruleSetsLoading$ | async\"\n [selectedRule]=\"selectedRule$ | async\"\n (loadMoreRuleSets)=\"onLoadMoreRuleSets()\"\n (loadMoreRules)=\"onLoadMoreRules($event)\"\n (selectRule)=\"onSelectRule($event)\"\n (ruleEnabledChanged)=\"onRuleEnabledToggle($event[0], $event[1])\"\n (ruleSetEditLinkClicked)=\"openLinkRulesDialog($event)\"\n (ruleSetUnlinkClicked)=\"onRuleSetUnlinkClicked($event)\" />\n\n <div class=\"aca-manage-rules__container__rule-details\">\n\n <div class=\"aca-manage-rules__container__rule-details__header\" *ngIf=\"(selectedRule$ | async) as selectedRule\">\n <div class=\"aca-manage-rules__container__rule-details__header__title\">\n <div class=\"aca-manage-rules__container__rule-details__header__title__name\">\n {{ selectedRule.name }}\n </div>\n <div class=\"aca-manage-rules__container__rule-details__header__title__description\">\n {{ selectedRule.description }}\n </div>\n </div>\n\n <div class=\"aca-manage-rules__container__rule-details__header__buttons\">\n <ng-container *ngIf=\"canEditSelectedRule; else goToFolderButton\">\n <button mat-stroked-button (click)=\"onRuleDeleteButtonClicked(selectedRule)\" id=\"delete-rule-btn\">\n <mat-icon>delete_outline</mat-icon>\n </button>\n <button mat-stroked-button (click)=\"openCreateUpdateRuleDialog(selectedRule)\" id=\"edit-rule-btn\">\n {{ 'ACA_FOLDER_RULES.MANAGE_RULES.TOOLBAR.ACTIONS.EDIT_RULE' | translate }}\n </button>\n </ng-container>\n\n <ng-template #goToFolderButton>\n <button mat-stroked-button [routerLink]=\"['/nodes', (selectedRuleSet$ | async).owningFolder.id, 'rules']\">\n {{ 'ACA_FOLDER_RULES.MANAGE_RULES.TOOLBAR.ACTIONS.SEE_IN_FOLDER' | translate }}\n </button>\n </ng-template>\n </div>\n </div>\n\n <div class=\"aca-manage-rules__container__rule-details__content\" *ngIf=\"(selectedRule$ | async) as selectedRule\">\n <aca-rule-details\n [actionDefinitions]=\"actionDefinitions$ | async\"\n [parameterConstraints]=\"parameterConstraints$ | async\"\n [readOnly]=\"true\"\n [preview]=\"true\"\n [value]=\"selectedRule\"\n [nodeId]=\"nodeId\" />\n </div>\n </div>\n </div>\n\n <ng-template #emptyContent>\n <adf-empty-content\n icon=\"library_books\"\n [title]=\"'ACA_FOLDER_RULES.MANAGE_RULES.EMPTY_RULES_LIST.TITLE' | translate\"\n [subtitle]=\"'ACA_FOLDER_RULES.MANAGE_RULES.EMPTY_RULES_LIST.SUBTITLE' | translate\"\n />\n </ng-template>\n </ng-container>\n\n <ng-template #genericError>\n <div class=\"aca-page-layout-error\">\n <aca-generic-error />\n </div>\n </ng-template>\n\n </ng-template>\n\n </div>\n </div>\n\n</aca-page-layout>\n", styles: [".aca-manage-rules .mat-mdc-slide-toggle:is(mat-slide-toggle) .mdc-switch:enabled .mdc-switch__track:after{background:var(--mdc-switch-selected-track-color)}.aca-manage-rules .mat-mdc-slide-toggle .mdc-switch .mdc-switch__handle:before{background:var(--mdc-switch-selected-pressed-handle-color)}.aca-manage-rules__actions-bar{padding:0 30px;display:flex;align-items:center}.aca-manage-rules__actions-bar .aca-page-title{margin-left:18px}.aca-manage-rules__actions-bar__title{align-items:center;flex:1}.aca-manage-rules__actions-bar__buttons{display:flex;align-items:stretch;gap:12px}.aca-manage-rules__actions-bar__toggle{font-weight:600;font-size:14px}.aca-manage-rules__actions-bar__vertical-divider{height:50%;margin:0 12px}.aca-manage-rules__container{display:grid;grid-template-columns:minmax(250px,1fr) 3fr;padding:20px;gap:12px;overflow-y:auto;flex:1}.aca-manage-rules__container__rule-details{border:1px solid var(--theme-border-color);border-radius:12px;overflow-y:auto}.aca-manage-rules__container__rule-details__header{position:sticky;top:0;z-index:1;display:flex;flex-direction:row;align-items:flex-start;overflow-x:auto;justify-content:space-between;padding:12px 20px;border-bottom:1px solid var(--theme-border-color);background-color:var(--theme-background-color);column-gap:20px}.aca-manage-rules__container__rule-details__header__title{display:flex;flex-direction:column;gap:4px;word-wrap:break-word;min-width:100px}.aca-manage-rules__container__rule-details__header__title__name{font-size:1.2em;font-weight:700}.aca-manage-rules__container__rule-details__header__title__description{font-size:.8em;font-style:italic}.aca-manage-rules__container__rule-details__header .aca-manage-rules__container__rule-details__header__buttons{display:flex;flex-direction:row;align-items:stretch;gap:4px}.aca-manage-rules__container__rule-details__header .aca-manage-rules__container__rule-details__header__buttons button{color:var(--theme-text-color)}.aca-manage-rules__container__rule-details__header .aca-manage-rules__container__rule-details__header__buttons button#delete-rule-btn{padding:0 8px;margin:0;min-width:unset}.aca-manage-rules__container__rule-details__header .aca-manage-rules__container__rule-details__header__buttons button#delete-rule-btn mat-icon{margin:0;padding:0;width:24px;height:24px;font-size:24px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }, { kind: "component", type: PageLayoutComponent, selector: "aca-page-layout", inputs: ["hasError"] }, { kind: "ngmodule", type: ToolbarModule }, { kind: "component", type: i5.ToolbarComponent, selector: "adf-toolbar", inputs: ["title", "color"] }, { kind: "component", type: i5.ToolbarTitleComponent, selector: "adf-toolbar-title" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i11.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i12.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i13.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: RuleListUiComponent, selector: "aca-rule-list", inputs: ["mainRuleSet$", "folderId", "inheritedRuleSets", "hasMoreRuleSets", "ruleSetsLoading", "selectedRule"], outputs: ["loadMoreRuleSets", "loadMoreRules", "selectRule", "ruleEnabledChanged", "ruleSetEditLinkClicked", "ruleSetUnlinkClicked"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: TemplateModule }, { kind: "component", type: i5.EmptyContentComponent, selector: "adf-empty-content", inputs: ["icon", "title", "subtitle"] }, { kind: "component", type: GenericErrorComponent, selector: "aca-generic-error", inputs: ["text"] }, { kind: "component", type: RuleDetailsUiComponent, selector: "aca-rule-details", inputs: ["readOnly", "value", "preview", "actionDefinitions", "parameterConstraints", "nodeId"], outputs: ["formValidationChanged", "formValueChanged"] }, { kind: "ngmodule", type: MatDialogModule }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });
258
+ }
259
+ export { ManageRulesSmartComponent };
260
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ManageRulesSmartComponent, decorators: [{
261
+ type: Component,
262
+ args: [{ standalone: true, imports: [
263
+ CommonModule,
264
+ TranslateModule,
265
+ PageLayoutComponent,
266
+ ToolbarModule,
267
+ MatButtonModule,
268
+ MatIconModule,
269
+ MatProgressBarModule,
270
+ MatSlideToggleModule,
271
+ MatDividerModule,
272
+ RuleListUiComponent,
273
+ RouterModule,
274
+ TemplateModule,
275
+ GenericErrorComponent,
276
+ RuleDetailsUiComponent,
277
+ MatDialogModule
278
+ ], selector: 'aca-manage-rules', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.Default, host: { class: 'aca-manage-rules' }, template: "<aca-page-layout>\n\n <div class=\"aca-page-layout-header\">\n <adf-toolbar class=\"adf-toolbar--inline\">\n <button mat-icon-button (click)=\"goBack()\">\n <mat-icon>arrow_back</mat-icon>\n </button>\n </adf-toolbar>\n <h1 class=\"aca-page-title\">{{ 'ACA_FOLDER_RULES.ACTIONS.MANAGE_RULES' | translate }}</h1>\n </div>\n\n <div class=\"aca-page-layout-content\">\n <div class=\"aca-main-content\">\n\n <ng-container *ngIf=\"((ruleSetsLoading$ | async) && (inheritedRuleSets$ | async).length === 0) || (actionsLoading$ | async); else onLoaded\">\n <mat-progress-bar color=\"primary\" mode=\"indeterminate\" />\n </ng-container>\n\n <ng-template #onLoaded>\n <ng-container *ngIf=\"folderInfo$ | async; else genericError\">\n <adf-toolbar class=\"adf-toolbar--inline aca-manage-rules__actions-bar\">\n\n <adf-toolbar-title class=\"aca-manage-rules__actions-bar__title\">\n <mat-icon class=\"icon-aligner\">folder</mat-icon>\n <h2 class=\"aca-page-title\">{{ (folderInfo$ | async).name }}:{{'ACA_FOLDER_RULES.MANAGE_RULES.TOOLBAR.BREADCRUMB.RULES' | translate}}</h2>\n </adf-toolbar-title>\n\n <mat-slide-toggle\n data-automation-id=\"manage-rules-inheritance-toggle-button\"\n class=\"aca-manage-rules__actions-bar__toggle\"\n [checked]=\"isInheritanceEnabled\"\n (change)=\"onInheritanceToggleChange($event)\"\n [disabled]=\"isInheritanceToggleDisabled\"\n [labelPosition]=\"'before'\">\n {{ 'ACA_FOLDER_RULES.MANAGE_RULES.TOOLBAR.ACTIONS.INHERIT_RULES' | translate }}\n </mat-slide-toggle>\n\n <mat-divider vertical class=\"aca-manage-rules__actions-bar__vertical-divider\" />\n\n <div class=\"aca-manage-rules__actions-bar__buttons\">\n <button\n *ngIf=\"!(mainRuleSet$ | async)\"\n data-automation-id=\"manage-rules-link-button\"\n mat-stroked-button\n (click)=\"openLinkRulesDialog()\">\n {{ 'ACA_FOLDER_RULES.MANAGE_RULES.TOOLBAR.ACTIONS.LINK_RULES' | translate }}\n </button>\n\n <button\n *ngIf=\"canEditMainRule\"\n data-automation-id=\"manage-rules-create-button\"\n mat-flat-button color=\"primary\"\n (click)=\"openCreateUpdateRuleDialog()\">\n {{ 'ACA_FOLDER_RULES.MANAGE_RULES.TOOLBAR.ACTIONS.CREATE_RULE' | translate }}\n </button>\n </div>\n\n </adf-toolbar>\n <mat-divider />\n\n <div class=\"aca-manage-rules__container\" *ngIf=\"isMainRuleSetNotEmpty || isInheritedRuleSetsNotEmpty; else emptyContent\">\n <aca-rule-list\n [mainRuleSet$]=\"mainRuleSet$\"\n [folderId]=\"nodeId\"\n [inheritedRuleSets]=\"inheritedRuleSets$ | async\"\n [hasMoreRuleSets]=\"hasMoreRuleSets$ | async\"\n [ruleSetsLoading]=\"ruleSetsLoading$ | async\"\n [selectedRule]=\"selectedRule$ | async\"\n (loadMoreRuleSets)=\"onLoadMoreRuleSets()\"\n (loadMoreRules)=\"onLoadMoreRules($event)\"\n (selectRule)=\"onSelectRule($event)\"\n (ruleEnabledChanged)=\"onRuleEnabledToggle($event[0], $event[1])\"\n (ruleSetEditLinkClicked)=\"openLinkRulesDialog($event)\"\n (ruleSetUnlinkClicked)=\"onRuleSetUnlinkClicked($event)\" />\n\n <div class=\"aca-manage-rules__container__rule-details\">\n\n <div class=\"aca-manage-rules__container__rule-details__header\" *ngIf=\"(selectedRule$ | async) as selectedRule\">\n <div class=\"aca-manage-rules__container__rule-details__header__title\">\n <div class=\"aca-manage-rules__container__rule-details__header__title__name\">\n {{ selectedRule.name }}\n </div>\n <div class=\"aca-manage-rules__container__rule-details__header__title__description\">\n {{ selectedRule.description }}\n </div>\n </div>\n\n <div class=\"aca-manage-rules__container__rule-details__header__buttons\">\n <ng-container *ngIf=\"canEditSelectedRule; else goToFolderButton\">\n <button mat-stroked-button (click)=\"onRuleDeleteButtonClicked(selectedRule)\" id=\"delete-rule-btn\">\n <mat-icon>delete_outline</mat-icon>\n </button>\n <button mat-stroked-button (click)=\"openCreateUpdateRuleDialog(selectedRule)\" id=\"edit-rule-btn\">\n {{ 'ACA_FOLDER_RULES.MANAGE_RULES.TOOLBAR.ACTIONS.EDIT_RULE' | translate }}\n </button>\n </ng-container>\n\n <ng-template #goToFolderButton>\n <button mat-stroked-button [routerLink]=\"['/nodes', (selectedRuleSet$ | async).owningFolder.id, 'rules']\">\n {{ 'ACA_FOLDER_RULES.MANAGE_RULES.TOOLBAR.ACTIONS.SEE_IN_FOLDER' | translate }}\n </button>\n </ng-template>\n </div>\n </div>\n\n <div class=\"aca-manage-rules__container__rule-details__content\" *ngIf=\"(selectedRule$ | async) as selectedRule\">\n <aca-rule-details\n [actionDefinitions]=\"actionDefinitions$ | async\"\n [parameterConstraints]=\"parameterConstraints$ | async\"\n [readOnly]=\"true\"\n [preview]=\"true\"\n [value]=\"selectedRule\"\n [nodeId]=\"nodeId\" />\n </div>\n </div>\n </div>\n\n <ng-template #emptyContent>\n <adf-empty-content\n icon=\"library_books\"\n [title]=\"'ACA_FOLDER_RULES.MANAGE_RULES.EMPTY_RULES_LIST.TITLE' | translate\"\n [subtitle]=\"'ACA_FOLDER_RULES.MANAGE_RULES.EMPTY_RULES_LIST.SUBTITLE' | translate\"\n />\n </ng-template>\n </ng-container>\n\n <ng-template #genericError>\n <div class=\"aca-page-layout-error\">\n <aca-generic-error />\n </div>\n </ng-template>\n\n </ng-template>\n\n </div>\n </div>\n\n</aca-page-layout>\n", styles: [".aca-manage-rules .mat-mdc-slide-toggle:is(mat-slide-toggle) .mdc-switch:enabled .mdc-switch__track:after{background:var(--mdc-switch-selected-track-color)}.aca-manage-rules .mat-mdc-slide-toggle .mdc-switch .mdc-switch__handle:before{background:var(--mdc-switch-selected-pressed-handle-color)}.aca-manage-rules__actions-bar{padding:0 30px;display:flex;align-items:center}.aca-manage-rules__actions-bar .aca-page-title{margin-left:18px}.aca-manage-rules__actions-bar__title{align-items:center;flex:1}.aca-manage-rules__actions-bar__buttons{display:flex;align-items:stretch;gap:12px}.aca-manage-rules__actions-bar__toggle{font-weight:600;font-size:14px}.aca-manage-rules__actions-bar__vertical-divider{height:50%;margin:0 12px}.aca-manage-rules__container{display:grid;grid-template-columns:minmax(250px,1fr) 3fr;padding:20px;gap:12px;overflow-y:auto;flex:1}.aca-manage-rules__container__rule-details{border:1px solid var(--theme-border-color);border-radius:12px;overflow-y:auto}.aca-manage-rules__container__rule-details__header{position:sticky;top:0;z-index:1;display:flex;flex-direction:row;align-items:flex-start;overflow-x:auto;justify-content:space-between;padding:12px 20px;border-bottom:1px solid var(--theme-border-color);background-color:var(--theme-background-color);column-gap:20px}.aca-manage-rules__container__rule-details__header__title{display:flex;flex-direction:column;gap:4px;word-wrap:break-word;min-width:100px}.aca-manage-rules__container__rule-details__header__title__name{font-size:1.2em;font-weight:700}.aca-manage-rules__container__rule-details__header__title__description{font-size:.8em;font-style:italic}.aca-manage-rules__container__rule-details__header .aca-manage-rules__container__rule-details__header__buttons{display:flex;flex-direction:row;align-items:stretch;gap:4px}.aca-manage-rules__container__rule-details__header .aca-manage-rules__container__rule-details__header__buttons button{color:var(--theme-text-color)}.aca-manage-rules__container__rule-details__header .aca-manage-rules__container__rule-details__header__buttons button#delete-rule-btn{padding:0 8px;margin:0;min-width:unset}.aca-manage-rules__container__rule-details__header .aca-manage-rules__container__rule-details__header__buttons button#delete-rule-btn mat-icon{margin:0;padding:0;width:24px;height:24px;font-size:24px}\n"] }]
279
+ }], ctorParameters: function () { return [{ type: i1.Location }, { type: i2.FolderRulesService }, { type: i3.ActivatedRoute }, { type: i4.MatDialog }, { type: i5.NotificationService }, { type: i6.ActionsService }, { type: i7.FolderRuleSetsService }]; } });
280
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlLXJ1bGVzLnNtYXJ0LWNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FjYS1jb250ZW50L2ZvbGRlci1ydWxlcy9zcmMvbWFuYWdlLXJ1bGVzL21hbmFnZS1ydWxlcy5zbWFydC1jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY2EtY29udGVudC9mb2xkZXItcnVsZXMvc3JjL21hbmFnZS1ydWxlcy9tYW5hZ2UtcnVsZXMuc21hcnQtY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFFSCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFxQixpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBYyxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBRXpELE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0QsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUMxRixPQUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sRUFBRSxxQkFBcUIsRUFB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LGVBQWUsd2FBQ2YsYUFBYSxvTEFDYixvQkFBb0IseU5BQ3BCLG9CQUFvQix1TUFDcEIsZ0JBQWdCLG9JQUNoQixtQkFBbUIsZ1RBQ25CLFlBQVksdVFBQ1osY0FBYyw0SkFDZCxxQkFBcUIsZ0ZBQ3JCLHNCQUFzQixxTkFDdEIsZUFBZTs7U0FTTix5QkFBeUI7MkZBQXpCLHlCQUF5QjtrQkExQnJDLFNBQVM7aUNBQ0ksSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixhQUFhO3dCQUNiLG9CQUFvQjt3QkFDcEIsb0JBQW9CO3dCQUNwQixnQkFBZ0I7d0JBQ2hCLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWixjQUFjO3dCQUNkLHFCQUFxQjt3QkFDckIsc0JBQXNCO3dCQUN0QixlQUFlO3FCQUNoQixZQUNTLGtCQUFrQixpQkFHYixpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxPQUFPLFFBQzFDLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI0IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbi5cbiAqIElmIHRoZSBzb2Z0d2FyZSB3YXMgcHVyY2hhc2VkIHVuZGVyIGEgcGFpZCBBbGZyZXNjbyBsaWNlbnNlLCB0aGUgdGVybXMgb2ZcbiAqIHRoZSBwYWlkIGxpY2Vuc2UgYWdyZWVtZW50IHdpbGwgcHJldmFpbC4gT3RoZXJ3aXNlLCB0aGUgc29mdHdhcmUgaXNcbiAqIHByb3ZpZGVkIHVuZGVyIHRoZSBmb2xsb3dpbmcgb3BlbiBzb3VyY2UgbGljZW5zZSB0ZXJtczpcbiAqXG4gKiBUaGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZVxuICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBmcm9tIEh5bGFuZCBTb2Z0d2FyZS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuICovXG5cbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb2xkZXJSdWxlc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mb2xkZXItcnVsZXMuc2VydmljZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFJ1bGUgfSBmcm9tICcuLi9tb2RlbC9ydWxlLm1vZGVsJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgTm9kZUluZm8gfSBmcm9tICdAYWxmcmVzY28vYWNhLXNoYXJlZC9zdG9yZSc7XG5pbXBvcnQgeyBkZWxheSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRWRpdFJ1bGVEaWFsb2dVaUNvbXBvbmVudCB9IGZyb20gJy4uL3J1bGUtZGV0YWlscy9lZGl0LXJ1bGUtZGlhbG9nLnVpLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlLCBUZW1wbGF0ZU1vZHVsZSwgVG9vbGJhck1vZHVsZSwgQ29uZmlybURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJ0BhbGZyZXNjby9hZGYtY29yZSc7XG5pbXBvcnQgeyBBY3Rpb25EZWZpbml0aW9uVHJhbnNmb3JtZWQgfSBmcm9tICcuLi9tb2RlbC9ydWxlLWFjdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBBY3Rpb25zU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2FjdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBGb2xkZXJSdWxlU2V0c1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mb2xkZXItcnVsZS1zZXRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUnVsZVNldCB9IGZyb20gJy4uL21vZGVsL3J1bGUtc2V0Lm1vZGVsJztcbmltcG9ydCB7IFJ1bGVTZXRQaWNrZXJTbWFydENvbXBvbmVudCB9IGZyb20gJy4uL3J1bGUtc2V0LXBpY2tlci9ydWxlLXNldC1waWNrZXIuc21hcnQtY29tcG9uZW50JztcbmltcG9ydCB7IE1hdFNsaWRlVG9nZ2xlQ2hhbmdlLCBNYXRTbGlkZVRvZ2dsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NsaWRlLXRvZ2dsZSc7XG5pbXBvcnQgeyBBY3Rpb25QYXJhbWV0ZXJDb25zdHJhaW50IH0gZnJvbSAnLi4vbW9kZWwvYWN0aW9uLXBhcmFtZXRlci1jb25zdHJhaW50Lm1vZGVsJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgR2VuZXJpY0Vycm9yQ29tcG9uZW50LCBQYWdlTGF5b3V0Q29tcG9uZW50IH0gZnJvbSAnQGFsZnJlc2NvL2FjYS1zaGFyZWQnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdFByb2dyZXNzQmFyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3MtYmFyJztcbmltcG9ydCB7IE1hdERpdmlkZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaXZpZGVyJztcbmltcG9ydCB7IFJ1bGVMaXN0VWlDb21wb25lbnQgfSBmcm9tICcuLi9ydWxlLWxpc3QvcnVsZS1saXN0L3J1bGUtbGlzdC51aS1jb21wb25lbnQnO1xuaW1wb3J0IHsgUnVsZURldGFpbHNVaUNvbXBvbmVudCB9IGZyb20gJy4uL3J1bGUtZGV0YWlscy9ydWxlLWRldGFpbHMudWktY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIFBhZ2VMYXlvdXRDb21wb25lbnQsXG4gICAgVG9vbGJhck1vZHVsZSxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBNYXRQcm9ncmVzc0Jhck1vZHVsZSxcbiAgICBNYXRTbGlkZVRvZ2dsZU1vZHVsZSxcbiAgICBNYXREaXZpZGVyTW9kdWxlLFxuICAgIFJ1bGVMaXN0VWlDb21wb25lbnQsXG4gICAgUm91dGVyTW9kdWxlLFxuICAgIFRlbXBsYXRlTW9kdWxlLFxuICAgIEdlbmVyaWNFcnJvckNvbXBvbmVudCxcbiAgICBSdWxlRGV0YWlsc1VpQ29tcG9uZW50LFxuICAgIE1hdERpYWxvZ01vZHVsZVxuICBdLFxuICBzZWxlY3RvcjogJ2FjYS1tYW5hZ2UtcnVsZXMnLFxuICB0ZW1wbGF0ZVVybDogJ21hbmFnZS1ydWxlcy5zbWFydC1jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydtYW5hZ2UtcnVsZXMuc21hcnQtY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5EZWZhdWx0LFxuICBob3N0OiB7IGNsYXNzOiAnYWNhLW1hbmFnZS1ydWxlcycgfVxufSlcbmV4cG9ydCBjbGFzcyBNYW5hZ2VSdWxlc1NtYXJ0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBub2RlSWQgPSAnJztcbiAgaXNJbmhlcml0YW5jZUVuYWJsZWQgPSB0cnVlO1xuICBpc0luaGVyaXRhbmNlVG9nZ2xlRGlzYWJsZWQgPSBmYWxzZTtcblxuICBtYWluUnVsZVNldCQ6IE9ic2VydmFibGU8UnVsZVNldD47XG4gIGluaGVyaXRlZFJ1bGVTZXRzJDogT2JzZXJ2YWJsZTxSdWxlU2V0W10+O1xuICBzZWxlY3RlZFJ1bGUkOiBPYnNlcnZhYmxlPFJ1bGU+O1xuICBzZWxlY3RlZFJ1bGVTZXQkOiBPYnNlcnZhYmxlPFJ1bGVTZXQ+O1xuICBoYXNNb3JlUnVsZVNldHMkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBydWxlU2V0c0xvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBmb2xkZXJJbmZvJDogT2JzZXJ2YWJsZTxOb2RlSW5mbz47XG5cbiAgYWN0aW9uc0xvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBhY3Rpb25EZWZpbml0aW9ucyQ6IE9ic2VydmFibGU8QWN0aW9uRGVmaW5pdGlvblRyYW5zZm9ybWVkW10+O1xuICBwYXJhbWV0ZXJDb25zdHJhaW50cyQ6IE9ic2VydmFibGU8QWN0aW9uUGFyYW1ldGVyQ29uc3RyYWludFtdPjtcbiAgY2FuRWRpdE1haW5SdWxlID0gZmFsc2U7XG4gIGNhbkVkaXRTZWxlY3RlZFJ1bGUgPSBmYWxzZTtcbiAgaXNNYWluUnVsZVNldE5vdEVtcHR5ID0gZmFsc2U7XG4gIGlzSW5oZXJpdGVkUnVsZVNldHNOb3RFbXB0eSA9IGZhbHNlO1xuXG4gIHByaXZhdGUgZGVzdHJveWVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgX2FjdGlvbkRlZmluaXRpb25zU3ViOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24sXG4gICAgcHJpdmF0ZSBmb2xkZXJSdWxlc1NlcnZpY2U6IEZvbGRlclJ1bGVzU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIG1hdERpYWxvZ1NlcnZpY2U6IE1hdERpYWxvZyxcbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3Rpb25zU2VydmljZTogQWN0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb2xkZXJSdWxlU2V0c1NlcnZpY2U6IEZvbGRlclJ1bGVTZXRzU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5tYWluUnVsZVNldCQgPSB0aGlzLmZvbGRlclJ1bGVTZXRzU2VydmljZS5tYWluUnVsZVNldCQ7XG4gICAgdGhpcy5pbmhlcml0ZWRSdWxlU2V0cyQgPSB0aGlzLmZvbGRlclJ1bGVTZXRzU2VydmljZS5pbmhlcml0ZWRSdWxlU2V0cyQ7XG4gICAgdGhpcy5zZWxlY3RlZFJ1bGUkID0gdGhpcy5mb2xkZXJSdWxlc1NlcnZpY2Uuc2VsZWN0ZWRSdWxlJDtcbiAgICB0aGlzLnNlbGVjdGVkUnVsZVNldCQgPSB0aGlzLmZvbGRlclJ1bGVTZXRzU2VydmljZS5zZWxlY3RlZFJ1bGVTZXQkO1xuICAgIHRoaXMuaGFzTW9yZVJ1bGVTZXRzJCA9IHRoaXMuZm9sZGVyUnVsZVNldHNTZXJ2aWNlLmhhc01vcmVSdWxlU2V0cyQ7XG4gICAgdGhpcy5ydWxlU2V0c0xvYWRpbmckID0gdGhpcy5mb2xkZXJSdWxlU2V0c1NlcnZpY2UuaXNMb2FkaW5nJDtcbiAgICB0aGlzLmZvbGRlckluZm8kID0gdGhpcy5mb2xkZXJSdWxlU2V0c1NlcnZpY2UuZm9sZGVySW5mbyQ7XG5cbiAgICB0aGlzLmFjdGlvbnNMb2FkaW5nJCA9IHRoaXMuYWN0aW9uc1NlcnZpY2UubG9hZGluZyQucGlwZShkZWxheSgwKSk7XG4gICAgdGhpcy5hY3Rpb25EZWZpbml0aW9ucyQgPSB0aGlzLmFjdGlvbnNTZXJ2aWNlLmFjdGlvbkRlZmluaXRpb25zTGlzdGluZyQ7XG4gICAgdGhpcy5wYXJhbWV0ZXJDb25zdHJhaW50cyQgPSB0aGlzLmFjdGlvbnNTZXJ2aWNlLnBhcmFtZXRlckNvbnN0cmFpbnRzJDtcblxuICAgIHRoaXMuZm9sZGVyUnVsZXNTZXJ2aWNlLmRlbGV0ZWRSdWxlSWQkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCkpLnN1YnNjcmliZSgoZGVsZXRlZFJ1bGVJZCkgPT4gdGhpcy5vblJ1bGVEZWxldGUoZGVsZXRlZFJ1bGVJZCkpO1xuXG4gICAgdGhpcy5hY3Rpb25zU2VydmljZS5sb2FkQWN0aW9uRGVmaW5pdGlvbnMoKTtcblxuICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZSgocGFyYW1zKSA9PiB7XG4gICAgICB0aGlzLm5vZGVJZCA9IHBhcmFtcy5ub2RlSWQ7XG4gICAgICBpZiAodGhpcy5ub2RlSWQpIHtcbiAgICAgICAgdGhpcy5mb2xkZXJSdWxlc1NlcnZpY2UuZ2V0UnVsZVNldHRpbmdzKHRoaXMubm9kZUlkKS50aGVuKChydWxlU2V0dGluZ3MpID0+IHtcbiAgICAgICAgICB0aGlzLmlzSW5oZXJpdGFuY2VFbmFibGVkID0gcnVsZVNldHRpbmdzLnZhbHVlO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmZvbGRlclJ1bGVTZXRzU2VydmljZS5sb2FkUnVsZVNldHModGhpcy5ub2RlSWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fYWN0aW9uRGVmaW5pdGlvbnNTdWIgPSB0aGlzLmFjdGlvbkRlZmluaXRpb25zJC5zdWJzY3JpYmUoKGFjdGlvbkRlZmluaXRpb25zOiBBY3Rpb25EZWZpbml0aW9uVHJhbnNmb3JtZWRbXSkgPT5cbiAgICAgIHRoaXMuYWN0aW9uc1NlcnZpY2UubG9hZEFjdGlvblBhcmFtZXRlckNvbnN0cmFpbnRzKGFjdGlvbkRlZmluaXRpb25zKVxuICAgICk7XG5cbiAgICB0aGlzLm1haW5SdWxlU2V0JC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpKS5zdWJzY3JpYmUoKHJ1bGVTZXQpID0+IHtcbiAgICAgIHRoaXMuY2FuRWRpdE1haW5SdWxlID0gdGhpcy5jYW5FZGl0UnVsZShydWxlU2V0KTtcbiAgICAgIHRoaXMuaXNNYWluUnVsZVNldE5vdEVtcHR5ID0gISFydWxlU2V0O1xuICAgIH0pO1xuXG4gICAgdGhpcy5pbmhlcml0ZWRSdWxlU2V0cyQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSkuc3Vic2NyaWJlKChpbmhlcml0ZWRSdWxlU2V0KSA9PiB7XG4gICAgICB0aGlzLmlzSW5oZXJpdGVkUnVsZVNldHNOb3RFbXB0eSA9IGluaGVyaXRlZFJ1bGVTZXQuc29tZSgocnVsZVNldCkgPT4gcnVsZVNldC5ydWxlcy5zb21lKChydWxlOiBSdWxlKSA9PiBydWxlLmlzRW5hYmxlZCkpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5zZWxlY3RlZFJ1bGVTZXQkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCkpLnN1YnNjcmliZSgocnVsZVNldCkgPT4ge1xuICAgICAgdGhpcy5jYW5FZGl0U2VsZWN0ZWRSdWxlID0gdGhpcy5jYW5FZGl0UnVsZShydWxlU2V0KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZGVzdHJveWVkJC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95ZWQkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fYWN0aW9uRGVmaW5pdGlvbnNTdWIudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGdvQmFjaygpOiB2b2lkIHtcbiAgICB0aGlzLmxvY2F0aW9uLmJhY2soKTtcbiAgfVxuXG4gIG9uU2VsZWN0UnVsZShydWxlOiBSdWxlKSB7XG4gICAgdGhpcy5mb2xkZXJSdWxlc1NlcnZpY2Uuc2VsZWN0UnVsZShydWxlKTtcbiAgfVxuXG4gIG9wZW5DcmVhdGVVcGRhdGVSdWxlRGlhbG9nKG1vZGVsID0ge30pIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLm1hdERpYWxvZ1NlcnZpY2Uub3BlbihFZGl0UnVsZURpYWxvZ1VpQ29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogJzkwJScsXG4gICAgICBwYW5lbENsYXNzOiAnYWNhLWVkaXQtcnVsZS1kaWFsb2ctY29udGFpbmVyJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbW9kZWwsXG4gICAgICAgIG5vZGVJZDogdGhpcy5ub2RlSWQsXG4gICAgICAgIHBhcmFtZXRlckNvbnN0cmFpbnRzJDogdGhpcy5wYXJhbWV0ZXJDb25zdHJhaW50cyQsXG4gICAgICAgIGFjdGlvbkRlZmluaXRpb25zJDogdGhpcy5hY3Rpb25EZWZpbml0aW9ucyRcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMub25TdWJtaXRSdWxlRGlhbG9nKGRpYWxvZ1JlZik7XG4gIH1cblxuICBvblN1Ym1pdFJ1bGVEaWFsb2coZGlhbG9nUmVmKSB7XG4gICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLnN1Ym1pdHRlZC5zdWJzY3JpYmUoYXN5bmMgKHJ1bGUpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChydWxlLmlkKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5vblJ1bGVVcGRhdGUocnVsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5vblJ1bGVDcmVhdGUocnVsZSk7XG4gICAgICAgIH1cbiAgICAgICAgZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvd0Vycm9yKGVycm9yLnJlc3BvbnNlLmJvZHkuZXJyb3IuZXJyb3JLZXkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgb25SdWxlVXBkYXRlKHJ1bGU6IFJ1bGUpIHtcbiAgICBjb25zdCBuZXdSdWxlID0gYXdhaXQgdGhpcy5mb2xkZXJSdWxlc1NlcnZpY2UudXBkYXRlUnVsZSh0aGlzLm5vZGVJZCwgcnVsZS5pZCwgcnVsZSk7XG4gICAgdGhpcy5mb2xkZXJSdWxlU2V0c1NlcnZpY2UuYWRkT3JVcGRhdGVSdWxlSW5NYWluUnVsZVNldChuZXdSdWxlKTtcbiAgfVxuXG4gIGFzeW5jIG9uUnVsZUNyZWF0ZShydWxlQ3JlYXRlUGFyYW1zOiBQYXJ0aWFsPFJ1bGU+KSB7XG4gICAgY29uc3QgbmV3UnVsZSA9IGF3YWl0IHRoaXMuZm9sZGVyUnVsZXNTZXJ2aWNlLmNyZWF0ZVJ1bGUodGhpcy5ub2RlSWQsIHJ1bGVDcmVhdGVQYXJhbXMpO1xuICAgIHRoaXMuZm9sZGVyUnVsZVNldHNTZXJ2aWNlLmFkZE9yVXBkYXRlUnVsZUluTWFpblJ1bGVTZXQobmV3UnVsZSk7XG4gIH1cblxuICBhc3luYyBvblJ1bGVFbmFibGVkVG9nZ2xlKHJ1bGU6IFJ1bGUsIGlzRW5hYmxlZDogYm9vbGVhbikge1xuICAgIGNvbnN0IHVwZGF0ZWRSdWxlID0gYXdhaXQgdGhpcy5mb2xkZXJSdWxlc1NlcnZpY2UudXBkYXRlUnVsZSh0aGlzLm5vZGVJZCwgcnVsZS5pZCwgeyAuLi5ydWxlLCBpc0VuYWJsZWQgfSk7XG4gICAgdGhpcy5mb2xkZXJSdWxlU2V0c1NlcnZpY2UuYWRkT3JVcGRhdGVSdWxlSW5NYWluUnVsZVNldCh1cGRhdGVkUnVsZSk7XG4gIH1cblxuICBhc3luYyBvbkluaGVyaXRhbmNlVG9nZ2xlQ2hhbmdlKGV2ZW50OiBNYXRTbGlkZVRvZ2dsZUNoYW5nZSkge1xuICAgIHRoaXMuaXNJbmhlcml0YW5jZVRvZ2dsZURpc2FibGVkID0gdHJ1ZTtcbiAgICBjb25zdCBydWxlU2V0dGluZ3MgPSBhd2FpdCB0aGlzLmZvbGRlclJ1bGVzU2VydmljZS51cGRhdGVSdWxlU2V0dGluZ3ModGhpcy5ub2RlSWQsICctaXNJbmhlcml0YW5jZUVuYWJsZWQtJywgeyB2YWx1ZTogZXZlbnQuY2hlY2tlZCB9KTtcbiAgICB0aGlzLmlzSW5oZXJpdGFuY2VFbmFibGVkID0gcnVsZVNldHRpbmdzLnZhbHVlO1xuICAgIHRoaXMuZm9sZGVyUnVsZVNldHNTZXJ2aWNlLmxvYWRSdWxlU2V0cyh0aGlzLm5vZGVJZCk7XG4gICAgdGhpcy5pc0luaGVyaXRhbmNlVG9nZ2xlRGlzYWJsZWQgPSBmYWxzZTtcbiAgfVxuXG4gIG9uUnVsZURlbGV0ZUJ1dHRvbkNsaWNrZWQocnVsZTogUnVsZSkge1xuICAgIHRoaXMubWF0RGlhbG9nU2VydmljZVxuICAgICAgLm9wZW4oQ29uZmlybURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgdGl0bGU6ICdBQ0FfRk9MREVSX1JVTEVTLkNPTkZJUk1BVElPTl9ESUFMT0cuREVMRVRFX1JVTEUuVElUTEUnLFxuICAgICAgICAgIG1lc3NhZ2U6ICdBQ0FfRk9MREVSX1JVTEVTLkNPTkZJUk1BVElPTl9ESUFMT0cuREVMRVRFX1JVTEUuTUVTU0FHRSdcbiAgICAgICAgfSxcbiAgICAgICAgbWluV2lkdGg6ICczNDZweCdcbiAgICAgIH0pXG4gICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICB0aGlzLmZvbGRlclJ1bGVzU2VydmljZS5kZWxldGVSdWxlKHRoaXMubm9kZUlkLCBydWxlLmlkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBvblJ1bGVEZWxldGUoZGVsZXRlZFJ1bGVJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5mb2xkZXJSdWxlU2V0c1NlcnZpY2UucmVtb3ZlUnVsZUZyb21NYWluUnVsZVNldChkZWxldGVkUnVsZUlkKTtcbiAgfVxuXG4gIG9uTG9hZE1vcmVSdWxlU2V0cygpIHtcbiAgICB0aGlzLmZvbGRlclJ1bGVTZXRzU2VydmljZS5sb2FkTW9yZUluaGVyaXRlZFJ1bGVTZXRzKCk7XG4gIH1cblxuICBvbkxvYWRNb3JlUnVsZXMocnVsZVNldDogUnVsZVNldCkge1xuICAgIHRoaXMuZm9sZGVyUnVsZXNTZXJ2aWNlLmxvYWRSdWxlcyhydWxlU2V0KTtcbiAgfVxuXG4gIGNhbkVkaXRSdWxlKHJ1bGVTZXQ6IFJ1bGVTZXQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXJ1bGVTZXQgfHwgRm9sZGVyUnVsZVNldHNTZXJ2aWNlLmlzT3duZWRSdWxlU2V0KHJ1bGVTZXQsIHRoaXMubm9kZUlkKTtcbiAgfVxuXG4gIG9wZW5MaW5rUnVsZXNEaWFsb2coZXhpc3RpbmdSdWxlU2V0PzogUnVsZVNldCkge1xuICAgIHRoaXMubWF0RGlhbG9nU2VydmljZVxuICAgICAgLm9wZW4oUnVsZVNldFBpY2tlclNtYXJ0Q29tcG9uZW50LCB7XG4gICAgICAgIHdpZHRoOiAnOTAlJyxcbiAgICAgICAgcGFuZWxDbGFzczogJ2FjYS1ydWxlLXNldC1waWNrZXItY29udGFpbmVyJyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIG5vZGVJZDogdGhpcy5ub2RlSWQsXG4gICAgICAgICAgZGVmYXVsdE5vZGVJZDogdGhpcy5ub2RlSWQsXG4gICAgICAgICAgZXhpc3RpbmdSdWxlU2V0XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICB0aGlzLmZvbGRlclJ1bGVTZXRzU2VydmljZS5yZWZyZXNoTWFpblJ1bGVTZXQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBvblJ1bGVTZXRVbmxpbmtDbGlja2VkKGxpbmtlZFJ1bGVTZXQ6IFJ1bGVTZXQpIHtcbiAgICB0aGlzLm1hdERpYWxvZ1NlcnZpY2VcbiAgICAgIC5vcGVuKENvbmZpcm1EaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHRpdGxlOiAnQUNBX0ZPTERFUl9SVUxFUy5DT05GSVJNQVRJT05fRElBTE9HLkRFTEVURV9SVUxFX1NFVF9MSU5LLlRJVExFJyxcbiAgICAgICAgICBtZXNzYWdlOiAnQUNBX0ZPTERFUl9SVUxFUy5DT05GSVJNQVRJT05fRElBTE9HLkRFTEVURV9SVUxFX1NFVF9MSU5LLk1FU1NBR0UnXG4gICAgICAgIH0sXG4gICAgICAgIG1pbldpZHRoOiAnMzQ2cHgnXG4gICAgICB9KVxuICAgICAgLmFmdGVyQ2xvc2VkKClcbiAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKHJlc3VsdCkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZm9sZGVyUnVsZVNldHNTZXJ2aWNlLmRlbGV0ZVJ1bGVTZXRMaW5rKHRoaXMubm9kZUlkLCBsaW5rZWRSdWxlU2V0LmlkKTtcbiAgICAgICAgICAgIHRoaXMuZm9sZGVyUnVsZVNldHNTZXJ2aWNlLnJlZnJlc2hNYWluUnVsZVNldCgpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvd0Vycm9yKCdBQ0FfRk9MREVSX1JVTEVTLkVSUk9SUy5ERUxFVEVfUlVMRV9TRVRfTElOS19GQUlMRUQnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG59XG4iLCI8YWNhLXBhZ2UtbGF5b3V0PlxuXG4gIDxkaXYgY2xhc3M9XCJhY2EtcGFnZS1sYXlvdXQtaGVhZGVyXCI+XG4gICAgPGFkZi10b29sYmFyIGNsYXNzPVwiYWRmLXRvb2xiYXItLWlubGluZVwiPlxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImdvQmFjaygpXCI+XG4gICAgICAgIDxtYXQtaWNvbj5hcnJvd19iYWNrPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvYWRmLXRvb2xiYXI+XG4gICAgPGgxIGNsYXNzPVwiYWNhLXBhZ2UtdGl0bGVcIj57eyAnQUNBX0ZPTERFUl9SVUxFUy5BQ1RJT05TLk1BTkFHRV9SVUxFUycgfCB0cmFuc2xhdGUgfX08L2gxPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiYWNhLXBhZ2UtbGF5b3V0LWNvbnRlbnRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYWNhLW1haW4tY29udGVudFwiPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKChydWxlU2V0c0xvYWRpbmckIHwgYXN5bmMpICYmIChpbmhlcml0ZWRSdWxlU2V0cyQgfCBhc3luYykubGVuZ3RoID09PSAwKSB8fCAoYWN0aW9uc0xvYWRpbmckIHwgYXN5bmMpOyBlbHNlIG9uTG9hZGVkXCI+XG4gICAgICAgIDxtYXQtcHJvZ3Jlc3MtYmFyIGNvbG9yPVwicHJpbWFyeVwiIG1vZGU9XCJpbmRldGVybWluYXRlXCIgLz5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctdGVtcGxhdGUgI29uTG9hZGVkPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZm9sZGVySW5mbyQgfCBhc3luYzsgZWxzZSBnZW5lcmljRXJyb3JcIj5cbiAgICAgICAgICA8YWRmLXRvb2xiYXIgY2xhc3M9XCJhZGYtdG9vbGJhci0taW5saW5lIGFjYS1tYW5hZ2UtcnVsZXNfX2FjdGlvbnMtYmFyXCI+XG5cbiAgICAgICAgICAgIDxhZGYtdG9vbGJhci10aXRsZSBjbGFzcz1cImFjYS1tYW5hZ2UtcnVsZXNfX2FjdGlvbnMtYmFyX190aXRsZVwiPlxuICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJpY29uLWFsaWduZXJcIj5mb2xkZXI8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJhY2EtcGFnZS10aXRsZVwiPnt7IChmb2xkZXJJbmZvJCB8IGFzeW5jKS5uYW1lIH19Ont7J0FDQV9GT0xERVJfUlVMRVMuTUFOQUdFX1JVTEVTLlRPT0xCQVIuQlJFQURDUlVNQi5SVUxFUycgfCB0cmFuc2xhdGV9fTwvaDI+XG4gICAgICAgICAgICA8L2FkZi10b29sYmFyLXRpdGxlPlxuXG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZVxuICAgICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJtYW5hZ2UtcnVsZXMtaW5oZXJpdGFuY2UtdG9nZ2xlLWJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYWNhLW1hbmFnZS1ydWxlc19fYWN0aW9ucy1iYXJfX3RvZ2dsZVwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzSW5oZXJpdGFuY2VFbmFibGVkXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkluaGVyaXRhbmNlVG9nZ2xlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNJbmhlcml0YW5jZVRvZ2dsZURpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2xhYmVsUG9zaXRpb25dPVwiJ2JlZm9yZSdcIj5cbiAgICAgICAgICAgICAge3sgJ0FDQV9GT0xERVJfUlVMRVMuTUFOQUdFX1JVTEVTLlRPT0xCQVIuQUNUSU9OUy5JTkhFUklUX1JVTEVTJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXIgdmVydGljYWwgY2xhc3M9XCJhY2EtbWFuYWdlLXJ1bGVzX19hY3Rpb25zLWJhcl9fdmVydGljYWwtZGl2aWRlclwiIC8+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY2EtbWFuYWdlLXJ1bGVzX19hY3Rpb25zLWJhcl9fYnV0dG9uc1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhKG1haW5SdWxlU2V0JCB8IGFzeW5jKVwiXG4gICAgICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwibWFuYWdlLXJ1bGVzLWxpbmstYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBtYXQtc3Ryb2tlZC1idXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkxpbmtSdWxlc0RpYWxvZygpXCI+XG4gICAgICAgICAgICAgICAge3sgJ0FDQV9GT0xERVJfUlVMRVMuTUFOQUdFX1JVTEVTLlRPT0xCQVIuQUNUSU9OUy5MSU5LX1JVTEVTJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjYW5FZGl0TWFpblJ1bGVcIlxuICAgICAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cIm1hbmFnZS1ydWxlcy1jcmVhdGUtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBtYXQtZmxhdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkNyZWF0ZVVwZGF0ZVJ1bGVEaWFsb2coKVwiPlxuICAgICAgICAgICAgICAgIHt7ICdBQ0FfRk9MREVSX1JVTEVTLk1BTkFHRV9SVUxFUy5UT09MQkFSLkFDVElPTlMuQ1JFQVRFX1JVTEUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8L2FkZi10b29sYmFyPlxuICAgICAgICAgIDxtYXQtZGl2aWRlciAvPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFjYS1tYW5hZ2UtcnVsZXNfX2NvbnRhaW5lclwiICpuZ0lmPVwiaXNNYWluUnVsZVNldE5vdEVtcHR5IHx8IGlzSW5oZXJpdGVkUnVsZVNldHNOb3RFbXB0eTsgZWxzZSBlbXB0eUNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxhY2EtcnVsZS1saXN0XG4gICAgICAgICAgICAgIFttYWluUnVsZVNldCRdPVwibWFpblJ1bGVTZXQkXCJcbiAgICAgICAgICAgICAgW2ZvbGRlcklkXT1cIm5vZGVJZFwiXG4gICAgICAgICAgICAgIFtpbmhlcml0ZWRSdWxlU2V0c109XCJpbmhlcml0ZWRSdWxlU2V0cyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgIFtoYXNNb3JlUnVsZVNldHNdPVwiaGFzTW9yZVJ1bGVTZXRzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgW3J1bGVTZXRzTG9hZGluZ109XCJydWxlU2V0c0xvYWRpbmckIHwgYXN5bmNcIlxuICAgICAgICAgICAgICBbc2VsZWN0ZWRSdWxlXT1cInNlbGVjdGVkUnVsZSQgfCBhc3luY1wiXG4gICAgICAgICAgICAgIChsb2FkTW9yZVJ1bGVTZXRzKT1cIm9uTG9hZE1vcmVSdWxlU2V0cygpXCJcbiAgICAgICAgICAgICAgKGxvYWRNb3JlUnVsZXMpPVwib25Mb2FkTW9yZVJ1bGVzKCRldmVudClcIlxuICAgICAgICAgICAgICAoc2VsZWN0UnVsZSk9XCJvblNlbGVjdFJ1bGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChydWxlRW5hYmxlZENoYW5nZWQpPVwib25SdWxlRW5hYmxlZFRvZ2dsZSgkZXZlbnRbMF0sICRldmVudFsxXSlcIlxuICAgICAgICAgICAgICAocnVsZVNldEVkaXRMaW5rQ2xpY2tlZCk9XCJvcGVuTGlua1J1bGVzRGlhbG9nKCRldmVudClcIlxuICAgICAgICAgICAgICAocnVsZVNldFVubGlua0NsaWNrZWQpPVwib25SdWxlU2V0VW5saW5rQ2xpY2tlZCgkZXZlbnQpXCIgLz5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjYS1tYW5hZ2UtcnVsZXNfX2NvbnRhaW5lcl9fcnVsZS1kZXRhaWxzXCI+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjYS1tYW5hZ2UtcnVsZXNfX2NvbnRhaW5lcl9fcnVsZS1kZXRhaWxzX19oZWFkZXJcIiAqbmdJZj1cIihzZWxlY3RlZFJ1bGUkIHwgYXN5bmMpIGFzIHNlbGVjdGVkUnVsZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY2EtbWFuYWdlLXJ1bGVzX19jb250YWluZXJfX3J1bGUtZGV0YWlsc19faGVhZGVyX190aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjYS1tYW5hZ2UtcnVsZXNfX2NvbnRhaW5lcl9fcnVsZS1kZXRhaWxzX19oZWFkZXJfX3RpdGxlX19uYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHNlbGVjdGVkUnVsZS5uYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY2EtbWFuYWdlLXJ1bGVzX19jb250YWluZXJfX3J1bGUtZGV0YWlsc19faGVhZGVyX190aXRsZV9fZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAge3sgc2VsZWN0ZWRSdWxlLmRlc2NyaXB0aW9uIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY2EtbWFuYWdlLXJ1bGVzX19jb250YWluZXJfX3J1bGUtZGV0YWlsc19faGVhZGVyX19idXR0b25zXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2FuRWRpdFNlbGVjdGVkUnVsZTsgZWxzZSBnb1RvRm9sZGVyQnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIChjbGljayk9XCJvblJ1bGVEZWxldGVCdXR0b25DbGlja2VkKHNlbGVjdGVkUnVsZSlcIiBpZD1cImRlbGV0ZS1ydWxlLWJ0blwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGVfb3V0bGluZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiAoY2xpY2spPVwib3BlbkNyZWF0ZVVwZGF0ZVJ1bGVEaWFsb2coc2VsZWN0ZWRSdWxlKVwiIGlkPVwiZWRpdC1ydWxlLWJ0blwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7ICdBQ0FfRk9MREVSX1JVTEVTLk1BTkFHRV9SVUxFUy5UT09MQkFSLkFDVElPTlMuRURJVF9SVUxFJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2dvVG9Gb2xkZXJCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIFtyb3V0ZXJMaW5rXT1cIlsnL25vZGVzJywgKHNlbGVjdGVkUnVsZVNldCQgfCBhc3luYykub3duaW5nRm9sZGVyLmlkLCAncnVsZXMnXVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7ICdBQ0FfRk9MREVSX1JVTEVTLk1BTkFHRV9SVUxFUy5UT09MQkFSLkFDVElPTlMuU0VFX0lOX0ZPTERFUicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWNhLW1hbmFnZS1ydWxlc19fY29udGFpbmVyX19ydWxlLWRldGFpbHNfX2NvbnRlbnRcIiAqbmdJZj1cIihzZWxlY3RlZFJ1bGUkIHwgYXN5bmMpIGFzIHNlbGVjdGVkUnVsZVwiPlxuICAgICAgICAgICAgICAgIDxhY2EtcnVsZS1kZXRhaWxzXG4gICAgICAgICAgICAgICAgICBbYWN0aW9uRGVmaW5pdGlvbnNdPVwiYWN0aW9uRGVmaW5pdGlvbnMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgW3BhcmFtZXRlckNvbnN0cmFpbnRzXT1cInBhcmFtZXRlckNvbnN0cmFpbnRzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtwcmV2aWV3XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdGVkUnVsZVwiXG4gICAgICAgICAgICAgICAgICBbbm9kZUlkXT1cIm5vZGVJZFwiIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2VtcHR5Q29udGVudD5cbiAgICAgICAgICAgIDxhZGYtZW1wdHktY29udGVudFxuICAgICAgICAgICAgICBpY29uPVwibGlicmFyeV9ib29rc1wiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCInQUNBX0ZPTERFUl9SVUxFUy5NQU5BR0VfUlVMRVMuRU1QVFlfUlVMRVNfTElTVC5USVRMRScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbc3VidGl0bGVdPVwiJ0FDQV9GT0xERVJfUlVMRVMuTUFOQUdFX1JVTEVTLkVNUFRZX1JVTEVTX0xJU1QuU1VCVElUTEUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNnZW5lcmljRXJyb3I+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFjYS1wYWdlLWxheW91dC1lcnJvclwiPlxuICAgICAgICAgICAgPGFjYS1nZW5lcmljLWVycm9yIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbjwvYWNhLXBhZ2UtbGF5b3V0PlxuIl19
@@ -0,0 +1,117 @@
1
+ /*!
2
+ * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
3
+ *
4
+ * Alfresco Example Content Application
5
+ *
6
+ * This file is part of the Alfresco Example Content Application.
7
+ * If the software was purchased under a paid Alfresco license, the terms of
8
+ * the paid license agreement will prevail. Otherwise, the software is
9
+ * provided under the following open source license terms:
10
+ *
11
+ * The Alfresco Example Content Application is free software: you can redistribute it and/or modify
12
+ * it under the terms of the GNU Lesser General Public License as published by
13
+ * the Free Software Foundation, either version 3 of the License, or
14
+ * (at your option) any later version.
15
+ *
16
+ * The Alfresco Example Content Application is distributed in the hope that it will be useful,
17
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
+ * GNU Lesser General Public License for more details.
20
+ *
21
+ * You should have received a copy of the GNU Lesser General Public License
22
+ * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.
23
+ */
24
+ import { Component, forwardRef, Input, ViewEncapsulation } from '@angular/core';
25
+ import { FormArray, FormControl, NG_VALUE_ACCESSOR, ReactiveFormsModule, Validators } from '@angular/forms';
26
+ import { ruleActionValidator } from '../validators/rule-actions.validator';
27
+ import { CommonModule } from '@angular/common';
28
+ import { TranslateModule } from '@ngx-translate/core';
29
+ import { RuleActionUiComponent } from './rule-action.ui-component';
30
+ import { MatButtonModule } from '@angular/material/button';
31
+ import { MatMenuModule } from '@angular/material/menu';
32
+ import { MatIconModule } from '@angular/material/icon';
33
+ import * as i0 from "@angular/core";
34
+ import * as i1 from "@angular/common";
35
+ import * as i2 from "@ngx-translate/core";
36
+ import * as i3 from "@angular/forms";
37
+ import * as i4 from "@angular/material/button";
38
+ import * as i5 from "@angular/material/menu";
39
+ import * as i6 from "@angular/material/icon";
40
+ class RuleActionListUiComponent {
41
+ actionDefinitions = [];
42
+ readOnly = false;
43
+ parameterConstraints = [];
44
+ nodeId = '';
45
+ formArray = new FormArray([]);
46
+ formArraySubscription;
47
+ formControls = [];
48
+ onChange = () => undefined;
49
+ onTouch = () => undefined;
50
+ writeValue(actions) {
51
+ if (actions.length === 0) {
52
+ actions = [
53
+ {
54
+ actionDefinitionId: null,
55
+ params: {}
56
+ }
57
+ ];
58
+ }
59
+ this.formArray = new FormArray(actions.map((action) => new FormControl(action)));
60
+ this.formControls = this.formArray.controls;
61
+ this.formArraySubscription?.unsubscribe();
62
+ this.formArraySubscription = this.formArray.valueChanges.subscribe((value) => {
63
+ this.onChange(value);
64
+ this.onTouch();
65
+ });
66
+ }
67
+ registerOnChange(fn) {
68
+ this.onChange = fn;
69
+ }
70
+ registerOnTouched(fn) {
71
+ this.onTouch = fn;
72
+ }
73
+ addAction() {
74
+ const newAction = {
75
+ actionDefinitionId: null,
76
+ params: {}
77
+ };
78
+ this.formArray.push(new FormControl(newAction, [Validators.required, ruleActionValidator(this.actionDefinitions)]));
79
+ this.formControls = this.formArray.controls;
80
+ }
81
+ ngOnDestroy() {
82
+ this.formArraySubscription?.unsubscribe();
83
+ }
84
+ removeAction(control) {
85
+ const index = this.formArray.value.indexOf(control.value);
86
+ this.formArray.removeAt(index);
87
+ this.formControls = this.formArray.controls;
88
+ }
89
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: RuleActionListUiComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
90
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: RuleActionListUiComponent, isStandalone: true, selector: "aca-rule-action-list", inputs: { actionDefinitions: "actionDefinitions", readOnly: "readOnly", parameterConstraints: "parameterConstraints", nodeId: "nodeId" }, host: { classAttribute: "aca-rule-action-list" }, providers: [
91
+ {
92
+ provide: NG_VALUE_ACCESSOR,
93
+ multi: true,
94
+ useExisting: forwardRef(() => RuleActionListUiComponent)
95
+ }
96
+ ], ngImport: i0, template: "<div class=\"aca-rule-action-list__item \" *ngFor=\"let control of formControls\">\n <aca-rule-action\n [actionDefinitions]=\"actionDefinitions\"\n [parameterConstraints]=\"parameterConstraints\"\n [readOnly]=\"readOnly\"\n [formControl]=\"control\"\n [nodeId]=\"nodeId\" />\n\n <button\n mat-icon-button\n data-automation-id=\"rule-action-list-action-menu\"\n *ngIf=\"!readOnly\" [matMenuTriggerFor]=\"menu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n\n <mat-menu #menu>\n <button\n mat-menu-item\n data-automation-id=\"rule-action-list-remove-action-button\"\n [title]=\"'ACA_FOLDER_RULES.RULE_DETAILS.ACTION_BUTTONS.REMOVE' | translate\"\n [disabled]=\"formControls.length <= 1\"\n (click)=\"removeAction(control)\">\n <mat-icon>delete</mat-icon>\n <span>{{ 'ACA_FOLDER_RULES.RULE_DETAILS.ACTION_BUTTONS.REMOVE' | translate }}</span>\n </button>\n </mat-menu>\n</div>\n\n<button mat-flat-button class=\"aca-rule-action-list-add-action-button\" data-automation-id=\"rule-action-list-add-action-button\" (click)=\"addAction()\" *ngIf=\"!readOnly\">\n <mat-icon class=\"aca-rule-action-list-add-action-button-icon\">add</mat-icon>\n <span>{{ 'ACA_FOLDER_RULES.RULE_DETAILS.ACTION_BUTTONS.ADD_ACTION' | translate }}</span>\n</button>\n", styles: [".aca-rule-action-list .aca-rule-action-list__item .aca-rule-action .mat-mdc-form-field-flex .mat-mdc-form-field-infix{padding-top:24px}.aca-rule-action-list .mat-mdc-form-field-subscript-wrapper{display:none}.aca-rule-action-list .aca-rule-action-list-add-action-button{margin:4px 0 20px}.aca-rule-action-list .aca-rule-action-list-add-action-button .aca-rule-action-list-add-action-button-icon{width:24px;height:24px;font-size:24px;margin-right:0;margin-left:1px}.aca-rule-action-list__item{border-radius:8px;display:flex;margin:10px;padding:10px}.aca-rule-action-list__item>.aca-rule-action{flex:1}.aca-rule-action-list__item .mdc-text-field--disabled.mdc-text-field--filled{background:transparent}.aca-rule-action-list__item:nth-child(2n){background-color:#f2f2f2}.aca-rule-action-list__item:nth-child(2n):last-of-type{margin-bottom:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "component", type: RuleActionUiComponent, selector: "aca-rule-action", inputs: ["nodeId", "actionDefinitions", "readOnly", "parameterConstraints"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i5.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], encapsulation: i0.ViewEncapsulation.None });
97
+ }
98
+ export { RuleActionListUiComponent };
99
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: RuleActionListUiComponent, decorators: [{
100
+ type: Component,
101
+ args: [{ standalone: true, imports: [CommonModule, TranslateModule, RuleActionUiComponent, ReactiveFormsModule, MatButtonModule, MatMenuModule, MatIconModule], selector: 'aca-rule-action-list', encapsulation: ViewEncapsulation.None, host: { class: 'aca-rule-action-list' }, providers: [
102
+ {
103
+ provide: NG_VALUE_ACCESSOR,
104
+ multi: true,
105
+ useExisting: forwardRef(() => RuleActionListUiComponent)
106
+ }
107
+ ], template: "<div class=\"aca-rule-action-list__item \" *ngFor=\"let control of formControls\">\n <aca-rule-action\n [actionDefinitions]=\"actionDefinitions\"\n [parameterConstraints]=\"parameterConstraints\"\n [readOnly]=\"readOnly\"\n [formControl]=\"control\"\n [nodeId]=\"nodeId\" />\n\n <button\n mat-icon-button\n data-automation-id=\"rule-action-list-action-menu\"\n *ngIf=\"!readOnly\" [matMenuTriggerFor]=\"menu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n\n <mat-menu #menu>\n <button\n mat-menu-item\n data-automation-id=\"rule-action-list-remove-action-button\"\n [title]=\"'ACA_FOLDER_RULES.RULE_DETAILS.ACTION_BUTTONS.REMOVE' | translate\"\n [disabled]=\"formControls.length <= 1\"\n (click)=\"removeAction(control)\">\n <mat-icon>delete</mat-icon>\n <span>{{ 'ACA_FOLDER_RULES.RULE_DETAILS.ACTION_BUTTONS.REMOVE' | translate }}</span>\n </button>\n </mat-menu>\n</div>\n\n<button mat-flat-button class=\"aca-rule-action-list-add-action-button\" data-automation-id=\"rule-action-list-add-action-button\" (click)=\"addAction()\" *ngIf=\"!readOnly\">\n <mat-icon class=\"aca-rule-action-list-add-action-button-icon\">add</mat-icon>\n <span>{{ 'ACA_FOLDER_RULES.RULE_DETAILS.ACTION_BUTTONS.ADD_ACTION' | translate }}</span>\n</button>\n", styles: [".aca-rule-action-list .aca-rule-action-list__item .aca-rule-action .mat-mdc-form-field-flex .mat-mdc-form-field-infix{padding-top:24px}.aca-rule-action-list .mat-mdc-form-field-subscript-wrapper{display:none}.aca-rule-action-list .aca-rule-action-list-add-action-button{margin:4px 0 20px}.aca-rule-action-list .aca-rule-action-list-add-action-button .aca-rule-action-list-add-action-button-icon{width:24px;height:24px;font-size:24px;margin-right:0;margin-left:1px}.aca-rule-action-list__item{border-radius:8px;display:flex;margin:10px;padding:10px}.aca-rule-action-list__item>.aca-rule-action{flex:1}.aca-rule-action-list__item .mdc-text-field--disabled.mdc-text-field--filled{background:transparent}.aca-rule-action-list__item:nth-child(2n){background-color:#f2f2f2}.aca-rule-action-list__item:nth-child(2n):last-of-type{margin-bottom:8px}\n"] }]
108
+ }], propDecorators: { actionDefinitions: [{
109
+ type: Input
110
+ }], readOnly: [{
111
+ type: Input
112
+ }], parameterConstraints: [{
113
+ type: Input
114
+ }], nodeId: [{
115
+ type: Input
116
+ }] } });
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS1hY3Rpb24tbGlzdC51aS1jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY2EtY29udGVudC9mb2xkZXItcnVsZXMvc3JjL3J1bGUtZGV0YWlscy9hY3Rpb25zL3J1bGUtYWN0aW9uLWxpc3QudWktY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNhLWNvbnRlbnQvZm9sZGVyLXJ1bGVzL3NyYy9ydWxlLWRldGFpbHMvYWN0aW9ucy9ydWxlLWFjdGlvbi1saXN0LnVpLWNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFhLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBd0IsU0FBUyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdsSSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUUzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7OztBQUV2RCxNQWdCYSx5QkFBeUI7SUFFcEMsaUJBQWlCLEdBQWtDLEVBQUUsQ0FBQztJQUV0RCxRQUFR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QUF5QjtrQkFoQnJDLFNBQVM7aUNBQ0ksSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGFBQWEsQ0FBQyxZQUN6SCxzQkFBc0IsaUJBR2pCLGlCQUFpQixDQUFDLElBQUksUUFDL0IsRUFBRSxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsYUFDNUI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsS0FBSyxFQUFFLElBQUk7NEJBQ1gsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsMEJBQTBCLENBQUM7eUJBQ3pEO3FCQUNGOzhCQUlELGlCQUFpQjtzQkFEaEIsS0FBSztnQkFHTixRQUFRO3NCQURQLEtBQUs7Z0JBR04sb0JBQW9CO3NCQURuQixLQUFLO2dCQUdOLE1BQU07c0JBREwsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNCBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvblxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24uXG4gKiBJZiB0aGUgc29mdHdhcmUgd2FzIHB1cmNoYXNlZCB1bmRlciBhIHBhaWQgQWxmcmVzY28gbGljZW5zZSwgdGhlIHRlcm1zIG9mXG4gKiB0aGUgcGFpZCBsaWNlbnNlIGFncmVlbWVudCB3aWxsIHByZXZhaWwuIE90aGVyd2lzZSwgdGhlIHNvZnR3YXJlIGlzXG4gKiBwcm92aWRlZCB1bmRlciB0aGUgZm9sbG93aW5nIG9wZW4gc291cmNlIGxpY2Vuc2UgdGVybXM6XG4gKlxuICogVGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGVcbiAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogZnJvbSBIeWxhbmQgU29mdHdhcmUuIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIGZvcndhcmRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgTkdfVkFMVUVfQUNDRVNTT1IsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3Rpb25EZWZpbml0aW9uVHJhbnNmb3JtZWQsIFJ1bGVBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbC9ydWxlLWFjdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHJ1bGVBY3Rpb25WYWxpZGF0b3IgfSBmcm9tICcuLi92YWxpZGF0b3JzL3J1bGUtYWN0aW9ucy52YWxpZGF0b3InO1xuaW1wb3J0IHsgQWN0aW9uUGFyYW1ldGVyQ29uc3RyYWludCB9IGZyb20gJy4uLy4uL21vZGVsL2FjdGlvbi1wYXJhbWV0ZXItY29uc3RyYWludC5tb2RlbCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBSdWxlQWN0aW9uVWlDb21wb25lbnQgfSBmcm9tICcuL3J1bGUtYWN0aW9uLnVpLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgVHJhbnNsYXRlTW9kdWxlLCBSdWxlQWN0aW9uVWlDb21wb25lbnQsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIE1hdEJ1dHRvbk1vZHVsZSwgTWF0TWVudU1vZHVsZSwgTWF0SWNvbk1vZHVsZV0sXG4gIHNlbGVjdG9yOiAnYWNhLXJ1bGUtYWN0aW9uLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vcnVsZS1hY3Rpb24tbGlzdC51aS1jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3J1bGUtYWN0aW9uLWxpc3QudWktY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaG9zdDogeyBjbGFzczogJ2FjYS1ydWxlLWFjdGlvbi1saXN0JyB9LFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUnVsZUFjdGlvbkxpc3RVaUNvbXBvbmVudClcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgUnVsZUFjdGlvbkxpc3RVaUNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKVxuICBhY3Rpb25EZWZpbml0aW9uczogQWN0aW9uRGVmaW5pdGlvblRyYW5zZm9ybWVkW10gPSBbXTtcbiAgQElucHV0KClcbiAgcmVhZE9ubHkgPSBmYWxzZTtcbiAgQElucHV0KClcbiAgcGFyYW1ldGVyQ29uc3RyYWludHM6IEFjdGlvblBhcmFtZXRlckNvbnN0cmFpbnRbXSA9IFtdO1xuICBASW5wdXQoKVxuICBub2RlSWQgPSAnJztcblxuICBmb3JtQXJyYXkgPSBuZXcgRm9ybUFycmF5KFtdKTtcbiAgcHJpdmF0ZSBmb3JtQXJyYXlTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBmb3JtQ29udHJvbHM6IEZvcm1Db250cm9sW10gPSBbXTtcblxuICBvbkNoYW5nZTogKGFjdGlvbnM6IFJ1bGVBY3Rpb25bXSkgPT4gdm9pZCA9ICgpID0+IHVuZGVmaW5lZDtcbiAgb25Ub3VjaDogKCkgPT4gdm9pZCA9ICgpID0+IHVuZGVmaW5lZDtcblxuICB3cml0ZVZhbHVlKGFjdGlvbnM6IFJ1bGVBY3Rpb25bXSkge1xuICAgIGlmIChhY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgYWN0aW9ucyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGFjdGlvbkRlZmluaXRpb25JZDogbnVsbCxcbiAgICAgICAgICBwYXJhbXM6IHt9XG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfVxuICAgIHRoaXMuZm9ybUFycmF5ID0gbmV3IEZvcm1BcnJheShhY3Rpb25zLm1hcCgoYWN0aW9uOiBSdWxlQWN0aW9uKSA9PiBuZXcgRm9ybUNvbnRyb2woYWN0aW9uKSkpO1xuICAgIHRoaXMuZm9ybUNvbnRyb2xzID0gdGhpcy5mb3JtQXJyYXkuY29udHJvbHMgYXMgRm9ybUNvbnRyb2xbXTtcbiAgICB0aGlzLmZvcm1BcnJheVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmZvcm1BcnJheVN1YnNjcmlwdGlvbiA9IHRoaXMuZm9ybUFycmF5LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgICAgdGhpcy5vblRvdWNoKCk7XG4gICAgfSk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoYWN0aW9uczogUnVsZUFjdGlvbltdKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLm9uVG91Y2ggPSBmbjtcbiAgfVxuXG4gIGFkZEFjdGlvbigpIHtcbiAgICBjb25zdCBuZXdBY3Rpb246IFJ1bGVBY3Rpb24gPSB7XG4gICAgICBhY3Rpb25EZWZpbml0aW9uSWQ6IG51bGwsXG4gICAgICBwYXJhbXM6IHt9XG4gICAgfTtcbiAgICB0aGlzLmZvcm1BcnJheS5wdXNoKG5ldyBGb3JtQ29udHJvbChuZXdBY3Rpb24sIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBydWxlQWN0aW9uVmFsaWRhdG9yKHRoaXMuYWN0aW9uRGVmaW5pdGlvbnMpXSkpO1xuICAgIHRoaXMuZm9ybUNvbnRyb2xzID0gdGhpcy5mb3JtQXJyYXkuY29udHJvbHMgYXMgRm9ybUNvbnRyb2xbXTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZm9ybUFycmF5U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcmVtb3ZlQWN0aW9uKGNvbnRyb2w6IEZvcm1Db250cm9sKSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZvcm1BcnJheS52YWx1ZS5pbmRleE9mKGNvbnRyb2wudmFsdWUpO1xuICAgIHRoaXMuZm9ybUFycmF5LnJlbW92ZUF0KGluZGV4KTtcbiAgICB0aGlzLmZvcm1Db250cm9scyA9IHRoaXMuZm9ybUFycmF5LmNvbnRyb2xzIGFzIEZvcm1Db250cm9sW107XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJhY2EtcnVsZS1hY3Rpb24tbGlzdF9faXRlbSAgXCIgKm5nRm9yPVwibGV0IGNvbnRyb2wgb2YgZm9ybUNvbnRyb2xzXCI+XG4gIDxhY2EtcnVsZS1hY3Rpb25cbiAgICBbYWN0aW9uRGVmaW5pdGlvbnNdPVwiYWN0aW9uRGVmaW5pdGlvbnNcIlxuICAgIFtwYXJhbWV0ZXJDb25zdHJhaW50c109XCJwYXJhbWV0ZXJDb25zdHJhaW50c1wiXG4gICAgW3JlYWRPbmx5XT1cInJlYWRPbmx5XCJcbiAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgW25vZGVJZF09XCJub2RlSWRcIiAvPlxuXG4gIDxidXR0b25cbiAgICBtYXQtaWNvbi1idXR0b25cbiAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJydWxlLWFjdGlvbi1saXN0LWFjdGlvbi1tZW51XCJcbiAgICAqbmdJZj1cIiFyZWFkT25seVwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCI+XG4gICAgPG1hdC1pY29uPm1vcmVfdmVydDwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuXG4gIDxtYXQtbWVudSAjbWVudT5cbiAgICA8YnV0dG9uXG4gICAgICBtYXQtbWVudS1pdGVtXG4gICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJydWxlLWFjdGlvbi1saXN0LXJlbW92ZS1hY3Rpb24tYnV0dG9uXCJcbiAgICAgIFt0aXRsZV09XCInQUNBX0ZPTERFUl9SVUxFUy5SVUxFX0RFVEFJTFMuQUNUSU9OX0JVVFRPTlMuUkVNT1ZFJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZm9ybUNvbnRyb2xzLmxlbmd0aCA8PSAxXCJcbiAgICAgIChjbGljayk9XCJyZW1vdmVBY3Rpb24oY29udHJvbClcIj5cbiAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgPHNwYW4+e3sgJ0FDQV9GT0xERVJfUlVMRVMuUlVMRV9ERVRBSUxTLkFDVElPTl9CVVRUT05TLlJFTU9WRScgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LW1lbnU+XG48L2Rpdj5cblxuPGJ1dHRvbiBtYXQtZmxhdC1idXR0b24gY2xhc3M9XCJhY2EtcnVsZS1hY3Rpb24tbGlzdC1hZGQtYWN0aW9uLWJ1dHRvblwiIGRhdGEtYXV0b21hdGlvbi1pZD1cInJ1bGUtYWN0aW9uLWxpc3QtYWRkLWFjdGlvbi1idXR0b25cIiAoY2xpY2spPVwiYWRkQWN0aW9uKClcIiAqbmdJZj1cIiFyZWFkT25seVwiPlxuICA8bWF0LWljb24gY2xhc3M9XCJhY2EtcnVsZS1hY3Rpb24tbGlzdC1hZGQtYWN0aW9uLWJ1dHRvbi1pY29uXCI+YWRkPC9tYXQtaWNvbj5cbiAgPHNwYW4+e3sgJ0FDQV9GT0xERVJfUlVMRVMuUlVMRV9ERVRBSUxTLkFDVElPTl9CVVRUT05TLkFERF9BQ1RJT04nIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuPC9idXR0b24+XG4iXX0=