@acorex/modules 20.7.2 → 20.7.4

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 (96) hide show
  1. package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-Cb0ugn9q.mjs → acorex-modules-assessment-management-acorex-modules-assessment-management-oEQ6l_A3.mjs} +21 -21
  2. package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-Cb0ugn9q.mjs.map → acorex-modules-assessment-management-acorex-modules-assessment-management-oEQ6l_A3.mjs.map} +1 -1
  3. package/fesm2022/{acorex-modules-assessment-management-answers-viewer-widget-column.component-DsZSuqhi.mjs → acorex-modules-assessment-management-answers-viewer-widget-column.component-_Tmd76C6.mjs} +2 -2
  4. package/fesm2022/{acorex-modules-assessment-management-answers-viewer-widget-column.component-DsZSuqhi.mjs.map → acorex-modules-assessment-management-answers-viewer-widget-column.component-_Tmd76C6.mjs.map} +1 -1
  5. package/fesm2022/{acorex-modules-assessment-management-answers-viewer-widget-edit.component-CEQxo5aH.mjs → acorex-modules-assessment-management-answers-viewer-widget-edit.component-c0ryzonM.mjs} +2 -2
  6. package/fesm2022/{acorex-modules-assessment-management-answers-viewer-widget-edit.component-CEQxo5aH.mjs.map → acorex-modules-assessment-management-answers-viewer-widget-edit.component-c0ryzonM.mjs.map} +1 -1
  7. package/fesm2022/{acorex-modules-assessment-management-answers-viewer-widget-view.component-Dh4GAatw.mjs → acorex-modules-assessment-management-answers-viewer-widget-view.component-BOuzufN6.mjs} +2 -2
  8. package/fesm2022/{acorex-modules-assessment-management-answers-viewer-widget-view.component-Dh4GAatw.mjs.map → acorex-modules-assessment-management-answers-viewer-widget-view.component-BOuzufN6.mjs.map} +1 -1
  9. package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-oliZ_Wk_.mjs → acorex-modules-assessment-management-assessment-case.entity-yMC4T30A.mjs} +2 -2
  10. package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-oliZ_Wk_.mjs.map → acorex-modules-assessment-management-assessment-case.entity-yMC4T30A.mjs.map} +1 -1
  11. package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-DD4GUa6H.mjs → acorex-modules-assessment-management-assessment-session.entity-boi7xntr.mjs} +2 -2
  12. package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-DD4GUa6H.mjs.map → acorex-modules-assessment-management-assessment-session.entity-boi7xntr.mjs.map} +1 -1
  13. package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-CMnXyhcS.mjs → acorex-modules-assessment-management-fill-assessment-session.command-CIywSVKe.mjs} +3 -3
  14. package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-CMnXyhcS.mjs.map → acorex-modules-assessment-management-fill-assessment-session.command-CIywSVKe.mjs.map} +1 -1
  15. package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-Db9SiDFY.mjs → acorex-modules-assessment-management-preview-questionnaire.command-gQ-Gg2EI.mjs} +4 -4
  16. package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-Db9SiDFY.mjs.map → acorex-modules-assessment-management-preview-questionnaire.command-gQ-Gg2EI.mjs.map} +1 -1
  17. package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-6TlXMGHR.mjs → acorex-modules-assessment-management-question-bank-item.entity-BJi5O2hZ.mjs} +2 -2
  18. package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-6TlXMGHR.mjs.map → acorex-modules-assessment-management-question-bank-item.entity-BJi5O2hZ.mjs.map} +1 -1
  19. package/fesm2022/{acorex-modules-assessment-management-questionnaire-builder-edit.component-fekQ1wRZ.mjs → acorex-modules-assessment-management-questionnaire-builder-edit.component-CQQNQQIY.mjs} +2 -2
  20. package/fesm2022/{acorex-modules-assessment-management-questionnaire-builder-edit.component-fekQ1wRZ.mjs.map → acorex-modules-assessment-management-questionnaire-builder-edit.component-CQQNQQIY.mjs.map} +1 -1
  21. package/fesm2022/{acorex-modules-assessment-management-questionnaire-builder-view.component-Bn0yoxWv.mjs → acorex-modules-assessment-management-questionnaire-builder-view.component-2CgpHl4g.mjs} +2 -2
  22. package/fesm2022/{acorex-modules-assessment-management-questionnaire-builder-view.component-Bn0yoxWv.mjs.map → acorex-modules-assessment-management-questionnaire-builder-view.component-2CgpHl4g.mjs.map} +1 -1
  23. package/fesm2022/{acorex-modules-assessment-management-questionnaire-builder.component-CfLJ27Ob.mjs → acorex-modules-assessment-management-questionnaire-builder.component-DAOND6qy.mjs} +3 -3
  24. package/fesm2022/{acorex-modules-assessment-management-questionnaire-builder.component-CfLJ27Ob.mjs.map → acorex-modules-assessment-management-questionnaire-builder.component-DAOND6qy.mjs.map} +1 -1
  25. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-BqxEvzqZ.mjs → acorex-modules-assessment-management-questionnaire-viewer-popup.component-Bbj8DGdn.mjs} +2 -2
  26. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-BqxEvzqZ.mjs.map → acorex-modules-assessment-management-questionnaire-viewer-popup.component-Bbj8DGdn.mjs.map} +1 -1
  27. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer.service-BhYlcsrV.mjs → acorex-modules-assessment-management-questionnaire-viewer.service-d8xlbs8Z.mjs} +2 -2
  28. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer.service-BhYlcsrV.mjs.map → acorex-modules-assessment-management-questionnaire-viewer.service-d8xlbs8Z.mjs.map} +1 -1
  29. package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-CrnOr1-B.mjs → acorex-modules-assessment-management-questionnaire.entity-eQ29UST5.mjs} +2 -2
  30. package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-CrnOr1-B.mjs.map → acorex-modules-assessment-management-questionnaire.entity-eQ29UST5.mjs.map} +1 -1
  31. package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-CZe4mSEi.mjs → acorex-modules-assessment-management-view-session-answers.command-Z-Nk-9SY.mjs} +3 -3
  32. package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-CZe4mSEi.mjs.map → acorex-modules-assessment-management-view-session-answers.command-Z-Nk-9SY.mjs.map} +1 -1
  33. package/fesm2022/acorex-modules-assessment-management.mjs +1 -1
  34. package/fesm2022/{acorex-modules-auth-acorex-modules-auth-HBjLE7aN.mjs → acorex-modules-auth-acorex-modules-auth-DbJdPw6r.mjs} +11 -11
  35. package/fesm2022/{acorex-modules-auth-acorex-modules-auth-HBjLE7aN.mjs.map → acorex-modules-auth-acorex-modules-auth-DbJdPw6r.mjs.map} +1 -1
  36. package/fesm2022/{acorex-modules-auth-app-chooser.component-4w3jVTCM.mjs → acorex-modules-auth-app-chooser.component-C3-Owzk3.mjs} +2 -2
  37. package/fesm2022/{acorex-modules-auth-app-chooser.component-4w3jVTCM.mjs.map → acorex-modules-auth-app-chooser.component-C3-Owzk3.mjs.map} +1 -1
  38. package/fesm2022/{acorex-modules-auth-login.module-C7zKK9Cq.mjs → acorex-modules-auth-login.module-DWVzAe71.mjs} +4 -4
  39. package/fesm2022/{acorex-modules-auth-login.module-C7zKK9Cq.mjs.map → acorex-modules-auth-login.module-DWVzAe71.mjs.map} +1 -1
  40. package/fesm2022/{acorex-modules-auth-master.layout-C_F0t2Pw.mjs → acorex-modules-auth-master.layout-CRGoKIyG.mjs} +2 -2
  41. package/fesm2022/{acorex-modules-auth-master.layout-C_F0t2Pw.mjs.map → acorex-modules-auth-master.layout-CRGoKIyG.mjs.map} +1 -1
  42. package/fesm2022/{acorex-modules-auth-oauth-callback.component-D65wq-WJ.mjs → acorex-modules-auth-oauth-callback.component-BbYMC-Ue.mjs} +2 -2
  43. package/fesm2022/{acorex-modules-auth-oauth-callback.component-D65wq-WJ.mjs.map → acorex-modules-auth-oauth-callback.component-BbYMC-Ue.mjs.map} +1 -1
  44. package/fesm2022/{acorex-modules-auth-password.component-CCC116bI.mjs → acorex-modules-auth-password.component-99M7R15t.mjs} +4 -4
  45. package/fesm2022/acorex-modules-auth-password.component-99M7R15t.mjs.map +1 -0
  46. package/fesm2022/{acorex-modules-auth-password.component-B1GLfSy9.mjs → acorex-modules-auth-password.component-C6mlKjXP.mjs} +3 -3
  47. package/fesm2022/acorex-modules-auth-password.component-C6mlKjXP.mjs.map +1 -0
  48. package/fesm2022/{acorex-modules-auth-routes-DmDkUeHY.mjs → acorex-modules-auth-routes-BOhInfU0.mjs} +2 -2
  49. package/fesm2022/{acorex-modules-auth-routes-DmDkUeHY.mjs.map → acorex-modules-auth-routes-BOhInfU0.mjs.map} +1 -1
  50. package/fesm2022/{acorex-modules-auth-tenant-chooser.component-DZKmZyWk.mjs → acorex-modules-auth-tenant-chooser.component-h5qiAik2.mjs} +2 -2
  51. package/fesm2022/{acorex-modules-auth-tenant-chooser.component-DZKmZyWk.mjs.map → acorex-modules-auth-tenant-chooser.component-h5qiAik2.mjs.map} +1 -1
  52. package/fesm2022/{acorex-modules-auth-two-factor-code.component-CSGhGYVU.mjs → acorex-modules-auth-two-factor-code.component-CrP_8k0o.mjs} +2 -2
  53. package/fesm2022/acorex-modules-auth-two-factor-code.component-CrP_8k0o.mjs.map +1 -0
  54. package/fesm2022/{acorex-modules-auth-two-factor.module-DsD1WH-_.mjs → acorex-modules-auth-two-factor.module-B52z5Pre.mjs} +3 -3
  55. package/fesm2022/{acorex-modules-auth-two-factor.module-DsD1WH-_.mjs.map → acorex-modules-auth-two-factor.module-B52z5Pre.mjs.map} +1 -1
  56. package/fesm2022/{acorex-modules-auth-user-sessions.component-DPR059of.mjs → acorex-modules-auth-user-sessions.component-5YAm7mZv.mjs} +2 -2
  57. package/fesm2022/{acorex-modules-auth-user-sessions.component-DPR059of.mjs.map → acorex-modules-auth-user-sessions.component-5YAm7mZv.mjs.map} +1 -1
  58. package/fesm2022/acorex-modules-auth.mjs +1 -1
  59. package/fesm2022/{acorex-modules-document-management-link-dialog.component-C6Q2thLJ.mjs → acorex-modules-document-management-link-dialog.component-Civ7UZb8.mjs} +2 -2
  60. package/fesm2022/acorex-modules-document-management-link-dialog.component-Civ7UZb8.mjs.map +1 -0
  61. package/fesm2022/{acorex-modules-document-management-share-dialog.component-CyqY25u5.mjs → acorex-modules-document-management-share-dialog.component-BwUZShJg.mjs} +2 -2
  62. package/fesm2022/acorex-modules-document-management-share-dialog.component-BwUZShJg.mjs.map +1 -0
  63. package/fesm2022/{acorex-modules-document-management-share-email-dialog.component-DbOBvVj3.mjs → acorex-modules-document-management-share-email-dialog.component-BMiCmb1k.mjs} +2 -2
  64. package/fesm2022/acorex-modules-document-management-share-email-dialog.component-BMiCmb1k.mjs.map +1 -0
  65. package/fesm2022/acorex-modules-document-management.mjs +30 -38
  66. package/fesm2022/acorex-modules-document-management.mjs.map +1 -1
  67. package/fesm2022/{acorex-modules-help-desk-acorex-modules-help-desk-DqnjNpEx.mjs → acorex-modules-help-desk-acorex-modules-help-desk-CA1t2gEZ.mjs} +3 -3
  68. package/fesm2022/{acorex-modules-help-desk-acorex-modules-help-desk-DqnjNpEx.mjs.map → acorex-modules-help-desk-acorex-modules-help-desk-CA1t2gEZ.mjs.map} +1 -1
  69. package/fesm2022/{acorex-modules-help-desk-capture-screen.component-7zCCgi2E.mjs → acorex-modules-help-desk-capture-screen.component-Bnrk1dPT.mjs} +2 -2
  70. package/fesm2022/{acorex-modules-help-desk-capture-screen.component-7zCCgi2E.mjs.map → acorex-modules-help-desk-capture-screen.component-Bnrk1dPT.mjs.map} +1 -1
  71. package/fesm2022/acorex-modules-help-desk.mjs +1 -1
  72. package/fesm2022/{acorex-modules-meeting-management-meeting-publish-popup.component-Inwn6yaO.mjs → acorex-modules-meeting-management-meeting-publish-popup.component-B7NAg4MD.mjs} +2 -2
  73. package/fesm2022/acorex-modules-meeting-management-meeting-publish-popup.component-B7NAg4MD.mjs.map +1 -0
  74. package/fesm2022/acorex-modules-meeting-management.mjs +1 -1
  75. package/fesm2022/{acorex-modules-settings-management-acorex-modules-settings-management-BYFduyOb.mjs → acorex-modules-settings-management-acorex-modules-settings-management-BRVfUYiM.mjs} +5 -5
  76. package/fesm2022/{acorex-modules-settings-management-acorex-modules-settings-management-BYFduyOb.mjs.map → acorex-modules-settings-management-acorex-modules-settings-management-BRVfUYiM.mjs.map} +1 -1
  77. package/fesm2022/{acorex-modules-settings-management-permission-definition.provider-B1yQvXMb.mjs → acorex-modules-settings-management-permission-definition.provider-WSxrvAsV.mjs} +2 -2
  78. package/fesm2022/{acorex-modules-settings-management-permission-definition.provider-B1yQvXMb.mjs.map → acorex-modules-settings-management-permission-definition.provider-WSxrvAsV.mjs.map} +1 -1
  79. package/fesm2022/{acorex-modules-settings-management-setting-page.component-DE4fv4Y8.mjs → acorex-modules-settings-management-setting-page.component-MYnJYUxE.mjs} +2 -2
  80. package/fesm2022/{acorex-modules-settings-management-setting-page.component-DE4fv4Y8.mjs.map → acorex-modules-settings-management-setting-page.component-MYnJYUxE.mjs.map} +1 -1
  81. package/fesm2022/{acorex-modules-settings-management-setting-view.component-CY6eBCDV.mjs → acorex-modules-settings-management-setting-view.component-Cq80snth.mjs} +3 -3
  82. package/fesm2022/acorex-modules-settings-management-setting-view.component-Cq80snth.mjs.map +1 -0
  83. package/fesm2022/acorex-modules-settings-management.mjs +1 -1
  84. package/fesm2022/{acorex-modules-task-management-task-board.page-BvDWiiTL.mjs → acorex-modules-task-management-task-board.page-CIlxqtgJ.mjs} +92 -30
  85. package/fesm2022/acorex-modules-task-management-task-board.page-CIlxqtgJ.mjs.map +1 -0
  86. package/fesm2022/acorex-modules-task-management.mjs +1 -1
  87. package/package.json +2 -2
  88. package/fesm2022/acorex-modules-auth-password.component-B1GLfSy9.mjs.map +0 -1
  89. package/fesm2022/acorex-modules-auth-password.component-CCC116bI.mjs.map +0 -1
  90. package/fesm2022/acorex-modules-auth-two-factor-code.component-CSGhGYVU.mjs.map +0 -1
  91. package/fesm2022/acorex-modules-document-management-link-dialog.component-C6Q2thLJ.mjs.map +0 -1
  92. package/fesm2022/acorex-modules-document-management-share-dialog.component-CyqY25u5.mjs.map +0 -1
  93. package/fesm2022/acorex-modules-document-management-share-email-dialog.component-DbOBvVj3.mjs.map +0 -1
  94. package/fesm2022/acorex-modules-meeting-management-meeting-publish-popup.component-Inwn6yaO.mjs.map +0 -1
  95. package/fesm2022/acorex-modules-settings-management-setting-view.component-CY6eBCDV.mjs.map +0 -1
  96. package/fesm2022/acorex-modules-task-management-task-board.page-BvDWiiTL.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-modules-task-management-task-board.page-CIlxqtgJ.mjs","sources":["../tmp-esm2022/task-management/lib/features/task-board/settings.keys.js","../tmp-esm2022/task-management/lib/features/task-board/task-board.viewmodel.js","../tmp-esm2022/task-management/lib/features/task-board/task-board-detail-panel/task-board-detail-panel.component.js","../tmp-esm2022/task-management/lib/features/task-board/task-board-filters/task-board-filters.component.js","../tmp-esm2022/task-management/lib/features/task-board/views/task-board-calendar-view/task-board-calendar-view.component.js","../tmp-esm2022/task-management/lib/features/task-board/views/task-board-grid-view/task-board-grid-view.component.js","../tmp-esm2022/task-management/lib/features/task-board/views/task-board-kanban-view/task-board-kanban-view.component.js","../tmp-esm2022/task-management/lib/features/task-board/views/task-board-status-grouped-grid-view/task-board-status-grouped-grid-view.component.js","../tmp-esm2022/task-management/lib/features/task-board/task-board.page.js"],"sourcesContent":["export var AXMTaskBoardSettings;\n(function (AXMTaskBoardSettings) {\n AXMTaskBoardSettings[\"ViewMode\"] = \"taskboard.viewMode\";\n AXMTaskBoardSettings[\"DetailPanel\"] = \"taskboard.DetailPanel\";\n AXMTaskBoardSettings[\"DaysCount\"] = \"taskboard.calendar.daysCount\";\n AXMTaskBoardSettings[\"CurrentDate\"] = \"taskboard.calendar.currentDate\";\n AXMTaskBoardSettings[\"SelectedPriorities\"] = \"taskboard.filter.selectedPriorities\";\n AXMTaskBoardSettings[\"SelectedAssigneeIds\"] = \"taskboard.filter.selectedAssigneeIds\";\n AXMTaskBoardSettings[\"SelectedReporterIds\"] = \"taskboard.filter.selectedReporterIds\";\n AXMTaskBoardSettings[\"SelectedTaskTypeNames\"] = \"taskboard.filter.selectedTaskTypeNames\";\n AXMTaskBoardSettings[\"SelectedCalendarEventTypeIds\"] = \"taskboard.filter.selectedCalendarEventTypeIds\";\n})(AXMTaskBoardSettings || (AXMTaskBoardSettings = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3Mua2V5cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy90YXNrLW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy90YXNrLWJvYXJkL3NldHRpbmdzLmtleXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFOLElBQVksb0JBVVg7QUFWRCxXQUFZLG9CQUFvQjtJQUM5Qix1REFBK0IsQ0FBQTtJQUMvQiw2REFBcUMsQ0FBQTtJQUNyQyxrRUFBMEMsQ0FBQTtJQUMxQyxzRUFBOEMsQ0FBQTtJQUM5QyxrRkFBMEQsQ0FBQTtJQUMxRCxvRkFBNEQsQ0FBQTtJQUM1RCxvRkFBNEQsQ0FBQTtJQUM1RCx3RkFBZ0UsQ0FBQTtJQUNoRSxzR0FBOEUsQ0FBQTtBQUNoRixDQUFDLEVBVlcsb0JBQW9CLEtBQXBCLG9CQUFvQixRQVUvQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIEFYTVRhc2tCb2FyZFNldHRpbmdzIHtcbiAgVmlld01vZGUgPSAndGFza2JvYXJkLnZpZXdNb2RlJyxcbiAgRGV0YWlsUGFuZWwgPSAndGFza2JvYXJkLkRldGFpbFBhbmVsJyxcbiAgRGF5c0NvdW50ID0gJ3Rhc2tib2FyZC5jYWxlbmRhci5kYXlzQ291bnQnLFxuICBDdXJyZW50RGF0ZSA9ICd0YXNrYm9hcmQuY2FsZW5kYXIuY3VycmVudERhdGUnLFxuICBTZWxlY3RlZFByaW9yaXRpZXMgPSAndGFza2JvYXJkLmZpbHRlci5zZWxlY3RlZFByaW9yaXRpZXMnLFxuICBTZWxlY3RlZEFzc2lnbmVlSWRzID0gJ3Rhc2tib2FyZC5maWx0ZXIuc2VsZWN0ZWRBc3NpZ25lZUlkcycsXG4gIFNlbGVjdGVkUmVwb3J0ZXJJZHMgPSAndGFza2JvYXJkLmZpbHRlci5zZWxlY3RlZFJlcG9ydGVySWRzJyxcbiAgU2VsZWN0ZWRUYXNrVHlwZU5hbWVzID0gJ3Rhc2tib2FyZC5maWx0ZXIuc2VsZWN0ZWRUYXNrVHlwZU5hbWVzJyxcbiAgU2VsZWN0ZWRDYWxlbmRhckV2ZW50VHlwZUlkcyA9ICd0YXNrYm9hcmQuZmlsdGVyLnNlbGVjdGVkQ2FsZW5kYXJFdmVudFR5cGVJZHMnLFxufVxuIl19","import { AXPSettingsService } from '@acorex/platform/common';\nimport { AXPPlatformScope } from '@acorex/platform/core';\nimport { computed, inject } from '@angular/core';\nimport { patchState, signalStore, withComputed, withMethods, withState } from '@ngrx/signals';\nimport { AXMTaskBoardSettings } from './settings.keys';\nimport { AXPTaskBoardService } from './task-board.service';\nexport const AXMTaskBoardViewModel = signalStore({ providedIn: 'root' }, withState(() => ({\n daysCount: 7,\n taskTypes: [],\n isLoading: true,\n detailPanel: false,\n selectedTask: null,\n rangeStartDate: null,\n currentDate: new Date(),\n currentViewMode: 'month',\n selectedTaskTypeNames: [],\n selectedAssigneeIds: [],\n selectedPriorities: [],\n selectedReporterIds: [],\n selectedCalendarEventTypeIds: [],\n})), withComputed((store) => ({\n selectedTaskTypes: computed(() => {\n const names = store.selectedTaskTypeNames();\n if (!names || names.length === 0) {\n return [];\n }\n return store.taskTypes().filter((tt) => names.includes(tt.name));\n }),\n isTaskSelected: computed(() => store.selectedTask() !== null),\n isDetailPanelOpen: computed(() => store.detailPanel()),\n endDate: computed(() => {\n const currentDate = store.currentDate();\n const daysCount = store.daysCount();\n return new Date(currentDate.getTime() + daysCount * 24 * 60 * 60 * 1000);\n }),\n activeFilterCount: computed(() => {\n let count = 0;\n if (store.currentViewMode() !== 'kanban' &&\n store.currentViewMode() !== 'status-grouped-grid' &&\n store.selectedTaskTypeNames().length > 0) {\n count++;\n }\n if (store.selectedAssigneeIds().length > 0) {\n count++;\n }\n if (store.selectedReporterIds().length > 0) {\n count++;\n }\n if (store.selectedPriorities().length > 0) {\n count++;\n }\n return count;\n }),\n})), withMethods((store, settingsService = inject(AXPSettingsService), taskBoardService = inject(AXPTaskBoardService)) => {\n const userScopedSettings = () => settingsService.scope(AXPPlatformScope.User);\n return {\n async initialize() {\n patchState(store, { isLoading: true });\n try {\n const taskTypes = await taskBoardService.getTaskTypes();\n patchState(store, { taskTypes });\n const [savedDaysCount, savedDateString, savedDetailPanel, savedViewMode, savedTaskTypeNames, savedAssigneeIds, savedReporterIds, savedPriorities, savedCalendarEventTypeIds,] = await Promise.all([\n userScopedSettings().get(AXMTaskBoardSettings.DaysCount),\n userScopedSettings().get(AXMTaskBoardSettings.CurrentDate),\n userScopedSettings().get(AXMTaskBoardSettings.DetailPanel),\n userScopedSettings().get(AXMTaskBoardSettings.ViewMode),\n userScopedSettings().get(AXMTaskBoardSettings.SelectedTaskTypeNames),\n userScopedSettings().get(AXMTaskBoardSettings.SelectedAssigneeIds),\n userScopedSettings().get(AXMTaskBoardSettings.SelectedReporterIds),\n userScopedSettings().get(AXMTaskBoardSettings.SelectedPriorities),\n userScopedSettings().get(AXMTaskBoardSettings.SelectedCalendarEventTypeIds),\n ]);\n // Ensure currentDate is always a valid Date\n let currentDate;\n if (savedDateString) {\n const parsedDate = new Date(savedDateString);\n currentDate = isNaN(parsedDate.getTime()) ? new Date() : parsedDate;\n }\n else {\n currentDate = new Date();\n }\n patchState(store, {\n daysCount: savedDaysCount || 7,\n detailPanel: savedDetailPanel || false,\n currentViewMode: savedViewMode || 'month',\n currentDate,\n selectedTaskTypeNames: savedTaskTypeNames || [],\n selectedAssigneeIds: savedAssigneeIds || [],\n selectedReporterIds: savedReporterIds || [],\n selectedPriorities: savedPriorities || [],\n selectedCalendarEventTypeIds: savedCalendarEventTypeIds || [],\n isLoading: false,\n });\n }\n catch (error) {\n console.error('Error initializing TaskBoard ViewModel:', error);\n patchState(store, {\n detailPanel: false,\n currentViewMode: 'month',\n currentDate: new Date(),\n selectedTaskTypeNames: [],\n selectedAssigneeIds: [],\n selectedPriorities: [],\n selectedReporterIds: [],\n selectedCalendarEventTypeIds: [],\n taskTypes: store.taskTypes(),\n isLoading: false,\n });\n }\n },\n setViewMode(mode) {\n if ((mode === 'kanban' || mode === 'status-grouped-grid') && store.selectedTaskTypeNames().length === 0) {\n const firstTaskType = store.taskTypes()[0];\n if (firstTaskType) {\n this.setSelectedTaskTypeNames([firstTaskType.name]);\n }\n }\n if ((mode === 'kanban' || mode === 'status-grouped-grid') && store.selectedTaskTypeNames().length > 1) {\n this.setSelectedTaskTypeNames([store.selectedTaskTypeNames()[0]]);\n }\n patchState(store, { currentViewMode: mode });\n userScopedSettings()\n .set(AXMTaskBoardSettings.ViewMode, mode)\n .catch((error) => console.error('Error saving calendar view mode:', error));\n },\n setCurrentDate(date) {\n patchState(store, { currentDate: new Date(date) });\n userScopedSettings()\n .set(AXMTaskBoardSettings.CurrentDate, date.toISOString())\n .catch((error) => console.error('Error saving current date:', error));\n },\n setSelectedTaskTypeNames(taskTypeNames, isQueryParam = false) {\n patchState(store, { selectedTaskTypeNames: taskTypeNames });\n if (isQueryParam)\n return;\n userScopedSettings()\n .set(AXMTaskBoardSettings.SelectedTaskTypeNames, taskTypeNames)\n .catch((error) => console.error('Error saving selected task type filter:', error));\n },\n setSelectedAssigneeIds(assigneeIds, isQueryParam = false) {\n patchState(store, { selectedAssigneeIds: assigneeIds });\n if (isQueryParam)\n return;\n userScopedSettings()\n .set(AXMTaskBoardSettings.SelectedAssigneeIds, assigneeIds)\n .catch((error) => console.error('Error saving selected assignee filter:', error));\n },\n setSelectedReporterIds(reporterIds, isQueryParam = false) {\n patchState(store, { selectedReporterIds: reporterIds });\n if (isQueryParam)\n return;\n userScopedSettings()\n .set(AXMTaskBoardSettings.SelectedReporterIds, reporterIds)\n .catch((error) => console.error('Error saving selected reporter filter:', error));\n },\n setSelectedPriorities(priorities, isQueryParam = false) {\n patchState(store, { selectedPriorities: priorities });\n if (isQueryParam)\n return;\n userScopedSettings()\n .set(AXMTaskBoardSettings.SelectedPriorities, priorities)\n .catch((error) => console.error('Error saving selected priority filter:', error));\n },\n setSelectedCalendarEventTypeIds(eventTypeIds, isQueryParam = false) {\n patchState(store, { selectedCalendarEventTypeIds: eventTypeIds });\n if (isQueryParam)\n return;\n userScopedSettings()\n .set(AXMTaskBoardSettings.SelectedCalendarEventTypeIds, eventTypeIds)\n .catch((error) => console.error('Error saving selected calendar event type filter:', error));\n },\n /**\n * Sets the currently selected task. Pass `null` to clear the selection.\n * @param task The task to select, or null.\n */\n selectTask(task) {\n patchState(store, { selectedTask: task });\n },\n /**\n * A convenience method to clear the currently selected task.\n */\n clearSelectedTask() {\n patchState(store, { selectedTask: null });\n },\n openDetailPanel() {\n patchState(store, { detailPanel: true });\n userScopedSettings()\n .set(AXMTaskBoardSettings.DetailPanel, true)\n .catch((error) => console.error('Error saving detail panel:', error));\n },\n closeDetailPanel() {\n patchState(store, { detailPanel: false });\n userScopedSettings()\n .set(AXMTaskBoardSettings.DetailPanel, false)\n .catch((error) => console.error('Error saving detail panel:', error));\n },\n toggleDetailPanel() {\n const detailPanel = !store.detailPanel();\n patchState(store, { detailPanel: detailPanel });\n userScopedSettings()\n .set(AXMTaskBoardSettings.DetailPanel, detailPanel)\n .catch((error) => console.error('Error saving detail panel:', error));\n },\n async getStatusName(key, provider) {\n return taskBoardService.getStatusName(key, provider);\n },\n /**\n * Sets the start date for a new range selection.\n * Pass `null` to clear the selection.\n * @param date The start date of the range.\n */\n setRangeStartDate(date) {\n patchState(store, { rangeStartDate: date });\n },\n setDaysCount(days) {\n const count = Math.max(1, days);\n patchState(store, { daysCount: count });\n userScopedSettings()\n .set(AXMTaskBoardSettings.DaysCount, count)\n .catch((error) => console.error('Error saving days count:', error));\n },\n };\n}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1ib2FyZC52aWV3bW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvdGFzay1tYW5hZ2VtZW50L3NyYy9saWIvZmVhdHVyZXMvdGFzay1ib2FyZC90YXNrLWJvYXJkLnZpZXdtb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQXVCM0QsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsV0FBVyxDQUM5QyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsRUFDdEIsU0FBUyxDQUFvQixHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLFNBQVMsRUFBRSxDQUFDO0lBQ1osU0FBUyxFQUFFLEVBQUU7SUFDYixTQUFTLEVBQUUsSUFBSTtJQUNmLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFlBQVksRUFBRSxJQUFJO0lBQ2xCLGNBQWMsRUFBRSxJQUFJO0lBQ3BCLFdBQVcsRUFBRSxJQUFJLElBQUksRUFBRTtJQUN2QixlQUFlLEVBQUUsT0FBTztJQUN4QixxQkFBcUIsRUFBRSxFQUFFO0lBQ3pCLG1CQUFtQixFQUFFLEVBQUU7SUFDdkIsa0JBQWtCLEVBQUUsRUFBRTtJQUN0QixtQkFBbUIsRUFBRSxFQUFFO0lBQ3ZCLDRCQUE0QixFQUFFLEVBQUU7Q0FDakMsQ0FBQyxDQUFDLEVBRUgsWUFBWSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZCLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDL0IsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDNUMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDLENBQUM7SUFDRixjQUFjLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsS0FBSyxJQUFJLENBQUM7SUFDN0QsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN0RCxPQUFPLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUNyQixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDeEMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3BDLE9BQU8sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLFNBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUMzRSxDQUFDLENBQUM7SUFDRixpQkFBaUIsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQy9CLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNkLElBQ0UsS0FBSyxDQUFDLGVBQWUsRUFBRSxLQUFLLFFBQVE7WUFDcEMsS0FBSyxDQUFDLGVBQWUsRUFBRSxLQUFLLHFCQUFxQjtZQUNqRCxLQUFLLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUN4QyxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUM7UUFDVixDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDM0MsS0FBSyxFQUFFLENBQUM7UUFDVixDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDM0MsS0FBSyxFQUFFLENBQUM7UUFDVixDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUMsS0FBSyxFQUFFLENBQUM7UUFDVixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDLENBQUM7Q0FDSCxDQUFDLENBQUMsRUFFSCxXQUFXLENBQUMsQ0FBQyxLQUFLLEVBQUUsZUFBZSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEVBQUU7SUFDbEgsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTlFLE9BQU87UUFDTCxLQUFLLENBQUMsVUFBVTtZQUNkLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxTQUFTLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDeEQsVUFBVSxDQUFDLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7Z0JBRWpDLE1BQU0sQ0FDSixjQUFjLEVBQ2QsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixhQUFhLEVBQ2Isa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLHlCQUF5QixFQUMxQixHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztvQkFDcEIsa0JBQWtCLEVBQUUsQ0FBQyxHQUFHLENBQXFCLG9CQUFvQixDQUFDLFNBQVMsQ0FBQztvQkFDNUUsa0JBQWtCLEVBQUUsQ0FBQyxHQUFHLENBQXFCLG9CQUFvQixDQUFDLFdBQVcsQ0FBQztvQkFDOUUsa0JBQWtCLEVBQUUsQ0FBQyxHQUFHLENBQXNCLG9CQUFvQixDQUFDLFdBQVcsQ0FBQztvQkFDL0Usa0JBQWtCLEVBQUUsQ0FBQyxHQUFHLENBQW1DLG9CQUFvQixDQUFDLFFBQVEsQ0FBQztvQkFDekYsa0JBQWtCLEVBQUUsQ0FBQyxHQUFHLENBQXVCLG9CQUFvQixDQUFDLHFCQUFxQixDQUFDO29CQUMxRixrQkFBa0IsRUFBRSxDQUFDLEdBQUcsQ0FBa0Msb0JBQW9CLENBQUMsbUJBQW1CLENBQUM7b0JBQ25HLGtCQUFrQixFQUFFLENBQUMsR0FBRyxDQUFrQyxvQkFBb0IsQ0FBQyxtQkFBbUIsQ0FBQztvQkFDbkcsa0JBQWtCLEVBQUUsQ0FBQyxHQUFHLENBQXFDLG9CQUFvQixDQUFDLGtCQUFrQixDQUFDO29CQUNyRyxrQkFBa0IsRUFBRSxDQUFDLEdBQUcsQ0FBdUIsb0JBQW9CLENBQUMsNEJBQTRCLENBQUM7aUJBQ2xHLENBQUMsQ0FBQztnQkFFSCw0Q0FBNEM7Z0JBQzVDLElBQUksV0FBaUIsQ0FBQztnQkFDdEIsSUFBSSxlQUFlLEVBQUUsQ0FBQztvQkFDcEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7b0JBQzdDLFdBQVcsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztnQkFDdEUsQ0FBQztxQkFBTSxDQUFDO29CQUNOLFdBQVcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUMzQixDQUFDO2dCQUVELFVBQVUsQ0FBQyxLQUFLLEVBQUU7b0JBQ2hCLFNBQVMsRUFBRSxjQUFjLElBQUksQ0FBQztvQkFDOUIsV0FBVyxFQUFFLGdCQUFnQixJQUFJLEtBQUs7b0JBQ3RDLGVBQWUsRUFBRSxhQUFhLElBQUksT0FBTztvQkFDekMsV0FBVztvQkFDWCxxQkFBcUIsRUFBRSxrQkFBa0IsSUFBSSxFQUFFO29CQUMvQyxtQkFBbUIsRUFBRSxnQkFBZ0IsSUFBSSxFQUFFO29CQUMzQyxtQkFBbUIsRUFBRSxnQkFBZ0IsSUFBSSxFQUFFO29CQUMzQyxrQkFBa0IsRUFBRSxlQUFlLElBQUksRUFBRTtvQkFDekMsNEJBQTRCLEVBQUUseUJBQXlCLElBQUksRUFBRTtvQkFDN0QsU0FBUyxFQUFFLEtBQUs7aUJBQ2pCLENBQUMsQ0FBQztZQUNMLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMseUNBQXlDLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2hFLFVBQVUsQ0FBQyxLQUFLLEVBQUU7b0JBQ2hCLFdBQVcsRUFBRSxLQUFLO29CQUNsQixlQUFlLEVBQUUsT0FBTztvQkFDeEIsV0FBVyxFQUFFLElBQUksSUFBSSxFQUFFO29CQUN2QixxQkFBcUIsRUFBRSxFQUFFO29CQUN6QixtQkFBbUIsRUFBRSxFQUFFO29CQUN2QixrQkFBa0IsRUFBRSxFQUFFO29CQUN0QixtQkFBbUIsRUFBRSxFQUFFO29CQUN2Qiw0QkFBNEIsRUFBRSxFQUFFO29CQUNoQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRTtvQkFDNUIsU0FBUyxFQUFFLEtBQUs7aUJBQ2pCLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO1FBRUQsV0FBVyxDQUFDLElBQTBCO1lBQ3BDLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksS0FBSyxxQkFBcUIsQ0FBQyxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDeEcsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLGFBQWEsRUFBRSxDQUFDO29CQUNsQixJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDdEQsQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxJQUFJLEtBQUsscUJBQXFCLENBQUMsSUFBSSxLQUFLLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwRSxDQUFDO1lBQ0QsVUFBVSxDQUFDLEtBQUssRUFBRSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLGtCQUFrQixFQUFFO2lCQUNqQixHQUFHLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQztpQkFDeEMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDaEYsQ0FBQztRQUVELGNBQWMsQ0FBQyxJQUFVO1lBQ3ZCLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25ELGtCQUFrQixFQUFFO2lCQUNqQixHQUFHLENBQUMsb0JBQW9CLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztpQkFDekQsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLDRCQUE0QixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDMUUsQ0FBQztRQUVELHdCQUF3QixDQUFDLGFBQXVCLEVBQUUsZUFBd0IsS0FBSztZQUM3RSxVQUFVLENBQUMsS0FBSyxFQUFFLEVBQUUscUJBQXFCLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUM1RCxJQUFJLFlBQVk7Z0JBQUUsT0FBTztZQUN6QixrQkFBa0IsRUFBRTtpQkFDakIsR0FBRyxDQUFDLG9CQUFvQixDQUFDLHFCQUFxQixFQUFFLGFBQWEsQ0FBQztpQkFDOUQsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLHlDQUF5QyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDdkYsQ0FBQztRQUVELHNCQUFzQixDQUFDLFdBQWdDLEVBQUUsZUFBd0IsS0FBSztZQUNwRixVQUFVLENBQUMsS0FBSyxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUN4RCxJQUFJLFlBQVk7Z0JBQUUsT0FBTztZQUN6QixrQkFBa0IsRUFBRTtpQkFDakIsR0FBRyxDQUFDLG9CQUFvQixDQUFDLG1CQUFtQixFQUFFLFdBQVcsQ0FBQztpQkFDMUQsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLHdDQUF3QyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDdEYsQ0FBQztRQUVELHNCQUFzQixDQUFDLFdBQWdDLEVBQUUsZUFBd0IsS0FBSztZQUNwRixVQUFVLENBQUMsS0FBSyxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUN4RCxJQUFJLFlBQVk7Z0JBQUUsT0FBTztZQUN6QixrQkFBa0IsRUFBRTtpQkFDakIsR0FBRyxDQUFDLG9CQUFvQixDQUFDLG1CQUFtQixFQUFFLFdBQVcsQ0FBQztpQkFDMUQsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLHdDQUF3QyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDdEYsQ0FBQztRQUVELHFCQUFxQixDQUFDLFVBQWtDLEVBQUUsZUFBd0IsS0FBSztZQUNyRixVQUFVLENBQUMsS0FBSyxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUN0RCxJQUFJLFlBQVk7Z0JBQUUsT0FBTztZQUN6QixrQkFBa0IsRUFBRTtpQkFDakIsR0FBRyxDQUFDLG9CQUFvQixDQUFDLGtCQUFrQixFQUFFLFVBQVUsQ0FBQztpQkFDeEQsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLHdDQUF3QyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDdEYsQ0FBQztRQUVELCtCQUErQixDQUFDLFlBQXNCLEVBQUUsZUFBd0IsS0FBSztZQUNuRixVQUFVLENBQUMsS0FBSyxFQUFFLEVBQUUsNEJBQTRCLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztZQUNsRSxJQUFJLFlBQVk7Z0JBQUUsT0FBTztZQUN6QixrQkFBa0IsRUFBRTtpQkFDakIsR0FBRyxDQUFDLG9CQUFvQixDQUFDLDRCQUE0QixFQUFFLFlBQVksQ0FBQztpQkFDcEUsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLG1EQUFtRCxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDakcsQ0FBQztRQUVEOzs7V0FHRztRQUNILFVBQVUsQ0FBQyxJQUFvQjtZQUM3QixVQUFVLENBQUMsS0FBSyxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUVEOztXQUVHO1FBQ0gsaUJBQWlCO1lBQ2YsVUFBVSxDQUFDLEtBQUssRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFFRCxlQUFlO1lBQ2IsVUFBVSxDQUFDLEtBQUssRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3pDLGtCQUFrQixFQUFFO2lCQUNqQixHQUFHLENBQUMsb0JBQW9CLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQztpQkFDM0MsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLDRCQUE0QixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDMUUsQ0FBQztRQUVELGdCQUFnQjtZQUNkLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUMxQyxrQkFBa0IsRUFBRTtpQkFDakIsR0FBRyxDQUFDLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUM7aUJBQzVDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzFFLENBQUM7UUFFRCxpQkFBaUI7WUFDZixNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN6QyxVQUFVLENBQUMsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDaEQsa0JBQWtCLEVBQUU7aUJBQ2pCLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDO2lCQUNsRCxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMxRSxDQUFDO1FBRUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFRLEVBQUUsUUFBZ0I7WUFDNUMsT0FBTyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFFRDs7OztXQUlHO1FBQ0gsaUJBQWlCLENBQUMsSUFBaUI7WUFDakMsVUFBVSxDQUFDLEtBQUssRUFBRSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFFRCxZQUFZLENBQUMsSUFBWTtZQUN2QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNoQyxVQUFVLENBQUMsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDeEMsa0JBQWtCLEVBQUU7aUJBQ2pCLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDO2lCQUMxQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN4RSxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMsQ0FBQyxDQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFNjaGVkdWxlclZpZXcgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvc2NoZWR1bGVyJztcbmltcG9ydCB7IEFYUFNldHRpbmdzU2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29tbW9uJztcbmltcG9ydCB7IEFYUFBsYXRmb3JtU2NvcGUgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuaW1wb3J0IHsgY29tcHV0ZWQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgcGF0Y2hTdGF0ZSwgc2lnbmFsU3RvcmUsIHdpdGhDb21wdXRlZCwgd2l0aE1ldGhvZHMsIHdpdGhTdGF0ZSB9IGZyb20gJ0BuZ3J4L3NpZ25hbHMnO1xuaW1wb3J0IHsgQVhNVGFza0JvYXJkU2V0dGluZ3MgfSBmcm9tICcuL3NldHRpbmdzLmtleXMnO1xuaW1wb3J0IHsgQVhQVGFza0JvYXJkU2VydmljZSB9IGZyb20gJy4vdGFzay1ib2FyZC5zZXJ2aWNlJztcbmltcG9ydCB7IEFYUFRhc2ssIEFYUFdvcmtmbG93VGFza1Byb3ZpZGVyIH0gZnJvbSAnLi90YXNrLWJvYXJkLnR5cGVzJztcblxudHlwZSBBWFBUYXNrUHJpb3JpdHkgPSBOb25OdWxsYWJsZTxBWFBUYXNrWydwcmlvcml0eSddPjtcbmV4cG9ydCB0eXBlIEFYUFByaW9yaXR5RmlsdGVyS2V5ID0gQVhQVGFza1ByaW9yaXR5IHwgJ25vX3ByaW9yaXR5JztcbmV4cG9ydCB0eXBlIEFYUFRhc2tCb2FyZFZpZXdNb2RlID0gQVhTY2hlZHVsZXJWaWV3IHwgJ2thbmJhbicgfCAnZ3JpZCcgfCAnc3RhdHVzLWdyb3VwZWQtZ3JpZCc7XG5cbnR5cGUgQVhQVGFza0JvYXJkU3RhdGUgPSB7XG4gIGRheXNDb3VudDogbnVtYmVyO1xuICBjdXJyZW50RGF0ZTogRGF0ZTtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBkZXRhaWxQYW5lbDogYm9vbGVhbjtcbiAgcmFuZ2VTdGFydERhdGU6IERhdGUgfCBudWxsO1xuICBzZWxlY3RlZFRhc2s6IEFYUFRhc2sgfCBudWxsO1xuICBzZWxlY3RlZFRhc2tUeXBlTmFtZXM6IHN0cmluZ1tdO1xuICB0YXNrVHlwZXM6IEFYUFdvcmtmbG93VGFza1Byb3ZpZGVyW107XG4gIGN1cnJlbnRWaWV3TW9kZTogQVhQVGFza0JvYXJkVmlld01vZGU7XG4gIHNlbGVjdGVkUHJpb3JpdGllczogQVhQUHJpb3JpdHlGaWx0ZXJLZXlbXTtcbiAgc2VsZWN0ZWRBc3NpZ25lZUlkczogKHN0cmluZyB8IG51bWJlcilbXTtcbiAgc2VsZWN0ZWRSZXBvcnRlcklkczogKHN0cmluZyB8IG51bWJlcilbXTtcbiAgc2VsZWN0ZWRDYWxlbmRhckV2ZW50VHlwZUlkczogc3RyaW5nW107XG59O1xuXG5leHBvcnQgY29uc3QgQVhNVGFza0JvYXJkVmlld01vZGVsID0gc2lnbmFsU3RvcmUoXG4gIHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0sXG4gIHdpdGhTdGF0ZTxBWFBUYXNrQm9hcmRTdGF0ZT4oKCkgPT4gKHtcbiAgICBkYXlzQ291bnQ6IDcsXG4gICAgdGFza1R5cGVzOiBbXSxcbiAgICBpc0xvYWRpbmc6IHRydWUsXG4gICAgZGV0YWlsUGFuZWw6IGZhbHNlLFxuICAgIHNlbGVjdGVkVGFzazogbnVsbCxcbiAgICByYW5nZVN0YXJ0RGF0ZTogbnVsbCxcbiAgICBjdXJyZW50RGF0ZTogbmV3IERhdGUoKSxcbiAgICBjdXJyZW50Vmlld01vZGU6ICdtb250aCcsXG4gICAgc2VsZWN0ZWRUYXNrVHlwZU5hbWVzOiBbXSxcbiAgICBzZWxlY3RlZEFzc2lnbmVlSWRzOiBbXSxcbiAgICBzZWxlY3RlZFByaW9yaXRpZXM6IFtdLFxuICAgIHNlbGVjdGVkUmVwb3J0ZXJJZHM6IFtdLFxuICAgIHNlbGVjdGVkQ2FsZW5kYXJFdmVudFR5cGVJZHM6IFtdLFxuICB9KSksXG5cbiAgd2l0aENvbXB1dGVkKChzdG9yZSkgPT4gKHtcbiAgICBzZWxlY3RlZFRhc2tUeXBlczogY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgY29uc3QgbmFtZXMgPSBzdG9yZS5zZWxlY3RlZFRhc2tUeXBlTmFtZXMoKTtcbiAgICAgIGlmICghbmFtZXMgfHwgbmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdG9yZS50YXNrVHlwZXMoKS5maWx0ZXIoKHR0KSA9PiBuYW1lcy5pbmNsdWRlcyh0dC5uYW1lKSk7XG4gICAgfSksXG4gICAgaXNUYXNrU2VsZWN0ZWQ6IGNvbXB1dGVkKCgpID0+IHN0b3JlLnNlbGVjdGVkVGFzaygpICE9PSBudWxsKSxcbiAgICBpc0RldGFpbFBhbmVsT3BlbjogY29tcHV0ZWQoKCkgPT4gc3RvcmUuZGV0YWlsUGFuZWwoKSksXG4gICAgZW5kRGF0ZTogY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudERhdGUgPSBzdG9yZS5jdXJyZW50RGF0ZSgpO1xuICAgICAgY29uc3QgZGF5c0NvdW50ID0gc3RvcmUuZGF5c0NvdW50KCk7XG4gICAgICByZXR1cm4gbmV3IERhdGUoY3VycmVudERhdGUuZ2V0VGltZSgpICsgZGF5c0NvdW50ICogMjQgKiA2MCAqIDYwICogMTAwMCk7XG4gICAgfSksXG4gICAgYWN0aXZlRmlsdGVyQ291bnQ6IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICBpZiAoXG4gICAgICAgIHN0b3JlLmN1cnJlbnRWaWV3TW9kZSgpICE9PSAna2FuYmFuJyAmJlxuICAgICAgICBzdG9yZS5jdXJyZW50Vmlld01vZGUoKSAhPT0gJ3N0YXR1cy1ncm91cGVkLWdyaWQnICYmXG4gICAgICAgIHN0b3JlLnNlbGVjdGVkVGFza1R5cGVOYW1lcygpLmxlbmd0aCA+IDBcbiAgICAgICkge1xuICAgICAgICBjb3VudCsrO1xuICAgICAgfVxuICAgICAgaWYgKHN0b3JlLnNlbGVjdGVkQXNzaWduZWVJZHMoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICB9XG4gICAgICBpZiAoc3RvcmUuc2VsZWN0ZWRSZXBvcnRlcklkcygpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY291bnQrKztcbiAgICAgIH1cbiAgICAgIGlmIChzdG9yZS5zZWxlY3RlZFByaW9yaXRpZXMoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICB9XG4gICAgICByZXR1cm4gY291bnQ7XG4gICAgfSksXG4gIH0pKSxcblxuICB3aXRoTWV0aG9kcygoc3RvcmUsIHNldHRpbmdzU2VydmljZSA9IGluamVjdChBWFBTZXR0aW5nc1NlcnZpY2UpLCB0YXNrQm9hcmRTZXJ2aWNlID0gaW5qZWN0KEFYUFRhc2tCb2FyZFNlcnZpY2UpKSA9PiB7XG4gICAgY29uc3QgdXNlclNjb3BlZFNldHRpbmdzID0gKCkgPT4gc2V0dGluZ3NTZXJ2aWNlLnNjb3BlKEFYUFBsYXRmb3JtU2NvcGUuVXNlcik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgYXN5bmMgaW5pdGlhbGl6ZSgpIHtcbiAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBpc0xvYWRpbmc6IHRydWUgfSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgdGFza1R5cGVzID0gYXdhaXQgdGFza0JvYXJkU2VydmljZS5nZXRUYXNrVHlwZXMoKTtcbiAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IHRhc2tUeXBlcyB9KTtcblxuICAgICAgICAgIGNvbnN0IFtcbiAgICAgICAgICAgIHNhdmVkRGF5c0NvdW50LFxuICAgICAgICAgICAgc2F2ZWREYXRlU3RyaW5nLFxuICAgICAgICAgICAgc2F2ZWREZXRhaWxQYW5lbCxcbiAgICAgICAgICAgIHNhdmVkVmlld01vZGUsXG4gICAgICAgICAgICBzYXZlZFRhc2tUeXBlTmFtZXMsXG4gICAgICAgICAgICBzYXZlZEFzc2lnbmVlSWRzLFxuICAgICAgICAgICAgc2F2ZWRSZXBvcnRlcklkcyxcbiAgICAgICAgICAgIHNhdmVkUHJpb3JpdGllcyxcbiAgICAgICAgICAgIHNhdmVkQ2FsZW5kYXJFdmVudFR5cGVJZHMsXG4gICAgICAgICAgXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgIHVzZXJTY29wZWRTZXR0aW5ncygpLmdldDxudW1iZXIgfCB1bmRlZmluZWQ+KEFYTVRhc2tCb2FyZFNldHRpbmdzLkRheXNDb3VudCksXG4gICAgICAgICAgICB1c2VyU2NvcGVkU2V0dGluZ3MoKS5nZXQ8c3RyaW5nIHwgdW5kZWZpbmVkPihBWE1UYXNrQm9hcmRTZXR0aW5ncy5DdXJyZW50RGF0ZSksXG4gICAgICAgICAgICB1c2VyU2NvcGVkU2V0dGluZ3MoKS5nZXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4oQVhNVGFza0JvYXJkU2V0dGluZ3MuRGV0YWlsUGFuZWwpLFxuICAgICAgICAgICAgdXNlclNjb3BlZFNldHRpbmdzKCkuZ2V0PEFYUFRhc2tCb2FyZFZpZXdNb2RlIHwgdW5kZWZpbmVkPihBWE1UYXNrQm9hcmRTZXR0aW5ncy5WaWV3TW9kZSksXG4gICAgICAgICAgICB1c2VyU2NvcGVkU2V0dGluZ3MoKS5nZXQ8c3RyaW5nW10gfCB1bmRlZmluZWQ+KEFYTVRhc2tCb2FyZFNldHRpbmdzLlNlbGVjdGVkVGFza1R5cGVOYW1lcyksXG4gICAgICAgICAgICB1c2VyU2NvcGVkU2V0dGluZ3MoKS5nZXQ8KHN0cmluZyB8IG51bWJlcilbXSB8IHVuZGVmaW5lZD4oQVhNVGFza0JvYXJkU2V0dGluZ3MuU2VsZWN0ZWRBc3NpZ25lZUlkcyksXG4gICAgICAgICAgICB1c2VyU2NvcGVkU2V0dGluZ3MoKS5nZXQ8KHN0cmluZyB8IG51bWJlcilbXSB8IHVuZGVmaW5lZD4oQVhNVGFza0JvYXJkU2V0dGluZ3MuU2VsZWN0ZWRSZXBvcnRlcklkcyksXG4gICAgICAgICAgICB1c2VyU2NvcGVkU2V0dGluZ3MoKS5nZXQ8QVhQUHJpb3JpdHlGaWx0ZXJLZXlbXSB8IHVuZGVmaW5lZD4oQVhNVGFza0JvYXJkU2V0dGluZ3MuU2VsZWN0ZWRQcmlvcml0aWVzKSxcbiAgICAgICAgICAgIHVzZXJTY29wZWRTZXR0aW5ncygpLmdldDxzdHJpbmdbXSB8IHVuZGVmaW5lZD4oQVhNVGFza0JvYXJkU2V0dGluZ3MuU2VsZWN0ZWRDYWxlbmRhckV2ZW50VHlwZUlkcyksXG4gICAgICAgICAgXSk7XG5cbiAgICAgICAgICAvLyBFbnN1cmUgY3VycmVudERhdGUgaXMgYWx3YXlzIGEgdmFsaWQgRGF0ZVxuICAgICAgICAgIGxldCBjdXJyZW50RGF0ZTogRGF0ZTtcbiAgICAgICAgICBpZiAoc2F2ZWREYXRlU3RyaW5nKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWREYXRlID0gbmV3IERhdGUoc2F2ZWREYXRlU3RyaW5nKTtcbiAgICAgICAgICAgIGN1cnJlbnREYXRlID0gaXNOYU4ocGFyc2VkRGF0ZS5nZXRUaW1lKCkpID8gbmV3IERhdGUoKSA6IHBhcnNlZERhdGU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7XG4gICAgICAgICAgICBkYXlzQ291bnQ6IHNhdmVkRGF5c0NvdW50IHx8IDcsXG4gICAgICAgICAgICBkZXRhaWxQYW5lbDogc2F2ZWREZXRhaWxQYW5lbCB8fCBmYWxzZSxcbiAgICAgICAgICAgIGN1cnJlbnRWaWV3TW9kZTogc2F2ZWRWaWV3TW9kZSB8fCAnbW9udGgnLFxuICAgICAgICAgICAgY3VycmVudERhdGUsXG4gICAgICAgICAgICBzZWxlY3RlZFRhc2tUeXBlTmFtZXM6IHNhdmVkVGFza1R5cGVOYW1lcyB8fCBbXSxcbiAgICAgICAgICAgIHNlbGVjdGVkQXNzaWduZWVJZHM6IHNhdmVkQXNzaWduZWVJZHMgfHwgW10sXG4gICAgICAgICAgICBzZWxlY3RlZFJlcG9ydGVySWRzOiBzYXZlZFJlcG9ydGVySWRzIHx8IFtdLFxuICAgICAgICAgICAgc2VsZWN0ZWRQcmlvcml0aWVzOiBzYXZlZFByaW9yaXRpZXMgfHwgW10sXG4gICAgICAgICAgICBzZWxlY3RlZENhbGVuZGFyRXZlbnRUeXBlSWRzOiBzYXZlZENhbGVuZGFyRXZlbnRUeXBlSWRzIHx8IFtdLFxuICAgICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbml0aWFsaXppbmcgVGFza0JvYXJkIFZpZXdNb2RlbDonLCBlcnJvcik7XG4gICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwge1xuICAgICAgICAgICAgZGV0YWlsUGFuZWw6IGZhbHNlLFxuICAgICAgICAgICAgY3VycmVudFZpZXdNb2RlOiAnbW9udGgnLFxuICAgICAgICAgICAgY3VycmVudERhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICBzZWxlY3RlZFRhc2tUeXBlTmFtZXM6IFtdLFxuICAgICAgICAgICAgc2VsZWN0ZWRBc3NpZ25lZUlkczogW10sXG4gICAgICAgICAgICBzZWxlY3RlZFByaW9yaXRpZXM6IFtdLFxuICAgICAgICAgICAgc2VsZWN0ZWRSZXBvcnRlcklkczogW10sXG4gICAgICAgICAgICBzZWxlY3RlZENhbGVuZGFyRXZlbnRUeXBlSWRzOiBbXSxcbiAgICAgICAgICAgIHRhc2tUeXBlczogc3RvcmUudGFza1R5cGVzKCksXG4gICAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBzZXRWaWV3TW9kZShtb2RlOiBBWFBUYXNrQm9hcmRWaWV3TW9kZSkge1xuICAgICAgICBpZiAoKG1vZGUgPT09ICdrYW5iYW4nIHx8IG1vZGUgPT09ICdzdGF0dXMtZ3JvdXBlZC1ncmlkJykgJiYgc3RvcmUuc2VsZWN0ZWRUYXNrVHlwZU5hbWVzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgY29uc3QgZmlyc3RUYXNrVHlwZSA9IHN0b3JlLnRhc2tUeXBlcygpWzBdO1xuICAgICAgICAgIGlmIChmaXJzdFRhc2tUeXBlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkVGFza1R5cGVOYW1lcyhbZmlyc3RUYXNrVHlwZS5uYW1lXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICgobW9kZSA9PT0gJ2thbmJhbicgfHwgbW9kZSA9PT0gJ3N0YXR1cy1ncm91cGVkLWdyaWQnKSAmJiBzdG9yZS5zZWxlY3RlZFRhc2tUeXBlTmFtZXMoKS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZFRhc2tUeXBlTmFtZXMoW3N0b3JlLnNlbGVjdGVkVGFza1R5cGVOYW1lcygpWzBdXSk7XG4gICAgICAgIH1cbiAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBjdXJyZW50Vmlld01vZGU6IG1vZGUgfSk7XG4gICAgICAgIHVzZXJTY29wZWRTZXR0aW5ncygpXG4gICAgICAgICAgLnNldChBWE1UYXNrQm9hcmRTZXR0aW5ncy5WaWV3TW9kZSwgbW9kZSlcbiAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiBjb25zb2xlLmVycm9yKCdFcnJvciBzYXZpbmcgY2FsZW5kYXIgdmlldyBtb2RlOicsIGVycm9yKSk7XG4gICAgICB9LFxuXG4gICAgICBzZXRDdXJyZW50RGF0ZShkYXRlOiBEYXRlKSB7XG4gICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgY3VycmVudERhdGU6IG5ldyBEYXRlKGRhdGUpIH0pO1xuICAgICAgICB1c2VyU2NvcGVkU2V0dGluZ3MoKVxuICAgICAgICAgIC5zZXQoQVhNVGFza0JvYXJkU2V0dGluZ3MuQ3VycmVudERhdGUsIGRhdGUudG9JU09TdHJpbmcoKSlcbiAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiBjb25zb2xlLmVycm9yKCdFcnJvciBzYXZpbmcgY3VycmVudCBkYXRlOicsIGVycm9yKSk7XG4gICAgICB9LFxuXG4gICAgICBzZXRTZWxlY3RlZFRhc2tUeXBlTmFtZXModGFza1R5cGVOYW1lczogc3RyaW5nW10sIGlzUXVlcnlQYXJhbTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgc2VsZWN0ZWRUYXNrVHlwZU5hbWVzOiB0YXNrVHlwZU5hbWVzIH0pO1xuICAgICAgICBpZiAoaXNRdWVyeVBhcmFtKSByZXR1cm47XG4gICAgICAgIHVzZXJTY29wZWRTZXR0aW5ncygpXG4gICAgICAgICAgLnNldChBWE1UYXNrQm9hcmRTZXR0aW5ncy5TZWxlY3RlZFRhc2tUeXBlTmFtZXMsIHRhc2tUeXBlTmFtZXMpXG4gICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4gY29uc29sZS5lcnJvcignRXJyb3Igc2F2aW5nIHNlbGVjdGVkIHRhc2sgdHlwZSBmaWx0ZXI6JywgZXJyb3IpKTtcbiAgICAgIH0sXG5cbiAgICAgIHNldFNlbGVjdGVkQXNzaWduZWVJZHMoYXNzaWduZWVJZHM6IChzdHJpbmcgfCBudW1iZXIpW10sIGlzUXVlcnlQYXJhbTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgc2VsZWN0ZWRBc3NpZ25lZUlkczogYXNzaWduZWVJZHMgfSk7XG4gICAgICAgIGlmIChpc1F1ZXJ5UGFyYW0pIHJldHVybjtcbiAgICAgICAgdXNlclNjb3BlZFNldHRpbmdzKClcbiAgICAgICAgICAuc2V0KEFYTVRhc2tCb2FyZFNldHRpbmdzLlNlbGVjdGVkQXNzaWduZWVJZHMsIGFzc2lnbmVlSWRzKVxuICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNhdmluZyBzZWxlY3RlZCBhc3NpZ25lZSBmaWx0ZXI6JywgZXJyb3IpKTtcbiAgICAgIH0sXG5cbiAgICAgIHNldFNlbGVjdGVkUmVwb3J0ZXJJZHMocmVwb3J0ZXJJZHM6IChzdHJpbmcgfCBudW1iZXIpW10sIGlzUXVlcnlQYXJhbTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgc2VsZWN0ZWRSZXBvcnRlcklkczogcmVwb3J0ZXJJZHMgfSk7XG4gICAgICAgIGlmIChpc1F1ZXJ5UGFyYW0pIHJldHVybjtcbiAgICAgICAgdXNlclNjb3BlZFNldHRpbmdzKClcbiAgICAgICAgICAuc2V0KEFYTVRhc2tCb2FyZFNldHRpbmdzLlNlbGVjdGVkUmVwb3J0ZXJJZHMsIHJlcG9ydGVySWRzKVxuICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNhdmluZyBzZWxlY3RlZCByZXBvcnRlciBmaWx0ZXI6JywgZXJyb3IpKTtcbiAgICAgIH0sXG5cbiAgICAgIHNldFNlbGVjdGVkUHJpb3JpdGllcyhwcmlvcml0aWVzOiBBWFBQcmlvcml0eUZpbHRlcktleVtdLCBpc1F1ZXJ5UGFyYW06IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IHNlbGVjdGVkUHJpb3JpdGllczogcHJpb3JpdGllcyB9KTtcbiAgICAgICAgaWYgKGlzUXVlcnlQYXJhbSkgcmV0dXJuO1xuICAgICAgICB1c2VyU2NvcGVkU2V0dGluZ3MoKVxuICAgICAgICAgIC5zZXQoQVhNVGFza0JvYXJkU2V0dGluZ3MuU2VsZWN0ZWRQcmlvcml0aWVzLCBwcmlvcml0aWVzKVxuICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNhdmluZyBzZWxlY3RlZCBwcmlvcml0eSBmaWx0ZXI6JywgZXJyb3IpKTtcbiAgICAgIH0sXG5cbiAgICAgIHNldFNlbGVjdGVkQ2FsZW5kYXJFdmVudFR5cGVJZHMoZXZlbnRUeXBlSWRzOiBzdHJpbmdbXSwgaXNRdWVyeVBhcmFtOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBzZWxlY3RlZENhbGVuZGFyRXZlbnRUeXBlSWRzOiBldmVudFR5cGVJZHMgfSk7XG4gICAgICAgIGlmIChpc1F1ZXJ5UGFyYW0pIHJldHVybjtcbiAgICAgICAgdXNlclNjb3BlZFNldHRpbmdzKClcbiAgICAgICAgICAuc2V0KEFYTVRhc2tCb2FyZFNldHRpbmdzLlNlbGVjdGVkQ2FsZW5kYXJFdmVudFR5cGVJZHMsIGV2ZW50VHlwZUlkcylcbiAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiBjb25zb2xlLmVycm9yKCdFcnJvciBzYXZpbmcgc2VsZWN0ZWQgY2FsZW5kYXIgZXZlbnQgdHlwZSBmaWx0ZXI6JywgZXJyb3IpKTtcbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogU2V0cyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHRhc2suIFBhc3MgYG51bGxgIHRvIGNsZWFyIHRoZSBzZWxlY3Rpb24uXG4gICAgICAgKiBAcGFyYW0gdGFzayBUaGUgdGFzayB0byBzZWxlY3QsIG9yIG51bGwuXG4gICAgICAgKi9cbiAgICAgIHNlbGVjdFRhc2sodGFzazogQVhQVGFzayB8IG51bGwpIHtcbiAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBzZWxlY3RlZFRhc2s6IHRhc2sgfSk7XG4gICAgICB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIEEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGNsZWFyIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgdGFzay5cbiAgICAgICAqL1xuICAgICAgY2xlYXJTZWxlY3RlZFRhc2soKSB7XG4gICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgc2VsZWN0ZWRUYXNrOiBudWxsIH0pO1xuICAgICAgfSxcblxuICAgICAgb3BlbkRldGFpbFBhbmVsKCkge1xuICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IGRldGFpbFBhbmVsOiB0cnVlIH0pO1xuICAgICAgICB1c2VyU2NvcGVkU2V0dGluZ3MoKVxuICAgICAgICAgIC5zZXQoQVhNVGFza0JvYXJkU2V0dGluZ3MuRGV0YWlsUGFuZWwsIHRydWUpXG4gICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4gY29uc29sZS5lcnJvcignRXJyb3Igc2F2aW5nIGRldGFpbCBwYW5lbDonLCBlcnJvcikpO1xuICAgICAgfSxcblxuICAgICAgY2xvc2VEZXRhaWxQYW5lbCgpIHtcbiAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBkZXRhaWxQYW5lbDogZmFsc2UgfSk7XG4gICAgICAgIHVzZXJTY29wZWRTZXR0aW5ncygpXG4gICAgICAgICAgLnNldChBWE1UYXNrQm9hcmRTZXR0aW5ncy5EZXRhaWxQYW5lbCwgZmFsc2UpXG4gICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4gY29uc29sZS5lcnJvcignRXJyb3Igc2F2aW5nIGRldGFpbCBwYW5lbDonLCBlcnJvcikpO1xuICAgICAgfSxcblxuICAgICAgdG9nZ2xlRGV0YWlsUGFuZWwoKSB7XG4gICAgICAgIGNvbnN0IGRldGFpbFBhbmVsID0gIXN0b3JlLmRldGFpbFBhbmVsKCk7XG4gICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgZGV0YWlsUGFuZWw6IGRldGFpbFBhbmVsIH0pO1xuICAgICAgICB1c2VyU2NvcGVkU2V0dGluZ3MoKVxuICAgICAgICAgIC5zZXQoQVhNVGFza0JvYXJkU2V0dGluZ3MuRGV0YWlsUGFuZWwsIGRldGFpbFBhbmVsKVxuICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNhdmluZyBkZXRhaWwgcGFuZWw6JywgZXJyb3IpKTtcbiAgICAgIH0sXG5cbiAgICAgIGFzeW5jIGdldFN0YXR1c05hbWUoa2V5OiBhbnksIHByb3ZpZGVyOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuIHRhc2tCb2FyZFNlcnZpY2UuZ2V0U3RhdHVzTmFtZShrZXksIHByb3ZpZGVyKTtcbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogU2V0cyB0aGUgc3RhcnQgZGF0ZSBmb3IgYSBuZXcgcmFuZ2Ugc2VsZWN0aW9uLlxuICAgICAgICogUGFzcyBgbnVsbGAgdG8gY2xlYXIgdGhlIHNlbGVjdGlvbi5cbiAgICAgICAqIEBwYXJhbSBkYXRlIFRoZSBzdGFydCBkYXRlIG9mIHRoZSByYW5nZS5cbiAgICAgICAqL1xuICAgICAgc2V0UmFuZ2VTdGFydERhdGUoZGF0ZTogRGF0ZSB8IG51bGwpIHtcbiAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyByYW5nZVN0YXJ0RGF0ZTogZGF0ZSB9KTtcbiAgICAgIH0sXG5cbiAgICAgIHNldERheXNDb3VudChkYXlzOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgY291bnQgPSBNYXRoLm1heCgxLCBkYXlzKTtcbiAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBkYXlzQ291bnQ6IGNvdW50IH0pO1xuICAgICAgICB1c2VyU2NvcGVkU2V0dGluZ3MoKVxuICAgICAgICAgIC5zZXQoQVhNVGFza0JvYXJkU2V0dGluZ3MuRGF5c0NvdW50LCBjb3VudClcbiAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiBjb25zb2xlLmVycm9yKCdFcnJvciBzYXZpbmcgZGF5cyBjb3VudDonLCBlcnJvcikpO1xuICAgICAgfSxcbiAgICB9O1xuICB9KSxcbik7XG4iXX0=","import { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXPStateMessageComponent } from '@acorex/platform/layout/components';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, effect, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { RootConfig } from '../../../const';\nimport { AXPTaskBoardService } from '../task-board.service';\nimport { AXMTaskBoardViewModel } from '../task-board.viewmodel';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/platform/layout/widget-core\";\nexport class AXMTaskBoardDetailPanel {\n constructor() {\n this.rootConfig = RootConfig;\n this.vm = inject(AXMTaskBoardViewModel);\n this.localeService = inject(AXLocaleService);\n this.taskBoardService = inject(AXPTaskBoardService);\n this.statusName = signal('', ...(ngDevMode ? [{ debugName: \"statusName\" }] : []));\n this.extraFields = signal([], ...(ngDevMode ? [{ debugName: \"extraFields\" }] : []));\n this.#selectedTaskChanged = effect(async () => {\n const selectedTask = this.vm.selectedTask();\n const key = selectedTask?.status.id;\n const provider = selectedTask?.provider;\n if (!provider)\n return;\n const name = await this.vm.getStatusName(key, provider);\n if (name)\n this.statusName.set(name);\n }, ...(ngDevMode ? [{ debugName: \"#selectedTaskChanged\" }] : []));\n this.#selectedTaskTypeChanged = effect(async () => {\n const selectedTask = this.vm.selectedTask();\n const selectedTaskType = this.taskBoardService.getProvider(selectedTask?.provider);\n const extraFields = await selectedTaskType?.getExtraFields();\n if (!extraFields) {\n this.extraFields.set([]);\n return;\n }\n this.extraFields.set(extraFields);\n }, ...(ngDevMode ? [{ debugName: \"#selectedTaskTypeChanged\" }] : []));\n }\n #selectedTaskChanged;\n #selectedTaskTypeChanged;\n capitalizeFirstLetter(text) {\n return String(text).charAt(0).toUpperCase() + String(text).slice(1);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMTaskBoardDetailPanel, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.16\", type: AXMTaskBoardDetailPanel, isStandalone: true, selector: \"axm-task-board-detail-panel\", ngImport: i0, template: \"@if (vm.isTaskSelected()) {\\n @let nodeInfo = vm.selectedTask();\\n <div class=\\\"__header\\\">\\n <div class=\\\"__title\\\">\\n <span>{{ nodeInfo?.title }}</span>\\n </div>\\n <ax-button [look]=\\\"'blank'\\\" class=\\\"ax-sm ax-rounded-full\\\" (onClick)=\\\"vm.closeDetailPanel()\\\">\\n <ax-icon icon=\\\"fa-solid fa-xmark\\\"></ax-icon>\\n </ax-button>\\n </div>\\n\\n <div class=\\\"__content\\\">\\n <div class=\\\"__section\\\">\\n <div class=\\\"__title\\\">\\n <span>{{ '@task-management:task-board.detail-panel.title' | translate | async }}</span>\\n </div>\\n <div class=\\\"__content\\\">\\n @if (nodeInfo?.description) {\\n <div class=\\\"__row\\\">\\n <div class=\\\"__title\\\">\\n <span>\\n {{ '@task-management:task-board.detail-panel.description' | translate | async }}\\n </span>\\n </div>\\n <div class=\\\"__content\\\">{{ nodeInfo?.description }}</div>\\n </div>\\n }\\n <div class=\\\"__row\\\">\\n <div class=\\\"__title\\\">\\n <span>\\n {{ '@task-management:task-board.detail-panel.start-date' | translate | async }}\\n </span>\\n </div>\\n <div class=\\\"__content\\\">\\n {{\\n nodeInfo?.startDate\\n | format: 'datetime' : { format: 'short', calendar: localeService.activeProfile().calendar.system }\\n | async\\n }}\\n </div>\\n </div>\\n <div class=\\\"__row\\\">\\n <div class=\\\"__title\\\">\\n <span>{{ '@task-management:task-board.detail-panel.end-date' | translate | async }}</span>\\n </div>\\n <div class=\\\"__content\\\">\\n {{\\n nodeInfo?.endDate\\n | format: 'datetime' : { format: 'short', calendar: localeService.activeProfile().calendar.system }\\n | async\\n }}\\n </div>\\n </div>\\n <div class=\\\"__row\\\">\\n <div class=\\\"__title\\\">\\n <span>{{ '@task-management:task-board.detail-panel.reporter' | translate | async }}</span>\\n </div>\\n <div class=\\\"__content\\\">\\n {{ nodeInfo?.reporter?.fullName }}\\n </div>\\n </div>\\n @if (nodeInfo?.assignee) {\\n <div class=\\\"__row\\\">\\n <div class=\\\"__title\\\">\\n <span>{{ '@task-management:task-board.detail-panel.assignee' | translate | async }}</span>\\n </div>\\n <div class=\\\"__content\\\">{{ nodeInfo?.assignee?.fullName }}</div>\\n </div>\\n }\\n @if (statusName()) {\\n <div class=\\\"__row\\\">\\n <div class=\\\"__title\\\">\\n <span>{{ '@task-management:task-board.detail-panel.status' | translate | async }}</span>\\n </div>\\n <div class=\\\"__content\\\">{{ statusName() }}</div>\\n </div>\\n }\\n @if (nodeInfo?.priority) {\\n <div class=\\\"__row\\\">\\n <div class=\\\"__title\\\">\\n <span>\\n {{ '@task-management:task-board.detail-panel.priority' | translate | async }}\\n </span>\\n </div>\\n <div class=\\\"__content\\\">{{ capitalizeFirstLetter(nodeInfo?.priority ?? '') }}</div>\\n </div>\\n }\\n @if (extraFields() && extraFields().length) {\\n <div class=\\\"__row\\\">\\n <axp-widgets-container [context]=\\\"nodeInfo\\\">\\n @for (extraField of extraFields(); track extraField) {\\n <div class=\\\"__title\\\">\\n <span>\\n {{ extraField.title | translate | async }}\\n </span>\\n </div>\\n <div class=\\\"__content\\\">\\n <ng-container axp-widget-renderer [node]=\\\"extraField.widget\\\" [mode]=\\\"'view'\\\"> </ng-container>\\n </div>\\n }\\n </axp-widgets-container>\\n </div>\\n }\\n </div>\\n </div>\\n </div>\\n} @else {\\n <div class=\\\"__header\\\">\\n <div class=\\\"__title\\\">\\n <span>\\n {{ '@task-management:task-board.detail-panel.title' | translate | async }}\\n </span>\\n </div>\\n <ax-button [look]=\\\"'blank'\\\" class=\\\"ax-sm ax-rounded-full\\\" (onClick)=\\\"vm.closeDetailPanel()\\\">\\n <ax-icon icon=\\\"fa-solid fa-xmark\\\"></ax-icon>\\n </ax-button>\\n </div>\\n\\n <div class=\\\"__content ax-flex ax-items-center ax-justify-center\\\">\\n <axp-state-message\\n icon=\\\"fa-light fa-clipboard-list-check\\\"\\n [title]=\\\"'@task-management:task-board.detail-panel.no-task-selected.title'\\\"\\n [description]=\\\"'@task-management:task-board.detail-panel.no-task-selected.description'\\\"\\n >\\n </axp-state-message>\\n </div>\\n}\\n\", styles: [\"axm-task-board-detail-panel{display:flex;flex-direction:column;border-radius:.5rem;border-width:1px;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}@media (min-width: 1024px){axm-task-board-detail-panel{width:24rem}}axm-task-board-detail-panel>.__header{display:flex;flex-direction:row;align-items:center;justify-content:space-between;border-bottom-width:1px;padding:1rem}@media (min-width: 1024px){axm-task-board-detail-panel>.__header{width:20rem}}axm-task-board-detail-panel>.__header>.__title{display:flex;width:90%;flex-direction:row;align-items:center;gap:.5rem}axm-task-board-detail-panel>.__header>.__title span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:start;font-weight:600;line-height:1.625}axm-task-board-detail-panel>.__content{display:flex;flex-direction:column}axm-task-board-detail-panel>.__content>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}axm-task-board-detail-panel>.__content>.__section{display:flex;flex-direction:column;padding:1rem}axm-task-board-detail-panel>.__content>.__section>.__title{margin-bottom:1rem;font-size:.875rem;line-height:1.25rem;font-weight:700}axm-task-board-detail-panel>.__content>.__section>.__content{display:flex;flex-direction:column;gap:1rem}axm-task-board-detail-panel>.__content>.__section>.__content>.__row{display:flex;flex-direction:column;gap:.25rem}axm-task-board-detail-panel>.__content>.__section>.__content>.__row>.__title{display:flex;font-size:.875rem;line-height:1.25rem;font-weight:600;opacity:.9}axm-task-board-detail-panel>.__content>.__section>.__content>.__row>.__content{display:flex;flex-direction:row;align-items:center;gap:.5rem}axm-task-board-detail-panel>.__content>.__section>.__content>.__row>.__content span{opacity:.7}\\n\"], dependencies: [{ kind: \"component\", type: AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"component\", type: AXPStateMessageComponent, selector: \"axp-state-message\", inputs: [\"mode\", \"icon\", \"title\", \"description\", \"variant\"] }, { kind: \"ngmodule\", type: AXPWidgetCoreModule }, { kind: \"component\", type: i1.AXPWidgetContainerComponent, selector: \"axp-widgets-container\", inputs: [\"context\", \"functions\"], outputs: [\"onContextChanged\"] }, { kind: \"directive\", type: i1.AXPWidgetRendererDirective, selector: \"[axp-widget-renderer]\", inputs: [\"parentNode\", \"index\", \"mode\", \"node\"], outputs: [\"onOptionsChanged\", \"onValueChanged\", \"onLoad\"], exportAs: [\"widgetRenderer\"] }, { kind: \"component\", type: AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMTaskBoardDetailPanel, decorators: [{\n type: Component,\n args: [{ selector: 'axm-task-board-detail-panel', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n AsyncPipe,\n AXFormatPipe,\n AXTranslatorPipe,\n AXButtonComponent,\n AXPStateMessageComponent,\n AXPWidgetCoreModule,\n AXDecoratorIconComponent,\n ], template: \"@if (vm.isTaskSelected()) {\\n @let nodeInfo = vm.selectedTask();\\n <div class=\\\"__header\\\">\\n <div class=\\\"__title\\\">\\n <span>{{ nodeInfo?.title }}</span>\\n </div>\\n <ax-button [look]=\\\"'blank'\\\" class=\\\"ax-sm ax-rounded-full\\\" (onClick)=\\\"vm.closeDetailPanel()\\\">\\n <ax-icon icon=\\\"fa-solid fa-xmark\\\"></ax-icon>\\n </ax-button>\\n </div>\\n\\n <div class=\\\"__content\\\">\\n <div class=\\\"__section\\\">\\n <div class=\\\"__title\\\">\\n <span>{{ '@task-management:task-board.detail-panel.title' | translate | async }}</span>\\n </div>\\n <div class=\\\"__content\\\">\\n @if (nodeInfo?.description) {\\n <div class=\\\"__row\\\">\\n <div class=\\\"__title\\\">\\n <span>\\n {{ '@task-management:task-board.detail-panel.description' | translate | async }}\\n </span>\\n </div>\\n <div class=\\\"__content\\\">{{ nodeInfo?.description }}</div>\\n </div>\\n }\\n <div class=\\\"__row\\\">\\n <div class=\\\"__title\\\">\\n <span>\\n {{ '@task-management:task-board.detail-panel.start-date' | translate | async }}\\n </span>\\n </div>\\n <div class=\\\"__content\\\">\\n {{\\n nodeInfo?.startDate\\n | format: 'datetime' : { format: 'short', calendar: localeService.activeProfile().calendar.system }\\n | async\\n }}\\n </div>\\n </div>\\n <div class=\\\"__row\\\">\\n <div class=\\\"__title\\\">\\n <span>{{ '@task-management:task-board.detail-panel.end-date' | translate | async }}</span>\\n </div>\\n <div class=\\\"__content\\\">\\n {{\\n nodeInfo?.endDate\\n | format: 'datetime' : { format: 'short', calendar: localeService.activeProfile().calendar.system }\\n | async\\n }}\\n </div>\\n </div>\\n <div class=\\\"__row\\\">\\n <div class=\\\"__title\\\">\\n <span>{{ '@task-management:task-board.detail-panel.reporter' | translate | async }}</span>\\n </div>\\n <div class=\\\"__content\\\">\\n {{ nodeInfo?.reporter?.fullName }}\\n </div>\\n </div>\\n @if (nodeInfo?.assignee) {\\n <div class=\\\"__row\\\">\\n <div class=\\\"__title\\\">\\n <span>{{ '@task-management:task-board.detail-panel.assignee' | translate | async }}</span>\\n </div>\\n <div class=\\\"__content\\\">{{ nodeInfo?.assignee?.fullName }}</div>\\n </div>\\n }\\n @if (statusName()) {\\n <div class=\\\"__row\\\">\\n <div class=\\\"__title\\\">\\n <span>{{ '@task-management:task-board.detail-panel.status' | translate | async }}</span>\\n </div>\\n <div class=\\\"__content\\\">{{ statusName() }}</div>\\n </div>\\n }\\n @if (nodeInfo?.priority) {\\n <div class=\\\"__row\\\">\\n <div class=\\\"__title\\\">\\n <span>\\n {{ '@task-management:task-board.detail-panel.priority' | translate | async }}\\n </span>\\n </div>\\n <div class=\\\"__content\\\">{{ capitalizeFirstLetter(nodeInfo?.priority ?? '') }}</div>\\n </div>\\n }\\n @if (extraFields() && extraFields().length) {\\n <div class=\\\"__row\\\">\\n <axp-widgets-container [context]=\\\"nodeInfo\\\">\\n @for (extraField of extraFields(); track extraField) {\\n <div class=\\\"__title\\\">\\n <span>\\n {{ extraField.title | translate | async }}\\n </span>\\n </div>\\n <div class=\\\"__content\\\">\\n <ng-container axp-widget-renderer [node]=\\\"extraField.widget\\\" [mode]=\\\"'view'\\\"> </ng-container>\\n </div>\\n }\\n </axp-widgets-container>\\n </div>\\n }\\n </div>\\n </div>\\n </div>\\n} @else {\\n <div class=\\\"__header\\\">\\n <div class=\\\"__title\\\">\\n <span>\\n {{ '@task-management:task-board.detail-panel.title' | translate | async }}\\n </span>\\n </div>\\n <ax-button [look]=\\\"'blank'\\\" class=\\\"ax-sm ax-rounded-full\\\" (onClick)=\\\"vm.closeDetailPanel()\\\">\\n <ax-icon icon=\\\"fa-solid fa-xmark\\\"></ax-icon>\\n </ax-button>\\n </div>\\n\\n <div class=\\\"__content ax-flex ax-items-center ax-justify-center\\\">\\n <axp-state-message\\n icon=\\\"fa-light fa-clipboard-list-check\\\"\\n [title]=\\\"'@task-management:task-board.detail-panel.no-task-selected.title'\\\"\\n [description]=\\\"'@task-management:task-board.detail-panel.no-task-selected.description'\\\"\\n >\\n </axp-state-message>\\n </div>\\n}\\n\", styles: [\"axm-task-board-detail-panel{display:flex;flex-direction:column;border-radius:.5rem;border-width:1px;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}@media (min-width: 1024px){axm-task-board-detail-panel{width:24rem}}axm-task-board-detail-panel>.__header{display:flex;flex-direction:row;align-items:center;justify-content:space-between;border-bottom-width:1px;padding:1rem}@media (min-width: 1024px){axm-task-board-detail-panel>.__header{width:20rem}}axm-task-board-detail-panel>.__header>.__title{display:flex;width:90%;flex-direction:row;align-items:center;gap:.5rem}axm-task-board-detail-panel>.__header>.__title span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:start;font-weight:600;line-height:1.625}axm-task-board-detail-panel>.__content{display:flex;flex-direction:column}axm-task-board-detail-panel>.__content>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}axm-task-board-detail-panel>.__content>.__section{display:flex;flex-direction:column;padding:1rem}axm-task-board-detail-panel>.__content>.__section>.__title{margin-bottom:1rem;font-size:.875rem;line-height:1.25rem;font-weight:700}axm-task-board-detail-panel>.__content>.__section>.__content{display:flex;flex-direction:column;gap:1rem}axm-task-board-detail-panel>.__content>.__section>.__content>.__row{display:flex;flex-direction:column;gap:.25rem}axm-task-board-detail-panel>.__content>.__section>.__content>.__row>.__title{display:flex;font-size:.875rem;line-height:1.25rem;font-weight:600;opacity:.9}axm-task-board-detail-panel>.__content>.__section>.__content>.__row>.__content{display:flex;flex-direction:row;align-items:center;gap:.5rem}axm-task-board-detail-panel>.__content>.__section>.__content>.__row>.__content span{opacity:.7}\\n\"] }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1ib2FyZC1kZXRhaWwtcGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3Rhc2stbWFuYWdlbWVudC9zcmMvbGliL2ZlYXR1cmVzL3Rhc2stYm9hcmQvdGFzay1ib2FyZC1kZXRhaWwtcGFuZWwvdGFzay1ib2FyZC1kZXRhaWwtcGFuZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3Rhc2stbWFuYWdlbWVudC9zcmMvbGliL2ZlYXR1cmVzL3Rhc2stYm9hcmQvdGFzay1ib2FyZC1kZXRhaWwtcGFuZWwvdGFzay1ib2FyZC1kZXRhaWwtcGFuZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFNUQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7OztBQWtCaEUsTUFBTSxPQUFPLHVCQUF1QjtJQWhCcEM7UUFpQnFCLGVBQVUsR0FBRyxVQUFVLENBQUM7UUFDeEIsT0FBRSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ25DLGtCQUFhLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3hDLHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBRXhELGVBQVUsR0FBRyxNQUFNLENBQVMsRUFBRSxzREFBQyxDQUFDO1FBQ2hDLGdCQUFXLEdBQUcsTUFBTSxDQUFrQixFQUFFLHVEQUFDLENBQUM7UUFFcEQseUJBQW9CLEdBQUcsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ3ZDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDNUMsTUFBTSxHQUFHLEdBQUcsWUFBWSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDcEMsTUFBTSxRQUFRLEdBQUcsWUFBWSxFQUFFLFFBQVEsQ0FBQztZQUN4QyxJQUFJLENBQUMsUUFBUTtnQkFBRSxPQUFPO1lBQ3RCLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3hELElBQUksSUFBSTtnQkFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxDQUFDLGdFQUFDLENBQUM7UUFFSCw2QkFBd0IsR0FBRyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDM0MsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM1QyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ25GLE1BQU0sV0FBVyxHQUFHLE1BQU0sZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLENBQUM7WUFDN0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDekIsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwQyxDQUFDLG9FQUFDLENBQUM7S0FLSjtJQXZCQyxvQkFBb0IsQ0FPakI7SUFFSCx3QkFBd0IsQ0FTckI7SUFFTyxxQkFBcUIsQ0FBQyxJQUFZO1FBQzFDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7K0dBL0JVLHVCQUF1QjttR0FBdkIsdUJBQXVCLHVGQzlCcEMsbXBKQStIQSxvc0VEdkdJLGlCQUFpQiwyVUFDakIsd0JBQXdCLDBIQUN4QixtQkFBbUIseWFBQ25CLHdCQUF3QixpRUFOeEIsU0FBUyx5Q0FDVCxZQUFZLDBDQUNaLGdCQUFnQjs7NEZBT1AsdUJBQXVCO2tCQWhCbkMsU0FBUzsrQkFDRSw2QkFBNkIsbUJBR3RCLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksV0FDNUI7d0JBQ1AsU0FBUzt3QkFDVCxZQUFZO3dCQUNaLGdCQUFnQjt3QkFDaEIsaUJBQWlCO3dCQUNqQix3QkFBd0I7d0JBQ3hCLG1CQUFtQjt3QkFDbkIsd0JBQXdCO3FCQUN6QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2J1dHRvbic7XG5pbXBvcnQgeyBBWERlY29yYXRvckljb25Db21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBWEZvcm1hdFBpcGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZm9ybWF0JztcbmltcG9ydCB7IEFYTG9jYWxlU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZS9sb2NhbGUnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdG9yUGlwZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBWFBXaWRnZXRDb3JlTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvd2lkZ2V0LWNvcmUnO1xuaW1wb3J0IHsgQVhQU3RhdGVNZXNzYWdlQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBc3luY1BpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgZWZmZWN0LCBpbmplY3QsIHNpZ25hbCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvb3RDb25maWcgfSBmcm9tICcuLi8uLi8uLi9jb25zdCc7XG5pbXBvcnQgeyBBWFBUYXNrQm9hcmRTZXJ2aWNlIH0gZnJvbSAnLi4vdGFzay1ib2FyZC5zZXJ2aWNlJztcbmltcG9ydCB7IEFYUEV4dHJhRmllbGQgfSBmcm9tICcuLi90YXNrLWJvYXJkLnR5cGVzJztcbmltcG9ydCB7IEFYTVRhc2tCb2FyZFZpZXdNb2RlbCB9IGZyb20gJy4uL3Rhc2stYm9hcmQudmlld21vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXhtLXRhc2stYm9hcmQtZGV0YWlsLXBhbmVsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Rhc2stYm9hcmQtZGV0YWlsLXBhbmVsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFzay1ib2FyZC1kZXRhaWwtcGFuZWwuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGltcG9ydHM6IFtcbiAgICBBc3luY1BpcGUsXG4gICAgQVhGb3JtYXRQaXBlLFxuICAgIEFYVHJhbnNsYXRvclBpcGUsXG4gICAgQVhCdXR0b25Db21wb25lbnQsXG4gICAgQVhQU3RhdGVNZXNzYWdlQ29tcG9uZW50LFxuICAgIEFYUFdpZGdldENvcmVNb2R1bGUsXG4gICAgQVhEZWNvcmF0b3JJY29uQ29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBWE1UYXNrQm9hcmREZXRhaWxQYW5lbCB7XG4gIHByb3RlY3RlZCByZWFkb25seSByb290Q29uZmlnID0gUm9vdENvbmZpZztcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHZtID0gaW5qZWN0KEFYTVRhc2tCb2FyZFZpZXdNb2RlbCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBsb2NhbGVTZXJ2aWNlID0gaW5qZWN0KEFYTG9jYWxlU2VydmljZSk7XG4gIHByb3RlY3RlZCByZWFkb25seSB0YXNrQm9hcmRTZXJ2aWNlID0gaW5qZWN0KEFYUFRhc2tCb2FyZFNlcnZpY2UpO1xuXG4gIHByb3RlY3RlZCBzdGF0dXNOYW1lID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBwcm90ZWN0ZWQgZXh0cmFGaWVsZHMgPSBzaWduYWw8QVhQRXh0cmFGaWVsZFtdPihbXSk7XG5cbiAgI3NlbGVjdGVkVGFza0NoYW5nZWQgPSBlZmZlY3QoYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkVGFzayA9IHRoaXMudm0uc2VsZWN0ZWRUYXNrKCk7XG4gICAgY29uc3Qga2V5ID0gc2VsZWN0ZWRUYXNrPy5zdGF0dXMuaWQ7XG4gICAgY29uc3QgcHJvdmlkZXIgPSBzZWxlY3RlZFRhc2s/LnByb3ZpZGVyO1xuICAgIGlmICghcHJvdmlkZXIpIHJldHVybjtcbiAgICBjb25zdCBuYW1lID0gYXdhaXQgdGhpcy52bS5nZXRTdGF0dXNOYW1lKGtleSwgcHJvdmlkZXIpO1xuICAgIGlmIChuYW1lKSB0aGlzLnN0YXR1c05hbWUuc2V0KG5hbWUpO1xuICB9KTtcblxuICAjc2VsZWN0ZWRUYXNrVHlwZUNoYW5nZWQgPSBlZmZlY3QoYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkVGFzayA9IHRoaXMudm0uc2VsZWN0ZWRUYXNrKCk7XG4gICAgY29uc3Qgc2VsZWN0ZWRUYXNrVHlwZSA9IHRoaXMudGFza0JvYXJkU2VydmljZS5nZXRQcm92aWRlcihzZWxlY3RlZFRhc2s/LnByb3ZpZGVyKTtcbiAgICBjb25zdCBleHRyYUZpZWxkcyA9IGF3YWl0IHNlbGVjdGVkVGFza1R5cGU/LmdldEV4dHJhRmllbGRzKCk7XG4gICAgaWYgKCFleHRyYUZpZWxkcykge1xuICAgICAgdGhpcy5leHRyYUZpZWxkcy5zZXQoW10pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmV4dHJhRmllbGRzLnNldChleHRyYUZpZWxkcyk7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCBjYXBpdGFsaXplRmlyc3RMZXR0ZXIodGV4dDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIFN0cmluZyh0ZXh0KS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIFN0cmluZyh0ZXh0KS5zbGljZSgxKTtcbiAgfVxufVxuIiwiQGlmICh2bS5pc1Rhc2tTZWxlY3RlZCgpKSB7XG4gIEBsZXQgbm9kZUluZm8gPSB2bS5zZWxlY3RlZFRhc2soKTtcbiAgPGRpdiBjbGFzcz1cIl9faGVhZGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cIl9fdGl0bGVcIj5cbiAgICAgIDxzcGFuPnt7IG5vZGVJbmZvPy50aXRsZSB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8YXgtYnV0dG9uIFtsb29rXT1cIidibGFuaydcIiBjbGFzcz1cImF4LXNtIGF4LXJvdW5kZWQtZnVsbFwiIChvbkNsaWNrKT1cInZtLmNsb3NlRGV0YWlsUGFuZWwoKVwiPlxuICAgICAgPGF4LWljb24gaWNvbj1cImZhLXNvbGlkIGZhLXhtYXJrXCI+PC9heC1pY29uPlxuICAgIDwvYXgtYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiX19jb250ZW50XCI+XG4gICAgPGRpdiBjbGFzcz1cIl9fc2VjdGlvblwiPlxuICAgICAgPGRpdiBjbGFzcz1cIl9fdGl0bGVcIj5cbiAgICAgICAgPHNwYW4+e3sgJ0B0YXNrLW1hbmFnZW1lbnQ6dGFzay1ib2FyZC5kZXRhaWwtcGFuZWwudGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJfX2NvbnRlbnRcIj5cbiAgICAgICAgQGlmIChub2RlSW5mbz8uZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiX19yb3dcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJfX3RpdGxlXCI+XG4gICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgIHt7ICdAdGFzay1tYW5hZ2VtZW50OnRhc2stYm9hcmQuZGV0YWlsLXBhbmVsLmRlc2NyaXB0aW9uJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIl9fY29udGVudFwiPnt7IG5vZGVJbmZvPy5kZXNjcmlwdGlvbiB9fTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJfX3Jvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJfX3RpdGxlXCI+XG4gICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAge3sgJ0B0YXNrLW1hbmFnZW1lbnQ6dGFzay1ib2FyZC5kZXRhaWwtcGFuZWwuc3RhcnQtZGF0ZScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJfX2NvbnRlbnRcIj5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgIG5vZGVJbmZvPy5zdGFydERhdGVcbiAgICAgICAgICAgICAgICB8IGZvcm1hdDogJ2RhdGV0aW1lJyA6IHsgZm9ybWF0OiAnc2hvcnQnLCBjYWxlbmRhcjogbG9jYWxlU2VydmljZS5hY3RpdmVQcm9maWxlKCkuY2FsZW5kYXIuc3lzdGVtIH1cbiAgICAgICAgICAgICAgICB8IGFzeW5jXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIl9fcm93XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIl9fdGl0bGVcIj5cbiAgICAgICAgICAgIDxzcGFuPnt7ICdAdGFzay1tYW5hZ2VtZW50OnRhc2stYm9hcmQuZGV0YWlsLXBhbmVsLmVuZC1kYXRlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJfX2NvbnRlbnRcIj5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgIG5vZGVJbmZvPy5lbmREYXRlXG4gICAgICAgICAgICAgICAgfCBmb3JtYXQ6ICdkYXRldGltZScgOiB7IGZvcm1hdDogJ3Nob3J0JywgY2FsZW5kYXI6IGxvY2FsZVNlcnZpY2UuYWN0aXZlUHJvZmlsZSgpLmNhbGVuZGFyLnN5c3RlbSB9XG4gICAgICAgICAgICAgICAgfCBhc3luY1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJfX3Jvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJfX3RpdGxlXCI+XG4gICAgICAgICAgICA8c3Bhbj57eyAnQHRhc2stbWFuYWdlbWVudDp0YXNrLWJvYXJkLmRldGFpbC1wYW5lbC5yZXBvcnRlcicgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiX19jb250ZW50XCI+XG4gICAgICAgICAgICB7eyBub2RlSW5mbz8ucmVwb3J0ZXI/LmZ1bGxOYW1lIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICBAaWYgKG5vZGVJbmZvPy5hc3NpZ25lZSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJfX3Jvd1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIl9fdGl0bGVcIj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgJ0B0YXNrLW1hbmFnZW1lbnQ6dGFzay1ib2FyZC5kZXRhaWwtcGFuZWwuYXNzaWduZWUnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJfX2NvbnRlbnRcIj57eyBub2RlSW5mbz8uYXNzaWduZWU/LmZ1bGxOYW1lIH19PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChzdGF0dXNOYW1lKCkpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiX19yb3dcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJfX3RpdGxlXCI+XG4gICAgICAgICAgICAgIDxzcGFuPnt7ICdAdGFzay1tYW5hZ2VtZW50OnRhc2stYm9hcmQuZGV0YWlsLXBhbmVsLnN0YXR1cycgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIl9fY29udGVudFwiPnt7IHN0YXR1c05hbWUoKSB9fTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIEBpZiAobm9kZUluZm8/LnByaW9yaXR5KSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIl9fcm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiX190aXRsZVwiPlxuICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICB7eyAnQHRhc2stbWFuYWdlbWVudDp0YXNrLWJvYXJkLmRldGFpbC1wYW5lbC5wcmlvcml0eScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJfX2NvbnRlbnRcIj57eyBjYXBpdGFsaXplRmlyc3RMZXR0ZXIobm9kZUluZm8/LnByaW9yaXR5ID8/ICcnKSB9fTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoZXh0cmFGaWVsZHMoKSAmJiBleHRyYUZpZWxkcygpLmxlbmd0aCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJfX3Jvd1wiPlxuICAgICAgICAgICAgPGF4cC13aWRnZXRzLWNvbnRhaW5lciBbY29udGV4dF09XCJub2RlSW5mb1wiPlxuICAgICAgICAgICAgICBAZm9yIChleHRyYUZpZWxkIG9mIGV4dHJhRmllbGRzKCk7IHRyYWNrIGV4dHJhRmllbGQpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiX190aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgIHt7IGV4dHJhRmllbGQudGl0bGUgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJfX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgYXhwLXdpZGdldC1yZW5kZXJlciBbbm9kZV09XCJleHRyYUZpZWxkLndpZGdldFwiIFttb2RlXT1cIid2aWV3J1wiPiA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9heHAtd2lkZ2V0cy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbn0gQGVsc2Uge1xuICA8ZGl2IGNsYXNzPVwiX19oZWFkZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiX190aXRsZVwiPlxuICAgICAgPHNwYW4+XG4gICAgICAgIHt7ICdAdGFzay1tYW5hZ2VtZW50OnRhc2stYm9hcmQuZGV0YWlsLXBhbmVsLnRpdGxlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGF4LWJ1dHRvbiBbbG9va109XCInYmxhbmsnXCIgY2xhc3M9XCJheC1zbSBheC1yb3VuZGVkLWZ1bGxcIiAob25DbGljayk9XCJ2bS5jbG9zZURldGFpbFBhbmVsKClcIj5cbiAgICAgIDxheC1pY29uIGljb249XCJmYS1zb2xpZCBmYS14bWFya1wiPjwvYXgtaWNvbj5cbiAgICA8L2F4LWJ1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cIl9fY29udGVudCBheC1mbGV4IGF4LWl0ZW1zLWNlbnRlciBheC1qdXN0aWZ5LWNlbnRlclwiPlxuICAgIDxheHAtc3RhdGUtbWVzc2FnZVxuICAgICAgaWNvbj1cImZhLWxpZ2h0IGZhLWNsaXBib2FyZC1saXN0LWNoZWNrXCJcbiAgICAgIFt0aXRsZV09XCInQHRhc2stbWFuYWdlbWVudDp0YXNrLWJvYXJkLmRldGFpbC1wYW5lbC5uby10YXNrLXNlbGVjdGVkLnRpdGxlJ1wiXG4gICAgICBbZGVzY3JpcHRpb25dPVwiJ0B0YXNrLW1hbmFnZW1lbnQ6dGFzay1ib2FyZC5kZXRhaWwtcGFuZWwubm8tdGFzay1zZWxlY3RlZC5kZXNjcmlwdGlvbidcIlxuICAgID5cbiAgICA8L2F4cC1zdGF0ZS1tZXNzYWdlPlxuICA8L2Rpdj5cbn1cbiJdfQ==","import { AXFormComponent, AXFormFieldComponent } from '@acorex/components/form';\nimport { AXLabelComponent } from '@acorex/components/label';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule, AXPWidgetsCatalog, } from '@acorex/platform/layout/widget-core';\nimport { AsyncPipe, CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, input, output, signal, ViewEncapsulation, } from '@angular/core';\nimport { isEqual, sortBy } from 'lodash-es';\nimport { RootConfig } from '../../../const';\nimport { AXMTaskBoardViewModel } from '../task-board.viewmodel';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/platform/layout/widget-core\";\nimport * as i2 from \"@angular/common\";\nexport class AXMTaskBoardFiltersComponent {\n constructor() {\n this.rootConfig = RootConfig;\n this.vm = inject(AXMTaskBoardViewModel);\n this.isQueryParam = input(false, ...(ngDevMode ? [{ debugName: \"isQueryParam\" }] : []));\n this.applyClicked = output();\n this.context = signal({}, ...(ngDevMode ? [{ debugName: \"context\" }] : []));\n this.isInitialized = false;\n this.#init = effect(() => {\n const isLoading = this.vm.isLoading();\n if (!isLoading && !this.isInitialized) {\n this.resetContextToViewModel();\n this.isInitialized = true;\n }\n }, ...(ngDevMode ? [{ debugName: \"#init\" }] : []));\n this.VALID_PRIORITIES = [\n { title: 'Highest', name: 'highest' },\n { title: 'High', name: 'high' },\n { title: 'Medium', name: 'medium' },\n { title: 'Low', name: 'low' },\n { title: 'Lowest', name: 'lowest' },\n { title: 'No Priority', name: 'no_priority' },\n ];\n this.isMultiSelectEnabled = computed(() => {\n const viewMode = this.vm.currentViewMode();\n return viewMode !== 'kanban' && viewMode !== 'status-grouped-grid';\n }, ...(ngDevMode ? [{ debugName: \"isMultiSelectEnabled\" }] : []));\n this.nodes = computed(() => [\n {\n name: 'taskType',\n path: 'options.taskType',\n type: AXPWidgetsCatalog.select,\n options: {\n valueField: 'name',\n textField: 'title',\n dataSource: 'task-types',\n placeholder: 'Select Task Type',\n multiple: this.isMultiSelectEnabled(),\n allowClear: this.isMultiSelectEnabled(),\n },\n meta: {\n title: 'task-board.filter.task-type',\n },\n },\n {\n name: 'assignee',\n path: 'options.assignee',\n type: AXPWidgetsCatalog.select,\n options: {\n multiple: true,\n valueField: 'id',\n allowSearch: true,\n dataSource: 'users',\n textField: 'displayName',\n placeholder: 'Select Assignee',\n },\n meta: {\n title: 'task-board.filter.assignee',\n },\n },\n {\n name: 'reporter',\n path: 'options.reporter',\n type: AXPWidgetsCatalog.select,\n options: {\n multiple: true,\n valueField: 'id',\n allowSearch: true,\n dataSource: 'users',\n textField: 'displayName',\n placeholder: 'Select Reporter',\n },\n meta: {\n title: 'task-board.filter.reporter',\n },\n },\n {\n name: 'priority',\n path: 'options.priority',\n type: AXPWidgetsCatalog.select,\n options: {\n multiple: true,\n valueField: 'name',\n textField: 'title',\n direction: 'horizontal',\n placeholder: 'Select Priority',\n dataSource: this.VALID_PRIORITIES,\n },\n meta: {\n title: 'task-board.filter.priority',\n },\n },\n ], ...(ngDevMode ? [{ debugName: \"nodes\" }] : []));\n }\n #init;\n resetContextToViewModel() {\n const vmTaskTypeNames = this.vm.selectedTaskTypeNames();\n const vmAssigneeIds = this.vm.selectedAssigneeIds();\n const vmReporterIds = this.vm.selectedReporterIds();\n const vmPriorities = this.vm.selectedPriorities();\n const currentViewIsMulti = this.isMultiSelectEnabled();\n const taskTypeContextValue = currentViewIsMulti\n ? vmTaskTypeNames\n : vmTaskTypeNames.length > 0\n ? vmTaskTypeNames[0]\n : null;\n this.context.set({\n options: {\n priority: vmPriorities,\n assignee: vmAssigneeIds,\n reporter: vmReporterIds,\n taskType: taskTypeContextValue,\n },\n });\n }\n handleContextChanged(e) {\n this.context.set(e.data);\n this.handleApply();\n }\n handleApply() {\n this.syncTaskTypesToViewModel(this.context()?.options?.taskType);\n this.syncAssigneesToViewModel(this.context()?.options?.assignee);\n this.syncReportersToViewModel(this.context()?.options?.reporter);\n this.syncPrioritiesToViewModel(this.context()?.options?.priority);\n this.applyClicked.emit();\n }\n syncTaskTypesToViewModel(selectedValue) {\n let newNames = [];\n if (Array.isArray(selectedValue)) {\n newNames = selectedValue.filter((v) => v != null).map((t) => (typeof t === 'string' ? t : t.name));\n }\n else if (selectedValue) {\n newNames = [typeof selectedValue === 'string' ? selectedValue : selectedValue.name];\n }\n const currentNames = this.vm.selectedTaskTypeNames();\n if (!isEqual(sortBy(currentNames), sortBy(newNames))) {\n this.vm.setSelectedTaskTypeNames(newNames, this.isQueryParam());\n }\n }\n syncAssigneesToViewModel(selectedAssignees) {\n let newIds = [];\n if (Array.isArray(selectedAssignees)) {\n newIds = selectedAssignees\n .filter((v) => v != null)\n .map((t) => (typeof t === 'string' || typeof t === 'number' ? t : t.id));\n }\n const currentIds = this.vm.selectedAssigneeIds();\n if (!isEqual(sortBy(currentIds), sortBy(newIds))) {\n this.vm.setSelectedAssigneeIds(newIds, this.isQueryParam());\n }\n }\n syncReportersToViewModel(selectedReporters) {\n let newIds = [];\n if (Array.isArray(selectedReporters)) {\n newIds = selectedReporters\n .filter((v) => v != null)\n .map((t) => (typeof t === 'string' || typeof t === 'number' ? t : t.id));\n }\n const currentIds = this.vm.selectedReporterIds();\n if (!isEqual(sortBy(currentIds), sortBy(newIds))) {\n this.vm.setSelectedReporterIds(newIds, this.isQueryParam());\n }\n }\n syncPrioritiesToViewModel(selectedPriorities) {\n let newNames = [];\n if (Array.isArray(selectedPriorities)) {\n newNames = selectedPriorities\n .filter((v) => v != null)\n .map((t) => (typeof t === 'string' ? t : t.name));\n }\n const currentNames = this.vm.selectedPriorities();\n if (!isEqual(sortBy(currentNames), sortBy(newNames))) {\n this.vm.setSelectedPriorities(newNames, this.isQueryParam());\n }\n }\n handleReset() {\n if (this.vm.currentViewMode() === 'kanban' || this.vm.currentViewMode() === 'status-grouped-grid') {\n const currentOptions = this.context();\n this.context.set({\n options: {\n taskType: currentOptions?.options?.taskType,\n },\n });\n return;\n }\n this.context.set({});\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMTaskBoardFiltersComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.16\", type: AXMTaskBoardFiltersComponent, isStandalone: true, selector: \"axm-task-board-filters\", inputs: { isQueryParam: { classPropertyName: \"isQueryParam\", publicName: \"isQueryParam\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { applyClicked: \"applyClicked\" }, ngImport: i0, template: \"<div class=\\\"ax-px-4 ax-py-3 ax-flex ax-flex-col ax-gap-2 ax-sm ax-w-[20rem]\\\">\\n <axp-widgets-container [context]=\\\"context()\\\" (onContextChanged)=\\\"handleContextChanged($event)\\\">\\n <ax-form>\\n <div class=\\\"ax-flex ax-flex-col ax-gap-4\\\">\\n <!-- @if (taskTypeItems()) {\\n <ax-form-field>\\n <ax-label> </ax-label>\\n <ax-selection-list\\n [items]=\\\"taskTypeItems()!\\\"\\n [ngModel]=\\\"selectedTaskTypeValues()!\\\"\\n (onValueChanged)=\\\"handleTaskTypeSelectionChange.emit($event.value)\\\"\\n direction=\\\"vertical\\\"\\n [multiple]=\\\"multiple()\\\"\\n [showControl]=\\\"true\\\"\\n valueField=\\\"id\\\"\\n textField=\\\"text\\\"\\n >\\n <ng-template #itemTemplate let-item>\\n <div class=\\\"ax-flex ax-items-center\\\">\\n @if (item.icon) {\\n <i [class]=\\\"item.icon\\\"></i>\\n }\\n <span [class]=\\\"item.icon ? 'ax-ml-2' : ''\\\">{{ item.text }}</span>\\n </div>\\n </ng-template>\\n </ax-selection-list>\\n <ax-select-box\\n [dataSource]=\\\"taskTypeItems()!\\\"\\n [ngModel]=\\\"selectedTaskTypeValues()!\\\"\\n (onValueChanged)=\\\"handleTaskTypeSelectionChange.emit($event.value)\\\"\\n [multiple]=\\\"multiple()\\\"\\n valueField=\\\"id\\\"\\n textField=\\\"text\\\"\\n >\\n </ax-select-box>\\n </ax-form-field>\\n <hr />\\n } -->\\n @for (node of nodes(); track $index) {\\n <ax-form-field>\\n @if (node.meta?.['title']) {\\n <ax-label>\\n {{ node.meta?.['title'] | translate: { scope: rootConfig.config.i18n } | async }}\\n </ax-label>\\n }\\n <ng-container axp-widget-renderer [node]=\\\"node\\\" [mode]=\\\"'edit'\\\"></ng-container>\\n </ax-form-field>\\n }\\n </div>\\n <!-- <div class=\\\"ax-flex ax-gap-2 ax-mt-6 ax-mb-1\\\">\\n <ax-button\\n (onClick)=\\\"handleReset()\\\"\\n class=\\\"ax-w-full\\\"\\n [text]=\\\"'@general:actions.clear.title' | translate | async\\\"\\n ></ax-button>\\n <ax-button\\n color=\\\"primary\\\"\\n [type]=\\\"'submit'\\\"\\n (onClick)=\\\"handleApply()\\\"\\n class=\\\"ax-w-full\\\"\\n [text]=\\\"'@general:actions.apply.title' | translate | async\\\"\\n ></ax-button>\\n </div> -->\\n </ax-form>\\n </axp-widgets-container>\\n</div>\\n\", dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"component\", type: AXFormFieldComponent, selector: \"ax-form-field\", inputs: [\"labelMode\"] }, { kind: \"ngmodule\", type: AXPWidgetCoreModule }, { kind: \"component\", type: i1.AXPWidgetContainerComponent, selector: \"axp-widgets-container\", inputs: [\"context\", \"functions\"], outputs: [\"onContextChanged\"] }, { kind: \"directive\", type: i1.AXPWidgetRendererDirective, selector: \"[axp-widget-renderer]\", inputs: [\"parentNode\", \"index\", \"mode\", \"node\"], outputs: [\"onOptionsChanged\", \"onValueChanged\", \"onLoad\"], exportAs: [\"widgetRenderer\"] }, { kind: \"component\", type: AXFormComponent, selector: \"ax-form\", inputs: [\"disabled\", \"readonly\", \"labelMode\", \"look\", \"messageStyle\", \"updateOn\", \"inUserInteractionActive\"], outputs: [\"onValidate\", \"updateOnChange\"] }, { kind: \"component\", type: AXLabelComponent, selector: \"ax-label\", inputs: [\"required\", \"for\"], outputs: [\"requiredChange\"] }, { kind: \"pipe\", type: i2.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMTaskBoardFiltersComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axm-task-board-filters', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n CommonModule,\n AXFormFieldComponent,\n AXPWidgetCoreModule,\n AXFormComponent,\n AXLabelComponent,\n AXTranslatorPipe,\n AsyncPipe,\n ], template: \"<div class=\\\"ax-px-4 ax-py-3 ax-flex ax-flex-col ax-gap-2 ax-sm ax-w-[20rem]\\\">\\n <axp-widgets-container [context]=\\\"context()\\\" (onContextChanged)=\\\"handleContextChanged($event)\\\">\\n <ax-form>\\n <div class=\\\"ax-flex ax-flex-col ax-gap-4\\\">\\n <!-- @if (taskTypeItems()) {\\n <ax-form-field>\\n <ax-label> </ax-label>\\n <ax-selection-list\\n [items]=\\\"taskTypeItems()!\\\"\\n [ngModel]=\\\"selectedTaskTypeValues()!\\\"\\n (onValueChanged)=\\\"handleTaskTypeSelectionChange.emit($event.value)\\\"\\n direction=\\\"vertical\\\"\\n [multiple]=\\\"multiple()\\\"\\n [showControl]=\\\"true\\\"\\n valueField=\\\"id\\\"\\n textField=\\\"text\\\"\\n >\\n <ng-template #itemTemplate let-item>\\n <div class=\\\"ax-flex ax-items-center\\\">\\n @if (item.icon) {\\n <i [class]=\\\"item.icon\\\"></i>\\n }\\n <span [class]=\\\"item.icon ? 'ax-ml-2' : ''\\\">{{ item.text }}</span>\\n </div>\\n </ng-template>\\n </ax-selection-list>\\n <ax-select-box\\n [dataSource]=\\\"taskTypeItems()!\\\"\\n [ngModel]=\\\"selectedTaskTypeValues()!\\\"\\n (onValueChanged)=\\\"handleTaskTypeSelectionChange.emit($event.value)\\\"\\n [multiple]=\\\"multiple()\\\"\\n valueField=\\\"id\\\"\\n textField=\\\"text\\\"\\n >\\n </ax-select-box>\\n </ax-form-field>\\n <hr />\\n } -->\\n @for (node of nodes(); track $index) {\\n <ax-form-field>\\n @if (node.meta?.['title']) {\\n <ax-label>\\n {{ node.meta?.['title'] | translate: { scope: rootConfig.config.i18n } | async }}\\n </ax-label>\\n }\\n <ng-container axp-widget-renderer [node]=\\\"node\\\" [mode]=\\\"'edit'\\\"></ng-container>\\n </ax-form-field>\\n }\\n </div>\\n <!-- <div class=\\\"ax-flex ax-gap-2 ax-mt-6 ax-mb-1\\\">\\n <ax-button\\n (onClick)=\\\"handleReset()\\\"\\n class=\\\"ax-w-full\\\"\\n [text]=\\\"'@general:actions.clear.title' | translate | async\\\"\\n ></ax-button>\\n <ax-button\\n color=\\\"primary\\\"\\n [type]=\\\"'submit'\\\"\\n (onClick)=\\\"handleApply()\\\"\\n class=\\\"ax-w-full\\\"\\n [text]=\\\"'@general:actions.apply.title' | translate | async\\\"\\n ></ax-button>\\n </div> -->\\n </ax-form>\\n </axp-widgets-container>\\n</div>\\n\" }]\n }], propDecorators: { isQueryParam: [{ type: i0.Input, args: [{ isSignal: true, alias: \"isQueryParam\", required: false }] }], applyClicked: [{ type: i0.Output, args: [\"applyClicked\"] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1ib2FyZC1maWx0ZXJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy90YXNrLW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy90YXNrLWJvYXJkL3Rhc2stYm9hcmQtZmlsdGVycy90YXNrLWJvYXJkLWZpbHRlcnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3Rhc2stbWFuYWdlbWVudC9zcmMvbGliL2ZlYXR1cmVzL3Rhc2stYm9hcmQvdGFzay1ib2FyZC1maWx0ZXJzL3Rhc2stYm9hcmQtZmlsdGVycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUVMLG1CQUFtQixFQUVuQixpQkFBaUIsR0FDbEIsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLHFCQUFxQixFQUF3QixNQUFNLHlCQUF5QixDQUFDOzs7O0FBc0J0RixNQUFNLE9BQU8sNEJBQTRCO0lBZnpDO1FBZ0JxQixlQUFVLEdBQUcsVUFBVSxDQUFDO1FBRTFCLE9BQUUsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUVwRCxpQkFBWSxHQUFHLEtBQUssQ0FBVSxLQUFLLHdEQUFDLENBQUM7UUFFckMsaUJBQVksR0FBRyxNQUFNLEVBQVEsQ0FBQztRQUVwQixZQUFPLEdBQUcsTUFBTSxDQUFvQixFQUFFLG1EQUFDLENBQUM7UUFDMUMsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFFOUIsVUFBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDbEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUMsaURBQUMsQ0FBQztRQUVjLHFCQUFnQixHQUFvRDtZQUNuRixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTtZQUNyQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtZQUMvQixFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtZQUNuQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRTtZQUM3QixFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtZQUNuQyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRTtTQUM5QyxDQUFDO1FBeUJlLHlCQUFvQixHQUFHLFFBQVEsQ0FBVSxHQUFHLEVBQUU7WUFDN0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMzQyxPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUksUUFBUSxLQUFLLHFCQUFxQixDQUFDO1FBQ3JFLENBQUMsZ0VBQUMsQ0FBQztRQUVPLFVBQUssR0FBRyxRQUFRLENBQWtCLEdBQUcsRUFBRSxDQUFDO1lBQ2hEO2dCQUNFLElBQUksRUFBRSxVQUFVO2dCQUNoQixJQUFJLEVBQUUsa0JBQWtCO2dCQUN4QixJQUFJLEVBQUUsaUJBQWlCLENBQUMsTUFBTTtnQkFDOUIsT0FBTyxFQUFFO29CQUNQLFVBQVUsRUFBRSxNQUFNO29CQUNsQixTQUFTLEVBQUUsT0FBTztvQkFDbEIsVUFBVSxFQUFFLFlBQVk7b0JBQ3hCLFdBQVcsRUFBRSxrQkFBa0I7b0JBQy9CLFFBQVEsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7b0JBQ3JDLFVBQVUsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7aUJBQ3hDO2dCQUNELElBQUksRUFBRTtvQkFDSixLQUFLLEVBQUUsNkJBQTZCO2lCQUNyQzthQUNGO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLElBQUksRUFBRSxrQkFBa0I7Z0JBQ3hCLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxNQUFNO2dCQUM5QixPQUFPLEVBQUU7b0JBQ1AsUUFBUSxFQUFFLElBQUk7b0JBQ2QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFdBQVcsRUFBRSxJQUFJO29CQUNqQixVQUFVLEVBQUUsT0FBTztvQkFDbkIsU0FBUyxFQUFFLGFBQWE7b0JBQ3hCLFdBQVcsRUFBRSxpQkFBaUI7aUJBQy9CO2dCQUNELElBQUksRUFBRTtvQkFDSixLQUFLLEVBQUUsNEJBQTRCO2lCQUNwQzthQUNGO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLElBQUksRUFBRSxrQkFBa0I7Z0JBQ3hCLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxNQUFNO2dCQUM5QixPQUFPLEVBQUU7b0JBQ1AsUUFBUSxFQUFFLElBQUk7b0JBQ2QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFdBQVcsRUFBRSxJQUFJO29CQUNqQixVQUFVLEVBQUUsT0FBTztvQkFDbkIsU0FBUyxFQUFFLGFBQWE7b0JBQ3hCLFdBQVcsRUFBRSxpQkFBaUI7aUJBQy9CO2dCQUNELElBQUksRUFBRTtvQkFDSixLQUFLLEVBQUUsNEJBQTRCO2lCQUNwQzthQUNGO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLElBQUksRUFBRSxrQkFBa0I7Z0JBQ3hCLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxNQUFNO2dCQUM5QixPQUFPLEVBQUU7b0JBQ1AsUUFBUSxFQUFFLElBQUk7b0JBQ2QsVUFBVSxFQUFFLE1BQU07b0JBQ2xCLFNBQVMsRUFBRSxPQUFPO29CQUNsQixTQUFTLEVBQUUsWUFBWTtvQkFDdkIsV0FBVyxFQUFFLGlCQUFpQjtvQkFDOUIsVUFBVSxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7aUJBQ2xDO2dCQUNELElBQUksRUFBRTtvQkFDSixLQUFLLEVBQUUsNEJBQTRCO2lCQUNwQzthQUNGO1NBQ0YsaURBQUMsQ0FBQztLQStFSjtJQTdMQyxLQUFLLENBTUY7SUFXSSx1QkFBdUI7UUFDNUIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3hELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUNwRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDcEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ2xELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFFdkQsTUFBTSxvQkFBb0IsR0FBRyxrQkFBa0I7WUFDN0MsQ0FBQyxDQUFDLGVBQWU7WUFDakIsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFDMUIsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BCLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFWCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUNmLE9BQU8sRUFBRTtnQkFDUCxRQUFRLEVBQUUsWUFBWTtnQkFDdEIsUUFBUSxFQUFFLGFBQWE7Z0JBQ3ZCLFFBQVEsRUFBRSxhQUFhO2dCQUN2QixRQUFRLEVBQUUsb0JBQW9CO2FBQy9CO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQTBFUyxvQkFBb0IsQ0FBQyxDQUFrQztRQUMvRCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFUyxXQUFXO1FBQ25CLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVPLHdCQUF3QixDQUFDLGFBQTJFO1FBQzFHLElBQUksUUFBUSxHQUFhLEVBQUUsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxRQUFRLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDckcsQ0FBQzthQUFNLElBQUksYUFBYSxFQUFFLENBQUM7WUFDekIsUUFBUSxHQUFHLENBQUMsT0FBTyxhQUFhLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0RixDQUFDO1FBQ0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3JELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDckQsSUFBSSxDQUFDLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDbEUsQ0FBQztJQUNILENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxpQkFBc0U7UUFDckcsSUFBSSxNQUFNLEdBQXdCLEVBQUUsQ0FBQztRQUNyQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sR0FBRyxpQkFBaUI7aUJBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztpQkFDeEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDN0UsQ0FBQztRQUNELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUNqRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxFQUFFLENBQUMsc0JBQXNCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQzlELENBQUM7SUFDSCxDQUFDO0lBRU8sd0JBQXdCLENBQUMsaUJBQXNFO1FBQ3JHLElBQUksTUFBTSxHQUF3QixFQUFFLENBQUM7UUFDckMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztZQUNyQyxNQUFNLEdBQUcsaUJBQWlCO2lCQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7aUJBQ3hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdFLENBQUM7UUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDakQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsRUFBRSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUM5RCxDQUFDO0lBQ0gsQ0FBQztJQUVPLHlCQUF5QixDQUFDLGtCQUE0RDtRQUM1RixJQUFJLFFBQVEsR0FBMkIsRUFBRSxDQUFDO1FBQzFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUM7WUFDdEMsUUFBUSxHQUFHLGtCQUFrQjtpQkFDMUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO2lCQUN4QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBRSxDQUEwQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNoRixDQUFDO1FBQ0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDckQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDL0QsQ0FBQztJQUNILENBQUM7SUFFUyxXQUFXO1FBQ25CLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEVBQUUsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEVBQUUsS0FBSyxxQkFBcUIsRUFBRSxDQUFDO1lBQ2xHLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDZixPQUFPLEVBQUU7b0JBQ1AsUUFBUSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsUUFBUTtpQkFDNUM7YUFDRixDQUFDLENBQUM7WUFDSCxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7K0dBeE1VLDRCQUE0QjttR0FBNUIsNEJBQTRCLHNSQzdDekMsOGhGQWtFQSwyQ0Q5QkksWUFBWSwrQkFDWixvQkFBb0IsZ0ZBQ3BCLG1CQUFtQix5YUFDbkIsZUFBZSw2TUFDZixnQkFBZ0IsK0pBQ2hCLGdCQUFnQjs7NEZBSVAsNEJBQTRCO2tCQWZ4QyxTQUFTOytCQUNFLHdCQUF3QixtQkFFakIsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxXQUM1Qjt3QkFDUCxZQUFZO3dCQUNaLG9CQUFvQjt3QkFDcEIsbUJBQW1CO3dCQUNuQixlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIsZ0JBQWdCO3dCQUNoQixTQUFTO3FCQUNWIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhGb3JtQ29tcG9uZW50LCBBWEZvcm1GaWVsZENvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9mb3JtJztcbmltcG9ydCB7IEFYTGFiZWxDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvbGFiZWwnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdG9yUGlwZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQge1xuICBBWFBXaWRnZXRDb3JlQ29udGV4dENoYW5nZUV2ZW50LFxuICBBWFBXaWRnZXRDb3JlTW9kdWxlLFxuICBBWFBXaWRnZXROb2RlLFxuICBBWFBXaWRnZXRzQ2F0YWxvZyxcbn0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvd2lkZ2V0LWNvcmUnO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzRXF1YWwsIHNvcnRCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBSb290Q29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vY29uc3QnO1xuaW1wb3J0IHsgQVhNVGFza0JvYXJkVmlld01vZGVsLCBBWFBQcmlvcml0eUZpbHRlcktleSB9IGZyb20gJy4uL3Rhc2stYm9hcmQudmlld21vZGVsJztcblxudHlwZSBUYXNrVHlwZSA9IHsgbmFtZTogc3RyaW5nOyB0aXRsZTogc3RyaW5nIH07XG50eXBlIEFzc2lnbmVlID0geyBpZDogc3RyaW5nIHwgbnVtYmVyOyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbnR5cGUgUmVwb3J0ZXIgPSB7IGlkOiBzdHJpbmcgfCBudW1iZXI7IFtrZXk6IHN0cmluZ106IGFueSB9O1xudHlwZSBQcmlvcml0eSA9IHsgbmFtZTogQVhQUHJpb3JpdHlGaWx0ZXJLZXk7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheG0tdGFzay1ib2FyZC1maWx0ZXJzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Rhc2stYm9hcmQtZmlsdGVycy5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEFYRm9ybUZpZWxkQ29tcG9uZW50LFxuICAgIEFYUFdpZGdldENvcmVNb2R1bGUsXG4gICAgQVhGb3JtQ29tcG9uZW50LFxuICAgIEFYTGFiZWxDb21wb25lbnQsXG4gICAgQVhUcmFuc2xhdG9yUGlwZSxcbiAgICBBc3luY1BpcGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFYTVRhc2tCb2FyZEZpbHRlcnNDb21wb25lbnQge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcm9vdENvbmZpZyA9IFJvb3RDb25maWc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSB2bSA9IGluamVjdChBWE1UYXNrQm9hcmRWaWV3TW9kZWwpO1xuXG4gIGlzUXVlcnlQYXJhbSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBhcHBseUNsaWNrZWQgPSBvdXRwdXQ8dm9pZD4oKTtcblxuICBwcm90ZWN0ZWQgY29udGV4dCA9IHNpZ25hbDx7IG9wdGlvbnM/OiBhbnkgfT4oe30pO1xuICBwcml2YXRlIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICAjaW5pdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaXNMb2FkaW5nID0gdGhpcy52bS5pc0xvYWRpbmcoKTtcbiAgICBpZiAoIWlzTG9hZGluZyAmJiAhdGhpcy5pc0luaXRpYWxpemVkKSB7XG4gICAgICB0aGlzLnJlc2V0Q29udGV4dFRvVmlld01vZGVsKCk7XG4gICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBWQUxJRF9QUklPUklUSUVTOiB7IHRpdGxlOiBzdHJpbmc7IG5hbWU6IEFYUFByaW9yaXR5RmlsdGVyS2V5IH1bXSA9IFtcbiAgICB7IHRpdGxlOiAnSGlnaGVzdCcsIG5hbWU6ICdoaWdoZXN0JyB9LFxuICAgIHsgdGl0bGU6ICdIaWdoJywgbmFtZTogJ2hpZ2gnIH0sXG4gICAgeyB0aXRsZTogJ01lZGl1bScsIG5hbWU6ICdtZWRpdW0nIH0sXG4gICAgeyB0aXRsZTogJ0xvdycsIG5hbWU6ICdsb3cnIH0sXG4gICAgeyB0aXRsZTogJ0xvd2VzdCcsIG5hbWU6ICdsb3dlc3QnIH0sXG4gICAgeyB0aXRsZTogJ05vIFByaW9yaXR5JywgbmFtZTogJ25vX3ByaW9yaXR5JyB9LFxuICBdO1xuXG4gIHB1YmxpYyByZXNldENvbnRleHRUb1ZpZXdNb2RlbCgpOiB2b2lkIHtcbiAgICBjb25zdCB2bVRhc2tUeXBlTmFtZXMgPSB0aGlzLnZtLnNlbGVjdGVkVGFza1R5cGVOYW1lcygpO1xuICAgIGNvbnN0IHZtQXNzaWduZWVJZHMgPSB0aGlzLnZtLnNlbGVjdGVkQXNzaWduZWVJZHMoKTtcbiAgICBjb25zdCB2bVJlcG9ydGVySWRzID0gdGhpcy52bS5zZWxlY3RlZFJlcG9ydGVySWRzKCk7XG4gICAgY29uc3Qgdm1Qcmlvcml0aWVzID0gdGhpcy52bS5zZWxlY3RlZFByaW9yaXRpZXMoKTtcbiAgICBjb25zdCBjdXJyZW50Vmlld0lzTXVsdGkgPSB0aGlzLmlzTXVsdGlTZWxlY3RFbmFibGVkKCk7XG5cbiAgICBjb25zdCB0YXNrVHlwZUNvbnRleHRWYWx1ZSA9IGN1cnJlbnRWaWV3SXNNdWx0aVxuICAgICAgPyB2bVRhc2tUeXBlTmFtZXNcbiAgICAgIDogdm1UYXNrVHlwZU5hbWVzLmxlbmd0aCA+IDBcbiAgICAgICAgPyB2bVRhc2tUeXBlTmFtZXNbMF1cbiAgICAgICAgOiBudWxsO1xuXG4gICAgdGhpcy5jb250ZXh0LnNldCh7XG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIHByaW9yaXR5OiB2bVByaW9yaXRpZXMsXG4gICAgICAgIGFzc2lnbmVlOiB2bUFzc2lnbmVlSWRzLFxuICAgICAgICByZXBvcnRlcjogdm1SZXBvcnRlcklkcyxcbiAgICAgICAgdGFza1R5cGU6IHRhc2tUeXBlQ29udGV4dFZhbHVlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgaXNNdWx0aVNlbGVjdEVuYWJsZWQgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgY29uc3Qgdmlld01vZGUgPSB0aGlzLnZtLmN1cnJlbnRWaWV3TW9kZSgpO1xuICAgIHJldHVybiB2aWV3TW9kZSAhPT0gJ2thbmJhbicgJiYgdmlld01vZGUgIT09ICdzdGF0dXMtZ3JvdXBlZC1ncmlkJztcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIG5vZGVzID0gY29tcHV0ZWQ8QVhQV2lkZ2V0Tm9kZVtdPigoKSA9PiBbXG4gICAge1xuICAgICAgbmFtZTogJ3Rhc2tUeXBlJyxcbiAgICAgIHBhdGg6ICdvcHRpb25zLnRhc2tUeXBlJyxcbiAgICAgIHR5cGU6IEFYUFdpZGdldHNDYXRhbG9nLnNlbGVjdCxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgdmFsdWVGaWVsZDogJ25hbWUnLFxuICAgICAgICB0ZXh0RmllbGQ6ICd0aXRsZScsXG4gICAgICAgIGRhdGFTb3VyY2U6ICd0YXNrLXR5cGVzJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdTZWxlY3QgVGFzayBUeXBlJyxcbiAgICAgICAgbXVsdGlwbGU6IHRoaXMuaXNNdWx0aVNlbGVjdEVuYWJsZWQoKSxcbiAgICAgICAgYWxsb3dDbGVhcjogdGhpcy5pc011bHRpU2VsZWN0RW5hYmxlZCgpLFxuICAgICAgfSxcbiAgICAgIG1ldGE6IHtcbiAgICAgICAgdGl0bGU6ICd0YXNrLWJvYXJkLmZpbHRlci50YXNrLXR5cGUnLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdhc3NpZ25lZScsXG4gICAgICBwYXRoOiAnb3B0aW9ucy5hc3NpZ25lZScsXG4gICAgICB0eXBlOiBBWFBXaWRnZXRzQ2F0YWxvZy5zZWxlY3QsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgICB2YWx1ZUZpZWxkOiAnaWQnLFxuICAgICAgICBhbGxvd1NlYXJjaDogdHJ1ZSxcbiAgICAgICAgZGF0YVNvdXJjZTogJ3VzZXJzJyxcbiAgICAgICAgdGV4dEZpZWxkOiAnZGlzcGxheU5hbWUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ1NlbGVjdCBBc3NpZ25lZScsXG4gICAgICB9LFxuICAgICAgbWV0YToge1xuICAgICAgICB0aXRsZTogJ3Rhc2stYm9hcmQuZmlsdGVyLmFzc2lnbmVlJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncmVwb3J0ZXInLFxuICAgICAgcGF0aDogJ29wdGlvbnMucmVwb3J0ZXInLFxuICAgICAgdHlwZTogQVhQV2lkZ2V0c0NhdGFsb2cuc2VsZWN0LFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWVGaWVsZDogJ2lkJyxcbiAgICAgICAgYWxsb3dTZWFyY2g6IHRydWUsXG4gICAgICAgIGRhdGFTb3VyY2U6ICd1c2VycycsXG4gICAgICAgIHRleHRGaWVsZDogJ2Rpc3BsYXlOYW1lJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdTZWxlY3QgUmVwb3J0ZXInLFxuICAgICAgfSxcbiAgICAgIG1ldGE6IHtcbiAgICAgICAgdGl0bGU6ICd0YXNrLWJvYXJkLmZpbHRlci5yZXBvcnRlcicsXG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3ByaW9yaXR5JyxcbiAgICAgIHBhdGg6ICdvcHRpb25zLnByaW9yaXR5JyxcbiAgICAgIHR5cGU6IEFYUFdpZGdldHNDYXRhbG9nLnNlbGVjdCxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgICAgIHZhbHVlRmllbGQ6ICduYW1lJyxcbiAgICAgICAgdGV4dEZpZWxkOiAndGl0bGUnLFxuICAgICAgICBkaXJlY3Rpb246ICdob3Jpem9udGFsJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdTZWxlY3QgUHJpb3JpdHknLFxuICAgICAgICBkYXRhU291cmNlOiB0aGlzLlZBTElEX1BSSU9SSVRJRVMsXG4gICAgICB9LFxuICAgICAgbWV0YToge1xuICAgICAgICB0aXRsZTogJ3Rhc2stYm9hcmQuZmlsdGVyLnByaW9yaXR5JyxcbiAgICAgIH0sXG4gICAgfSxcbiAgXSk7XG5cbiAgcHJvdGVjdGVkIGhhbmRsZUNvbnRleHRDaGFuZ2VkKGU6IEFYUFdpZGdldENvcmVDb250ZXh0Q2hhbmdlRXZlbnQpIHtcbiAgICB0aGlzLmNvbnRleHQuc2V0KGUuZGF0YSk7XG4gICAgdGhpcy5oYW5kbGVBcHBseSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZUFwcGx5KCkge1xuICAgIHRoaXMuc3luY1Rhc2tUeXBlc1RvVmlld01vZGVsKHRoaXMuY29udGV4dCgpPy5vcHRpb25zPy50YXNrVHlwZSk7XG4gICAgdGhpcy5zeW5jQXNzaWduZWVzVG9WaWV3TW9kZWwodGhpcy5jb250ZXh0KCk/Lm9wdGlvbnM/LmFzc2lnbmVlKTtcbiAgICB0aGlzLnN5bmNSZXBvcnRlcnNUb1ZpZXdNb2RlbCh0aGlzLmNvbnRleHQoKT8ub3B0aW9ucz8ucmVwb3J0ZXIpO1xuICAgIHRoaXMuc3luY1ByaW9yaXRpZXNUb1ZpZXdNb2RlbCh0aGlzLmNvbnRleHQoKT8ub3B0aW9ucz8ucHJpb3JpdHkpO1xuICAgIHRoaXMuYXBwbHlDbGlja2VkLmVtaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3luY1Rhc2tUeXBlc1RvVmlld01vZGVsKHNlbGVjdGVkVmFsdWU6IFRhc2tUeXBlIHwgVGFza1R5cGVbXSB8IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIGxldCBuZXdOYW1lczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzZWxlY3RlZFZhbHVlKSkge1xuICAgICAgbmV3TmFtZXMgPSBzZWxlY3RlZFZhbHVlLmZpbHRlcigodikgPT4gdiAhPSBudWxsKS5tYXAoKHQpID0+ICh0eXBlb2YgdCA9PT0gJ3N0cmluZycgPyB0IDogdC5uYW1lKSk7XG4gICAgfSBlbHNlIGlmIChzZWxlY3RlZFZhbHVlKSB7XG4gICAgICBuZXdOYW1lcyA9IFt0eXBlb2Ygc2VsZWN0ZWRWYWx1ZSA9PT0gJ3N0cmluZycgPyBzZWxlY3RlZFZhbHVlIDogc2VsZWN0ZWRWYWx1ZS5uYW1lXTtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudE5hbWVzID0gdGhpcy52bS5zZWxlY3RlZFRhc2tUeXBlTmFtZXMoKTtcbiAgICBpZiAoIWlzRXF1YWwoc29ydEJ5KGN1cnJlbnROYW1lcyksIHNvcnRCeShuZXdOYW1lcykpKSB7XG4gICAgICB0aGlzLnZtLnNldFNlbGVjdGVkVGFza1R5cGVOYW1lcyhuZXdOYW1lcywgdGhpcy5pc1F1ZXJ5UGFyYW0oKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzeW5jQXNzaWduZWVzVG9WaWV3TW9kZWwoc2VsZWN0ZWRBc3NpZ25lZXM6IEFzc2lnbmVlW10gfCAoc3RyaW5nIHwgbnVtYmVyKVtdIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIGxldCBuZXdJZHM6IChzdHJpbmcgfCBudW1iZXIpW10gPSBbXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzZWxlY3RlZEFzc2lnbmVlcykpIHtcbiAgICAgIG5ld0lkcyA9IHNlbGVjdGVkQXNzaWduZWVzXG4gICAgICAgIC5maWx0ZXIoKHYpID0+IHYgIT0gbnVsbClcbiAgICAgICAgLm1hcCgodCkgPT4gKHR5cGVvZiB0ID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdCA9PT0gJ251bWJlcicgPyB0IDogdC5pZCkpO1xuICAgIH1cbiAgICBjb25zdCBjdXJyZW50SWRzID0gdGhpcy52bS5zZWxlY3RlZEFzc2lnbmVlSWRzKCk7XG4gICAgaWYgKCFpc0VxdWFsKHNvcnRCeShjdXJyZW50SWRzKSwgc29ydEJ5KG5ld0lkcykpKSB7XG4gICAgICB0aGlzLnZtLnNldFNlbGVjdGVkQXNzaWduZWVJZHMobmV3SWRzLCB0aGlzLmlzUXVlcnlQYXJhbSgpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN5bmNSZXBvcnRlcnNUb1ZpZXdNb2RlbChzZWxlY3RlZFJlcG9ydGVyczogUmVwb3J0ZXJbXSB8IChzdHJpbmcgfCBudW1iZXIpW10gfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgbGV0IG5ld0lkczogKHN0cmluZyB8IG51bWJlcilbXSA9IFtdO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNlbGVjdGVkUmVwb3J0ZXJzKSkge1xuICAgICAgbmV3SWRzID0gc2VsZWN0ZWRSZXBvcnRlcnNcbiAgICAgICAgLmZpbHRlcigodikgPT4gdiAhPSBudWxsKVxuICAgICAgICAubWFwKCh0KSA9PiAodHlwZW9mIHQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0ID09PSAnbnVtYmVyJyA/IHQgOiB0LmlkKSk7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnRJZHMgPSB0aGlzLnZtLnNlbGVjdGVkUmVwb3J0ZXJJZHMoKTtcbiAgICBpZiAoIWlzRXF1YWwoc29ydEJ5KGN1cnJlbnRJZHMpLCBzb3J0QnkobmV3SWRzKSkpIHtcbiAgICAgIHRoaXMudm0uc2V0U2VsZWN0ZWRSZXBvcnRlcklkcyhuZXdJZHMsIHRoaXMuaXNRdWVyeVBhcmFtKCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3luY1ByaW9yaXRpZXNUb1ZpZXdNb2RlbChzZWxlY3RlZFByaW9yaXRpZXM6IFByaW9yaXR5W10gfCBzdHJpbmdbXSB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICBsZXQgbmV3TmFtZXM6IEFYUFByaW9yaXR5RmlsdGVyS2V5W10gPSBbXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzZWxlY3RlZFByaW9yaXRpZXMpKSB7XG4gICAgICBuZXdOYW1lcyA9IHNlbGVjdGVkUHJpb3JpdGllc1xuICAgICAgICAuZmlsdGVyKCh2KSA9PiB2ICE9IG51bGwpXG4gICAgICAgIC5tYXAoKHQpID0+ICh0eXBlb2YgdCA9PT0gJ3N0cmluZycgPyAodCBhcyBBWFBQcmlvcml0eUZpbHRlcktleSkgOiB0Lm5hbWUpKTtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudE5hbWVzID0gdGhpcy52bS5zZWxlY3RlZFByaW9yaXRpZXMoKTtcbiAgICBpZiAoIWlzRXF1YWwoc29ydEJ5KGN1cnJlbnROYW1lcyksIHNvcnRCeShuZXdOYW1lcykpKSB7XG4gICAgICB0aGlzLnZtLnNldFNlbGVjdGVkUHJpb3JpdGllcyhuZXdOYW1lcywgdGhpcy5pc1F1ZXJ5UGFyYW0oKSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZVJlc2V0KCkge1xuICAgIGlmICh0aGlzLnZtLmN1cnJlbnRWaWV3TW9kZSgpID09PSAna2FuYmFuJyB8fCB0aGlzLnZtLmN1cnJlbnRWaWV3TW9kZSgpID09PSAnc3RhdHVzLWdyb3VwZWQtZ3JpZCcpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRPcHRpb25zID0gdGhpcy5jb250ZXh0KCk7XG4gICAgICB0aGlzLmNvbnRleHQuc2V0KHtcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIHRhc2tUeXBlOiBjdXJyZW50T3B0aW9ucz8ub3B0aW9ucz8udGFza1R5cGUsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jb250ZXh0LnNldCh7fSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJheC1weC00IGF4LXB5LTMgYXgtZmxleCBheC1mbGV4LWNvbCBheC1nYXAtMiBheC1zbSBheC13LVsyMHJlbV1cIj5cbiAgPGF4cC13aWRnZXRzLWNvbnRhaW5lciBbY29udGV4dF09XCJjb250ZXh0KClcIiAob25Db250ZXh0Q2hhbmdlZCk9XCJoYW5kbGVDb250ZXh0Q2hhbmdlZCgkZXZlbnQpXCI+XG4gICAgPGF4LWZvcm0+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1mbGV4LWNvbCBheC1nYXAtNFwiPlxuICAgICAgICA8IS0tIEBpZiAodGFza1R5cGVJdGVtcygpKSB7XG4gICAgICAgICAgPGF4LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8YXgtbGFiZWw+IDwvYXgtbGFiZWw+XG4gICAgICAgICAgICA8YXgtc2VsZWN0aW9uLWxpc3RcbiAgICAgICAgICAgICAgW2l0ZW1zXT1cInRhc2tUeXBlSXRlbXMoKSFcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZFRhc2tUeXBlVmFsdWVzKCkhXCJcbiAgICAgICAgICAgICAgKG9uVmFsdWVDaGFuZ2VkKT1cImhhbmRsZVRhc2tUeXBlU2VsZWN0aW9uQ2hhbmdlLmVtaXQoJGV2ZW50LnZhbHVlKVwiXG4gICAgICAgICAgICAgIGRpcmVjdGlvbj1cInZlcnRpY2FsXCJcbiAgICAgICAgICAgICAgW211bHRpcGxlXT1cIm11bHRpcGxlKClcIlxuICAgICAgICAgICAgICBbc2hvd0NvbnRyb2xdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIHZhbHVlRmllbGQ9XCJpZFwiXG4gICAgICAgICAgICAgIHRleHRGaWVsZD1cInRleHRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2l0ZW1UZW1wbGF0ZSBsZXQtaXRlbT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5pY29uKSB7XG4gICAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJpdGVtLmljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiaXRlbS5pY29uID8gJ2F4LW1sLTInIDogJydcIj57eyBpdGVtLnRleHQgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2F4LXNlbGVjdGlvbi1saXN0PlxuICAgICAgICAgICAgPGF4LXNlbGVjdC1ib3hcbiAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwidGFza1R5cGVJdGVtcygpIVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkVGFza1R5cGVWYWx1ZXMoKSFcIlxuICAgICAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwiaGFuZGxlVGFza1R5cGVTZWxlY3Rpb25DaGFuZ2UuZW1pdCgkZXZlbnQudmFsdWUpXCJcbiAgICAgICAgICAgICAgW211bHRpcGxlXT1cIm11bHRpcGxlKClcIlxuICAgICAgICAgICAgICB2YWx1ZUZpZWxkPVwiaWRcIlxuICAgICAgICAgICAgICB0ZXh0RmllbGQ9XCJ0ZXh0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvYXgtc2VsZWN0LWJveD5cbiAgICAgICAgICA8L2F4LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPGhyIC8+XG4gICAgICAgIH0gLS0+XG4gICAgICAgIEBmb3IgKG5vZGUgb2Ygbm9kZXMoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgPGF4LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICBAaWYgKG5vZGUubWV0YT8uWyd0aXRsZSddKSB7XG4gICAgICAgICAgICAgIDxheC1sYWJlbD5cbiAgICAgICAgICAgICAgICB7eyBub2RlLm1ldGE/LlsndGl0bGUnXSB8IHRyYW5zbGF0ZTogeyBzY29wZTogcm9vdENvbmZpZy5jb25maWcuaTE4biB9IHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgPC9heC1sYWJlbD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgYXhwLXdpZGdldC1yZW5kZXJlciBbbm9kZV09XCJub2RlXCIgW21vZGVdPVwiJ2VkaXQnXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9heC1mb3JtLWZpZWxkPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtZ2FwLTIgYXgtbXQtNiBheC1tYi0xXCI+XG4gICAgICAgIDxheC1idXR0b25cbiAgICAgICAgICAob25DbGljayk9XCJoYW5kbGVSZXNldCgpXCJcbiAgICAgICAgICBjbGFzcz1cImF4LXctZnVsbFwiXG4gICAgICAgICAgW3RleHRdPVwiJ0BnZW5lcmFsOmFjdGlvbnMuY2xlYXIudGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmNcIlxuICAgICAgICA+PC9heC1idXR0b24+XG4gICAgICAgIDxheC1idXR0b25cbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgIFt0eXBlXT1cIidzdWJtaXQnXCJcbiAgICAgICAgICAob25DbGljayk9XCJoYW5kbGVBcHBseSgpXCJcbiAgICAgICAgICBjbGFzcz1cImF4LXctZnVsbFwiXG4gICAgICAgICAgW3RleHRdPVwiJ0BnZW5lcmFsOmFjdGlvbnMuYXBwbHkudGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmNcIlxuICAgICAgICA+PC9heC1idXR0b24+XG4gICAgICA8L2Rpdj4gLS0+XG4gICAgPC9heC1mb3JtPlxuICA8L2F4cC13aWRnZXRzLWNvbnRhaW5lcj5cbjwvZGl2PlxuIl19","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXPopoverModule } from '@acorex/components/popover';\nimport { AXSchedulerComponent, AXSchedulerService, } from '@acorex/components/scheduler';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPSettingsService } from '@acorex/platform/common';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, output, signal, viewChild, ViewEncapsulation, } from '@angular/core';\nimport { RootConfig } from '../../../../const';\nimport { AXPTaskBoardService } from '../../task-board.service';\nimport { AXMTaskBoardViewModel } from '../../task-board.viewmodel';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@acorex/components/popover\";\nimport * as i3 from \"@acorex/components/button\";\nimport * as i4 from \"@acorex/components/dropdown\";\nimport * as i5 from \"@acorex/components/decorators\";\nexport class AXMTaskBoardCalendarViewComponent {\n constructor() {\n this.vm = inject(AXMTaskBoardViewModel);\n this.calendarService = inject(AXCalendarService);\n this.taskBoardService = inject(AXPTaskBoardService);\n this.settingService = inject(AXPSettingsService);\n this.commandService = inject(AXPCommandService);\n this.schedulerService = inject(AXSchedulerService);\n this.schedulerComponent = viewChild(AXSchedulerComponent, ...(ngDevMode ? [{ debugName: \"schedulerComponent\" }] : []));\n this.taskPopover = viewChild.required('taskPopover');\n this.selectedTask = signal(null, ...(ngDevMode ? [{ debugName: \"selectedTask\" }] : []));\n this.popoverTarget = signal(null, ...(ngDevMode ? [{ debugName: \"popoverTarget\" }] : []));\n this.taskActions = signal([], ...(ngDevMode ? [{ debugName: \"taskActions\" }] : []));\n this.customComponentType = signal(null, ...(ngDevMode ? [{ debugName: \"customComponentType\" }] : []));\n // Separate primary and secondary actions\n this.primaryActions = computed(() => {\n return this.taskActions().filter((action) => (action.priority ?? 'secondary') === 'primary');\n }, ...(ngDevMode ? [{ debugName: \"primaryActions\" }] : []));\n this.secondaryActions = computed(() => {\n return this.taskActions().filter((action) => (action.priority ?? 'secondary') === 'secondary');\n }, ...(ngDevMode ? [{ debugName: \"secondaryActions\" }] : []));\n this.customComponentInputs = computed(() => {\n const task = this.selectedTask();\n if (!task)\n return null;\n return { task };\n }, ...(ngDevMode ? [{ debugName: \"customComponentInputs\" }] : []));\n this.resources = input([], ...(ngDevMode ? [{ debugName: \"resources\" }] : []));\n this.startingDate = input(new Date(), ...(ngDevMode ? [{ debugName: \"startingDate\" }] : []));\n this.selectedView = input('month', ...(ngDevMode ? [{ debugName: \"selectedView\" }] : []));\n this.dataSource = input.required(...(ngDevMode ? [{ debugName: \"dataSource\" }] : []));\n this.firstDayOfWeek = signal('monday', ...(ngDevMode ? [{ debugName: \"firstDayOfWeek\" }] : []));\n this.weekendDays = signal([0, 6], ...(ngDevMode ? [{ debugName: \"weekendDays\" }] : []));\n this.holidays = (range) => {\n const selectedEventTypeIds = this.vm.selectedCalendarEventTypeIds();\n // Pass selected calendar IDs (can be empty array to show no events)\n return this.taskBoardService.getEvents(range, selectedEventTypeIds);\n };\n this.currentSchedulerView = computed(() => this.selectedView() === 'kanban' || this.selectedView() === 'grid'\n ? 'month'\n : this.selectedView(), ...(ngDevMode ? [{ debugName: \"currentSchedulerView\" }] : []));\n this.onTaskClick = output();\n this.onTaskChanged = output();\n this.onMonthSlotDblClicked = output();\n this.onActionClick = output();\n this.component = output();\n this.onTaskRightClick = output();\n this.onRangeChanged = output();\n }\n // async ngOnInit(): Promise<void> {\n // const firstDayOfWeek = await this.settingsService.get(AXPRegionalSetting.FirstDayOfWeek) as unknown as number;\n // const weekDays = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];\n // this.firstDayOfWeek.set(weekDays[firstDayOfWeek] as unknown as AXDayOfWeekName);\n // this.weekendDays.set((await this.settingsService.get(AXPRegionalSetting.WeekendDays)) as unknown as number[]);\n // }\n async ngAfterViewInit() {\n if (this.schedulerComponent()) {\n this.component.emit(this.schedulerComponent());\n }\n }\n onTaskDrop(event) {\n // Check if dropped on the same slot (agenda view)\n if (event.slot.view === 'agenda' && event.isSameSlotDrop) {\n return;\n }\n // Use the scheduler service utility to calculate the new appointment data\n const dropResult = this.schedulerService.calculateAppointmentDropResult(event);\n // If dropped on the same slot, no action needed\n if (dropResult.isSameSlotDrop) {\n return;\n }\n // Get the original task (before modification)\n const originalTask = event.appointment;\n // Apply the drop result to create an updated task object\n // This uses the scheduler's internal utility for consistent date handling\n const updatedTask = this.schedulerService.applyDropResult({ ...originalTask }, dropResult);\n // Persist the change to the backend via taskBoardService\n this.taskBoardService\n .updateTaskDateRange(originalTask, {\n from: dropResult.startDate,\n end: dropResult.endDate,\n })\n .then((persistedTask) => {\n // Emit the change event so parent can update its state\n this.onTaskChanged.emit(persistedTask);\n // Refresh the scheduler to reflect the persisted data\n // This ensures the scheduler's internal state is synchronized with the backend\n this.schedulerComponent()?.refresh();\n })\n .catch((error) => {\n console.error('[TaskBoardCalendar] Failed to update task date range:', error);\n // Revert the visual change if persistence fails by refreshing from backend\n this.schedulerComponent()?.refresh();\n });\n }\n onTaskRightClickHandler(event) {\n this.onTaskRightClick.emit({ nativeEvent: event.nativeEvent, task: event.appointment });\n }\n onSlotDblClicked(event) {\n if (event.sender.selectedView() === 'month') {\n this.onMonthSlotDblClicked.emit(event.slot.startDate.date);\n }\n }\n async handleRangeChanged(event) {\n this.onRangeChanged.emit(event);\n }\n handleActionClick(event) {\n this.onActionClick.emit({ nativeEvent: event.nativeEvent, task: event.appointment });\n }\n async onTaskClickHandler(event) {\n const task = event.appointment;\n // Find the appointment container element\n let targetElement = event.nativeEvent.currentTarget || event.nativeEvent.target;\n // Traverse up to find the appointment container\n let element = targetElement;\n const maxDepth = 10;\n let depth = 0;\n while (element && element !== document.body && depth < maxDepth) {\n depth++;\n const isAppointment = element.classList?.contains('dx-scheduler-appointment') ||\n element.classList?.contains('ax-scheduler-appointment') ||\n element.hasAttribute('data-appointment-id');\n if (isAppointment) {\n targetElement = element;\n break;\n }\n const parent = element.parentElement;\n if (parent) {\n const isParentAppointment = parent.classList?.contains('dx-scheduler-appointment') ||\n parent.classList?.contains('ax-scheduler-appointment');\n if (isParentAppointment) {\n targetElement = parent;\n break;\n }\n }\n element = element.parentElement;\n }\n // Set the selected task and target element\n this.selectedTask.set(task);\n this.popoverTarget.set(targetElement);\n // Check if provider has a custom component\n await this.loadCustomComponent(task);\n // Load actions for the task\n await this.loadTaskActions(task);\n if (this.taskPopover() && targetElement) {\n this.taskPopover().target = targetElement;\n this.taskPopover().open();\n }\n // Still emit the event for backward compatibility\n this.onTaskClick.emit(task);\n }\n async loadTaskActions(task) {\n try {\n const providerName = task.provider;\n if (!providerName) {\n this.taskActions.set([]);\n return;\n }\n const provider = this.taskBoardService.getProvider(providerName);\n if (!provider) {\n this.taskActions.set([]);\n return;\n }\n const actions = await provider.getActions(task);\n // Ensure all actions have a priority (default to 'secondary' if not specified)\n const actionsWithPriority = (actions || []).map((action) => ({\n ...action,\n priority: action.priority ?? 'secondary',\n }));\n this.taskActions.set(actionsWithPriority);\n }\n catch (error) {\n console.error('Failed to load task actions:', error);\n this.taskActions.set([]);\n }\n }\n getActionColor(action) {\n return action.color;\n }\n async executeAction(action) {\n const task = this.selectedTask();\n if (!task || !action.command)\n return;\n try {\n const providerName = task.provider;\n if (!providerName)\n return;\n await this.taskBoardService.executeCommand(action.command, providerName);\n this.closePopover();\n }\n catch (error) {\n console.error('Failed to execute action:', error);\n }\n }\n async openTaskDetails() {\n const task = this.selectedTask();\n if (!task)\n return;\n try {\n await this.commandService.execute('Entity:OpenDetails', {\n entity: `${RootConfig.module.name}.${RootConfig.entities.task.name}`,\n data: { id: task.id },\n });\n this.closePopover();\n }\n catch (error) {\n console.error('Failed to open task details:', error);\n }\n }\n async loadCustomComponent(task) {\n if (!task.provider) {\n console.log('[TaskPopover] No provider on task:', task);\n this.customComponentType.set(null);\n return;\n }\n const provider = this.taskBoardService.getProvider(task.provider);\n if (!provider) {\n console.log('[TaskPopover] Provider not found:', task.provider);\n this.customComponentType.set(null);\n return;\n }\n const componentGetter = provider.getComponent?.();\n if (!componentGetter) {\n console.log('[TaskPopover] No component getter on provider:', task.provider);\n this.customComponentType.set(null);\n return;\n }\n console.log('[TaskPopover] Component getter found:', componentGetter, 'Type:', typeof componentGetter);\n try {\n let componentType;\n // Check if it's a lazy loading function or direct component type\n // A lazy loader is a function that returns a Promise\n // A component type is a class constructor (also a function, but used differently)\n if (typeof componentGetter === 'function') {\n // Try calling it to see if it returns a Promise (lazy loader)\n const testCall = componentGetter;\n let result;\n try {\n result = testCall();\n }\n catch (e) {\n // If calling throws (e.g., class constructor without 'new'), use it directly\n console.log('[TaskPopover] Component getter is a class constructor, using directly');\n componentType = componentGetter;\n this.customComponentType.set(componentType);\n return;\n }\n if (result instanceof Promise) {\n // It's a lazy loading function\n console.log('[TaskPopover] Component getter is a lazy loader');\n componentType = await result;\n }\n else if (result) {\n // It returned a component type directly\n console.log('[TaskPopover] Component getter returned component type directly');\n componentType = result;\n }\n else {\n // Result is undefined, use the original as component type\n console.log('[TaskPopover] Component getter returned undefined, using original as component type');\n componentType = componentGetter;\n }\n }\n else {\n console.log('[TaskPopover] Component getter is not a function');\n this.customComponentType.set(null);\n return;\n }\n console.log('[TaskPopover] Component type loaded successfully:', componentType?.name);\n this.customComponentType.set(componentType);\n }\n catch (error) {\n console.error('[TaskPopover] Failed to load custom task popover component:', error);\n this.customComponentType.set(null);\n }\n }\n closePopover() {\n this.taskPopover()?.close();\n this.customComponentType.set(null);\n this.selectedTask.set(null);\n this.popoverTarget.set(null);\n this.taskActions.set([]);\n }\n formatTime(date) {\n return this.calendarService.create(date).format('HH:mm');\n }\n formatDate(date) {\n return this.calendarService.create(date).format('MMM DD, YYYY');\n }\n formatDateTime(date) {\n return this.calendarService.create(date).format('MMM DD, YYYY HH:mm');\n }\n isMultiDay(task) {\n if (task.allDay) {\n const start = this.calendarService.create(task.startDate);\n const end = this.calendarService.create(task.endDate);\n return start.date.getTime() !== end.date.getTime();\n }\n // Check if start and end are on different days\n const start = this.calendarService.create(task.startDate);\n const end = this.calendarService.create(task.endDate);\n const startDay = start.date.getDate();\n const endDay = end.date.getDate();\n const startMonth = start.date.getMonth();\n const endMonth = end.date.getMonth();\n const startYear = start.date.getFullYear();\n const endYear = end.date.getFullYear();\n return startDay !== endDay || startMonth !== endMonth || startYear !== endYear;\n }\n formatDateRange(task) {\n if (task.allDay) {\n const start = this.calendarService.create(task.startDate);\n const end = this.calendarService.create(task.endDate);\n // Same day\n if (start.date.getTime() === end.date.getTime()) {\n return this.formatDate(task.startDate);\n }\n // Different days - show range\n const startFormatted = this.formatDate(task.startDate);\n const endFormatted = this.formatDate(task.endDate);\n // Same month and year\n if (start.date.getMonth() === end.date.getMonth() && start.date.getFullYear() === end.date.getFullYear()) {\n const startDay = start.date.getDate();\n const endDay = end.date.getDate();\n const monthYear = start.format('MMM YYYY');\n return `${startDay} - ${endDay}, ${monthYear}`;\n }\n // Different months or years\n return `${startFormatted} - ${endFormatted}`;\n }\n // Not all-day\n if (this.isMultiDay(task)) {\n const startFormatted = this.formatDateTime(task.startDate);\n const endFormatted = this.formatDateTime(task.endDate);\n return `${startFormatted} - ${endFormatted}`;\n }\n // Same day, show date with time range\n const dateFormatted = this.formatDate(task.startDate);\n const timeRange = `${this.formatTime(task.startDate)} - ${this.formatTime(task.endDate)}`;\n return `${dateFormatted} ${timeRange}`;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMTaskBoardCalendarViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.16\", type: AXMTaskBoardCalendarViewComponent, isStandalone: true, selector: \"axm-task-board-calendar-view\", inputs: { resources: { classPropertyName: \"resources\", publicName: \"resources\", isSignal: true, isRequired: false, transformFunction: null }, startingDate: { classPropertyName: \"startingDate\", publicName: \"startingDate\", isSignal: true, isRequired: false, transformFunction: null }, selectedView: { classPropertyName: \"selectedView\", publicName: \"selectedView\", isSignal: true, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: \"dataSource\", publicName: \"dataSource\", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { onTaskClick: \"onTaskClick\", onTaskChanged: \"onTaskChanged\", onMonthSlotDblClicked: \"onMonthSlotDblClicked\", onActionClick: \"onActionClick\", component: \"component\", onTaskRightClick: \"onTaskRightClick\", onRangeChanged: \"onRangeChanged\" }, viewQueries: [{ propertyName: \"schedulerComponent\", first: true, predicate: AXSchedulerComponent, descendants: true, isSignal: true }, { propertyName: \"taskPopover\", first: true, predicate: [\"taskPopover\"], descendants: true, isSignal: true }], ngImport: i0, template: \"<ax-scheduler\\n [hasHeader]=\\\"false\\\"\\n [holidays]=\\\"holidays\\\"\\n [resources]=\\\"resources()\\\"\\n [dataSource]=\\\"dataSource()\\\"\\n [startingDate]=\\\"startingDate()\\\"\\n [selectedView]=\\\"currentSchedulerView()\\\"\\n [multiDayViewDaysCount]=\\\"vm.daysCount()\\\"\\n (onAppointmentDrop)=\\\"onTaskDrop($event)\\\"\\n (onActionClick)=\\\"handleActionClick($event)\\\"\\n (onRangeChanged)=\\\"handleRangeChanged($event)\\\"\\n (onSlotDblClicked)=\\\"onSlotDblClicked($event)\\\"\\n (onAppointmentClicked)=\\\"onTaskClickHandler($event)\\\"\\n [weekend]=\\\"weekendDays()\\\"\\n [firstDayOfWeek]=\\\"firstDayOfWeek()\\\"\\n></ax-scheduler>\\n\\n<!-- Task Detail Popover (Modern Google Calendar Style) -->\\n<ax-popover\\n #taskPopover\\n [openOn]=\\\"'manual'\\\"\\n [closeOn]=\\\"'clickOut'\\\"\\n [offsetY]=\\\"12\\\"\\n [offsetX]=\\\"12\\\"\\n [adaptivityEnabled]=\\\"true\\\"\\n>\\n <div>\\n @if (selectedTask()) {\\n <div class=\\\"task-popover ax-shadow-md ax-border\\\">\\n <!-- Header Section -->\\n <div class=\\\"task-popover__header\\\">\\n <div class=\\\"task-popover__title-section\\\">\\n <div class=\\\"task-popover__title-row\\\">\\n <h3 class=\\\"task-popover__title\\\" [title]=\\\"selectedTask()!.title\\\">{{ selectedTask()!.title }}</h3>\\n <button type=\\\"button\\\" class=\\\"task-popover__close-btn\\\" (click)=\\\"closePopover()\\\" aria-label=\\\"Close\\\">\\n <ax-icon class=\\\"ax-icon ax-icon-close\\\"></ax-icon>\\n </button>\\n </div>\\n @if (selectedTask()!.description && !customComponentType()) {\\n <p class=\\\"task-popover__description\\\">{{ selectedTask()!.description }}</p>\\n }\\n </div>\\n </div>\\n\\n <!-- Custom Component or Default Content -->\\n @if (customComponentType()) {\\n <!-- Custom Component from Provider -->\\n <div class=\\\"task-popover__custom-content\\\">\\n <ng-container *ngComponentOutlet=\\\"customComponentType()!; inputs: customComponentInputs()!\\\"></ng-container>\\n </div>\\n } @else {\\n <!-- Default Content Section -->\\n <div class=\\\"task-popover__content\\\">\\n <!-- Time -->\\n <div class=\\\"task-popover__info-item\\\">\\n <div class=\\\"task-popover__icon\\\">\\n <i class=\\\"fa-light fa-clock\\\"></i>\\n </div>\\n <div class=\\\"task-popover__info-content\\\">\\n <span class=\\\"task-popover__info-text\\\">{{ formatDateRange(selectedTask()!) }}</span>\\n </div>\\n </div>\\n\\n <!-- Status -->\\n @if (selectedTask()!.status) {\\n <div class=\\\"task-popover__info-item\\\">\\n <div class=\\\"task-popover__icon\\\">\\n <i class=\\\"fa-light fa-flag\\\"></i>\\n </div>\\n <div class=\\\"task-popover__info-content\\\">\\n <span class=\\\"task-popover__info-text\\\">{{ selectedTask()!.status.title }}</span>\\n </div>\\n </div>\\n }\\n\\n <!-- Assignee -->\\n @if (selectedTask()!.assignee) {\\n <div class=\\\"task-popover__info-item\\\">\\n <div class=\\\"task-popover__icon\\\">\\n <i class=\\\"fa-light fa-user\\\"></i>\\n </div>\\n <div class=\\\"task-popover__info-content\\\">\\n <span class=\\\"task-popover__info-text\\\">{{\\n selectedTask()!.assignee?.fullName || selectedTask()!.assignee?.username || 'Unassigned'\\n }}</span>\\n </div>\\n </div>\\n }\\n\\n <!-- Priority -->\\n @if (selectedTask()!.priority) {\\n <div class=\\\"task-popover__info-item\\\">\\n <div\\n class=\\\"task-popover__icon task-popover__icon--priority\\\"\\n [attr.data-priority]=\\\"selectedTask()!.priority\\\"\\n >\\n <i class=\\\"fa-light fa-exclamation-circle\\\"></i>\\n </div>\\n <div class=\\\"task-popover__info-content\\\">\\n <span\\n class=\\\"task-popover__info-text task-popover__priority\\\"\\n [attr.data-priority]=\\\"selectedTask()!.priority\\\"\\n >\\n {{ selectedTask()!.priority }}\\n </span>\\n </div>\\n </div>\\n }\\n </div>\\n\\n <!-- Actions Section -->\\n <div class=\\\"task-popover__actions\\\">\\n <!-- Task Actions from Provider -->\\n @if (taskActions().length > 0) {\\n <div class=\\\"task-popover__actions-group\\\">\\n <!-- Primary Actions: Icon-only buttons -->\\n @if (primaryActions().length > 0) {\\n @for (action of primaryActions(); track action.name || action.title) {\\n <ax-button\\n [look]=\\\"'solid'\\\"\\n [color]=\\\"getActionColor(action)\\\"\\n (onClick)=\\\"executeAction(action)\\\"\\n [disabled]=\\\"action.disabled === true\\\"\\n [text]=\\\"action.title\\\"\\n >\\n @if (action.icon) {\\n <ax-prefix>\\n <ax-icon>\\n <i [class]=\\\"action.icon\\\"></i>\\n </ax-icon>\\n </ax-prefix>\\n }\\n </ax-button>\\n }\\n }\\n\\n <!-- Secondary Actions: Dropdown with \\\"...\\\" button -->\\n @if (secondaryActions().length > 0) {\\n <ax-button [look]=\\\"'blank'\\\">\\n <ax-prefix>\\n <ax-icon icon=\\\"fa-light fa-ellipsis-vertical\\\"></ax-icon>\\n </ax-prefix>\\n <ax-dropdown-panel>\\n <ax-button-item-list>\\n @for (action of secondaryActions(); track action.name || action.title) {\\n <ax-button-item\\n [text]=\\\"action.title\\\"\\n [disabled]=\\\"action.disabled === true\\\"\\n (onClick)=\\\"executeAction(action)\\\"\\n >\\n @if (action.icon) {\\n <ax-prefix>\\n <ax-icon>\\n <i [class]=\\\"action.icon\\\"></i>\\n </ax-icon>\\n </ax-prefix>\\n }\\n </ax-button-item>\\n }\\n </ax-button-item-list>\\n </ax-dropdown-panel>\\n </ax-button>\\n }\\n </div>\\n }\\n </div>\\n }\\n </div>\\n }\\n </div>\\n</ax-popover>\\n\", styles: [\"ax-scheduler{line-height:1.5;background-color:rgba(var(--ax-sys-color-lightest-surface))!important}.task-popover{background:rgba(var(--ax-sys-color-lightest-surface));border-radius:12px;overflow:hidden;display:flex;flex-direction:column}.task-popover__header{padding:20px 20px 16px;border-bottom:1px solid var(--ax-sys-color-border);background:linear-gradient(to bottom,var(--ax-sys-color-lightest-surface),var(--ax-sys-color-lighter-surface))}.task-popover__title-section{display:flex;flex-direction:column;gap:8px}.task-popover__title-row{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.task-popover__title{font-size:18px;font-weight:600;line-height:1.4;color:var(--ax-sys-color-text-primary);margin:0;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.task-popover__close-btn{flex-shrink:0;background:none;border:none;padding:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--ax-sys-color-text-neutral-600);transition:color .2s ease;border-radius:4px}.task-popover__close-btn:hover{color:var(--ax-sys-color-text-primary);background:var(--ax-sys-color-lighter-surface)}.task-popover__close-btn:active{background:var(--ax-sys-color-light-surface)}.task-popover__close-btn ax-icon{display:block;width:16px;height:16px}.task-popover__description{font-size:14px;line-height:1.5;color:var(--ax-sys-color-text-secondary);margin:0;display:-webkit-box;-webkit-line-clamp:3;line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.task-popover__content{padding:16px 20px;display:flex;flex-direction:column;gap:12px;flex:1}.task-popover__info-item{display:flex;align-items:flex-start;gap:12px;min-height:24px}.task-popover__icon{width:20px;height:20px;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:2px;color:var(--ax-sys-color-text-neutral-600);font-size:14px}.task-popover__icon i{display:block}.task-popover__icon--priority[data-priority=highest]{color:var(--ax-sys-color-danger)}.task-popover__icon--priority[data-priority=high]{color:var(--ax-sys-color-warning)}.task-popover__icon--priority[data-priority=medium]{color:var(--ax-sys-color-info)}.task-popover__icon--priority[data-priority=low],.task-popover__icon--priority[data-priority=lowest]{color:var(--ax-sys-color-text-neutral-500)}.task-popover__info-content{flex:1;min-width:0;display:flex;align-items:center}.task-popover__info-text{font-size:14px;line-height:1.5;color:var(--ax-sys-color-text-primary);word-wrap:break-word}.task-popover__time{font-weight:500;color:var(--ax-sys-color-text-primary);margin-left:4px}.task-popover__priority{text-transform:capitalize;font-weight:500}.task-popover__priority[data-priority=highest]{color:var(--ax-sys-color-danger)}.task-popover__priority[data-priority=high]{color:var(--ax-sys-color-warning)}.task-popover__priority[data-priority=medium]{color:var(--ax-sys-color-info)}.task-popover__priority[data-priority=low],.task-popover__priority[data-priority=lowest]{color:var(--ax-sys-color-text-neutral-600)}.task-popover__actions{padding:12px 20px 16px;border-top:1px solid var(--ax-sys-color-border);display:flex;flex-direction:column;gap:8px;background:var(--ax-sys-color-lighter-surface)}.task-popover__actions-group{display:flex;justify-content:flex-end;gap:8px;flex-wrap:wrap}.task-popover__actions-group--default{margin-top:4px;padding-top:8px;border-top:1px solid var(--ax-sys-color-border)}.task-popover__action-divider{width:100%;height:1px;background:var(--ax-sys-color-border);margin:4px 0}.task-popover__action-btn{min-width:100px;white-space:nowrap}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgComponentOutlet, selector: \"[ngComponentOutlet]\", inputs: [\"ngComponentOutlet\", \"ngComponentOutletInputs\", \"ngComponentOutletInjector\", \"ngComponentOutletEnvironmentInjector\", \"ngComponentOutletContent\", \"ngComponentOutletNgModule\", \"ngComponentOutletNgModuleFactory\"], exportAs: [\"ngComponentOutlet\"] }, { kind: \"component\", type: AXSchedulerComponent, selector: \"ax-scheduler\", inputs: [\"calendar\", \"startingDate\", \"endDayHour\", \"startDayHour\", \"hasHeader\", \"readonly\", \"draggable\", \"hasActions\", \"dragStartDelay\", \"weekend\", \"allowFullScreen\", \"multiDayViewDaysCount\", \"showResourceHeaders\", \"showCurrentTimeIndicator\", \"showUnassignedAppointments\", \"resources\", \"resourceTemplate\", \"firstDayOfWeek\", \"tooltipTemplate\", \"dataSource\", \"holidays\", \"views\", \"selectedView\"], outputs: [\"selectedViewChange\", \"onDataLoaded\", \"onRangeChanged\", \"onSlotClicked\", \"onSlotDblClicked\", \"onSlotRightClick\", \"onAppointmentDrop\", \"onActionClick\", \"onAppointmentClicked\", \"onAppointmentDblClicked\", \"onAppointmentRightClick\"] }, { kind: \"ngmodule\", type: AXPopoverModule }, { kind: \"component\", type: i2.AXPopoverComponent, selector: \"ax-popover\", inputs: [\"width\", \"disabled\", \"offsetX\", \"offsetY\", \"target\", \"placement\", \"content\", \"openOn\", \"closeOn\", \"hasBackdrop\", \"openAfter\", \"closeAfter\", \"backdropClass\", \"panelClass\", \"adaptivityEnabled\"], outputs: [\"onOpened\", \"onClosed\"] }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i3.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"component\", type: i3.AXButtonItemComponent, selector: \"ax-button-item\", inputs: [\"color\", \"disabled\", \"text\", \"selected\", \"divided\", \"data\", \"name\"], outputs: [\"onClick\", \"onFocus\", \"onBlur\", \"disabledChange\"] }, { kind: \"component\", type: i3.AXButtonItemListComponent, selector: \"ax-button-item-list\", inputs: [\"items\", \"closeParentOnClick\", \"lockOnLoading\"], outputs: [\"onItemClick\"] }, { kind: \"ngmodule\", type: AXDropdownModule }, { kind: \"component\", type: i4.AXDropdownPanelComponent, selector: \"ax-dropdown-panel\", inputs: [\"isOpen\", \"fitParent\", \"dropdownWidth\", \"position\", \"placement\", \"_target\", \"adaptivityEnabled\"], outputs: [\"onOpened\", \"onClosed\"] }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i5.AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"component\", type: i5.AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"ngmodule\", type: AXTranslationModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMTaskBoardCalendarViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axm-task-board-calendar-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n CommonModule,\n AXSchedulerComponent,\n AXPopoverModule,\n AXButtonModule,\n AXDropdownModule,\n AXDecoratorModule,\n AXTranslationModule,\n ], template: \"<ax-scheduler\\n [hasHeader]=\\\"false\\\"\\n [holidays]=\\\"holidays\\\"\\n [resources]=\\\"resources()\\\"\\n [dataSource]=\\\"dataSource()\\\"\\n [startingDate]=\\\"startingDate()\\\"\\n [selectedView]=\\\"currentSchedulerView()\\\"\\n [multiDayViewDaysCount]=\\\"vm.daysCount()\\\"\\n (onAppointmentDrop)=\\\"onTaskDrop($event)\\\"\\n (onActionClick)=\\\"handleActionClick($event)\\\"\\n (onRangeChanged)=\\\"handleRangeChanged($event)\\\"\\n (onSlotDblClicked)=\\\"onSlotDblClicked($event)\\\"\\n (onAppointmentClicked)=\\\"onTaskClickHandler($event)\\\"\\n [weekend]=\\\"weekendDays()\\\"\\n [firstDayOfWeek]=\\\"firstDayOfWeek()\\\"\\n></ax-scheduler>\\n\\n<!-- Task Detail Popover (Modern Google Calendar Style) -->\\n<ax-popover\\n #taskPopover\\n [openOn]=\\\"'manual'\\\"\\n [closeOn]=\\\"'clickOut'\\\"\\n [offsetY]=\\\"12\\\"\\n [offsetX]=\\\"12\\\"\\n [adaptivityEnabled]=\\\"true\\\"\\n>\\n <div>\\n @if (selectedTask()) {\\n <div class=\\\"task-popover ax-shadow-md ax-border\\\">\\n <!-- Header Section -->\\n <div class=\\\"task-popover__header\\\">\\n <div class=\\\"task-popover__title-section\\\">\\n <div class=\\\"task-popover__title-row\\\">\\n <h3 class=\\\"task-popover__title\\\" [title]=\\\"selectedTask()!.title\\\">{{ selectedTask()!.title }}</h3>\\n <button type=\\\"button\\\" class=\\\"task-popover__close-btn\\\" (click)=\\\"closePopover()\\\" aria-label=\\\"Close\\\">\\n <ax-icon class=\\\"ax-icon ax-icon-close\\\"></ax-icon>\\n </button>\\n </div>\\n @if (selectedTask()!.description && !customComponentType()) {\\n <p class=\\\"task-popover__description\\\">{{ selectedTask()!.description }}</p>\\n }\\n </div>\\n </div>\\n\\n <!-- Custom Component or Default Content -->\\n @if (customComponentType()) {\\n <!-- Custom Component from Provider -->\\n <div class=\\\"task-popover__custom-content\\\">\\n <ng-container *ngComponentOutlet=\\\"customComponentType()!; inputs: customComponentInputs()!\\\"></ng-container>\\n </div>\\n } @else {\\n <!-- Default Content Section -->\\n <div class=\\\"task-popover__content\\\">\\n <!-- Time -->\\n <div class=\\\"task-popover__info-item\\\">\\n <div class=\\\"task-popover__icon\\\">\\n <i class=\\\"fa-light fa-clock\\\"></i>\\n </div>\\n <div class=\\\"task-popover__info-content\\\">\\n <span class=\\\"task-popover__info-text\\\">{{ formatDateRange(selectedTask()!) }}</span>\\n </div>\\n </div>\\n\\n <!-- Status -->\\n @if (selectedTask()!.status) {\\n <div class=\\\"task-popover__info-item\\\">\\n <div class=\\\"task-popover__icon\\\">\\n <i class=\\\"fa-light fa-flag\\\"></i>\\n </div>\\n <div class=\\\"task-popover__info-content\\\">\\n <span class=\\\"task-popover__info-text\\\">{{ selectedTask()!.status.title }}</span>\\n </div>\\n </div>\\n }\\n\\n <!-- Assignee -->\\n @if (selectedTask()!.assignee) {\\n <div class=\\\"task-popover__info-item\\\">\\n <div class=\\\"task-popover__icon\\\">\\n <i class=\\\"fa-light fa-user\\\"></i>\\n </div>\\n <div class=\\\"task-popover__info-content\\\">\\n <span class=\\\"task-popover__info-text\\\">{{\\n selectedTask()!.assignee?.fullName || selectedTask()!.assignee?.username || 'Unassigned'\\n }}</span>\\n </div>\\n </div>\\n }\\n\\n <!-- Priority -->\\n @if (selectedTask()!.priority) {\\n <div class=\\\"task-popover__info-item\\\">\\n <div\\n class=\\\"task-popover__icon task-popover__icon--priority\\\"\\n [attr.data-priority]=\\\"selectedTask()!.priority\\\"\\n >\\n <i class=\\\"fa-light fa-exclamation-circle\\\"></i>\\n </div>\\n <div class=\\\"task-popover__info-content\\\">\\n <span\\n class=\\\"task-popover__info-text task-popover__priority\\\"\\n [attr.data-priority]=\\\"selectedTask()!.priority\\\"\\n >\\n {{ selectedTask()!.priority }}\\n </span>\\n </div>\\n </div>\\n }\\n </div>\\n\\n <!-- Actions Section -->\\n <div class=\\\"task-popover__actions\\\">\\n <!-- Task Actions from Provider -->\\n @if (taskActions().length > 0) {\\n <div class=\\\"task-popover__actions-group\\\">\\n <!-- Primary Actions: Icon-only buttons -->\\n @if (primaryActions().length > 0) {\\n @for (action of primaryActions(); track action.name || action.title) {\\n <ax-button\\n [look]=\\\"'solid'\\\"\\n [color]=\\\"getActionColor(action)\\\"\\n (onClick)=\\\"executeAction(action)\\\"\\n [disabled]=\\\"action.disabled === true\\\"\\n [text]=\\\"action.title\\\"\\n >\\n @if (action.icon) {\\n <ax-prefix>\\n <ax-icon>\\n <i [class]=\\\"action.icon\\\"></i>\\n </ax-icon>\\n </ax-prefix>\\n }\\n </ax-button>\\n }\\n }\\n\\n <!-- Secondary Actions: Dropdown with \\\"...\\\" button -->\\n @if (secondaryActions().length > 0) {\\n <ax-button [look]=\\\"'blank'\\\">\\n <ax-prefix>\\n <ax-icon icon=\\\"fa-light fa-ellipsis-vertical\\\"></ax-icon>\\n </ax-prefix>\\n <ax-dropdown-panel>\\n <ax-button-item-list>\\n @for (action of secondaryActions(); track action.name || action.title) {\\n <ax-button-item\\n [text]=\\\"action.title\\\"\\n [disabled]=\\\"action.disabled === true\\\"\\n (onClick)=\\\"executeAction(action)\\\"\\n >\\n @if (action.icon) {\\n <ax-prefix>\\n <ax-icon>\\n <i [class]=\\\"action.icon\\\"></i>\\n </ax-icon>\\n </ax-prefix>\\n }\\n </ax-button-item>\\n }\\n </ax-button-item-list>\\n </ax-dropdown-panel>\\n </ax-button>\\n }\\n </div>\\n }\\n </div>\\n }\\n </div>\\n }\\n </div>\\n</ax-popover>\\n\", styles: [\"ax-scheduler{line-height:1.5;background-color:rgba(var(--ax-sys-color-lightest-surface))!important}.task-popover{background:rgba(var(--ax-sys-color-lightest-surface));border-radius:12px;overflow:hidden;display:flex;flex-direction:column}.task-popover__header{padding:20px 20px 16px;border-bottom:1px solid var(--ax-sys-color-border);background:linear-gradient(to bottom,var(--ax-sys-color-lightest-surface),var(--ax-sys-color-lighter-surface))}.task-popover__title-section{display:flex;flex-direction:column;gap:8px}.task-popover__title-row{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.task-popover__title{font-size:18px;font-weight:600;line-height:1.4;color:var(--ax-sys-color-text-primary);margin:0;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.task-popover__close-btn{flex-shrink:0;background:none;border:none;padding:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--ax-sys-color-text-neutral-600);transition:color .2s ease;border-radius:4px}.task-popover__close-btn:hover{color:var(--ax-sys-color-text-primary);background:var(--ax-sys-color-lighter-surface)}.task-popover__close-btn:active{background:var(--ax-sys-color-light-surface)}.task-popover__close-btn ax-icon{display:block;width:16px;height:16px}.task-popover__description{font-size:14px;line-height:1.5;color:var(--ax-sys-color-text-secondary);margin:0;display:-webkit-box;-webkit-line-clamp:3;line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.task-popover__content{padding:16px 20px;display:flex;flex-direction:column;gap:12px;flex:1}.task-popover__info-item{display:flex;align-items:flex-start;gap:12px;min-height:24px}.task-popover__icon{width:20px;height:20px;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:2px;color:var(--ax-sys-color-text-neutral-600);font-size:14px}.task-popover__icon i{display:block}.task-popover__icon--priority[data-priority=highest]{color:var(--ax-sys-color-danger)}.task-popover__icon--priority[data-priority=high]{color:var(--ax-sys-color-warning)}.task-popover__icon--priority[data-priority=medium]{color:var(--ax-sys-color-info)}.task-popover__icon--priority[data-priority=low],.task-popover__icon--priority[data-priority=lowest]{color:var(--ax-sys-color-text-neutral-500)}.task-popover__info-content{flex:1;min-width:0;display:flex;align-items:center}.task-popover__info-text{font-size:14px;line-height:1.5;color:var(--ax-sys-color-text-primary);word-wrap:break-word}.task-popover__time{font-weight:500;color:var(--ax-sys-color-text-primary);margin-left:4px}.task-popover__priority{text-transform:capitalize;font-weight:500}.task-popover__priority[data-priority=highest]{color:var(--ax-sys-color-danger)}.task-popover__priority[data-priority=high]{color:var(--ax-sys-color-warning)}.task-popover__priority[data-priority=medium]{color:var(--ax-sys-color-info)}.task-popover__priority[data-priority=low],.task-popover__priority[data-priority=lowest]{color:var(--ax-sys-color-text-neutral-600)}.task-popover__actions{padding:12px 20px 16px;border-top:1px solid var(--ax-sys-color-border);display:flex;flex-direction:column;gap:8px;background:var(--ax-sys-color-lighter-surface)}.task-popover__actions-group{display:flex;justify-content:flex-end;gap:8px;flex-wrap:wrap}.task-popover__actions-group--default{margin-top:4px;padding-top:8px;border-top:1px solid var(--ax-sys-color-border)}.task-popover__action-divider{width:100%;height:1px;background:var(--ax-sys-color-border);margin:4px 0}.task-popover__action-btn{min-width:100px;white-space:nowrap}\\n\"] }]\n }], propDecorators: { schedulerComponent: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXSchedulerComponent), { isSignal: true }] }], taskPopover: [{ type: i0.ViewChild, args: ['taskPopover', { isSignal: true }] }], resources: [{ type: i0.Input, args: [{ isSignal: true, alias: \"resources\", required: false }] }], startingDate: [{ type: i0.Input, args: [{ isSignal: true, alias: \"startingDate\", required: false }] }], selectedView: [{ type: i0.Input, args: [{ isSignal: true, alias: \"selectedView\", required: false }] }], dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dataSource\", required: true }] }], onTaskClick: [{ type: i0.Output, args: [\"onTaskClick\"] }], onTaskChanged: [{ type: i0.Output, args: [\"onTaskChanged\"] }], onMonthSlotDblClicked: [{ type: i0.Output, args: [\"onMonthSlotDblClicked\"] }], onActionClick: [{ type: i0.Output, args: [\"onActionClick\"] }], component: [{ type: i0.Output, args: [\"component\"] }], onTaskRightClick: [{ type: i0.Output, args: [\"onTaskRightClick\"] }], onRangeChanged: [{ type: i0.Output, args: [\"onRangeChanged\"] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1ib2FyZC1jYWxlbmRhci12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy90YXNrLW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy90YXNrLWJvYXJkL3ZpZXdzL3Rhc2stYm9hcmQtY2FsZW5kYXItdmlldy90YXNrLWJvYXJkLWNhbGVuZGFyLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3Rhc2stbWFuYWdlbWVudC9zcmMvbGliL2ZlYXR1cmVzL3Rhc2stYm9hcmQvdmlld3MvdGFzay1ib2FyZC1jYWxlbmRhci12aWV3L3Rhc2stYm9hcmQtY2FsZW5kYXItdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0QsT0FBTyxFQUFzQixlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNqRixPQUFPLEVBSUwsb0JBQW9CLEVBRXBCLGtCQUFrQixHQUluQixNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxpQkFBaUIsRUFBaUIsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxF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LENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMxQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMzRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN2RCxPQUFPLEdBQUcsY0FBYyxNQUFNLFlBQVksRUFBRSxDQUFDO1FBQy9DLENBQUM7UUFFRCxzQ0FBc0M7UUFDdEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEQsTUFBTSxTQUFTLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQzFGLE9BQU8sR0FBRyxhQUFhLElBQUksU0FBUyxFQUFFLENBQUM7SUFDekMsQ0FBQzsrR0FqWlUsaUNBQWlDO21HQUFqQyxpQ0FBaUMscTdCQVFiLG9CQUFvQiw2S0NwRXJELDR6TkEyS0EsbWxIRHhISSxZQUFZLGdYQUNaLG9CQUFvQixtckJBQ3BCLGVBQWUsdVZBQ2YsY0FBYywyd0JBQ2QsZ0JBQWdCLHFRQUNoQixpQkFBaUIsc1ZBQ2pCLG1CQUFtQjs7NEZBR1YsaUNBQWlDO2tCQWhCN0MsU0FBUzsrQkFDRSw4QkFBOEIsbUJBR3ZCLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksV0FDNUI7d0JBQ1AsWUFBWTt3QkFDWixvQkFBb0I7d0JBQ3BCLGVBQWU7d0JBQ2YsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLGlCQUFpQjt3QkFDakIsbUJBQW1CO3FCQUNwQjtvR0FVOEIsb0JBQW9CLHNFQUNFLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHsgQVhEZWNvcmF0b3JNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBWERyb3Bkb3duTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2Ryb3Bkb3duJztcbmltcG9ydCB7IEFYUG9wb3ZlckNvbXBvbmVudCwgQVhQb3BvdmVyTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3BvcG92ZXInO1xuaW1wb3J0IHtcbiAgQVhEYXlPZldlZWtOYW1lLFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50RGF0YVNvdXJjZSxcbiAgQVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQsXG4gIEFYU2NoZWR1bGVyQ29tcG9uZW50LFxuICBBWFNjaGVkdWxlckRhdGVSYW5nZSxcbiAgQVhTY2hlZHVsZXJTZXJ2aWNlLFxuICBBWFNjaGVkdWxlclNsb3REcm9wRXZlbnQsXG4gIEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQsXG4gIEFYU2NoZWR1bGVyVmlldyxcbn0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3NjaGVkdWxlcic7XG5pbXBvcnQgeyBBWENhbGVuZGFyU2VydmljZSwgQVhIb2xpZGF5RGF0ZSB9IGZyb20gJ0BhY29yZXgvY29yZS9kYXRlLXRpbWUnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdGlvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBWFBTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvbW1vbic7XG5pbXBvcnQgeyBBWFBDb21tYW5kU2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vcnVudGltZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxuICBUeXBlLFxuICB2aWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvb3RDb25maWcgfSBmcm9tICcuLi8uLi8uLi8uLi9jb25zdCc7XG5pbXBvcnQgeyBBWFBUYXNrQm9hcmRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdGFzay1ib2FyZC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEFYUFJlc291cmNlLFxuICBBWFBUYXNrLFxuICBBWFBUYXNrQWN0aW9uLFxuICBBWFBUYXNrQWN0aW9uTWVudUl0ZW0sXG4gIEFYUFRhc2tQb3BvdmVyQ29tcG9uZW50LFxufSBmcm9tICcuLi8uLi90YXNrLWJvYXJkLnR5cGVzJztcbmltcG9ydCB7IEFYTVRhc2tCb2FyZFZpZXdNb2RlbCwgQVhQVGFza0JvYXJkVmlld01vZGUgfSBmcm9tICcuLi8uLi90YXNrLWJvYXJkLnZpZXdtb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4bS10YXNrLWJvYXJkLWNhbGVuZGFyLXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFzay1ib2FyZC1jYWxlbmRhci12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFzay1ib2FyZC1jYWxlbmRhci12aWV3LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEFYU2NoZWR1bGVyQ29tcG9uZW50LFxuICAgIEFYUG9wb3Zlck1vZHVsZSxcbiAgICBBWEJ1dHRvbk1vZHVsZSxcbiAgICBBWERyb3Bkb3duTW9kdWxlLFxuICAgIEFYRGVjb3JhdG9yTW9kdWxlLFxuICAgIEFYVHJhbnNsYXRpb25Nb2R1bGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFYTVRhc2tCb2FyZENhbGVuZGFyVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdm0gPSBpbmplY3QoQVhNVGFza0JvYXJkVmlld01vZGVsKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNhbGVuZGFyU2VydmljZSA9IGluamVjdChBWENhbGVuZGFyU2VydmljZSk7XG4gIHByb3RlY3RlZCByZWFkb25seSB0YXNrQm9hcmRTZXJ2aWNlID0gaW5qZWN0KEFYUFRhc2tCb2FyZFNlcnZpY2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2V0dGluZ1NlcnZpY2UgPSBpbmplY3QoQVhQU2V0dGluZ3NTZXJ2aWNlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbW1hbmRTZXJ2aWNlID0gaW5qZWN0KEFYUENvbW1hbmRTZXJ2aWNlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNjaGVkdWxlclNlcnZpY2UgPSBpbmplY3QoQVhTY2hlZHVsZXJTZXJ2aWNlKTtcblxuICBzY2hlZHVsZXJDb21wb25lbnQgPSB2aWV3Q2hpbGQoQVhTY2hlZHVsZXJDb21wb25lbnQpO1xuICB0YXNrUG9wb3ZlciA9IHZpZXdDaGlsZC5yZXF1aXJlZDxBWFBvcG92ZXJDb21wb25lbnQ+KCd0YXNrUG9wb3ZlcicpO1xuXG4gIHByb3RlY3RlZCBzZWxlY3RlZFRhc2sgPSBzaWduYWw8QVhQVGFzayB8IG51bGw+KG51bGwpO1xuICBwcm90ZWN0ZWQgcG9wb3ZlclRhcmdldCA9IHNpZ25hbDxIVE1MRWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBwcm90ZWN0ZWQgdGFza0FjdGlvbnMgPSBzaWduYWw8QVhQVGFza0FjdGlvbk1lbnVJdGVtW10+KFtdKTtcbiAgcHJvdGVjdGVkIGN1c3RvbUNvbXBvbmVudFR5cGUgPSBzaWduYWw8VHlwZTxBWFBUYXNrUG9wb3ZlckNvbXBvbmVudD4gfCBudWxsPihudWxsKTtcblxuICAvLyBTZXBhcmF0ZSBwcmltYXJ5IGFuZCBzZWNvbmRhcnkgYWN0aW9uc1xuICBwcm90ZWN0ZWQgcHJpbWFyeUFjdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMudGFza0FjdGlvbnMoKS5maWx0ZXIoKGFjdGlvbikgPT4gKGFjdGlvbi5wcmlvcml0eSA/PyAnc2Vjb25kYXJ5JykgPT09ICdwcmltYXJ5Jyk7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCBzZWNvbmRhcnlBY3Rpb25zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLnRhc2tBY3Rpb25zKCkuZmlsdGVyKChhY3Rpb24pID0+IChhY3Rpb24ucHJpb3JpdHkgPz8gJ3NlY29uZGFyeScpID09PSAnc2Vjb25kYXJ5Jyk7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCBjdXN0b21Db21wb25lbnRJbnB1dHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdGFzayA9IHRoaXMuc2VsZWN0ZWRUYXNrKCk7XG4gICAgaWYgKCF0YXNrKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4geyB0YXNrIH07XG4gIH0pO1xuXG4gIHJlc291cmNlcyA9IGlucHV0PEFYUFJlc291cmNlW10+KFtdKTtcbiAgc3RhcnRpbmdEYXRlID0gaW5wdXQ8RGF0ZT4obmV3IERhdGUoKSk7XG4gIHNlbGVjdGVkVmlldyA9IGlucHV0PEFYUFRhc2tCb2FyZFZpZXdNb2RlPignbW9udGgnKTtcbiAgZGF0YVNvdXJjZSA9IGlucHV0LnJlcXVpcmVkPEFYU2NoZWR1bGVyQXBwb2ludG1lbnREYXRhU291cmNlPigpO1xuICBwcm90ZWN0ZWQgZmlyc3REYXlPZldlZWsgPSBzaWduYWw8QVhEYXlPZldlZWtOYW1lPignbW9uZGF5Jyk7XG4gIHByb3RlY3RlZCB3ZWVrZW5kRGF5cyA9IHNpZ25hbDxudW1iZXJbXT4oWzAsIDZdKTtcblxuICBwcm90ZWN0ZWQgaG9saWRheXMgPSAocmFuZ2U6IEFYU2NoZWR1bGVyRGF0ZVJhbmdlKTogUHJvbWlzZTxBWEhvbGlkYXlEYXRlW10+ID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZEV2ZW50VHlwZUlkcyA9IHRoaXMudm0uc2VsZWN0ZWRDYWxlbmRhckV2ZW50VHlwZUlkcygpO1xuICAgIC8vIFBhc3Mgc2VsZWN0ZWQgY2FsZW5kYXIgSURzIChjYW4gYmUgZW1wdHkgYXJyYXkgdG8gc2hvdyBubyBldmVudHMpXG4gICAgcmV0dXJuIHRoaXMudGFza0JvYXJkU2VydmljZS5nZXRFdmVudHMocmFuZ2UsIHNlbGVjdGVkRXZlbnRUeXBlSWRzKTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgY3VycmVudFNjaGVkdWxlclZpZXcgPSBjb21wdXRlZDxBWFNjaGVkdWxlclZpZXc+KCgpID0+XG4gICAgdGhpcy5zZWxlY3RlZFZpZXcoKSA9PT0gJ2thbmJhbicgfHwgdGhpcy5zZWxlY3RlZFZpZXcoKSA9PT0gJ2dyaWQnXG4gICAgICA/ICdtb250aCdcbiAgICAgIDogKHRoaXMuc2VsZWN0ZWRWaWV3KCkgYXMgQVhTY2hlZHVsZXJWaWV3KSxcbiAgKTtcblxuICBvblRhc2tDbGljayA9IG91dHB1dDxBWFBUYXNrPigpO1xuICBvblRhc2tDaGFuZ2VkID0gb3V0cHV0PEFYUFRhc2s+KCk7XG4gIG9uTW9udGhTbG90RGJsQ2xpY2tlZCA9IG91dHB1dDxEYXRlPigpO1xuICBvbkFjdGlvbkNsaWNrID0gb3V0cHV0PEFYUFRhc2tBY3Rpb24+KCk7XG4gIGNvbXBvbmVudCA9IG91dHB1dDxBWFNjaGVkdWxlckNvbXBvbmVudD4oKTtcbiAgb25UYXNrUmlnaHRDbGljayA9IG91dHB1dDxBWFBUYXNrQWN0aW9uPigpO1xuICBvblJhbmdlQ2hhbmdlZCA9IG91dHB1dDxBWFNjaGVkdWxlckRhdGVSYW5nZT4oKTtcblxuICAvLyBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy8gICBjb25zdCBmaXJzdERheU9mV2VlayA9IGF3YWl0IHRoaXMuc2V0dGluZ3NTZXJ2aWNlLmdldChBWFBSZWdpb25hbFNldHRpbmcuRmlyc3REYXlPZldlZWspIGFzIHVua25vd24gYXMgbnVtYmVyO1xuICAvLyAgIGNvbnN0IHdlZWtEYXlzID0gWydzdW5kYXknLCAnbW9uZGF5JywgJ3R1ZXNkYXknLCAnd2VkbmVzZGF5JywgJ3RodXJzZGF5JywgJ2ZyaWRheScsICdzYXR1cmRheSddO1xuICAvLyAgIHRoaXMuZmlyc3REYXlPZldlZWsuc2V0KHdlZWtEYXlzW2ZpcnN0RGF5T2ZXZWVrXSBhcyB1bmtub3duIGFzIEFYRGF5T2ZXZWVrTmFtZSk7XG4gIC8vICAgdGhpcy53ZWVrZW5kRGF5cy5zZXQoKGF3YWl0IHRoaXMuc2V0dGluZ3NTZXJ2aWNlLmdldChBWFBSZWdpb25hbFNldHRpbmcuV2Vla2VuZERheXMpKSBhcyB1bmtub3duIGFzIG51bWJlcltdKTtcbiAgLy8gfVxuXG4gIGFzeW5jIG5nQWZ0ZXJWaWV3SW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5zY2hlZHVsZXJDb21wb25lbnQoKSkge1xuICAgICAgdGhpcy5jb21wb25lbnQuZW1pdCh0aGlzLnNjaGVkdWxlckNvbXBvbmVudCgpISk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG9uVGFza0Ryb3AoZXZlbnQ6IEFYU2NoZWR1bGVyU2xvdERyb3BFdmVudCkge1xuICAgIC8vIENoZWNrIGlmIGRyb3BwZWQgb24gdGhlIHNhbWUgc2xvdCAoYWdlbmRhIHZpZXcpXG4gICAgaWYgKGV2ZW50LnNsb3QudmlldyA9PT0gJ2FnZW5kYScgJiYgZXZlbnQuaXNTYW1lU2xvdERyb3ApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBVc2UgdGhlIHNjaGVkdWxlciBzZXJ2aWNlIHV0aWxpdHkgdG8gY2FsY3VsYXRlIHRoZSBuZXcgYXBwb2ludG1lbnQgZGF0YVxuICAgIGNvbnN0IGRyb3BSZXN1bHQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuY2FsY3VsYXRlQXBwb2ludG1lbnREcm9wUmVzdWx0KGV2ZW50KTtcblxuICAgIC8vIElmIGRyb3BwZWQgb24gdGhlIHNhbWUgc2xvdCwgbm8gYWN0aW9uIG5lZWRlZFxuICAgIGlmIChkcm9wUmVzdWx0LmlzU2FtZVNsb3REcm9wKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR2V0IHRoZSBvcmlnaW5hbCB0YXNrIChiZWZvcmUgbW9kaWZpY2F0aW9uKVxuICAgIGNvbnN0IG9yaWdpbmFsVGFzayA9IGV2ZW50LmFwcG9pbnRtZW50IGFzIEFYUFRhc2s7XG5cbiAgICAvLyBBcHBseSB0aGUgZHJvcCByZXN1bHQgdG8gY3JlYXRlIGFuIHVwZGF0ZWQgdGFzayBvYmplY3RcbiAgICAvLyBUaGlzIHVzZXMgdGhlIHNjaGVkdWxlcidzIGludGVybmFsIHV0aWxpdHkgZm9yIGNvbnNpc3RlbnQgZGF0ZSBoYW5kbGluZ1xuICAgIGNvbnN0IHVwZGF0ZWRUYXNrID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmFwcGx5RHJvcFJlc3VsdCh7IC4uLm9yaWdpbmFsVGFzayB9LCBkcm9wUmVzdWx0KSBhcyBBWFBUYXNrO1xuXG4gICAgLy8gUGVyc2lzdCB0aGUgY2hhbmdlIHRvIHRoZSBiYWNrZW5kIHZpYSB0YXNrQm9hcmRTZXJ2aWNlXG4gICAgdGhpcy50YXNrQm9hcmRTZXJ2aWNlXG4gICAgICAudXBkYXRlVGFza0RhdGVSYW5nZShvcmlnaW5hbFRhc2ssIHtcbiAgICAgICAgZnJvbTogZHJvcFJlc3VsdC5zdGFydERhdGUsXG4gICAgICAgIGVuZDogZHJvcFJlc3VsdC5lbmREYXRlLFxuICAgICAgfSlcbiAgICAgIC50aGVuKChwZXJzaXN0ZWRUYXNrKSA9PiB7XG4gICAgICAgIC8vIEVtaXQgdGhlIGNoYW5nZSBldmVudCBzbyBwYXJlbnQgY2FuIHVwZGF0ZSBpdHMgc3RhdGVcbiAgICAgICAgdGhpcy5vblRhc2tDaGFuZ2VkLmVtaXQocGVyc2lzdGVkVGFzayk7XG5cbiAgICAgICAgLy8gUmVmcmVzaCB0aGUgc2NoZWR1bGVyIHRvIHJlZmxlY3QgdGhlIHBlcnNpc3RlZCBkYXRhXG4gICAgICAgIC8vIFRoaXMgZW5zdXJlcyB0aGUgc2NoZWR1bGVyJ3MgaW50ZXJuYWwgc3RhdGUgaXMgc3luY2hyb25pemVkIHdpdGggdGhlIGJhY2tlbmRcbiAgICAgICAgdGhpcy5zY2hlZHVsZXJDb21wb25lbnQoKT8ucmVmcmVzaCgpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignW1Rhc2tCb2FyZENhbGVuZGFyXSBGYWlsZWQgdG8gdXBkYXRlIHRhc2sgZGF0ZSByYW5nZTonLCBlcnJvcik7XG4gICAgICAgIC8vIFJldmVydCB0aGUgdmlzdWFsIGNoYW5nZSBpZiBwZXJzaXN0ZW5jZSBmYWlscyBieSByZWZyZXNoaW5nIGZyb20gYmFja2VuZFxuICAgICAgICB0aGlzLnNjaGVkdWxlckNvbXBvbmVudCgpPy5yZWZyZXNoKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblRhc2tSaWdodENsaWNrSGFuZGxlcihldmVudDogQVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLm9uVGFza1JpZ2h0Q2xpY2suZW1pdCh7IG5hdGl2ZUV2ZW50OiBldmVudC5uYXRpdmVFdmVudCwgdGFzazogZXZlbnQuYXBwb2ludG1lbnQgYXMgQVhQVGFzayB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblNsb3REYmxDbGlja2VkKGV2ZW50OiBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnNlbmRlci5zZWxlY3RlZFZpZXcoKSA9PT0gJ21vbnRoJykge1xuICAgICAgdGhpcy5vbk1vbnRoU2xvdERibENsaWNrZWQuZW1pdChldmVudC5zbG90LnN0YXJ0RGF0ZS5kYXRlKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlUmFuZ2VDaGFuZ2VkKGV2ZW50OiBBWFNjaGVkdWxlckRhdGVSYW5nZSkge1xuICAgIHRoaXMub25SYW5nZUNoYW5nZWQuZW1pdChldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlQWN0aW9uQ2xpY2soZXZlbnQ6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5vbkFjdGlvbkNsaWNrLmVtaXQoeyBuYXRpdmVFdmVudDogZXZlbnQubmF0aXZlRXZlbnQsIHRhc2s6IGV2ZW50LmFwcG9pbnRtZW50IGFzIEFYUFRhc2sgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgb25UYXNrQ2xpY2tIYW5kbGVyKGV2ZW50OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRhc2sgPSBldmVudC5hcHBvaW50bWVudCBhcyBBWFBUYXNrO1xuXG4gICAgLy8gRmluZCB0aGUgYXBwb2ludG1lbnQgY29udGFpbmVyIGVsZW1lbnRcbiAgICBsZXQgdGFyZ2V0RWxlbWVudCA9IChldmVudC5uYXRpdmVFdmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50KSB8fCAoZXZlbnQubmF0aXZlRXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcblxuICAgIC8vIFRyYXZlcnNlIHVwIHRvIGZpbmQgdGhlIGFwcG9pbnRtZW50IGNvbnRhaW5lclxuICAgIGxldCBlbGVtZW50ID0gdGFyZ2V0RWxlbWVudDtcbiAgICBjb25zdCBtYXhEZXB0aCA9IDEwO1xuICAgIGxldCBkZXB0aCA9IDA7XG5cbiAgICB3aGlsZSAoZWxlbWVudCAmJiBlbGVtZW50ICE9PSBkb2N1bWVudC5ib2R5ICYmIGRlcHRoIDwgbWF4RGVwdGgpIHtcbiAgICAgIGRlcHRoKys7XG5cbiAgICAgIGNvbnN0IGlzQXBwb2ludG1lbnQgPVxuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdD8uY29udGFpbnMoJ2R4LXNjaGVkdWxlci1hcHBvaW50bWVudCcpIHx8XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0Py5jb250YWlucygnYXgtc2NoZWR1bGVyLWFwcG9pbnRtZW50JykgfHxcbiAgICAgICAgZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2RhdGEtYXBwb2ludG1lbnQtaWQnKTtcblxuICAgICAgaWYgKGlzQXBwb2ludG1lbnQpIHtcbiAgICAgICAgdGFyZ2V0RWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXJlbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIGNvbnN0IGlzUGFyZW50QXBwb2ludG1lbnQgPVxuICAgICAgICAgIHBhcmVudC5jbGFzc0xpc3Q/LmNvbnRhaW5zKCdkeC1zY2hlZHVsZXItYXBwb2ludG1lbnQnKSB8fFxuICAgICAgICAgIHBhcmVudC5jbGFzc0xpc3Q/LmNvbnRhaW5zKCdheC1zY2hlZHVsZXItYXBwb2ludG1lbnQnKTtcblxuICAgICAgICBpZiAoaXNQYXJlbnRBcHBvaW50bWVudCkge1xuICAgICAgICAgIHRhcmdldEVsZW1lbnQgPSBwYXJlbnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIHNlbGVjdGVkIHRhc2sgYW5kIHRhcmdldCBlbGVtZW50XG4gICAgdGhpcy5zZWxlY3RlZFRhc2suc2V0KHRhc2spO1xuICAgIHRoaXMucG9wb3ZlclRhcmdldC5zZXQodGFyZ2V0RWxlbWVudCk7XG5cbiAgICAvLyBDaGVjayBpZiBwcm92aWRlciBoYXMgYSBjdXN0b20gY29tcG9uZW50XG4gICAgYXdhaXQgdGhpcy5sb2FkQ3VzdG9tQ29tcG9uZW50KHRhc2spO1xuXG4gICAgLy8gTG9hZCBhY3Rpb25zIGZvciB0aGUgdGFza1xuICAgIGF3YWl0IHRoaXMubG9hZFRhc2tBY3Rpb25zKHRhc2spO1xuXG4gICAgaWYgKHRoaXMudGFza1BvcG92ZXIoKSAmJiB0YXJnZXRFbGVtZW50KSB7XG4gICAgICB0aGlzLnRhc2tQb3BvdmVyKCkudGFyZ2V0ID0gdGFyZ2V0RWxlbWVudDtcbiAgICAgIHRoaXMudGFza1BvcG92ZXIoKS5vcGVuKCk7XG4gICAgfVxuXG4gICAgLy8gU3RpbGwgZW1pdCB0aGUgZXZlbnQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICB0aGlzLm9uVGFza0NsaWNrLmVtaXQodGFzayk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbG9hZFRhc2tBY3Rpb25zKHRhc2s6IEFYUFRhc2spOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcHJvdmlkZXJOYW1lID0gdGFzay5wcm92aWRlcjtcbiAgICAgIGlmICghcHJvdmlkZXJOYW1lKSB7XG4gICAgICAgIHRoaXMudGFza0FjdGlvbnMuc2V0KFtdKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMudGFza0JvYXJkU2VydmljZS5nZXRQcm92aWRlcihwcm92aWRlck5hbWUpO1xuICAgICAgaWYgKCFwcm92aWRlcikge1xuICAgICAgICB0aGlzLnRhc2tBY3Rpb25zLnNldChbXSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWN0aW9ucyA9IGF3YWl0IHByb3ZpZGVyLmdldEFjdGlvbnModGFzayk7XG4gICAgICAvLyBFbnN1cmUgYWxsIGFjdGlvbnMgaGF2ZSBhIHByaW9yaXR5IChkZWZhdWx0IHRvICdzZWNvbmRhcnknIGlmIG5vdCBzcGVjaWZpZWQpXG4gICAgICBjb25zdCBhY3Rpb25zV2l0aFByaW9yaXR5ID0gKGFjdGlvbnMgfHwgW10pLm1hcCgoYWN0aW9uKSA9PiAoe1xuICAgICAgICAuLi5hY3Rpb24sXG4gICAgICAgIHByaW9yaXR5OiBhY3Rpb24ucHJpb3JpdHkgPz8gJ3NlY29uZGFyeScsXG4gICAgICB9KSk7XG4gICAgICB0aGlzLnRhc2tBY3Rpb25zLnNldChhY3Rpb25zV2l0aFByaW9yaXR5KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgdGFzayBhY3Rpb25zOicsIGVycm9yKTtcbiAgICAgIHRoaXMudGFza0FjdGlvbnMuc2V0KFtdKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0QWN0aW9uQ29sb3IoYWN0aW9uOiBBWFBUYXNrQWN0aW9uTWVudUl0ZW0pOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gYWN0aW9uLmNvbG9yIGFzIHN0cmluZztcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBleGVjdXRlQWN0aW9uKGFjdGlvbjogQVhQVGFza0FjdGlvbk1lbnVJdGVtKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGFzayA9IHRoaXMuc2VsZWN0ZWRUYXNrKCk7XG4gICAgaWYgKCF0YXNrIHx8ICFhY3Rpb24uY29tbWFuZCkgcmV0dXJuO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHByb3ZpZGVyTmFtZSA9IHRhc2sucHJvdmlkZXI7XG4gICAgICBpZiAoIXByb3ZpZGVyTmFtZSkgcmV0dXJuO1xuXG4gICAgICBhd2FpdCB0aGlzLnRhc2tCb2FyZFNlcnZpY2UuZXhlY3V0ZUNvbW1hbmQoYWN0aW9uLmNvbW1hbmQsIHByb3ZpZGVyTmFtZSk7XG4gICAgICB0aGlzLmNsb3NlUG9wb3ZlcigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZXhlY3V0ZSBhY3Rpb246JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBvcGVuVGFza0RldGFpbHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGFzayA9IHRoaXMuc2VsZWN0ZWRUYXNrKCk7XG4gICAgaWYgKCF0YXNrKSByZXR1cm47XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jb21tYW5kU2VydmljZS5leGVjdXRlKCdFbnRpdHk6T3BlbkRldGFpbHMnLCB7XG4gICAgICAgIGVudGl0eTogYCR7Um9vdENvbmZpZy5tb2R1bGUubmFtZX0uJHtSb290Q29uZmlnLmVudGl0aWVzLnRhc2submFtZX1gLFxuICAgICAgICBkYXRhOiB7IGlkOiB0YXNrLmlkIH0sXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY2xvc2VQb3BvdmVyKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBvcGVuIHRhc2sgZGV0YWlsczonLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGxvYWRDdXN0b21Db21wb25lbnQodGFzazogQVhQVGFzayk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGFzay5wcm92aWRlcikge1xuICAgICAgY29uc29sZS5sb2coJ1tUYXNrUG9wb3Zlcl0gTm8gcHJvdmlkZXIgb24gdGFzazonLCB0YXNrKTtcbiAgICAgIHRoaXMuY3VzdG9tQ29tcG9uZW50VHlwZS5zZXQobnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLnRhc2tCb2FyZFNlcnZpY2UuZ2V0UHJvdmlkZXIodGFzay5wcm92aWRlcik7XG4gICAgaWYgKCFwcm92aWRlcikge1xuICAgICAgY29uc29sZS5sb2coJ1tUYXNrUG9wb3Zlcl0gUHJvdmlkZXIgbm90IGZvdW5kOicsIHRhc2sucHJvdmlkZXIpO1xuICAgICAgdGhpcy5jdXN0b21Db21wb25lbnRUeXBlLnNldChudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb21wb25lbnRHZXR0ZXIgPSBwcm92aWRlci5nZXRDb21wb25lbnQ/LigpO1xuICAgIGlmICghY29tcG9uZW50R2V0dGVyKSB7XG4gICAgICBjb25zb2xlLmxvZygnW1Rhc2tQb3BvdmVyXSBObyBjb21wb25lbnQgZ2V0dGVyIG9uIHByb3ZpZGVyOicsIHRhc2sucHJvdmlkZXIpO1xuICAgICAgdGhpcy5jdXN0b21Db21wb25lbnRUeXBlLnNldChudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygnW1Rhc2tQb3BvdmVyXSBDb21wb25lbnQgZ2V0dGVyIGZvdW5kOicsIGNvbXBvbmVudEdldHRlciwgJ1R5cGU6JywgdHlwZW9mIGNvbXBvbmVudEdldHRlcik7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IGNvbXBvbmVudFR5cGU6IFR5cGU8QVhQVGFza1BvcG92ZXJDb21wb25lbnQ+O1xuXG4gICAgICAvLyBDaGVjayBpZiBpdCdzIGEgbGF6eSBsb2FkaW5nIGZ1bmN0aW9uIG9yIGRpcmVjdCBjb21wb25lbnQgdHlwZVxuICAgICAgLy8gQSBsYXp5IGxvYWRlciBpcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIFByb21pc2VcbiAgICAgIC8vIEEgY29tcG9uZW50IHR5cGUgaXMgYSBjbGFzcyBjb25zdHJ1Y3RvciAoYWxzbyBhIGZ1bmN0aW9uLCBidXQgdXNlZCBkaWZmZXJlbnRseSlcbiAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50R2V0dGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIFRyeSBjYWxsaW5nIGl0IHRvIHNlZSBpZiBpdCByZXR1cm5zIGEgUHJvbWlzZSAobGF6eSBsb2FkZXIpXG4gICAgICAgIGNvbnN0IHRlc3RDYWxsID0gY29tcG9uZW50R2V0dGVyIGFzICgpID0+XG4gICAgICAgICAgfCBQcm9taXNlPFR5cGU8QVhQVGFza1BvcG92ZXJDb21wb25lbnQ+PlxuICAgICAgICAgIHwgVHlwZTxBWFBUYXNrUG9wb3ZlckNvbXBvbmVudD5cbiAgICAgICAgICB8IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHJlc3VsdDogUHJvbWlzZTxUeXBlPEFYUFRhc2tQb3BvdmVyQ29tcG9uZW50Pj4gfCBUeXBlPEFYUFRhc2tQb3BvdmVyQ29tcG9uZW50PiB8IHVuZGVmaW5lZDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJlc3VsdCA9IHRlc3RDYWxsKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBJZiBjYWxsaW5nIHRocm93cyAoZS5nLiwgY2xhc3MgY29uc3RydWN0b3Igd2l0aG91dCAnbmV3JyksIHVzZSBpdCBkaXJlY3RseVxuICAgICAgICAgIGNvbnNvbGUubG9nKCdbVGFza1BvcG92ZXJdIENvbXBvbmVudCBnZXR0ZXIgaXMgYSBjbGFzcyBjb25zdHJ1Y3RvciwgdXNpbmcgZGlyZWN0bHknKTtcbiAgICAgICAgICBjb21wb25lbnRUeXBlID0gY29tcG9uZW50R2V0dGVyIGFzIFR5cGU8QVhQVGFza1BvcG92ZXJDb21wb25lbnQ+O1xuICAgICAgICAgIHRoaXMuY3VzdG9tQ29tcG9uZW50VHlwZS5zZXQoY29tcG9uZW50VHlwZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAvLyBJdCdzIGEgbGF6eSBsb2FkaW5nIGZ1bmN0aW9uXG4gICAgICAgICAgY29uc29sZS5sb2coJ1tUYXNrUG9wb3Zlcl0gQ29tcG9uZW50IGdldHRlciBpcyBhIGxhenkgbG9hZGVyJyk7XG4gICAgICAgICAgY29tcG9uZW50VHlwZSA9IGF3YWl0IHJlc3VsdDtcbiAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAvLyBJdCByZXR1cm5lZCBhIGNvbXBvbmVudCB0eXBlIGRpcmVjdGx5XG4gICAgICAgICAgY29uc29sZS5sb2coJ1tUYXNrUG9wb3Zlcl0gQ29tcG9uZW50IGdldHRlciByZXR1cm5lZCBjb21wb25lbnQgdHlwZSBkaXJlY3RseScpO1xuICAgICAgICAgIGNvbXBvbmVudFR5cGUgPSByZXN1bHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gUmVzdWx0IGlzIHVuZGVmaW5lZCwgdXNlIHRoZSBvcmlnaW5hbCBhcyBjb21wb25lbnQgdHlwZVxuICAgICAgICAgIGNvbnNvbGUubG9nKCdbVGFza1BvcG92ZXJdIENvbXBvbmVudCBnZXR0ZXIgcmV0dXJuZWQgdW5kZWZpbmVkLCB1c2luZyBvcmlnaW5hbCBhcyBjb21wb25lbnQgdHlwZScpO1xuICAgICAgICAgIGNvbXBvbmVudFR5cGUgPSBjb21wb25lbnRHZXR0ZXIgYXMgVHlwZTxBWFBUYXNrUG9wb3ZlckNvbXBvbmVudD47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdbVGFza1BvcG92ZXJdIENvbXBvbmVudCBnZXR0ZXIgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgdGhpcy5jdXN0b21Db21wb25lbnRUeXBlLnNldChudWxsKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmxvZygnW1Rhc2tQb3BvdmVyXSBDb21wb25lbnQgdHlwZSBsb2FkZWQgc3VjY2Vzc2Z1bGx5OicsIGNvbXBvbmVudFR5cGU/Lm5hbWUpO1xuICAgICAgdGhpcy5jdXN0b21Db21wb25lbnRUeXBlLnNldChjb21wb25lbnRUeXBlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignW1Rhc2tQb3BvdmVyXSBGYWlsZWQgdG8gbG9hZCBjdXN0b20gdGFzayBwb3BvdmVyIGNvbXBvbmVudDonLCBlcnJvcik7XG4gICAgICB0aGlzLmN1c3RvbUNvbXBvbmVudFR5cGUuc2V0KG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBjbG9zZVBvcG92ZXIoKTogdm9pZCB7XG4gICAgdGhpcy50YXNrUG9wb3ZlcigpPy5jbG9zZSgpO1xuICAgIHRoaXMuY3VzdG9tQ29tcG9uZW50VHlwZS5zZXQobnVsbCk7XG4gICAgdGhpcy5zZWxlY3RlZFRhc2suc2V0KG51bGwpO1xuICAgIHRoaXMucG9wb3ZlclRhcmdldC5zZXQobnVsbCk7XG4gICAgdGhpcy50YXNrQWN0aW9ucy5zZXQoW10pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZvcm1hdFRpbWUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShkYXRlKS5mb3JtYXQoJ0hIOm1tJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZm9ybWF0RGF0ZShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGRhdGUpLmZvcm1hdCgnTU1NIERELCBZWVlZJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZm9ybWF0RGF0ZVRpbWUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShkYXRlKS5mb3JtYXQoJ01NTSBERCwgWVlZWSBISDptbScpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzTXVsdGlEYXkodGFzazogQVhQVGFzayk6IGJvb2xlYW4ge1xuICAgIGlmICh0YXNrLmFsbERheSkge1xuICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUodGFzay5zdGFydERhdGUpO1xuICAgICAgY29uc3QgZW5kID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKHRhc2suZW5kRGF0ZSk7XG4gICAgICByZXR1cm4gc3RhcnQuZGF0ZS5nZXRUaW1lKCkgIT09IGVuZC5kYXRlLmdldFRpbWUoKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBzdGFydCBhbmQgZW5kIGFyZSBvbiBkaWZmZXJlbnQgZGF5c1xuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKHRhc2suc3RhcnREYXRlKTtcbiAgICBjb25zdCBlbmQgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUodGFzay5lbmREYXRlKTtcbiAgICBjb25zdCBzdGFydERheSA9IHN0YXJ0LmRhdGUuZ2V0RGF0ZSgpO1xuICAgIGNvbnN0IGVuZERheSA9IGVuZC5kYXRlLmdldERhdGUoKTtcbiAgICBjb25zdCBzdGFydE1vbnRoID0gc3RhcnQuZGF0ZS5nZXRNb250aCgpO1xuICAgIGNvbnN0IGVuZE1vbnRoID0gZW5kLmRhdGUuZ2V0TW9udGgoKTtcbiAgICBjb25zdCBzdGFydFllYXIgPSBzdGFydC5kYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgY29uc3QgZW5kWWVhciA9IGVuZC5kYXRlLmdldEZ1bGxZZWFyKCk7XG5cbiAgICByZXR1cm4gc3RhcnREYXkgIT09IGVuZERheSB8fCBzdGFydE1vbnRoICE9PSBlbmRNb250aCB8fCBzdGFydFllYXIgIT09IGVuZFllYXI7XG4gIH1cblxuICBwcm90ZWN0ZWQgZm9ybWF0RGF0ZVJhbmdlKHRhc2s6IEFYUFRhc2spOiBzdHJpbmcge1xuICAgIGlmICh0YXNrLmFsbERheSkge1xuICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUodGFzay5zdGFydERhdGUpO1xuICAgICAgY29uc3QgZW5kID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKHRhc2suZW5kRGF0ZSk7XG5cbiAgICAgIC8vIFNhbWUgZGF5XG4gICAgICBpZiAoc3RhcnQuZGF0ZS5nZXRUaW1lKCkgPT09IGVuZC5kYXRlLmdldFRpbWUoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXREYXRlKHRhc2suc3RhcnREYXRlKTtcbiAgICAgIH1cblxuICAgICAgLy8gRGlmZmVyZW50IGRheXMgLSBzaG93IHJhbmdlXG4gICAgICBjb25zdCBzdGFydEZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0RGF0ZSh0YXNrLnN0YXJ0RGF0ZSk7XG4gICAgICBjb25zdCBlbmRGb3JtYXR0ZWQgPSB0aGlzLmZvcm1hdERhdGUodGFzay5lbmREYXRlKTtcblxuICAgICAgLy8gU2FtZSBtb250aCBhbmQgeWVhclxuICAgICAgaWYgKHN0YXJ0LmRhdGUuZ2V0TW9udGgoKSA9PT0gZW5kLmRhdGUuZ2V0TW9udGgoKSAmJiBzdGFydC5kYXRlLmdldEZ1bGxZZWFyKCkgPT09IGVuZC5kYXRlLmdldEZ1bGxZZWFyKCkpIHtcbiAgICAgICAgY29uc3Qgc3RhcnREYXkgPSBzdGFydC5kYXRlLmdldERhdGUoKTtcbiAgICAgICAgY29uc3QgZW5kRGF5ID0gZW5kLmRhdGUuZ2V0RGF0ZSgpO1xuICAgICAgICBjb25zdCBtb250aFllYXIgPSBzdGFydC5mb3JtYXQoJ01NTSBZWVlZJyk7XG4gICAgICAgIHJldHVybiBgJHtzdGFydERheX0gLSAke2VuZERheX0sICR7bW9udGhZZWFyfWA7XG4gICAgICB9XG5cbiAgICAgIC8vIERpZmZlcmVudCBtb250aHMgb3IgeWVhcnNcbiAgICAgIHJldHVybiBgJHtzdGFydEZvcm1hdHRlZH0gLSAke2VuZEZvcm1hdHRlZH1gO1xuICAgIH1cblxuICAgIC8vIE5vdCBhbGwtZGF5XG4gICAgaWYgKHRoaXMuaXNNdWx0aURheSh0YXNrKSkge1xuICAgICAgY29uc3Qgc3RhcnRGb3JtYXR0ZWQgPSB0aGlzLmZvcm1hdERhdGVUaW1lKHRhc2suc3RhcnREYXRlKTtcbiAgICAgIGNvbnN0IGVuZEZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0RGF0ZVRpbWUodGFzay5lbmREYXRlKTtcbiAgICAgIHJldHVybiBgJHtzdGFydEZvcm1hdHRlZH0gLSAke2VuZEZvcm1hdHRlZH1gO1xuICAgIH1cblxuICAgIC8vIFNhbWUgZGF5LCBzaG93IGRhdGUgd2l0aCB0aW1lIHJhbmdlXG4gICAgY29uc3QgZGF0ZUZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0RGF0ZSh0YXNrLnN0YXJ0RGF0ZSk7XG4gICAgY29uc3QgdGltZVJhbmdlID0gYCR7dGhpcy5mb3JtYXRUaW1lKHRhc2suc3RhcnREYXRlKX0gLSAke3RoaXMuZm9ybWF0VGltZSh0YXNrLmVuZERhdGUpfWA7XG4gICAgcmV0dXJuIGAke2RhdGVGb3JtYXR0ZWR9ICR7dGltZVJhbmdlfWA7XG4gIH1cbn1cbiIsIjxheC1zY2hlZHVsZXJcbiAgW2hhc0hlYWRlcl09XCJmYWxzZVwiXG4gIFtob2xpZGF5c109XCJob2xpZGF5c1wiXG4gIFtyZXNvdXJjZXNdPVwicmVzb3VyY2VzKClcIlxuICBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlKClcIlxuICBbc3RhcnRpbmdEYXRlXT1cInN0YXJ0aW5nRGF0ZSgpXCJcbiAgW3NlbGVjdGVkVmlld109XCJjdXJyZW50U2NoZWR1bGVyVmlldygpXCJcbiAgW211bHRpRGF5Vmlld0RheXNDb3VudF09XCJ2bS5kYXlzQ291bnQoKVwiXG4gIChvbkFwcG9pbnRtZW50RHJvcCk9XCJvblRhc2tEcm9wKCRldmVudClcIlxuICAob25BY3Rpb25DbGljayk9XCJoYW5kbGVBY3Rpb25DbGljaygkZXZlbnQpXCJcbiAgKG9uUmFuZ2VDaGFuZ2VkKT1cImhhbmRsZVJhbmdlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgKG9uU2xvdERibENsaWNrZWQpPVwib25TbG90RGJsQ2xpY2tlZCgkZXZlbnQpXCJcbiAgKG9uQXBwb2ludG1lbnRDbGlja2VkKT1cIm9uVGFza0NsaWNrSGFuZGxlcigkZXZlbnQpXCJcbiAgW3dlZWtlbmRdPVwid2Vla2VuZERheXMoKVwiXG4gIFtmaXJzdERheU9mV2Vla109XCJmaXJzdERheU9mV2VlaygpXCJcbj48L2F4LXNjaGVkdWxlcj5cblxuPCEtLSBUYXNrIERldGFpbCBQb3BvdmVyIChNb2Rlcm4gR29vZ2xlIENhbGVuZGFyIFN0eWxlKSAtLT5cbjxheC1wb3BvdmVyXG4gICN0YXNrUG9wb3ZlclxuICBbb3Blbk9uXT1cIidtYW51YWwnXCJcbiAgW2Nsb3NlT25dPVwiJ2NsaWNrT3V0J1wiXG4gIFtvZmZzZXRZXT1cIjEyXCJcbiAgW29mZnNldFhdPVwiMTJcIlxuICBbYWRhcHRpdml0eUVuYWJsZWRdPVwidHJ1ZVwiXG4+XG4gIDxkaXY+XG4gICAgQGlmIChzZWxlY3RlZFRhc2soKSkge1xuICAgICAgPGRpdiBjbGFzcz1cInRhc2stcG9wb3ZlciBheC1zaGFkb3ctbWQgYXgtYm9yZGVyXCI+XG4gICAgICAgIDwhLS0gSGVhZGVyIFNlY3Rpb24gLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YXNrLXBvcG92ZXJfX2hlYWRlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YXNrLXBvcG92ZXJfX3RpdGxlLXNlY3Rpb25cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YXNrLXBvcG92ZXJfX3RpdGxlLXJvd1wiPlxuICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ0YXNrLXBvcG92ZXJfX3RpdGxlXCIgW3RpdGxlXT1cInNlbGVjdGVkVGFzaygpIS50aXRsZVwiPnt7IHNlbGVjdGVkVGFzaygpIS50aXRsZSB9fTwvaDM+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidGFzay1wb3BvdmVyX19jbG9zZS1idG5cIiAoY2xpY2spPVwiY2xvc2VQb3BvdmVyKClcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj5cbiAgICAgICAgICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1jbG9zZVwiPjwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIEBpZiAoc2VsZWN0ZWRUYXNrKCkhLmRlc2NyaXB0aW9uICYmICFjdXN0b21Db21wb25lbnRUeXBlKCkpIHtcbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0YXNrLXBvcG92ZXJfX2Rlc2NyaXB0aW9uXCI+e3sgc2VsZWN0ZWRUYXNrKCkhLmRlc2NyaXB0aW9uIH19PC9wPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIEN1c3RvbSBDb21wb25lbnQgb3IgRGVmYXVsdCBDb250ZW50IC0tPlxuICAgICAgICBAaWYgKGN1c3RvbUNvbXBvbmVudFR5cGUoKSkge1xuICAgICAgICAgIDwhLS0gQ3VzdG9tIENvbXBvbmVudCBmcm9tIFByb3ZpZGVyIC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YXNrLXBvcG92ZXJfX2N1c3RvbS1jb250ZW50XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0NvbXBvbmVudE91dGxldD1cImN1c3RvbUNvbXBvbmVudFR5cGUoKSE7IGlucHV0czogY3VzdG9tQ29tcG9uZW50SW5wdXRzKCkhXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDwhLS0gRGVmYXVsdCBDb250ZW50IFNlY3Rpb24gLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRhc2stcG9wb3Zlcl9fY29udGVudFwiPlxuICAgICAgICAgICAgPCEtLSBUaW1lIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhc2stcG9wb3Zlcl9faW5mby1pdGVtXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YXNrLXBvcG92ZXJfX2ljb25cIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLWNsb2NrXCI+PC9pPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhc2stcG9wb3Zlcl9faW5mby1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YXNrLXBvcG92ZXJfX2luZm8tdGV4dFwiPnt7IGZvcm1hdERhdGVSYW5nZShzZWxlY3RlZFRhc2soKSEpIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIFN0YXR1cyAtLT5cbiAgICAgICAgICAgIEBpZiAoc2VsZWN0ZWRUYXNrKCkhLnN0YXR1cykge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFzay1wb3BvdmVyX19pbmZvLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFzay1wb3BvdmVyX19pY29uXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLWZsYWdcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhc2stcG9wb3Zlcl9faW5mby1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhc2stcG9wb3Zlcl9faW5mby10ZXh0XCI+e3sgc2VsZWN0ZWRUYXNrKCkhLnN0YXR1cy50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDwhLS0gQXNzaWduZWUgLS0+XG4gICAgICAgICAgICBAaWYgKHNlbGVjdGVkVGFzaygpIS5hc3NpZ25lZSkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFzay1wb3BvdmVyX19pbmZvLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFzay1wb3BvdmVyX19pY29uXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLXVzZXJcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhc2stcG9wb3Zlcl9faW5mby1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhc2stcG9wb3Zlcl9faW5mby10ZXh0XCI+e3tcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRUYXNrKCkhLmFzc2lnbmVlPy5mdWxsTmFtZSB8fCBzZWxlY3RlZFRhc2soKSEuYXNzaWduZWU/LnVzZXJuYW1lIHx8ICdVbmFzc2lnbmVkJ1xuICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8IS0tIFByaW9yaXR5IC0tPlxuICAgICAgICAgICAgQGlmIChzZWxlY3RlZFRhc2soKSEucHJpb3JpdHkpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhc2stcG9wb3Zlcl9faW5mby1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0YXNrLXBvcG92ZXJfX2ljb24gdGFzay1wb3BvdmVyX19pY29uLS1wcmlvcml0eVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXByaW9yaXR5XT1cInNlbGVjdGVkVGFzaygpIS5wcmlvcml0eVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1leGNsYW1hdGlvbi1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhc2stcG9wb3Zlcl9faW5mby1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRhc2stcG9wb3Zlcl9faW5mby10ZXh0IHRhc2stcG9wb3Zlcl9fcHJpb3JpdHlcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXByaW9yaXR5XT1cInNlbGVjdGVkVGFzaygpIS5wcmlvcml0eVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7IHNlbGVjdGVkVGFzaygpIS5wcmlvcml0eSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gQWN0aW9ucyBTZWN0aW9uIC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YXNrLXBvcG92ZXJfX2FjdGlvbnNcIj5cbiAgICAgICAgICAgIDwhLS0gVGFzayBBY3Rpb25zIGZyb20gUHJvdmlkZXIgLS0+XG4gICAgICAgICAgICBAaWYgKHRhc2tBY3Rpb25zKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFzay1wb3BvdmVyX19hY3Rpb25zLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBQcmltYXJ5IEFjdGlvbnM6IEljb24tb25seSBidXR0b25zIC0tPlxuICAgICAgICAgICAgICAgIEBpZiAocHJpbWFyeUFjdGlvbnMoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICBAZm9yIChhY3Rpb24gb2YgcHJpbWFyeUFjdGlvbnMoKTsgdHJhY2sgYWN0aW9uLm5hbWUgfHwgYWN0aW9uLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxheC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBbbG9va109XCInc29saWQnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiZ2V0QWN0aW9uQ29sb3IoYWN0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiZXhlY3V0ZUFjdGlvbihhY3Rpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWN0aW9uLmRpc2FibGVkID09PSB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJhY3Rpb24udGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChhY3Rpb24uaWNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGF4LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cImFjdGlvbi5pY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2F4LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDwhLS0gU2Vjb25kYXJ5IEFjdGlvbnM6IERyb3Bkb3duIHdpdGggXCIuLi5cIiBidXR0b24gLS0+XG4gICAgICAgICAgICAgICAgQGlmIChzZWNvbmRhcnlBY3Rpb25zKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgPGF4LWJ1dHRvbiBbbG9va109XCInYmxhbmsnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgICAgICAgICAgICAgPGF4LWljb24gaWNvbj1cImZhLWxpZ2h0IGZhLWVsbGlwc2lzLXZlcnRpY2FsXCI+PC9heC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICAgICAgICAgICAgPGF4LWRyb3Bkb3duLXBhbmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxheC1idXR0b24taXRlbS1saXN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoYWN0aW9uIG9mIHNlY29uZGFyeUFjdGlvbnMoKTsgdHJhY2sgYWN0aW9uLm5hbWUgfHwgYWN0aW9uLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxheC1idXR0b24taXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cImFjdGlvbi50aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFjdGlvbi5kaXNhYmxlZCA9PT0gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiZXhlY3V0ZUFjdGlvbihhY3Rpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoYWN0aW9uLmljb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxheC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJhY3Rpb24uaWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9heC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2F4LWJ1dHRvbi1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0tbGlzdD5cbiAgICAgICAgICAgICAgICAgICAgPC9heC1kcm9wZG93bi1wYW5lbD5cbiAgICAgICAgICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG48L2F4LXBvcG92ZXI+XG4iXX0=","import { AXDataSource } from '@acorex/cdk/common';\nimport { AXDataTableModule } from '@acorex/components/data-table';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AsyncPipe } from '@angular/common';\nimport { afterNextRender, ChangeDetectionStrategy, Component, computed, effect, inject, input, output, signal, untracked, viewChild, ViewEncapsulation, } from '@angular/core';\nimport { AXPTaskBoardService } from '../../task-board.service';\nimport { AXMTaskBoardViewModel } from '../../task-board.viewmodel';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/components/data-table\";\nimport * as i2 from \"@acorex/platform/layout/widget-core\";\nexport class AXMTaskBoardGridViewComponent {\n #dataSourceChanged;\n constructor() {\n this.vm = inject(AXMTaskBoardViewModel);\n this.localeService = inject(AXLocaleService);\n this.calendarService = inject(AXCalendarService);\n this.taskBoardService = inject(AXPTaskBoardService);\n this.dataSource = input.required(...(ngDevMode ? [{ debugName: \"dataSource\" }] : []));\n this.onTaskClick = output();\n this.onActionClick = output();\n this.fetchedTasks = signal([], ...(ngDevMode ? [{ debugName: \"fetchedTasks\" }] : []));\n this.columns = signal([], ...(ngDevMode ? [{ debugName: \"columns\" }] : []));\n this.grid = viewChild('grid', ...(ngDevMode ? [{ debugName: \"grid\" }] : []));\n this.tasksDataSource = computed(() => {\n const parentDataSource = this.dataSource();\n return new AXDataSource({\n load: async (e) => {\n const result = await parentDataSource({ skip: e.skip, take: e.take });\n this.fetchedTasks.set(result.items);\n const mappedItems = result.items.map((task) => ({\n id: task.id,\n data: task.data,\n title: task.title,\n priority: task.priority,\n description: task.description,\n statusTitle: task.status.title,\n reporter: task.reporter.fullName ?? '-',\n assignee: task.assignee?.fullName ?? 'unassigned',\n type: this.taskBoardService.getProvider(task.provider)?.title,\n endDate: this.calendarService.format(task.endDate, 'DD/MM/YYYY HH:mm', {\n locale: this.localeService.activeProfile().calendar.system,\n }),\n startDate: this.calendarService.format(task.startDate, 'DD/MM/YYYY HH:mm', {\n locale: this.localeService.activeProfile().calendar.system,\n }),\n // Store the original task for row click handler\n _originalTask: task,\n }));\n return { items: mappedItems, total: result.total };\n },\n pageSize: 10,\n key: 'id',\n byKey: async (key) => {\n return this.fetchedTasks().find((task) => task.id === key);\n },\n });\n }, ...(ngDevMode ? [{ debugName: \"tasksDataSource\" }] : []));\n this.#dataSourceChanged = effect(() => {\n // Track filter-related signals that affect the data source\n // When these change, the parent's filter() computed signal changes,\n // which means the data source function will return different results\n this.vm.selectedTaskTypeNames();\n this.vm.selectedAssigneeIds();\n this.vm.selectedReporterIds();\n this.vm.selectedPriorities();\n this.vm.currentDate();\n this.vm.daysCount();\n this.vm.currentViewMode();\n // Use untracked to refresh the grid without tracking it\n untracked(() => {\n // Schedule refresh in next tick to avoid issues during effect execution\n setTimeout(() => {\n this.grid()?.refresh();\n }, 0);\n });\n }, ...(ngDevMode ? [{ debugName: \"#dataSourceChanged\" }] : []));\n this.#providerChanged = effect(async () => {\n const taskType = this.vm.selectedTaskTypes()[0];\n if (!taskType) {\n this.columns.set([]);\n return;\n }\n taskType.getExtraFields().then((extraFields) => {\n if (extraFields) {\n this.columns.set(extraFields);\n }\n });\n }, ...(ngDevMode ? [{ debugName: \"#providerChanged\" }] : []));\n // Ensure data source is refreshed after initial render\n afterNextRender(() => {\n untracked(() => {\n this.grid()?.refresh();\n });\n });\n }\n #providerChanged;\n handleRowClick(event) {\n if (event.data) {\n // Get the original task from the mapped item or find it by ID\n const mappedItem = event.data;\n const originalTask = mappedItem._originalTask || this.fetchedTasks().find((task) => task.id === mappedItem.id);\n if (originalTask) {\n this.onTaskClick.emit(originalTask);\n }\n }\n }\n onActionClickHandler(e) {\n const task = this.fetchedTasks().find((task) => task.id === e.data.id);\n if (!task)\n return;\n this.onActionClick.emit({ nativeEvent: e.nativeEvent, task });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMTaskBoardGridViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.16\", type: AXMTaskBoardGridViewComponent, isStandalone: true, selector: \"axm-task-board-grid-view\", inputs: { dataSource: { classPropertyName: \"dataSource\", publicName: \"dataSource\", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { onTaskClick: \"onTaskClick\", onActionClick: \"onActionClick\" }, viewQueries: [{ propertyName: \"grid\", first: true, predicate: [\"grid\"], descendants: true, isSignal: true }], ngImport: i0, template: \"<ax-data-table\\n #grid\\n [fetchDataMode]=\\\"'manual'\\\"\\n [dataSource]=\\\"tasksDataSource()\\\"\\n (onRowClick)=\\\"handleRowClick($event)\\\"\\n [loading]=\\\"{ enabled: true, animation: true }\\\"\\n>\\n <ax-text-column dataField=\\\"title\\\" caption=\\\"title\\\" [width]=\\\"'350px'\\\"></ax-text-column>\\n <ax-text-column dataField=\\\"description\\\" caption=\\\"description\\\" [width]=\\\"'500px'\\\"></ax-text-column>\\n <ax-text-column dataField=\\\"startDate\\\" caption=\\\"Start Date\\\" [width]=\\\"'150px'\\\"></ax-text-column>\\n <ax-text-column dataField=\\\"endDate\\\" caption=\\\"Due Date\\\" [width]=\\\"'150px'\\\"></ax-text-column>\\n <ax-text-column dataField=\\\"priority\\\" caption=\\\"priority\\\" [width]=\\\"'125px'\\\"></ax-text-column>\\n <ax-text-column [allowResizing]=\\\"true\\\" dataField=\\\"reporter\\\" caption=\\\"Reporter\\\" [width]=\\\"'125px'\\\"></ax-text-column>\\n <ax-text-column dataField=\\\"assignee\\\" caption=\\\"Assignee\\\" [width]=\\\"'125px'\\\"></ax-text-column>\\n <ax-text-column dataField=\\\"statusTitle\\\" caption=\\\"status\\\" [width]=\\\"'125px'\\\"></ax-text-column>\\n <ax-text-column dataField=\\\"type\\\" caption=\\\"type\\\" [width]=\\\"'150px'\\\"></ax-text-column>\\n\\n @if (columns().length) {\\n <ng-container>\\n @for (column of columns(); track column) {\\n <axp-widget-column-renderer\\n [node]=\\\"column.widget\\\"\\n [caption]=\\\"(column.title | translate | async)!\\\"\\n ></axp-widget-column-renderer>\\n }\\n </ng-container>\\n }\\n\\n <ax-command-column\\n fixed=\\\"end\\\"\\n [width]=\\\"'60px'\\\"\\n (onItemClick)=\\\"onActionClickHandler($event)\\\"\\n [items]=\\\"[{ name: 'view', text: 'View', icon: 'ax-icon ax-icon-more-horizontal' }]\\\"\\n ></ax-command-column>\\n</ax-data-table>\\n\", styles: [\"ax-kanban{--ax-comp-kanban-status-min-width: 25rem;height:100%;line-height:1.5}\\n\"], dependencies: [{ kind: \"ngmodule\", type: AXDataTableModule }, { kind: \"component\", type: i1.AXDataTableComponent, selector: \"ax-data-table\", inputs: [\"dataSource\", \"selectedRows\", \"parentField\", \"rowDetailsTemplate\", \"rowTemplate\", \"emptyTemplate\", \"noDataTemplate\", \"alternative\", \"showHeader\", \"fixedHeader\", \"showFooter\", \"fixedFooter\", \"itemHeight\", \"allowReordering\", \"paging\", \"fetchDataMode\", \"loading\", \"focusedRow\"], outputs: [\"selectedRowsChange\", \"focusedRowChange\", \"onRowClick\", \"onRowDbClick\", \"onColumnsOrderChanged\", \"onColumnSizeChanged\", \"onPageChanged\"] }, { kind: \"component\", type: i1.AXDataTableTextColumnComponent, selector: \"ax-text-column\", inputs: [\"width\", \"caption\", \"allowSorting\", \"allowResizing\", \"fixed\", \"customExpandIcon\", \"customCollapseIcon\", \"dataField\", \"expandHandler\", \"wrapText\", \"cellTemplate\", \"footerTemplate\", \"headerTemplate\", \"format\", \"formatOptions\"] }, { kind: \"component\", type: i1.AXRowCommandColumnComponent, selector: \"ax-command-column\", inputs: [\"width\", \"caption\", \"fixed\", \"footerTemplate\", \"items\"], outputs: [\"onItemClick\"] }, { kind: \"ngmodule\", type: AXPWidgetCoreModule }, { kind: \"component\", type: i2.AXPWidgetColumnRendererComponent, selector: \"axp-widget-column-renderer\", inputs: [\"caption\", \"customExpandIcon\", \"customCollapseIcon\", \"customWidth\", \"node\", \"footerTemplate\", \"expandHandler\", \"cellTemplate\", \"headerTemplate\"] }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMTaskBoardGridViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axm-task-board-grid-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [AXDataTableModule, AXTranslatorPipe, AsyncPipe, AXPWidgetCoreModule], template: \"<ax-data-table\\n #grid\\n [fetchDataMode]=\\\"'manual'\\\"\\n [dataSource]=\\\"tasksDataSource()\\\"\\n (onRowClick)=\\\"handleRowClick($event)\\\"\\n [loading]=\\\"{ enabled: true, animation: true }\\\"\\n>\\n <ax-text-column dataField=\\\"title\\\" caption=\\\"title\\\" [width]=\\\"'350px'\\\"></ax-text-column>\\n <ax-text-column dataField=\\\"description\\\" caption=\\\"description\\\" [width]=\\\"'500px'\\\"></ax-text-column>\\n <ax-text-column dataField=\\\"startDate\\\" caption=\\\"Start Date\\\" [width]=\\\"'150px'\\\"></ax-text-column>\\n <ax-text-column dataField=\\\"endDate\\\" caption=\\\"Due Date\\\" [width]=\\\"'150px'\\\"></ax-text-column>\\n <ax-text-column dataField=\\\"priority\\\" caption=\\\"priority\\\" [width]=\\\"'125px'\\\"></ax-text-column>\\n <ax-text-column [allowResizing]=\\\"true\\\" dataField=\\\"reporter\\\" caption=\\\"Reporter\\\" [width]=\\\"'125px'\\\"></ax-text-column>\\n <ax-text-column dataField=\\\"assignee\\\" caption=\\\"Assignee\\\" [width]=\\\"'125px'\\\"></ax-text-column>\\n <ax-text-column dataField=\\\"statusTitle\\\" caption=\\\"status\\\" [width]=\\\"'125px'\\\"></ax-text-column>\\n <ax-text-column dataField=\\\"type\\\" caption=\\\"type\\\" [width]=\\\"'150px'\\\"></ax-text-column>\\n\\n @if (columns().length) {\\n <ng-container>\\n @for (column of columns(); track column) {\\n <axp-widget-column-renderer\\n [node]=\\\"column.widget\\\"\\n [caption]=\\\"(column.title | translate | async)!\\\"\\n ></axp-widget-column-renderer>\\n }\\n </ng-container>\\n }\\n\\n <ax-command-column\\n fixed=\\\"end\\\"\\n [width]=\\\"'60px'\\\"\\n (onItemClick)=\\\"onActionClickHandler($event)\\\"\\n [items]=\\\"[{ name: 'view', text: 'View', icon: 'ax-icon ax-icon-more-horizontal' }]\\\"\\n ></ax-command-column>\\n</ax-data-table>\\n\", styles: [\"ax-kanban{--ax-comp-kanban-status-min-width: 25rem;height:100%;line-height:1.5}\\n\"] }]\n }], ctorParameters: () => [], propDecorators: { dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dataSource\", required: true }] }], onTaskClick: [{ type: i0.Output, args: [\"onTaskClick\"] }], onActionClick: [{ type: i0.Output, args: [\"onActionClick\"] }], grid: [{ type: i0.ViewChild, args: ['grid', { isSignal: true }] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1ib2FyZC1ncmlkLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3Rhc2stbWFuYWdlbWVudC9zcmMvbGliL2ZlYXR1cmVzL3Rhc2stYm9hcmQvdmlld3MvdGFzay1ib2FyZC1ncmlkLXZpZXcvdGFzay1ib2FyZC1ncmlkLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3Rhc2stbWFuYWdlbWVudC9zcmMvbGliL2ZlYXR1cmVzL3Rhc2stYm9hcmQvdmlld3MvdGFzay1ib2FyZC1ncmlkLXZpZXcvdGFzay1ib2FyZC1ncmlkLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFzQixZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RSxPQUFPLEVBQXdCLGlCQUFpQixFQUF1QixNQUFNLCtCQUErQixDQUFDO0FBQzdHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUNMLGVBQWUsRUFDZix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxtQkFBbUIs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RUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTztRQUNsQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDaEUsQ0FBQzsrR0E3R1UsNkJBQTZCO21HQUE3Qiw2QkFBNkIsNlpDakMxQyxzcERBbUNBLDBJREpZLGlCQUFpQiwraENBQStCLG1CQUFtQiwrUkFBaEQsZ0JBQWdCLDZDQUFFLFNBQVM7OzRGQUU3Qyw2QkFBNkI7a0JBUnpDLFNBQVM7K0JBQ0UsMEJBQTBCLG1CQUduQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFdBQzVCLENBQUMsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixDQUFDO3lUQWU3QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhCdXR0b25DbGlja0V2ZW50LCBBWERhdGFTb3VyY2UgfSBmcm9tICdAYWNvcmV4L2Nkay9jb21tb24nO1xuaW1wb3J0IHsgQVhEYXRhVGFibGVDb21wb25lbnQsIEFYRGF0YVRhYmxlTW9kdWxlLCBBWERhdGFUYWJsZVJvd0NsaWNrIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RhdGEtdGFibGUnO1xuaW1wb3J0IHsgQVhDYWxlbmRhclNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvZGF0ZS10aW1lJztcbmltcG9ydCB7IEFYTG9jYWxlU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZS9sb2NhbGUnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdG9yUGlwZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBWFBXaWRnZXRDb3JlTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvd2lkZ2V0LWNvcmUnO1xuaW1wb3J0IHsgQXN5bmNQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIGFmdGVyTmV4dFJlbmRlcixcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG4gIHVudHJhY2tlZCxcbiAgdmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFBUYXNrQm9hcmRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdGFzay1ib2FyZC5zZXJ2aWNlJztcbmltcG9ydCB7IEFYUEV4dHJhRmllbGQsIEFYUFRhc2ssIEFYUFRhc2tBY3Rpb24sIEFYUFRhc2tGaWx0ZXIgfSBmcm9tICcuLi8uLi90YXNrLWJvYXJkLnR5cGVzJztcbmltcG9ydCB7IEFYTVRhc2tCb2FyZFZpZXdNb2RlbCB9IGZyb20gJy4uLy4uL3Rhc2stYm9hcmQudmlld21vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXhtLXRhc2stYm9hcmQtZ3JpZC12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Rhc2stYm9hcmQtZ3JpZC12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFzay1ib2FyZC1ncmlkLXZpZXcuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGltcG9ydHM6IFtBWERhdGFUYWJsZU1vZHVsZSwgQVhUcmFuc2xhdG9yUGlwZSwgQXN5bmNQaXBlLCBBWFBXaWRnZXRDb3JlTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhNVGFza0JvYXJkR3JpZFZpZXdDb21wb25lbnQge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdm0gPSBpbmplY3QoQVhNVGFza0JvYXJkVmlld01vZGVsKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGxvY2FsZVNlcnZpY2UgPSBpbmplY3QoQVhMb2NhbGVTZXJ2aWNlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNhbGVuZGFyU2VydmljZSA9IGluamVjdChBWENhbGVuZGFyU2VydmljZSk7XG4gIHByb3RlY3RlZCByZWFkb25seSB0YXNrQm9hcmRTZXJ2aWNlID0gaW5qZWN0KEFYUFRhc2tCb2FyZFNlcnZpY2UpO1xuXG4gIGRhdGFTb3VyY2UgPSBpbnB1dC5yZXF1aXJlZDwoZmlsdGVyPzogQVhQVGFza0ZpbHRlcikgPT4gUHJvbWlzZTx7IGl0ZW1zOiBBWFBUYXNrW107IHRvdGFsOiBudW1iZXIgfT4+KCk7XG5cbiAgb25UYXNrQ2xpY2sgPSBvdXRwdXQ8QVhQVGFzaz4oKTtcbiAgb25BY3Rpb25DbGljayA9IG91dHB1dDxBWFBUYXNrQWN0aW9uPigpO1xuXG4gIHByaXZhdGUgZmV0Y2hlZFRhc2tzID0gc2lnbmFsPEFYUFRhc2tbXT4oW10pO1xuICBwcm90ZWN0ZWQgY29sdW1ucyA9IHNpZ25hbDxBWFBFeHRyYUZpZWxkW10+KFtdKTtcbiAgcHJvdGVjdGVkIGdyaWQgPSB2aWV3Q2hpbGQ8QVhEYXRhVGFibGVDb21wb25lbnQ+KCdncmlkJyk7XG5cbiAgcHJvdGVjdGVkIHRhc2tzRGF0YVNvdXJjZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBwYXJlbnREYXRhU291cmNlID0gdGhpcy5kYXRhU291cmNlKCk7XG4gICAgcmV0dXJuIG5ldyBBWERhdGFTb3VyY2U8YW55Pih7XG4gICAgICBsb2FkOiBhc3luYyAoZSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwYXJlbnREYXRhU291cmNlKHsgc2tpcDogZS5za2lwLCB0YWtlOiBlLnRha2UgfSk7XG4gICAgICAgIHRoaXMuZmV0Y2hlZFRhc2tzLnNldChyZXN1bHQuaXRlbXMpO1xuICAgICAgICBjb25zdCBtYXBwZWRJdGVtcyA9IHJlc3VsdC5pdGVtcy5tYXAoKHRhc2spID0+ICh7XG4gICAgICAgICAgaWQ6IHRhc2suaWQsXG4gICAgICAgICAgZGF0YTogdGFzay5kYXRhLFxuICAgICAgICAgIHRpdGxlOiB0YXNrLnRpdGxlLFxuICAgICAgICAgIHByaW9yaXR5OiB0YXNrLnByaW9yaXR5LFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiB0YXNrLmRlc2NyaXB0aW9uLFxuICAgICAgICAgIHN0YXR1c1RpdGxlOiB0YXNrLnN0YXR1cy50aXRsZSxcbiAgICAgICAgICByZXBvcnRlcjogdGFzay5yZXBvcnRlci5mdWxsTmFtZSA/PyAnLScsXG4gICAgICAgICAgYXNzaWduZWU6IHRhc2suYXNzaWduZWU/LmZ1bGxOYW1lID8/ICd1bmFzc2lnbmVkJyxcbiAgICAgICAgICB0eXBlOiB0aGlzLnRhc2tCb2FyZFNlcnZpY2UuZ2V0UHJvdmlkZXIodGFzay5wcm92aWRlcik/LnRpdGxlLFxuICAgICAgICAgIGVuZERhdGU6IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmZvcm1hdCh0YXNrLmVuZERhdGUsICdERC9NTS9ZWVlZIEhIOm1tJywge1xuICAgICAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZVNlcnZpY2UuYWN0aXZlUHJvZmlsZSgpLmNhbGVuZGFyLnN5c3RlbSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBzdGFydERhdGU6IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmZvcm1hdCh0YXNrLnN0YXJ0RGF0ZSwgJ0REL01NL1lZWVkgSEg6bW0nLCB7XG4gICAgICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlU2VydmljZS5hY3RpdmVQcm9maWxlKCkuY2FsZW5kYXIuc3lzdGVtLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIC8vIFN0b3JlIHRoZSBvcmlnaW5hbCB0YXNrIGZvciByb3cgY2xpY2sgaGFuZGxlclxuICAgICAgICAgIF9vcmlnaW5hbFRhc2s6IHRhc2ssXG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuIHsgaXRlbXM6IG1hcHBlZEl0ZW1zLCB0b3RhbDogcmVzdWx0LnRvdGFsIH07XG4gICAgICB9LFxuICAgICAgcGFnZVNpemU6IDEwLFxuICAgICAga2V5OiAnaWQnLFxuICAgICAgYnlLZXk6IGFzeW5jIChrZXk6IHVua25vd24pID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hlZFRhc2tzKCkuZmluZCgodGFzaykgPT4gdGFzay5pZCA9PT0ga2V5KTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0pO1xuXG4gICNkYXRhU291cmNlQ2hhbmdlZCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgLy8gVHJhY2sgZmlsdGVyLXJlbGF0ZWQgc2lnbmFscyB0aGF0IGFmZmVjdCB0aGUgZGF0YSBzb3VyY2VcbiAgICAvLyBXaGVuIHRoZXNlIGNoYW5nZSwgdGhlIHBhcmVudCdzIGZpbHRlcigpIGNvbXB1dGVkIHNpZ25hbCBjaGFuZ2VzLFxuICAgIC8vIHdoaWNoIG1lYW5zIHRoZSBkYXRhIHNvdXJjZSBmdW5jdGlvbiB3aWxsIHJldHVybiBkaWZmZXJlbnQgcmVzdWx0c1xuICAgIHRoaXMudm0uc2VsZWN0ZWRUYXNrVHlwZU5hbWVzKCk7XG4gICAgdGhpcy52bS5zZWxlY3RlZEFzc2lnbmVlSWRzKCk7XG4gICAgdGhpcy52bS5zZWxlY3RlZFJlcG9ydGVySWRzKCk7XG4gICAgdGhpcy52bS5zZWxlY3RlZFByaW9yaXRpZXMoKTtcbiAgICB0aGlzLnZtLmN1cnJlbnREYXRlKCk7XG4gICAgdGhpcy52bS5kYXlzQ291bnQoKTtcbiAgICB0aGlzLnZtLmN1cnJlbnRWaWV3TW9kZSgpO1xuICAgIFxuICAgIC8vIFVzZSB1bnRyYWNrZWQgdG8gcmVmcmVzaCB0aGUgZ3JpZCB3aXRob3V0IHRyYWNraW5nIGl0XG4gICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgIC8vIFNjaGVkdWxlIHJlZnJlc2ggaW4gbmV4dCB0aWNrIHRvIGF2b2lkIGlzc3VlcyBkdXJpbmcgZWZmZWN0IGV4ZWN1dGlvblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuZ3JpZCgpPy5yZWZyZXNoKCk7XG4gICAgICB9LCAwKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gRW5zdXJlIGRhdGEgc291cmNlIGlzIHJlZnJlc2hlZCBhZnRlciBpbml0aWFsIHJlbmRlclxuICAgIGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICB0aGlzLmdyaWQoKT8ucmVmcmVzaCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAjcHJvdmlkZXJDaGFuZ2VkID0gZWZmZWN0KGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0YXNrVHlwZSA9IHRoaXMudm0uc2VsZWN0ZWRUYXNrVHlwZXMoKVswXTtcbiAgICBpZiAoIXRhc2tUeXBlKSB7XG4gICAgICB0aGlzLmNvbHVtbnMuc2V0KFtdKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0YXNrVHlwZS5nZXRFeHRyYUZpZWxkcygpLnRoZW4oKGV4dHJhRmllbGRzKSA9PiB7XG4gICAgICBpZiAoZXh0cmFGaWVsZHMpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zLnNldChleHRyYUZpZWxkcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCBoYW5kbGVSb3dDbGljayhldmVudDogQVhEYXRhVGFibGVSb3dDbGljaykge1xuICAgIGlmIChldmVudC5kYXRhKSB7XG4gICAgICAvLyBHZXQgdGhlIG9yaWdpbmFsIHRhc2sgZnJvbSB0aGUgbWFwcGVkIGl0ZW0gb3IgZmluZCBpdCBieSBJRFxuICAgICAgY29uc3QgbWFwcGVkSXRlbSA9IGV2ZW50LmRhdGEgYXMgYW55O1xuICAgICAgY29uc3Qgb3JpZ2luYWxUYXNrID0gbWFwcGVkSXRlbS5fb3JpZ2luYWxUYXNrIHx8IHRoaXMuZmV0Y2hlZFRhc2tzKCkuZmluZCgodGFzaykgPT4gdGFzay5pZCA9PT0gbWFwcGVkSXRlbS5pZCk7XG4gICAgICBpZiAob3JpZ2luYWxUYXNrKSB7XG4gICAgICAgIHRoaXMub25UYXNrQ2xpY2suZW1pdChvcmlnaW5hbFRhc2spO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvbkFjdGlvbkNsaWNrSGFuZGxlcihlOiBBWEJ1dHRvbkNsaWNrRXZlbnQpIHtcbiAgICBjb25zdCB0YXNrID0gdGhpcy5mZXRjaGVkVGFza3MoKS5maW5kKCh0YXNrKSA9PiB0YXNrLmlkID09PSBlLmRhdGEuaWQpO1xuICAgIGlmICghdGFzaykgcmV0dXJuO1xuICAgIHRoaXMub25BY3Rpb25DbGljay5lbWl0KHsgbmF0aXZlRXZlbnQ6IGUubmF0aXZlRXZlbnQsIHRhc2sgfSk7XG4gIH1cbn1cbiIsIjxheC1kYXRhLXRhYmxlXG4gICNncmlkXG4gIFtmZXRjaERhdGFNb2RlXT1cIidtYW51YWwnXCJcbiAgW2RhdGFTb3VyY2VdPVwidGFza3NEYXRhU291cmNlKClcIlxuICAob25Sb3dDbGljayk9XCJoYW5kbGVSb3dDbGljaygkZXZlbnQpXCJcbiAgW2xvYWRpbmddPVwieyBlbmFibGVkOiB0cnVlLCBhbmltYXRpb246IHRydWUgfVwiXG4+XG4gIDxheC10ZXh0LWNvbHVtbiBkYXRhRmllbGQ9XCJ0aXRsZVwiIGNhcHRpb249XCJ0aXRsZVwiIFt3aWR0aF09XCInMzUwcHgnXCI+PC9heC10ZXh0LWNvbHVtbj5cbiAgPGF4LXRleHQtY29sdW1uIGRhdGFGaWVsZD1cImRlc2NyaXB0aW9uXCIgY2FwdGlvbj1cImRlc2NyaXB0aW9uXCIgW3dpZHRoXT1cIic1MDBweCdcIj48L2F4LXRleHQtY29sdW1uPlxuICA8YXgtdGV4dC1jb2x1bW4gZGF0YUZpZWxkPVwic3RhcnREYXRlXCIgY2FwdGlvbj1cIlN0YXJ0IERhdGVcIiBbd2lkdGhdPVwiJzE1MHB4J1wiPjwvYXgtdGV4dC1jb2x1bW4+XG4gIDxheC10ZXh0LWNvbHVtbiBkYXRhRmllbGQ9XCJlbmREYXRlXCIgY2FwdGlvbj1cIkR1ZSBEYXRlXCIgW3dpZHRoXT1cIicxNTBweCdcIj48L2F4LXRleHQtY29sdW1uPlxuICA8YXgtdGV4dC1jb2x1bW4gZGF0YUZpZWxkPVwicHJpb3JpdHlcIiBjYXB0aW9uPVwicHJpb3JpdHlcIiBbd2lkdGhdPVwiJzEyNXB4J1wiPjwvYXgtdGV4dC1jb2x1bW4+XG4gIDxheC10ZXh0LWNvbHVtbiBbYWxsb3dSZXNpemluZ109XCJ0cnVlXCIgZGF0YUZpZWxkPVwicmVwb3J0ZXJcIiBjYXB0aW9uPVwiUmVwb3J0ZXJcIiBbd2lkdGhdPVwiJzEyNXB4J1wiPjwvYXgtdGV4dC1jb2x1bW4+XG4gIDxheC10ZXh0LWNvbHVtbiBkYXRhRmllbGQ9XCJhc3NpZ25lZVwiIGNhcHRpb249XCJBc3NpZ25lZVwiIFt3aWR0aF09XCInMTI1cHgnXCI+PC9heC10ZXh0LWNvbHVtbj5cbiAgPGF4LXRleHQtY29sdW1uIGRhdGFGaWVsZD1cInN0YXR1c1RpdGxlXCIgY2FwdGlvbj1cInN0YXR1c1wiIFt3aWR0aF09XCInMTI1cHgnXCI+PC9heC10ZXh0LWNvbHVtbj5cbiAgPGF4LXRleHQtY29sdW1uIGRhdGFGaWVsZD1cInR5cGVcIiBjYXB0aW9uPVwidHlwZVwiIFt3aWR0aF09XCInMTUwcHgnXCI+PC9heC10ZXh0LWNvbHVtbj5cblxuICBAaWYgKGNvbHVtbnMoKS5sZW5ndGgpIHtcbiAgICA8bmctY29udGFpbmVyPlxuICAgICAgQGZvciAoY29sdW1uIG9mIGNvbHVtbnMoKTsgdHJhY2sgY29sdW1uKSB7XG4gICAgICAgIDxheHAtd2lkZ2V0LWNvbHVtbi1yZW5kZXJlclxuICAgICAgICAgIFtub2RlXT1cImNvbHVtbi53aWRnZXRcIlxuICAgICAgICAgIFtjYXB0aW9uXT1cIihjb2x1bW4udGl0bGUgfCB0cmFuc2xhdGUgfCBhc3luYykhXCJcbiAgICAgICAgPjwvYXhwLXdpZGdldC1jb2x1bW4tcmVuZGVyZXI+XG4gICAgICB9XG4gICAgPC9uZy1jb250YWluZXI+XG4gIH1cblxuICA8YXgtY29tbWFuZC1jb2x1bW5cbiAgICBmaXhlZD1cImVuZFwiXG4gICAgW3dpZHRoXT1cIic2MHB4J1wiXG4gICAgKG9uSXRlbUNsaWNrKT1cIm9uQWN0aW9uQ2xpY2tIYW5kbGVyKCRldmVudClcIlxuICAgIFtpdGVtc109XCJbeyBuYW1lOiAndmlldycsIHRleHQ6ICdWaWV3JywgaWNvbjogJ2F4LWljb24gYXgtaWNvbi1tb3JlLWhvcml6b250YWwnIH1dXCJcbiAgPjwvYXgtY29tbWFuZC1jb2x1bW4+XG48L2F4LWRhdGEtdGFibGU+XG4iXX0=","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXKanbanComponent, } from '@acorex/components/kanban';\nimport { AXPopoverModule } from '@acorex/components/popover';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPSettingsService } from '@acorex/platform/common';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, model, output, signal, viewChild, ViewEncapsulation, } from '@angular/core';\nimport { isEqual } from 'lodash-es';\nimport { AXPTaskBoardService } from '../../task-board.service';\nimport { AXMTaskBoardViewModel } from '../../task-board.viewmodel';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@acorex/components/popover\";\nimport * as i3 from \"@acorex/components/button\";\nimport * as i4 from \"@acorex/components/dropdown\";\nimport * as i5 from \"@acorex/components/decorators\";\nexport class AXMTaskBoardKanbanViewComponent {\n constructor() {\n this.vm = inject(AXMTaskBoardViewModel);\n this.taskBoardService = inject(AXPTaskBoardService);\n this.calendarService = inject(AXCalendarService);\n this.settingService = inject(AXPSettingsService);\n this.commandService = inject(AXPCommandService);\n this.kanbanComponent = viewChild(AXKanbanComponent, ...(ngDevMode ? [{ debugName: \"kanbanComponent\" }] : []));\n this.taskPopover = viewChild.required('taskPopover');\n this.selectedTask = signal(null, ...(ngDevMode ? [{ debugName: \"selectedTask\" }] : []));\n this.popoverTarget = signal(null, ...(ngDevMode ? [{ debugName: \"popoverTarget\" }] : []));\n this.taskActions = signal([], ...(ngDevMode ? [{ debugName: \"taskActions\" }] : []));\n this.customComponentType = signal(null, ...(ngDevMode ? [{ debugName: \"customComponentType\" }] : []));\n // Separate primary and secondary actions\n this.primaryActions = computed(() => {\n return this.taskActions().filter((action) => (action.priority ?? 'secondary') === 'primary');\n }, ...(ngDevMode ? [{ debugName: \"primaryActions\" }] : []));\n this.secondaryActions = computed(() => {\n return this.taskActions().filter((action) => (action.priority ?? 'secondary') === 'secondary');\n }, ...(ngDevMode ? [{ debugName: \"secondaryActions\" }] : []));\n this.customComponentInputs = computed(() => {\n const task = this.selectedTask();\n if (!task)\n return null;\n return { task };\n }, ...(ngDevMode ? [{ debugName: \"customComponentInputs\" }] : []));\n this.tasks = model.required(...(ngDevMode ? [{ debugName: \"tasks\" }] : []));\n this.onTaskClick = output();\n this.onTaskChanged = output();\n this.component = output();\n this.onActionClick = output();\n this.statuses = signal([], ...(ngDevMode ? [{ debugName: \"statuses\" }] : []));\n this.stableTasks = computed(() => this.tasks(), ...(ngDevMode ? [{ debugName: \"stableTasks\", equal: isEqual }] : [{ equal: isEqual }]));\n this.kanbanTasks = computed(() => {\n return this.stableTasks().map((task) => ({\n id: task.id,\n title: task.title,\n index: task.index,\n cssClass: task.cssClass,\n priority: task.priority,\n statusKey: task.status.id,\n description: task.description,\n }));\n }, ...(ngDevMode ? [{ debugName: \"kanbanTasks\" }] : []));\n this.#providerChanged = effect(async () => {\n const taskType = this.vm.selectedTaskTypes()[0];\n if (!taskType) {\n this.statuses.set([]);\n return;\n }\n taskType.getStatuses().then((statuses) => {\n if (statuses) {\n this.statuses.set(statuses);\n }\n });\n }, ...(ngDevMode ? [{ debugName: \"#providerChanged\" }] : []));\n }\n ngAfterViewInit() {\n if (this.kanbanComponent()) {\n this.component.emit(this.kanbanComponent());\n }\n }\n #providerChanged;\n //#region ---- Drag & Drop Handling ----\n /**\n * Handles the onBeforeDrop event from the kanban component.\n * Uses event.wait() to register async operations that the kanban will await.\n * If action is cancelled/failed, we set event.canceled = true to prevent the drop.\n */\n onBeforeDrop(event) {\n // If no status change, allow the drop (just reordering)\n if (event.previousStatusKey === event.currentStatusKey) {\n return;\n }\n // Find the task being moved\n const task = this.stableTasks().find((t) => t.id === event.item?.id);\n if (!task || !task.provider) {\n // Allow drop if task not found or no provider\n return;\n }\n // Get the provider\n const provider = this.taskBoardService.getProvider(task.provider);\n if (!provider) {\n return;\n }\n // Register the async operation using event.wait()\n // The kanban component will await this promise before proceeding\n event.wait(this.executeDropAction(event, task, provider));\n }\n /**\n * Executes the action for a drop operation.\n * Sets event.canceled = true if action fails or is cancelled.\n * IMPORTANT: Do NOT update the task status in dataSource here - let the kanban handle the move.\n * The kanban will update the status in onSortChanged, and we'll sync with backend there.\n */\n async executeDropAction(event, task, provider) {\n if (!provider) {\n return;\n }\n try {\n // Get available actions for the task\n const actions = await provider.getActions(task);\n if (!actions || actions.length === 0) {\n // No actions available, allow the drop\n return;\n }\n // Find action that matches the new status\n const matchingAction = this.findActionForStatus(actions, event.currentStatusKey);\n if (!matchingAction || !matchingAction.command) {\n // No matching action found, allow the drop\n return;\n }\n // Execute the action and check result\n const result = await this.taskBoardService.executeCommand(matchingAction.command, task.provider);\n // Check if action was successful (not cancelled or failed)\n if (result?.success === false || result === null) {\n // Action was cancelled or failed - prevent the drop\n event.canceled = true;\n return;\n }\n // Action succeeded - allow the drop to proceed\n // The kanban will handle the visual move, and onSortChanged will sync with backend\n }\n catch (error) {\n console.error('[KanbanDrop] Failed to execute action during drop:', error);\n // On error, prevent the drop to be safe\n event.canceled = true;\n }\n }\n /**\n * Finds an action that corresponds to the target status.\n * Matches actions by name patterns (e.g., \"approve\" action for \"approved\" status).\n */\n findActionForStatus(actions, targetStatus) {\n const targetStatusStr = String(targetStatus).toLowerCase();\n // Common status-to-action mappings\n const statusActionMap = {\n approved: ['approve'],\n rejected: ['reject'],\n cancelled: ['cancel'],\n completed: ['complete', 'finish'],\n done: ['complete', 'finish'],\n inprogress: ['start', 'begin'],\n 'in-progress': ['start', 'begin'],\n blocked: ['block'],\n unblocked: ['unblock'],\n };\n // Check direct mappings first\n const possibleActionNames = statusActionMap[targetStatusStr] || [];\n for (const actionName of possibleActionNames) {\n const action = actions.find((a) => a.name?.toLowerCase().includes(actionName));\n if (action) {\n return action;\n }\n }\n // Try to find action by name containing status keywords\n const statusKeywords = targetStatusStr.split(/[-_\\s]+/);\n for (const keyword of statusKeywords) {\n if (keyword.length < 3)\n continue; // Skip very short keywords\n const action = actions.find((a) => {\n const actionName = a.name?.toLowerCase() || '';\n return actionName.includes(keyword) || keyword.includes(actionName);\n });\n if (action) {\n return action;\n }\n }\n // Try exact match with action name\n const exactMatch = actions.find((a) => a.name?.toLowerCase() === targetStatusStr);\n if (exactMatch) {\n return exactMatch;\n }\n // Try partial match (status contains action name or vice versa)\n for (const action of actions) {\n const actionName = action.name?.toLowerCase() || '';\n if (targetStatusStr.includes(actionName) || actionName.includes(targetStatusStr)) {\n return action;\n }\n }\n return null;\n }\n //#endregion\n onSortChanged(event) {\n const tasks = this.tasks().map((item) => {\n const task = event.allItems.find((t) => t.id === item.id);\n if (task) {\n const status = this.statuses().find((s) => s.key === task.statusKey);\n return { ...item, index: task.index, status: { id: status.key, title: status.title } };\n }\n return item;\n });\n this.taskBoardService\n .updateTasks(tasks)\n .then((updatedTasks) => {\n this.tasks.set(updatedTasks);\n })\n .catch((error) => {\n console.error('[KanbanSort] Failed to update tasks:', error);\n });\n }\n async handleItemClick(event) {\n const task = this.stableTasks().find((task) => task.id === event.item.id);\n if (!task)\n return;\n // Find the kanban item container element\n let targetElement = event.nativeEvent.currentTarget || event.nativeEvent.target;\n // Traverse up to find the kanban item container\n let element = targetElement;\n const maxDepth = 10;\n let depth = 0;\n while (element && element !== document.body && depth < maxDepth) {\n depth++;\n const isKanbanItem = element.classList?.contains('dx-kanban-item') ||\n element.classList?.contains('ax-kanban-item') ||\n element.hasAttribute('data-item-id');\n if (isKanbanItem) {\n targetElement = element;\n break;\n }\n element = element.parentElement;\n }\n // Set the selected task and target element\n this.selectedTask.set(task);\n this.popoverTarget.set(targetElement);\n // Check if provider has a custom component\n await this.loadCustomComponent(task);\n // Load actions for the task\n await this.loadTaskActions(task);\n // Open the popover\n setTimeout(() => {\n if (this.taskPopover() && targetElement) {\n this.taskPopover().target = targetElement;\n this.taskPopover().open();\n }\n }, 0);\n // Still emit the event for backward compatibility\n this.onTaskClick.emit(task);\n }\n handleActionClick(event) {\n const task = this.stableTasks().find((task) => task.id === event.item.id);\n if (task) {\n this.onActionClick.emit({ nativeEvent: event.nativeEvent, task: task });\n }\n }\n async loadTaskActions(task) {\n try {\n const providerName = task.provider;\n if (!providerName) {\n this.taskActions.set([]);\n return;\n }\n const provider = this.taskBoardService.getProvider(providerName);\n if (!provider) {\n this.taskActions.set([]);\n return;\n }\n const actions = await provider.getActions(task);\n // Ensure all actions have a priority (default to 'secondary' if not specified)\n const actionsWithPriority = (actions || []).map((action) => ({\n ...action,\n priority: action.priority ?? 'secondary',\n }));\n this.taskActions.set(actionsWithPriority);\n }\n catch (error) {\n console.error('Failed to load task actions:', error);\n this.taskActions.set([]);\n }\n }\n getActionColor(action) {\n return action.color;\n }\n //#region ---- Action Execution ----\n /**\n * Executes an action when user clicks on an action button in the popover.\n * If action succeeds, moves the item to the appropriate status using kanban.moveItem().\n */\n async executeAction(action) {\n const task = this.selectedTask();\n if (!task || !action.command)\n return;\n // Store task info before closing popover\n const taskId = task.id;\n const providerName = task.provider;\n const currentStatusKey = task.status.id;\n if (!providerName)\n return;\n try {\n const result = await this.taskBoardService.executeCommand(action.command, providerName);\n // Check if action was successful\n if (result?.success === false || result === null) {\n // Action was cancelled or failed - don't close popover, don't move item\n return;\n }\n // Action succeeded - close popover first\n this.closePopover();\n // Refresh tasks to get updated status and move item if status changed\n await this.refreshAndMoveItem(taskId, providerName, currentStatusKey);\n }\n catch (error) {\n console.error('Failed to execute action:', error);\n }\n }\n /**\n * Refreshes tasks from the provider and moves the item if status changed.\n */\n async refreshAndMoveItem(taskId, providerName, previousStatusKey) {\n try {\n const provider = this.taskBoardService.getProvider(providerName);\n if (!provider) {\n return;\n }\n // Get updated tasks from provider\n const result = await provider.getTasks();\n const updatedTasks = result.items.map((t) => ({ ...t, provider: providerName }));\n // Find the updated task to get its new status\n const updatedTask = updatedTasks.find((t) => t.id === taskId);\n if (!updatedTask) {\n return;\n }\n const newStatusKey = updatedTask.status.id;\n // Check if status actually changed\n if (newStatusKey !== previousStatusKey) {\n // Move the item programmatically to the new status using kanban API\n const kanban = this.kanbanComponent();\n if (kanban) {\n await kanban.moveItem(taskId, newStatusKey);\n }\n }\n // Update the tasks signal with merged data\n const currentTasks = this.tasks();\n const updatedTasksMap = new Map(updatedTasks.map((t) => [t.id, t]));\n const mergedTasks = currentTasks.map((t) => {\n const updated = updatedTasksMap.get(t.id);\n return updated ? { ...updated } : t;\n });\n // Add any new tasks\n const existingIds = new Set(currentTasks.map((t) => t.id));\n const newTasks = updatedTasks.filter((t) => !existingIds.has(t.id)).map((t) => ({ ...t }));\n mergedTasks.push(...newTasks);\n this.tasks.set([...mergedTasks]);\n }\n catch (error) {\n console.error('Failed to refresh tasks:', error);\n }\n }\n //#endregion\n async loadCustomComponent(task) {\n if (!task.provider) {\n this.customComponentType.set(null);\n return;\n }\n const provider = this.taskBoardService.getProvider(task.provider);\n if (!provider) {\n this.customComponentType.set(null);\n return;\n }\n const componentGetter = provider.getComponent?.();\n if (!componentGetter) {\n this.customComponentType.set(null);\n return;\n }\n try {\n let componentType;\n // Check if it's a lazy loading function or direct component type\n if (typeof componentGetter === 'function') {\n const testCall = componentGetter;\n let result;\n try {\n result = testCall();\n }\n catch (e) {\n componentType = componentGetter;\n this.customComponentType.set(componentType);\n return;\n }\n if (result instanceof Promise) {\n componentType = await result;\n }\n else if (result) {\n componentType = result;\n }\n else {\n componentType = componentGetter;\n }\n }\n else {\n this.customComponentType.set(null);\n return;\n }\n this.customComponentType.set(componentType);\n }\n catch (error) {\n console.error('[TaskPopover] Failed to load custom task popover component:', error);\n this.customComponentType.set(null);\n }\n }\n closePopover() {\n this.taskPopover().close();\n this.customComponentType.set(null);\n this.selectedTask.set(null);\n this.popoverTarget.set(null);\n this.taskActions.set([]);\n }\n formatTime(date) {\n return this.calendarService.create(date).format('HH:mm');\n }\n formatDate(date) {\n return this.calendarService.create(date).format('MMM DD, YYYY');\n }\n formatDateTime(date) {\n return this.calendarService.create(date).format('MMM DD, YYYY HH:mm');\n }\n isMultiDay(task) {\n if (task.allDay) {\n const start = this.calendarService.create(task.startDate);\n const end = this.calendarService.create(task.endDate);\n return start.date.getTime() !== end.date.getTime();\n }\n const start = this.calendarService.create(task.startDate);\n const end = this.calendarService.create(task.endDate);\n const startDay = start.date.getDate();\n const endDay = end.date.getDate();\n const startMonth = start.date.getMonth();\n const endMonth = end.date.getMonth();\n const startYear = start.date.getFullYear();\n const endYear = end.date.getFullYear();\n return startDay !== endDay || startMonth !== endMonth || startYear !== endYear;\n }\n formatDateRange(task) {\n if (task.allDay) {\n const start = this.calendarService.create(task.startDate);\n const end = this.calendarService.create(task.endDate);\n if (start.date.getTime() === end.date.getTime()) {\n return this.formatDate(task.startDate);\n }\n const startFormatted = this.formatDate(task.startDate);\n const endFormatted = this.formatDate(task.endDate);\n if (start.date.getMonth() === end.date.getMonth() && start.date.getFullYear() === end.date.getFullYear()) {\n const startDay = start.date.getDate();\n const endDay = end.date.getDate();\n const monthYear = start.format('MMM YYYY');\n return `${startDay} - ${endDay}, ${monthYear}`;\n }\n return `${startFormatted} - ${endFormatted}`;\n }\n if (this.isMultiDay(task)) {\n const startFormatted = this.formatDateTime(task.startDate);\n const endFormatted = this.formatDateTime(task.endDate);\n return `${startFormatted} - ${endFormatted}`;\n }\n const dateFormatted = this.formatDate(task.startDate);\n const timeRange = `${this.formatTime(task.startDate)} - ${this.formatTime(task.endDate)}`;\n return `${dateFormatted} ${timeRange}`;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMTaskBoardKanbanViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.16\", type: AXMTaskBoardKanbanViewComponent, isStandalone: true, selector: \"axm-task-board-kanban-view\", inputs: { tasks: { classPropertyName: \"tasks\", publicName: \"tasks\", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { tasks: \"tasksChange\", onTaskClick: \"onTaskClick\", onTaskChanged: \"onTaskChanged\", component: \"component\", onActionClick: \"onActionClick\" }, viewQueries: [{ propertyName: \"kanbanComponent\", first: true, predicate: AXKanbanComponent, descendants: true, isSignal: true }, { propertyName: \"taskPopover\", first: true, predicate: [\"taskPopover\"], descendants: true, isSignal: true }], ngImport: i0, template: \"<ax-kanban\\n [statuses]=\\\"statuses()\\\"\\n [dataSource]=\\\"kanbanTasks()\\\"\\n (onItemClick)=\\\"handleItemClick($event)\\\"\\n (onBeforeDrop)=\\\"onBeforeDrop($event)\\\"\\n (onSortChanged)=\\\"onSortChanged($event)\\\"\\n></ax-kanban>\\n\\n<!-- Task Detail Popover (Modern Google Calendar Style) -->\\n<ax-popover\\n #taskPopover\\n [openOn]=\\\"'manual'\\\"\\n [closeOn]=\\\"'clickOut'\\\"\\n [offsetY]=\\\"12\\\"\\n [offsetX]=\\\"12\\\"\\n [adaptivityEnabled]=\\\"true\\\"\\n>\\n <div>\\n @if (selectedTask()) {\\n <div class=\\\"task-popover ax-shadow-md ax-border\\\">\\n <!-- Header Section -->\\n <div class=\\\"task-popover__header\\\">\\n <div class=\\\"task-popover__title-section\\\">\\n <div class=\\\"task-popover__title-row\\\">\\n <h3 class=\\\"task-popover__title\\\" [title]=\\\"selectedTask()!.title\\\">{{ selectedTask()!.title }}</h3>\\n <button type=\\\"button\\\" class=\\\"task-popover__close-btn\\\" (click)=\\\"closePopover()\\\" aria-label=\\\"Close\\\">\\n <ax-icon class=\\\"ax-icon ax-icon-close\\\"></ax-icon>\\n </button>\\n </div>\\n @if (selectedTask()!.description && !customComponentType()) {\\n <p class=\\\"task-popover__description\\\">{{ selectedTask()!.description }}</p>\\n }\\n </div>\\n </div>\\n\\n <!-- Custom Component or Default Content -->\\n @if (customComponentType()) {\\n <!-- Custom Component from Provider -->\\n <div class=\\\"task-popover__custom-content\\\">\\n <ng-container *ngComponentOutlet=\\\"customComponentType()!; inputs: customComponentInputs()!\\\"></ng-container>\\n </div>\\n } @else {\\n <!-- Default Content Section -->\\n <div class=\\\"task-popover__content\\\">\\n <!-- Time -->\\n <div class=\\\"task-popover__info-item\\\">\\n <div class=\\\"task-popover__icon\\\">\\n <i class=\\\"fa-light fa-clock\\\"></i>\\n </div>\\n <div class=\\\"task-popover__info-content\\\">\\n <span class=\\\"task-popover__info-text\\\">{{ formatDateRange(selectedTask()!) }}</span>\\n </div>\\n </div>\\n\\n <!-- Status -->\\n @if (selectedTask()!.status) {\\n <div class=\\\"task-popover__info-item\\\">\\n <div class=\\\"task-popover__icon\\\">\\n <i class=\\\"fa-light fa-flag\\\"></i>\\n </div>\\n <div class=\\\"task-popover__info-content\\\">\\n <span class=\\\"task-popover__info-text\\\">{{ selectedTask()!.status.title }}</span>\\n </div>\\n </div>\\n }\\n\\n <!-- Assignee -->\\n @if (selectedTask()!.assignee) {\\n <div class=\\\"task-popover__info-item\\\">\\n <div class=\\\"task-popover__icon\\\">\\n <i class=\\\"fa-light fa-user\\\"></i>\\n </div>\\n <div class=\\\"task-popover__info-content\\\">\\n <span class=\\\"task-popover__info-text\\\">{{\\n selectedTask()!.assignee?.fullName || selectedTask()!.assignee?.username || 'Unassigned'\\n }}</span>\\n </div>\\n </div>\\n }\\n\\n <!-- Priority -->\\n @if (selectedTask()!.priority) {\\n <div class=\\\"task-popover__info-item\\\">\\n <div\\n class=\\\"task-popover__icon task-popover__icon--priority\\\"\\n [attr.data-priority]=\\\"selectedTask()!.priority\\\"\\n >\\n <i class=\\\"fa-light fa-exclamation-circle\\\"></i>\\n </div>\\n <div class=\\\"task-popover__info-content\\\">\\n <span\\n class=\\\"task-popover__info-text task-popover__priority\\\"\\n [attr.data-priority]=\\\"selectedTask()!.priority\\\"\\n >\\n {{ selectedTask()!.priority }}\\n </span>\\n </div>\\n </div>\\n }\\n </div>\\n\\n <!-- Actions Section -->\\n <div class=\\\"task-popover__actions\\\">\\n <!-- Task Actions from Provider -->\\n @if (taskActions().length > 0) {\\n <div class=\\\"task-popover__actions-group\\\">\\n <!-- Primary Actions: Icon-only buttons -->\\n @if (primaryActions().length > 0) {\\n @for (action of primaryActions(); track action.name || action.title) {\\n <ax-button\\n [look]=\\\"'solid'\\\"\\n [color]=\\\"getActionColor(action)\\\"\\n (onClick)=\\\"executeAction(action)\\\"\\n [disabled]=\\\"action.disabled === true\\\"\\n [text]=\\\"action.title\\\"\\n >\\n @if (action.icon) {\\n <ax-prefix>\\n <ax-icon>\\n <i [class]=\\\"action.icon\\\"></i>\\n </ax-icon>\\n </ax-prefix>\\n }\\n </ax-button>\\n }\\n }\\n\\n <!-- Secondary Actions: Dropdown with \\\"...\\\" button -->\\n @if (secondaryActions().length > 0) {\\n <ax-button [look]=\\\"'blank'\\\">\\n <ax-prefix>\\n <ax-icon icon=\\\"fa-light fa-ellipsis-vertical\\\"></ax-icon>\\n </ax-prefix>\\n <ax-dropdown-panel>\\n <ax-button-item-list>\\n @for (action of secondaryActions(); track action.name || action.title) {\\n <ax-button-item\\n [text]=\\\"action.title\\\"\\n [disabled]=\\\"action.disabled === true\\\"\\n (onClick)=\\\"executeAction(action)\\\"\\n >\\n @if (action.icon) {\\n <ax-prefix>\\n <ax-icon>\\n <i [class]=\\\"action.icon\\\"></i>\\n </ax-icon>\\n </ax-prefix>\\n }\\n </ax-button-item>\\n }\\n </ax-button-item-list>\\n </ax-dropdown-panel>\\n </ax-button>\\n }\\n </div>\\n }\\n </div>\\n }\\n </div>\\n }\\n </div>\\n</ax-popover>\\n\", styles: [\"ax-kanban{--ax-comp-kanban-status-min-height: 100%;--ax-comp-kanban-status-min-width: 25rem;height:100%;line-height:1.5;background-color:rgba(var(--ax-sys-color-lightest-surface))!important}.task-popover{background:rgba(var(--ax-sys-color-lightest-surface));border-radius:12px;overflow:hidden;display:flex;flex-direction:column}.task-popover__header{padding:20px 20px 16px;border-bottom:1px solid var(--ax-sys-color-border);background:linear-gradient(to bottom,var(--ax-sys-color-lightest-surface),var(--ax-sys-color-lighter-surface))}.task-popover__title-section{display:flex;flex-direction:column;gap:8px}.task-popover__title-row{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.task-popover__title{font-size:18px;font-weight:600;line-height:1.4;color:var(--ax-sys-color-text-primary);margin:0;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.task-popover__close-btn{flex-shrink:0;background:none;border:none;padding:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--ax-sys-color-text-neutral-600);transition:color .2s ease;border-radius:4px}.task-popover__close-btn:hover{color:var(--ax-sys-color-text-primary);background:var(--ax-sys-color-lighter-surface)}.task-popover__close-btn:active{background:var(--ax-sys-color-light-surface)}.task-popover__close-btn ax-icon{display:block;width:16px;height:16px}.task-popover__description{font-size:14px;line-height:1.5;color:var(--ax-sys-color-text-secondary);margin:0;display:-webkit-box;-webkit-line-clamp:3;line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.task-popover__content{padding:16px 20px;display:flex;flex-direction:column;gap:12px;flex:1}.task-popover__info-item{display:flex;align-items:flex-start;gap:12px;min-height:24px}.task-popover__icon{width:20px;height:20px;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:2px;color:var(--ax-sys-color-text-neutral-600);font-size:14px}.task-popover__icon i{display:block}.task-popover__icon--priority[data-priority=highest]{color:var(--ax-sys-color-danger)}.task-popover__icon--priority[data-priority=high]{color:var(--ax-sys-color-warning)}.task-popover__icon--priority[data-priority=medium]{color:var(--ax-sys-color-info)}.task-popover__icon--priority[data-priority=low],.task-popover__icon--priority[data-priority=lowest]{color:var(--ax-sys-color-text-neutral-500)}.task-popover__info-content{flex:1;min-width:0;display:flex;align-items:center}.task-popover__info-text{font-size:14px;line-height:1.5;color:var(--ax-sys-color-text-primary);word-wrap:break-word}.task-popover__time{font-weight:500;color:var(--ax-sys-color-text-primary);margin-left:4px}.task-popover__priority{text-transform:capitalize;font-weight:500}.task-popover__priority[data-priority=highest]{color:var(--ax-sys-color-danger)}.task-popover__priority[data-priority=high]{color:var(--ax-sys-color-warning)}.task-popover__priority[data-priority=medium]{color:var(--ax-sys-color-info)}.task-popover__priority[data-priority=low],.task-popover__priority[data-priority=lowest]{color:var(--ax-sys-color-text-neutral-600)}.task-popover__actions{padding:12px 20px 16px;border-top:1px solid var(--ax-sys-color-border);display:flex;flex-direction:column;gap:8px;background:var(--ax-sys-color-lighter-surface)}.task-popover__actions-group{display:flex;justify-content:flex-end;gap:8px;flex-wrap:wrap}.task-popover__actions-group--default{margin-top:4px;padding-top:8px;border-top:1px solid var(--ax-sys-color-border)}.task-popover__action-divider{width:100%;height:1px;background:var(--ax-sys-color-border);margin:4px 0}.task-popover__action-btn{min-width:100px;white-space:nowrap}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgComponentOutlet, selector: \"[ngComponentOutlet]\", inputs: [\"ngComponentOutlet\", \"ngComponentOutletInputs\", \"ngComponentOutletInjector\", \"ngComponentOutletEnvironmentInjector\", \"ngComponentOutletContent\", \"ngComponentOutletNgModule\", \"ngComponentOutletNgModuleFactory\"], exportAs: [\"ngComponentOutlet\"] }, { kind: \"component\", type: AXKanbanComponent, selector: \"ax-kanban\", inputs: [\"hasActions\", \"dragStartDelay\", \"statuses\", \"itemTemplate\", \"dataSource\", \"keyField\", \"indexField\", \"titleField\", \"cssClassField\", \"priorityField\", \"statusKeyField\", \"descriptionField\", \"emptyTemplate\", \"headerTemplate\", \"footerTemplate\", \"contentFooterTemplate\", \"tooltipTemplate\"], outputs: [\"onBeforeDrop\", \"onSortChanged\", \"onItemClick\", \"onActionClick\", \"onItemDblClick\", \"onItemRightClick\"] }, { kind: \"ngmodule\", type: AXPopoverModule }, { kind: \"component\", type: i2.AXPopoverComponent, selector: \"ax-popover\", inputs: [\"width\", \"disabled\", \"offsetX\", \"offsetY\", \"target\", \"placement\", \"content\", \"openOn\", \"closeOn\", \"hasBackdrop\", \"openAfter\", \"closeAfter\", \"backdropClass\", \"panelClass\", \"adaptivityEnabled\"], outputs: [\"onOpened\", \"onClosed\"] }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i3.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"component\", type: i3.AXButtonItemComponent, selector: \"ax-button-item\", inputs: [\"color\", \"disabled\", \"text\", \"selected\", \"divided\", \"data\", \"name\"], outputs: [\"onClick\", \"onFocus\", \"onBlur\", \"disabledChange\"] }, { kind: \"component\", type: i3.AXButtonItemListComponent, selector: \"ax-button-item-list\", inputs: [\"items\", \"closeParentOnClick\", \"lockOnLoading\"], outputs: [\"onItemClick\"] }, { kind: \"ngmodule\", type: AXDropdownModule }, { kind: \"component\", type: i4.AXDropdownPanelComponent, selector: \"ax-dropdown-panel\", inputs: [\"isOpen\", \"fitParent\", \"dropdownWidth\", \"position\", \"placement\", \"_target\", \"adaptivityEnabled\"], outputs: [\"onOpened\", \"onClosed\"] }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i5.AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"component\", type: i5.AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"ngmodule\", type: AXTranslationModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMTaskBoardKanbanViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axm-task-board-kanban-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n CommonModule,\n AXKanbanComponent,\n AXPopoverModule,\n AXButtonModule,\n AXDropdownModule,\n AXDecoratorModule,\n AXTranslationModule,\n ], template: \"<ax-kanban\\n [statuses]=\\\"statuses()\\\"\\n [dataSource]=\\\"kanbanTasks()\\\"\\n (onItemClick)=\\\"handleItemClick($event)\\\"\\n (onBeforeDrop)=\\\"onBeforeDrop($event)\\\"\\n (onSortChanged)=\\\"onSortChanged($event)\\\"\\n></ax-kanban>\\n\\n<!-- Task Detail Popover (Modern Google Calendar Style) -->\\n<ax-popover\\n #taskPopover\\n [openOn]=\\\"'manual'\\\"\\n [closeOn]=\\\"'clickOut'\\\"\\n [offsetY]=\\\"12\\\"\\n [offsetX]=\\\"12\\\"\\n [adaptivityEnabled]=\\\"true\\\"\\n>\\n <div>\\n @if (selectedTask()) {\\n <div class=\\\"task-popover ax-shadow-md ax-border\\\">\\n <!-- Header Section -->\\n <div class=\\\"task-popover__header\\\">\\n <div class=\\\"task-popover__title-section\\\">\\n <div class=\\\"task-popover__title-row\\\">\\n <h3 class=\\\"task-popover__title\\\" [title]=\\\"selectedTask()!.title\\\">{{ selectedTask()!.title }}</h3>\\n <button type=\\\"button\\\" class=\\\"task-popover__close-btn\\\" (click)=\\\"closePopover()\\\" aria-label=\\\"Close\\\">\\n <ax-icon class=\\\"ax-icon ax-icon-close\\\"></ax-icon>\\n </button>\\n </div>\\n @if (selectedTask()!.description && !customComponentType()) {\\n <p class=\\\"task-popover__description\\\">{{ selectedTask()!.description }}</p>\\n }\\n </div>\\n </div>\\n\\n <!-- Custom Component or Default Content -->\\n @if (customComponentType()) {\\n <!-- Custom Component from Provider -->\\n <div class=\\\"task-popover__custom-content\\\">\\n <ng-container *ngComponentOutlet=\\\"customComponentType()!; inputs: customComponentInputs()!\\\"></ng-container>\\n </div>\\n } @else {\\n <!-- Default Content Section -->\\n <div class=\\\"task-popover__content\\\">\\n <!-- Time -->\\n <div class=\\\"task-popover__info-item\\\">\\n <div class=\\\"task-popover__icon\\\">\\n <i class=\\\"fa-light fa-clock\\\"></i>\\n </div>\\n <div class=\\\"task-popover__info-content\\\">\\n <span class=\\\"task-popover__info-text\\\">{{ formatDateRange(selectedTask()!) }}</span>\\n </div>\\n </div>\\n\\n <!-- Status -->\\n @if (selectedTask()!.status) {\\n <div class=\\\"task-popover__info-item\\\">\\n <div class=\\\"task-popover__icon\\\">\\n <i class=\\\"fa-light fa-flag\\\"></i>\\n </div>\\n <div class=\\\"task-popover__info-content\\\">\\n <span class=\\\"task-popover__info-text\\\">{{ selectedTask()!.status.title }}</span>\\n </div>\\n </div>\\n }\\n\\n <!-- Assignee -->\\n @if (selectedTask()!.assignee) {\\n <div class=\\\"task-popover__info-item\\\">\\n <div class=\\\"task-popover__icon\\\">\\n <i class=\\\"fa-light fa-user\\\"></i>\\n </div>\\n <div class=\\\"task-popover__info-content\\\">\\n <span class=\\\"task-popover__info-text\\\">{{\\n selectedTask()!.assignee?.fullName || selectedTask()!.assignee?.username || 'Unassigned'\\n }}</span>\\n </div>\\n </div>\\n }\\n\\n <!-- Priority -->\\n @if (selectedTask()!.priority) {\\n <div class=\\\"task-popover__info-item\\\">\\n <div\\n class=\\\"task-popover__icon task-popover__icon--priority\\\"\\n [attr.data-priority]=\\\"selectedTask()!.priority\\\"\\n >\\n <i class=\\\"fa-light fa-exclamation-circle\\\"></i>\\n </div>\\n <div class=\\\"task-popover__info-content\\\">\\n <span\\n class=\\\"task-popover__info-text task-popover__priority\\\"\\n [attr.data-priority]=\\\"selectedTask()!.priority\\\"\\n >\\n {{ selectedTask()!.priority }}\\n </span>\\n </div>\\n </div>\\n }\\n </div>\\n\\n <!-- Actions Section -->\\n <div class=\\\"task-popover__actions\\\">\\n <!-- Task Actions from Provider -->\\n @if (taskActions().length > 0) {\\n <div class=\\\"task-popover__actions-group\\\">\\n <!-- Primary Actions: Icon-only buttons -->\\n @if (primaryActions().length > 0) {\\n @for (action of primaryActions(); track action.name || action.title) {\\n <ax-button\\n [look]=\\\"'solid'\\\"\\n [color]=\\\"getActionColor(action)\\\"\\n (onClick)=\\\"executeAction(action)\\\"\\n [disabled]=\\\"action.disabled === true\\\"\\n [text]=\\\"action.title\\\"\\n >\\n @if (action.icon) {\\n <ax-prefix>\\n <ax-icon>\\n <i [class]=\\\"action.icon\\\"></i>\\n </ax-icon>\\n </ax-prefix>\\n }\\n </ax-button>\\n }\\n }\\n\\n <!-- Secondary Actions: Dropdown with \\\"...\\\" button -->\\n @if (secondaryActions().length > 0) {\\n <ax-button [look]=\\\"'blank'\\\">\\n <ax-prefix>\\n <ax-icon icon=\\\"fa-light fa-ellipsis-vertical\\\"></ax-icon>\\n </ax-prefix>\\n <ax-dropdown-panel>\\n <ax-button-item-list>\\n @for (action of secondaryActions(); track action.name || action.title) {\\n <ax-button-item\\n [text]=\\\"action.title\\\"\\n [disabled]=\\\"action.disabled === true\\\"\\n (onClick)=\\\"executeAction(action)\\\"\\n >\\n @if (action.icon) {\\n <ax-prefix>\\n <ax-icon>\\n <i [class]=\\\"action.icon\\\"></i>\\n </ax-icon>\\n </ax-prefix>\\n }\\n </ax-button-item>\\n }\\n </ax-button-item-list>\\n </ax-dropdown-panel>\\n </ax-button>\\n }\\n </div>\\n }\\n </div>\\n }\\n </div>\\n }\\n </div>\\n</ax-popover>\\n\", styles: [\"ax-kanban{--ax-comp-kanban-status-min-height: 100%;--ax-comp-kanban-status-min-width: 25rem;height:100%;line-height:1.5;background-color:rgba(var(--ax-sys-color-lightest-surface))!important}.task-popover{background:rgba(var(--ax-sys-color-lightest-surface));border-radius:12px;overflow:hidden;display:flex;flex-direction:column}.task-popover__header{padding:20px 20px 16px;border-bottom:1px solid var(--ax-sys-color-border);background:linear-gradient(to bottom,var(--ax-sys-color-lightest-surface),var(--ax-sys-color-lighter-surface))}.task-popover__title-section{display:flex;flex-direction:column;gap:8px}.task-popover__title-row{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.task-popover__title{font-size:18px;font-weight:600;line-height:1.4;color:var(--ax-sys-color-text-primary);margin:0;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.task-popover__close-btn{flex-shrink:0;background:none;border:none;padding:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--ax-sys-color-text-neutral-600);transition:color .2s ease;border-radius:4px}.task-popover__close-btn:hover{color:var(--ax-sys-color-text-primary);background:var(--ax-sys-color-lighter-surface)}.task-popover__close-btn:active{background:var(--ax-sys-color-light-surface)}.task-popover__close-btn ax-icon{display:block;width:16px;height:16px}.task-popover__description{font-size:14px;line-height:1.5;color:var(--ax-sys-color-text-secondary);margin:0;display:-webkit-box;-webkit-line-clamp:3;line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.task-popover__content{padding:16px 20px;display:flex;flex-direction:column;gap:12px;flex:1}.task-popover__info-item{display:flex;align-items:flex-start;gap:12px;min-height:24px}.task-popover__icon{width:20px;height:20px;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:2px;color:var(--ax-sys-color-text-neutral-600);font-size:14px}.task-popover__icon i{display:block}.task-popover__icon--priority[data-priority=highest]{color:var(--ax-sys-color-danger)}.task-popover__icon--priority[data-priority=high]{color:var(--ax-sys-color-warning)}.task-popover__icon--priority[data-priority=medium]{color:var(--ax-sys-color-info)}.task-popover__icon--priority[data-priority=low],.task-popover__icon--priority[data-priority=lowest]{color:var(--ax-sys-color-text-neutral-500)}.task-popover__info-content{flex:1;min-width:0;display:flex;align-items:center}.task-popover__info-text{font-size:14px;line-height:1.5;color:var(--ax-sys-color-text-primary);word-wrap:break-word}.task-popover__time{font-weight:500;color:var(--ax-sys-color-text-primary);margin-left:4px}.task-popover__priority{text-transform:capitalize;font-weight:500}.task-popover__priority[data-priority=highest]{color:var(--ax-sys-color-danger)}.task-popover__priority[data-priority=high]{color:var(--ax-sys-color-warning)}.task-popover__priority[data-priority=medium]{color:var(--ax-sys-color-info)}.task-popover__priority[data-priority=low],.task-popover__priority[data-priority=lowest]{color:var(--ax-sys-color-text-neutral-600)}.task-popover__actions{padding:12px 20px 16px;border-top:1px solid var(--ax-sys-color-border);display:flex;flex-direction:column;gap:8px;background:var(--ax-sys-color-lighter-surface)}.task-popover__actions-group{display:flex;justify-content:flex-end;gap:8px;flex-wrap:wrap}.task-popover__actions-group--default{margin-top:4px;padding-top:8px;border-top:1px solid var(--ax-sys-color-border)}.task-popover__action-divider{width:100%;height:1px;background:var(--ax-sys-color-border);margin:4px 0}.task-popover__action-btn{min-width:100px;white-space:nowrap}\\n\"] }]\n }], propDecorators: { kanbanComponent: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXKanbanComponent), { isSignal: true }] }], taskPopover: [{ type: i0.ViewChild, args: ['taskPopover', { isSignal: true }] }], tasks: [{ type: i0.Input, args: [{ isSignal: true, alias: \"tasks\", required: true }] }, { type: i0.Output, args: [\"tasksChange\"] }], onTaskClick: [{ type: i0.Output, args: [\"onTaskClick\"] }], onTaskChanged: [{ type: i0.Output, args: [\"onTaskChanged\"] }], component: [{ type: i0.Output, args: [\"component\"] }], onActionClick: [{ type: i0.Output, args: [\"onActionClick\"] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1ib2FyZC1rYW5iYW4tdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvdGFzay1tYW5hZ2VtZW50L3NyYy9saWIvZmVhdHVyZXMvdGFzay1ib2FyZC92aWV3cy90YXNrLWJvYXJkLWthbmJhbi12aWV3L3Rhc2stYm9hcmQta2FuYmFuLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3Rhc2stbWFuYWdlbWVudC9zcmMvbGliL2ZlYXR1cmVzL3Rhc2stYm9hcmQvdmlld3MvdGFzay1ib2FyZC1rYW5iYW4tdmlldy90YXNrLWJvYXJkLWthbmJhbi12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRCxPQUFPLEVBRUwsaUJBQWlCLEdBS2xCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFzQixlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNqRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVB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LGlCQUFpQixzVkFDakIsbUJBQW1COzs0RkFHViwrQkFBK0I7a0JBaEIzQyxTQUFTOytCQUNFLDRCQUE0QixtQkFHckIsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxXQUM1Qjt3QkFDUCxZQUFZO3dCQUNaLGlCQUFpQjt3QkFDakIsZUFBZTt3QkFDZixjQUFjO3dCQUNkLGdCQUFnQjt3QkFDaEIsaUJBQWlCO3dCQUNqQixtQkFBbUI7cUJBQ3BCO2lHQVMyQixpQkFBaUIsc0VBQ1EsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2J1dHRvbic7XG5pbXBvcnQgeyBBWERlY29yYXRvck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYRHJvcGRvd25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZHJvcGRvd24nO1xuaW1wb3J0IHtcbiAgQVhLYW5iYW5CZWZvcmVEcm9wRXZlbnQsXG4gIEFYS2FuYmFuQ29tcG9uZW50LFxuICBBWEthbmJhbkl0ZW0sXG4gIEFYS2FuYmFuTW91c2VFdmVudCxcbiAgQVhLYW5iYW5Tb3J0RXZlbnQsXG4gIEFYS2FuYmFuU3RhdHVzLFxufSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMva2FuYmFuJztcbmltcG9ydCB7IEFYUG9wb3ZlckNvbXBvbmVudCwgQVhQb3BvdmVyTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3BvcG92ZXInO1xuaW1wb3J0IHsgQVhDYWxlbmRhclNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvZGF0ZS10aW1lJztcbmltcG9ydCB7IEFYVHJhbnNsYXRpb25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQVhQU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb21tb24nO1xuaW1wb3J0IHsgQVhQQ29tbWFuZFNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL3J1bnRpbWUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgbW9kZWwsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxuICBUeXBlLFxuICB2aWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQVhQVGFza0JvYXJkU2VydmljZSB9IGZyb20gJy4uLy4uL3Rhc2stYm9hcmQuc2VydmljZSc7XG5pbXBvcnQgeyBBWFBUYXNrLCBBWFBUYXNrQWN0aW9uLCBBWFBUYXNrQWN0aW9uTWVudUl0ZW0sIEFYUFRhc2tQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vdGFzay1ib2FyZC50eXBlcyc7XG5pbXBvcnQgeyBBWE1UYXNrQm9hcmRWaWV3TW9kZWwgfSBmcm9tICcuLi8uLi90YXNrLWJvYXJkLnZpZXdtb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4bS10YXNrLWJvYXJkLWthbmJhbi12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Rhc2stYm9hcmQta2FuYmFuLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YXNrLWJvYXJkLWthbmJhbi12aWV3LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEFYS2FuYmFuQ29tcG9uZW50LFxuICAgIEFYUG9wb3Zlck1vZHVsZSxcbiAgICBBWEJ1dHRvbk1vZHVsZSxcbiAgICBBWERyb3Bkb3duTW9kdWxlLFxuICAgIEFYRGVjb3JhdG9yTW9kdWxlLFxuICAgIEFYVHJhbnNsYXRpb25Nb2R1bGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFYTVRhc2tCb2FyZEthbmJhblZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHZtID0gaW5qZWN0KEFYTVRhc2tCb2FyZFZpZXdNb2RlbCk7XG4gIHByb3RlY3RlZCByZWFkb25seSB0YXNrQm9hcmRTZXJ2aWNlID0gaW5qZWN0KEFYUFRhc2tCb2FyZFNlcnZpY2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2FsZW5kYXJTZXJ2aWNlID0gaW5qZWN0KEFYQ2FsZW5kYXJTZXJ2aWNlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNldHRpbmdTZXJ2aWNlID0gaW5qZWN0KEFYUFNldHRpbmdzU2VydmljZSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBjb21tYW5kU2VydmljZSA9IGluamVjdChBWFBDb21tYW5kU2VydmljZSk7XG5cbiAga2FuYmFuQ29tcG9uZW50ID0gdmlld0NoaWxkKEFYS2FuYmFuQ29tcG9uZW50KTtcbiAgdGFza1BvcG92ZXIgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8QVhQb3BvdmVyQ29tcG9uZW50PigndGFza1BvcG92ZXInKTtcblxuICBwcm90ZWN0ZWQgc2VsZWN0ZWRUYXNrID0gc2lnbmFsPEFYUFRhc2sgfCBudWxsPihudWxsKTtcbiAgcHJvdGVjdGVkIHBvcG92ZXJUYXJnZXQgPSBzaWduYWw8SFRNTEVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgcHJvdGVjdGVkIHRhc2tBY3Rpb25zID0gc2lnbmFsPEFYUFRhc2tBY3Rpb25NZW51SXRlbVtdPihbXSk7XG4gIHByb3RlY3RlZCBjdXN0b21Db21wb25lbnRUeXBlID0gc2lnbmFsPFR5cGU8QVhQVGFza1BvcG92ZXJDb21wb25lbnQ+IHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gU2VwYXJhdGUgcHJpbWFyeSBhbmQgc2Vjb25kYXJ5IGFjdGlvbnNcbiAgcHJvdGVjdGVkIHByaW1hcnlBY3Rpb25zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLnRhc2tBY3Rpb25zKCkuZmlsdGVyKChhY3Rpb24pID0+IChhY3Rpb24ucHJpb3JpdHkgPz8gJ3NlY29uZGFyeScpID09PSAncHJpbWFyeScpO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgc2Vjb25kYXJ5QWN0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy50YXNrQWN0aW9ucygpLmZpbHRlcigoYWN0aW9uKSA9PiAoYWN0aW9uLnByaW9yaXR5ID8/ICdzZWNvbmRhcnknKSA9PT0gJ3NlY29uZGFyeScpO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgY3VzdG9tQ29tcG9uZW50SW5wdXRzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHRhc2sgPSB0aGlzLnNlbGVjdGVkVGFzaygpO1xuICAgIGlmICghdGFzaykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHsgdGFzayB9O1xuICB9KTtcblxuICB0YXNrcyA9IG1vZGVsLnJlcXVpcmVkPEFYUFRhc2tbXT4oKTtcblxuICBvblRhc2tDbGljayA9IG91dHB1dDxBWFBUYXNrPigpO1xuICBvblRhc2tDaGFuZ2VkID0gb3V0cHV0PEFYUFRhc2s+KCk7XG4gIGNvbXBvbmVudCA9IG91dHB1dDxBWEthbmJhbkNvbXBvbmVudD4oKTtcbiAgb25BY3Rpb25DbGljayA9IG91dHB1dDxBWFBUYXNrQWN0aW9uPigpO1xuXG4gIHN0YXR1c2VzID0gc2lnbmFsPEFYS2FuYmFuU3RhdHVzW10+KFtdKTtcblxuICBzdGFibGVUYXNrcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMudGFza3MoKSwgeyBlcXVhbDogaXNFcXVhbCB9KTtcbiAgcHJvdGVjdGVkIGthbmJhblRhc2tzID0gY29tcHV0ZWQ8QVhLYW5iYW5JdGVtW10+KCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFibGVUYXNrcygpLm1hcCgodGFzaykgPT4gKHtcbiAgICAgIGlkOiB0YXNrLmlkLFxuICAgICAgdGl0bGU6IHRhc2sudGl0bGUsXG4gICAgICBpbmRleDogdGFzay5pbmRleCxcbiAgICAgIGNzc0NsYXNzOiB0YXNrLmNzc0NsYXNzLFxuICAgICAgcHJpb3JpdHk6IHRhc2sucHJpb3JpdHksXG4gICAgICBzdGF0dXNLZXk6IHRhc2suc3RhdHVzLmlkLFxuICAgICAgZGVzY3JpcHRpb246IHRhc2suZGVzY3JpcHRpb24sXG4gICAgfSkpO1xuICB9KTtcblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMua2FuYmFuQ29tcG9uZW50KCkpIHtcbiAgICAgIHRoaXMuY29tcG9uZW50LmVtaXQodGhpcy5rYW5iYW5Db21wb25lbnQoKSEpO1xuICAgIH1cbiAgfVxuXG4gICNwcm92aWRlckNoYW5nZWQgPSBlZmZlY3QoYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRhc2tUeXBlID0gdGhpcy52bS5zZWxlY3RlZFRhc2tUeXBlcygpWzBdO1xuICAgIGlmICghdGFza1R5cGUpIHtcbiAgICAgIHRoaXMuc3RhdHVzZXMuc2V0KFtdKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGFza1R5cGUuZ2V0U3RhdHVzZXMoKS50aGVuKChzdGF0dXNlcykgPT4ge1xuICAgICAgaWYgKHN0YXR1c2VzKSB7XG4gICAgICAgIHRoaXMuc3RhdHVzZXMuc2V0KHN0YXR1c2VzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8jcmVnaW9uIC0tLS0gICBEcmFnICYgRHJvcCBIYW5kbGluZyAgIC0tLS1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgb25CZWZvcmVEcm9wIGV2ZW50IGZyb20gdGhlIGthbmJhbiBjb21wb25lbnQuXG4gICAqIFVzZXMgZXZlbnQud2FpdCgpIHRvIHJlZ2lzdGVyIGFzeW5jIG9wZXJhdGlvbnMgdGhhdCB0aGUga2FuYmFuIHdpbGwgYXdhaXQuXG4gICAqIElmIGFjdGlvbiBpcyBjYW5jZWxsZWQvZmFpbGVkLCB3ZSBzZXQgZXZlbnQuY2FuY2VsZWQgPSB0cnVlIHRvIHByZXZlbnQgdGhlIGRyb3AuXG4gICAqL1xuICBwcm90ZWN0ZWQgb25CZWZvcmVEcm9wKGV2ZW50OiBBWEthbmJhbkJlZm9yZURyb3BFdmVudCk6IHZvaWQge1xuICAgIC8vIElmIG5vIHN0YXR1cyBjaGFuZ2UsIGFsbG93IHRoZSBkcm9wIChqdXN0IHJlb3JkZXJpbmcpXG4gICAgaWYgKGV2ZW50LnByZXZpb3VzU3RhdHVzS2V5ID09PSBldmVudC5jdXJyZW50U3RhdHVzS2V5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRmluZCB0aGUgdGFzayBiZWluZyBtb3ZlZFxuICAgIGNvbnN0IHRhc2sgPSB0aGlzLnN0YWJsZVRhc2tzKCkuZmluZCgodCkgPT4gdC5pZCA9PT0gZXZlbnQuaXRlbT8uaWQpO1xuICAgIGlmICghdGFzayB8fCAhdGFzay5wcm92aWRlcikge1xuICAgICAgLy8gQWxsb3cgZHJvcCBpZiB0YXNrIG5vdCBmb3VuZCBvciBubyBwcm92aWRlclxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdldCB0aGUgcHJvdmlkZXJcbiAgICBjb25zdCBwcm92aWRlciA9IHRoaXMudGFza0JvYXJkU2VydmljZS5nZXRQcm92aWRlcih0YXNrLnByb3ZpZGVyKTtcbiAgICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUmVnaXN0ZXIgdGhlIGFzeW5jIG9wZXJhdGlvbiB1c2luZyBldmVudC53YWl0KClcbiAgICAvLyBUaGUga2FuYmFuIGNvbXBvbmVudCB3aWxsIGF3YWl0IHRoaXMgcHJvbWlzZSBiZWZvcmUgcHJvY2VlZGluZ1xuICAgIGV2ZW50LndhaXQodGhpcy5leGVjdXRlRHJvcEFjdGlvbihldmVudCwgdGFzaywgcHJvdmlkZXIpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyB0aGUgYWN0aW9uIGZvciBhIGRyb3Agb3BlcmF0aW9uLlxuICAgKiBTZXRzIGV2ZW50LmNhbmNlbGVkID0gdHJ1ZSBpZiBhY3Rpb24gZmFpbHMgb3IgaXMgY2FuY2VsbGVkLlxuICAgKiBJTVBPUlRBTlQ6IERvIE5PVCB1cGRhdGUgdGhlIHRhc2sgc3RhdHVzIGluIGRhdGFTb3VyY2UgaGVyZSAtIGxldCB0aGUga2FuYmFuIGhhbmRsZSB0aGUgbW92ZS5cbiAgICogVGhlIGthbmJhbiB3aWxsIHVwZGF0ZSB0aGUgc3RhdHVzIGluIG9uU29ydENoYW5nZWQsIGFuZCB3ZSdsbCBzeW5jIHdpdGggYmFja2VuZCB0aGVyZS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZURyb3BBY3Rpb24oXG4gICAgZXZlbnQ6IEFYS2FuYmFuQmVmb3JlRHJvcEV2ZW50LFxuICAgIHRhc2s6IEFYUFRhc2ssXG4gICAgcHJvdmlkZXI6IFJldHVyblR5cGU8dHlwZW9mIHRoaXMudGFza0JvYXJkU2VydmljZS5nZXRQcm92aWRlcj4sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghcHJvdmlkZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gR2V0IGF2YWlsYWJsZSBhY3Rpb25zIGZvciB0aGUgdGFza1xuICAgICAgY29uc3QgYWN0aW9ucyA9IGF3YWl0IHByb3ZpZGVyLmdldEFjdGlvbnModGFzayk7XG4gICAgICBpZiAoIWFjdGlvbnMgfHwgYWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gTm8gYWN0aW9ucyBhdmFpbGFibGUsIGFsbG93IHRoZSBkcm9wXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gRmluZCBhY3Rpb24gdGhhdCBtYXRjaGVzIHRoZSBuZXcgc3RhdHVzXG4gICAgICBjb25zdCBtYXRjaGluZ0FjdGlvbiA9IHRoaXMuZmluZEFjdGlvbkZvclN0YXR1cyhhY3Rpb25zLCBldmVudC5jdXJyZW50U3RhdHVzS2V5KTtcbiAgICAgIGlmICghbWF0Y2hpbmdBY3Rpb24gfHwgIW1hdGNoaW5nQWN0aW9uLmNvbW1hbmQpIHtcbiAgICAgICAgLy8gTm8gbWF0Y2hpbmcgYWN0aW9uIGZvdW5kLCBhbGxvdyB0aGUgZHJvcFxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEV4ZWN1dGUgdGhlIGFjdGlvbiBhbmQgY2hlY2sgcmVzdWx0XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnRhc2tCb2FyZFNlcnZpY2UuZXhlY3V0ZUNvbW1hbmQobWF0Y2hpbmdBY3Rpb24uY29tbWFuZCwgdGFzay5wcm92aWRlciEpO1xuXG4gICAgICAvLyBDaGVjayBpZiBhY3Rpb24gd2FzIHN1Y2Nlc3NmdWwgKG5vdCBjYW5jZWxsZWQgb3IgZmFpbGVkKVxuICAgICAgaWYgKHJlc3VsdD8uc3VjY2VzcyA9PT0gZmFsc2UgfHwgcmVzdWx0ID09PSBudWxsKSB7XG4gICAgICAgIC8vIEFjdGlvbiB3YXMgY2FuY2VsbGVkIG9yIGZhaWxlZCAtIHByZXZlbnQgdGhlIGRyb3BcbiAgICAgICAgZXZlbnQuY2FuY2VsZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEFjdGlvbiBzdWNjZWVkZWQgLSBhbGxvdyB0aGUgZHJvcCB0byBwcm9jZWVkXG4gICAgICAvLyBUaGUga2FuYmFuIHdpbGwgaGFuZGxlIHRoZSB2aXN1YWwgbW92ZSwgYW5kIG9uU29ydENoYW5nZWQgd2lsbCBzeW5jIHdpdGggYmFja2VuZFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbS2FuYmFuRHJvcF0gRmFpbGVkIHRvIGV4ZWN1dGUgYWN0aW9uIGR1cmluZyBkcm9wOicsIGVycm9yKTtcbiAgICAgIC8vIE9uIGVycm9yLCBwcmV2ZW50IHRoZSBkcm9wIHRvIGJlIHNhZmVcbiAgICAgIGV2ZW50LmNhbmNlbGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgYW4gYWN0aW9uIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHRhcmdldCBzdGF0dXMuXG4gICAqIE1hdGNoZXMgYWN0aW9ucyBieSBuYW1lIHBhdHRlcm5zIChlLmcuLCBcImFwcHJvdmVcIiBhY3Rpb24gZm9yIFwiYXBwcm92ZWRcIiBzdGF0dXMpLlxuICAgKi9cbiAgcHJpdmF0ZSBmaW5kQWN0aW9uRm9yU3RhdHVzKFxuICAgIGFjdGlvbnM6IEFYUFRhc2tBY3Rpb25NZW51SXRlbVtdLFxuICAgIHRhcmdldFN0YXR1czogc3RyaW5nIHwgbnVtYmVyLFxuICApOiBBWFBUYXNrQWN0aW9uTWVudUl0ZW0gfCBudWxsIHtcbiAgICBjb25zdCB0YXJnZXRTdGF0dXNTdHIgPSBTdHJpbmcodGFyZ2V0U3RhdHVzKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gQ29tbW9uIHN0YXR1cy10by1hY3Rpb24gbWFwcGluZ3NcbiAgICBjb25zdCBzdGF0dXNBY3Rpb25NYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHtcbiAgICAgIGFwcHJvdmVkOiBbJ2FwcHJvdmUnXSxcbiAgICAgIHJlamVjdGVkOiBbJ3JlamVjdCddLFxuICAgICAgY2FuY2VsbGVkOiBbJ2NhbmNlbCddLFxuICAgICAgY29tcGxldGVkOiBbJ2NvbXBsZXRlJywgJ2ZpbmlzaCddLFxuICAgICAgZG9uZTogWydjb21wbGV0ZScsICdmaW5pc2gnXSxcbiAgICAgIGlucHJvZ3Jlc3M6IFsnc3RhcnQnLCAnYmVnaW4nXSxcbiAgICAgICdpbi1wcm9ncmVzcyc6IFsnc3RhcnQnLCAnYmVnaW4nXSxcbiAgICAgIGJsb2NrZWQ6IFsnYmxvY2snXSxcbiAgICAgIHVuYmxvY2tlZDogWyd1bmJsb2NrJ10sXG4gICAgfTtcblxuICAgIC8vIENoZWNrIGRpcmVjdCBtYXBwaW5ncyBmaXJzdFxuICAgIGNvbnN0IHBvc3NpYmxlQWN0aW9uTmFtZXMgPSBzdGF0dXNBY3Rpb25NYXBbdGFyZ2V0U3RhdHVzU3RyXSB8fCBbXTtcbiAgICBmb3IgKGNvbnN0IGFjdGlvbk5hbWUgb2YgcG9zc2libGVBY3Rpb25OYW1lcykge1xuICAgICAgY29uc3QgYWN0aW9uID0gYWN0aW9ucy5maW5kKChhKSA9PiBhLm5hbWU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoYWN0aW9uTmFtZSkpO1xuICAgICAgaWYgKGFjdGlvbikge1xuICAgICAgICByZXR1cm4gYWN0aW9uO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRyeSB0byBmaW5kIGFjdGlvbiBieSBuYW1lIGNvbnRhaW5pbmcgc3RhdHVzIGtleXdvcmRzXG4gICAgY29uc3Qgc3RhdHVzS2V5d29yZHMgPSB0YXJnZXRTdGF0dXNTdHIuc3BsaXQoL1stX1xcc10rLyk7XG4gICAgZm9yIChjb25zdCBrZXl3b3JkIG9mIHN0YXR1c0tleXdvcmRzKSB7XG4gICAgICBpZiAoa2V5d29yZC5sZW5ndGggPCAzKSBjb250aW51ZTsgLy8gU2tpcCB2ZXJ5IHNob3J0IGtleXdvcmRzXG5cbiAgICAgIGNvbnN0IGFjdGlvbiA9IGFjdGlvbnMuZmluZCgoYSkgPT4ge1xuICAgICAgICBjb25zdCBhY3Rpb25OYW1lID0gYS5uYW1lPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xuICAgICAgICByZXR1cm4gYWN0aW9uTmFtZS5pbmNsdWRlcyhrZXl3b3JkKSB8fCBrZXl3b3JkLmluY2x1ZGVzKGFjdGlvbk5hbWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChhY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGFjdGlvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUcnkgZXhhY3QgbWF0Y2ggd2l0aCBhY3Rpb24gbmFtZVxuICAgIGNvbnN0IGV4YWN0TWF0Y2ggPSBhY3Rpb25zLmZpbmQoKGEpID0+IGEubmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gdGFyZ2V0U3RhdHVzU3RyKTtcbiAgICBpZiAoZXhhY3RNYXRjaCkge1xuICAgICAgcmV0dXJuIGV4YWN0TWF0Y2g7XG4gICAgfVxuXG4gICAgLy8gVHJ5IHBhcnRpYWwgbWF0Y2ggKHN0YXR1cyBjb250YWlucyBhY3Rpb24gbmFtZSBvciB2aWNlIHZlcnNhKVxuICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIGFjdGlvbnMpIHtcbiAgICAgIGNvbnN0IGFjdGlvbk5hbWUgPSBhY3Rpb24ubmFtZT8udG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICAgIGlmICh0YXJnZXRTdGF0dXNTdHIuaW5jbHVkZXMoYWN0aW9uTmFtZSkgfHwgYWN0aW9uTmFtZS5pbmNsdWRlcyh0YXJnZXRTdGF0dXNTdHIpKSB7XG4gICAgICAgIHJldHVybiBhY3Rpb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICBwcm90ZWN0ZWQgb25Tb3J0Q2hhbmdlZChldmVudDogQVhLYW5iYW5Tb3J0RXZlbnQpIHtcbiAgICBjb25zdCB0YXNrcyA9IHRoaXMudGFza3MoKS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IHRhc2s6IEFYS2FuYmFuSXRlbSA9IGV2ZW50LmFsbEl0ZW1zLmZpbmQoKHQpID0+IHQuaWQgPT09IGl0ZW0uaWQpO1xuICAgICAgaWYgKHRhc2spIHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gdGhpcy5zdGF0dXNlcygpLmZpbmQoKHMpID0+IHMua2V5ID09PSB0YXNrLnN0YXR1c0tleSkhO1xuICAgICAgICByZXR1cm4geyAuLi5pdGVtLCBpbmRleDogdGFzay5pbmRleCEsIHN0YXR1czogeyBpZDogc3RhdHVzLmtleSwgdGl0bGU6IHN0YXR1cy50aXRsZSB9IH07XG4gICAgICB9XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9KTtcblxuICAgIHRoaXMudGFza0JvYXJkU2VydmljZVxuICAgICAgLnVwZGF0ZVRhc2tzKHRhc2tzKVxuICAgICAgLnRoZW4oKHVwZGF0ZWRUYXNrcykgPT4ge1xuICAgICAgICB0aGlzLnRhc2tzLnNldCh1cGRhdGVkVGFza3MpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignW0thbmJhblNvcnRdIEZhaWxlZCB0byB1cGRhdGUgdGFza3M6JywgZXJyb3IpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlSXRlbUNsaWNrKGV2ZW50OiBBWEthbmJhbk1vdXNlRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0YXNrID0gdGhpcy5zdGFibGVUYXNrcygpLmZpbmQoKHRhc2spID0+IHRhc2suaWQgPT09IGV2ZW50Lml0ZW0uaWQpO1xuICAgIGlmICghdGFzaykgcmV0dXJuO1xuXG4gICAgLy8gRmluZCB0aGUga2FuYmFuIGl0ZW0gY29udGFpbmVyIGVsZW1lbnRcbiAgICBsZXQgdGFyZ2V0RWxlbWVudCA9IChldmVudC5uYXRpdmVFdmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50KSB8fCAoZXZlbnQubmF0aXZlRXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcblxuICAgIC8vIFRyYXZlcnNlIHVwIHRvIGZpbmQgdGhlIGthbmJhbiBpdGVtIGNvbnRhaW5lclxuICAgIGxldCBlbGVtZW50ID0gdGFyZ2V0RWxlbWVudDtcbiAgICBjb25zdCBtYXhEZXB0aCA9IDEwO1xuICAgIGxldCBkZXB0aCA9IDA7XG5cbiAgICB3aGlsZSAoZWxlbWVudCAmJiBlbGVtZW50ICE9PSBkb2N1bWVudC5ib2R5ICYmIGRlcHRoIDwgbWF4RGVwdGgpIHtcbiAgICAgIGRlcHRoKys7XG5cbiAgICAgIGNvbnN0IGlzS2FuYmFuSXRlbSA9XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0Py5jb250YWlucygnZHgta2FuYmFuLWl0ZW0nKSB8fFxuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdD8uY29udGFpbnMoJ2F4LWthbmJhbi1pdGVtJykgfHxcbiAgICAgICAgZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2RhdGEtaXRlbS1pZCcpO1xuXG4gICAgICBpZiAoaXNLYW5iYW5JdGVtKSB7XG4gICAgICAgIHRhcmdldEVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIHNlbGVjdGVkIHRhc2sgYW5kIHRhcmdldCBlbGVtZW50XG4gICAgdGhpcy5zZWxlY3RlZFRhc2suc2V0KHRhc2spO1xuICAgIHRoaXMucG9wb3ZlclRhcmdldC5zZXQodGFyZ2V0RWxlbWVudCk7XG5cbiAgICAvLyBDaGVjayBpZiBwcm92aWRlciBoYXMgYSBjdXN0b20gY29tcG9uZW50XG4gICAgYXdhaXQgdGhpcy5sb2FkQ3VzdG9tQ29tcG9uZW50KHRhc2spO1xuXG4gICAgLy8gTG9hZCBhY3Rpb25zIGZvciB0aGUgdGFza1xuICAgIGF3YWl0IHRoaXMubG9hZFRhc2tBY3Rpb25zKHRhc2spO1xuXG4gICAgLy8gT3BlbiB0aGUgcG9wb3ZlclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMudGFza1BvcG92ZXIoKSAmJiB0YXJnZXRFbGVtZW50KSB7XG4gICAgICAgIHRoaXMudGFza1BvcG92ZXIoKS50YXJnZXQgPSB0YXJnZXRFbGVtZW50O1xuICAgICAgICB0aGlzLnRhc2tQb3BvdmVyKCkub3BlbigpO1xuICAgICAgfVxuICAgIH0sIDApO1xuXG4gICAgLy8gU3RpbGwgZW1pdCB0aGUgZXZlbnQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICB0aGlzLm9uVGFza0NsaWNrLmVtaXQodGFzayk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlQWN0aW9uQ2xpY2soZXZlbnQ6IEFYS2FuYmFuTW91c2VFdmVudCkge1xuICAgIGNvbnN0IHRhc2sgPSB0aGlzLnN0YWJsZVRhc2tzKCkuZmluZCgodGFzaykgPT4gdGFzay5pZCA9PT0gZXZlbnQuaXRlbS5pZCk7XG4gICAgaWYgKHRhc2spIHtcbiAgICAgIHRoaXMub25BY3Rpb25DbGljay5lbWl0KHsgbmF0aXZlRXZlbnQ6IGV2ZW50Lm5hdGl2ZUV2ZW50LCB0YXNrOiB0YXNrIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBsb2FkVGFza0FjdGlvbnModGFzazogQVhQVGFzayk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwcm92aWRlck5hbWUgPSB0YXNrLnByb3ZpZGVyO1xuICAgICAgaWYgKCFwcm92aWRlck5hbWUpIHtcbiAgICAgICAgdGhpcy50YXNrQWN0aW9ucy5zZXQoW10pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy50YXNrQm9hcmRTZXJ2aWNlLmdldFByb3ZpZGVyKHByb3ZpZGVyTmFtZSk7XG4gICAgICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgICAgIHRoaXMudGFza0FjdGlvbnMuc2V0KFtdKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhY3Rpb25zID0gYXdhaXQgcHJvdmlkZXIuZ2V0QWN0aW9ucyh0YXNrKTtcbiAgICAgIC8vIEVuc3VyZSBhbGwgYWN0aW9ucyBoYXZlIGEgcHJpb3JpdHkgKGRlZmF1bHQgdG8gJ3NlY29uZGFyeScgaWYgbm90IHNwZWNpZmllZClcbiAgICAgIGNvbnN0IGFjdGlvbnNXaXRoUHJpb3JpdHkgPSAoYWN0aW9ucyB8fCBbXSkubWFwKChhY3Rpb24pID0+ICh7XG4gICAgICAgIC4uLmFjdGlvbixcbiAgICAgICAgcHJpb3JpdHk6IGFjdGlvbi5wcmlvcml0eSA/PyAnc2Vjb25kYXJ5JyxcbiAgICAgIH0pKTtcbiAgICAgIHRoaXMudGFza0FjdGlvbnMuc2V0KGFjdGlvbnNXaXRoUHJpb3JpdHkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCB0YXNrIGFjdGlvbnM6JywgZXJyb3IpO1xuICAgICAgdGhpcy50YXNrQWN0aW9ucy5zZXQoW10pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRBY3Rpb25Db2xvcihhY3Rpb246IEFYUFRhc2tBY3Rpb25NZW51SXRlbSk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiBhY3Rpb24uY29sb3IgYXMgc3RyaW5nO1xuICB9XG5cbiAgLy8jcmVnaW9uIC0tLS0gICBBY3Rpb24gRXhlY3V0aW9uICAgLS0tLVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBhbiBhY3Rpb24gd2hlbiB1c2VyIGNsaWNrcyBvbiBhbiBhY3Rpb24gYnV0dG9uIGluIHRoZSBwb3BvdmVyLlxuICAgKiBJZiBhY3Rpb24gc3VjY2VlZHMsIG1vdmVzIHRoZSBpdGVtIHRvIHRoZSBhcHByb3ByaWF0ZSBzdGF0dXMgdXNpbmcga2FuYmFuLm1vdmVJdGVtKCkuXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgZXhlY3V0ZUFjdGlvbihhY3Rpb246IEFYUFRhc2tBY3Rpb25NZW51SXRlbSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRhc2sgPSB0aGlzLnNlbGVjdGVkVGFzaygpO1xuICAgIGlmICghdGFzayB8fCAhYWN0aW9uLmNvbW1hbmQpIHJldHVybjtcblxuICAgIC8vIFN0b3JlIHRhc2sgaW5mbyBiZWZvcmUgY2xvc2luZyBwb3BvdmVyXG4gICAgY29uc3QgdGFza0lkID0gdGFzay5pZDtcbiAgICBjb25zdCBwcm92aWRlck5hbWUgPSB0YXNrLnByb3ZpZGVyO1xuICAgIGNvbnN0IGN1cnJlbnRTdGF0dXNLZXkgPSB0YXNrLnN0YXR1cy5pZDtcblxuICAgIGlmICghcHJvdmlkZXJOYW1lKSByZXR1cm47XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy50YXNrQm9hcmRTZXJ2aWNlLmV4ZWN1dGVDb21tYW5kKGFjdGlvbi5jb21tYW5kLCBwcm92aWRlck5hbWUpO1xuXG4gICAgICAvLyBDaGVjayBpZiBhY3Rpb24gd2FzIHN1Y2Nlc3NmdWxcbiAgICAgIGlmIChyZXN1bHQ/LnN1Y2Nlc3MgPT09IGZhbHNlIHx8IHJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgICAvLyBBY3Rpb24gd2FzIGNhbmNlbGxlZCBvciBmYWlsZWQgLSBkb24ndCBjbG9zZSBwb3BvdmVyLCBkb24ndCBtb3ZlIGl0ZW1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBBY3Rpb24gc3VjY2VlZGVkIC0gY2xvc2UgcG9wb3ZlciBmaXJzdFxuICAgICAgdGhpcy5jbG9zZVBvcG92ZXIoKTtcblxuICAgICAgLy8gUmVmcmVzaCB0YXNrcyB0byBnZXQgdXBkYXRlZCBzdGF0dXMgYW5kIG1vdmUgaXRlbSBpZiBzdGF0dXMgY2hhbmdlZFxuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoQW5kTW92ZUl0ZW0odGFza0lkLCBwcm92aWRlck5hbWUsIGN1cnJlbnRTdGF0dXNLZXkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZXhlY3V0ZSBhY3Rpb246JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoZXMgdGFza3MgZnJvbSB0aGUgcHJvdmlkZXIgYW5kIG1vdmVzIHRoZSBpdGVtIGlmIHN0YXR1cyBjaGFuZ2VkLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZWZyZXNoQW5kTW92ZUl0ZW0oXG4gICAgdGFza0lkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgcHJvdmlkZXJOYW1lOiBzdHJpbmcsXG4gICAgcHJldmlvdXNTdGF0dXNLZXk6IHN0cmluZyB8IG51bWJlcixcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy50YXNrQm9hcmRTZXJ2aWNlLmdldFByb3ZpZGVyKHByb3ZpZGVyTmFtZSk7XG4gICAgICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gR2V0IHVwZGF0ZWQgdGFza3MgZnJvbSBwcm92aWRlclxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvdmlkZXIuZ2V0VGFza3MoKTtcbiAgICAgIGNvbnN0IHVwZGF0ZWRUYXNrcyA9IHJlc3VsdC5pdGVtcy5tYXAoKHQpID0+ICh7IC4uLnQsIHByb3ZpZGVyOiBwcm92aWRlck5hbWUgfSkpO1xuXG4gICAgICAvLyBGaW5kIHRoZSB1cGRhdGVkIHRhc2sgdG8gZ2V0IGl0cyBuZXcgc3RhdHVzXG4gICAgICBjb25zdCB1cGRhdGVkVGFzayA9IHVwZGF0ZWRUYXNrcy5maW5kKCh0KSA9PiB0LmlkID09PSB0YXNrSWQpO1xuICAgICAgaWYgKCF1cGRhdGVkVGFzaykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld1N0YXR1c0tleSA9IHVwZGF0ZWRUYXNrLnN0YXR1cy5pZDtcblxuICAgICAgLy8gQ2hlY2sgaWYgc3RhdHVzIGFjdHVhbGx5IGNoYW5nZWRcbiAgICAgIGlmIChuZXdTdGF0dXNLZXkgIT09IHByZXZpb3VzU3RhdHVzS2V5KSB7XG4gICAgICAgIC8vIE1vdmUgdGhlIGl0ZW0gcHJvZ3JhbW1hdGljYWxseSB0byB0aGUgbmV3IHN0YXR1cyB1c2luZyBrYW5iYW4gQVBJXG4gICAgICAgIGNvbnN0IGthbmJhbiA9IHRoaXMua2FuYmFuQ29tcG9uZW50KCk7XG4gICAgICAgIGlmIChrYW5iYW4pIHtcbiAgICAgICAgICBhd2FpdCBrYW5iYW4ubW92ZUl0ZW0odGFza0lkLCBuZXdTdGF0dXNLZXkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFVwZGF0ZSB0aGUgdGFza3Mgc2lnbmFsIHdpdGggbWVyZ2VkIGRhdGFcbiAgICAgIGNvbnN0IGN1cnJlbnRUYXNrcyA9IHRoaXMudGFza3MoKTtcbiAgICAgIGNvbnN0IHVwZGF0ZWRUYXNrc01hcCA9IG5ldyBNYXAodXBkYXRlZFRhc2tzLm1hcCgodCkgPT4gW3QuaWQsIHRdKSk7XG5cbiAgICAgIGNvbnN0IG1lcmdlZFRhc2tzID0gY3VycmVudFRhc2tzLm1hcCgodCkgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVkID0gdXBkYXRlZFRhc2tzTWFwLmdldCh0LmlkKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZWQgPyB7IC4uLnVwZGF0ZWQgfSA6IHQ7XG4gICAgICB9KTtcblxuICAgICAgLy8gQWRkIGFueSBuZXcgdGFza3NcbiAgICAgIGNvbnN0IGV4aXN0aW5nSWRzID0gbmV3IFNldChjdXJyZW50VGFza3MubWFwKCh0KSA9PiB0LmlkKSk7XG4gICAgICBjb25zdCBuZXdUYXNrcyA9IHVwZGF0ZWRUYXNrcy5maWx0ZXIoKHQpID0+ICFleGlzdGluZ0lkcy5oYXModC5pZCkpLm1hcCgodCkgPT4gKHsgLi4udCB9KSk7XG4gICAgICBtZXJnZWRUYXNrcy5wdXNoKC4uLm5ld1Rhc2tzKTtcblxuICAgICAgdGhpcy50YXNrcy5zZXQoWy4uLm1lcmdlZFRhc2tzXSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byByZWZyZXNoIHRhc2tzOicsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICBwcm90ZWN0ZWQgYXN5bmMgbG9hZEN1c3RvbUNvbXBvbmVudCh0YXNrOiBBWFBUYXNrKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0YXNrLnByb3ZpZGVyKSB7XG4gICAgICB0aGlzLmN1c3RvbUNvbXBvbmVudFR5cGUuc2V0KG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy50YXNrQm9hcmRTZXJ2aWNlLmdldFByb3ZpZGVyKHRhc2sucHJvdmlkZXIpO1xuICAgIGlmICghcHJvdmlkZXIpIHtcbiAgICAgIHRoaXMuY3VzdG9tQ29tcG9uZW50VHlwZS5zZXQobnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29tcG9uZW50R2V0dGVyID0gcHJvdmlkZXIuZ2V0Q29tcG9uZW50Py4oKTtcbiAgICBpZiAoIWNvbXBvbmVudEdldHRlcikge1xuICAgICAgdGhpcy5jdXN0b21Db21wb25lbnRUeXBlLnNldChudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgbGV0IGNvbXBvbmVudFR5cGU6IFR5cGU8QVhQVGFza1BvcG92ZXJDb21wb25lbnQ+O1xuXG4gICAgICAvLyBDaGVjayBpZiBpdCdzIGEgbGF6eSBsb2FkaW5nIGZ1bmN0aW9uIG9yIGRpcmVjdCBjb21wb25lbnQgdHlwZVxuICAgICAgaWYgKHR5cGVvZiBjb21wb25lbnRHZXR0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3QgdGVzdENhbGwgPSBjb21wb25lbnRHZXR0ZXIgYXMgKCkgPT5cbiAgICAgICAgICB8IFByb21pc2U8VHlwZTxBWFBUYXNrUG9wb3ZlckNvbXBvbmVudD4+XG4gICAgICAgICAgfCBUeXBlPEFYUFRhc2tQb3BvdmVyQ29tcG9uZW50PlxuICAgICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgICBsZXQgcmVzdWx0OiBQcm9taXNlPFR5cGU8QVhQVGFza1BvcG92ZXJDb21wb25lbnQ+PiB8IFR5cGU8QVhQVGFza1BvcG92ZXJDb21wb25lbnQ+IHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVzdWx0ID0gdGVzdENhbGwoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbXBvbmVudFR5cGUgPSBjb21wb25lbnRHZXR0ZXIgYXMgVHlwZTxBWFBUYXNrUG9wb3ZlckNvbXBvbmVudD47XG4gICAgICAgICAgdGhpcy5jdXN0b21Db21wb25lbnRUeXBlLnNldChjb21wb25lbnRUeXBlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgIGNvbXBvbmVudFR5cGUgPSBhd2FpdCByZXN1bHQ7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgY29tcG9uZW50VHlwZSA9IHJlc3VsdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21wb25lbnRUeXBlID0gY29tcG9uZW50R2V0dGVyIGFzIFR5cGU8QVhQVGFza1BvcG92ZXJDb21wb25lbnQ+O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmN1c3RvbUNvbXBvbmVudFR5cGUuc2V0KG51bGwpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY3VzdG9tQ29tcG9uZW50VHlwZS5zZXQoY29tcG9uZW50VHlwZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tUYXNrUG9wb3Zlcl0gRmFpbGVkIHRvIGxvYWQgY3VzdG9tIHRhc2sgcG9wb3ZlciBjb21wb25lbnQ6JywgZXJyb3IpO1xuICAgICAgdGhpcy5jdXN0b21Db21wb25lbnRUeXBlLnNldChudWxsKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xvc2VQb3BvdmVyKCk6IHZvaWQge1xuICAgIHRoaXMudGFza1BvcG92ZXIoKS5jbG9zZSgpO1xuICAgIHRoaXMuY3VzdG9tQ29tcG9uZW50VHlwZS5zZXQobnVsbCk7XG4gICAgdGhpcy5zZWxlY3RlZFRhc2suc2V0KG51bGwpO1xuICAgIHRoaXMucG9wb3ZlclRhcmdldC5zZXQobnVsbCk7XG4gICAgdGhpcy50YXNrQWN0aW9ucy5zZXQoW10pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZvcm1hdFRpbWUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShkYXRlKS5mb3JtYXQoJ0hIOm1tJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZm9ybWF0RGF0ZShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGRhdGUpLmZvcm1hdCgnTU1NIERELCBZWVlZJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZm9ybWF0RGF0ZVRpbWUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShkYXRlKS5mb3JtYXQoJ01NTSBERCwgWVlZWSBISDptbScpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzTXVsdGlEYXkodGFzazogQVhQVGFzayk6IGJvb2xlYW4ge1xuICAgIGlmICh0YXNrLmFsbERheSkge1xuICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUodGFzay5zdGFydERhdGUpO1xuICAgICAgY29uc3QgZW5kID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKHRhc2suZW5kRGF0ZSk7XG4gICAgICByZXR1cm4gc3RhcnQuZGF0ZS5nZXRUaW1lKCkgIT09IGVuZC5kYXRlLmdldFRpbWUoKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydCA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZSh0YXNrLnN0YXJ0RGF0ZSk7XG4gICAgY29uc3QgZW5kID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKHRhc2suZW5kRGF0ZSk7XG4gICAgY29uc3Qgc3RhcnREYXkgPSBzdGFydC5kYXRlLmdldERhdGUoKTtcbiAgICBjb25zdCBlbmREYXkgPSBlbmQuZGF0ZS5nZXREYXRlKCk7XG4gICAgY29uc3Qgc3RhcnRNb250aCA9IHN0YXJ0LmRhdGUuZ2V0TW9udGgoKTtcbiAgICBjb25zdCBlbmRNb250aCA9IGVuZC5kYXRlLmdldE1vbnRoKCk7XG4gICAgY29uc3Qgc3RhcnRZZWFyID0gc3RhcnQuZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgIGNvbnN0IGVuZFllYXIgPSBlbmQuZGF0ZS5nZXRGdWxsWWVhcigpO1xuXG4gICAgcmV0dXJuIHN0YXJ0RGF5ICE9PSBlbmREYXkgfHwgc3RhcnRNb250aCAhPT0gZW5kTW9udGggfHwgc3RhcnRZZWFyICE9PSBlbmRZZWFyO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZvcm1hdERhdGVSYW5nZSh0YXNrOiBBWFBUYXNrKTogc3RyaW5nIHtcbiAgICBpZiAodGFzay5hbGxEYXkpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKHRhc2suc3RhcnREYXRlKTtcbiAgICAgIGNvbnN0IGVuZCA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZSh0YXNrLmVuZERhdGUpO1xuXG4gICAgICBpZiAoc3RhcnQuZGF0ZS5nZXRUaW1lKCkgPT09IGVuZC5kYXRlLmdldFRpbWUoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXREYXRlKHRhc2suc3RhcnREYXRlKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhcnRGb3JtYXR0ZWQgPSB0aGlzLmZvcm1hdERhdGUodGFzay5zdGFydERhdGUpO1xuICAgICAgY29uc3QgZW5kRm9ybWF0dGVkID0gdGhpcy5mb3JtYXREYXRlKHRhc2suZW5kRGF0ZSk7XG5cbiAgICAgIGlmIChzdGFydC5kYXRlLmdldE1vbnRoKCkgPT09IGVuZC5kYXRlLmdldE1vbnRoKCkgJiYgc3RhcnQuZGF0ZS5nZXRGdWxsWWVhcigpID09PSBlbmQuZGF0ZS5nZXRGdWxsWWVhcigpKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0RGF5ID0gc3RhcnQuZGF0ZS5nZXREYXRlKCk7XG4gICAgICAgIGNvbnN0IGVuZERheSA9IGVuZC5kYXRlLmdldERhdGUoKTtcbiAgICAgICAgY29uc3QgbW9udGhZZWFyID0gc3RhcnQuZm9ybWF0KCdNTU0gWVlZWScpO1xuICAgICAgICByZXR1cm4gYCR7c3RhcnREYXl9IC0gJHtlbmREYXl9LCAke21vbnRoWWVhcn1gO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYCR7c3RhcnRGb3JtYXR0ZWR9IC0gJHtlbmRGb3JtYXR0ZWR9YDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc011bHRpRGF5KHRhc2spKSB7XG4gICAgICBjb25zdCBzdGFydEZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0RGF0ZVRpbWUodGFzay5zdGFydERhdGUpO1xuICAgICAgY29uc3QgZW5kRm9ybWF0dGVkID0gdGhpcy5mb3JtYXREYXRlVGltZSh0YXNrLmVuZERhdGUpO1xuICAgICAgcmV0dXJuIGAke3N0YXJ0Rm9ybWF0dGVkfSAtICR7ZW5kRm9ybWF0dGVkfWA7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0ZUZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0RGF0ZSh0YXNrLnN0YXJ0RGF0ZSk7XG4gICAgY29uc3QgdGltZVJhbmdlID0gYCR7dGhpcy5mb3JtYXRUaW1lKHRhc2suc3RhcnREYXRlKX0gLSAke3RoaXMuZm9ybWF0VGltZSh0YXNrLmVuZERhdGUpfWA7XG4gICAgcmV0dXJuIGAke2RhdGVGb3JtYXR0ZWR9ICR7dGltZVJhbmdlfWA7XG4gIH1cbn1cbiIsIjxheC1rYW5iYW5cbiAgW3N0YXR1c2VzXT1cInN0YXR1c2VzKClcIlxuICBbZGF0YVNvdXJjZV09XCJrYW5iYW5UYXNrcygpXCJcbiAgKG9uSXRlbUNsaWNrKT1cImhhbmRsZUl0ZW1DbGljaygkZXZlbnQpXCJcbiAgKG9uQmVmb3JlRHJvcCk9XCJvbkJlZm9yZURyb3AoJGV2ZW50KVwiXG4gIChvblNvcnRDaGFuZ2VkKT1cIm9uU29ydENoYW5nZWQoJGV2ZW50KVwiXG4+PC9heC1rYW5iYW4+XG5cbjwhLS0gVGFzayBEZXRhaWwgUG9wb3ZlciAoTW9kZXJuIEdvb2dsZSBDYWxlbmRhciBTdHlsZSkgLS0+XG48YXgtcG9wb3ZlclxuICAjdGFza1BvcG92ZXJcbiAgW29wZW5Pbl09XCInbWFudWFsJ1wiXG4gIFtjbG9zZU9uXT1cIidjbGlja091dCdcIlxuICBbb2Zmc2V0WV09XCIxMlwiXG4gIFtvZmZzZXRYXT1cIjEyXCJcbiAgW2FkYXB0aXZpdHlFbmFibGVkXT1cInRydWVcIlxuPlxuICA8ZGl2PlxuICAgIEBpZiAoc2VsZWN0ZWRUYXNrKCkpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJ0YXNrLXBvcG92ZXIgYXgtc2hhZG93LW1kIGF4LWJvcmRlclwiPlxuICAgICAgICA8IS0tIEhlYWRlciBTZWN0aW9uIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFzay1wb3BvdmVyX19oZWFkZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFzay1wb3BvdmVyX190aXRsZS1zZWN0aW9uXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFzay1wb3BvdmVyX190aXRsZS1yb3dcIj5cbiAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidGFzay1wb3BvdmVyX190aXRsZVwiIFt0aXRsZV09XCJzZWxlY3RlZFRhc2soKSEudGl0bGVcIj57eyBzZWxlY3RlZFRhc2soKSEudGl0bGUgfX08L2gzPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInRhc2stcG9wb3Zlcl9fY2xvc2UtYnRuXCIgKGNsaWNrKT1cImNsb3NlUG9wb3ZlcigpXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XG4gICAgICAgICAgICAgICAgPGF4LWljb24gY2xhc3M9XCJheC1pY29uIGF4LWljb24tY2xvc2VcIj48L2F4LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBAaWYgKHNlbGVjdGVkVGFzaygpIS5kZXNjcmlwdGlvbiAmJiAhY3VzdG9tQ29tcG9uZW50VHlwZSgpKSB7XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwidGFzay1wb3BvdmVyX19kZXNjcmlwdGlvblwiPnt7IHNlbGVjdGVkVGFzaygpIS5kZXNjcmlwdGlvbiB9fTwvcD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBDdXN0b20gQ29tcG9uZW50IG9yIERlZmF1bHQgQ29udGVudCAtLT5cbiAgICAgICAgQGlmIChjdXN0b21Db21wb25lbnRUeXBlKCkpIHtcbiAgICAgICAgICA8IS0tIEN1c3RvbSBDb21wb25lbnQgZnJvbSBQcm92aWRlciAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFzay1wb3BvdmVyX19jdXN0b20tY29udGVudFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdDb21wb25lbnRPdXRsZXQ9XCJjdXN0b21Db21wb25lbnRUeXBlKCkhOyBpbnB1dHM6IGN1c3RvbUNvbXBvbmVudElucHV0cygpIVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8IS0tIERlZmF1bHQgQ29udGVudCBTZWN0aW9uIC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YXNrLXBvcG92ZXJfX2NvbnRlbnRcIj5cbiAgICAgICAgICAgIDwhLS0gVGltZSAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YXNrLXBvcG92ZXJfX2luZm8taXRlbVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFzay1wb3BvdmVyX19pY29uXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1jbG9ja1wiPjwvaT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YXNrLXBvcG92ZXJfX2luZm8tY29udGVudFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGFzay1wb3BvdmVyX19pbmZvLXRleHRcIj57eyBmb3JtYXREYXRlUmFuZ2Uoc2VsZWN0ZWRUYXNrKCkhKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBTdGF0dXMgLS0+XG4gICAgICAgICAgICBAaWYgKHNlbGVjdGVkVGFzaygpIS5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhc2stcG9wb3Zlcl9faW5mby1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhc2stcG9wb3Zlcl9faWNvblwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1mbGFnXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YXNrLXBvcG92ZXJfX2luZm8tY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YXNrLXBvcG92ZXJfX2luZm8tdGV4dFwiPnt7IHNlbGVjdGVkVGFzaygpIS5zdGF0dXMudGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8IS0tIEFzc2lnbmVlIC0tPlxuICAgICAgICAgICAgQGlmIChzZWxlY3RlZFRhc2soKSEuYXNzaWduZWUpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhc2stcG9wb3Zlcl9faW5mby1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhc2stcG9wb3Zlcl9faWNvblwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS11c2VyXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YXNrLXBvcG92ZXJfX2luZm8tY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YXNrLXBvcG92ZXJfX2luZm8tdGV4dFwiPnt7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkVGFzaygpIS5hc3NpZ25lZT8uZnVsbE5hbWUgfHwgc2VsZWN0ZWRUYXNrKCkhLmFzc2lnbmVlPy51c2VybmFtZSB8fCAnVW5hc3NpZ25lZCdcbiAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPCEtLSBQcmlvcml0eSAtLT5cbiAgICAgICAgICAgIEBpZiAoc2VsZWN0ZWRUYXNrKCkhLnByaW9yaXR5KSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YXNrLXBvcG92ZXJfX2luZm8taXRlbVwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGFzay1wb3BvdmVyX19pY29uIHRhc2stcG9wb3Zlcl9faWNvbi0tcHJpb3JpdHlcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1wcmlvcml0eV09XCJzZWxlY3RlZFRhc2soKSEucHJpb3JpdHlcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtZXhjbGFtYXRpb24tY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YXNrLXBvcG92ZXJfX2luZm8tY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0YXNrLXBvcG92ZXJfX2luZm8tdGV4dCB0YXNrLXBvcG92ZXJfX3ByaW9yaXR5XCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1wcmlvcml0eV09XCJzZWxlY3RlZFRhc2soKSEucHJpb3JpdHlcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyBzZWxlY3RlZFRhc2soKSEucHJpb3JpdHkgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIEFjdGlvbnMgU2VjdGlvbiAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFzay1wb3BvdmVyX19hY3Rpb25zXCI+XG4gICAgICAgICAgICA8IS0tIFRhc2sgQWN0aW9ucyBmcm9tIFByb3ZpZGVyIC0tPlxuICAgICAgICAgICAgQGlmICh0YXNrQWN0aW9ucygpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhc2stcG9wb3Zlcl9fYWN0aW9ucy1ncm91cFwiPlxuICAgICAgICAgICAgICAgIDwhLS0gUHJpbWFyeSBBY3Rpb25zOiBJY29uLW9ubHkgYnV0dG9ucyAtLT5cbiAgICAgICAgICAgICAgICBAaWYgKHByaW1hcnlBY3Rpb25zKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgQGZvciAoYWN0aW9uIG9mIHByaW1hcnlBY3Rpb25zKCk7IHRyYWNrIGFjdGlvbi5uYW1lIHx8IGFjdGlvbi50aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICA8YXgtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgW2xvb2tdPVwiJ3NvbGlkJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImdldEFjdGlvbkNvbG9yKGFjdGlvbilcIlxuICAgICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImV4ZWN1dGVBY3Rpb24oYWN0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFjdGlvbi5kaXNhYmxlZCA9PT0gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwiYWN0aW9uLnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoYWN0aW9uLmljb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxheC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJhY3Rpb24uaWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9heC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8IS0tIFNlY29uZGFyeSBBY3Rpb25zOiBEcm9wZG93biB3aXRoIFwiLi4uXCIgYnV0dG9uIC0tPlxuICAgICAgICAgICAgICAgIEBpZiAoc2Vjb25kYXJ5QWN0aW9ucygpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIDxheC1idXR0b24gW2xvb2tdPVwiJ2JsYW5rJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICAgICAgICAgIDxheC1pY29uIGljb249XCJmYS1saWdodCBmYS1lbGxpcHNpcy12ZXJ0aWNhbFwiPjwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgICAgICAgICAgICAgIDxheC1kcm9wZG93bi1wYW5lbD5cbiAgICAgICAgICAgICAgICAgICAgICA8YXgtYnV0dG9uLWl0ZW0tbGlzdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGFjdGlvbiBvZiBzZWNvbmRhcnlBY3Rpb25zKCk7IHRyYWNrIGFjdGlvbi5uYW1lIHx8IGFjdGlvbi50aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8YXgtYnV0dG9uLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJhY3Rpb24udGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhY3Rpb24uZGlzYWJsZWQgPT09IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImV4ZWN1dGVBY3Rpb24oYWN0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGFjdGlvbi5pY29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXgtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiYWN0aW9uLmljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9heC1idXR0b24taXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8L2F4LWJ1dHRvbi1pdGVtLWxpc3Q+XG4gICAgICAgICAgICAgICAgICAgIDwvYXgtZHJvcGRvd24tcGFuZWw+XG4gICAgICAgICAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuPC9heC1wb3BvdmVyPlxuIl19","import { AXDataSource } from '@acorex/cdk/common';\nimport { AXDataTableModule } from '@acorex/components/data-table';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { afterNextRender, ChangeDetectionStrategy, Component, effect, inject, input, output, signal, untracked, viewChildren, ViewEncapsulation, } from '@angular/core';\nimport { AXMTaskBoardViewModel } from '../../task-board.viewmodel';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/components/data-table\";\nexport class AXMTaskBoardStatusGroupedGridViewComponent {\n #dataChanged;\n #providerChanged;\n #gridsChanged;\n constructor() {\n this.vm = inject(AXMTaskBoardViewModel);\n this.localeService = inject(AXLocaleService);\n this.calendarService = inject(AXCalendarService);\n this.provider = input(...(ngDevMode ? [undefined, { debugName: \"provider\" }] : []));\n this.dataSource = input.required(...(ngDevMode ? [{ debugName: \"dataSource\" }] : []));\n this.onActionClick = output();\n this.groupedTasks = signal([], ...(ngDevMode ? [{ debugName: \"groupedTasks\" }] : []));\n this.allFetchedTasks = signal([], ...(ngDevMode ? [{ debugName: \"allFetchedTasks\" }] : []));\n this.columns = signal([], ...(ngDevMode ? [{ debugName: \"columns\" }] : []));\n this.statuses = signal([], ...(ngDevMode ? [{ debugName: \"statuses\" }] : []));\n this.grids = viewChildren('grid', ...(ngDevMode ? [{ debugName: \"grids\" }] : []));\n this.#dataChanged = effect(async () => {\n // Track filter-related signals that affect the data source\n // When these change, the parent's filter() computed signal changes,\n // which means the data source function will return different results\n this.vm.selectedTaskTypeNames();\n this.vm.selectedAssigneeIds();\n this.vm.selectedReporterIds();\n this.vm.selectedPriorities();\n this.vm.currentDate();\n this.vm.daysCount();\n this.vm.currentViewMode();\n const parentDataSource = this.dataSource();\n const allStatuses = this.statuses();\n if (!parentDataSource || allStatuses.length === 0) {\n this.groupedTasks.set([]);\n this.allFetchedTasks.set([]);\n return;\n }\n const result = await parentDataSource();\n this.allFetchedTasks.set(result.items);\n const allTasks = result.items;\n const statusGroups = allStatuses.map((status) => {\n const tasksForStatus = allTasks.filter((task) => task.status.id === status.key);\n return {\n statusInfo: status,\n tasks: this.createTaskDataSourceForGroup(tasksForStatus),\n };\n });\n this.groupedTasks.set(statusGroups);\n untracked(() => {\n // Use afterRender to ensure data tables are rendered before refreshing\n setTimeout(() => {\n // Refresh data sources\n this.groupedTasks()?.forEach((group) => {\n group.tasks.refresh();\n });\n // Refresh data table components\n this.grids().forEach((grid) => {\n grid.refresh();\n });\n }, 0);\n });\n }, ...(ngDevMode ? [{ debugName: \"#dataChanged\" }] : []));\n this.#providerChanged = effect(async () => {\n const provider = this.vm.selectedTaskTypes()[0];\n provider?.getExtraFields().then((extraFields) => {\n if (extraFields) {\n this.columns.set(extraFields);\n }\n });\n provider?.getStatuses().then((statuses) => {\n if (statuses) {\n this.statuses.set(statuses);\n }\n });\n }, ...(ngDevMode ? [{ debugName: \"#providerChanged\" }] : []));\n this.#gridsChanged = effect(() => {\n // Track when groupedTasks changes to refresh grids\n const groups = this.groupedTasks();\n untracked(() => {\n // Wait for grids to be rendered\n setTimeout(() => {\n this.grids().forEach((grid) => {\n grid.refresh();\n });\n }, 100);\n });\n }, ...(ngDevMode ? [{ debugName: \"#gridsChanged\" }] : []));\n // Ensure data sources are refreshed after initial render\n afterNextRender(() => {\n untracked(() => {\n // Use a longer timeout to ensure data tables are fully rendered\n setTimeout(() => {\n // Refresh data sources\n this.groupedTasks()?.forEach((group) => {\n group.tasks.refresh();\n });\n // Refresh data table components\n this.grids().forEach((grid) => {\n grid.refresh();\n });\n }, 200);\n });\n });\n }\n createTaskDataSourceForGroup(tasks) {\n return new AXDataSource({\n load: async (e) => {\n const items = tasks.map((task) => ({\n id: task.id,\n data: task.data,\n title: task.title,\n priority: task.priority,\n description: task.description,\n reporter: task.reporter.fullName ?? '-',\n assignee: task.assignee?.fullName ?? 'unassigned',\n endDate: this.calendarService.format(task.endDate, 'DD/MM/YYYY HH:mm', {\n locale: this.localeService.activeProfile().calendar.system,\n }),\n startDate: this.calendarService.format(task.startDate, 'DD/MM/YYYY HH:mm', {\n locale: this.localeService.activeProfile().calendar.system,\n }),\n }));\n return {\n items: items.slice(e.skip, e.skip + e.take),\n total: items.length,\n };\n },\n pageSize: 5,\n key: 'id',\n byKey: async (key) => {\n return tasks.find((task) => task.id === key);\n },\n });\n }\n onActionClickHandler(e) {\n const task = this.allFetchedTasks().find((task) => task.id === e.data.id);\n if (!task)\n return;\n this.onActionClick.emit({ nativeEvent: e.nativeEvent, task });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMTaskBoardStatusGroupedGridViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.16\", type: AXMTaskBoardStatusGroupedGridViewComponent, isStandalone: true, selector: \"axm-task-board-status-grouped-grid-view\", inputs: { provider: { classPropertyName: \"provider\", publicName: \"provider\", isSignal: true, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: \"dataSource\", publicName: \"dataSource\", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { onActionClick: \"onActionClick\" }, viewQueries: [{ propertyName: \"grids\", predicate: [\"grid\"], descendants: true, isSignal: true }], ngImport: i0, template: \"@for (group of groupedTasks(); track group) {\\n <h1 class=\\\"ax-text-xl ax-font-bold\\\">{{ group.statusInfo.title }}</h1>\\n <ax-data-table\\n #grid\\n class=\\\"ax-h-[300px]\\\"\\n [fetchDataMode]=\\\"'manual'\\\"\\n [dataSource]=\\\"group.tasks\\\"\\n [loading]=\\\"{ enabled: true, animation: true }\\\"\\n >\\n <ax-text-column dataField=\\\"title\\\" caption=\\\"title\\\" [width]=\\\"'350px'\\\"></ax-text-column>\\n <ax-text-column dataField=\\\"description\\\" caption=\\\"description\\\" [width]=\\\"'500px'\\\"></ax-text-column>\\n <ax-text-column dataField=\\\"startDate\\\" caption=\\\"Start Date\\\" [width]=\\\"'150px'\\\"></ax-text-column>\\n <ax-text-column dataField=\\\"endDate\\\" caption=\\\"Due Date\\\" [width]=\\\"'150px'\\\"></ax-text-column>\\n <ax-text-column dataField=\\\"priority\\\" caption=\\\"priority\\\" [width]=\\\"'125px'\\\"></ax-text-column>\\n <ax-text-column dataField=\\\"reporter\\\" caption=\\\"Reporter\\\" [width]=\\\"'125px'\\\"></ax-text-column>\\n <ax-text-column dataField=\\\"assignee\\\" caption=\\\"Assignee\\\" [width]=\\\"'125px'\\\"></ax-text-column>\\n <ax-text-column dataField=\\\"priority\\\" caption=\\\"priority\\\" [width]=\\\"'125px'\\\"></ax-text-column>\\n\\n \\n\\n <ax-command-column\\n fixed=\\\"end\\\"\\n [width]=\\\"'60px'\\\"\\n (onItemClick)=\\\"onActionClickHandler($event)\\\"\\n [items]=\\\"[{ name: 'view', text: 'View', icon: 'ax-icon ax-icon-more-horizontal' }]\\\"\\n ></ax-command-column>\\n </ax-data-table>\\n}\\n\", styles: [\"ax-kanban{--ax-comp-kanban-status-min-width: 25rem;height:100%;line-height:1.5}\\n\"], dependencies: [{ kind: \"ngmodule\", type: AXDataTableModule }, { kind: \"component\", type: i1.AXDataTableComponent, selector: \"ax-data-table\", inputs: [\"dataSource\", \"selectedRows\", \"parentField\", \"rowDetailsTemplate\", \"rowTemplate\", \"emptyTemplate\", \"noDataTemplate\", \"alternative\", \"showHeader\", \"fixedHeader\", \"showFooter\", \"fixedFooter\", \"itemHeight\", \"allowReordering\", \"paging\", \"fetchDataMode\", \"loading\", \"focusedRow\"], outputs: [\"selectedRowsChange\", \"focusedRowChange\", \"onRowClick\", \"onRowDbClick\", \"onColumnsOrderChanged\", \"onColumnSizeChanged\", \"onPageChanged\"] }, { kind: \"component\", type: i1.AXDataTableTextColumnComponent, selector: \"ax-text-column\", inputs: [\"width\", \"caption\", \"allowSorting\", \"allowResizing\", \"fixed\", \"customExpandIcon\", \"customCollapseIcon\", \"dataField\", \"expandHandler\", \"wrapText\", \"cellTemplate\", \"footerTemplate\", \"headerTemplate\", \"format\", \"formatOptions\"] }, { kind: \"component\", type: i1.AXRowCommandColumnComponent, selector: \"ax-command-column\", inputs: [\"width\", \"caption\", \"fixed\", \"footerTemplate\", \"items\"], outputs: [\"onItemClick\"] }, { kind: \"ngmodule\", type: AXPWidgetCoreModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMTaskBoardStatusGroupedGridViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axm-task-board-status-grouped-grid-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [AXDataTableModule, AXPWidgetCoreModule], template: \"@for (group of groupedTasks(); track group) {\\n <h1 class=\\\"ax-text-xl ax-font-bold\\\">{{ group.statusInfo.title }}</h1>\\n <ax-data-table\\n #grid\\n class=\\\"ax-h-[300px]\\\"\\n [fetchDataMode]=\\\"'manual'\\\"\\n [dataSource]=\\\"group.tasks\\\"\\n [loading]=\\\"{ enabled: true, animation: true }\\\"\\n >\\n <ax-text-column dataField=\\\"title\\\" caption=\\\"title\\\" [width]=\\\"'350px'\\\"></ax-text-column>\\n <ax-text-column dataField=\\\"description\\\" caption=\\\"description\\\" [width]=\\\"'500px'\\\"></ax-text-column>\\n <ax-text-column dataField=\\\"startDate\\\" caption=\\\"Start Date\\\" [width]=\\\"'150px'\\\"></ax-text-column>\\n <ax-text-column dataField=\\\"endDate\\\" caption=\\\"Due Date\\\" [width]=\\\"'150px'\\\"></ax-text-column>\\n <ax-text-column dataField=\\\"priority\\\" caption=\\\"priority\\\" [width]=\\\"'125px'\\\"></ax-text-column>\\n <ax-text-column dataField=\\\"reporter\\\" caption=\\\"Reporter\\\" [width]=\\\"'125px'\\\"></ax-text-column>\\n <ax-text-column dataField=\\\"assignee\\\" caption=\\\"Assignee\\\" [width]=\\\"'125px'\\\"></ax-text-column>\\n <ax-text-column dataField=\\\"priority\\\" caption=\\\"priority\\\" [width]=\\\"'125px'\\\"></ax-text-column>\\n\\n \\n\\n <ax-command-column\\n fixed=\\\"end\\\"\\n [width]=\\\"'60px'\\\"\\n (onItemClick)=\\\"onActionClickHandler($event)\\\"\\n [items]=\\\"[{ name: 'view', text: 'View', icon: 'ax-icon ax-icon-more-horizontal' }]\\\"\\n ></ax-command-column>\\n </ax-data-table>\\n}\\n\", styles: [\"ax-kanban{--ax-comp-kanban-status-min-width: 25rem;height:100%;line-height:1.5}\\n\"] }]\n }], ctorParameters: () => [], propDecorators: { provider: [{ type: i0.Input, args: [{ isSignal: true, alias: \"provider\", required: false }] }], dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dataSource\", required: true }] }], onActionClick: [{ type: i0.Output, args: [\"onActionClick\"] }], grids: [{ type: i0.ViewChildren, args: ['grid', { isSignal: true }] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1ib2FyZC1zdGF0dXMtZ3JvdXBlZC1ncmlkLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3Rhc2stbWFuYWdlbWVudC9zcmMvbGliL2ZlYXR1cmVzL3Rhc2stYm9hcmQvdmlld3MvdGFzay1ib2FyZC1zdGF0dXMtZ3JvdXBlZC1ncmlkLXZpZXcvdGFzay1ib2FyZC1zdGF0dXMtZ3JvdXBlZC1ncmlkLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3Rhc2stbWFuYWdlbWVudC9zcmMvbGliL2ZlYXR1cmVzL3Rhc2stYm9hcmQvdmlld3MvdGFzay1ib2FyZC1zdGF0dXMtZ3JvdXBlZC1ncmlkLXZpZXcvdGFzay1ib2FyZC1zdGF0dXMtZ3JvdXBlZC1ncmlkLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFzQixZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RSxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFeEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRTFFLE9BQU8sRUFDTCxlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsRUFDVCxZQUFZLEVBQ1osaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7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UyxvQkFBb0IsQ0FBQyxDQUFxQjtRQUNsRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPO1FBQ2xCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNoRSxDQUFDOytHQWxKVSwwQ0FBMEM7bUdBQTFDLDBDQUEwQyxxZ0JDckN2RCxrNENBNEJBLDBJRE9ZLGlCQUFpQiwraENBQUUsbUJBQW1COzs0RkFFckMsMENBQTBDO2tCQVJ0RCxTQUFTOytCQUNFLHlDQUF5QyxtQkFHbEMsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxXQUM1QixDQUFDLGlCQUFpQixFQUFFLG1CQUFtQixDQUFDO2tXQWdCSSxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhCdXR0b25DbGlja0V2ZW50LCBBWERhdGFTb3VyY2UgfSBmcm9tICdAYWNvcmV4L2Nkay9jb21tb24nO1xuaW1wb3J0IHsgQVhEYXRhVGFibGVDb21wb25lbnQsIEFYRGF0YVRhYmxlTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RhdGEtdGFibGUnO1xuaW1wb3J0IHsgQVhLYW5iYW5TdGF0dXMgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMva2FuYmFuJztcbmltcG9ydCB7IEFYQ2FsZW5kYXJTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2RhdGUtdGltZSc7XG5pbXBvcnQgeyBBWExvY2FsZVNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvbG9jYWxlJztcbmltcG9ydCB7IEFYVHJhbnNsYXRvclBpcGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQVhQV2lkZ2V0Q29yZU1vZHVsZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L3dpZGdldC1jb3JlJztcbmltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBhZnRlck5leHRSZW5kZXIsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG4gIHVudHJhY2tlZCxcbiAgdmlld0NoaWxkcmVuLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFBFeHRyYUZpZWxkLCBBWFBUYXNrLCBBWFBUYXNrQWN0aW9uLCBBWFBUYXNrRmlsdGVyLCBBWFBXb3JrZmxvd1Rhc2tQcm92aWRlciB9IGZyb20gJy4uLy4uL3Rhc2stYm9hcmQudHlwZXMnO1xuaW1wb3J0IHsgQVhNVGFza0JvYXJkVmlld01vZGVsIH0gZnJvbSAnLi4vLi4vdGFzay1ib2FyZC52aWV3bW9kZWwnO1xuXG5pbnRlcmZhY2UgU3RhdHVzVGFza0dyb3VwIHtcbiAgc3RhdHVzSW5mbzogQVhLYW5iYW5TdGF0dXM7XG4gIHRhc2tzOiBBWERhdGFTb3VyY2U8YW55Pjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXhtLXRhc2stYm9hcmQtc3RhdHVzLWdyb3VwZWQtZ3JpZC12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Rhc2stYm9hcmQtc3RhdHVzLWdyb3VwZWQtZ3JpZC12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFzay1ib2FyZC1zdGF0dXMtZ3JvdXBlZC1ncmlkLXZpZXcuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGltcG9ydHM6IFtBWERhdGFUYWJsZU1vZHVsZSwgQVhQV2lkZ2V0Q29yZU1vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIEFYTVRhc2tCb2FyZFN0YXR1c0dyb3VwZWRHcmlkVmlld0NvbXBvbmVudCB7XG4gIHByb3RlY3RlZCByZWFkb25seSB2bSA9IGluamVjdChBWE1UYXNrQm9hcmRWaWV3TW9kZWwpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbG9jYWxlU2VydmljZSA9IGluamVjdChBWExvY2FsZVNlcnZpY2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2FsZW5kYXJTZXJ2aWNlID0gaW5qZWN0KEFYQ2FsZW5kYXJTZXJ2aWNlKTtcblxuICBwcm92aWRlciA9IGlucHV0PEFYUFdvcmtmbG93VGFza1Byb3ZpZGVyPigpO1xuICBkYXRhU291cmNlID0gaW5wdXQucmVxdWlyZWQ8KGZpbHRlcj86IEFYUFRhc2tGaWx0ZXIpID0+IFByb21pc2U8eyBpdGVtczogQVhQVGFza1tdOyB0b3RhbDogbnVtYmVyIH0+PigpO1xuXG4gIG9uQWN0aW9uQ2xpY2sgPSBvdXRwdXQ8QVhQVGFza0FjdGlvbj4oKTtcblxuICBncm91cGVkVGFza3MgPSBzaWduYWw8U3RhdHVzVGFza0dyb3VwW10+KFtdKTtcbiAgcHJpdmF0ZSBhbGxGZXRjaGVkVGFza3MgPSBzaWduYWw8QVhQVGFza1tdPihbXSk7XG4gIHByb3RlY3RlZCBjb2x1bW5zID0gc2lnbmFsPEFYUEV4dHJhRmllbGRbXT4oW10pO1xuICBwcm90ZWN0ZWQgc3RhdHVzZXMgPSBzaWduYWw8QVhLYW5iYW5TdGF0dXNbXT4oW10pO1xuICBwcm90ZWN0ZWQgZ3JpZHMgPSB2aWV3Q2hpbGRyZW48QVhEYXRhVGFibGVDb21wb25lbnQ+KCdncmlkJyk7XG5cbiAgI2RhdGFDaGFuZ2VkID0gZWZmZWN0KGFzeW5jICgpID0+IHtcbiAgICAvLyBUcmFjayBmaWx0ZXItcmVsYXRlZCBzaWduYWxzIHRoYXQgYWZmZWN0IHRoZSBkYXRhIHNvdXJjZVxuICAgIC8vIFdoZW4gdGhlc2UgY2hhbmdlLCB0aGUgcGFyZW50J3MgZmlsdGVyKCkgY29tcHV0ZWQgc2lnbmFsIGNoYW5nZXMsXG4gICAgLy8gd2hpY2ggbWVhbnMgdGhlIGRhdGEgc291cmNlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGRpZmZlcmVudCByZXN1bHRzXG4gICAgdGhpcy52bS5zZWxlY3RlZFRhc2tUeXBlTmFtZXMoKTtcbiAgICB0aGlzLnZtLnNlbGVjdGVkQXNzaWduZWVJZHMoKTtcbiAgICB0aGlzLnZtLnNlbGVjdGVkUmVwb3J0ZXJJZHMoKTtcbiAgICB0aGlzLnZtLnNlbGVjdGVkUHJpb3JpdGllcygpO1xuICAgIHRoaXMudm0uY3VycmVudERhdGUoKTtcbiAgICB0aGlzLnZtLmRheXNDb3VudCgpO1xuICAgIHRoaXMudm0uY3VycmVudFZpZXdNb2RlKCk7XG5cbiAgICBjb25zdCBwYXJlbnREYXRhU291cmNlID0gdGhpcy5kYXRhU291cmNlKCk7XG4gICAgY29uc3QgYWxsU3RhdHVzZXMgPSB0aGlzLnN0YXR1c2VzKCk7XG5cbiAgICBpZiAoIXBhcmVudERhdGFTb3VyY2UgfHwgYWxsU3RhdHVzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmdyb3VwZWRUYXNrcy5zZXQoW10pO1xuICAgICAgdGhpcy5hbGxGZXRjaGVkVGFza3Muc2V0KFtdKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwYXJlbnREYXRhU291cmNlKCk7XG4gICAgdGhpcy5hbGxGZXRjaGVkVGFza3Muc2V0KHJlc3VsdC5pdGVtcyk7XG4gICAgY29uc3QgYWxsVGFza3MgPSByZXN1bHQuaXRlbXM7XG5cbiAgICBjb25zdCBzdGF0dXNHcm91cHMgPSBhbGxTdGF0dXNlcy5tYXAoKHN0YXR1cykgPT4ge1xuICAgICAgY29uc3QgdGFza3NGb3JTdGF0dXMgPSBhbGxUYXNrcy5maWx0ZXIoKHRhc2spID0+IHRhc2suc3RhdHVzLmlkID09PSBzdGF0dXMua2V5KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1c0luZm86IHN0YXR1cyxcbiAgICAgICAgdGFza3M6IHRoaXMuY3JlYXRlVGFza0RhdGFTb3VyY2VGb3JHcm91cCh0YXNrc0ZvclN0YXR1cyksXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgdGhpcy5ncm91cGVkVGFza3Muc2V0KHN0YXR1c0dyb3Vwcyk7XG4gICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgIC8vIFVzZSBhZnRlclJlbmRlciB0byBlbnN1cmUgZGF0YSB0YWJsZXMgYXJlIHJlbmRlcmVkIGJlZm9yZSByZWZyZXNoaW5nXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgLy8gUmVmcmVzaCBkYXRhIHNvdXJjZXNcbiAgICAgICAgdGhpcy5ncm91cGVkVGFza3MoKT8uZm9yRWFjaCgoZ3JvdXApID0+IHtcbiAgICAgICAgICBncm91cC50YXNrcy5yZWZyZXNoKCk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBSZWZyZXNoIGRhdGEgdGFibGUgY29tcG9uZW50c1xuICAgICAgICB0aGlzLmdyaWRzKCkuZm9yRWFjaCgoZ3JpZCkgPT4ge1xuICAgICAgICAgIGdyaWQucmVmcmVzaCgpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIDApO1xuICAgIH0pO1xuICB9KTtcblxuICAjcHJvdmlkZXJDaGFuZ2VkID0gZWZmZWN0KGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwcm92aWRlciA9IHRoaXMudm0uc2VsZWN0ZWRUYXNrVHlwZXMoKVswXTtcbiAgICBwcm92aWRlcj8uZ2V0RXh0cmFGaWVsZHMoKS50aGVuKChleHRyYUZpZWxkcykgPT4ge1xuICAgICAgaWYgKGV4dHJhRmllbGRzKSB7XG4gICAgICAgIHRoaXMuY29sdW1ucy5zZXQoZXh0cmFGaWVsZHMpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHByb3ZpZGVyPy5nZXRTdGF0dXNlcygpLnRoZW4oKHN0YXR1c2VzKSA9PiB7XG4gICAgICBpZiAoc3RhdHVzZXMpIHtcbiAgICAgICAgdGhpcy5zdGF0dXNlcy5zZXQoc3RhdHVzZXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICAjZ3JpZHNDaGFuZ2VkID0gZWZmZWN0KCgpID0+IHtcbiAgICAvLyBUcmFjayB3aGVuIGdyb3VwZWRUYXNrcyBjaGFuZ2VzIHRvIHJlZnJlc2ggZ3JpZHNcbiAgICBjb25zdCBncm91cHMgPSB0aGlzLmdyb3VwZWRUYXNrcygpO1xuICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAvLyBXYWl0IGZvciBncmlkcyB0byBiZSByZW5kZXJlZFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuZ3JpZHMoKS5mb3JFYWNoKChncmlkKSA9PiB7XG4gICAgICAgICAgZ3JpZC5yZWZyZXNoKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgMTAwKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gRW5zdXJlIGRhdGEgc291cmNlcyBhcmUgcmVmcmVzaGVkIGFmdGVyIGluaXRpYWwgcmVuZGVyXG4gICAgYWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIC8vIFVzZSBhIGxvbmdlciB0aW1lb3V0IHRvIGVuc3VyZSBkYXRhIHRhYmxlcyBhcmUgZnVsbHkgcmVuZGVyZWRcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgLy8gUmVmcmVzaCBkYXRhIHNvdXJjZXNcbiAgICAgICAgICB0aGlzLmdyb3VwZWRUYXNrcygpPy5mb3JFYWNoKChncm91cCkgPT4ge1xuICAgICAgICAgICAgZ3JvdXAudGFza3MucmVmcmVzaCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIC8vIFJlZnJlc2ggZGF0YSB0YWJsZSBjb21wb25lbnRzXG4gICAgICAgICAgdGhpcy5ncmlkcygpLmZvckVhY2goKGdyaWQpID0+IHtcbiAgICAgICAgICAgIGdyaWQucmVmcmVzaCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LCAyMDApO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVRhc2tEYXRhU291cmNlRm9yR3JvdXAodGFza3M6IEFYUFRhc2tbXSk6IEFYRGF0YVNvdXJjZTxhbnk+IHtcbiAgICByZXR1cm4gbmV3IEFYRGF0YVNvdXJjZTxhbnk+KHtcbiAgICAgIGxvYWQ6IGFzeW5jIChlKSA9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGFza3MubWFwKCh0YXNrKSA9PiAoe1xuICAgICAgICAgIGlkOiB0YXNrLmlkLFxuICAgICAgICAgIGRhdGE6IHRhc2suZGF0YSxcbiAgICAgICAgICB0aXRsZTogdGFzay50aXRsZSxcbiAgICAgICAgICBwcmlvcml0eTogdGFzay5wcmlvcml0eSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogdGFzay5kZXNjcmlwdGlvbixcbiAgICAgICAgICByZXBvcnRlcjogdGFzay5yZXBvcnRlci5mdWxsTmFtZSA/PyAnLScsXG4gICAgICAgICAgYXNzaWduZWU6IHRhc2suYXNzaWduZWU/LmZ1bGxOYW1lID8/ICd1bmFzc2lnbmVkJyxcbiAgICAgICAgICBlbmREYXRlOiB0aGlzLmNhbGVuZGFyU2VydmljZS5mb3JtYXQodGFzay5lbmREYXRlLCAnREQvTU0vWVlZWSBISDptbScsIHtcbiAgICAgICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGVTZXJ2aWNlLmFjdGl2ZVByb2ZpbGUoKS5jYWxlbmRhci5zeXN0ZW0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgc3RhcnREYXRlOiB0aGlzLmNhbGVuZGFyU2VydmljZS5mb3JtYXQodGFzay5zdGFydERhdGUsICdERC9NTS9ZWVlZIEhIOm1tJywge1xuICAgICAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZVNlcnZpY2UuYWN0aXZlUHJvZmlsZSgpLmNhbGVuZGFyLnN5c3RlbSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSkpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGl0ZW1zOiBpdGVtcy5zbGljZShlLnNraXAsIGUuc2tpcCArIGUudGFrZSksXG4gICAgICAgICAgdG90YWw6IGl0ZW1zLmxlbmd0aCxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICBwYWdlU2l6ZTogNSxcbiAgICAgIGtleTogJ2lkJyxcbiAgICAgIGJ5S2V5OiBhc3luYyAoa2V5OiB1bmtub3duKSA9PiB7XG4gICAgICAgIHJldHVybiB0YXNrcy5maW5kKCh0YXNrKSA9PiB0YXNrLmlkID09PSBrZXkpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkFjdGlvbkNsaWNrSGFuZGxlcihlOiBBWEJ1dHRvbkNsaWNrRXZlbnQpIHtcbiAgICBjb25zdCB0YXNrID0gdGhpcy5hbGxGZXRjaGVkVGFza3MoKS5maW5kKCh0YXNrKSA9PiB0YXNrLmlkID09PSBlLmRhdGEuaWQpO1xuICAgIGlmICghdGFzaykgcmV0dXJuO1xuICAgIHRoaXMub25BY3Rpb25DbGljay5lbWl0KHsgbmF0aXZlRXZlbnQ6IGUubmF0aXZlRXZlbnQsIHRhc2sgfSk7XG4gIH1cbn1cbiIsIkBmb3IgKGdyb3VwIG9mIGdyb3VwZWRUYXNrcygpOyB0cmFjayBncm91cCkge1xuICA8aDEgY2xhc3M9XCJheC10ZXh0LXhsIGF4LWZvbnQtYm9sZFwiPnt7IGdyb3VwLnN0YXR1c0luZm8udGl0bGUgfX08L2gxPlxuICA8YXgtZGF0YS10YWJsZVxuICAgICNncmlkXG4gICAgY2xhc3M9XCJheC1oLVszMDBweF1cIlxuICAgIFtmZXRjaERhdGFNb2RlXT1cIidtYW51YWwnXCJcbiAgICBbZGF0YVNvdXJjZV09XCJncm91cC50YXNrc1wiXG4gICAgW2xvYWRpbmddPVwieyBlbmFibGVkOiB0cnVlLCBhbmltYXRpb246IHRydWUgfVwiXG4gID5cbiAgICA8YXgtdGV4dC1jb2x1bW4gZGF0YUZpZWxkPVwidGl0bGVcIiBjYXB0aW9uPVwidGl0bGVcIiBbd2lkdGhdPVwiJzM1MHB4J1wiPjwvYXgtdGV4dC1jb2x1bW4+XG4gICAgPGF4LXRleHQtY29sdW1uIGRhdGFGaWVsZD1cImRlc2NyaXB0aW9uXCIgY2FwdGlvbj1cImRlc2NyaXB0aW9uXCIgW3dpZHRoXT1cIic1MDBweCdcIj48L2F4LXRleHQtY29sdW1uPlxuICAgIDxheC10ZXh0LWNvbHVtbiBkYXRhRmllbGQ9XCJzdGFydERhdGVcIiBjYXB0aW9uPVwiU3RhcnQgRGF0ZVwiIFt3aWR0aF09XCInMTUwcHgnXCI+PC9heC10ZXh0LWNvbHVtbj5cbiAgICA8YXgtdGV4dC1jb2x1bW4gZGF0YUZpZWxkPVwiZW5kRGF0ZVwiIGNhcHRpb249XCJEdWUgRGF0ZVwiIFt3aWR0aF09XCInMTUwcHgnXCI+PC9heC10ZXh0LWNvbHVtbj5cbiAgICA8YXgtdGV4dC1jb2x1bW4gZGF0YUZpZWxkPVwicHJpb3JpdHlcIiBjYXB0aW9uPVwicHJpb3JpdHlcIiBbd2lkdGhdPVwiJzEyNXB4J1wiPjwvYXgtdGV4dC1jb2x1bW4+XG4gICAgPGF4LXRleHQtY29sdW1uIGRhdGFGaWVsZD1cInJlcG9ydGVyXCIgY2FwdGlvbj1cIlJlcG9ydGVyXCIgW3dpZHRoXT1cIicxMjVweCdcIj48L2F4LXRleHQtY29sdW1uPlxuICAgIDxheC10ZXh0LWNvbHVtbiBkYXRhRmllbGQ9XCJhc3NpZ25lZVwiIGNhcHRpb249XCJBc3NpZ25lZVwiIFt3aWR0aF09XCInMTI1cHgnXCI+PC9heC10ZXh0LWNvbHVtbj5cbiAgICA8YXgtdGV4dC1jb2x1bW4gZGF0YUZpZWxkPVwicHJpb3JpdHlcIiBjYXB0aW9uPVwicHJpb3JpdHlcIiBbd2lkdGhdPVwiJzEyNXB4J1wiPjwvYXgtdGV4dC1jb2x1bW4+XG5cbiAgXG5cbiAgICA8YXgtY29tbWFuZC1jb2x1bW5cbiAgICAgIGZpeGVkPVwiZW5kXCJcbiAgICAgIFt3aWR0aF09XCInNjBweCdcIlxuICAgICAgKG9uSXRlbUNsaWNrKT1cIm9uQWN0aW9uQ2xpY2tIYW5kbGVyKCRldmVudClcIlxuICAgICAgW2l0ZW1zXT1cIlt7IG5hbWU6ICd2aWV3JywgdGV4dDogJ1ZpZXcnLCBpY29uOiAnYXgtaWNvbiBheC1pY29uLW1vcmUtaG9yaXpvbnRhbCcgfV1cIlxuICAgID48L2F4LWNvbW1hbmQtY29sdW1uPlxuICA8L2F4LWRhdGEtdGFibGU+XG59XG4iXX0=","import { AXAccordionCdkModule } from '@acorex/cdk/accordion';\nimport { AXAccordionModule } from '@acorex/components/accordion';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXCalendarComponent } from '@acorex/components/calendar';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownPanelComponent } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXMenuModule, } from '@acorex/components/menu';\nimport { AXPopoverModule } from '@acorex/components/popover';\nimport { AXSelectionListModule } from '@acorex/components/selection-list';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXUnsubscriber } from '@acorex/core/utils';\nimport { AXPDeviceService } from '@acorex/platform/core';\nimport { AXPThemeLayoutBlockComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutStartSideComponent, } from '@acorex/platform/layout/components';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal, viewChild, ViewEncapsulation, } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, NavigationEnd, Router, RouterModule } from '@angular/router';\nimport { filter, startWith } from 'rxjs';\nimport { RootConfig } from '../../const';\nimport { AXMTaskBoardDetailPanel } from './task-board-detail-panel/task-board-detail-panel.component';\nimport { AXMTaskBoardFiltersComponent } from './task-board-filters/task-board-filters.component';\nimport { AXPTaskBoardService } from './task-board.service';\nimport { AXMTaskBoardViewModel } from './task-board.viewmodel';\nimport { AXMTaskBoardCalendarViewComponent } from './views/task-board-calendar-view/task-board-calendar-view.component';\nimport { AXMTaskBoardGridViewComponent } from './views/task-board-grid-view/task-board-grid-view.component';\nimport { AXMTaskBoardKanbanViewComponent } from './views/task-board-kanban-view/task-board-kanban-view.component';\nimport { AXMTaskBoardStatusGroupedGridViewComponent } from './views/task-board-status-grouped-grid-view/task-board-status-grouped-grid-view.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/forms\";\nimport * as i2 from \"@angular/common\";\nimport * as i3 from \"@acorex/components/menu\";\nimport * as i4 from \"@acorex/components/button\";\nimport * as i5 from \"@acorex/core/translation\";\nimport * as i6 from \"@acorex/components/decorators\";\nimport * as i7 from \"@acorex/components/loading\";\nimport * as i8 from \"@acorex/components/badge\";\nimport * as i9 from \"@acorex/cdk/accordion\";\nimport * as i10 from \"@acorex/components/selection-list\";\nexport class AXMTaskBoardPage extends AXPPageLayoutBaseComponent {\n constructor() {\n super(...arguments);\n this.router = inject(Router);\n this.rootConfig = RootConfig;\n this.deviceService = inject(AXPDeviceService);\n this.vm = inject(AXMTaskBoardViewModel);\n this.unsubscribe = inject(AXUnsubscriber);\n this.activatedRoute = inject(ActivatedRoute);\n this.localeService = inject(AXLocaleService);\n this.calendarService = inject(AXCalendarService);\n this.taskBoardService = inject(AXPTaskBoardService);\n this.popover = viewChild('popover', ...(ngDevMode ? [{ debugName: \"popover\" }] : []));\n this.calendar = viewChild('calendar', ...(ngDevMode ? [{ debugName: \"calendar\" }] : []));\n this.sidebarCalendar = viewChild('sidebarCalendar', ...(ngDevMode ? [{ debugName: \"sidebarCalendar\" }] : []));\n this.isReady = signal(false, ...(ngDevMode ? [{ debugName: \"isReady\" }] : []));\n this.taskTypes = signal([], ...(ngDevMode ? [{ debugName: \"taskTypes\" }] : []));\n this.calendarEventTypes = signal([], ...(ngDevMode ? [{ debugName: \"calendarEventTypes\" }] : []));\n this.resources = signal([], ...(ngDevMode ? [{ debugName: \"resources\" }] : []));\n this.isQueryParam = signal(false, ...(ngDevMode ? [{ debugName: \"isQueryParam\" }] : []));\n this.taskTypeAccordionCollapsed = signal(false, ...(ngDevMode ? [{ debugName: \"taskTypeAccordionCollapsed\" }] : []));\n this.calendarEventTypeAccordionCollapsed = signal(false, ...(ngDevMode ? [{ debugName: \"calendarEventTypeAccordionCollapsed\" }] : []));\n this.currentTask = signal(null, ...(ngDevMode ? [{ debugName: \"currentTask\" }] : []));\n this.currentViewMode = signal('calendar', ...(ngDevMode ? [{ debugName: \"currentViewMode\" }] : []));\n this.schedulerComponent = signal(null, ...(ngDevMode ? [{ debugName: \"schedulerComponent\" }] : []));\n this.dayCellTemplateRef = viewChild('dayCellTemplate', ...(ngDevMode ? [{ debugName: \"dayCellTemplateRef\" }] : []));\n this.dayCellTemplate = computed(() => this.dayCellTemplateRef(), ...(ngDevMode ? [{ debugName: \"dayCellTemplate\" }] : []));\n this.dayDataCache = signal(new Map(), ...(ngDevMode ? [{ debugName: \"dayDataCache\" }] : []));\n this.menuItems = signal([\n {\n key: 'calendar',\n text: 'calendar',\n icon: 'fa-light fa-calendar-day',\n children: [\n { key: 'day', text: 'daily', icon: 'fa-light fa-calendar-day' },\n { key: 'week', text: 'weekly', icon: 'fa-light fa-calendar-week' },\n { key: 'month', text: 'monthly', icon: 'fa-light fa-calendar-alt' },\n { key: 'agenda', text: 'agenda', icon: 'fa-light fa-calendar-range' },\n ],\n },\n {\n key: 'timeline',\n text: 'timeline',\n icon: 'fa-light fa-list-timeline',\n children: [\n { key: 'timeline-day', text: 'daily-timeline', icon: 'fa-light fa-calendar-day' },\n { key: 'timeline-multi-day', text: 'multi-day-timeline', icon: 'fa-light fa-calendar-week' },\n { key: 'timeline-month', text: 'monthly-timeline', icon: 'fa-light fa-calendar-alt' },\n { key: 'timeline-year', text: 'yearly-timeline', icon: 'fa-light fa-calendar-range' },\n ],\n },\n {\n key: 'table',\n text: 'table',\n icon: 'fa-light fa-table',\n children: [\n { key: 'grid', text: 'grid', icon: 'fa-light fa-table' },\n { key: 'status-grouped-grid', text: 'status-grouped-grid', icon: 'fa-light fa-table' },\n ],\n },\n { key: 'kanban', text: 'kanban', icon: 'fa-light fa-chart-kanban' },\n ], ...(ngDevMode ? [{ debugName: \"menuItems\" }] : []));\n this.calendarType = computed(() => this.localeService.activeProfile().calendar.system, ...(ngDevMode ? [{ debugName: \"calendarType\" }] : []));\n this.todayButtonText = computed(() => {\n switch (this.vm.currentViewMode()) {\n case 'day':\n case 'grid':\n case 'agenda':\n case 'kanban':\n case 'timeline-day':\n case 'timeline-multi-day':\n case 'status-grouped-grid':\n return 'Today';\n case 'week':\n return 'Current week';\n case 'month':\n case 'timeline-month':\n return 'Current month';\n case 'timeline-year':\n return 'Current year';\n }\n }, ...(ngDevMode ? [{ debugName: \"todayButtonText\" }] : []));\n this.timeText = computed(() => {\n if (this.vm.currentViewMode() === 'grid' ||\n this.vm.currentViewMode() === 'kanban' ||\n this.vm.currentViewMode() === 'status-grouped-grid') {\n const currentDate = this.vm.currentDate();\n if (!currentDate) {\n return '';\n }\n const start = this.calendarService.create(currentDate, this.localeService.activeProfile().calendar.system);\n const end = start.add('day', this.vm.daysCount() - 1);\n const startText = start.format('DD MMMM yyyy', { locale: this.localeService.activeProfile().calendar.system });\n const endText = end.format('DD MMMM yyyy', { locale: this.localeService.activeProfile().calendar.system });\n return `${startText} - ${endText}`;\n }\n return this.schedulerComponent()?.currentDateText() || '';\n }, ...(ngDevMode ? [{ debugName: \"timeText\" }] : []));\n this.calendarDepth = computed(() => {\n if (this.vm.currentViewMode() === 'grid' ||\n this.vm.currentViewMode() === 'kanban' ||\n this.vm.currentViewMode() === 'status-grouped-grid') {\n return 'day';\n }\n return this.schedulerComponent()?.calendarDepth() || 'day';\n }, ...(ngDevMode ? [{ debugName: \"calendarDepth\" }] : []));\n this.currentDateForCalendar = computed(() => {\n const date = this.vm.currentDate();\n return date || new Date();\n }, ...(ngDevMode ? [{ debugName: \"currentDateForCalendar\" }] : []));\n this.selectedViewMode = computed(() => {\n const currentMode = this.vm.currentViewMode();\n for (const category of this.menuItems()) {\n if (category.key === currentMode) {\n return { key: category.key, text: category.text, icon: category.icon };\n }\n if (category.children) {\n const foundChild = category.children.find((child) => child.key === currentMode);\n if (foundChild) {\n return foundChild;\n }\n }\n }\n const firstCategory = this.menuItems()[0];\n return firstCategory.children\n ? firstCategory.children[0]\n : { key: firstCategory.key, text: firstCategory.text, icon: firstCategory.icon };\n }, ...(ngDevMode ? [{ debugName: \"selectedViewMode\" }] : []));\n this.filter = computed(() => {\n const taskTypeNames = this.vm.selectedTaskTypeNames();\n // When nothing is selected (empty array), we want to show NO types\n // The service treats empty/undefined types as \"show all providers\"\n // To show none when nothing is selected, we pass a non-existent type name\n // This ensures filteredProviders.length === 0, resulting in empty results\n const types = taskTypeNames.length > 0 ? taskTypeNames : ['__NONE__'];\n const assigneeIds = this.vm.selectedAssigneeIds();\n const reporterIds = this.vm.selectedReporterIds();\n const priorities = this.vm.selectedPriorities();\n const currentDate = this.vm.currentDate() || new Date();\n let from = this.calendarService.create(currentDate, this.localeService.activeProfile().calendar.system);\n let end;\n const currentView = this.vm.currentViewMode();\n if (currentView === 'grid' ||\n currentView === 'kanban' ||\n currentView === 'agenda' ||\n currentView === 'timeline-multi-day' ||\n currentView === 'status-grouped-grid') {\n end = from.add('day', this.vm.daysCount() - 1);\n }\n else if (currentView === 'month' || currentView === 'timeline-month') {\n from = from.startOf('month');\n end = from.endOf('month');\n }\n else {\n end = from.endOf('day');\n }\n return {\n // Always include types - empty array means show no types, non-empty means show only selected types\n types,\n ...(assigneeIds.length > 0 && { assigneeIds }),\n ...(reporterIds.length > 0 && { reporterIds }),\n ...(priorities.length > 0 && { priorities }),\n range: { from: from.date, end: end.date },\n };\n }, ...(ngDevMode ? [{ debugName: \"filter\" }] : []));\n this.contextMenu = viewChild('rootContextMenu', ...(ngDevMode ? [{ debugName: \"contextMenu\" }] : []));\n this.schedulerDataSource = (filter) => {\n const finalFilter = { ...this.filter(), ...filter };\n return this.taskBoardService.getTasks(finalFilter).then((result) => {\n this.validateSelectedTask(result.items);\n return result.items;\n });\n };\n this.gridDataSource = (filter) => {\n const finalFilter = { ...this.filter(), ...filter };\n return this.taskBoardService.getTasks(finalFilter).then((result) => {\n this.validateSelectedTask(result.items);\n return result;\n });\n };\n this.resolvedTasks = signal([], ...(ngDevMode ? [{ debugName: \"resolvedTasks\" }] : []));\n this.eff = effect(async () => {\n const viewMode = this.vm.currentViewMode();\n const filter = this.filter();\n if (viewMode === 'kanban') {\n await this.taskResolveHandler(filter);\n }\n }, ...(ngDevMode ? [{ debugName: \"eff\" }] : []));\n this.refreshEffect = effect(() => {\n this.vm.selectedTaskTypeNames();\n this.getResources();\n this.schedulerComponent()?.refresh();\n }, ...(ngDevMode ? [{ debugName: \"refreshEffect\" }] : []));\n this.calendarEventTypeRefreshEffect = effect(() => {\n this.vm.selectedCalendarEventTypeIds();\n // Refresh calendar view to update holidays when event types change\n this.schedulerComponent()?.refresh();\n }, ...(ngDevMode ? [{ debugName: \"calendarEventTypeRefreshEffect\" }] : []));\n this.dayDataCacheEffect = effect(async () => {\n // Update cache when filters or date change\n this.vm.currentDate();\n this.vm.selectedTaskTypeNames();\n this.vm.selectedCalendarEventTypeIds();\n await this.updateDayDataCache();\n }, ...(ngDevMode ? [{ debugName: \"dayDataCacheEffect\" }] : []));\n this.rangeBasedViews = [\n 'grid',\n 'kanban',\n 'agenda',\n 'status-grouped-grid',\n 'timeline-multi-day',\n ];\n this.getCellClass = (date) => {\n const currentView = this.vm.currentViewMode();\n const selectionStartDate = this.vm.rangeStartDate();\n if (this.rangeBasedViews.includes(currentView)) {\n if (selectionStartDate) {\n const axSelectionStartDate = this.calendarService.create(selectionStartDate);\n if (date.equal(axSelectionStartDate, 'day')) {\n return 'ax-range-start ax-range-end';\n }\n return null;\n }\n const fromRange = this.calendarService.create(this.vm.currentDate());\n const endRange = fromRange.add('day', this.vm.daysCount() - 1);\n const isStart = date.equal(fromRange, 'day');\n const isEnd = date.equal(endRange, 'day');\n if (isStart && isEnd)\n return 'ax-range-start ax-range-end';\n if (isStart)\n return 'ax-range-start';\n if (isEnd)\n return 'ax-range-end';\n if (date.compare(fromRange, 'day') > 0 && date.compare(endRange, 'day') < 0) {\n return 'ax-range-between';\n }\n return null;\n }\n if (currentView === 'week') {\n const from = this.calendarService.create(this.vm.currentDate());\n const end = from.add('day', 6);\n if (date.equal(from, 'day'))\n return 'ax-range-start';\n if (date.equal(end, 'day'))\n return 'ax-range-end';\n if (date.compare(from, 'day') > 0 && date.compare(end, 'day') < 0) {\n return 'ax-range-between';\n }\n }\n return null;\n };\n this.taskTypeItems = computed(() => {\n return this.taskTypes().map((taskType) => ({\n id: taskType.name,\n text: taskType.title,\n icon: taskType.icon,\n }));\n }, ...(ngDevMode ? [{ debugName: \"taskTypeItems\" }] : []));\n // Check if current view mode is kanban, grid, or status-grouped-grid\n this.isNonCalendarView = computed(() => {\n const mode = this.vm.currentViewMode();\n return mode === 'kanban' || mode === 'grid' || mode === 'status-grouped-grid';\n }, ...(ngDevMode ? [{ debugName: \"isNonCalendarView\" }] : []));\n this.selectedTaskTypeValues = computed(() => {\n const values = this.vm.selectedTaskTypeNames();\n // If in radio mode (non-calendar view), return only the first value or empty array\n if (this.isNonCalendarView() && values.length > 0) {\n return [values[0]];\n }\n return values;\n }, ...(ngDevMode ? [{ debugName: \"selectedTaskTypeValues\" }] : []));\n this.calendarEventTypeItems = computed(() => {\n return this.calendarEventTypes().map((eventType) => ({\n id: eventType.id,\n text: eventType.title,\n icon: eventType.icon,\n color: eventType.color,\n }));\n }, ...(ngDevMode ? [{ debugName: \"calendarEventTypeItems\" }] : []));\n this.selectedCalendarEventTypeValues = computed(() => {\n return this.vm.selectedCalendarEventTypeIds();\n }, ...(ngDevMode ? [{ debugName: \"selectedCalendarEventTypeValues\" }] : []));\n }\n async ngOnInit() {\n await super.ngOnInit();\n await this.vm.initialize();\n // Load task types for checkbox filter\n const types = await this.taskBoardService.getTaskTypes();\n this.taskTypes.set(types);\n // Load calendar event types for checkbox filter\n const eventTypes = await this.taskBoardService.getCalendarEventTypes();\n this.calendarEventTypes.set(eventTypes.map((et) => ({\n id: et.id,\n title: et.title,\n })));\n // Initialize day data cache\n await this.updateDayDataCache();\n this.router.events\n .pipe(this.unsubscribe.takeUntilDestroy, filter((event) => event instanceof NavigationEnd), startWith(null))\n .subscribe(async () => {\n await this.loadFromRoute();\n if (!this.isReady()) {\n this.isReady.set(true);\n }\n });\n this.taskBoardService.refresh$.subscribe(async () => {\n await this.taskResolveHandler();\n await this.getResources();\n });\n }\n async getPageTitle() {\n return await this.translateService.translateAsync('@task-management:task-board.page-title');\n }\n async getPageBreadcrumbs() {\n return [\n {\n title: await this.translateService.translateAsync('@task-management:root-menu'),\n },\n ];\n }\n async taskResolveHandler(filter = this.filter()) {\n const result = await this.taskBoardService.getTasks(filter);\n this.validateSelectedTask(result.items);\n this.resolvedTasks.set(result.items);\n }\n schedulerComponentChanged(component) {\n this.schedulerComponent.set(component);\n }\n async handleContextMenuOnOpening(event) {\n const currentTask = this.currentTask();\n if (!currentTask)\n return;\n const providerName = currentTask.provider;\n if (!providerName)\n return;\n const provider = this.taskBoardService.getProvider(providerName);\n if (!provider)\n return;\n const actions = await provider.getActions(currentTask);\n for (const item of actions) {\n event.items.push({\n text: item.title,\n icon: item.icon,\n color: item.color,\n break: item.break,\n data: {\n command: item.command,\n },\n });\n }\n }\n handleContextMenu(event) {\n this.currentTask.set(event.task);\n const x = event.nativeEvent.clientX;\n const y = event.nativeEvent.clientY;\n const element = event.nativeEvent.target;\n this.contextMenu()?.showAt({ x, y }, element);\n }\n handleMonthSlotDblClicked(date) {\n this.vm.setCurrentDate(date);\n this.vm.setViewMode('day');\n }\n handleViewChange(view, dropdownPanel) {\n this.router.navigate([], { queryParams: { view } });\n this.vm.setViewMode(view);\n this.popover()?.close();\n dropdownPanel.close();\n }\n async updateDayDataCache() {\n const currentDate = this.vm.currentDate();\n const monthStart = this.calendarService.create(currentDate).startOf('month').date;\n const monthEnd = this.calendarService.create(currentDate).endOf('month').date;\n // Get tasks for the month\n const tasks = await this.taskBoardService.getTasks({\n ...this.filter(),\n range: { from: monthStart, end: monthEnd },\n });\n // Get events for the month\n const selectedEventTypeIds = this.vm.selectedCalendarEventTypeIds();\n // Pass selected calendar IDs (can be empty array to show no events)\n const events = await this.taskBoardService.getEvents({ from: monthStart, end: monthEnd }, selectedEventTypeIds);\n // Create a map of day -> count\n const dayCountMap = new Map();\n // Count tasks per day\n tasks.items.forEach((task) => {\n const taskStart = new Date(task.startDate);\n const taskEnd = new Date(task.endDate);\n const startDay = this.calendarService.create(taskStart).startOf('day');\n const endDay = this.calendarService.create(taskEnd).startOf('day');\n let currentDay = startDay;\n while (currentDay.compare(endDay, 'day') <= 0) {\n const dayKey = currentDay.format('YYYY-MM-DD');\n dayCountMap.set(dayKey, (dayCountMap.get(dayKey) || 0) + 1);\n currentDay = currentDay.add('day', 1);\n }\n });\n // Count events per day\n events.forEach((event) => {\n const eventDate = new Date(event.date);\n const dayKey = this.calendarService.create(eventDate).format('YYYY-MM-DD');\n dayCountMap.set(dayKey, (dayCountMap.get(dayKey) || 0) + 1);\n });\n this.dayDataCache.set(dayCountMap);\n this.sidebarCalendar()?.render();\n }\n getDayDataCount(date) {\n if (!date) {\n return 0;\n }\n try {\n // Get the native Date object from AXDateTime\n const dateObj = date.date || date._date;\n if (!dateObj) {\n return 0;\n }\n // Create a new AXDateTime from the date object for consistent formatting\n const nativeDate = dateObj instanceof Date ? dateObj : new Date(dateObj);\n const axDate = this.calendarService.create(nativeDate);\n const dayKey = axDate.format('YYYY-MM-DD');\n return this.dayDataCache().get(dayKey) || 0;\n }\n catch (error) {\n console.warn('Error getting day data count:', error);\n return 0;\n }\n }\n handleContextMenuItemClick(event) {\n this.taskBoardService.executeCommand(event.item.data?.command, this.currentTask()?.provider ?? '');\n }\n changeDate(forward) {\n const date = this.calendarService.create(this.vm.currentDate(), this.localeService.activeProfile().calendar.system);\n switch (this.vm.currentViewMode()) {\n case 'day':\n case 'timeline-day':\n this.vm.setCurrentDate(date.add('day', forward ? 1 : -1).date);\n break;\n case 'week':\n this.vm.setCurrentDate(date.add('week', forward ? 1 : -1).date);\n break;\n case 'grid':\n case 'agenda':\n case 'kanban':\n case 'timeline-multi-day':\n case 'status-grouped-grid':\n this.vm.setCurrentDate(date.add('day', forward ? this.vm.daysCount() : -this.vm.daysCount()).date);\n break;\n case 'month':\n case 'timeline-month':\n this.vm.setCurrentDate(date.add('month', forward ? 1 : -1).date);\n break;\n case 'timeline-year':\n this.vm.setCurrentDate(date.add('year', forward ? 1 : -1).date);\n break;\n }\n this.popover()?.close();\n this.calendar()?.render();\n this.sidebarCalendar()?.render();\n }\n handleCalendarSlotClick(event) {\n if (event.component.activeView !== event.component.depth)\n return;\n const clickedDate = event.item;\n const currentView = this.vm.currentViewMode();\n if (this.rangeBasedViews.includes(currentView)) {\n const selectionStartDate = this.vm.rangeStartDate();\n if (!selectionStartDate) {\n // Clear any previous range selection before starting a new one\n this.vm.setDaysCount(7); // Reset to default\n this.vm.setRangeStartDate(clickedDate);\n this.calendar()?.render();\n this.sidebarCalendar()?.render();\n return;\n }\n const date1 = selectionStartDate.getTime();\n const date2 = clickedDate.getTime();\n const newStartDate = new Date(Math.min(date1, date2));\n const newEndDate = new Date(Math.max(date1, date2));\n const differenceInDays = this.calculateDifferenceInDays(newStartDate, newEndDate);\n // Clear any previous range selection state first to remove any other selection\n this.vm.setRangeStartDate(null);\n // Set the new range selection\n this.vm.setCurrentDate(newStartDate);\n this.vm.setDaysCount(differenceInDays);\n this.calendar()?.render();\n this.sidebarCalendar()?.render();\n this.popover()?.close();\n return;\n }\n let dateToSet = new Date(clickedDate);\n if (currentView === 'week') {\n const day = dateToSet.getDay();\n const weekStart = this.localeService.activeProfile().calendar.week.startsOn;\n let daysToSubtract = day - weekStart;\n if (daysToSubtract < 0) {\n daysToSubtract += 7;\n }\n dateToSet.setDate(dateToSet.getDate() - daysToSubtract);\n }\n this.vm.setCurrentDate(dateToSet);\n this.popover()?.close();\n this.calendar()?.render();\n this.sidebarCalendar()?.render();\n }\n /**\n * Helper function to calculate the difference in whole days between two dates.\n * The result is inclusive (e.g., May 5 to May 6 is a 2-day range).\n */\n calculateDifferenceInDays(start, end) {\n if (!start || !end) {\n return 1;\n }\n const startDate = new Date(start.getFullYear(), start.getMonth(), start.getDate());\n const endDate = new Date(end.getFullYear(), end.getMonth(), end.getDate());\n const timeDifference = endDate.getTime() - startDate.getTime();\n const daysDifference = Math.round(timeDifference / (1000 * 3600 * 24));\n return daysDifference + 1;\n }\n handleTodayClick() {\n this.vm.setRangeStartDate(null);\n let currentDate;\n if (this.vm.currentViewMode() === 'week') {\n currentDate = this.calendarService\n .create(new Date(), this.localeService.activeProfile().calendar.system)\n .startOf('week').date;\n }\n else {\n currentDate = new Date();\n }\n this.vm.setCurrentDate(currentDate);\n this.popover()?.close();\n this.calendar()?.render();\n this.sidebarCalendar()?.render();\n }\n handleTaskTypeSelectionChange(selectedValues) {\n // Convert single value to array if needed (for radio mode)\n const values = Array.isArray(selectedValues) ? selectedValues : selectedValues ? [selectedValues] : [];\n // If nothing is selected, pass empty array to show no types\n this.vm.setSelectedTaskTypeNames(values, this.isQueryParam());\n }\n handleCalendarEventTypeSelectionChange(selectedValues) {\n // If nothing is selected, pass empty array to show no types\n this.vm.setSelectedCalendarEventTypeIds(selectedValues || [], this.isQueryParam());\n // Refresh calendar view to update holidays\n this.schedulerComponent()?.refresh();\n }\n async loadFromRoute() {\n const snapshot = this.activatedRoute.snapshot.queryParamMap;\n const view = snapshot.get('view') ?? null;\n const allValidViews = this.menuItems().flatMap((c) => (c.children ? c.children.map((child) => child.key) : c.key));\n if (view && allValidViews.includes(view)) {\n this.vm.setViewMode(view);\n }\n else if (!this.vm.currentViewMode()) {\n this.vm.setViewMode('day');\n }\n const type = snapshot.getAll('type');\n const assignee = snapshot.getAll('assignee');\n const reporter = snapshot.getAll('reporter');\n const priority = snapshot.getAll('priority');\n if (type.length || assignee.length || priority.length || reporter.length) {\n this.isQueryParam.set(true);\n this.vm.setSelectedTaskTypeNames(type, true);\n this.vm.setSelectedAssigneeIds(assignee, true);\n this.vm.setSelectedReporterIds(reporter, true);\n this.vm.setSelectedPriorities(priority, true);\n }\n const dateRange = snapshot.get('dateRange');\n if (dateRange) {\n const range = this.taskBoardService.rangeCalculator(dateRange);\n if (range) {\n this.vm.setCurrentDate(range.from);\n this.vm.setDaysCount(this.calculateDifferenceInDays(range.from, range.end));\n switch (dateRange) {\n case 'today':\n this.vm.setViewMode('day');\n break;\n case 'this-week':\n this.vm.setViewMode('week');\n this.vm.setRangeStartDate(range.from);\n break;\n case 'this-month':\n this.vm.setViewMode('month');\n break;\n }\n }\n }\n }\n /**\n * Checks if the currently selected task is still present in the list of visible tasks.\n * If not, it clears the selection to prevent showing details for a hidden task.\n * @param visibleTasks The new array of tasks that will be displayed.\n */\n validateSelectedTask(visibleTasks) {\n const currentSelectedTask = this.vm.selectedTask();\n // Proceed only if a task is actually selected\n if (currentSelectedTask) {\n // Check if any task in the new list has the same ID as the selected one\n const isSelectedTaskVisible = visibleTasks.some((task) => task.id === currentSelectedTask.id);\n // If the selected task is NOT in the new list, clear the selection.\n if (!isSelectedTaskVisible) {\n this.vm.selectTask(null);\n }\n }\n }\n async getResources() {\n if (this.vm.selectedTaskTypeNames().length !== 1) {\n this.resources.set([]);\n return;\n }\n const resources = await this.taskBoardService.getResources(this.vm.selectedTaskTypeNames()[0] ?? '');\n this.resources.set(resources);\n }\n log(message) {\n console.log(message);\n }\n // protected layout = viewChild(AXPPageLayoutComponent);\n toggleStartSide() {\n this.layout()?.toggleStartSide();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMTaskBoardPage, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.16\", type: AXMTaskBoardPage, isStandalone: true, selector: \"ng-component\", providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMTaskBoardPage,\n },\n ], viewQueries: [{ propertyName: \"popover\", first: true, predicate: [\"popover\"], descendants: true, isSignal: true }, { propertyName: \"calendar\", first: true, predicate: [\"calendar\"], descendants: true, isSignal: true }, { propertyName: \"sidebarCalendar\", first: true, predicate: [\"sidebarCalendar\"], descendants: true, isSignal: true }, { propertyName: \"dayCellTemplateRef\", first: true, predicate: [\"dayCellTemplate\"], descendants: true, isSignal: true }, { propertyName: \"contextMenu\", first: true, predicate: [\"rootContextMenu\"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: \"<axp-page-layout *translate=\\\"let t\\\">\\n <axp-layout-start-side class=\\\"ax-border-e ax-lightest-surface ax-h-full\\\">\\n <axp-layout-header class=\\\"ax-p-4 ax-border-b\\\">\\n <ng-container *ngTemplateOutlet=\\\"viewSelectorTemplate; context: { location: 'sidebar' }\\\"></ng-container>\\n </axp-layout-header>\\n\\n <axp-layout-content class=\\\"ax-flex ax-flex-col ax-min-h-0 ax-overflow-y-auto\\\">\\n <div class=\\\"ax-p-4 ax-flex ax-flex-col ax-gap-6\\\">\\n <div class=\\\"ax-flex ax-flex-col ax-gap-3\\\">\\n <!-- <h3 class=\\\"ax-text-sm ax-font-semibold ax-text-neutral-800 ax-uppercase ax-tracking-wide\\\">\\n {{ (t('task-board.terms.calendar', { scope: rootConfig.config.i18n}) | async) }}\\n </h3> -->\\n <ax-calendar\\n #sidebarCalendar\\n [type]=\\\"calendarType()\\\"\\n [depth]=\\\"calendarDepth()\\\"\\n [cellClass]=\\\"getCellClass\\\"\\n [ngModel]=\\\"currentDateForCalendar()\\\"\\n [dayCellTemplate]=\\\"dayCellTemplate\\\"\\n class=\\\"ax-single-range-calendar ax-border ax-rounded-lg\\\"\\n (onSlotClick)=\\\"handleCalendarSlotClick($event)\\\"\\n >\\n </ax-calendar>\\n </div>\\n\\n <div axAccordionGroup [accordion]=\\\"false\\\">\\n <!-- <div\\n class=\\\"ax-mb-2 ax-w-full ax-border ax-p-2 ax-rounded-lg\\\"\\n axAccordionItem\\n #taskTypeAccordion=\\\"axAccordionItem\\\"\\n >\\n <div\\n class=\\\"ax-flex ax-items-center ax-justify-between ax-gap-2 ax-select-none ax-cursor-pointer\\\"\\n axAccordionItemHeader\\n >\\n <h3 class=\\\"ax-text-sm ax-font-semibold\\\">\\n {{ (t('task-board.filter.task-type', { scope: rootConfig.config.i18n}) | async)! }}\\n </h3>\\n <ax-icon\\n [icon]=\\\"taskTypeAccordion?.isCollapsed() ? 'fa-light fa-chevron-down' : 'fa-light fa-chevron-up'\\\"\\n class=\\\"ax-transition-transform\\\"\\n ></ax-icon>\\n </div>\\n <div axAccordionItemContent>\\n <div class=\\\"ax-pt-2\\\">\\n <ax-selection-list\\n [items]=\\\"taskTypeItems()\\\"\\n [ngModel]=\\\"selectedTaskTypeValues()\\\"\\n (onValueChanged)=\\\"handleTaskTypeSelectionChange($event.value)\\\"\\n direction=\\\"vertical\\\"\\n [multiple]=\\\"!isNonCalendarView()\\\"\\n [showControl]=\\\"true\\\"\\n valueField=\\\"id\\\"\\n textField=\\\"text\\\"\\n >\\n <ng-template #itemTemplate let-item>\\n <div class=\\\"ax-flex ax-items-center\\\">\\n @if (item.icon) {\\n <i [class]=\\\"item.icon\\\"></i>\\n }\\n <span [class]=\\\"item.icon ? 'ax-ml-2' : ''\\\">{{ item.text }}</span>\\n </div>\\n </ng-template>\\n </ax-selection-list>\\n </div>\\n </div>\\n </div> -->\\n <div\\n class=\\\"ax-mb-2 ax-w-full ax-border ax-p-2 ax-rounded-lg\\\"\\n axAccordionItem\\n #calendarFilterTypeAccordion=\\\"axAccordionItem\\\"\\n >\\n <div\\n class=\\\"ax-flex ax-items-center ax-justify-between ax-gap-2 ax-select-none ax-cursor-pointer\\\"\\n axAccordionItemHeader\\n >\\n <h3 class=\\\"ax-text-sm ax-font-semibold\\\">\\n {{ ('@task-management:task-board.filter.title-plural' | translate | async)! }}\\n </h3>\\n <ax-icon\\n [icon]=\\\"calendarFilterTypeAccordion?.isCollapsed() ? 'fa-light fa-chevron-down' : 'fa-light fa-chevron-up'\\\"\\n class=\\\"ax-transition-transform\\\"\\n ></ax-icon>\\n </div>\\n <div axAccordionItemContent>\\n <axm-task-board-filters #filtersComponent [isQueryParam]=\\\"isQueryParam()\\\"></axm-task-board-filters>\\n </div>\\n </div>\\n @if (!isNonCalendarView()) {\\n <div\\n class=\\\"ax-mb-2 ax-w-full ax-border ax-p-2 ax-rounded-lg\\\"\\n axAccordionItem\\n #calendarEventTypeAccordion=\\\"axAccordionItem\\\"\\n >\\n <div\\n class=\\\"ax-flex ax-items-center ax-justify-between ax-gap-2 ax-select-none ax-cursor-pointer\\\"\\n axAccordionItemHeader\\n >\\n <h3 class=\\\"ax-text-sm ax-font-semibold\\\">\\n {{ ('@task-management:task-board.filter.calendars' | translate | async)! }}\\n </h3>\\n <ax-icon\\n [icon]=\\\"calendarEventTypeAccordion?.isCollapsed() ? 'fa-light fa-chevron-down' : 'fa-light fa-chevron-up'\\\"\\n class=\\\"ax-transition-transform\\\"\\n ></ax-icon>\\n </div>\\n <div axAccordionItemContent>\\n <div class=\\\"ax-pt-2\\\">\\n <ax-selection-list\\n [items]=\\\"calendarEventTypeItems()\\\"\\n [ngModel]=\\\"selectedCalendarEventTypeValues()\\\"\\n (onValueChanged)=\\\"handleCalendarEventTypeSelectionChange($event.value)\\\"\\n direction=\\\"vertical\\\"\\n [multiple]=\\\"true\\\"\\n [showControl]=\\\"true\\\"\\n valueField=\\\"id\\\"\\n textField=\\\"text\\\"\\n >\\n <ng-template #itemTemplate let-item>\\n <div class=\\\"ax-flex ax-items-center\\\">\\n @if (item.icon) {\\n <i [class]=\\\"item.icon\\\"></i>\\n }\\n <span [class]=\\\"item.icon ? 'ax-ml-2' : ''\\\">{{ item.text }}</span>\\n </div>\\n </ng-template>\\n </ax-selection-list>\\n </div>\\n </div>\\n </div>\\n }\\n </div>\\n </div>\\n </axp-layout-content>\\n </axp-layout-start-side>\\n <axp-page-toolbar>\\n <axp-layout-prefix class=\\\"sm:ax-flex-row ax-flex-col ax-items-start\\\">\\n <div class=\\\"ax-scheduler-header ax-w-max ax-sm sm:ax-md\\\">\\n <ax-button look=\\\"blank\\\" (onClick)=\\\"changeDate(false)\\\">\\n <ax-icon class=\\\"ax-icon ax-text-xl ax-icon-chevron-left arrow-icon\\\"></ax-icon>\\n </ax-button>\\n <ax-button look=\\\"blank\\\" [text]=\\\"timeText()\\\" #date></ax-button>\\n <ax-button look=\\\"blank\\\" (onClick)=\\\"changeDate(true)\\\">\\n <ax-icon class=\\\"ax-icon ax-text-xl ax-icon-chevron-right arrow-icon\\\"></ax-icon>\\n </ax-button>\\n <!-- <ax-popover [target]=\\\"date\\\" [placement]=\\\"'bottom'\\\" #popover [adaptivityEnabled]=\\\"true\\\">\\n <div class=\\\"ax-overlay-pane\\\">\\n <ax-calendar\\n #calendar\\n [type]=\\\"calendarType()\\\"\\n [depth]=\\\"calendarDepth()\\\"\\n [cellClass]=\\\"getCellClass\\\"\\n [ngModel]=\\\"vm.currentDate()\\\"\\n class=\\\"ax-single-range-calendar\\\"\\n (onSlotClick)=\\\"handleCalendarSlotClick($event)\\\"\\n >\\n <ax-footer>\\n <ax-button\\n look=\\\"link\\\"\\n color=\\\"primary\\\"\\n [text]=\\\"todayButtonText()\\\"\\n (onClick)=\\\"handleTodayClick()\\\"\\n ></ax-button>\\n </ax-footer>\\n </ax-calendar>\\n </div>\\n </ax-popover> -->\\n </div>\\n </axp-layout-prefix>\\n\\n <axp-layout-suffix>\\n @if (deviceService.isSmall()) {\\n <ax-button id=\\\"axp-toolbar-btn-filters\\\" (onClick)=\\\"toggleStartSide()\\\" [iconOnly]=\\\"true\\\" [color]=\\\"'default'\\\">\\n <i class=\\\"fa-light fa-bars\\\"></i>\\n </ax-button>\\n }\\n <!-- @if (!deviceService.isSmall()) {\\n <ng-container *ngTemplateOutlet=\\\"viewSelectorTemplate; context: { location: 'toolbar' }\\\"></ng-container>\\n } -->\\n\\n <!-- @if(deviceService.isLarge()) {\\n <ax-button (onClick)=\\\"vm.toggleDetailPanel()\\\">\\n <ax-icon icon=\\\"{{ vm.isDetailPanelOpen() ? 'fa-solid fa-square-info' : 'fa-light fa-square-info' }}\\\"></ax-icon>\\n </ax-button>\\n } -->\\n </axp-layout-suffix>\\n </axp-page-toolbar>\\n <axp-page-content class=\\\"ax-flex ax-flex-row ax-gap-2\\\">\\n @if (isReady()) { @switch(vm.currentViewMode()) { @case('kanban') {\\n <axm-task-board-kanban-view\\n class=\\\"axp-kanban-container ax-h-full ax-w-full ax-min-w-0\\\"\\n [tasks]=\\\"resolvedTasks()\\\"\\n (onTaskClick)=\\\"vm.selectTask($event)\\\"\\n (onActionClick)=\\\"handleContextMenu($event)\\\"\\n ></axm-task-board-kanban-view>\\n } @case('grid') {\\n <axm-task-board-grid-view\\n class=\\\"ax-h-full ax-w-full ax-min-w-0\\\"\\n [dataSource]=\\\"gridDataSource\\\"\\n (onTaskClick)=\\\"vm.selectTask($event)\\\"\\n (onActionClick)=\\\"handleContextMenu($event)\\\"\\n ></axm-task-board-grid-view>\\n } @case('status-grouped-grid') {\\n <axm-task-board-status-grouped-grid-view\\n class=\\\"ax-flex ax-flex-col ax-gap-2 ax-w-full ax-min-w-0\\\"\\n [dataSource]=\\\"gridDataSource\\\"\\n (onActionClick)=\\\"handleContextMenu($event)\\\"\\n ></axm-task-board-status-grouped-grid-view>\\n } @default {\\n <axm-task-board-calendar-view\\n class=\\\"axp-scheduler-container ax-h-full ax-w-full ax-min-w-0\\\"\\n [resources]=\\\"resources()\\\"\\n [startingDate]=\\\"vm.currentDate()\\\"\\n [dataSource]=\\\"schedulerDataSource\\\"\\n (onTaskClick)=\\\"vm.selectTask($event)\\\"\\n [selectedView]=\\\"vm.currentViewMode()\\\"\\n (onActionClick)=\\\"handleContextMenu($event)\\\"\\n (onTaskRightClick)=\\\"handleContextMenu($event)\\\"\\n (component)=\\\"schedulerComponentChanged($event)\\\"\\n (onMonthSlotDblClicked)=\\\"handleMonthSlotDblClicked($event)\\\"\\n ></axm-task-board-calendar-view>\\n } }\\n <ax-context-menu\\n #rootContextMenu\\n [closeOn]=\\\"'leave'\\\"\\n [orientation]=\\\"'vertical'\\\"\\n (onOpening)=\\\"handleContextMenuOnOpening($event)\\\"\\n (onItemClick)=\\\"handleContextMenuItemClick($event)\\\"\\n >\\n </ax-context-menu>\\n @if (vm.isDetailPanelOpen() && deviceService.isLarge()) {\\n <axm-task-board-detail-panel></axm-task-board-detail-panel>\\n } } @else {\\n <div class=\\\"ax-flex ax-items-center ax-justify-center ax-w-full ax-h-full\\\">\\n <ax-loading></ax-loading>\\n </div>\\n }\\n </axp-page-content>\\n</axp-page-layout>\\n\\n<ng-template #viewSelectorTemplate let-location=\\\"location\\\">\\n @if (location === 'sidebar') {\\n <ax-button\\n [text]=\\\"('@task-management:task-board.view.' + selectedViewMode().text | translate | async)!\\\"\\n class=\\\"ax-w-full\\\"\\n >\\n <ax-prefix><ax-icon [icon]=\\\"selectedViewMode().icon\\\"></ax-icon></ax-prefix>\\n <ax-dropdown-panel #sidebarDropdownPanel>\\n <ax-menu [orientation]=\\\"'vertical'\\\" class=\\\"ax-menu-container\\\">\\n @for (category of menuItems(); track category.key) {\\n <ng-container>\\n @if (category.children && category.children.length > 0) {\\n <ax-menu-item>\\n <ax-prefix>\\n <ax-icon [icon]=\\\"category.icon\\\"></ax-icon>\\n </ax-prefix>\\n <ax-text>{{ ('@task-management:task-board.' + category.text | translate | async)! }}</ax-text>\\n @for (child of category.children; track child.key) {\\n <ax-menu-item (onClick)=\\\"handleViewChange(child.key, sidebarDropdownPanel)\\\">\\n <ax-prefix>\\n <ax-icon [icon]=\\\"child.icon\\\"></ax-icon>\\n </ax-prefix>\\n <ax-text>{{ ('@task-management:task-board.view.' + child.text | translate | async)! }}</ax-text>\\n </ax-menu-item>\\n }\\n </ax-menu-item>\\n } @else {\\n <ax-menu-item (onClick)=\\\"handleViewChange(category.key, sidebarDropdownPanel)\\\">\\n <ax-prefix>\\n <ax-icon [icon]=\\\"category.icon\\\"></ax-icon>\\n </ax-prefix>\\n <ax-text>{{ ('@task-management:task-board.' + category.text | translate | async)! }}</ax-text>\\n </ax-menu-item>\\n }\\n </ng-container>\\n }\\n </ax-menu>\\n </ax-dropdown-panel>\\n <ax-suffix>\\n <ax-icon icon=\\\"fa-light fa-caret-down\\\"></ax-icon>\\n </ax-suffix>\\n </ax-button>\\n } @else {\\n <ax-button [text]=\\\"('@task-management:task-board.view.' + selectedViewMode().text | translate | async)!\\\">\\n <ax-prefix><ax-icon [icon]=\\\"selectedViewMode().icon\\\"></ax-icon></ax-prefix>\\n <ax-dropdown-panel #toolbarDropdownPanel>\\n <ax-menu [orientation]=\\\"'vertical'\\\" class=\\\"ax-menu-container\\\">\\n @for (category of menuItems(); track category.key) {\\n <ng-container>\\n @if (category.children && category.children.length > 0) {\\n <ax-menu-item>\\n <ax-prefix>\\n <ax-icon [icon]=\\\"category.icon\\\"></ax-icon>\\n </ax-prefix>\\n <ax-text>{{ ('@task-management:task-board.' + category.text | translate | async)! }}</ax-text>\\n @for (child of category.children; track child.key) {\\n <ax-menu-item (onClick)=\\\"handleViewChange(child.key, toolbarDropdownPanel)\\\">\\n <ax-prefix>\\n <ax-icon [icon]=\\\"child.icon\\\"></ax-icon>\\n </ax-prefix>\\n <ax-text>{{ ('@task-management:task-board.view.' + child.text | translate | async)! }}</ax-text>\\n </ax-menu-item>\\n }\\n </ax-menu-item>\\n } @else {\\n <ax-menu-item (onClick)=\\\"handleViewChange(category.key, toolbarDropdownPanel)\\\">\\n <ax-prefix>\\n <ax-icon [icon]=\\\"category.icon\\\"></ax-icon>\\n </ax-prefix>\\n <ax-text>{{ ('@task-management:task-board.' + category.text | translate | async)! }}</ax-text>\\n </ax-menu-item>\\n }\\n </ng-container>\\n }\\n </ax-menu>\\n </ax-dropdown-panel>\\n <ax-suffix>\\n <ax-icon icon=\\\"fa-light fa-caret-down\\\"></ax-icon>\\n </ax-suffix>\\n </ax-button>\\n }\\n</ng-template>\\n\\n<ng-template #dayCellTemplate let-slot>\\n <div\\n class=\\\"ax-flex ax-flex-col ax-items-center ax-justify-between ax-w-full ax-gap-1\\\"\\n [style.padding-bottom]=\\\"'0.25rem'\\\"\\n >\\n <span class=\\\"ax-flex-1 ax-text-center\\\">{{ slot.slot.text ?? slot.slot.date?.day ?? '' }}</span>\\n @if (slot.slot.date && getDayDataCount(slot.slot.date) > 0) {\\n <ax-badge color=\\\"warning\\\"></ax-badge>\\n }\\n </div>\\n</ng-template>\\n\", styles: [\"html[dir=rtl] axp-page-layout axp-page-toolbar axp-layout-prefix .ax-scheduler-header .arrow-icon:before{-moz-transform:scale(-1,1);-webkit-transform:scale(-1,1);-o-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scaleX(-1)}.ax-single-range-calendar .ax-range-start,.ax-single-range-calendar .ax-range-end{color:rgba(var(--ax-sys-color-on-primary-surface))!important;background-color:rgba(var(--ax-sys-color-primary-surface),.85)!important}.ax-single-range-calendar .ax-range-start:hover,.ax-single-range-calendar .ax-range-end:hover{background-color:rgba(var(--ax-sys-color-primary-surface))!important}.ax-single-range-calendar .ax-range-start.ax-state-holiday,.ax-single-range-calendar .ax-range-end.ax-state-holiday{background-color:rgba(var(--ax-sys-color-danger-surface),.85)!important}.ax-single-range-calendar .ax-range-between{color:rgba(var(--ax-sys-color-on-primary-surface))!important;background-color:rgba(var(--ax-sys-color-primary-surface),.65)}.ax-single-range-calendar .ax-range-between.ax-state-holiday{background-color:rgba(var(--ax-sys-color-danger-surface),.65)}.ax-single-range-calendar ax-footer{display:flex;justify-content:center;border-color:rgba(var(--ax-comp-calendar-view-header-border-color));border-top-width:var(--ax-comp-calendar-view-header-border-width, 1px)}axp-page-content:not(:has(axm-task-board-status-grouped-grid-view,axm-task-board-time-grouped-grid-view)){overflow-y:hidden}\\n\"], dependencies: [{ kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i2.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"ngmodule\", type: RouterModule }, { kind: \"ngmodule\", type: \n //\n AXMenuModule }, { kind: \"component\", type: i3.AXMenuItemComponent, selector: \"ax-menu-item\", inputs: [\"name\", \"data\", \"disabled\", \"color\"], outputs: [\"onClick\"] }, { kind: \"component\", type: i3.AXMenuComponent, selector: \"ax-menu\", inputs: [\"orientation\", \"openOn\", \"closeOn\", \"items\", \"hasArrow\"], outputs: [\"onItemClick\"] }, { kind: \"component\", type: i3.AXContextMenuComponent, selector: \"ax-context-menu\", inputs: [\"orientation\", \"openOn\", \"closeOn\", \"items\", \"target\"], outputs: [\"onItemClick\", \"onOpening\"] }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i4.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"ngmodule\", type: AXDropdownButtonModule }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"directive\", type: i5.AXTranslatorDirective, selector: \"[translate]\" }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i6.AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"component\", type: i6.AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"ngmodule\", type: AXLoadingModule }, { kind: \"component\", type: i7.AXLoadingComponent, selector: \"ax-loading\", inputs: [\"visible\", \"type\", \"context\"], outputs: [\"visibleChange\"] }, { kind: \"ngmodule\", type: AXBreadcrumbsModule }, { kind: \"ngmodule\", type: AXBadgeModule }, { kind: \"component\", type: i8.AXBadgeComponent, selector: \"ax-badge\", inputs: [\"color\", \"look\", \"text\"] }, { kind: \"ngmodule\", type: AXAccordionModule }, { kind: \"ngmodule\", type: AXAccordionCdkModule }, { kind: \"directive\", type: i9.AXAccordionGroupDirective, selector: \"[axAccordionGroup]\", inputs: [\"accordion\", \"activeIndex\", \"collapsedOnItemClick\"], exportAs: [\"axAccordionGroup\"] }, { kind: \"directive\", type: i9.AXAccordionItemContentDirective, selector: \"[axAccordionItemContent]\", inputs: [\"transition\"], exportAs: [\"axAccordionItemContent\"] }, { kind: \"directive\", type: i9.AXAccordionItemHeaderDirective, selector: \"[axAccordionItemHeader]\", exportAs: [\"axAccordionItemHeader\"] }, { kind: \"directive\", type: i9.AXAccordionItemDirective, selector: \"[axAccordionItem]\", inputs: [\"isCollapsed\"], outputs: [\"isCollapsedChange\", \"onClick\"], exportAs: [\"axAccordionItem\"] }, { kind: \"component\", type: \n //\n AXPThemeLayoutBlockComponent, selector: \" axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, \" }, { kind: \"component\", type: AXPPageLayoutComponent, selector: \"axp-page-layout\" }, { kind: \"component\", type: AXMTaskBoardCalendarViewComponent, selector: \"axm-task-board-calendar-view\", inputs: [\"resources\", \"startingDate\", \"selectedView\", \"dataSource\"], outputs: [\"onTaskClick\", \"onTaskChanged\", \"onMonthSlotDblClicked\", \"onActionClick\", \"component\", \"onTaskRightClick\", \"onRangeChanged\"] }, { kind: \"component\", type: AXMTaskBoardKanbanViewComponent, selector: \"axm-task-board-kanban-view\", inputs: [\"tasks\"], outputs: [\"tasksChange\", \"onTaskClick\", \"onTaskChanged\", \"component\", \"onActionClick\"] }, { kind: \"component\", type: AXMTaskBoardGridViewComponent, selector: \"axm-task-board-grid-view\", inputs: [\"dataSource\"], outputs: [\"onTaskClick\", \"onActionClick\"] }, { kind: \"component\", type: AXMTaskBoardStatusGroupedGridViewComponent, selector: \"axm-task-board-status-grouped-grid-view\", inputs: [\"provider\", \"dataSource\"], outputs: [\"onActionClick\"] }, { kind: \"component\", type: AXMTaskBoardDetailPanel, selector: \"axm-task-board-detail-panel\" }, { kind: \"component\", type: AXDropdownPanelComponent, selector: \"ax-dropdown-panel\", inputs: [\"isOpen\", \"fitParent\", \"dropdownWidth\", \"position\", \"placement\", \"_target\", \"adaptivityEnabled\"], outputs: [\"onOpened\", \"onClosed\"] }, { kind: \"ngmodule\", type: AXPopoverModule }, { kind: \"component\", type: AXCalendarComponent, selector: \"ax-calendar\", inputs: [\"rtl\", \"readonly\", \"value\", \"name\", \"disabled\", \"depth\", \"activeView\", \"minValue\", \"maxValue\", \"disabledDates\", \"holidayDates\", \"type\", \"dayCellTemplate\", \"monthCellTemplate\", \"yearCellTemplate\", \"cellClass\", \"showNavigation\", \"count\", \"id\", \"weekend\", \"weekdays\"], outputs: [\"onOptionChanged\", \"valueChange\", \"onValueChanged\", \"minValueChange\", \"maxValueChange\", \"onBlur\", \"onFocus\", \"depthChange\", \"typeChange\", \"activeViewChange\", \"disabledDatesChange\", \"holidayDatesChange\", \"onNavigate\", \"onSlotClick\", \"countChange\"] }, { kind: \"component\", type: AXMTaskBoardFiltersComponent, selector: \"axm-task-board-filters\", inputs: [\"isQueryParam\"], outputs: [\"applyClicked\"] }, { kind: \"ngmodule\", type: AXCheckBoxModule }, { kind: \"ngmodule\", type: AXFormModule }, { kind: \"ngmodule\", type: AXLabelModule }, { kind: \"ngmodule\", type: AXSelectionListModule }, { kind: \"component\", type: i10.AXSelectionListComponent, selector: \"ax-selection-list\", inputs: [\"id\", \"name\", \"disabled\", \"readonly\", \"tabIndex\", \"size\", \"value\", \"valueField\", \"textField\", \"disabledField\", \"readonlyField\", \"multiple\", \"direction\", \"customTemplate\", \"showControl\", \"items\", \"look\"], outputs: [\"onValueChanged\", \"onBlur\", \"onFocus\"] }, { kind: \"component\", type: AXPThemeLayoutStartSideComponent, selector: \"axp-layout-page-start-side, axp-layout-start-side\" }, { kind: \"component\", type: AXPThemeLayoutHeaderComponent, selector: \"axp-layout-header\" }, { kind: \"pipe\", type: i2.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: i5.AXTranslatorPipe, name: \"translate\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMTaskBoardPage, decorators: [{\n type: Component,\n args: [{ imports: [\n FormsModule,\n CommonModule,\n RouterModule,\n //\n AXMenuModule,\n AXButtonModule,\n AXDropdownButtonModule,\n AXTranslationModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXBreadcrumbsModule,\n AXBadgeModule,\n AXAccordionModule,\n AXAccordionCdkModule,\n //\n AXPThemeLayoutBlockComponent,\n AXPPageLayoutComponent,\n AXMTaskBoardCalendarViewComponent,\n AXMTaskBoardKanbanViewComponent,\n AXMTaskBoardGridViewComponent,\n AXMTaskBoardStatusGroupedGridViewComponent,\n AXMTaskBoardDetailPanel,\n AXDropdownPanelComponent,\n AXPopoverModule,\n AXCalendarComponent,\n AXMTaskBoardFiltersComponent,\n AXCheckBoxModule,\n AXFormModule,\n AXLabelModule,\n AXSelectionListModule,\n AXPThemeLayoutStartSideComponent,\n AXPThemeLayoutHeaderComponent,\n ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMTaskBoardPage,\n },\n ], template: \"<axp-page-layout *translate=\\\"let t\\\">\\n <axp-layout-start-side class=\\\"ax-border-e ax-lightest-surface ax-h-full\\\">\\n <axp-layout-header class=\\\"ax-p-4 ax-border-b\\\">\\n <ng-container *ngTemplateOutlet=\\\"viewSelectorTemplate; context: { location: 'sidebar' }\\\"></ng-container>\\n </axp-layout-header>\\n\\n <axp-layout-content class=\\\"ax-flex ax-flex-col ax-min-h-0 ax-overflow-y-auto\\\">\\n <div class=\\\"ax-p-4 ax-flex ax-flex-col ax-gap-6\\\">\\n <div class=\\\"ax-flex ax-flex-col ax-gap-3\\\">\\n <!-- <h3 class=\\\"ax-text-sm ax-font-semibold ax-text-neutral-800 ax-uppercase ax-tracking-wide\\\">\\n {{ (t('task-board.terms.calendar', { scope: rootConfig.config.i18n}) | async) }}\\n </h3> -->\\n <ax-calendar\\n #sidebarCalendar\\n [type]=\\\"calendarType()\\\"\\n [depth]=\\\"calendarDepth()\\\"\\n [cellClass]=\\\"getCellClass\\\"\\n [ngModel]=\\\"currentDateForCalendar()\\\"\\n [dayCellTemplate]=\\\"dayCellTemplate\\\"\\n class=\\\"ax-single-range-calendar ax-border ax-rounded-lg\\\"\\n (onSlotClick)=\\\"handleCalendarSlotClick($event)\\\"\\n >\\n </ax-calendar>\\n </div>\\n\\n <div axAccordionGroup [accordion]=\\\"false\\\">\\n <!-- <div\\n class=\\\"ax-mb-2 ax-w-full ax-border ax-p-2 ax-rounded-lg\\\"\\n axAccordionItem\\n #taskTypeAccordion=\\\"axAccordionItem\\\"\\n >\\n <div\\n class=\\\"ax-flex ax-items-center ax-justify-between ax-gap-2 ax-select-none ax-cursor-pointer\\\"\\n axAccordionItemHeader\\n >\\n <h3 class=\\\"ax-text-sm ax-font-semibold\\\">\\n {{ (t('task-board.filter.task-type', { scope: rootConfig.config.i18n}) | async)! }}\\n </h3>\\n <ax-icon\\n [icon]=\\\"taskTypeAccordion?.isCollapsed() ? 'fa-light fa-chevron-down' : 'fa-light fa-chevron-up'\\\"\\n class=\\\"ax-transition-transform\\\"\\n ></ax-icon>\\n </div>\\n <div axAccordionItemContent>\\n <div class=\\\"ax-pt-2\\\">\\n <ax-selection-list\\n [items]=\\\"taskTypeItems()\\\"\\n [ngModel]=\\\"selectedTaskTypeValues()\\\"\\n (onValueChanged)=\\\"handleTaskTypeSelectionChange($event.value)\\\"\\n direction=\\\"vertical\\\"\\n [multiple]=\\\"!isNonCalendarView()\\\"\\n [showControl]=\\\"true\\\"\\n valueField=\\\"id\\\"\\n textField=\\\"text\\\"\\n >\\n <ng-template #itemTemplate let-item>\\n <div class=\\\"ax-flex ax-items-center\\\">\\n @if (item.icon) {\\n <i [class]=\\\"item.icon\\\"></i>\\n }\\n <span [class]=\\\"item.icon ? 'ax-ml-2' : ''\\\">{{ item.text }}</span>\\n </div>\\n </ng-template>\\n </ax-selection-list>\\n </div>\\n </div>\\n </div> -->\\n <div\\n class=\\\"ax-mb-2 ax-w-full ax-border ax-p-2 ax-rounded-lg\\\"\\n axAccordionItem\\n #calendarFilterTypeAccordion=\\\"axAccordionItem\\\"\\n >\\n <div\\n class=\\\"ax-flex ax-items-center ax-justify-between ax-gap-2 ax-select-none ax-cursor-pointer\\\"\\n axAccordionItemHeader\\n >\\n <h3 class=\\\"ax-text-sm ax-font-semibold\\\">\\n {{ ('@task-management:task-board.filter.title-plural' | translate | async)! }}\\n </h3>\\n <ax-icon\\n [icon]=\\\"calendarFilterTypeAccordion?.isCollapsed() ? 'fa-light fa-chevron-down' : 'fa-light fa-chevron-up'\\\"\\n class=\\\"ax-transition-transform\\\"\\n ></ax-icon>\\n </div>\\n <div axAccordionItemContent>\\n <axm-task-board-filters #filtersComponent [isQueryParam]=\\\"isQueryParam()\\\"></axm-task-board-filters>\\n </div>\\n </div>\\n @if (!isNonCalendarView()) {\\n <div\\n class=\\\"ax-mb-2 ax-w-full ax-border ax-p-2 ax-rounded-lg\\\"\\n axAccordionItem\\n #calendarEventTypeAccordion=\\\"axAccordionItem\\\"\\n >\\n <div\\n class=\\\"ax-flex ax-items-center ax-justify-between ax-gap-2 ax-select-none ax-cursor-pointer\\\"\\n axAccordionItemHeader\\n >\\n <h3 class=\\\"ax-text-sm ax-font-semibold\\\">\\n {{ ('@task-management:task-board.filter.calendars' | translate | async)! }}\\n </h3>\\n <ax-icon\\n [icon]=\\\"calendarEventTypeAccordion?.isCollapsed() ? 'fa-light fa-chevron-down' : 'fa-light fa-chevron-up'\\\"\\n class=\\\"ax-transition-transform\\\"\\n ></ax-icon>\\n </div>\\n <div axAccordionItemContent>\\n <div class=\\\"ax-pt-2\\\">\\n <ax-selection-list\\n [items]=\\\"calendarEventTypeItems()\\\"\\n [ngModel]=\\\"selectedCalendarEventTypeValues()\\\"\\n (onValueChanged)=\\\"handleCalendarEventTypeSelectionChange($event.value)\\\"\\n direction=\\\"vertical\\\"\\n [multiple]=\\\"true\\\"\\n [showControl]=\\\"true\\\"\\n valueField=\\\"id\\\"\\n textField=\\\"text\\\"\\n >\\n <ng-template #itemTemplate let-item>\\n <div class=\\\"ax-flex ax-items-center\\\">\\n @if (item.icon) {\\n <i [class]=\\\"item.icon\\\"></i>\\n }\\n <span [class]=\\\"item.icon ? 'ax-ml-2' : ''\\\">{{ item.text }}</span>\\n </div>\\n </ng-template>\\n </ax-selection-list>\\n </div>\\n </div>\\n </div>\\n }\\n </div>\\n </div>\\n </axp-layout-content>\\n </axp-layout-start-side>\\n <axp-page-toolbar>\\n <axp-layout-prefix class=\\\"sm:ax-flex-row ax-flex-col ax-items-start\\\">\\n <div class=\\\"ax-scheduler-header ax-w-max ax-sm sm:ax-md\\\">\\n <ax-button look=\\\"blank\\\" (onClick)=\\\"changeDate(false)\\\">\\n <ax-icon class=\\\"ax-icon ax-text-xl ax-icon-chevron-left arrow-icon\\\"></ax-icon>\\n </ax-button>\\n <ax-button look=\\\"blank\\\" [text]=\\\"timeText()\\\" #date></ax-button>\\n <ax-button look=\\\"blank\\\" (onClick)=\\\"changeDate(true)\\\">\\n <ax-icon class=\\\"ax-icon ax-text-xl ax-icon-chevron-right arrow-icon\\\"></ax-icon>\\n </ax-button>\\n <!-- <ax-popover [target]=\\\"date\\\" [placement]=\\\"'bottom'\\\" #popover [adaptivityEnabled]=\\\"true\\\">\\n <div class=\\\"ax-overlay-pane\\\">\\n <ax-calendar\\n #calendar\\n [type]=\\\"calendarType()\\\"\\n [depth]=\\\"calendarDepth()\\\"\\n [cellClass]=\\\"getCellClass\\\"\\n [ngModel]=\\\"vm.currentDate()\\\"\\n class=\\\"ax-single-range-calendar\\\"\\n (onSlotClick)=\\\"handleCalendarSlotClick($event)\\\"\\n >\\n <ax-footer>\\n <ax-button\\n look=\\\"link\\\"\\n color=\\\"primary\\\"\\n [text]=\\\"todayButtonText()\\\"\\n (onClick)=\\\"handleTodayClick()\\\"\\n ></ax-button>\\n </ax-footer>\\n </ax-calendar>\\n </div>\\n </ax-popover> -->\\n </div>\\n </axp-layout-prefix>\\n\\n <axp-layout-suffix>\\n @if (deviceService.isSmall()) {\\n <ax-button id=\\\"axp-toolbar-btn-filters\\\" (onClick)=\\\"toggleStartSide()\\\" [iconOnly]=\\\"true\\\" [color]=\\\"'default'\\\">\\n <i class=\\\"fa-light fa-bars\\\"></i>\\n </ax-button>\\n }\\n <!-- @if (!deviceService.isSmall()) {\\n <ng-container *ngTemplateOutlet=\\\"viewSelectorTemplate; context: { location: 'toolbar' }\\\"></ng-container>\\n } -->\\n\\n <!-- @if(deviceService.isLarge()) {\\n <ax-button (onClick)=\\\"vm.toggleDetailPanel()\\\">\\n <ax-icon icon=\\\"{{ vm.isDetailPanelOpen() ? 'fa-solid fa-square-info' : 'fa-light fa-square-info' }}\\\"></ax-icon>\\n </ax-button>\\n } -->\\n </axp-layout-suffix>\\n </axp-page-toolbar>\\n <axp-page-content class=\\\"ax-flex ax-flex-row ax-gap-2\\\">\\n @if (isReady()) { @switch(vm.currentViewMode()) { @case('kanban') {\\n <axm-task-board-kanban-view\\n class=\\\"axp-kanban-container ax-h-full ax-w-full ax-min-w-0\\\"\\n [tasks]=\\\"resolvedTasks()\\\"\\n (onTaskClick)=\\\"vm.selectTask($event)\\\"\\n (onActionClick)=\\\"handleContextMenu($event)\\\"\\n ></axm-task-board-kanban-view>\\n } @case('grid') {\\n <axm-task-board-grid-view\\n class=\\\"ax-h-full ax-w-full ax-min-w-0\\\"\\n [dataSource]=\\\"gridDataSource\\\"\\n (onTaskClick)=\\\"vm.selectTask($event)\\\"\\n (onActionClick)=\\\"handleContextMenu($event)\\\"\\n ></axm-task-board-grid-view>\\n } @case('status-grouped-grid') {\\n <axm-task-board-status-grouped-grid-view\\n class=\\\"ax-flex ax-flex-col ax-gap-2 ax-w-full ax-min-w-0\\\"\\n [dataSource]=\\\"gridDataSource\\\"\\n (onActionClick)=\\\"handleContextMenu($event)\\\"\\n ></axm-task-board-status-grouped-grid-view>\\n } @default {\\n <axm-task-board-calendar-view\\n class=\\\"axp-scheduler-container ax-h-full ax-w-full ax-min-w-0\\\"\\n [resources]=\\\"resources()\\\"\\n [startingDate]=\\\"vm.currentDate()\\\"\\n [dataSource]=\\\"schedulerDataSource\\\"\\n (onTaskClick)=\\\"vm.selectTask($event)\\\"\\n [selectedView]=\\\"vm.currentViewMode()\\\"\\n (onActionClick)=\\\"handleContextMenu($event)\\\"\\n (onTaskRightClick)=\\\"handleContextMenu($event)\\\"\\n (component)=\\\"schedulerComponentChanged($event)\\\"\\n (onMonthSlotDblClicked)=\\\"handleMonthSlotDblClicked($event)\\\"\\n ></axm-task-board-calendar-view>\\n } }\\n <ax-context-menu\\n #rootContextMenu\\n [closeOn]=\\\"'leave'\\\"\\n [orientation]=\\\"'vertical'\\\"\\n (onOpening)=\\\"handleContextMenuOnOpening($event)\\\"\\n (onItemClick)=\\\"handleContextMenuItemClick($event)\\\"\\n >\\n </ax-context-menu>\\n @if (vm.isDetailPanelOpen() && deviceService.isLarge()) {\\n <axm-task-board-detail-panel></axm-task-board-detail-panel>\\n } } @else {\\n <div class=\\\"ax-flex ax-items-center ax-justify-center ax-w-full ax-h-full\\\">\\n <ax-loading></ax-loading>\\n </div>\\n }\\n </axp-page-content>\\n</axp-page-layout>\\n\\n<ng-template #viewSelectorTemplate let-location=\\\"location\\\">\\n @if (location === 'sidebar') {\\n <ax-button\\n [text]=\\\"('@task-management:task-board.view.' + selectedViewMode().text | translate | async)!\\\"\\n class=\\\"ax-w-full\\\"\\n >\\n <ax-prefix><ax-icon [icon]=\\\"selectedViewMode().icon\\\"></ax-icon></ax-prefix>\\n <ax-dropdown-panel #sidebarDropdownPanel>\\n <ax-menu [orientation]=\\\"'vertical'\\\" class=\\\"ax-menu-container\\\">\\n @for (category of menuItems(); track category.key) {\\n <ng-container>\\n @if (category.children && category.children.length > 0) {\\n <ax-menu-item>\\n <ax-prefix>\\n <ax-icon [icon]=\\\"category.icon\\\"></ax-icon>\\n </ax-prefix>\\n <ax-text>{{ ('@task-management:task-board.' + category.text | translate | async)! }}</ax-text>\\n @for (child of category.children; track child.key) {\\n <ax-menu-item (onClick)=\\\"handleViewChange(child.key, sidebarDropdownPanel)\\\">\\n <ax-prefix>\\n <ax-icon [icon]=\\\"child.icon\\\"></ax-icon>\\n </ax-prefix>\\n <ax-text>{{ ('@task-management:task-board.view.' + child.text | translate | async)! }}</ax-text>\\n </ax-menu-item>\\n }\\n </ax-menu-item>\\n } @else {\\n <ax-menu-item (onClick)=\\\"handleViewChange(category.key, sidebarDropdownPanel)\\\">\\n <ax-prefix>\\n <ax-icon [icon]=\\\"category.icon\\\"></ax-icon>\\n </ax-prefix>\\n <ax-text>{{ ('@task-management:task-board.' + category.text | translate | async)! }}</ax-text>\\n </ax-menu-item>\\n }\\n </ng-container>\\n }\\n </ax-menu>\\n </ax-dropdown-panel>\\n <ax-suffix>\\n <ax-icon icon=\\\"fa-light fa-caret-down\\\"></ax-icon>\\n </ax-suffix>\\n </ax-button>\\n } @else {\\n <ax-button [text]=\\\"('@task-management:task-board.view.' + selectedViewMode().text | translate | async)!\\\">\\n <ax-prefix><ax-icon [icon]=\\\"selectedViewMode().icon\\\"></ax-icon></ax-prefix>\\n <ax-dropdown-panel #toolbarDropdownPanel>\\n <ax-menu [orientation]=\\\"'vertical'\\\" class=\\\"ax-menu-container\\\">\\n @for (category of menuItems(); track category.key) {\\n <ng-container>\\n @if (category.children && category.children.length > 0) {\\n <ax-menu-item>\\n <ax-prefix>\\n <ax-icon [icon]=\\\"category.icon\\\"></ax-icon>\\n </ax-prefix>\\n <ax-text>{{ ('@task-management:task-board.' + category.text | translate | async)! }}</ax-text>\\n @for (child of category.children; track child.key) {\\n <ax-menu-item (onClick)=\\\"handleViewChange(child.key, toolbarDropdownPanel)\\\">\\n <ax-prefix>\\n <ax-icon [icon]=\\\"child.icon\\\"></ax-icon>\\n </ax-prefix>\\n <ax-text>{{ ('@task-management:task-board.view.' + child.text | translate | async)! }}</ax-text>\\n </ax-menu-item>\\n }\\n </ax-menu-item>\\n } @else {\\n <ax-menu-item (onClick)=\\\"handleViewChange(category.key, toolbarDropdownPanel)\\\">\\n <ax-prefix>\\n <ax-icon [icon]=\\\"category.icon\\\"></ax-icon>\\n </ax-prefix>\\n <ax-text>{{ ('@task-management:task-board.' + category.text | translate | async)! }}</ax-text>\\n </ax-menu-item>\\n }\\n </ng-container>\\n }\\n </ax-menu>\\n </ax-dropdown-panel>\\n <ax-suffix>\\n <ax-icon icon=\\\"fa-light fa-caret-down\\\"></ax-icon>\\n </ax-suffix>\\n </ax-button>\\n }\\n</ng-template>\\n\\n<ng-template #dayCellTemplate let-slot>\\n <div\\n class=\\\"ax-flex ax-flex-col ax-items-center ax-justify-between ax-w-full ax-gap-1\\\"\\n [style.padding-bottom]=\\\"'0.25rem'\\\"\\n >\\n <span class=\\\"ax-flex-1 ax-text-center\\\">{{ slot.slot.text ?? slot.slot.date?.day ?? '' }}</span>\\n @if (slot.slot.date && getDayDataCount(slot.slot.date) > 0) {\\n <ax-badge color=\\\"warning\\\"></ax-badge>\\n }\\n </div>\\n</ng-template>\\n\", styles: [\"html[dir=rtl] axp-page-layout axp-page-toolbar axp-layout-prefix .ax-scheduler-header .arrow-icon:before{-moz-transform:scale(-1,1);-webkit-transform:scale(-1,1);-o-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scaleX(-1)}.ax-single-range-calendar .ax-range-start,.ax-single-range-calendar .ax-range-end{color:rgba(var(--ax-sys-color-on-primary-surface))!important;background-color:rgba(var(--ax-sys-color-primary-surface),.85)!important}.ax-single-range-calendar .ax-range-start:hover,.ax-single-range-calendar .ax-range-end:hover{background-color:rgba(var(--ax-sys-color-primary-surface))!important}.ax-single-range-calendar .ax-range-start.ax-state-holiday,.ax-single-range-calendar .ax-range-end.ax-state-holiday{background-color:rgba(var(--ax-sys-color-danger-surface),.85)!important}.ax-single-range-calendar .ax-range-between{color:rgba(var(--ax-sys-color-on-primary-surface))!important;background-color:rgba(var(--ax-sys-color-primary-surface),.65)}.ax-single-range-calendar .ax-range-between.ax-state-holiday{background-color:rgba(var(--ax-sys-color-danger-surface),.65)}.ax-single-range-calendar ax-footer{display:flex;justify-content:center;border-color:rgba(var(--ax-comp-calendar-view-header-border-color));border-top-width:var(--ax-comp-calendar-view-header-border-width, 1px)}axp-page-content:not(:has(axm-task-board-status-grouped-grid-view,axm-task-board-time-grouped-grid-view)){overflow-y:hidden}\\n\"] }]\n }], propDecorators: { popover: [{ type: i0.ViewChild, args: ['popover', { isSignal: true }] }], calendar: [{ type: i0.ViewChild, args: ['calendar', { isSignal: true }] }], sidebarCalendar: [{ type: i0.ViewChild, args: ['sidebarCalendar', { isSignal: true }] }], dayCellTemplateRef: [{ type: i0.ViewChild, args: ['dayCellTemplate', { isSignal: true }] }], contextMenu: [{ type: i0.ViewChild, args: ['rootContextMenu', { isSignal: true }] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1ib2FyZC5wYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3Rhc2stbWFuYWdlbWVudC9zcmMvbGliL2ZlYXR1cmVzL3Rhc2stYm9hcmQvdGFzay1ib2FyZC5wYWdlLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3Rhc2stbWFuYWdlbWVudC9zcmMvbGliL2ZlYXR1cmVzL3Rhc2stYm9hcmQvdGFzay1ib2FyZC5wYWdlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsbUJBQW1CLEVBQXVCLE1BQU0sNkJBQTZCLENBQUM7QUFDdkYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdkUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUlMLFlBQVksR0FDYixN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LCtCQUErQixrTEFDL0IsNkJBQTZCLHdJQUM3QiwwQ0FBMEMsb0pBQzFDLHVCQUF1Qix3RUFDdkIsd0JBQXdCLDJNQUN4QixlQUFlLCtCQUNmLG1CQUFtQiw2a0JBQ25CLDRCQUE0Qix1SEFDNUIsZ0JBQWdCLDhCQUNoQixZQUFZLDhCQUNaLGFBQWEsOEJBQ2IscUJBQXFCLGdZQUNyQixnQ0FBZ0MsOEZBQ2hDLDZCQUE2Qjs7NEZBV3BCLGdCQUFnQjtrQkE5QzVCLFNBQVM7OEJBR0M7d0JBQ1AsV0FBVzt3QkFDWCxZQUFZO3dCQUNaLFlBQVk7d0JBQ1osRUFBRTt3QkFDRixZQUFZO3dCQUNaLGNBQWM7d0JBQ2Qsc0JBQXNCO3dCQUN0QixtQkFBbUI7d0JBQ25CLGlCQUFpQjt3QkFDakIsZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLGFBQWE7d0JBQ2IsaUJBQWlCO3dCQUNqQixvQkFBb0I7d0JBQ3BCLEVBQUU7d0JBQ0YsNEJBQTRCO3dCQUM1QixzQkFBc0I7d0JBQ3RCLGlDQUFpQzt3QkFDakMsK0JBQStCO3dCQUMvQiw2QkFBNkI7d0JBQzdCLDBDQUEwQzt3QkFDMUMsdUJBQXVCO3dCQUN2Qix3QkFBd0I7d0JBQ3hCLGVBQWU7d0JBQ2YsbUJBQW1CO3dCQUNuQiw0QkFBNEI7d0JBQzVCLGdCQUFnQjt3QkFDaEIsWUFBWTt3QkFDWixhQUFhO3dCQUNiLHFCQUFxQjt3QkFDckIsZ0NBQWdDO3dCQUNoQyw2QkFBNkI7cUJBQzlCLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLGFBQzFCO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsa0JBQWtCO3lCQUM5QjtxQkFDRjtxRUFhaUQsU0FBUyxrRUFDUCxVQUFVLHlFQUNILGlCQUFpQiw0RUFZYixpQkFBaUIscUVBOEp4QixpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWEFjY29yZGlvbkNka01vZHVsZSB9IGZyb20gJ0BhY29yZXgvY2RrL2FjY29yZGlvbic7XG5pbXBvcnQgeyBBWFN0eWxlQ29sb3JUeXBlIH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYQWNjb3JkaW9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2FjY29yZGlvbic7XG5pbXBvcnQgeyBBWEJhZGdlTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2JhZGdlJztcbmltcG9ydCB7IEFYQnJlYWRjcnVtYnNNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYnJlYWRjcnVtYnMnO1xuaW1wb3J0IHsgQVhCdXR0b25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7IEFYQ2FsZW5kYXJDb21wb25lbnQsIEFYQ2FsZW5kYXJTbG90Q2xpY2sgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvY2FsZW5kYXInO1xuaW1wb3J0IHsgQVhDaGVja0JveE1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9jaGVjay1ib3gnO1xuaW1wb3J0IHsgQVhEZWNvcmF0b3JNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBWERyb3Bkb3duUGFuZWxDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZHJvcGRvd24nO1xuaW1wb3J0IHsgQVhEcm9wZG93bkJ1dHRvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kcm9wZG93bi1idXR0b24nO1xuaW1wb3J0IHsgQVhGb3JtTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2Zvcm0nO1xuaW1wb3J0IHsgQVhMYWJlbE1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9sYWJlbCc7XG5pbXBvcnQgeyBBWExvYWRpbmdNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvbG9hZGluZyc7XG5pbXBvcnQge1xuICBBWENvbnRleHRNZW51Q29tcG9uZW50LFxuICBBWENvbnRleHRNZW51SXRlbXNDbGlja0V2ZW50LFxuICBBWENvbnRleHRNZW51T3BlbmluZ0V2ZW50LFxuICBBWE1lbnVNb2R1bGUsXG59IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9tZW51JztcbmltcG9ydCB7IEFYUG9wb3ZlckNvbXBvbmVudCwgQVhQb3BvdmVyTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3BvcG92ZXInO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvc2NoZWR1bGVyJztcbmltcG9ydCB7IEFYU2VsZWN0aW9uTGlzdE1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9zZWxlY3Rpb24tbGlzdCc7XG5pbXBvcnQgeyBBWENhbGVuZGFyU2VydmljZSwgQVhEYXRlVGltZSB9IGZyb20gJ0BhY29yZXgvY29yZS9kYXRlLXRpbWUnO1xuaW1wb3J0IHsgQVhMb2NhbGVTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2xvY2FsZSc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0aW9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb3JlL3RyYW5zbGF0aW9uJztcbmltcG9ydCB7IEFYVW5zdWJzY3JpYmVyIH0gZnJvbSAnQGFjb3JleC9jb3JlL3V0aWxzJztcbmltcG9ydCB7IEFYUEJyZWFkY3J1bWJJdGVtLCBBWFBEZXZpY2VTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7XG4gIEFYUFRoZW1lTGF5b3V0QmxvY2tDb21wb25lbnQsXG4gIEFYUFRoZW1lTGF5b3V0SGVhZGVyQ29tcG9uZW50LFxuICBBWFBUaGVtZUxheW91dFN0YXJ0U2lkZUNvbXBvbmVudCxcbn0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBWFBQYWdlTGF5b3V0QmFzZSwgQVhQUGFnZUxheW91dEJhc2VDb21wb25lbnQsIEFYUFBhZ2VMYXlvdXRDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC92aWV3cyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBPbkluaXQsXG4gIHNpZ25hbCxcbiAgVGVtcGxhdGVSZWYsXG4gIHZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgTmF2aWdhdGlvbkVuZCwgUm91dGVyLCBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZmlsdGVyLCBzdGFydFdpdGggfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFJvb3RDb25maWcgfSBmcm9tICcuLi8uLi9jb25zdCc7XG5pbXBvcnQgeyBBWE1UYXNrQm9hcmREZXRhaWxQYW5lbCB9IGZyb20gJy4vdGFzay1ib2FyZC1kZXRhaWwtcGFuZWwvdGFzay1ib2FyZC1kZXRhaWwtcGFuZWwuY29tcG9uZW50JztcbmltcG9ydCB7IEFYTVRhc2tCb2FyZEZpbHRlcnNDb21wb25lbnQgfSBmcm9tICcuL3Rhc2stYm9hcmQtZmlsdGVycy90YXNrLWJvYXJkLWZpbHRlcnMuY29tcG9uZW50JztcbmltcG9ydCB7IEFYUFRhc2tCb2FyZFNlcnZpY2UgfSBmcm9tICcuL3Rhc2stYm9hcmQuc2VydmljZSc7XG5pbXBvcnQgeyBBWFBSZXNvdXJjZSwgQVhQVGFzaywgQVhQVGFza0FjdGlvbiwgQVhQVGFza0ZpbHRlciwgQVhQV29ya2Zsb3dUYXNrUHJvdmlkZXIgfSBmcm9tICcuL3Rhc2stYm9hcmQudHlwZXMnO1xuaW1wb3J0IHsgQVhNVGFza0JvYXJkVmlld01vZGVsLCBBWFBQcmlvcml0eUZpbHRlcktleSwgQVhQVGFza0JvYXJkVmlld01vZGUgfSBmcm9tICcuL3Rhc2stYm9hcmQudmlld21vZGVsJztcbmltcG9ydCB7IEFYTVRhc2tCb2FyZENhbGVuZGFyVmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3MvdGFzay1ib2FyZC1jYWxlbmRhci12aWV3L3Rhc2stYm9hcmQtY2FsZW5kYXItdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhNVGFza0JvYXJkR3JpZFZpZXdDb21wb25lbnQgfSBmcm9tICcuL3ZpZXdzL3Rhc2stYm9hcmQtZ3JpZC12aWV3L3Rhc2stYm9hcmQtZ3JpZC12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWE1UYXNrQm9hcmRLYW5iYW5WaWV3Q29tcG9uZW50IH0gZnJvbSAnLi92aWV3cy90YXNrLWJvYXJkLWthbmJhbi12aWV3L3Rhc2stYm9hcmQta2FuYmFuLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IEFYTVRhc2tCb2FyZFN0YXR1c0dyb3VwZWRHcmlkVmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3MvdGFzay1ib2FyZC1zdGF0dXMtZ3JvdXBlZC1ncmlkLXZpZXcvdGFzay1ib2FyZC1zdGF0dXMtZ3JvdXBlZC1ncmlkLXZpZXcuY29tcG9uZW50JztcblxuZXhwb3J0IHR5cGUgQVhQVGFza0JvYXJkVmlld0NhdGVnb3J5ID0gJ2NhbGVuZGFyJyB8ICd0aW1lbGluZScgfCAndGFibGUnIHwgJ2thbmJhbic7XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJy4vdGFzay1ib2FyZC5wYWdlLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YXNrLWJvYXJkLnBhZ2Uuc2NzcyddLFxuICBpbXBvcnRzOiBbXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFJvdXRlck1vZHVsZSxcbiAgICAvL1xuICAgIEFYTWVudU1vZHVsZSxcbiAgICBBWEJ1dHRvbk1vZHVsZSxcbiAgICBBWERyb3Bkb3duQnV0dG9uTW9kdWxlLFxuICAgIEFYVHJhbnNsYXRpb25Nb2R1bGUsXG4gICAgQVhEZWNvcmF0b3JNb2R1bGUsXG4gICAgQVhMb2FkaW5nTW9kdWxlLFxuICAgIEFYQnJlYWRjcnVtYnNNb2R1bGUsXG4gICAgQVhCYWRnZU1vZHVsZSxcbiAgICBBWEFjY29yZGlvbk1vZHVsZSxcbiAgICBBWEFjY29yZGlvbkNka01vZHVsZSxcbiAgICAvL1xuICAgIEFYUFRoZW1lTGF5b3V0QmxvY2tDb21wb25lbnQsXG4gICAgQVhQUGFnZUxheW91dENvbXBvbmVudCxcbiAgICBBWE1UYXNrQm9hcmRDYWxlbmRhclZpZXdDb21wb25lbnQsXG4gICAgQVhNVGFza0JvYXJkS2FuYmFuVmlld0NvbXBvbmVudCxcbiAgICBBWE1UYXNrQm9hcmRHcmlkVmlld0NvbXBvbmVudCxcbiAgICBBWE1UYXNrQm9hcmRTdGF0dXNHcm91cGVkR3JpZFZpZXdDb21wb25lbnQsXG4gICAgQVhNVGFza0JvYXJkRGV0YWlsUGFuZWwsXG4gICAgQVhEcm9wZG93blBhbmVsQ29tcG9uZW50LFxuICAgIEFYUG9wb3Zlck1vZHVsZSxcbiAgICBBWENhbGVuZGFyQ29tcG9uZW50LFxuICAgIEFYTVRhc2tCb2FyZEZpbHRlcnNDb21wb25lbnQsXG4gICAgQVhDaGVja0JveE1vZHVsZSxcbiAgICBBWEZvcm1Nb2R1bGUsXG4gICAgQVhMYWJlbE1vZHVsZSxcbiAgICBBWFNlbGVjdGlvbkxpc3RNb2R1bGUsXG4gICAgQVhQVGhlbWVMYXlvdXRTdGFydFNpZGVDb21wb25lbnQsXG4gICAgQVhQVGhlbWVMYXlvdXRIZWFkZXJDb21wb25lbnQsXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBBWFBQYWdlTGF5b3V0QmFzZSxcbiAgICAgIHVzZUV4aXN0aW5nOiBBWE1UYXNrQm9hcmRQYWdlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFYTVRhc2tCb2FyZFBhZ2UgZXh0ZW5kcyBBWFBQYWdlTGF5b3V0QmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIHByb3RlY3RlZCByZWFkb25seSByb290Q29uZmlnID0gUm9vdENvbmZpZztcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRldmljZVNlcnZpY2UgPSBpbmplY3QoQVhQRGV2aWNlU2VydmljZSk7XG4gIHByb3RlY3RlZCByZWFkb25seSB2bSA9IGluamVjdChBWE1UYXNrQm9hcmRWaWV3TW9kZWwpO1xuICBwcml2YXRlIHJlYWRvbmx5IHVuc3Vic2NyaWJlID0gaW5qZWN0KEFYVW5zdWJzY3JpYmVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBhY3RpdmF0ZWRSb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxlU2VydmljZSA9IGluamVjdChBWExvY2FsZVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNhbGVuZGFyU2VydmljZSA9IGluamVjdChBWENhbGVuZGFyU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGFza0JvYXJkU2VydmljZSA9IGluamVjdChBWFBUYXNrQm9hcmRTZXJ2aWNlKTtcblxuICBwcm90ZWN0ZWQgcG9wb3ZlciA9IHZpZXdDaGlsZDxBWFBvcG92ZXJDb21wb25lbnQ+KCdwb3BvdmVyJyk7XG4gIHByb3RlY3RlZCBjYWxlbmRhciA9IHZpZXdDaGlsZDxBWENhbGVuZGFyQ29tcG9uZW50PignY2FsZW5kYXInKTtcbiAgcHJvdGVjdGVkIHNpZGViYXJDYWxlbmRhciA9IHZpZXdDaGlsZDxBWENhbGVuZGFyQ29tcG9uZW50Pignc2lkZWJhckNhbGVuZGFyJyk7XG5cbiAgcHJvdGVjdGVkIGlzUmVhZHkgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgdGFza1R5cGVzID0gc2lnbmFsPEFYUFdvcmtmbG93VGFza1Byb3ZpZGVyW10+KFtdKTtcbiAgcHJvdGVjdGVkIGNhbGVuZGFyRXZlbnRUeXBlcyA9IHNpZ25hbDxBcnJheTx7IGlkOiBzdHJpbmc7IHRpdGxlOiBzdHJpbmc7IGNvbG9yPzogc3RyaW5nOyBpY29uPzogc3RyaW5nIH0+PihbXSk7XG4gIHByb3RlY3RlZCByZXNvdXJjZXMgPSBzaWduYWw8QVhQUmVzb3VyY2VbXT4oW10pO1xuICBwcm90ZWN0ZWQgaXNRdWVyeVBhcmFtID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIHRhc2tUeXBlQWNjb3JkaW9uQ29sbGFwc2VkID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIGNhbGVuZGFyRXZlbnRUeXBlQWNjb3JkaW9uQ29sbGFwc2VkID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJpdmF0ZSBjdXJyZW50VGFzayA9IHNpZ25hbDxBWFBUYXNrIHwgbnVsbD4obnVsbCk7XG4gIHByb3RlY3RlZCBjdXJyZW50Vmlld01vZGUgPSBzaWduYWw8J2NhbGVuZGFyJyB8ICdrYW5iYW4nIHwgJ2dyaWQnIHwgJ3N0YXR1cy1ncm91cGVkLWdyaWQnPignY2FsZW5kYXInKTtcbiAgcHJvdGVjdGVkIHNjaGVkdWxlckNvbXBvbmVudCA9IHNpZ25hbDxBWFNjaGVkdWxlckNvbXBvbmVudCB8IG51bGw+KG51bGwpO1xuICBwcm90ZWN0ZWQgZGF5Q2VsbFRlbXBsYXRlUmVmID0gdmlld0NoaWxkPFRlbXBsYXRlUmVmPHVua25vd24+PignZGF5Q2VsbFRlbXBsYXRlJyk7XG4gIHByb3RlY3RlZCBkYXlDZWxsVGVtcGxhdGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmRheUNlbGxUZW1wbGF0ZVJlZigpKTtcbiAgcHJpdmF0ZSBkYXlEYXRhQ2FjaGUgPSBzaWduYWw8TWFwPHN0cmluZywgbnVtYmVyPj4obmV3IE1hcCgpKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG1lbnVJdGVtcyA9IHNpZ25hbDxcbiAgICB7XG4gICAgICBrZXk6IEFYUFRhc2tCb2FyZFZpZXdDYXRlZ29yeTtcbiAgICAgIHRleHQ6IHN0cmluZztcbiAgICAgIGljb246IHN0cmluZztcbiAgICAgIGNoaWxkcmVuPzogeyBrZXk6IEFYUFRhc2tCb2FyZFZpZXdNb2RlOyB0ZXh0OiBzdHJpbmc7IGljb246IHN0cmluZyB9W107XG4gICAgfVtdXG4gID4oW1xuICAgIHtcbiAgICAgIGtleTogJ2NhbGVuZGFyJyxcbiAgICAgIHRleHQ6ICdjYWxlbmRhcicsXG4gICAgICBpY29uOiAnZmEtbGlnaHQgZmEtY2FsZW5kYXItZGF5JyxcbiAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgIHsga2V5OiAnZGF5JywgdGV4dDogJ2RhaWx5JywgaWNvbjogJ2ZhLWxpZ2h0IGZhLWNhbGVuZGFyLWRheScgfSxcbiAgICAgICAgeyBrZXk6ICd3ZWVrJywgdGV4dDogJ3dlZWtseScsIGljb246ICdmYS1saWdodCBmYS1jYWxlbmRhci13ZWVrJyB9LFxuICAgICAgICB7IGtleTogJ21vbnRoJywgdGV4dDogJ21vbnRobHknLCBpY29uOiAnZmEtbGlnaHQgZmEtY2FsZW5kYXItYWx0JyB9LFxuICAgICAgICB7IGtleTogJ2FnZW5kYScsIHRleHQ6ICdhZ2VuZGEnLCBpY29uOiAnZmEtbGlnaHQgZmEtY2FsZW5kYXItcmFuZ2UnIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAndGltZWxpbmUnLFxuICAgICAgdGV4dDogJ3RpbWVsaW5lJyxcbiAgICAgIGljb246ICdmYS1saWdodCBmYS1saXN0LXRpbWVsaW5lJyxcbiAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgIHsga2V5OiAndGltZWxpbmUtZGF5JywgdGV4dDogJ2RhaWx5LXRpbWVsaW5lJywgaWNvbjogJ2ZhLWxpZ2h0IGZhLWNhbGVuZGFyLWRheScgfSxcbiAgICAgICAgeyBrZXk6ICd0aW1lbGluZS1tdWx0aS1kYXknLCB0ZXh0OiAnbXVsdGktZGF5LXRpbWVsaW5lJywgaWNvbjogJ2ZhLWxpZ2h0IGZhLWNhbGVuZGFyLXdlZWsnIH0sXG4gICAgICAgIHsga2V5OiAndGltZWxpbmUtbW9udGgnLCB0ZXh0OiAnbW9udGhseS10aW1lbGluZScsIGljb246ICdmYS1saWdodCBmYS1jYWxlbmRhci1hbHQnIH0sXG4gICAgICAgIHsga2V5OiAndGltZWxpbmUteWVhcicsIHRleHQ6ICd5ZWFybHktdGltZWxpbmUnLCBpY29uOiAnZmEtbGlnaHQgZmEtY2FsZW5kYXItcmFuZ2UnIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAndGFibGUnLFxuICAgICAgdGV4dDogJ3RhYmxlJyxcbiAgICAgIGljb246ICdmYS1saWdodCBmYS10YWJsZScsXG4gICAgICBjaGlsZHJlbjogW1xuICAgICAgICB7IGtleTogJ2dyaWQnLCB0ZXh0OiAnZ3JpZCcsIGljb246ICdmYS1saWdodCBmYS10YWJsZScgfSxcbiAgICAgICAgeyBrZXk6ICdzdGF0dXMtZ3JvdXBlZC1ncmlkJywgdGV4dDogJ3N0YXR1cy1ncm91cGVkLWdyaWQnLCBpY29uOiAnZmEtbGlnaHQgZmEtdGFibGUnIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAgeyBrZXk6ICdrYW5iYW4nLCB0ZXh0OiAna2FuYmFuJywgaWNvbjogJ2ZhLWxpZ2h0IGZhLWNoYXJ0LWthbmJhbicgfSxcbiAgXSk7XG5cbiAgcHJvdGVjdGVkIGNhbGVuZGFyVHlwZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMubG9jYWxlU2VydmljZS5hY3RpdmVQcm9maWxlKCkuY2FsZW5kYXIuc3lzdGVtKTtcbiAgcHJvdGVjdGVkIHRvZGF5QnV0dG9uVGV4dCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBzd2l0Y2ggKHRoaXMudm0uY3VycmVudFZpZXdNb2RlKCkpIHtcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICBjYXNlICdncmlkJzpcbiAgICAgIGNhc2UgJ2FnZW5kYSc6XG4gICAgICBjYXNlICdrYW5iYW4nOlxuICAgICAgY2FzZSAndGltZWxpbmUtZGF5JzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLW11bHRpLWRheSc6XG4gICAgICBjYXNlICdzdGF0dXMtZ3JvdXBlZC1ncmlkJzpcbiAgICAgICAgcmV0dXJuICdUb2RheSc7XG4gICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgcmV0dXJuICdDdXJyZW50IHdlZWsnO1xuICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgY2FzZSAndGltZWxpbmUtbW9udGgnOlxuICAgICAgICByZXR1cm4gJ0N1cnJlbnQgbW9udGgnO1xuICAgICAgY2FzZSAndGltZWxpbmUteWVhcic6XG4gICAgICAgIHJldHVybiAnQ3VycmVudCB5ZWFyJztcbiAgICB9XG4gIH0pO1xuICBwcm90ZWN0ZWQgdGltZVRleHQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKFxuICAgICAgdGhpcy52bS5jdXJyZW50Vmlld01vZGUoKSA9PT0gJ2dyaWQnIHx8XG4gICAgICB0aGlzLnZtLmN1cnJlbnRWaWV3TW9kZSgpID09PSAna2FuYmFuJyB8fFxuICAgICAgdGhpcy52bS5jdXJyZW50Vmlld01vZGUoKSA9PT0gJ3N0YXR1cy1ncm91cGVkLWdyaWQnXG4gICAgKSB7XG4gICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IHRoaXMudm0uY3VycmVudERhdGUoKTtcbiAgICAgIGlmICghY3VycmVudERhdGUpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoY3VycmVudERhdGUsIHRoaXMubG9jYWxlU2VydmljZS5hY3RpdmVQcm9maWxlKCkuY2FsZW5kYXIuc3lzdGVtKTtcbiAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0LmFkZCgnZGF5JywgdGhpcy52bS5kYXlzQ291bnQoKSAtIDEpO1xuICAgICAgY29uc3Qgc3RhcnRUZXh0ID0gc3RhcnQuZm9ybWF0KCdERCBNTU1NIHl5eXknLCB7IGxvY2FsZTogdGhpcy5sb2NhbGVTZXJ2aWNlLmFjdGl2ZVByb2ZpbGUoKS5jYWxlbmRhci5zeXN0ZW0gfSk7XG4gICAgICBjb25zdCBlbmRUZXh0ID0gZW5kLmZvcm1hdCgnREQgTU1NTSB5eXl5JywgeyBsb2NhbGU6IHRoaXMubG9jYWxlU2VydmljZS5hY3RpdmVQcm9maWxlKCkuY2FsZW5kYXIuc3lzdGVtIH0pO1xuICAgICAgcmV0dXJuIGAke3N0YXJ0VGV4dH0gLSAke2VuZFRleHR9YDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2NoZWR1bGVyQ29tcG9uZW50KCk/LmN1cnJlbnREYXRlVGV4dCgpIHx8ICcnO1xuICB9KTtcbiAgcHJvdGVjdGVkIGNhbGVuZGFyRGVwdGggPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKFxuICAgICAgdGhpcy52bS5jdXJyZW50Vmlld01vZGUoKSA9PT0gJ2dyaWQnIHx8XG4gICAgICB0aGlzLnZtLmN1cnJlbnRWaWV3TW9kZSgpID09PSAna2FuYmFuJyB8fFxuICAgICAgdGhpcy52bS5jdXJyZW50Vmlld01vZGUoKSA9PT0gJ3N0YXR1cy1ncm91cGVkLWdyaWQnXG4gICAgKSB7XG4gICAgICByZXR1cm4gJ2RheSc7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNjaGVkdWxlckNvbXBvbmVudCgpPy5jYWxlbmRhckRlcHRoKCkgfHwgJ2RheSc7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCBjdXJyZW50RGF0ZUZvckNhbGVuZGFyID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGRhdGUgPSB0aGlzLnZtLmN1cnJlbnREYXRlKCk7XG4gICAgcmV0dXJuIGRhdGUgfHwgbmV3IERhdGUoKTtcbiAgfSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3RlZFZpZXdNb2RlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRNb2RlID0gdGhpcy52bS5jdXJyZW50Vmlld01vZGUoKTtcbiAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIHRoaXMubWVudUl0ZW1zKCkpIHtcbiAgICAgIGlmIChjYXRlZ29yeS5rZXkgPT09IGN1cnJlbnRNb2RlKSB7XG4gICAgICAgIHJldHVybiB7IGtleTogY2F0ZWdvcnkua2V5IGFzIEFYUFRhc2tCb2FyZFZpZXdNb2RlLCB0ZXh0OiBjYXRlZ29yeS50ZXh0LCBpY29uOiBjYXRlZ29yeS5pY29uIH07XG4gICAgICB9XG4gICAgICBpZiAoY2F0ZWdvcnkuY2hpbGRyZW4pIHtcbiAgICAgICAgY29uc3QgZm91bmRDaGlsZCA9IGNhdGVnb3J5LmNoaWxkcmVuLmZpbmQoKGNoaWxkKSA9PiBjaGlsZC5rZXkgPT09IGN1cnJlbnRNb2RlKTtcbiAgICAgICAgaWYgKGZvdW5kQ2hpbGQpIHtcbiAgICAgICAgICByZXR1cm4gZm91bmRDaGlsZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBmaXJzdENhdGVnb3J5ID0gdGhpcy5tZW51SXRlbXMoKVswXTtcbiAgICByZXR1cm4gZmlyc3RDYXRlZ29yeS5jaGlsZHJlblxuICAgICAgPyBmaXJzdENhdGVnb3J5LmNoaWxkcmVuWzBdXG4gICAgICA6IHsga2V5OiBmaXJzdENhdGVnb3J5LmtleSBhcyBBWFBUYXNrQm9hcmRWaWV3TW9kZSwgdGV4dDogZmlyc3RDYXRlZ29yeS50ZXh0LCBpY29uOiBmaXJzdENhdGVnb3J5Lmljb24gfTtcbiAgfSk7XG4gIHByb3RlY3RlZCBmaWx0ZXIgPSBjb21wdXRlZDxBWFBUYXNrRmlsdGVyPigoKSA9PiB7XG4gICAgY29uc3QgdGFza1R5cGVOYW1lcyA9IHRoaXMudm0uc2VsZWN0ZWRUYXNrVHlwZU5hbWVzKCk7XG4gICAgLy8gV2hlbiBub3RoaW5nIGlzIHNlbGVjdGVkIChlbXB0eSBhcnJheSksIHdlIHdhbnQgdG8gc2hvdyBOTyB0eXBlc1xuICAgIC8vIFRoZSBzZXJ2aWNlIHRyZWF0cyBlbXB0eS91bmRlZmluZWQgdHlwZXMgYXMgXCJzaG93IGFsbCBwcm92aWRlcnNcIlxuICAgIC8vIFRvIHNob3cgbm9uZSB3aGVuIG5vdGhpbmcgaXMgc2VsZWN0ZWQsIHdlIHBhc3MgYSBub24tZXhpc3RlbnQgdHlwZSBuYW1lXG4gICAgLy8gVGhpcyBlbnN1cmVzIGZpbHRlcmVkUHJvdmlkZXJzLmxlbmd0aCA9PT0gMCwgcmVzdWx0aW5nIGluIGVtcHR5IHJlc3VsdHNcbiAgICBjb25zdCB0eXBlcyA9IHRhc2tUeXBlTmFtZXMubGVuZ3RoID4gMCA/IHRhc2tUeXBlTmFtZXMgOiBbJ19fTk9ORV9fJ107XG4gICAgY29uc3QgYXNzaWduZWVJZHMgPSB0aGlzLnZtLnNlbGVjdGVkQXNzaWduZWVJZHMoKTtcbiAgICBjb25zdCByZXBvcnRlcklkcyA9IHRoaXMudm0uc2VsZWN0ZWRSZXBvcnRlcklkcygpO1xuICAgIGNvbnN0IHByaW9yaXRpZXMgPSB0aGlzLnZtLnNlbGVjdGVkUHJpb3JpdGllcygpO1xuXG4gICAgY29uc3QgY3VycmVudERhdGUgPSB0aGlzLnZtLmN1cnJlbnREYXRlKCkgfHwgbmV3IERhdGUoKTtcbiAgICBsZXQgZnJvbTogQVhEYXRlVGltZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShjdXJyZW50RGF0ZSwgdGhpcy5sb2NhbGVTZXJ2aWNlLmFjdGl2ZVByb2ZpbGUoKS5jYWxlbmRhci5zeXN0ZW0pO1xuICAgIGxldCBlbmQ6IEFYRGF0ZVRpbWU7XG5cbiAgICBjb25zdCBjdXJyZW50VmlldyA9IHRoaXMudm0uY3VycmVudFZpZXdNb2RlKCk7XG5cbiAgICBpZiAoXG4gICAgICBjdXJyZW50VmlldyA9PT0gJ2dyaWQnIHx8XG4gICAgICBjdXJyZW50VmlldyA9PT0gJ2thbmJhbicgfHxcbiAgICAgIGN1cnJlbnRWaWV3ID09PSAnYWdlbmRhJyB8fFxuICAgICAgY3VycmVudFZpZXcgPT09ICd0aW1lbGluZS1tdWx0aS1kYXknIHx8XG4gICAgICBjdXJyZW50VmlldyA9PT0gJ3N0YXR1cy1ncm91cGVkLWdyaWQnXG4gICAgKSB7XG4gICAgICBlbmQgPSBmcm9tLmFkZCgnZGF5JywgdGhpcy52bS5kYXlzQ291bnQoKSAtIDEpO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudFZpZXcgPT09ICdtb250aCcgfHwgY3VycmVudFZpZXcgPT09ICd0aW1lbGluZS1tb250aCcpIHtcbiAgICAgIGZyb20gPSBmcm9tLnN0YXJ0T2YoJ21vbnRoJyk7XG4gICAgICBlbmQgPSBmcm9tLmVuZE9mKCdtb250aCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmQgPSBmcm9tLmVuZE9mKCdkYXknKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLy8gQWx3YXlzIGluY2x1ZGUgdHlwZXMgLSBlbXB0eSBhcnJheSBtZWFucyBzaG93IG5vIHR5cGVzLCBub24tZW1wdHkgbWVhbnMgc2hvdyBvbmx5IHNlbGVjdGVkIHR5cGVzXG4gICAgICB0eXBlcyxcbiAgICAgIC4uLihhc3NpZ25lZUlkcy5sZW5ndGggPiAwICYmIHsgYXNzaWduZWVJZHMgfSksXG4gICAgICAuLi4ocmVwb3J0ZXJJZHMubGVuZ3RoID4gMCAmJiB7IHJlcG9ydGVySWRzIH0pLFxuICAgICAgLi4uKHByaW9yaXRpZXMubGVuZ3RoID4gMCAmJiB7IHByaW9yaXRpZXMgfSksXG4gICAgICByYW5nZTogeyBmcm9tOiBmcm9tLmRhdGUsIGVuZDogZW5kLmRhdGUgfSxcbiAgICB9O1xuICB9KTtcblxuICBwcml2YXRlIGNvbnRleHRNZW51ID0gdmlld0NoaWxkPEFYQ29udGV4dE1lbnVDb21wb25lbnQ+KCdyb290Q29udGV4dE1lbnUnKTtcblxuICBvdmVycmlkZSBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICBhd2FpdCBzdXBlci5uZ09uSW5pdCgpO1xuICAgIGF3YWl0IHRoaXMudm0uaW5pdGlhbGl6ZSgpO1xuXG4gICAgLy8gTG9hZCB0YXNrIHR5cGVzIGZvciBjaGVja2JveCBmaWx0ZXJcbiAgICBjb25zdCB0eXBlcyA9IGF3YWl0IHRoaXMudGFza0JvYXJkU2VydmljZS5nZXRUYXNrVHlwZXMoKTtcbiAgICB0aGlzLnRhc2tUeXBlcy5zZXQodHlwZXMpO1xuXG4gICAgLy8gTG9hZCBjYWxlbmRhciBldmVudCB0eXBlcyBmb3IgY2hlY2tib3ggZmlsdGVyXG4gICAgY29uc3QgZXZlbnRUeXBlcyA9IGF3YWl0IHRoaXMudGFza0JvYXJkU2VydmljZS5nZXRDYWxlbmRhckV2ZW50VHlwZXMoKTtcbiAgICB0aGlzLmNhbGVuZGFyRXZlbnRUeXBlcy5zZXQoXG4gICAgICBldmVudFR5cGVzLm1hcCgoZXQ6IHsgaWQ6IHN0cmluZzsgdGl0bGU6IHN0cmluZyB9KSA9PiAoe1xuICAgICAgICBpZDogZXQuaWQsXG4gICAgICAgIHRpdGxlOiBldC50aXRsZSxcbiAgICAgIH0pKSxcbiAgICApO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBkYXkgZGF0YSBjYWNoZVxuICAgIGF3YWl0IHRoaXMudXBkYXRlRGF5RGF0YUNhY2hlKCk7XG5cbiAgICB0aGlzLnJvdXRlci5ldmVudHNcbiAgICAgIC5waXBlKFxuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlLnRha2VVbnRpbERlc3Ryb3ksXG4gICAgICAgIGZpbHRlcigoZXZlbnQpID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCksXG4gICAgICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRGcm9tUm91dGUoKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzUmVhZHkoKSkge1xuICAgICAgICAgIHRoaXMuaXNSZWFkeS5zZXQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgdGhpcy50YXNrQm9hcmRTZXJ2aWNlLnJlZnJlc2gkLnN1YnNjcmliZShhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLnRhc2tSZXNvbHZlSGFuZGxlcigpO1xuICAgICAgYXdhaXQgdGhpcy5nZXRSZXNvdXJjZXMoKTtcbiAgICB9KTtcbiAgfVxuICBvdmVycmlkZSBhc3luYyBnZXRQYWdlVGl0bGUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAdGFzay1tYW5hZ2VtZW50OnRhc2stYm9hcmQucGFnZS10aXRsZScpO1xuICB9XG4gIG92ZXJyaWRlIGFzeW5jIGdldFBhZ2VCcmVhZGNydW1icygpOiBQcm9taXNlPEFYUEJyZWFkY3J1bWJJdGVtW10+IHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICB0aXRsZTogYXdhaXQgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAdGFzay1tYW5hZ2VtZW50OnJvb3QtbWVudScpLFxuICAgICAgfSxcbiAgICBdO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNjaGVkdWxlckRhdGFTb3VyY2UgPSAoZmlsdGVyPzogQVhQVGFza0ZpbHRlcik6IFByb21pc2U8QVhQVGFza1tdPiA9PiB7XG4gICAgY29uc3QgZmluYWxGaWx0ZXI6IEFYUFRhc2tGaWx0ZXIgPSB7IC4uLnRoaXMuZmlsdGVyKCksIC4uLmZpbHRlciB9O1xuXG4gICAgcmV0dXJuIHRoaXMudGFza0JvYXJkU2VydmljZS5nZXRUYXNrcyhmaW5hbEZpbHRlcikudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICB0aGlzLnZhbGlkYXRlU2VsZWN0ZWRUYXNrKHJlc3VsdC5pdGVtcyk7XG4gICAgICByZXR1cm4gcmVzdWx0Lml0ZW1zO1xuICAgIH0pO1xuICB9O1xuXG4gIHByb3RlY3RlZCBncmlkRGF0YVNvdXJjZSA9IChmaWx0ZXI/OiBBWFBUYXNrRmlsdGVyKTogUHJvbWlzZTx7IGl0ZW1zOiBBWFBUYXNrW107IHRvdGFsOiBudW1iZXIgfT4gPT4ge1xuICAgIGNvbnN0IGZpbmFsRmlsdGVyOiBBWFBUYXNrRmlsdGVyID0geyAuLi50aGlzLmZpbHRlcigpLCAuLi5maWx0ZXIgfTtcblxuICAgIHJldHVybiB0aGlzLnRhc2tCb2FyZFNlcnZpY2UuZ2V0VGFza3MoZmluYWxGaWx0ZXIpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgdGhpcy52YWxpZGF0ZVNlbGVjdGVkVGFzayhyZXN1bHQuaXRlbXMpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbiAgfTtcblxuICByZXNvbHZlZFRhc2tzID0gc2lnbmFsPEFYUFRhc2tbXT4oW10pO1xuICBlZmYgPSBlZmZlY3QoYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHZpZXdNb2RlID0gdGhpcy52bS5jdXJyZW50Vmlld01vZGUoKTtcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmZpbHRlcigpO1xuICAgIGlmICh2aWV3TW9kZSA9PT0gJ2thbmJhbicpIHtcbiAgICAgIGF3YWl0IHRoaXMudGFza1Jlc29sdmVIYW5kbGVyKGZpbHRlcik7XG4gICAgfVxuICB9KTtcblxuICBwcml2YXRlIGFzeW5jIHRhc2tSZXNvbHZlSGFuZGxlcihmaWx0ZXI6IEFYUFRhc2tGaWx0ZXIgPSB0aGlzLmZpbHRlcigpKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy50YXNrQm9hcmRTZXJ2aWNlLmdldFRhc2tzKGZpbHRlcik7XG4gICAgdGhpcy52YWxpZGF0ZVNlbGVjdGVkVGFzayhyZXN1bHQuaXRlbXMpO1xuICAgIHRoaXMucmVzb2x2ZWRUYXNrcy5zZXQocmVzdWx0Lml0ZW1zKTtcbiAgfVxuXG4gIHNjaGVkdWxlckNvbXBvbmVudENoYW5nZWQoY29tcG9uZW50OiBBWFNjaGVkdWxlckNvbXBvbmVudCkge1xuICAgIHRoaXMuc2NoZWR1bGVyQ29tcG9uZW50LnNldChjb21wb25lbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZUNvbnRleHRNZW51T25PcGVuaW5nKGV2ZW50OiBBWENvbnRleHRNZW51T3BlbmluZ0V2ZW50KSB7XG4gICAgY29uc3QgY3VycmVudFRhc2sgPSB0aGlzLmN1cnJlbnRUYXNrKCk7XG4gICAgaWYgKCFjdXJyZW50VGFzaykgcmV0dXJuO1xuICAgIGNvbnN0IHByb3ZpZGVyTmFtZSA9IGN1cnJlbnRUYXNrLnByb3ZpZGVyO1xuICAgIGlmICghcHJvdmlkZXJOYW1lKSByZXR1cm47XG4gICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLnRhc2tCb2FyZFNlcnZpY2UuZ2V0UHJvdmlkZXIocHJvdmlkZXJOYW1lKTtcbiAgICBpZiAoIXByb3ZpZGVyKSByZXR1cm47XG4gICAgY29uc3QgYWN0aW9ucyA9IGF3YWl0IHByb3ZpZGVyLmdldEFjdGlvbnMoY3VycmVudFRhc2spO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBhY3Rpb25zKSB7XG4gICAgICBldmVudC5pdGVtcy5wdXNoKHtcbiAgICAgICAgdGV4dDogaXRlbS50aXRsZSxcbiAgICAgICAgaWNvbjogaXRlbS5pY29uLFxuICAgICAgICBjb2xvcjogaXRlbS5jb2xvciBhcyBBWFN0eWxlQ29sb3JUeXBlLFxuICAgICAgICBicmVhazogaXRlbS5icmVhayxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGNvbW1hbmQ6IGl0ZW0uY29tbWFuZCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVDb250ZXh0TWVudShldmVudDogQVhQVGFza0FjdGlvbikge1xuICAgIHRoaXMuY3VycmVudFRhc2suc2V0KGV2ZW50LnRhc2spO1xuICAgIGNvbnN0IHggPSBldmVudC5uYXRpdmVFdmVudC5jbGllbnRYO1xuICAgIGNvbnN0IHkgPSBldmVudC5uYXRpdmVFdmVudC5jbGllbnRZO1xuICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudC5uYXRpdmVFdmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgdGhpcy5jb250ZXh0TWVudSgpPy5zaG93QXQoeyB4LCB5IH0sIGVsZW1lbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZU1vbnRoU2xvdERibENsaWNrZWQoZGF0ZTogRGF0ZSkge1xuICAgIHRoaXMudm0uc2V0Q3VycmVudERhdGUoZGF0ZSk7XG4gICAgdGhpcy52bS5zZXRWaWV3TW9kZSgnZGF5Jyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlVmlld0NoYW5nZSh2aWV3OiBhbnksIGRyb3Bkb3duUGFuZWw6IEFYRHJvcGRvd25QYW5lbENvbXBvbmVudCkge1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7IHF1ZXJ5UGFyYW1zOiB7IHZpZXcgfSB9KTtcbiAgICB0aGlzLnZtLnNldFZpZXdNb2RlKHZpZXcpO1xuICAgIHRoaXMucG9wb3ZlcigpPy5jbG9zZSgpO1xuICAgIGRyb3Bkb3duUGFuZWwuY2xvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVmcmVzaEVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgdGhpcy52bS5zZWxlY3RlZFRhc2tUeXBlTmFtZXMoKTtcbiAgICB0aGlzLmdldFJlc291cmNlcygpO1xuICAgIHRoaXMuc2NoZWR1bGVyQ29tcG9uZW50KCk/LnJlZnJlc2goKTtcbiAgfSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjYWxlbmRhckV2ZW50VHlwZVJlZnJlc2hFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xuICAgIHRoaXMudm0uc2VsZWN0ZWRDYWxlbmRhckV2ZW50VHlwZUlkcygpO1xuICAgIC8vIFJlZnJlc2ggY2FsZW5kYXIgdmlldyB0byB1cGRhdGUgaG9saWRheXMgd2hlbiBldmVudCB0eXBlcyBjaGFuZ2VcbiAgICB0aGlzLnNjaGVkdWxlckNvbXBvbmVudCgpPy5yZWZyZXNoKCk7XG4gIH0pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGF5RGF0YUNhY2hlRWZmZWN0ID0gZWZmZWN0KGFzeW5jICgpID0+IHtcbiAgICAvLyBVcGRhdGUgY2FjaGUgd2hlbiBmaWx0ZXJzIG9yIGRhdGUgY2hhbmdlXG4gICAgdGhpcy52bS5jdXJyZW50RGF0ZSgpO1xuICAgIHRoaXMudm0uc2VsZWN0ZWRUYXNrVHlwZU5hbWVzKCk7XG4gICAgdGhpcy52bS5zZWxlY3RlZENhbGVuZGFyRXZlbnRUeXBlSWRzKCk7XG4gICAgYXdhaXQgdGhpcy51cGRhdGVEYXlEYXRhQ2FjaGUoKTtcbiAgfSk7XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVEYXlEYXRhQ2FjaGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY3VycmVudERhdGUgPSB0aGlzLnZtLmN1cnJlbnREYXRlKCk7XG4gICAgY29uc3QgbW9udGhTdGFydCA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShjdXJyZW50RGF0ZSkuc3RhcnRPZignbW9udGgnKS5kYXRlO1xuICAgIGNvbnN0IG1vbnRoRW5kID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGN1cnJlbnREYXRlKS5lbmRPZignbW9udGgnKS5kYXRlO1xuXG4gICAgLy8gR2V0IHRhc2tzIGZvciB0aGUgbW9udGhcbiAgICBjb25zdCB0YXNrcyA9IGF3YWl0IHRoaXMudGFza0JvYXJkU2VydmljZS5nZXRUYXNrcyh7XG4gICAgICAuLi50aGlzLmZpbHRlcigpLFxuICAgICAgcmFuZ2U6IHsgZnJvbTogbW9udGhTdGFydCwgZW5kOiBtb250aEVuZCB9LFxuICAgIH0pO1xuXG4gICAgLy8gR2V0IGV2ZW50cyBmb3IgdGhlIG1vbnRoXG4gICAgY29uc3Qgc2VsZWN0ZWRFdmVudFR5cGVJZHMgPSB0aGlzLnZtLnNlbGVjdGVkQ2FsZW5kYXJFdmVudFR5cGVJZHMoKTtcbiAgICAvLyBQYXNzIHNlbGVjdGVkIGNhbGVuZGFyIElEcyAoY2FuIGJlIGVtcHR5IGFycmF5IHRvIHNob3cgbm8gZXZlbnRzKVxuICAgIGNvbnN0IGV2ZW50cyA9IGF3YWl0IHRoaXMudGFza0JvYXJkU2VydmljZS5nZXRFdmVudHMoeyBmcm9tOiBtb250aFN0YXJ0LCBlbmQ6IG1vbnRoRW5kIH0sIHNlbGVjdGVkRXZlbnRUeXBlSWRzKTtcblxuICAgIC8vIENyZWF0ZSBhIG1hcCBvZiBkYXkgLT4gY291bnRcbiAgICBjb25zdCBkYXlDb3VudE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG5cbiAgICAvLyBDb3VudCB0YXNrcyBwZXIgZGF5XG4gICAgdGFza3MuaXRlbXMuZm9yRWFjaCgodGFzaykgPT4ge1xuICAgICAgY29uc3QgdGFza1N0YXJ0ID0gbmV3IERhdGUodGFzay5zdGFydERhdGUpO1xuICAgICAgY29uc3QgdGFza0VuZCA9IG5ldyBEYXRlKHRhc2suZW5kRGF0ZSk7XG4gICAgICBjb25zdCBzdGFydERheSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZSh0YXNrU3RhcnQpLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgY29uc3QgZW5kRGF5ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKHRhc2tFbmQpLnN0YXJ0T2YoJ2RheScpO1xuXG4gICAgICBsZXQgY3VycmVudERheSA9IHN0YXJ0RGF5O1xuICAgICAgd2hpbGUgKGN1cnJlbnREYXkuY29tcGFyZShlbmREYXksICdkYXknKSA8PSAwKSB7XG4gICAgICAgIGNvbnN0IGRheUtleSA9IGN1cnJlbnREYXkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG4gICAgICAgIGRheUNvdW50TWFwLnNldChkYXlLZXksIChkYXlDb3VudE1hcC5nZXQoZGF5S2V5KSB8fCAwKSArIDEpO1xuICAgICAgICBjdXJyZW50RGF5ID0gY3VycmVudERheS5hZGQoJ2RheScsIDEpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQ291bnQgZXZlbnRzIHBlciBkYXlcbiAgICBldmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGV2ZW50RGF0ZSA9IG5ldyBEYXRlKGV2ZW50LmRhdGUpO1xuICAgICAgY29uc3QgZGF5S2V5ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGV2ZW50RGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG4gICAgICBkYXlDb3VudE1hcC5zZXQoZGF5S2V5LCAoZGF5Q291bnRNYXAuZ2V0KGRheUtleSkgfHwgMCkgKyAxKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZGF5RGF0YUNhY2hlLnNldChkYXlDb3VudE1hcCk7XG4gICAgdGhpcy5zaWRlYmFyQ2FsZW5kYXIoKT8ucmVuZGVyKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RGF5RGF0YUNvdW50KGRhdGU6IEFYRGF0ZVRpbWUgfCB1bmRlZmluZWQpOiBudW1iZXIge1xuICAgIGlmICghZGF0ZSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyBHZXQgdGhlIG5hdGl2ZSBEYXRlIG9iamVjdCBmcm9tIEFYRGF0ZVRpbWVcbiAgICAgIGNvbnN0IGRhdGVPYmogPSAoZGF0ZSBhcyBhbnkpLmRhdGUgfHwgKGRhdGUgYXMgYW55KS5fZGF0ZTtcbiAgICAgIGlmICghZGF0ZU9iaikge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICAgIC8vIENyZWF0ZSBhIG5ldyBBWERhdGVUaW1lIGZyb20gdGhlIGRhdGUgb2JqZWN0IGZvciBjb25zaXN0ZW50IGZvcm1hdHRpbmdcbiAgICAgIGNvbnN0IG5hdGl2ZURhdGUgPSBkYXRlT2JqIGluc3RhbmNlb2YgRGF0ZSA/IGRhdGVPYmogOiBuZXcgRGF0ZShkYXRlT2JqKTtcbiAgICAgIGNvbnN0IGF4RGF0ZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShuYXRpdmVEYXRlKTtcbiAgICAgIGNvbnN0IGRheUtleSA9IGF4RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcbiAgICAgIHJldHVybiB0aGlzLmRheURhdGFDYWNoZSgpLmdldChkYXlLZXkpIHx8IDA7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybignRXJyb3IgZ2V0dGluZyBkYXkgZGF0YSBjb3VudDonLCBlcnJvcik7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlQ29udGV4dE1lbnVJdGVtQ2xpY2soZXZlbnQ6IEFYQ29udGV4dE1lbnVJdGVtc0NsaWNrRXZlbnQpIHtcbiAgICB0aGlzLnRhc2tCb2FyZFNlcnZpY2UuZXhlY3V0ZUNvbW1hbmQoZXZlbnQuaXRlbS5kYXRhPy5jb21tYW5kLCB0aGlzLmN1cnJlbnRUYXNrKCk/LnByb3ZpZGVyID8/ICcnKTtcbiAgfVxuXG4gIGNoYW5nZURhdGUoZm9yd2FyZDogYm9vbGVhbikge1xuICAgIGNvbnN0IGRhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUodGhpcy52bS5jdXJyZW50RGF0ZSgpLCB0aGlzLmxvY2FsZVNlcnZpY2UuYWN0aXZlUHJvZmlsZSgpLmNhbGVuZGFyLnN5c3RlbSk7XG4gICAgc3dpdGNoICh0aGlzLnZtLmN1cnJlbnRWaWV3TW9kZSgpKSB7XG4gICAgICBjYXNlICdkYXknOlxuICAgICAgY2FzZSAndGltZWxpbmUtZGF5JzpcbiAgICAgICAgdGhpcy52bS5zZXRDdXJyZW50RGF0ZShkYXRlLmFkZCgnZGF5JywgZm9yd2FyZCA/IDEgOiAtMSkuZGF0ZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgdGhpcy52bS5zZXRDdXJyZW50RGF0ZShkYXRlLmFkZCgnd2VlaycsIGZvcndhcmQgPyAxIDogLTEpLmRhdGUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnZ3JpZCc6XG4gICAgICBjYXNlICdhZ2VuZGEnOlxuICAgICAgY2FzZSAna2FuYmFuJzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLW11bHRpLWRheSc6XG4gICAgICBjYXNlICdzdGF0dXMtZ3JvdXBlZC1ncmlkJzpcbiAgICAgICAgdGhpcy52bS5zZXRDdXJyZW50RGF0ZShkYXRlLmFkZCgnZGF5JywgZm9yd2FyZCA/IHRoaXMudm0uZGF5c0NvdW50KCkgOiAtdGhpcy52bS5kYXlzQ291bnQoKSkuZGF0ZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdtb250aCc6XG4gICAgICBjYXNlICd0aW1lbGluZS1tb250aCc6XG4gICAgICAgIHRoaXMudm0uc2V0Q3VycmVudERhdGUoZGF0ZS5hZGQoJ21vbnRoJywgZm9yd2FyZCA/IDEgOiAtMSkuZGF0ZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICd0aW1lbGluZS15ZWFyJzpcbiAgICAgICAgdGhpcy52bS5zZXRDdXJyZW50RGF0ZShkYXRlLmFkZCgneWVhcicsIGZvcndhcmQgPyAxIDogLTEpLmRhdGUpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgdGhpcy5wb3BvdmVyKCk/LmNsb3NlKCk7XG4gICAgdGhpcy5jYWxlbmRhcigpPy5yZW5kZXIoKTtcbiAgICB0aGlzLnNpZGViYXJDYWxlbmRhcigpPy5yZW5kZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgcmFuZ2VCYXNlZFZpZXdzOiBBWFBUYXNrQm9hcmRWaWV3TW9kZVtdID0gW1xuICAgICdncmlkJyxcbiAgICAna2FuYmFuJyxcbiAgICAnYWdlbmRhJyxcbiAgICAnc3RhdHVzLWdyb3VwZWQtZ3JpZCcsXG4gICAgJ3RpbWVsaW5lLW11bHRpLWRheScsXG4gIF07XG5cbiAgcHJvdGVjdGVkIGhhbmRsZUNhbGVuZGFyU2xvdENsaWNrKGV2ZW50OiBBWENhbGVuZGFyU2xvdENsaWNrKSB7XG4gICAgaWYgKGV2ZW50LmNvbXBvbmVudC5hY3RpdmVWaWV3ICE9PSBldmVudC5jb21wb25lbnQuZGVwdGgpIHJldHVybjtcblxuICAgIGNvbnN0IGNsaWNrZWREYXRlOiBEYXRlID0gZXZlbnQuaXRlbTtcbiAgICBjb25zdCBjdXJyZW50VmlldyA9IHRoaXMudm0uY3VycmVudFZpZXdNb2RlKCk7XG5cbiAgICBpZiAodGhpcy5yYW5nZUJhc2VkVmlld3MuaW5jbHVkZXMoY3VycmVudFZpZXcpKSB7XG4gICAgICBjb25zdCBzZWxlY3Rpb25TdGFydERhdGUgPSB0aGlzLnZtLnJhbmdlU3RhcnREYXRlKCk7XG5cbiAgICAgIGlmICghc2VsZWN0aW9uU3RhcnREYXRlKSB7XG4gICAgICAgIC8vIENsZWFyIGFueSBwcmV2aW91cyByYW5nZSBzZWxlY3Rpb24gYmVmb3JlIHN0YXJ0aW5nIGEgbmV3IG9uZVxuICAgICAgICB0aGlzLnZtLnNldERheXNDb3VudCg3KTsgLy8gUmVzZXQgdG8gZGVmYXVsdFxuICAgICAgICB0aGlzLnZtLnNldFJhbmdlU3RhcnREYXRlKGNsaWNrZWREYXRlKTtcbiAgICAgICAgdGhpcy5jYWxlbmRhcigpPy5yZW5kZXIoKTtcbiAgICAgICAgdGhpcy5zaWRlYmFyQ2FsZW5kYXIoKT8ucmVuZGVyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0ZTEgPSBzZWxlY3Rpb25TdGFydERhdGUuZ2V0VGltZSgpO1xuICAgICAgY29uc3QgZGF0ZTIgPSBjbGlja2VkRGF0ZS5nZXRUaW1lKCk7XG4gICAgICBjb25zdCBuZXdTdGFydERhdGUgPSBuZXcgRGF0ZShNYXRoLm1pbihkYXRlMSwgZGF0ZTIpKTtcbiAgICAgIGNvbnN0IG5ld0VuZERhdGUgPSBuZXcgRGF0ZShNYXRoLm1heChkYXRlMSwgZGF0ZTIpKTtcblxuICAgICAgY29uc3QgZGlmZmVyZW5jZUluRGF5cyA9IHRoaXMuY2FsY3VsYXRlRGlmZmVyZW5jZUluRGF5cyhuZXdTdGFydERhdGUsIG5ld0VuZERhdGUpO1xuXG4gICAgICAvLyBDbGVhciBhbnkgcHJldmlvdXMgcmFuZ2Ugc2VsZWN0aW9uIHN0YXRlIGZpcnN0IHRvIHJlbW92ZSBhbnkgb3RoZXIgc2VsZWN0aW9uXG4gICAgICB0aGlzLnZtLnNldFJhbmdlU3RhcnREYXRlKG51bGwpO1xuICAgICAgXG4gICAgICAvLyBTZXQgdGhlIG5ldyByYW5nZSBzZWxlY3Rpb25cbiAgICAgIHRoaXMudm0uc2V0Q3VycmVudERhdGUobmV3U3RhcnREYXRlKTtcbiAgICAgIHRoaXMudm0uc2V0RGF5c0NvdW50KGRpZmZlcmVuY2VJbkRheXMpO1xuXG4gICAgICB0aGlzLmNhbGVuZGFyKCk/LnJlbmRlcigpO1xuICAgICAgdGhpcy5zaWRlYmFyQ2FsZW5kYXIoKT8ucmVuZGVyKCk7XG4gICAgICB0aGlzLnBvcG92ZXIoKT8uY2xvc2UoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZGF0ZVRvU2V0ID0gbmV3IERhdGUoY2xpY2tlZERhdGUpO1xuXG4gICAgaWYgKGN1cnJlbnRWaWV3ID09PSAnd2VlaycpIHtcbiAgICAgIGNvbnN0IGRheSA9IGRhdGVUb1NldC5nZXREYXkoKTtcbiAgICAgIGNvbnN0IHdlZWtTdGFydCA9IHRoaXMubG9jYWxlU2VydmljZS5hY3RpdmVQcm9maWxlKCkuY2FsZW5kYXIud2Vlay5zdGFydHNPbjtcbiAgICAgIGxldCBkYXlzVG9TdWJ0cmFjdCA9IGRheSAtIHdlZWtTdGFydDtcbiAgICAgIGlmIChkYXlzVG9TdWJ0cmFjdCA8IDApIHtcbiAgICAgICAgZGF5c1RvU3VidHJhY3QgKz0gNztcbiAgICAgIH1cbiAgICAgIGRhdGVUb1NldC5zZXREYXRlKGRhdGVUb1NldC5nZXREYXRlKCkgLSBkYXlzVG9TdWJ0cmFjdCk7XG4gICAgfVxuXG4gICAgdGhpcy52bS5zZXRDdXJyZW50RGF0ZShkYXRlVG9TZXQpO1xuICAgIHRoaXMucG9wb3ZlcigpPy5jbG9zZSgpO1xuICAgIHRoaXMuY2FsZW5kYXIoKT8ucmVuZGVyKCk7XG4gICAgdGhpcy5zaWRlYmFyQ2FsZW5kYXIoKT8ucmVuZGVyKCk7XG4gIH1cblxuICBnZXRDZWxsQ2xhc3MgPSAoZGF0ZTogQVhEYXRlVGltZSk6IHN0cmluZyB8IG51bGwgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRWaWV3ID0gdGhpcy52bS5jdXJyZW50Vmlld01vZGUoKTtcbiAgICBjb25zdCBzZWxlY3Rpb25TdGFydERhdGUgPSB0aGlzLnZtLnJhbmdlU3RhcnREYXRlKCk7XG5cbiAgICBpZiAodGhpcy5yYW5nZUJhc2VkVmlld3MuaW5jbHVkZXMoY3VycmVudFZpZXcpKSB7XG4gICAgICBpZiAoc2VsZWN0aW9uU3RhcnREYXRlKSB7XG4gICAgICAgIGNvbnN0IGF4U2VsZWN0aW9uU3RhcnREYXRlID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKHNlbGVjdGlvblN0YXJ0RGF0ZSk7XG4gICAgICAgIGlmIChkYXRlLmVxdWFsKGF4U2VsZWN0aW9uU3RhcnREYXRlLCAnZGF5JykpIHtcbiAgICAgICAgICByZXR1cm4gJ2F4LXJhbmdlLXN0YXJ0IGF4LXJhbmdlLWVuZCc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZyb21SYW5nZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZSh0aGlzLnZtLmN1cnJlbnREYXRlKCkpO1xuICAgICAgY29uc3QgZW5kUmFuZ2UgPSBmcm9tUmFuZ2UuYWRkKCdkYXknLCB0aGlzLnZtLmRheXNDb3VudCgpIC0gMSk7XG5cbiAgICAgIGNvbnN0IGlzU3RhcnQgPSBkYXRlLmVxdWFsKGZyb21SYW5nZSwgJ2RheScpO1xuICAgICAgY29uc3QgaXNFbmQgPSBkYXRlLmVxdWFsKGVuZFJhbmdlLCAnZGF5Jyk7XG5cbiAgICAgIGlmIChpc1N0YXJ0ICYmIGlzRW5kKSByZXR1cm4gJ2F4LXJhbmdlLXN0YXJ0IGF4LXJhbmdlLWVuZCc7XG4gICAgICBpZiAoaXNTdGFydCkgcmV0dXJuICdheC1yYW5nZS1zdGFydCc7XG4gICAgICBpZiAoaXNFbmQpIHJldHVybiAnYXgtcmFuZ2UtZW5kJztcbiAgICAgIGlmIChkYXRlLmNvbXBhcmUoZnJvbVJhbmdlLCAnZGF5JykgPiAwICYmIGRhdGUuY29tcGFyZShlbmRSYW5nZSwgJ2RheScpIDwgMCkge1xuICAgICAgICByZXR1cm4gJ2F4LXJhbmdlLWJldHdlZW4nO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudFZpZXcgPT09ICd3ZWVrJykge1xuICAgICAgY29uc3QgZnJvbSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZSh0aGlzLnZtLmN1cnJlbnREYXRlKCkpO1xuICAgICAgY29uc3QgZW5kID0gZnJvbS5hZGQoJ2RheScsIDYpO1xuXG4gICAgICBpZiAoZGF0ZS5lcXVhbChmcm9tLCAnZGF5JykpIHJldHVybiAnYXgtcmFuZ2Utc3RhcnQnO1xuICAgICAgaWYgKGRhdGUuZXF1YWwoZW5kLCAnZGF5JykpIHJldHVybiAnYXgtcmFuZ2UtZW5kJztcbiAgICAgIGlmIChkYXRlLmNvbXBhcmUoZnJvbSwgJ2RheScpID4gMCAmJiBkYXRlLmNvbXBhcmUoZW5kLCAnZGF5JykgPCAwKSB7XG4gICAgICAgIHJldHVybiAnYXgtcmFuZ2UtYmV0d2Vlbic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgLyoqXG4gICAqIEhlbHBlciBmdW5jdGlvbiB0byBjYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2UgaW4gd2hvbGUgZGF5cyBiZXR3ZWVuIHR3byBkYXRlcy5cbiAgICogVGhlIHJlc3VsdCBpcyBpbmNsdXNpdmUgKGUuZy4sIE1heSA1IHRvIE1heSA2IGlzIGEgMi1kYXkgcmFuZ2UpLlxuICAgKi9cbiAgcHJpdmF0ZSBjYWxjdWxhdGVEaWZmZXJlbmNlSW5EYXlzKHN0YXJ0OiBEYXRlLCBlbmQ6IERhdGUpOiBudW1iZXIge1xuICAgIGlmICghc3RhcnQgfHwgIWVuZCkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHN0YXJ0LmdldEZ1bGxZZWFyKCksIHN0YXJ0LmdldE1vbnRoKCksIHN0YXJ0LmdldERhdGUoKSk7XG4gICAgY29uc3QgZW5kRGF0ZSA9IG5ldyBEYXRlKGVuZC5nZXRGdWxsWWVhcigpLCBlbmQuZ2V0TW9udGgoKSwgZW5kLmdldERhdGUoKSk7XG5cbiAgICBjb25zdCB0aW1lRGlmZmVyZW5jZSA9IGVuZERhdGUuZ2V0VGltZSgpIC0gc3RhcnREYXRlLmdldFRpbWUoKTtcbiAgICBjb25zdCBkYXlzRGlmZmVyZW5jZSA9IE1hdGgucm91bmQodGltZURpZmZlcmVuY2UgLyAoMTAwMCAqIDM2MDAgKiAyNCkpO1xuXG4gICAgcmV0dXJuIGRheXNEaWZmZXJlbmNlICsgMTtcbiAgfVxuXG4gIGhhbmRsZVRvZGF5Q2xpY2soKSB7XG4gICAgdGhpcy52bS5zZXRSYW5nZVN0YXJ0RGF0ZShudWxsKTtcbiAgICBsZXQgY3VycmVudERhdGU6IERhdGU7XG4gICAgaWYgKHRoaXMudm0uY3VycmVudFZpZXdNb2RlKCkgPT09ICd3ZWVrJykge1xuICAgICAgY3VycmVudERhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZVxuICAgICAgICAuY3JlYXRlKG5ldyBEYXRlKCksIHRoaXMubG9jYWxlU2VydmljZS5hY3RpdmVQcm9maWxlKCkuY2FsZW5kYXIuc3lzdGVtKVxuICAgICAgICAuc3RhcnRPZignd2VlaycpLmRhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcbiAgICB9XG4gICAgdGhpcy52bS5zZXRDdXJyZW50RGF0ZShjdXJyZW50RGF0ZSk7XG4gICAgdGhpcy5wb3BvdmVyKCk/LmNsb3NlKCk7XG4gICAgdGhpcy5jYWxlbmRhcigpPy5yZW5kZXIoKTtcbiAgICB0aGlzLnNpZGViYXJDYWxlbmRhcigpPy5yZW5kZXIoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0YXNrVHlwZUl0ZW1zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLnRhc2tUeXBlcygpLm1hcCgodGFza1R5cGUpID0+ICh7XG4gICAgICBpZDogdGFza1R5cGUubmFtZSxcbiAgICAgIHRleHQ6IHRhc2tUeXBlLnRpdGxlLFxuICAgICAgaWNvbjogdGFza1R5cGUuaWNvbixcbiAgICB9KSk7XG4gIH0pO1xuXG4gIC8vIENoZWNrIGlmIGN1cnJlbnQgdmlldyBtb2RlIGlzIGthbmJhbiwgZ3JpZCwgb3Igc3RhdHVzLWdyb3VwZWQtZ3JpZFxuICBwcm90ZWN0ZWQgaXNOb25DYWxlbmRhclZpZXcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbW9kZSA9IHRoaXMudm0uY3VycmVudFZpZXdNb2RlKCk7XG4gICAgcmV0dXJuIG1vZGUgPT09ICdrYW5iYW4nIHx8IG1vZGUgPT09ICdncmlkJyB8fCBtb2RlID09PSAnc3RhdHVzLWdyb3VwZWQtZ3JpZCc7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCBzZWxlY3RlZFRhc2tUeXBlVmFsdWVzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMudm0uc2VsZWN0ZWRUYXNrVHlwZU5hbWVzKCk7XG4gICAgLy8gSWYgaW4gcmFkaW8gbW9kZSAobm9uLWNhbGVuZGFyIHZpZXcpLCByZXR1cm4gb25seSB0aGUgZmlyc3QgdmFsdWUgb3IgZW1wdHkgYXJyYXlcbiAgICBpZiAodGhpcy5pc05vbkNhbGVuZGFyVmlldygpICYmIHZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gW3ZhbHVlc1swXV07XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCBoYW5kbGVUYXNrVHlwZVNlbGVjdGlvbkNoYW5nZShzZWxlY3RlZFZhbHVlczogc3RyaW5nW10gfCBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBDb252ZXJ0IHNpbmdsZSB2YWx1ZSB0byBhcnJheSBpZiBuZWVkZWQgKGZvciByYWRpbyBtb2RlKVxuICAgIGNvbnN0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkoc2VsZWN0ZWRWYWx1ZXMpID8gc2VsZWN0ZWRWYWx1ZXMgOiBzZWxlY3RlZFZhbHVlcyA/IFtzZWxlY3RlZFZhbHVlc10gOiBbXTtcbiAgICAvLyBJZiBub3RoaW5nIGlzIHNlbGVjdGVkLCBwYXNzIGVtcHR5IGFycmF5IHRvIHNob3cgbm8gdHlwZXNcbiAgICB0aGlzLnZtLnNldFNlbGVjdGVkVGFza1R5cGVOYW1lcyh2YWx1ZXMsIHRoaXMuaXNRdWVyeVBhcmFtKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhbGVuZGFyRXZlbnRUeXBlSXRlbXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuY2FsZW5kYXJFdmVudFR5cGVzKCkubWFwKChldmVudFR5cGUpID0+ICh7XG4gICAgICBpZDogZXZlbnRUeXBlLmlkLFxuICAgICAgdGV4dDogZXZlbnRUeXBlLnRpdGxlLFxuICAgICAgaWNvbjogZXZlbnRUeXBlLmljb24sXG4gICAgICBjb2xvcjogZXZlbnRUeXBlLmNvbG9yLFxuICAgIH0pKTtcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIHNlbGVjdGVkQ2FsZW5kYXJFdmVudFR5cGVWYWx1ZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMudm0uc2VsZWN0ZWRDYWxlbmRhckV2ZW50VHlwZUlkcygpO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgaGFuZGxlQ2FsZW5kYXJFdmVudFR5cGVTZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0ZWRWYWx1ZXM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgLy8gSWYgbm90aGluZyBpcyBzZWxlY3RlZCwgcGFzcyBlbXB0eSBhcnJheSB0byBzaG93IG5vIHR5cGVzXG4gICAgdGhpcy52bS5zZXRTZWxlY3RlZENhbGVuZGFyRXZlbnRUeXBlSWRzKHNlbGVjdGVkVmFsdWVzIHx8IFtdLCB0aGlzLmlzUXVlcnlQYXJhbSgpKTtcbiAgICAvLyBSZWZyZXNoIGNhbGVuZGFyIHZpZXcgdG8gdXBkYXRlIGhvbGlkYXlzXG4gICAgdGhpcy5zY2hlZHVsZXJDb21wb25lbnQoKT8ucmVmcmVzaCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkRnJvbVJvdXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNuYXBzaG90ID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwO1xuICAgIGNvbnN0IHZpZXcgPSAoc25hcHNob3QuZ2V0KCd2aWV3JykgYXMgQVhQVGFza0JvYXJkVmlld01vZGUpID8/IG51bGw7XG4gICAgY29uc3QgYWxsVmFsaWRWaWV3cyA9IHRoaXMubWVudUl0ZW1zKCkuZmxhdE1hcCgoYykgPT4gKGMuY2hpbGRyZW4gPyBjLmNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IGNoaWxkLmtleSkgOiBjLmtleSkpO1xuXG4gICAgaWYgKHZpZXcgJiYgYWxsVmFsaWRWaWV3cy5pbmNsdWRlcyh2aWV3KSkge1xuICAgICAgdGhpcy52bS5zZXRWaWV3TW9kZSh2aWV3KTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnZtLmN1cnJlbnRWaWV3TW9kZSgpKSB7XG4gICAgICB0aGlzLnZtLnNldFZpZXdNb2RlKCdkYXknKTtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlID0gc25hcHNob3QuZ2V0QWxsKCd0eXBlJykgYXMgc3RyaW5nW107XG4gICAgY29uc3QgYXNzaWduZWUgPSBzbmFwc2hvdC5nZXRBbGwoJ2Fzc2lnbmVlJykgYXMgc3RyaW5nW107XG4gICAgY29uc3QgcmVwb3J0ZXIgPSBzbmFwc2hvdC5nZXRBbGwoJ3JlcG9ydGVyJykgYXMgc3RyaW5nW107XG4gICAgY29uc3QgcHJpb3JpdHkgPSBzbmFwc2hvdC5nZXRBbGwoJ3ByaW9yaXR5JykgYXMgQVhQUHJpb3JpdHlGaWx0ZXJLZXlbXTtcbiAgICBpZiAodHlwZS5sZW5ndGggfHwgYXNzaWduZWUubGVuZ3RoIHx8IHByaW9yaXR5Lmxlbmd0aCB8fCByZXBvcnRlci5sZW5ndGgpIHtcbiAgICAgIHRoaXMuaXNRdWVyeVBhcmFtLnNldCh0cnVlKTtcbiAgICAgIHRoaXMudm0uc2V0U2VsZWN0ZWRUYXNrVHlwZU5hbWVzKHR5cGUsIHRydWUpO1xuICAgICAgdGhpcy52bS5zZXRTZWxlY3RlZEFzc2lnbmVlSWRzKGFzc2lnbmVlLCB0cnVlKTtcbiAgICAgIHRoaXMudm0uc2V0U2VsZWN0ZWRSZXBvcnRlcklkcyhyZXBvcnRlciwgdHJ1ZSk7XG4gICAgICB0aGlzLnZtLnNldFNlbGVjdGVkUHJpb3JpdGllcyhwcmlvcml0eSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0ZVJhbmdlID0gc25hcHNob3QuZ2V0KCdkYXRlUmFuZ2UnKSBhcyBzdHJpbmc7XG4gICAgaWYgKGRhdGVSYW5nZSkge1xuICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnRhc2tCb2FyZFNlcnZpY2UucmFuZ2VDYWxjdWxhdG9yKGRhdGVSYW5nZSk7XG4gICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgdGhpcy52bS5zZXRDdXJyZW50RGF0ZShyYW5nZS5mcm9tKTtcbiAgICAgICAgdGhpcy52bS5zZXREYXlzQ291bnQodGhpcy5jYWxjdWxhdGVEaWZmZXJlbmNlSW5EYXlzKHJhbmdlLmZyb20sIHJhbmdlLmVuZCkpO1xuICAgICAgICBzd2l0Y2ggKGRhdGVSYW5nZSkge1xuICAgICAgICAgIGNhc2UgJ3RvZGF5JzpcbiAgICAgICAgICAgIHRoaXMudm0uc2V0Vmlld01vZGUoJ2RheScpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAndGhpcy13ZWVrJzpcbiAgICAgICAgICAgIHRoaXMudm0uc2V0Vmlld01vZGUoJ3dlZWsnKTtcbiAgICAgICAgICAgIHRoaXMudm0uc2V0UmFuZ2VTdGFydERhdGUocmFuZ2UuZnJvbSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICd0aGlzLW1vbnRoJzpcbiAgICAgICAgICAgIHRoaXMudm0uc2V0Vmlld01vZGUoJ21vbnRoJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB0YXNrIGlzIHN0aWxsIHByZXNlbnQgaW4gdGhlIGxpc3Qgb2YgdmlzaWJsZSB0YXNrcy5cbiAgICogSWYgbm90LCBpdCBjbGVhcnMgdGhlIHNlbGVjdGlvbiB0byBwcmV2ZW50IHNob3dpbmcgZGV0YWlscyBmb3IgYSBoaWRkZW4gdGFzay5cbiAgICogQHBhcmFtIHZpc2libGVUYXNrcyBUaGUgbmV3IGFycmF5IG9mIHRhc2tzIHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQuXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlU2VsZWN0ZWRUYXNrKHZpc2libGVUYXNrczogQVhQVGFza1tdKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudFNlbGVjdGVkVGFzayA9IHRoaXMudm0uc2VsZWN0ZWRUYXNrKCk7XG4gICAgLy8gUHJvY2VlZCBvbmx5IGlmIGEgdGFzayBpcyBhY3R1YWxseSBzZWxlY3RlZFxuICAgIGlmIChjdXJyZW50U2VsZWN0ZWRUYXNrKSB7XG4gICAgICAvLyBDaGVjayBpZiBhbnkgdGFzayBpbiB0aGUgbmV3IGxpc3QgaGFzIHRoZSBzYW1lIElEIGFzIHRoZSBzZWxlY3RlZCBvbmVcbiAgICAgIGNvbnN0IGlzU2VsZWN0ZWRUYXNrVmlzaWJsZSA9IHZpc2libGVUYXNrcy5zb21lKCh0YXNrKSA9PiB0YXNrLmlkID09PSBjdXJyZW50U2VsZWN0ZWRUYXNrLmlkKTtcblxuICAgICAgLy8gSWYgdGhlIHNlbGVjdGVkIHRhc2sgaXMgTk9UIGluIHRoZSBuZXcgbGlzdCwgY2xlYXIgdGhlIHNlbGVjdGlvbi5cbiAgICAgIGlmICghaXNTZWxlY3RlZFRhc2tWaXNpYmxlKSB7XG4gICAgICAgIHRoaXMudm0uc2VsZWN0VGFzayhudWxsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0UmVzb3VyY2VzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnZtLnNlbGVjdGVkVGFza1R5cGVOYW1lcygpLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhpcy5yZXNvdXJjZXMuc2V0KFtdKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVzb3VyY2VzID0gYXdhaXQgdGhpcy50YXNrQm9hcmRTZXJ2aWNlLmdldFJlc291cmNlcyh0aGlzLnZtLnNlbGVjdGVkVGFza1R5cGVOYW1lcygpWzBdID8/ICcnKTtcbiAgICB0aGlzLnJlc291cmNlcy5zZXQocmVzb3VyY2VzKTtcbiAgfVxuICBsb2cobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgY29uc29sZS5sb2cobWVzc2FnZSk7XG4gIH1cbiAgLy8gcHJvdGVjdGVkIGxheW91dCA9IHZpZXdDaGlsZChBWFBQYWdlTGF5b3V0Q29tcG9uZW50KTtcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHRvZ2dsZVN0YXJ0U2lkZSgpOiB2b2lkIHtcbiAgICB0aGlzLmxheW91dCgpPy50b2dnbGVTdGFydFNpZGUoKTtcbiAgfVxufVxuIiwiPGF4cC1wYWdlLWxheW91dCAqdHJhbnNsYXRlPVwibGV0IHRcIj5cbiAgPGF4cC1sYXlvdXQtc3RhcnQtc2lkZSBjbGFzcz1cImF4LWJvcmRlci1lIGF4LWxpZ2h0ZXN0LXN1cmZhY2UgYXgtaC1mdWxsXCI+XG4gICAgPGF4cC1sYXlvdXQtaGVhZGVyIGNsYXNzPVwiYXgtcC00IGF4LWJvcmRlci1iXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidmlld1NlbGVjdG9yVGVtcGxhdGU7IGNvbnRleHQ6IHsgbG9jYXRpb246ICdzaWRlYmFyJyB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9heHAtbGF5b3V0LWhlYWRlcj5cblxuICAgIDxheHAtbGF5b3V0LWNvbnRlbnQgY2xhc3M9XCJheC1mbGV4IGF4LWZsZXgtY29sIGF4LW1pbi1oLTAgYXgtb3ZlcmZsb3cteS1hdXRvXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtcC00IGF4LWZsZXggYXgtZmxleC1jb2wgYXgtZ2FwLTZcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtZmxleC1jb2wgYXgtZ2FwLTNcIj5cbiAgICAgICAgICA8IS0tIDxoMyBjbGFzcz1cImF4LXRleHQtc20gYXgtZm9udC1zZW1pYm9sZCBheC10ZXh0LW5ldXRyYWwtODAwIGF4LXVwcGVyY2FzZSBheC10cmFja2luZy13aWRlXCI+XG4gICAgICAgICAgICB7eyAodCgndGFzay1ib2FyZC50ZXJtcy5jYWxlbmRhcicsIHsgc2NvcGU6IHJvb3RDb25maWcuY29uZmlnLmkxOG59KSB8IGFzeW5jKSB9fVxuICAgICAgICAgIDwvaDM+IC0tPlxuICAgICAgICAgIDxheC1jYWxlbmRhclxuICAgICAgICAgICAgI3NpZGViYXJDYWxlbmRhclxuICAgICAgICAgICAgW3R5cGVdPVwiY2FsZW5kYXJUeXBlKClcIlxuICAgICAgICAgICAgW2RlcHRoXT1cImNhbGVuZGFyRGVwdGgoKVwiXG4gICAgICAgICAgICBbY2VsbENsYXNzXT1cImdldENlbGxDbGFzc1wiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJjdXJyZW50RGF0ZUZvckNhbGVuZGFyKClcIlxuICAgICAgICAgICAgW2RheUNlbGxUZW1wbGF0ZV09XCJkYXlDZWxsVGVtcGxhdGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJheC1zaW5nbGUtcmFuZ2UtY2FsZW5kYXIgYXgtYm9yZGVyIGF4LXJvdW5kZWQtbGdcIlxuICAgICAgICAgICAgKG9uU2xvdENsaWNrKT1cImhhbmRsZUNhbGVuZGFyU2xvdENsaWNrKCRldmVudClcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L2F4LWNhbGVuZGFyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGF4QWNjb3JkaW9uR3JvdXAgW2FjY29yZGlvbl09XCJmYWxzZVwiPlxuICAgICAgICAgIDwhLS0gPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJheC1tYi0yIGF4LXctZnVsbCBheC1ib3JkZXIgYXgtcC0yIGF4LXJvdW5kZWQtbGdcIlxuICAgICAgICAgICAgYXhBY2NvcmRpb25JdGVtXG4gICAgICAgICAgICAjdGFza1R5cGVBY2NvcmRpb249XCJheEFjY29yZGlvbkl0ZW1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJheC1mbGV4IGF4LWl0ZW1zLWNlbnRlciBheC1qdXN0aWZ5LWJldHdlZW4gYXgtZ2FwLTIgYXgtc2VsZWN0LW5vbmUgYXgtY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICBheEFjY29yZGlvbkl0ZW1IZWFkZXJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiYXgtdGV4dC1zbSBheC1mb250LXNlbWlib2xkXCI+XG4gICAgICAgICAgICAgICAge3sgKHQoJ3Rhc2stYm9hcmQuZmlsdGVyLnRhc2stdHlwZScsIHsgc2NvcGU6IHJvb3RDb25maWcuY29uZmlnLmkxOG59KSB8IGFzeW5jKSEgfX1cbiAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgPGF4LWljb25cbiAgICAgICAgICAgICAgICBbaWNvbl09XCJ0YXNrVHlwZUFjY29yZGlvbj8uaXNDb2xsYXBzZWQoKSA/ICdmYS1saWdodCBmYS1jaGV2cm9uLWRvd24nIDogJ2ZhLWxpZ2h0IGZhLWNoZXZyb24tdXAnXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImF4LXRyYW5zaXRpb24tdHJhbnNmb3JtXCJcbiAgICAgICAgICAgICAgPjwvYXgtaWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBheEFjY29yZGlvbkl0ZW1Db250ZW50PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtcHQtMlwiPlxuICAgICAgICAgICAgICAgIDxheC1zZWxlY3Rpb24tbGlzdFxuICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cInRhc2tUeXBlSXRlbXMoKVwiXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZFRhc2tUeXBlVmFsdWVzKClcIlxuICAgICAgICAgICAgICAgICAgKG9uVmFsdWVDaGFuZ2VkKT1cImhhbmRsZVRhc2tUeXBlU2VsZWN0aW9uQ2hhbmdlKCRldmVudC52YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uPVwidmVydGljYWxcIlxuICAgICAgICAgICAgICAgICAgW211bHRpcGxlXT1cIiFpc05vbkNhbGVuZGFyVmlldygpXCJcbiAgICAgICAgICAgICAgICAgIFtzaG93Q29udHJvbF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlRmllbGQ9XCJpZFwiXG4gICAgICAgICAgICAgICAgICB0ZXh0RmllbGQ9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2l0ZW1UZW1wbGF0ZSBsZXQtaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChpdGVtLmljb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiaXRlbS5pY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiaXRlbS5pY29uID8gJ2F4LW1sLTInIDogJydcIj57eyBpdGVtLnRleHQgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L2F4LXNlbGVjdGlvbi1saXN0PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImF4LW1iLTIgYXgtdy1mdWxsIGF4LWJvcmRlciBheC1wLTIgYXgtcm91bmRlZC1sZ1wiXG4gICAgICAgICAgICBheEFjY29yZGlvbkl0ZW1cbiAgICAgICAgICAgICNjYWxlbmRhckZpbHRlclR5cGVBY2NvcmRpb249XCJheEFjY29yZGlvbkl0ZW1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJheC1mbGV4IGF4LWl0ZW1zLWNlbnRlciBheC1qdXN0aWZ5LWJldHdlZW4gYXgtZ2FwLTIgYXgtc2VsZWN0LW5vbmUgYXgtY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICBheEFjY29yZGlvbkl0ZW1IZWFkZXJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiYXgtdGV4dC1zbSBheC1mb250LXNlbWlib2xkXCI+XG4gICAgICAgICAgICAgICAge3sgKCdAdGFzay1tYW5hZ2VtZW50OnRhc2stYm9hcmQuZmlsdGVyLnRpdGxlLXBsdXJhbCcgfCB0cmFuc2xhdGUgfCBhc3luYykhIH19XG4gICAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgICAgIDxheC1pY29uXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiY2FsZW5kYXJGaWx0ZXJUeXBlQWNjb3JkaW9uPy5pc0NvbGxhcHNlZCgpID8gJ2ZhLWxpZ2h0IGZhLWNoZXZyb24tZG93bicgOiAnZmEtbGlnaHQgZmEtY2hldnJvbi11cCdcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtdHJhbnNpdGlvbi10cmFuc2Zvcm1cIlxuICAgICAgICAgICAgICA+PC9heC1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGF4QWNjb3JkaW9uSXRlbUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxheG0tdGFzay1ib2FyZC1maWx0ZXJzICNmaWx0ZXJzQ29tcG9uZW50IFtpc1F1ZXJ5UGFyYW1dPVwiaXNRdWVyeVBhcmFtKClcIj48L2F4bS10YXNrLWJvYXJkLWZpbHRlcnM+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBAaWYgKCFpc05vbkNhbGVuZGFyVmlldygpKSB7XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJheC1tYi0yIGF4LXctZnVsbCBheC1ib3JkZXIgYXgtcC0yIGF4LXJvdW5kZWQtbGdcIlxuICAgICAgICAgICAgYXhBY2NvcmRpb25JdGVtXG4gICAgICAgICAgICAjY2FsZW5kYXJFdmVudFR5cGVBY2NvcmRpb249XCJheEFjY29yZGlvbkl0ZW1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJheC1mbGV4IGF4LWl0ZW1zLWNlbnRlciBheC1qdXN0aWZ5LWJldHdlZW4gYXgtZ2FwLTIgYXgtc2VsZWN0LW5vbmUgYXgtY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICBheEFjY29yZGlvbkl0ZW1IZWFkZXJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiYXgtdGV4dC1zbSBheC1mb250LXNlbWlib2xkXCI+XG4gICAgICAgICAgICAgICAge3sgKCdAdGFzay1tYW5hZ2VtZW50OnRhc2stYm9hcmQuZmlsdGVyLmNhbGVuZGFycycgfCB0cmFuc2xhdGUgfCBhc3luYykhIH19XG4gICAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgICAgIDxheC1pY29uXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiY2FsZW5kYXJFdmVudFR5cGVBY2NvcmRpb24/LmlzQ29sbGFwc2VkKCkgPyAnZmEtbGlnaHQgZmEtY2hldnJvbi1kb3duJyA6ICdmYS1saWdodCBmYS1jaGV2cm9uLXVwJ1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJheC10cmFuc2l0aW9uLXRyYW5zZm9ybVwiXG4gICAgICAgICAgICAgID48L2F4LWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgYXhBY2NvcmRpb25JdGVtQ29udGVudD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF4LXB0LTJcIj5cbiAgICAgICAgICAgICAgICA8YXgtc2VsZWN0aW9uLWxpc3RcbiAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJjYWxlbmRhckV2ZW50VHlwZUl0ZW1zKClcIlxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0ZWRDYWxlbmRhckV2ZW50VHlwZVZhbHVlcygpXCJcbiAgICAgICAgICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJoYW5kbGVDYWxlbmRhckV2ZW50VHlwZVNlbGVjdGlvbkNoYW5nZSgkZXZlbnQudmFsdWUpXCJcbiAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbj1cInZlcnRpY2FsXCJcbiAgICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtzaG93Q29udHJvbF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlRmllbGQ9XCJpZFwiXG4gICAgICAgICAgICAgICAgICB0ZXh0RmllbGQ9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2l0ZW1UZW1wbGF0ZSBsZXQtaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChpdGVtLmljb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiaXRlbS5pY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiaXRlbS5pY29uID8gJ2F4LW1sLTInIDogJydcIj57eyBpdGVtLnRleHQgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L2F4LXNlbGVjdGlvbi1saXN0PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2F4cC1sYXlvdXQtY29udGVudD5cbiAgPC9heHAtbGF5b3V0LXN0YXJ0LXNpZGU+XG4gIDxheHAtcGFnZS10b29sYmFyPlxuICAgIDxheHAtbGF5b3V0LXByZWZpeCBjbGFzcz1cInNtOmF4LWZsZXgtcm93IGF4LWZsZXgtY29sIGF4LWl0ZW1zLXN0YXJ0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWhlYWRlciBheC13LW1heCBheC1zbSBzbTpheC1tZFwiPlxuICAgICAgICA8YXgtYnV0dG9uIGxvb2s9XCJibGFua1wiIChvbkNsaWNrKT1cImNoYW5nZURhdGUoZmFsc2UpXCI+XG4gICAgICAgICAgPGF4LWljb24gY2xhc3M9XCJheC1pY29uIGF4LXRleHQteGwgYXgtaWNvbi1jaGV2cm9uLWxlZnQgYXJyb3ctaWNvblwiPjwvYXgtaWNvbj5cbiAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgIDxheC1idXR0b24gbG9vaz1cImJsYW5rXCIgW3RleHRdPVwidGltZVRleHQoKVwiICNkYXRlPjwvYXgtYnV0dG9uPlxuICAgICAgICA8YXgtYnV0dG9uIGxvb2s9XCJibGFua1wiIChvbkNsaWNrKT1cImNoYW5nZURhdGUodHJ1ZSlcIj5cbiAgICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImF4LWljb24gYXgtdGV4dC14bCBheC1pY29uLWNoZXZyb24tcmlnaHQgYXJyb3ctaWNvblwiPjwvYXgtaWNvbj5cbiAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgIDwhLS0gPGF4LXBvcG92ZXIgW3RhcmdldF09XCJkYXRlXCIgW3BsYWNlbWVudF09XCInYm90dG9tJ1wiICNwb3BvdmVyIFthZGFwdGl2aXR5RW5hYmxlZF09XCJ0cnVlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF4LW92ZXJsYXktcGFuZVwiPlxuICAgICAgICAgICAgPGF4LWNhbGVuZGFyXG4gICAgICAgICAgICAgICNjYWxlbmRhclxuICAgICAgICAgICAgICBbdHlwZV09XCJjYWxlbmRhclR5cGUoKVwiXG4gICAgICAgICAgICAgIFtkZXB0aF09XCJjYWxlbmRhckRlcHRoKClcIlxuICAgICAgICAgICAgICBbY2VsbENsYXNzXT1cImdldENlbGxDbGFzc1wiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cInZtLmN1cnJlbnREYXRlKClcIlxuICAgICAgICAgICAgICBjbGFzcz1cImF4LXNpbmdsZS1yYW5nZS1jYWxlbmRhclwiXG4gICAgICAgICAgICAgIChvblNsb3RDbGljayk9XCJoYW5kbGVDYWxlbmRhclNsb3RDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGF4LWZvb3Rlcj5cbiAgICAgICAgICAgICAgICA8YXgtYnV0dG9uXG4gICAgICAgICAgICAgICAgICBsb29rPVwibGlua1wiXG4gICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgW3RleHRdPVwidG9kYXlCdXR0b25UZXh0KClcIlxuICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlVG9kYXlDbGljaygpXCJcbiAgICAgICAgICAgICAgICA+PC9heC1idXR0b24+XG4gICAgICAgICAgICAgIDwvYXgtZm9vdGVyPlxuICAgICAgICAgICAgPC9heC1jYWxlbmRhcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9heC1wb3BvdmVyPiAtLT5cbiAgICAgIDwvZGl2PlxuICAgIDwvYXhwLWxheW91dC1wcmVmaXg+XG5cbiAgICA8YXhwLWxheW91dC1zdWZmaXg+XG4gICAgICBAaWYgKGRldmljZVNlcnZpY2UuaXNTbWFsbCgpKSB7XG4gICAgICA8YXgtYnV0dG9uIGlkPVwiYXhwLXRvb2xiYXItYnRuLWZpbHRlcnNcIiAob25DbGljayk9XCJ0b2dnbGVTdGFydFNpZGUoKVwiIFtpY29uT25seV09XCJ0cnVlXCIgW2NvbG9yXT1cIidkZWZhdWx0J1wiPlxuICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLWJhcnNcIj48L2k+XG4gICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgIH1cbiAgICAgIDwhLS0gQGlmICghZGV2aWNlU2VydmljZS5pc1NtYWxsKCkpIHtcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ2aWV3U2VsZWN0b3JUZW1wbGF0ZTsgY29udGV4dDogeyBsb2NhdGlvbjogJ3Rvb2xiYXInIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIH0gLS0+XG5cbiAgICAgIDwhLS0gQGlmKGRldmljZVNlcnZpY2UuaXNMYXJnZSgpKSB7XG4gICAgICA8YXgtYnV0dG9uIChvbkNsaWNrKT1cInZtLnRvZ2dsZURldGFpbFBhbmVsKClcIj5cbiAgICAgICAgPGF4LWljb24gaWNvbj1cInt7IHZtLmlzRGV0YWlsUGFuZWxPcGVuKCkgPyAnZmEtc29saWQgZmEtc3F1YXJlLWluZm8nIDogJ2ZhLWxpZ2h0IGZhLXNxdWFyZS1pbmZvJyB9fVwiPjwvYXgtaWNvbj5cbiAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgfSAtLT5cbiAgICA8L2F4cC1sYXlvdXQtc3VmZml4PlxuICA8L2F4cC1wYWdlLXRvb2xiYXI+XG4gIDxheHAtcGFnZS1jb250ZW50IGNsYXNzPVwiYXgtZmxleCBheC1mbGV4LXJvdyBheC1nYXAtMlwiPlxuICAgIEBpZiAoaXNSZWFkeSgpKSB7IEBzd2l0Y2godm0uY3VycmVudFZpZXdNb2RlKCkpIHsgQGNhc2UoJ2thbmJhbicpIHtcbiAgICA8YXhtLXRhc2stYm9hcmQta2FuYmFuLXZpZXdcbiAgICAgIGNsYXNzPVwiYXhwLWthbmJhbi1jb250YWluZXIgYXgtaC1mdWxsIGF4LXctZnVsbCBheC1taW4tdy0wXCJcbiAgICAgIFt0YXNrc109XCJyZXNvbHZlZFRhc2tzKClcIlxuICAgICAgKG9uVGFza0NsaWNrKT1cInZtLnNlbGVjdFRhc2soJGV2ZW50KVwiXG4gICAgICAob25BY3Rpb25DbGljayk9XCJoYW5kbGVDb250ZXh0TWVudSgkZXZlbnQpXCJcbiAgICA+PC9heG0tdGFzay1ib2FyZC1rYW5iYW4tdmlldz5cbiAgICB9IEBjYXNlKCdncmlkJykge1xuICAgIDxheG0tdGFzay1ib2FyZC1ncmlkLXZpZXdcbiAgICAgIGNsYXNzPVwiYXgtaC1mdWxsIGF4LXctZnVsbCBheC1taW4tdy0wXCJcbiAgICAgIFtkYXRhU291cmNlXT1cImdyaWREYXRhU291cmNlXCJcbiAgICAgIChvblRhc2tDbGljayk9XCJ2bS5zZWxlY3RUYXNrKCRldmVudClcIlxuICAgICAgKG9uQWN0aW9uQ2xpY2spPVwiaGFuZGxlQ29udGV4dE1lbnUoJGV2ZW50KVwiXG4gICAgPjwvYXhtLXRhc2stYm9hcmQtZ3JpZC12aWV3PlxuICAgIH0gQGNhc2UoJ3N0YXR1cy1ncm91cGVkLWdyaWQnKSB7XG4gICAgPGF4bS10YXNrLWJvYXJkLXN0YXR1cy1ncm91cGVkLWdyaWQtdmlld1xuICAgICAgY2xhc3M9XCJheC1mbGV4IGF4LWZsZXgtY29sIGF4LWdhcC0yIGF4LXctZnVsbCBheC1taW4tdy0wXCJcbiAgICAgIFtkYXRhU291cmNlXT1cImdyaWREYXRhU291cmNlXCJcbiAgICAgIChvbkFjdGlvbkNsaWNrKT1cImhhbmRsZUNvbnRleHRNZW51KCRldmVudClcIlxuICAgID48L2F4bS10YXNrLWJvYXJkLXN0YXR1cy1ncm91cGVkLWdyaWQtdmlldz5cbiAgICB9IEBkZWZhdWx0IHtcbiAgICA8YXhtLXRhc2stYm9hcmQtY2FsZW5kYXItdmlld1xuICAgICAgY2xhc3M9XCJheHAtc2NoZWR1bGVyLWNvbnRhaW5lciBheC1oLWZ1bGwgYXgtdy1mdWxsIGF4LW1pbi13LTBcIlxuICAgICAgW3Jlc291cmNlc109XCJyZXNvdXJjZXMoKVwiXG4gICAgICBbc3RhcnRpbmdEYXRlXT1cInZtLmN1cnJlbnREYXRlKClcIlxuICAgICAgW2RhdGFTb3VyY2VdPVwic2NoZWR1bGVyRGF0YVNvdXJjZVwiXG4gICAgICAob25UYXNrQ2xpY2spPVwidm0uc2VsZWN0VGFzaygkZXZlbnQpXCJcbiAgICAgIFtzZWxlY3RlZFZpZXddPVwidm0uY3VycmVudFZpZXdNb2RlKClcIlxuICAgICAgKG9uQWN0aW9uQ2xpY2spPVwiaGFuZGxlQ29udGV4dE1lbnUoJGV2ZW50KVwiXG4gICAgICAob25UYXNrUmlnaHRDbGljayk9XCJoYW5kbGVDb250ZXh0TWVudSgkZXZlbnQpXCJcbiAgICAgIChjb21wb25lbnQpPVwic2NoZWR1bGVyQ29tcG9uZW50Q2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgIChvbk1vbnRoU2xvdERibENsaWNrZWQpPVwiaGFuZGxlTW9udGhTbG90RGJsQ2xpY2tlZCgkZXZlbnQpXCJcbiAgICA+PC9heG0tdGFzay1ib2FyZC1jYWxlbmRhci12aWV3PlxuICAgIH0gfVxuICAgIDxheC1jb250ZXh0LW1lbnVcbiAgICAgICNyb290Q29udGV4dE1lbnVcbiAgICAgIFtjbG9zZU9uXT1cIidsZWF2ZSdcIlxuICAgICAgW29yaWVudGF0aW9uXT1cIid2ZXJ0aWNhbCdcIlxuICAgICAgKG9uT3BlbmluZyk9XCJoYW5kbGVDb250ZXh0TWVudU9uT3BlbmluZygkZXZlbnQpXCJcbiAgICAgIChvbkl0ZW1DbGljayk9XCJoYW5kbGVDb250ZXh0TWVudUl0ZW1DbGljaygkZXZlbnQpXCJcbiAgICA+XG4gICAgPC9heC1jb250ZXh0LW1lbnU+XG4gICAgQGlmICh2bS5pc0RldGFpbFBhbmVsT3BlbigpICYmIGRldmljZVNlcnZpY2UuaXNMYXJnZSgpKSB7XG4gICAgPGF4bS10YXNrLWJvYXJkLWRldGFpbC1wYW5lbD48L2F4bS10YXNrLWJvYXJkLWRldGFpbC1wYW5lbD5cbiAgICB9IH0gQGVsc2Uge1xuICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWl0ZW1zLWNlbnRlciBheC1qdXN0aWZ5LWNlbnRlciBheC13LWZ1bGwgYXgtaC1mdWxsXCI+XG4gICAgICA8YXgtbG9hZGluZz48L2F4LWxvYWRpbmc+XG4gICAgPC9kaXY+XG4gICAgfVxuICA8L2F4cC1wYWdlLWNvbnRlbnQ+XG48L2F4cC1wYWdlLWxheW91dD5cblxuPG5nLXRlbXBsYXRlICN2aWV3U2VsZWN0b3JUZW1wbGF0ZSBsZXQtbG9jYXRpb249XCJsb2NhdGlvblwiPlxuICBAaWYgKGxvY2F0aW9uID09PSAnc2lkZWJhcicpIHtcbiAgPGF4LWJ1dHRvblxuICAgIFt0ZXh0XT1cIignQHRhc2stbWFuYWdlbWVudDp0YXNrLWJvYXJkLnZpZXcuJyArIHNlbGVjdGVkVmlld01vZGUoKS50ZXh0IHwgdHJhbnNsYXRlIHwgYXN5bmMpIVwiXG4gICAgY2xhc3M9XCJheC13LWZ1bGxcIlxuICA+XG4gICAgPGF4LXByZWZpeD48YXgtaWNvbiBbaWNvbl09XCJzZWxlY3RlZFZpZXdNb2RlKCkuaWNvblwiPjwvYXgtaWNvbj48L2F4LXByZWZpeD5cbiAgICA8YXgtZHJvcGRvd24tcGFuZWwgI3NpZGViYXJEcm9wZG93blBhbmVsPlxuICAgICAgPGF4LW1lbnUgW29yaWVudGF0aW9uXT1cIid2ZXJ0aWNhbCdcIiBjbGFzcz1cImF4LW1lbnUtY29udGFpbmVyXCI+XG4gICAgICAgIEBmb3IgKGNhdGVnb3J5IG9mIG1lbnVJdGVtcygpOyB0cmFjayBjYXRlZ29yeS5rZXkpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICBAaWYgKGNhdGVnb3J5LmNoaWxkcmVuICYmIGNhdGVnb3J5LmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICA8YXgtbWVudS1pdGVtPlxuICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgPGF4LWljb24gW2ljb25dPVwiY2F0ZWdvcnkuaWNvblwiPjwvYXgtaWNvbj5cbiAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgICAgPGF4LXRleHQ+e3sgKCdAdGFzay1tYW5hZ2VtZW50OnRhc2stYm9hcmQuJyArIGNhdGVnb3J5LnRleHQgfCB0cmFuc2xhdGUgfCBhc3luYykhIH19PC9heC10ZXh0PlxuICAgICAgICAgICAgQGZvciAoY2hpbGQgb2YgY2F0ZWdvcnkuY2hpbGRyZW47IHRyYWNrIGNoaWxkLmtleSkge1xuICAgICAgICAgICAgPGF4LW1lbnUtaXRlbSAob25DbGljayk9XCJoYW5kbGVWaWV3Q2hhbmdlKGNoaWxkLmtleSwgc2lkZWJhckRyb3Bkb3duUGFuZWwpXCI+XG4gICAgICAgICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgICAgICAgPGF4LWljb24gW2ljb25dPVwiY2hpbGQuaWNvblwiPjwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgICAgICAgIDxheC10ZXh0Pnt7ICgnQHRhc2stbWFuYWdlbWVudDp0YXNrLWJvYXJkLnZpZXcuJyArIGNoaWxkLnRleHQgfCB0cmFuc2xhdGUgfCBhc3luYykhIH19PC9heC10ZXh0PlxuICAgICAgICAgICAgPC9heC1tZW51LWl0ZW0+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9heC1tZW51LWl0ZW0+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGF4LW1lbnUtaXRlbSAob25DbGljayk9XCJoYW5kbGVWaWV3Q2hhbmdlKGNhdGVnb3J5LmtleSwgc2lkZWJhckRyb3Bkb3duUGFuZWwpXCI+XG4gICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICA8YXgtaWNvbiBbaWNvbl09XCJjYXRlZ29yeS5pY29uXCI+PC9heC1pY29uPlxuICAgICAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgICAgICA8YXgtdGV4dD57eyAoJ0B0YXNrLW1hbmFnZW1lbnQ6dGFzay1ib2FyZC4nICsgY2F0ZWdvcnkudGV4dCB8IHRyYW5zbGF0ZSB8IGFzeW5jKSEgfX08L2F4LXRleHQ+XG4gICAgICAgICAgPC9heC1tZW51LWl0ZW0+XG4gICAgICAgICAgfVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgfVxuICAgICAgPC9heC1tZW51PlxuICAgIDwvYXgtZHJvcGRvd24tcGFuZWw+XG4gICAgPGF4LXN1ZmZpeD5cbiAgICAgIDxheC1pY29uIGljb249XCJmYS1saWdodCBmYS1jYXJldC1kb3duXCI+PC9heC1pY29uPlxuICAgIDwvYXgtc3VmZml4PlxuICA8L2F4LWJ1dHRvbj5cbiAgfSBAZWxzZSB7XG4gIDxheC1idXR0b24gW3RleHRdPVwiKCdAdGFzay1tYW5hZ2VtZW50OnRhc2stYm9hcmQudmlldy4nICsgc2VsZWN0ZWRWaWV3TW9kZSgpLnRleHQgfCB0cmFuc2xhdGUgfCBhc3luYykhXCI+XG4gICAgPGF4LXByZWZpeD48YXgtaWNvbiBbaWNvbl09XCJzZWxlY3RlZFZpZXdNb2RlKCkuaWNvblwiPjwvYXgtaWNvbj48L2F4LXByZWZpeD5cbiAgICA8YXgtZHJvcGRvd24tcGFuZWwgI3Rvb2xiYXJEcm9wZG93blBhbmVsPlxuICAgICAgPGF4LW1lbnUgW29yaWVudGF0aW9uXT1cIid2ZXJ0aWNhbCdcIiBjbGFzcz1cImF4LW1lbnUtY29udGFpbmVyXCI+XG4gICAgICAgIEBmb3IgKGNhdGVnb3J5IG9mIG1lbnVJdGVtcygpOyB0cmFjayBjYXRlZ29yeS5rZXkpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICBAaWYgKGNhdGVnb3J5LmNoaWxkcmVuICYmIGNhdGVnb3J5LmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICA8YXgtbWVudS1pdGVtPlxuICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgPGF4LWljb24gW2ljb25dPVwiY2F0ZWdvcnkuaWNvblwiPjwvYXgtaWNvbj5cbiAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgICAgPGF4LXRleHQ+e3sgKCdAdGFzay1tYW5hZ2VtZW50OnRhc2stYm9hcmQuJyArIGNhdGVnb3J5LnRleHQgfCB0cmFuc2xhdGUgfCBhc3luYykhIH19PC9heC10ZXh0PlxuICAgICAgICAgICAgQGZvciAoY2hpbGQgb2YgY2F0ZWdvcnkuY2hpbGRyZW47IHRyYWNrIGNoaWxkLmtleSkge1xuICAgICAgICAgICAgPGF4LW1lbnUtaXRlbSAob25DbGljayk9XCJoYW5kbGVWaWV3Q2hhbmdlKGNoaWxkLmtleSwgdG9vbGJhckRyb3Bkb3duUGFuZWwpXCI+XG4gICAgICAgICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgICAgICAgPGF4LWljb24gW2ljb25dPVwiY2hpbGQuaWNvblwiPjwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgICAgICAgIDxheC10ZXh0Pnt7ICgnQHRhc2stbWFuYWdlbWVudDp0YXNrLWJvYXJkLnZpZXcuJyArIGNoaWxkLnRleHQgfCB0cmFuc2xhdGUgfCBhc3luYykhIH19PC9heC10ZXh0PlxuICAgICAgICAgICAgPC9heC1tZW51LWl0ZW0+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9heC1tZW51LWl0ZW0+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGF4LW1lbnUtaXRlbSAob25DbGljayk9XCJoYW5kbGVWaWV3Q2hhbmdlKGNhdGVnb3J5LmtleSwgdG9vbGJhckRyb3Bkb3duUGFuZWwpXCI+XG4gICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICA8YXgtaWNvbiBbaWNvbl09XCJjYXRlZ29yeS5pY29uXCI+PC9heC1pY29uPlxuICAgICAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgICAgICA8YXgtdGV4dD57eyAoJ0B0YXNrLW1hbmFnZW1lbnQ6dGFzay1ib2FyZC4nICsgY2F0ZWdvcnkudGV4dCB8IHRyYW5zbGF0ZSB8IGFzeW5jKSEgfX08L2F4LXRleHQ+XG4gICAgICAgICAgPC9heC1tZW51LWl0ZW0+XG4gICAgICAgICAgfVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgfVxuICAgICAgPC9heC1tZW51PlxuICAgIDwvYXgtZHJvcGRvd24tcGFuZWw+XG4gICAgPGF4LXN1ZmZpeD5cbiAgICAgIDxheC1pY29uIGljb249XCJmYS1saWdodCBmYS1jYXJldC1kb3duXCI+PC9heC1pY29uPlxuICAgIDwvYXgtc3VmZml4PlxuICA8L2F4LWJ1dHRvbj5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkYXlDZWxsVGVtcGxhdGUgbGV0LXNsb3Q+XG4gIDxkaXZcbiAgICBjbGFzcz1cImF4LWZsZXggYXgtZmxleC1jb2wgYXgtaXRlbXMtY2VudGVyIGF4LWp1c3RpZnktYmV0d2VlbiBheC13LWZ1bGwgYXgtZ2FwLTFcIlxuICAgIFtzdHlsZS5wYWRkaW5nLWJvdHRvbV09XCInMC4yNXJlbSdcIlxuICA+XG4gICAgPHNwYW4gY2xhc3M9XCJheC1mbGV4LTEgYXgtdGV4dC1jZW50ZXJcIj57eyBzbG90LnNsb3QudGV4dCA/PyBzbG90LnNsb3QuZGF0ZT8uZGF5ID8/ICcnIH19PC9zcGFuPlxuICAgIEBpZiAoc2xvdC5zbG90LmRhdGUgJiYgZ2V0RGF5RGF0YUNvdW50KHNsb3Quc2xvdC5kYXRlKSA+IDApIHtcbiAgICA8YXgtYmFkZ2UgY29sb3I9XCJ3YXJuaW5nXCI+PC9heC1iYWRnZT5cbiAgICB9XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ=="],"names":["i2","i1","i3","i4","i5","i6"],"mappings":"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"}