verben-workflow-ui 0.5.77 → 0.5.79

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 (196) hide show
  1. package/README.md +13 -0
  2. package/esm2022/src/lib/components/actors/actors.component.mjs +5 -5
  3. package/esm2022/src/lib/components/actors/actors.facade.mjs +3 -3
  4. package/esm2022/src/lib/components/actors/actors.form.component.mjs +5 -5
  5. package/esm2022/src/lib/components/actors/actors.module.mjs +4 -4
  6. package/esm2022/src/lib/components/actors/actors.service.mjs +3 -3
  7. package/esm2022/src/lib/components/actors/actors.state.mjs +3 -3
  8. package/esm2022/src/lib/components/designer/components/label-editor.component.mjs +6 -6
  9. package/esm2022/src/lib/components/designer/components/node-selector.component.mjs +4 -4
  10. package/esm2022/src/lib/components/designer/components/swimlane-label.component.mjs +3 -3
  11. package/esm2022/src/lib/components/designer/components/swimlane-popup.component.mjs +3 -3
  12. package/esm2022/src/lib/components/designer/components/wf-canvas.component.mjs +6 -6
  13. package/esm2022/src/lib/components/designer/components/wf-designer.component.mjs +3 -3
  14. package/esm2022/src/lib/components/designer/components/wf-toolbar.component.mjs +6 -6
  15. package/esm2022/src/lib/components/designer/services/canvas-state.service.mjs +3 -3
  16. package/esm2022/src/lib/components/designer/services/connection-segment-interaction.service.mjs +3 -3
  17. package/esm2022/src/lib/components/designer/services/connection.service.mjs +3 -3
  18. package/esm2022/src/lib/components/designer/services/keyboard-handler.service.mjs +3 -3
  19. package/esm2022/src/lib/components/designer/services/label-management.service.mjs +3 -3
  20. package/esm2022/src/lib/components/designer/services/node-finder.service.mjs +3 -3
  21. package/esm2022/src/lib/components/designer/services/node-interaction.service.mjs +3 -3
  22. package/esm2022/src/lib/components/designer/services/node-precondition.service.mjs +3 -3
  23. package/esm2022/src/lib/components/designer/services/node-selection.service.mjs +3 -3
  24. package/esm2022/src/lib/components/designer/services/orthogonal-router.service.mjs +3 -3
  25. package/esm2022/src/lib/components/designer/services/position-update.service.mjs +3 -3
  26. package/esm2022/src/lib/components/designer/services/rendering.service.mjs +3 -3
  27. package/esm2022/src/lib/components/designer/services/swimlane-management.service.mjs +3 -3
  28. package/esm2022/src/lib/components/designer/services/swimlane-stats.service.mjs +3 -3
  29. package/esm2022/src/lib/components/designer/services/viewport.service.mjs +3 -3
  30. package/esm2022/src/lib/components/designer/services/wf-facade.service.mjs +3 -3
  31. package/esm2022/src/lib/components/designer/services/wf-mapper.service.mjs +3 -3
  32. package/esm2022/src/lib/components/designer/services/wf-persistence.service.mjs +3 -3
  33. package/esm2022/src/lib/components/designer/services/wf-state.service.mjs +3 -3
  34. package/esm2022/src/lib/components/expiration/expiration.component.mjs +3 -3
  35. package/esm2022/src/lib/components/expiration/expiration.module.mjs +4 -4
  36. package/esm2022/src/lib/components/file-render/file-render.component.mjs +5 -5
  37. package/esm2022/src/lib/components/file-render/file-render.module.mjs +4 -4
  38. package/esm2022/src/lib/components/file-upload/file-upload.component.mjs +5 -5
  39. package/esm2022/src/lib/components/file-upload/file-upload.module.mjs +4 -4
  40. package/esm2022/src/lib/components/flowable-status/flowable-status.component.mjs +5 -5
  41. package/esm2022/src/lib/components/flowable-status/flowable-status.facade.mjs +3 -3
  42. package/esm2022/src/lib/components/flowable-status/flowable-status.form.component.mjs +5 -5
  43. package/esm2022/src/lib/components/flowable-status/flowable-status.module.mjs +4 -4
  44. package/esm2022/src/lib/components/flowable-status/flowable-status.service.mjs +3 -3
  45. package/esm2022/src/lib/components/flowable-status/flowable-status.state.mjs +3 -3
  46. package/esm2022/src/lib/components/form-control/form-control.component.mjs +5 -5
  47. package/esm2022/src/lib/components/form-control/form-control.module.mjs +4 -4
  48. package/esm2022/src/lib/components/form-group/base-table-style.mjs +6 -6
  49. package/esm2022/src/lib/components/form-group/form-fields/form-fields.component.mjs +32 -15
  50. package/esm2022/src/lib/components/form-group/form-fields/form-fields.module.mjs +4 -4
  51. package/esm2022/src/lib/components/form-group/form-fields/form-fields.service.mjs +3 -3
  52. package/esm2022/src/lib/components/form-group/form-group.component.mjs +64 -13
  53. package/esm2022/src/lib/components/form-group/form-group.module.mjs +10 -6
  54. package/esm2022/src/lib/components/form-group/form-group.service.mjs +9 -4
  55. package/esm2022/src/lib/components/form-response/form-response.component.mjs +5 -5
  56. package/esm2022/src/lib/components/form-response/form-response.module.mjs +4 -4
  57. package/esm2022/src/lib/components/form-response/form-response.service.mjs +3 -3
  58. package/esm2022/src/lib/components/form-timer/form-timer.component.mjs +5 -5
  59. package/esm2022/src/lib/components/form-timer/form-timer.module.mjs +4 -4
  60. package/esm2022/src/lib/components/forms/base-table-style.mjs +6 -6
  61. package/esm2022/src/lib/components/forms/forms.component.mjs +8 -8
  62. package/esm2022/src/lib/components/forms/forms.module.mjs +4 -4
  63. package/esm2022/src/lib/components/forms/forms.service.mjs +3 -3
  64. package/esm2022/src/lib/components/journal/journal.component.mjs +3 -3
  65. package/esm2022/src/lib/components/journal/journal.module.mjs +4 -4
  66. package/esm2022/src/lib/components/my-queue/my-queue.component.mjs +7 -7
  67. package/esm2022/src/lib/components/my-queue/my-queue.facade.mjs +6 -41
  68. package/esm2022/src/lib/components/my-queue/my-queue.module.mjs +4 -4
  69. package/esm2022/src/lib/components/my-queue/my-queue.service.mjs +3 -3
  70. package/esm2022/src/lib/components/my-queue/my-queue.state.mjs +3 -3
  71. package/esm2022/src/lib/components/my-queue/tasks.form.component.mjs +5 -5
  72. package/esm2022/src/lib/components/operation-popup/operation-popup.component.mjs +5 -5
  73. package/esm2022/src/lib/components/operation-popup/operation-popup.facade.mjs +3 -3
  74. package/esm2022/src/lib/components/operation-popup/operation-popup.service.mjs +3 -3
  75. package/esm2022/src/lib/components/operation-popup/operation-popup.state.mjs +3 -3
  76. package/esm2022/src/lib/components/stage-details/stage-details.component.mjs +5 -5
  77. package/esm2022/src/lib/components/stage-details/stage-details.module.mjs +4 -4
  78. package/esm2022/src/lib/components/task-form/task-form.component.mjs +5 -5
  79. package/esm2022/src/lib/components/task-form/task-form.module.mjs +4 -4
  80. package/esm2022/src/lib/components/task-history/task-history.component.mjs +5 -5
  81. package/esm2022/src/lib/components/task-history/task-history.module.mjs +4 -4
  82. package/esm2022/src/lib/components/task-history/task-history.service.mjs +3 -3
  83. package/esm2022/src/lib/components/task-notification/base-table-style.mjs +6 -6
  84. package/esm2022/src/lib/components/task-notification/task-notification.component.mjs +5 -5
  85. package/esm2022/src/lib/components/task-notification/task-notification.module.mjs +4 -4
  86. package/esm2022/src/lib/components/task-notification/task-notification.service.mjs +3 -3
  87. package/esm2022/src/lib/components/tasks/tasks.component.mjs +5 -5
  88. package/esm2022/src/lib/components/tasks/tasks.facade.mjs +3 -3
  89. package/esm2022/src/lib/components/tasks/tasks.form.component.mjs +5 -5
  90. package/esm2022/src/lib/components/tasks/tasks.module.mjs +4 -4
  91. package/esm2022/src/lib/components/tasks/tasks.service.mjs +3 -3
  92. package/esm2022/src/lib/components/tasks/tasks.state.mjs +3 -3
  93. package/esm2022/src/lib/components/wf/wf.component.mjs +3 -3
  94. package/esm2022/src/lib/components/wf/wf.module.mjs +4 -4
  95. package/esm2022/src/lib/components/wf/wf.service.mjs +3 -3
  96. package/esm2022/src/lib/components/workflow/table-style.mjs +6 -6
  97. package/esm2022/src/lib/components/workflow/workflow.component.mjs +8 -8
  98. package/esm2022/src/lib/components/workflow/workflow.module.mjs +4 -4
  99. package/esm2022/src/lib/components/workflow-designer/action-dialog/action-dialog.component.mjs +5 -5
  100. package/esm2022/src/lib/components/workflow-designer/actor-tags-dialog/actor-tags-dialog.component.mjs +5 -5
  101. package/esm2022/src/lib/components/workflow-designer/conditions-popup/conditions-popup.component.mjs +3 -3
  102. package/esm2022/src/lib/components/workflow-designer/decision-popup/decision-popup.component.mjs +4 -4
  103. package/esm2022/src/lib/components/workflow-designer/designer-canvas/designer-canvas.component.mjs +3 -3
  104. package/esm2022/src/lib/components/workflow-designer/designer-toolbar/designer-toolbar.component.mjs +5 -5
  105. package/esm2022/src/lib/components/workflow-designer/escalation-dialog/escalation-dialog.component.mjs +5 -5
  106. package/esm2022/src/lib/components/workflow-designer/services/connection.service.mjs +3 -3
  107. package/esm2022/src/lib/components/workflow-designer/services/node-management.service.mjs +3 -3
  108. package/esm2022/src/lib/components/workflow-designer/services/popup.service.mjs +3 -3
  109. package/esm2022/src/lib/components/workflow-designer/services/swimlane.service.mjs +3 -3
  110. package/esm2022/src/lib/components/workflow-designer/services/transformer.service.mjs +3 -3
  111. package/esm2022/src/lib/components/workflow-designer/stage-dialog/stage-dialog.component.mjs +5 -5
  112. package/esm2022/src/lib/components/workflow-designer/stage-node/stage-node.component.mjs +5 -5
  113. package/esm2022/src/lib/components/workflow-designer/swimlane-dialog/swimlane-dialog.component.mjs +5 -5
  114. package/esm2022/src/lib/components/workflow-designer/workflow-data.service.mjs +3 -3
  115. package/esm2022/src/lib/components/workflow-designer/workflow-designer.component.mjs +4 -4
  116. package/esm2022/src/lib/components/workflow-designer/workflow-designer.module.mjs +4 -4
  117. package/esm2022/src/lib/components/workflow-designer/workflow-designer.state.mjs +3 -3
  118. package/esm2022/src/lib/components/workflows/workflow-form/workflow-form.component.mjs +5 -5
  119. package/esm2022/src/lib/components/workflows/workflows.component.mjs +5 -5
  120. package/esm2022/src/lib/components/workflows/workflows.facade.mjs +3 -3
  121. package/esm2022/src/lib/components/workflows/workflows.module.mjs +4 -4
  122. package/esm2022/src/lib/components/workflows/workflows.service.mjs +3 -3
  123. package/esm2022/src/lib/components/workflows/workflows.state.mjs +3 -3
  124. package/esm2022/src/lib/models/DataType.mjs +7 -1
  125. package/esm2022/src/lib/models/EAVEntity.mjs +2 -0
  126. package/esm2022/src/lib/models/FormEntity.mjs +1 -1
  127. package/esm2022/src/lib/models/public-api.mjs +2 -1
  128. package/esm2022/src/lib/pipes/async-label.pipe.mjs +3 -3
  129. package/esm2022/src/lib/services/environment.service.mjs +3 -3
  130. package/esm2022/src/lib/services/http-web-request.service.mjs +3 -3
  131. package/esm2022/src/lib/services/label.service.mjs +3 -3
  132. package/esm2022/src/lib/services/util.service.mjs +3 -3
  133. package/esm2022/src/lib/shared/base-table-style.mjs +6 -6
  134. package/esm2022/src/lib/shared/components/base-data-view.component.mjs +3 -3
  135. package/esm2022/src/lib/shared/shared.module.mjs +4 -4
  136. package/fesm2022/verben-workflow-ui-src-lib-components-actors.mjs +21 -21
  137. package/fesm2022/verben-workflow-ui-src-lib-components-actors.mjs.map +1 -1
  138. package/fesm2022/verben-workflow-ui-src-lib-components-designer.mjs +85 -85
  139. package/fesm2022/verben-workflow-ui-src-lib-components-designer.mjs.map +1 -1
  140. package/fesm2022/verben-workflow-ui-src-lib-components-expiration.mjs +7 -7
  141. package/fesm2022/verben-workflow-ui-src-lib-components-expiration.mjs.map +1 -1
  142. package/fesm2022/verben-workflow-ui-src-lib-components-file-render.mjs +8 -8
  143. package/fesm2022/verben-workflow-ui-src-lib-components-file-render.mjs.map +1 -1
  144. package/fesm2022/verben-workflow-ui-src-lib-components-file-upload.mjs +8 -8
  145. package/fesm2022/verben-workflow-ui-src-lib-components-file-upload.mjs.map +1 -1
  146. package/fesm2022/verben-workflow-ui-src-lib-components-flowable-status.mjs +21 -21
  147. package/fesm2022/verben-workflow-ui-src-lib-components-flowable-status.mjs.map +1 -1
  148. package/fesm2022/verben-workflow-ui-src-lib-components-form-control.mjs +8 -8
  149. package/fesm2022/verben-workflow-ui-src-lib-components-form-control.mjs.map +1 -1
  150. package/fesm2022/verben-workflow-ui-src-lib-components-form-group.mjs +120 -43
  151. package/fesm2022/verben-workflow-ui-src-lib-components-form-group.mjs.map +1 -1
  152. package/fesm2022/verben-workflow-ui-src-lib-components-form-response.mjs +11 -11
  153. package/fesm2022/verben-workflow-ui-src-lib-components-form-response.mjs.map +1 -1
  154. package/fesm2022/verben-workflow-ui-src-lib-components-form-timer.mjs +8 -8
  155. package/fesm2022/verben-workflow-ui-src-lib-components-form-timer.mjs.map +1 -1
  156. package/fesm2022/verben-workflow-ui-src-lib-components-forms.mjs +16 -16
  157. package/fesm2022/verben-workflow-ui-src-lib-components-forms.mjs.map +1 -1
  158. package/fesm2022/verben-workflow-ui-src-lib-components-journal.mjs +7 -7
  159. package/fesm2022/verben-workflow-ui-src-lib-components-my-queue.mjs +25 -60
  160. package/fesm2022/verben-workflow-ui-src-lib-components-my-queue.mjs.map +1 -1
  161. package/fesm2022/verben-workflow-ui-src-lib-components-operation-popup.mjs +13 -13
  162. package/fesm2022/verben-workflow-ui-src-lib-components-operation-popup.mjs.map +1 -1
  163. package/fesm2022/verben-workflow-ui-src-lib-components-stage-details.mjs +8 -8
  164. package/fesm2022/verben-workflow-ui-src-lib-components-stage-details.mjs.map +1 -1
  165. package/fesm2022/verben-workflow-ui-src-lib-components-task-form.mjs +8 -8
  166. package/fesm2022/verben-workflow-ui-src-lib-components-task-form.mjs.map +1 -1
  167. package/fesm2022/verben-workflow-ui-src-lib-components-task-history.mjs +11 -11
  168. package/fesm2022/verben-workflow-ui-src-lib-components-task-history.mjs.map +1 -1
  169. package/fesm2022/verben-workflow-ui-src-lib-components-task-notification.mjs +16 -16
  170. package/fesm2022/verben-workflow-ui-src-lib-components-task-notification.mjs.map +1 -1
  171. package/fesm2022/verben-workflow-ui-src-lib-components-tasks.mjs +21 -21
  172. package/fesm2022/verben-workflow-ui-src-lib-components-tasks.mjs.map +1 -1
  173. package/fesm2022/verben-workflow-ui-src-lib-components-wf.mjs +10 -10
  174. package/fesm2022/verben-workflow-ui-src-lib-components-workflow-designer.mjs +67 -67
  175. package/fesm2022/verben-workflow-ui-src-lib-components-workflow-designer.mjs.map +1 -1
  176. package/fesm2022/verben-workflow-ui-src-lib-components-workflow.mjs +16 -16
  177. package/fesm2022/verben-workflow-ui-src-lib-components-workflow.mjs.map +1 -1
  178. package/fesm2022/verben-workflow-ui-src-lib-components-workflows.mjs +21 -21
  179. package/fesm2022/verben-workflow-ui-src-lib-components-workflows.mjs.map +1 -1
  180. package/fesm2022/verben-workflow-ui-src-lib-models.mjs +6 -0
  181. package/fesm2022/verben-workflow-ui-src-lib-models.mjs.map +1 -1
  182. package/fesm2022/verben-workflow-ui-src-lib-pipes.mjs +3 -3
  183. package/fesm2022/verben-workflow-ui-src-lib-services.mjs +12 -12
  184. package/fesm2022/verben-workflow-ui-src-lib-shared.mjs +12 -12
  185. package/fesm2022/verben-workflow-ui-src-lib-shared.mjs.map +1 -1
  186. package/package.json +20 -20
  187. package/src/lib/components/form-group/form-fields/form-fields.component.d.ts +1 -0
  188. package/src/lib/components/form-group/form-group.component.d.ts +6 -1
  189. package/src/lib/components/form-group/form-group.module.d.ts +3 -2
  190. package/src/lib/components/my-queue/my-queue.facade.d.ts +0 -1
  191. package/src/lib/components/workflow/workflow.component.d.ts +1 -1
  192. package/src/lib/models/DataType.d.ts +7 -1
  193. package/src/lib/models/EAVEntity.d.ts +4 -0
  194. package/src/lib/models/FormEntity.d.ts +1 -0
  195. package/src/lib/models/public-api.d.ts +1 -0
  196. package/styles/styles.css +19 -1436
@@ -3,11 +3,11 @@ import { TaskNotificationComponent } from './task-notification.component';
3
3
  import { SharedModule } from 'verben-workflow-ui/src/lib/shared';
4
4
  import * as i0 from "@angular/core";
5
5
  export class TaskNotificationModule {
6
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TaskNotificationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
7
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: TaskNotificationModule, declarations: [TaskNotificationComponent], imports: [SharedModule], exports: [TaskNotificationComponent] });
8
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TaskNotificationModule, imports: [SharedModule] });
6
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TaskNotificationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
7
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: TaskNotificationModule, declarations: [TaskNotificationComponent], imports: [SharedModule], exports: [TaskNotificationComponent] });
8
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TaskNotificationModule, imports: [SharedModule] });
9
9
  }
10
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TaskNotificationModule, decorators: [{
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TaskNotificationModule, decorators: [{
11
11
  type: NgModule,
12
12
  args: [{
13
13
  declarations: [TaskNotificationComponent],
@@ -244,10 +244,10 @@ export class TaskNotificationService {
244
244
  return result.length > 0 ? result[0][labelProp] : '';
245
245
  }
246
246
  }
247
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TaskNotificationService, deps: [{ token: i1.UtilService }, { token: i1.HttpWebRequestService }, { token: i1.EnvironmentService }], target: i0.ɵɵFactoryTarget.Injectable });
248
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TaskNotificationService, providedIn: 'root' });
247
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TaskNotificationService, deps: [{ token: i1.UtilService }, { token: i1.HttpWebRequestService }, { token: i1.EnvironmentService }], target: i0.ɵɵFactoryTarget.Injectable });
248
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TaskNotificationService, providedIn: 'root' });
249
249
  }
250
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TaskNotificationService, decorators: [{
250
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TaskNotificationService, decorators: [{
251
251
  type: Injectable,
252
252
  args: [{
253
253
  providedIn: 'root',
@@ -103,11 +103,11 @@ export class TasksComponent extends BaseDataViewComponent {
103
103
  };
104
104
  await this.taskFacade.addRequest(payload);
105
105
  }
106
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TasksComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.TaskFacade }], target: i0.ɵɵFactoryTarget.Component });
107
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: TasksComponent, selector: "lib-tasks", inputs: { user: { classPropertyName: "user", publicName: "user", isSignal: true, isRequired: false, transformFunction: null } }, providers: [TasksService, TaskFacade, TaskState], usesInheritance: true, ngImport: i0, template: "<div class=\"space-y-8\">\n <verben-data-view #vdv [viewState]=\"{\n isSearch: true,\n isColumn: true,\n isFilter: true,\n isSort: true,\n isExport: true,\n isSelect: true,\n isCreate: true,\n isToggle: true,\n }\" [buttonClass]=\"'my-custom-button-class'\" [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\" [selectedColumnCount]=\"0\" [selectedSortCount]=\"0\"\n [selectedFilterTableCount]=\"0\" (viewChange)=\"onViewChange($event)\" (stateChange)=\"onStateChange($event)\"\n (onSearchChange)=\"handleSearch($event)\">\n <div table-content>\n <lib-data-table [data]=\"data()\" [columns]=\"config.columns\" [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\">\n <ng-container libColumn=\"history\">\n <ng-template #cell let-value>\n <a [routerLink]=\"['/workflow/task-history', value]\" routerLinkActive=\"router-link-active\"\n class=\"underline text-[#0000FF]\">view history</a>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"workflow\">\n <ng-template #cell let-value>\n <a [routerLink]=\"['/workflow/workflows', value]\" routerLinkActive=\"router-link-active\"\n class=\"underline text-[#0000FF]\">view Workflow</a>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-row=\"row\">\n <lib-operation-popup [user]=\"user()\" [task]=\"row\" [allowedActions]=\"getActionNamesForTask(row)\"\n (actionComplete)=\"loadInitialData()\">\n <div trigger class=\"cursor-pointer p-2 -m-2 inline-flex items-center justify-center\">\n <verben-svg icon=\"dots\" [width]=\"3\" [height]=\"18\" class=\"w-auto\"></verben-svg>\n </div>\n </lib-operation-popup>\n </ng-template>\n <ng-template #header>\n <strong>Actions</strong>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n\n <div card-content>\n <verben-card-data-view borderRadius=\"12px\" (loadMoreClick)=\"loadMore()\" #vdcv dataId=\"Id\" border=\"5px\"\n [cardDataList]=\"cardData()\" rbgColor=\"#f5f6f9\" mg=\"20px\">\n <verben-left-card-data-view class=\"space-y-7\">\n <verben-left-card-data #vlcd [parent]=\"vdcv\" dataId=\"Code\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\" [cardDataList]=\"cardData()\">\n <ng-template #card let-cardItem>\n <div (click)=\"currentData = vdcv.onItemClick(cardItem)\" class=\"flex\">\n <div (click)=\"currentData = vdcv.onItemClick(cardItem)\"\n class=\"flex cursor-pointer w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n cardItem.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"flex flex-col py-2 px-4 w-full\">\n <div class=\"flex items-center gap-4 justify-between\">\n <div class=\"grid gap-y-2\">\n <span class=\"font-semibold text-[#404040]\">{{\n cardItem.title\n }}</span>\n <p class=\"flex items-center\">\n <!-- <label for=\"phone\" class=\"text-[10px] font-light\">Current Actors:</label> -->\n @if (cardItem.data.CurrentActors && cardItem.data.CurrentActors.length > 0) {\n @if (cardItem.data.CurrentActors.length === 1) {\n <span id=\"phone\" class=\"text-sm\">{{ cardItem.data.CurrentActors[0].Identifier }}</span>\n } @else {\n <verben-tooltip [top]=\"'0px'\" [textColor]=\"'#000'\" [backgroundColor]=\"'#D3D3D3'\" [left]=\"'0'\"\n [tooltipContent]=\"actorsTooltipTemplate\" #actorsTooltip>\n <span id=\"phone\" class=\"text-sm cursor-pointer\">\n {{ cardItem.data.CurrentActors[0].Identifier }} and {{ cardItem.data.CurrentActors.length\n - 1 }} others\n </span>\n </verben-tooltip>\n\n <ng-template #actorsTooltipTemplate>\n <div class=\"p-2\">\n <p class=\"text-xs font-semibold mb-1\">Current Actors:</p>\n <ul class=\"list-disc list-inside\">\n @for (actor of cardItem.data.CurrentActors; track actor.Identifier) {\n <li class=\"text-xs\">{{ actor.Identifier }}</li>\n }\n </ul>\n </div>\n </ng-template>\n }\n } @else {\n <span id=\"phone\" class=\"text-sm text-gray-400\">No actors assigned</span>\n }\n </p>\n </div>\n\n <div class=\"grid gap-y-2\">\n <span for=\"role\" class=\"font-light\">{{\n cardItem.data.Code\n }}</span>\n\n <div (click)=\"$event.stopPropagation();\" class=\"flex items-end gap-4\">\n <a [routerLink]=\"[\n '/workflow/task-history',\n cardItem.data.Code\n ]\" routerLinkActive=\"router-link-active\"\n class=\"underline text-[#0000FF] text-xs relative z-10\">view\n history</a>\n\n <lib-operation-popup [user]=\"user()\" [task]=\"cardItem.data\"\n [allowedActions]=\"getActionNamesForTask(cardItem.data)\" (actionComplete)=\"loadInitialData()\">\n <div trigger class=\"cursor-pointer p-2 -m-2 inline-flex items-center justify-center\">\n <verben-svg icon=\"dots\" [width]=\"3\" [height]=\"18\" class=\"w-auto\"></verben-svg>\n </div>\n </lib-operation-popup>\n </div>\n </div>\n </div>\n\n <!-- <div class=\"flex\">\n <span class=\"font-normal text-sm\">{{ item.title }}</span>\n </div>\n @for (ciItem of item.body; track ciItem.value) {\n <div class=\"\">\n <span class=\"text-muted font-light text-xs\"\n >{{ ciItem.title }}:</span\n >\n <span class=\"text-black\">{{ ciItem.value }}</span>\n </div>\n } -->\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n\n <verben-right-card-data-view>\n <ng-template #parent>\n <!-- <lib-user-request-form\n [currentData]=\"currentData\"\n (switchView)=\"vdv.toggleView()\"\n (onApproval)=\"onApprove($event)\"\n ></lib-user-request-form> -->\n <tasks-form [currentData]=\"currentData\" (switchView)=\"vdv.toggleView()\"\n (onSave)=\"onSave($event)\"></tasks-form>\n </ng-template>\n </verben-right-card-data-view>\n\n <verben-card-data-view-footer class=\"w-full\">\n <div [ngClass]=\"{\n 'flex gap-2 items-center': true,\n 'justify-end': true\n }\">\n <!-- <verbena-button\n *ngIf=\"!vdcv.hasCurrentItem()\"\n [fontWeight]=\"'bold'\"\n [bgColor]=\"'#8E8D87'\"\n [borderRadius]=\"'4px'\"\n [textColor]=\"'#fff'\"\n [pd]=\"'9.79px 37.28px'\"\n [text]=\"'Delete'\"\n >\n </verbena-button> -->\n <div class=\"flex {{\n vdcv.hasCurrentItem() ? 'flex-1' : ''\n }} justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData().length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links text-[#3479E9] underline\">\n Load more\n </button>\n </div>\n </div>\n </verben-card-data-view-footer>\n </verben-card-data-view>\n </div>\n <div column-content>\n <lib-data-columns [columns]=\"config.columns\" (columnsUpdated)=\"onColumnsUpdated($event)\"></lib-data-columns>\n </div>\n <div filter-content>\n <verben-table-filter [border]=\"'1px solid rgba(212, 160, 7, 1)'\" borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"420px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" tertiaryColor=\"#404040\" [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"></verben-table-filter>\n </div>\n <div sort-content>\n <lib-data-sort [columns]=\"config.columns\" [data]=\"data()\" (sortApplied)=\"onSortUpdated($event)\"></lib-data-sort>\n </div>\n <div export-content>\n <lib-data-export [data]=\"data()\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n\n <div *ngIf=\"vdv.isTableView\" class=\"flex gap-2 justify-between\">\n <div class=\"message-log-button-container flex justify-between\">\n <!-- <verbena-button\n [fontWeight]=\"'bold'\"\n [bgColor]=\"'#8E8D87'\"\n [borderRadius]=\"'4px'\"\n [textColor]=\"'#fff'\"\n [pd]=\"'9.79px 37.28px'\"\n [text]=\"'Delete'\"\n >\n </verbena-button> -->\n </div>\n <div class=\"flex justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData().length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links text-[#3479E9] underline\">\n Load more\n </button>\n </div>\n </div>\n</div>\n", styles: [".view-links{color:#3479e9;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.DataTableComponent, selector: "lib-data-table", inputs: ["data", "columns", "dataKey", "formGroupConfig", "groupBy", "useVirtualScroll", "virtualScrollItemSize", "styleConfig"], outputs: ["rowEdit", "rowSave", "rowRevert", "rowDelete", "selectionChange"] }, { kind: "directive", type: i3.ColumnDirective, selector: "[libColumn]", inputs: ["libColumn"] }, { kind: "component", type: i3.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i3.DataViewComponent, selector: "verben-data-view", inputs: ["buttonClass", "iconClass", "activeIconClass", "columnCustomClass", "filterCustomClass", "sortCustomClass", "extendCustomClass", "exportCustomClass", "selectCustomClass", "importCustomClass", "zIndex", "createCustomClass", "tableIcon", "cardIcon", "cardClass", "tableClass", "searchKey", "searchValue", "viewState", "searchTemplate", "importTemplate", "columnTemplate", "extendTemplate", "filterTemplate", "sortTemplate", "children", "exportTemplate", "createTemplate", "selectedColumnCount", "selectedSortCount", "selectedFilterTableCount", "inputWidth", "milliseconds", "showColumnChild", "showSortChild", "showFilterChild", "showImportChild", "showExportChild", "showExtendChild", "create", "showSelected", "isTableView"], outputs: ["viewChange", "stateChange", "onSearchChange"] }, { kind: "component", type: i3.CardDataViewComponent, selector: "verben-card-data-view", inputs: ["pd", "mg", "lHeight", "rHeight", "rWidth", "lWidth", "textColor", "lbgColor", "rbgColor", "border", "display", "borderRadius", "activeCss", "inActiveCss", "displayAsRow", "cardDataList", "dataId", "totalRecords", "footer", "noOfVisibleChildren", "showEditIcon", "onItemClick", "onCardChildClick"], outputs: ["editClicked", "loadMoreClick"] }, { kind: "component", type: i3.LeftCardDataComponent, selector: "verben-left-card-data", inputs: ["pd", "mg", "height", "weight", "activeCss", "inActiveCss", "cardDataList", "iconCollapse", "iconExpanded", "parent", "dataId"] }, { kind: "component", type: i3.LeftCardDataViewComponent, selector: "verben-left-card-data-view", inputs: ["cardDataList"] }, { kind: "component", type: i3.RightCardDataViewComponent, selector: "verben-right-card-data-view", inputs: ["parentData", "chilData", "meth"] }, { kind: "component", type: i3.CardDataViewFooterComponent, selector: "verben-card-data-view-footer" }, { kind: "component", type: i3.TableFilterComponent, selector: "verben-table-filter", inputs: ["filterOptions", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "maxFilterLength", "tooltip"], outputs: ["filtersApplied", "resetSortData"] }, { kind: "component", type: i3.DataExportComponent, selector: "lib-data-export", inputs: ["columns", "data", "dataFetchUrl", "dataQueryParameters"], outputs: ["exportDataEvent"] }, { kind: "component", type: i3.DataColumnsComponent, selector: "lib-data-columns", inputs: ["columns", "enableDragAndDrop", "maxVisibleItems"], outputs: ["columnsUpdated"] }, { kind: "component", type: i3.DataSortComponent, selector: "lib-data-sort", inputs: ["columns", "data", "enableDragAndDrop"], outputs: ["sortApplied", "resetFilter"] }, { kind: "directive", type: i4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i3.TooltipComponent, selector: "verben-tooltip", inputs: ["tooltipContent", "customClass", "backgroundColor", "textColor", "padding", "borderRadius", "zIndex", "border", "width", "top", "bottom", "left", "right"] }, { kind: "component", type: i5.OperationPopupComponent, selector: "lib-operation-popup", inputs: ["user", "task", "allowedActions"], outputs: ["actionComplete"] }, { kind: "component", type: i6.TasksFormComponent, selector: "tasks-form", inputs: ["currentData"], outputs: ["onTaskFormSave", "onSave"] }] });
106
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TasksComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.TaskFacade }], target: i0.ɵɵFactoryTarget.Component });
107
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TasksComponent, selector: "lib-tasks", inputs: { user: { classPropertyName: "user", publicName: "user", isSignal: true, isRequired: false, transformFunction: null } }, providers: [TasksService, TaskFacade, TaskState], usesInheritance: true, ngImport: i0, template: "<div class=\"space-y-8\">\n <verben-data-view #vdv [viewState]=\"{\n isSearch: true,\n isColumn: true,\n isFilter: true,\n isSort: true,\n isExport: true,\n isSelect: true,\n isCreate: true,\n isToggle: true,\n }\" [buttonClass]=\"'my-custom-button-class'\" [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\" [selectedColumnCount]=\"0\" [selectedSortCount]=\"0\"\n [selectedFilterTableCount]=\"0\" (viewChange)=\"onViewChange($event)\" (stateChange)=\"onStateChange($event)\"\n (onSearchChange)=\"handleSearch($event)\">\n <div table-content>\n <lib-data-table [data]=\"data()\" [columns]=\"config.columns\" [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\">\n <ng-container libColumn=\"history\">\n <ng-template #cell let-value>\n <a [routerLink]=\"['/workflow/task-history', value]\" routerLinkActive=\"router-link-active\"\n class=\"underline text-[var(--vbn-color-border-focus)]\">view history</a>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"workflow\">\n <ng-template #cell let-value>\n <a [routerLink]=\"['/workflow/workflows', value]\" routerLinkActive=\"router-link-active\"\n class=\"underline text-[var(--vbn-color-border-focus)]\">view Workflow</a>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-row=\"row\">\n <lib-operation-popup [user]=\"user()\" [task]=\"row\" [allowedActions]=\"getActionNamesForTask(row)\"\n (actionComplete)=\"loadInitialData()\">\n <div trigger class=\"cursor-pointer p-2 -m-2 inline-flex items-center justify-center\">\n <verben-svg icon=\"dots\" [width]=\"3\" [height]=\"18\" class=\"w-auto\"></verben-svg>\n </div>\n </lib-operation-popup>\n </ng-template>\n <ng-template #header>\n <strong>Actions</strong>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n\n <div card-content>\n <verben-card-data-view borderRadius=\"12px\" (loadMoreClick)=\"loadMore()\" #vdcv dataId=\"Id\" border=\"5px\"\n [cardDataList]=\"cardData()\" rbgColor=\"var(--vbn-color-surface-alt)\" mg=\"20px\">\n <verben-left-card-data-view class=\"space-y-7\">\n <verben-left-card-data #vlcd [parent]=\"vdcv\" dataId=\"Code\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\" [cardDataList]=\"cardData()\">\n <ng-template #card let-cardItem>\n <div (click)=\"currentData = vdcv.onItemClick(cardItem)\" class=\"flex\">\n <div (click)=\"currentData = vdcv.onItemClick(cardItem)\"\n class=\"flex cursor-pointer w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n cardItem.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"flex flex-col py-2 px-4 w-full\">\n <div class=\"flex items-center gap-4 justify-between\">\n <div class=\"grid gap-y-2\">\n <span class=\"font-semibold text-[var(--vbn-color-on-primary)]\">{{\n cardItem.title\n }}</span>\n <p class=\"flex items-center\">\n <!-- <label for=\"phone\" class=\"text-[10px] font-light\">Current Actors:</label> -->\n @if (cardItem.data.CurrentActors && cardItem.data.CurrentActors.length > 0) {\n @if (cardItem.data.CurrentActors.length === 1) {\n <span id=\"phone\" class=\"text-sm\">{{ cardItem.data.CurrentActors[0].Identifier }}</span>\n } @else {\n <verben-tooltip [top]=\"'0px'\" [textColor]=\"'var(--vbn-color-text)'\" [backgroundColor]=\"'var(--vbn-color-border)'\" [left]=\"'0'\"\n [tooltipContent]=\"actorsTooltipTemplate\" #actorsTooltip>\n <span id=\"phone\" class=\"text-sm cursor-pointer\">\n {{ cardItem.data.CurrentActors[0].Identifier }} and {{ cardItem.data.CurrentActors.length\n - 1 }} others\n </span>\n </verben-tooltip>\n\n <ng-template #actorsTooltipTemplate>\n <div class=\"p-2\">\n <p class=\"text-xs font-semibold mb-1\">Current Actors:</p>\n <ul class=\"list-disc list-inside\">\n @for (actor of cardItem.data.CurrentActors; track actor.Identifier) {\n <li class=\"text-xs\">{{ actor.Identifier }}</li>\n }\n </ul>\n </div>\n </ng-template>\n }\n } @else {\n <span id=\"phone\" class=\"text-sm text-gray-400\">No actors assigned</span>\n }\n </p>\n </div>\n\n <div class=\"grid gap-y-2\">\n <span for=\"role\" class=\"font-light\">{{\n cardItem.data.Code\n }}</span>\n\n <div (click)=\"$event.stopPropagation();\" class=\"flex items-end gap-4\">\n <a [routerLink]=\"[\n '/workflow/task-history',\n cardItem.data.Code\n ]\" routerLinkActive=\"router-link-active\"\n class=\"underline text-[var(--vbn-color-border-focus)] text-xs relative z-10\">view\n history</a>\n\n <lib-operation-popup [user]=\"user()\" [task]=\"cardItem.data\"\n [allowedActions]=\"getActionNamesForTask(cardItem.data)\" (actionComplete)=\"loadInitialData()\">\n <div trigger class=\"cursor-pointer p-2 -m-2 inline-flex items-center justify-center\">\n <verben-svg icon=\"dots\" [width]=\"3\" [height]=\"18\" class=\"w-auto\"></verben-svg>\n </div>\n </lib-operation-popup>\n </div>\n </div>\n </div>\n\n <!-- <div class=\"flex\">\n <span class=\"font-normal text-sm\">{{ item.title }}</span>\n </div>\n @for (ciItem of item.body; track ciItem.value) {\n <div class=\"\">\n <span class=\"text-muted font-light text-xs\"\n >{{ ciItem.title }}:</span\n >\n <span class=\"text-black\">{{ ciItem.value }}</span>\n </div>\n } -->\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n\n <verben-right-card-data-view>\n <ng-template #parent>\n <!-- <lib-user-request-form\n [currentData]=\"currentData\"\n (switchView)=\"vdv.toggleView()\"\n (onApproval)=\"onApprove($event)\"\n ></lib-user-request-form> -->\n <tasks-form [currentData]=\"currentData\" (switchView)=\"vdv.toggleView()\"\n (onSave)=\"onSave($event)\"></tasks-form>\n </ng-template>\n </verben-right-card-data-view>\n\n <verben-card-data-view-footer class=\"w-full\">\n <div [ngClass]=\"{\n 'flex gap-2 items-center': true,\n 'justify-end': true\n }\">\n <!-- <verbena-button\n *ngIf=\"!vdcv.hasCurrentItem()\"\n [fontWeight]=\"'bold'\"\n [bgColor]=\"'var(--vbn-color-text-muted)'\"\n [borderRadius]=\"'4px'\"\n [textColor]=\"'var(--vbn-color-surface)'\"\n [pd]=\"'9.79px 37.28px'\"\n [text]=\"'Delete'\"\n >\n </verbena-button> -->\n <div class=\"flex {{\n vdcv.hasCurrentItem() ? 'flex-1' : ''\n }} justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData().length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links text-[var(--vbn-color-border-focus)] underline\">\n Load more\n </button>\n </div>\n </div>\n </verben-card-data-view-footer>\n </verben-card-data-view>\n </div>\n <div column-content>\n <lib-data-columns [columns]=\"config.columns\" (columnsUpdated)=\"onColumnsUpdated($event)\"></lib-data-columns>\n </div>\n <div filter-content>\n <verben-table-filter [border]=\"'1px solid var(--vbn-color-primary)'\" borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"420px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"var(--vbn-color-primary)\" secondaryColor=\"var(--vbn-color-border-focus)\" tertiaryColor=\"var(--vbn-color-on-primary)\" [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"></verben-table-filter>\n </div>\n <div sort-content>\n <lib-data-sort [columns]=\"config.columns\" [data]=\"data()\" (sortApplied)=\"onSortUpdated($event)\"></lib-data-sort>\n </div>\n <div export-content>\n <lib-data-export [data]=\"data()\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n\n <div *ngIf=\"vdv.isTableView\" class=\"flex gap-2 justify-between\">\n <div class=\"message-log-button-container flex justify-between\">\n <!-- <verbena-button\n [fontWeight]=\"'bold'\"\n [bgColor]=\"'var(--vbn-color-text-muted)'\"\n [borderRadius]=\"'4px'\"\n [textColor]=\"'var(--vbn-color-surface)'\"\n [pd]=\"'9.79px 37.28px'\"\n [text]=\"'Delete'\"\n >\n </verbena-button> -->\n </div>\n <div class=\"flex justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData().length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links text-[var(--vbn-color-border-focus)] underline\">\n Load more\n </button>\n </div>\n </div>\n</div>\n", styles: [".view-links{color:var(--vbn-color-border-focus);cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.DataTableComponent, selector: "lib-data-table", inputs: ["data", "columns", "dataKey", "formGroupConfig", "groupBy", "useVirtualScroll", "virtualScrollItemSize", "styleConfig"], outputs: ["rowEdit", "rowSave", "rowRevert", "rowDelete", "selectionChange"] }, { kind: "directive", type: i3.ColumnDirective, selector: "[libColumn]", inputs: ["libColumn"] }, { kind: "component", type: i3.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i3.DataViewComponent, selector: "verben-data-view", inputs: ["buttonClass", "iconClass", "activeIconClass", "columnCustomClass", "filterCustomClass", "sortCustomClass", "extendCustomClass", "exportCustomClass", "selectCustomClass", "importCustomClass", "zIndex", "createCustomClass", "tableIcon", "cardIcon", "cardClass", "tableClass", "searchKey", "searchValue", "viewState", "searchTemplate", "importTemplate", "columnTemplate", "extendTemplate", "filterTemplate", "sortTemplate", "children", "exportTemplate", "createTemplate", "selectedColumnCount", "selectedSortCount", "selectedFilterTableCount", "inputWidth", "milliseconds", "showColumnChild", "showSortChild", "showFilterChild", "showImportChild", "showExportChild", "showExtendChild", "create", "showSelected", "isTableView"], outputs: ["viewChange", "stateChange", "onSearchChange"] }, { kind: "component", type: i3.CardDataViewComponent, selector: "verben-card-data-view", inputs: ["pd", "mg", "lHeight", "rHeight", "rWidth", "lWidth", "textColor", "lbgColor", "rbgColor", "border", "display", "borderRadius", "activeCss", "inActiveCss", "displayAsRow", "cardDataList", "dataId", "totalRecords", "footer", "noOfVisibleChildren", "showEditIcon", "useVirtualScroll", "virtualScrollItemSize", "onItemClick", "onCardChildClick"], outputs: ["editClicked", "loadMoreClick"] }, { kind: "component", type: i3.LeftCardDataComponent, selector: "verben-left-card-data", inputs: ["pd", "mg", "height", "weight", "activeCss", "inActiveCss", "cardDataList", "iconCollapse", "iconExpanded", "parent", "useVirtualScroll", "virtualScrollItemSize", "dataId"] }, { kind: "component", type: i3.LeftCardDataViewComponent, selector: "verben-left-card-data-view", inputs: ["cardDataList"] }, { kind: "component", type: i3.RightCardDataViewComponent, selector: "verben-right-card-data-view", inputs: ["parentData", "chilData", "meth"] }, { kind: "component", type: i3.CardDataViewFooterComponent, selector: "verben-card-data-view-footer" }, { kind: "component", type: i3.TableFilterComponent, selector: "verben-table-filter", inputs: ["filterOptions", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "maxFilterLength", "tooltip"], outputs: ["filtersApplied", "resetSortData"] }, { kind: "component", type: i3.DataExportComponent, selector: "lib-data-export", inputs: ["columns", "data", "dataFetchUrl", "dataQueryParameters"], outputs: ["exportDataEvent"] }, { kind: "component", type: i3.DataColumnsComponent, selector: "lib-data-columns", inputs: ["columns", "enableDragAndDrop", "maxVisibleItems"], outputs: ["columnsUpdated"] }, { kind: "component", type: i3.DataSortComponent, selector: "lib-data-sort", inputs: ["columns", "data", "enableDragAndDrop"], outputs: ["sortApplied", "resetFilter"] }, { kind: "directive", type: i4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i3.TooltipComponent, selector: "verben-tooltip", inputs: ["tooltipContent", "customClass", "backgroundColor", "textColor", "padding", "borderRadius", "zIndex", "border", "width", "top", "bottom", "left", "right"] }, { kind: "component", type: i5.OperationPopupComponent, selector: "lib-operation-popup", inputs: ["user", "task", "allowedActions"], outputs: ["actionComplete"] }, { kind: "component", type: i6.TasksFormComponent, selector: "tasks-form", inputs: ["currentData"], outputs: ["onTaskFormSave", "onSave"] }] });
108
108
  }
109
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TasksComponent, decorators: [{
109
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TasksComponent, decorators: [{
110
110
  type: Component,
111
- args: [{ selector: 'lib-tasks', providers: [TasksService, TaskFacade, TaskState], template: "<div class=\"space-y-8\">\n <verben-data-view #vdv [viewState]=\"{\n isSearch: true,\n isColumn: true,\n isFilter: true,\n isSort: true,\n isExport: true,\n isSelect: true,\n isCreate: true,\n isToggle: true,\n }\" [buttonClass]=\"'my-custom-button-class'\" [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\" [selectedColumnCount]=\"0\" [selectedSortCount]=\"0\"\n [selectedFilterTableCount]=\"0\" (viewChange)=\"onViewChange($event)\" (stateChange)=\"onStateChange($event)\"\n (onSearchChange)=\"handleSearch($event)\">\n <div table-content>\n <lib-data-table [data]=\"data()\" [columns]=\"config.columns\" [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\">\n <ng-container libColumn=\"history\">\n <ng-template #cell let-value>\n <a [routerLink]=\"['/workflow/task-history', value]\" routerLinkActive=\"router-link-active\"\n class=\"underline text-[#0000FF]\">view history</a>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"workflow\">\n <ng-template #cell let-value>\n <a [routerLink]=\"['/workflow/workflows', value]\" routerLinkActive=\"router-link-active\"\n class=\"underline text-[#0000FF]\">view Workflow</a>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-row=\"row\">\n <lib-operation-popup [user]=\"user()\" [task]=\"row\" [allowedActions]=\"getActionNamesForTask(row)\"\n (actionComplete)=\"loadInitialData()\">\n <div trigger class=\"cursor-pointer p-2 -m-2 inline-flex items-center justify-center\">\n <verben-svg icon=\"dots\" [width]=\"3\" [height]=\"18\" class=\"w-auto\"></verben-svg>\n </div>\n </lib-operation-popup>\n </ng-template>\n <ng-template #header>\n <strong>Actions</strong>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n\n <div card-content>\n <verben-card-data-view borderRadius=\"12px\" (loadMoreClick)=\"loadMore()\" #vdcv dataId=\"Id\" border=\"5px\"\n [cardDataList]=\"cardData()\" rbgColor=\"#f5f6f9\" mg=\"20px\">\n <verben-left-card-data-view class=\"space-y-7\">\n <verben-left-card-data #vlcd [parent]=\"vdcv\" dataId=\"Code\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\" [cardDataList]=\"cardData()\">\n <ng-template #card let-cardItem>\n <div (click)=\"currentData = vdcv.onItemClick(cardItem)\" class=\"flex\">\n <div (click)=\"currentData = vdcv.onItemClick(cardItem)\"\n class=\"flex cursor-pointer w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n cardItem.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"flex flex-col py-2 px-4 w-full\">\n <div class=\"flex items-center gap-4 justify-between\">\n <div class=\"grid gap-y-2\">\n <span class=\"font-semibold text-[#404040]\">{{\n cardItem.title\n }}</span>\n <p class=\"flex items-center\">\n <!-- <label for=\"phone\" class=\"text-[10px] font-light\">Current Actors:</label> -->\n @if (cardItem.data.CurrentActors && cardItem.data.CurrentActors.length > 0) {\n @if (cardItem.data.CurrentActors.length === 1) {\n <span id=\"phone\" class=\"text-sm\">{{ cardItem.data.CurrentActors[0].Identifier }}</span>\n } @else {\n <verben-tooltip [top]=\"'0px'\" [textColor]=\"'#000'\" [backgroundColor]=\"'#D3D3D3'\" [left]=\"'0'\"\n [tooltipContent]=\"actorsTooltipTemplate\" #actorsTooltip>\n <span id=\"phone\" class=\"text-sm cursor-pointer\">\n {{ cardItem.data.CurrentActors[0].Identifier }} and {{ cardItem.data.CurrentActors.length\n - 1 }} others\n </span>\n </verben-tooltip>\n\n <ng-template #actorsTooltipTemplate>\n <div class=\"p-2\">\n <p class=\"text-xs font-semibold mb-1\">Current Actors:</p>\n <ul class=\"list-disc list-inside\">\n @for (actor of cardItem.data.CurrentActors; track actor.Identifier) {\n <li class=\"text-xs\">{{ actor.Identifier }}</li>\n }\n </ul>\n </div>\n </ng-template>\n }\n } @else {\n <span id=\"phone\" class=\"text-sm text-gray-400\">No actors assigned</span>\n }\n </p>\n </div>\n\n <div class=\"grid gap-y-2\">\n <span for=\"role\" class=\"font-light\">{{\n cardItem.data.Code\n }}</span>\n\n <div (click)=\"$event.stopPropagation();\" class=\"flex items-end gap-4\">\n <a [routerLink]=\"[\n '/workflow/task-history',\n cardItem.data.Code\n ]\" routerLinkActive=\"router-link-active\"\n class=\"underline text-[#0000FF] text-xs relative z-10\">view\n history</a>\n\n <lib-operation-popup [user]=\"user()\" [task]=\"cardItem.data\"\n [allowedActions]=\"getActionNamesForTask(cardItem.data)\" (actionComplete)=\"loadInitialData()\">\n <div trigger class=\"cursor-pointer p-2 -m-2 inline-flex items-center justify-center\">\n <verben-svg icon=\"dots\" [width]=\"3\" [height]=\"18\" class=\"w-auto\"></verben-svg>\n </div>\n </lib-operation-popup>\n </div>\n </div>\n </div>\n\n <!-- <div class=\"flex\">\n <span class=\"font-normal text-sm\">{{ item.title }}</span>\n </div>\n @for (ciItem of item.body; track ciItem.value) {\n <div class=\"\">\n <span class=\"text-muted font-light text-xs\"\n >{{ ciItem.title }}:</span\n >\n <span class=\"text-black\">{{ ciItem.value }}</span>\n </div>\n } -->\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n\n <verben-right-card-data-view>\n <ng-template #parent>\n <!-- <lib-user-request-form\n [currentData]=\"currentData\"\n (switchView)=\"vdv.toggleView()\"\n (onApproval)=\"onApprove($event)\"\n ></lib-user-request-form> -->\n <tasks-form [currentData]=\"currentData\" (switchView)=\"vdv.toggleView()\"\n (onSave)=\"onSave($event)\"></tasks-form>\n </ng-template>\n </verben-right-card-data-view>\n\n <verben-card-data-view-footer class=\"w-full\">\n <div [ngClass]=\"{\n 'flex gap-2 items-center': true,\n 'justify-end': true\n }\">\n <!-- <verbena-button\n *ngIf=\"!vdcv.hasCurrentItem()\"\n [fontWeight]=\"'bold'\"\n [bgColor]=\"'#8E8D87'\"\n [borderRadius]=\"'4px'\"\n [textColor]=\"'#fff'\"\n [pd]=\"'9.79px 37.28px'\"\n [text]=\"'Delete'\"\n >\n </verbena-button> -->\n <div class=\"flex {{\n vdcv.hasCurrentItem() ? 'flex-1' : ''\n }} justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData().length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links text-[#3479E9] underline\">\n Load more\n </button>\n </div>\n </div>\n </verben-card-data-view-footer>\n </verben-card-data-view>\n </div>\n <div column-content>\n <lib-data-columns [columns]=\"config.columns\" (columnsUpdated)=\"onColumnsUpdated($event)\"></lib-data-columns>\n </div>\n <div filter-content>\n <verben-table-filter [border]=\"'1px solid rgba(212, 160, 7, 1)'\" borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"420px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" tertiaryColor=\"#404040\" [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"></verben-table-filter>\n </div>\n <div sort-content>\n <lib-data-sort [columns]=\"config.columns\" [data]=\"data()\" (sortApplied)=\"onSortUpdated($event)\"></lib-data-sort>\n </div>\n <div export-content>\n <lib-data-export [data]=\"data()\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n\n <div *ngIf=\"vdv.isTableView\" class=\"flex gap-2 justify-between\">\n <div class=\"message-log-button-container flex justify-between\">\n <!-- <verbena-button\n [fontWeight]=\"'bold'\"\n [bgColor]=\"'#8E8D87'\"\n [borderRadius]=\"'4px'\"\n [textColor]=\"'#fff'\"\n [pd]=\"'9.79px 37.28px'\"\n [text]=\"'Delete'\"\n >\n </verbena-button> -->\n </div>\n <div class=\"flex justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData().length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links text-[#3479E9] underline\">\n Load more\n </button>\n </div>\n </div>\n</div>\n", styles: [".view-links{color:#3479e9;cursor:pointer}\n"] }]
111
+ args: [{ selector: 'lib-tasks', providers: [TasksService, TaskFacade, TaskState], template: "<div class=\"space-y-8\">\n <verben-data-view #vdv [viewState]=\"{\n isSearch: true,\n isColumn: true,\n isFilter: true,\n isSort: true,\n isExport: true,\n isSelect: true,\n isCreate: true,\n isToggle: true,\n }\" [buttonClass]=\"'my-custom-button-class'\" [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\" [selectedColumnCount]=\"0\" [selectedSortCount]=\"0\"\n [selectedFilterTableCount]=\"0\" (viewChange)=\"onViewChange($event)\" (stateChange)=\"onStateChange($event)\"\n (onSearchChange)=\"handleSearch($event)\">\n <div table-content>\n <lib-data-table [data]=\"data()\" [columns]=\"config.columns\" [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\">\n <ng-container libColumn=\"history\">\n <ng-template #cell let-value>\n <a [routerLink]=\"['/workflow/task-history', value]\" routerLinkActive=\"router-link-active\"\n class=\"underline text-[var(--vbn-color-border-focus)]\">view history</a>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"workflow\">\n <ng-template #cell let-value>\n <a [routerLink]=\"['/workflow/workflows', value]\" routerLinkActive=\"router-link-active\"\n class=\"underline text-[var(--vbn-color-border-focus)]\">view Workflow</a>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-row=\"row\">\n <lib-operation-popup [user]=\"user()\" [task]=\"row\" [allowedActions]=\"getActionNamesForTask(row)\"\n (actionComplete)=\"loadInitialData()\">\n <div trigger class=\"cursor-pointer p-2 -m-2 inline-flex items-center justify-center\">\n <verben-svg icon=\"dots\" [width]=\"3\" [height]=\"18\" class=\"w-auto\"></verben-svg>\n </div>\n </lib-operation-popup>\n </ng-template>\n <ng-template #header>\n <strong>Actions</strong>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n\n <div card-content>\n <verben-card-data-view borderRadius=\"12px\" (loadMoreClick)=\"loadMore()\" #vdcv dataId=\"Id\" border=\"5px\"\n [cardDataList]=\"cardData()\" rbgColor=\"var(--vbn-color-surface-alt)\" mg=\"20px\">\n <verben-left-card-data-view class=\"space-y-7\">\n <verben-left-card-data #vlcd [parent]=\"vdcv\" dataId=\"Code\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\" [cardDataList]=\"cardData()\">\n <ng-template #card let-cardItem>\n <div (click)=\"currentData = vdcv.onItemClick(cardItem)\" class=\"flex\">\n <div (click)=\"currentData = vdcv.onItemClick(cardItem)\"\n class=\"flex cursor-pointer w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n cardItem.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"flex flex-col py-2 px-4 w-full\">\n <div class=\"flex items-center gap-4 justify-between\">\n <div class=\"grid gap-y-2\">\n <span class=\"font-semibold text-[var(--vbn-color-on-primary)]\">{{\n cardItem.title\n }}</span>\n <p class=\"flex items-center\">\n <!-- <label for=\"phone\" class=\"text-[10px] font-light\">Current Actors:</label> -->\n @if (cardItem.data.CurrentActors && cardItem.data.CurrentActors.length > 0) {\n @if (cardItem.data.CurrentActors.length === 1) {\n <span id=\"phone\" class=\"text-sm\">{{ cardItem.data.CurrentActors[0].Identifier }}</span>\n } @else {\n <verben-tooltip [top]=\"'0px'\" [textColor]=\"'var(--vbn-color-text)'\" [backgroundColor]=\"'var(--vbn-color-border)'\" [left]=\"'0'\"\n [tooltipContent]=\"actorsTooltipTemplate\" #actorsTooltip>\n <span id=\"phone\" class=\"text-sm cursor-pointer\">\n {{ cardItem.data.CurrentActors[0].Identifier }} and {{ cardItem.data.CurrentActors.length\n - 1 }} others\n </span>\n </verben-tooltip>\n\n <ng-template #actorsTooltipTemplate>\n <div class=\"p-2\">\n <p class=\"text-xs font-semibold mb-1\">Current Actors:</p>\n <ul class=\"list-disc list-inside\">\n @for (actor of cardItem.data.CurrentActors; track actor.Identifier) {\n <li class=\"text-xs\">{{ actor.Identifier }}</li>\n }\n </ul>\n </div>\n </ng-template>\n }\n } @else {\n <span id=\"phone\" class=\"text-sm text-gray-400\">No actors assigned</span>\n }\n </p>\n </div>\n\n <div class=\"grid gap-y-2\">\n <span for=\"role\" class=\"font-light\">{{\n cardItem.data.Code\n }}</span>\n\n <div (click)=\"$event.stopPropagation();\" class=\"flex items-end gap-4\">\n <a [routerLink]=\"[\n '/workflow/task-history',\n cardItem.data.Code\n ]\" routerLinkActive=\"router-link-active\"\n class=\"underline text-[var(--vbn-color-border-focus)] text-xs relative z-10\">view\n history</a>\n\n <lib-operation-popup [user]=\"user()\" [task]=\"cardItem.data\"\n [allowedActions]=\"getActionNamesForTask(cardItem.data)\" (actionComplete)=\"loadInitialData()\">\n <div trigger class=\"cursor-pointer p-2 -m-2 inline-flex items-center justify-center\">\n <verben-svg icon=\"dots\" [width]=\"3\" [height]=\"18\" class=\"w-auto\"></verben-svg>\n </div>\n </lib-operation-popup>\n </div>\n </div>\n </div>\n\n <!-- <div class=\"flex\">\n <span class=\"font-normal text-sm\">{{ item.title }}</span>\n </div>\n @for (ciItem of item.body; track ciItem.value) {\n <div class=\"\">\n <span class=\"text-muted font-light text-xs\"\n >{{ ciItem.title }}:</span\n >\n <span class=\"text-black\">{{ ciItem.value }}</span>\n </div>\n } -->\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n\n <verben-right-card-data-view>\n <ng-template #parent>\n <!-- <lib-user-request-form\n [currentData]=\"currentData\"\n (switchView)=\"vdv.toggleView()\"\n (onApproval)=\"onApprove($event)\"\n ></lib-user-request-form> -->\n <tasks-form [currentData]=\"currentData\" (switchView)=\"vdv.toggleView()\"\n (onSave)=\"onSave($event)\"></tasks-form>\n </ng-template>\n </verben-right-card-data-view>\n\n <verben-card-data-view-footer class=\"w-full\">\n <div [ngClass]=\"{\n 'flex gap-2 items-center': true,\n 'justify-end': true\n }\">\n <!-- <verbena-button\n *ngIf=\"!vdcv.hasCurrentItem()\"\n [fontWeight]=\"'bold'\"\n [bgColor]=\"'var(--vbn-color-text-muted)'\"\n [borderRadius]=\"'4px'\"\n [textColor]=\"'var(--vbn-color-surface)'\"\n [pd]=\"'9.79px 37.28px'\"\n [text]=\"'Delete'\"\n >\n </verbena-button> -->\n <div class=\"flex {{\n vdcv.hasCurrentItem() ? 'flex-1' : ''\n }} justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData().length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links text-[var(--vbn-color-border-focus)] underline\">\n Load more\n </button>\n </div>\n </div>\n </verben-card-data-view-footer>\n </verben-card-data-view>\n </div>\n <div column-content>\n <lib-data-columns [columns]=\"config.columns\" (columnsUpdated)=\"onColumnsUpdated($event)\"></lib-data-columns>\n </div>\n <div filter-content>\n <verben-table-filter [border]=\"'1px solid var(--vbn-color-primary)'\" borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"420px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"var(--vbn-color-primary)\" secondaryColor=\"var(--vbn-color-border-focus)\" tertiaryColor=\"var(--vbn-color-on-primary)\" [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"></verben-table-filter>\n </div>\n <div sort-content>\n <lib-data-sort [columns]=\"config.columns\" [data]=\"data()\" (sortApplied)=\"onSortUpdated($event)\"></lib-data-sort>\n </div>\n <div export-content>\n <lib-data-export [data]=\"data()\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n\n <div *ngIf=\"vdv.isTableView\" class=\"flex gap-2 justify-between\">\n <div class=\"message-log-button-container flex justify-between\">\n <!-- <verbena-button\n [fontWeight]=\"'bold'\"\n [bgColor]=\"'var(--vbn-color-text-muted)'\"\n [borderRadius]=\"'4px'\"\n [textColor]=\"'var(--vbn-color-surface)'\"\n [pd]=\"'9.79px 37.28px'\"\n [text]=\"'Delete'\"\n >\n </verbena-button> -->\n </div>\n <div class=\"flex justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData().length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links text-[var(--vbn-color-border-focus)] underline\">\n Load more\n </button>\n </div>\n </div>\n</div>\n", styles: [".view-links{color:var(--vbn-color-border-focus);cursor:pointer}\n"] }]
112
112
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.TaskFacade }] });
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvY29tcG9uZW50cy90YXNrcy90YXNrcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3Rhc2tzL3Rhc2tzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVwRSxPQUFPLEVBQUUsV0FBVyxFQUFRLFVBQVUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxxQkFBcUIsRUFBa0IsTUFBTSxtQ0FBbUMsQ0FBQztBQUMxRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7QUFRMUMsTUFBTSxPQUFPLGNBQWUsU0FBUSxxQkFBMkI7SUFtQnpDO0lBQWdDO0lBbEJwRCxJQUFJLEdBQUcsS0FBSyxDQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ3pCLE1BQU0sR0FBeUI7UUFDN0IsVUFBVSxFQUFFLEVBQUUsRUFBRSx3QkFBd0I7UUFDeEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxtQ0FBbUM7UUFDckQsY0FBYyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3pCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsS0FB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LEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUTtRQUNaLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNuQyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLGVBQWU7UUFDakIsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLElBQW1CO1FBQzlCLE1BQU0sT0FBTyxHQUFHO1lBQ2QsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUk7WUFDekIsR0FBRyxJQUFJO1NBQ0EsQ0FBQztRQUNWLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUMsQ0FBQzt3R0E3RlUsY0FBYzs0RkFBZCxjQUFjLHFLQUZkLENBQUMsWUFBWSxFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUMsaURDZGxELGkxVUF1TkE7OzRGRHZNYSxjQUFjO2tCQU4xQixTQUFTOytCQUNFLFdBQVcsYUFHVixDQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENhcmREYXRhIH0gZnJvbSAndmVyYmVuLW5nLXVpJztcbmltcG9ydCB7IE9iamVjdFN0YXRlLCBUYXNrLCBUYXNrU3RhdHVzIH0gZnJvbSAndmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvbW9kZWxzJztcbmltcG9ydCB7IEJhc2VEYXRhVmlld0NvbXBvbmVudCwgRGF0YVZpZXdDb25maWcgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9zaGFyZWQnO1xuaW1wb3J0IHsgY29sdW1ucyB9IGZyb20gJy4vdGFza3MuY29sdW1ucyc7XG5pbXBvcnQgeyBUYXNrRmFjYWRlIH0gZnJvbSAnLi90YXNrcy5mYWNhZGUnO1xuaW1wb3J0IHsgVGFza01vZGVsIH0gZnJvbSAnLi90YXNrcy5tb2RlbHMnO1xuaW1wb3J0IHsgVGFza3NTZXJ2aWNlIH0gZnJvbSAnLi90YXNrcy5zZXJ2aWNlJztcbmltcG9ydCB7IFRhc2tTdGF0ZSB9IGZyb20gJy4vdGFza3Muc3RhdGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItdGFza3MnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFza3MuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vdGFza3MuY29tcG9uZW50LmNzcycsXG4gIHByb3ZpZGVyczogW1Rhc2tzU2VydmljZSwgVGFza0ZhY2FkZSwgVGFza1N0YXRlXSxcbn0pXG5leHBvcnQgY2xhc3MgVGFza3NDb21wb25lbnQgZXh0ZW5kcyBCYXNlRGF0YVZpZXdDb21wb25lbnQ8VGFzaz4ge1xuICB1c2VyID0gaW5wdXQ8c3RyaW5nPignJyk7XG4gIGNvbmZpZzogRGF0YVZpZXdDb25maWc8VGFzaz4gPSB7XG4gICAgZGF0YVNvdXJjZTogW10sIC8vIFBvcHVsYXRlIGZyb20gc2VydmljZVxuICAgIGNvbHVtbnM6IGNvbHVtbnMsIC8vIFlvdXIgZXhpc3RpbmcgY29sdW1uIGRlZmluaXRpb25zXG4gICAgY2FyZERhdGFNYXBwZXI6ICh0YXNrKSA9PiAoe1xuICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgdGl0bGU6IHRhc2suTmFtZSxcbiAgICAgIGRhdGE6IHRhc2ssXG4gICAgICBib2R5OiBbXG4gICAgICAgIHsgdGl0bGU6ICdOYW1lJywgdmFsdWU6IHRhc2suTmFtZSB9LFxuICAgICAgICB7IHRpdGxlOiAnU3RhdHVzJywgdmFsdWU6IHRhc2suU3RhdHVzIH0sXG4gICAgICBdLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgIH0pLFxuICAgIG9uRGV0YWlsVmlldzogKHRhc2spID0+IHtcbiAgICAgIC8vIEN1c3RvbSBkZXRhaWwgdmlldyBsb2dpY1xuICAgIH0sXG4gIH07XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSB0YXNrRmFjYWRlOiBUYXNrRmFjYWRlKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMudGFza0ZhY2FkZS5nZXRSZXF1ZXN0cyQoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgIHRoaXMuZGF0YS5zZXQoZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICBvdmVycmlkZSBsb2FkSW5pdGlhbERhdGEoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudGFza0ZhY2FkZS5sb2FkUmVxdWVzdHModGhpcy51c2VyKCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBIYW5kbGUgZXJyb3JcbiAgICB9XG4gIH1cblxuICBoYW5kbGVTZWFyY2goZXZlbnQ6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfSkge1xuICAgIHRoaXMudGFza0ZhY2FkZS5zZWFyY2goZXZlbnQudmFsdWUsIHRoaXMudXNlcigpKTtcbiAgfVxuXG4gIGdldEFjdGlvbk5hbWVzRm9yVGFzayh0YXNrOiBUYXNrKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ2ZvbGxvd3Rhc2snLCAncmVhc3NpZ24nXTtcbiAgfVxuXG4gIG92ZXJyaWRlIG9uU3RhdGVDaGFuZ2UoZXZlbnQ6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBib29sZWFuIH0pOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnY3JlYXRlJzoge1xuICAgICAgICBjb25zdCBuZXdJdGVtOiBUYXNrID0gbmV3IFRhc2tNb2RlbCh7XG4gICAgICAgICAgV29ya2Zsb3dDb2RlOiAnJyxcbiAgICAgICAgICBTdGF0dXM6IFRhc2tTdGF0dXMuQWN0aXZlLFxuICAgICAgICAgIEZsb3dhYmxlOiAnJyxcbiAgICAgICAgICBGbG93YWJsZURhdGE6IG51bGwsXG4gICAgICAgICAgRmxvd2FibGVQYXRoOiAnJyxcbiAgICAgICAgICBDdXJyZW50QWN0b3JzOiBbXSxcbiAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgfSkgYXMgdW5rbm93biBhcyBUYXNrO1xuICAgICAgICB0aGlzLnRhc2tGYWNhZGUuYWRkTmV3UmVxdWVzdChuZXdJdGVtKTtcbiAgICAgICAgdGhpcy5kYXRhVmlldy5pc1RhYmxlVmlldyA9IGZhbHNlO1xuXG4gICAgICAgIC8vIENhcmREYXRhVmlld0NvbXBvbmVudCBtYXRjaGVzIGNsaWNrcyBhZ2FpbnN0IGl0cyBjYXJkRGF0YUxpc3QgaW5wdXQsXG4gICAgICAgIC8vIHdoaWNoIG9ubHkgcmVjZWl2ZXMgdGhlIG5ldyBjYXJkIGFmdGVyIGEgY2hhbmdlLWRldGVjdGlvbiBwYXNzLiBGb3JjZVxuICAgICAgICAvLyBvbmUgc28gdGhlIGZyZXNobHkgYWRkZWQgY2FyZCBpcyByZXNvbHZhYmxlIGJlZm9yZSB3ZSBvcGVuIGl0LlxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgY29uc3QgY2FyZCA9IHRoaXMuY2FyZERhdGEoKS5maW5kKChjKSA9PiBjLmRhdGEgPT09IG5ld0l0ZW0pO1xuICAgICAgICBpZiAoY2FyZCkge1xuICAgICAgICAgIHRoaXMuY3VycmVudERhdGEgPSB0aGlzLmNhcmREYXRhVmlldy5vbkl0ZW1DbGljayhjYXJkKTtcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Q2FyZERhdGFCeUlkZW50aWZpZXIoY29kZTogc3RyaW5nKTogQ2FyZERhdGEgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNhcmREYXRhKCk/LmZpbmQoKHsgZGF0YSB9KSA9PiBkYXRhLmRhdGEuQ29kZSA9PT0gY29kZSk7XG4gIH1cblxuICBhc3luYyBsb2FkTW9yZSgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy50YXNrRmFjYWRlLmxvYWRNb3JlKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEhhbmRsZSBlcnJvclxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9uU2F2ZShkYXRhOiBQYXJ0aWFsPFRhc2s+KSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIC4uLnRoaXMuY3VycmVudERhdGE/LmRhdGEsXG4gICAgICAuLi5kYXRhLFxuICAgIH0gYXMgVGFzaztcbiAgICBhd2FpdCB0aGlzLnRhc2tGYWNhZGUuYWRkUmVxdWVzdChwYXlsb2FkKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNwYWNlLXktOFwiPlxuICA8dmVyYmVuLWRhdGEtdmlldyAjdmR2IFt2aWV3U3RhdGVdPVwie1xuICAgICAgaXNTZWFyY2g6IHRydWUsXG4gICAgICBpc0NvbHVtbjogdHJ1ZSxcbiAgICAgIGlzRmlsdGVyOiB0cnVlLFxuICAgICAgaXNTb3J0OiB0cnVlLFxuICAgICAgaXNFeHBvcnQ6IHRydWUsXG4gICAgICBpc1NlbGVjdDogdHJ1ZSxcbiAgICAgIGlzQ3JlYXRlOiB0cnVlLFxuICAgICAgaXNUb2dnbGU6IHRydWUsXG4gICAgfVwiIFtidXR0b25DbGFzc109XCInbXktY3VzdG9tLWJ1dHRvbi1jbGFzcydcIiBbaWNvbkNsYXNzXT1cIidteS1pY29uLWNsYXNzJ1wiXG4gICAgW2FjdGl2ZUljb25DbGFzc109XCInbXktYWN0aXZlLWljb24tY2xhc3MnXCIgW3NlbGVjdGVkQ29sdW1uQ291bnRdPVwiMFwiIFtzZWxlY3RlZFNvcnRDb3VudF09XCIwXCJcbiAgICBbc2VsZWN0ZWRGaWx0ZXJUYWJsZUNvdW50XT1cIjBcIiAodmlld0NoYW5nZSk9XCJvblZpZXdDaGFuZ2UoJGV2ZW50KVwiIChzdGF0ZUNoYW5nZSk9XCJvblN0YXRlQ2hhbmdlKCRldmVudClcIlxuICAgIChvblNlYXJjaENoYW5nZSk9XCJoYW5kbGVTZWFyY2goJGV2ZW50KVwiPlxuICAgIDxkaXYgdGFibGUtY29udGVudD5cbiAgICAgIDxsaWItZGF0YS10YWJsZSBbZGF0YV09XCJkYXRhKClcIiBbY29sdW1uc109XCJjb25maWcuY29sdW1uc1wiIFtzdHlsZUNvbmZpZ109XCJzdHlsZXNcIlxuICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJoaXN0b3J5XCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC12YWx1ZT5cbiAgICAgICAgICAgIDxhIFtyb3V0ZXJMaW5rXT1cIlsnL3dvcmtmbG93L3Rhc2staGlzdG9yeScsIHZhbHVlXVwiIHJvdXRlckxpbmtBY3RpdmU9XCJyb3V0ZXItbGluay1hY3RpdmVcIlxuICAgICAgICAgICAgICBjbGFzcz1cInVuZGVybGluZSB0ZXh0LVsjMDAwMEZGXVwiPnZpZXcgaGlzdG9yeTwvYT5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cIndvcmtmbG93XCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC12YWx1ZT5cbiAgICAgICAgICAgIDxhIFtyb3V0ZXJMaW5rXT1cIlsnL3dvcmtmbG93L3dvcmtmbG93cycsIHZhbHVlXVwiIHJvdXRlckxpbmtBY3RpdmU9XCJyb3V0ZXItbGluay1hY3RpdmVcIlxuICAgICAgICAgICAgICBjbGFzcz1cInVuZGVybGluZSB0ZXh0LVsjMDAwMEZGXVwiPnZpZXcgV29ya2Zsb3c8L2E+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJhY3Rpb25zXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgICAgICAgIDxsaWItb3BlcmF0aW9uLXBvcHVwIFt1c2VyXT1cInVzZXIoKVwiIFt0YXNrXT1cInJvd1wiIFthbGxvd2VkQWN0aW9uc109XCJnZXRBY3Rpb25OYW1lc0ZvclRhc2socm93KVwiXG4gICAgICAgICAgICAgIChhY3Rpb25Db21wbGV0ZSk9XCJsb2FkSW5pdGlhbERhdGEoKVwiPlxuICAgICAgICAgICAgICA8ZGl2IHRyaWdnZXIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBwLTIgLW0tMiBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8dmVyYmVuLXN2ZyBpY29uPVwiZG90c1wiIFt3aWR0aF09XCIzXCIgW2hlaWdodF09XCIxOFwiIGNsYXNzPVwidy1hdXRvXCI+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbGliLW9wZXJhdGlvbi1wb3B1cD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaGVhZGVyPlxuICAgICAgICAgICAgPHN0cm9uZz5BY3Rpb25zPC9zdHJvbmc+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2xpYi1kYXRhLXRhYmxlPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjYXJkLWNvbnRlbnQ+XG4gICAgICA8dmVyYmVuLWNhcmQtZGF0YS12aWV3IGJvcmRlclJhZGl1cz1cIjEycHhcIiAobG9hZE1vcmVDbGljayk9XCJsb2FkTW9yZSgpXCIgI3ZkY3YgZGF0YUlkPVwiSWRcIiBib3JkZXI9XCI1cHhcIlxuICAgICAgICBbY2FyZERhdGFMaXN0XT1cImNhcmREYXRhKClcIiByYmdDb2xvcj1cIiNmNWY2ZjlcIiBtZz1cIjIwcHhcIj5cbiAgICAgICAgPHZlcmJlbi1sZWZ0LWNhcmQtZGF0YS12aWV3IGNsYXNzPVwic3BhY2UteS03XCI+XG4gICAgICAgICAgPHZlcmJlbi1sZWZ0LWNhcmQtZGF0YSAjdmxjZCBbcGFyZW50XT1cInZkY3ZcIiBkYXRhSWQ9XCJDb2RlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYmctc2Vjb25kYXJ5LTEwMCByb3VuZGVkLXhsIGJvcmRlci1wcmltYXJ5IGJvcmRlci1bMXB4XVwiIFtjYXJkRGF0YUxpc3RdPVwiY2FyZERhdGEoKVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjYXJkIGxldC1jYXJkSXRlbT5cbiAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiY3VycmVudERhdGEgPSB2ZGN2Lm9uSXRlbUNsaWNrKGNhcmRJdGVtKVwiIGNsYXNzPVwiZmxleFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImN1cnJlbnREYXRhID0gdmRjdi5vbkl0ZW1DbGljayhjYXJkSXRlbSlcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGN1cnNvci1wb2ludGVyIHctZnVsbCBiZy1zZWNvbmRhcnkgcm91bmRlZC14bFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMyByb3VuZGVkLXhsIHJvdW5kZWQtdHItbm9uZSByb3VuZGVkLWJyLW5vbmVcIiBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICBjYXJkSXRlbS5zZWxlY3RlZCA/ICdiZy1wcmltYXJ5JyA6ICdiZy1zZWNvbmRhcnktMjAwJ1xuICAgICAgICAgICAgICAgICAgICBcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHB5LTIgcHgtNCB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC00IGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGdhcC15LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZCB0ZXh0LVsjNDA0MDQwXVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmRJdGVtLnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxsYWJlbCBmb3I9XCJwaG9uZVwiIGNsYXNzPVwidGV4dC1bMTBweF0gZm9udC1saWdodFwiPkN1cnJlbnQgQWN0b3JzOjwvbGFiZWw+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNhcmRJdGVtLmRhdGEuQ3VycmVudEFjdG9ycyAmJiBjYXJkSXRlbS5kYXRhLkN1cnJlbnRBY3RvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNhcmRJdGVtLmRhdGEuQ3VycmVudEFjdG9ycy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9XCJwaG9uZVwiIGNsYXNzPVwidGV4dC1zbVwiPnt7IGNhcmRJdGVtLmRhdGEuQ3VycmVudEFjdG9yc1swXS5JZGVudGlmaWVyIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcmJlbi10b29sdGlwIFt0b3BdPVwiJzBweCdcIiBbdGV4dENvbG9yXT1cIicjMDAwJ1wiIFtiYWNrZ3JvdW5kQ29sb3JdPVwiJyNEM0QzRDMnXCIgW2xlZnRdPVwiJzAnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcENvbnRlbnRdPVwiYWN0b3JzVG9vbHRpcFRlbXBsYXRlXCIgI2FjdG9yc1Rvb2x0aXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9XCJwaG9uZVwiIGNsYXNzPVwidGV4dC1zbSBjdXJzb3ItcG9pbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY2FyZEl0ZW0uZGF0YS5DdXJyZW50QWN0b3JzWzBdLklkZW50aWZpZXIgfX0gYW5kIHt7IGNhcmRJdGVtLmRhdGEuQ3VycmVudEFjdG9ycy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMSB9fSBvdGhlcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmVyYmVuLXRvb2x0aXA+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNhY3RvcnNUb29sdGlwVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgbWItMVwiPkN1cnJlbnQgQWN0b3JzOjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZGlzYyBsaXN0LWluc2lkZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChhY3RvciBvZiBjYXJkSXRlbS5kYXRhLkN1cnJlbnRBY3RvcnM7IHRyYWNrIGFjdG9yLklkZW50aWZpZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC14c1wiPnt7IGFjdG9yLklkZW50aWZpZXIgfX08L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD1cInBob25lXCIgY2xhc3M9XCJ0ZXh0LXNtIHRleHQtZ3JheS00MDBcIj5ObyBhY3RvcnMgYXNzaWduZWQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGdhcC15LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGZvcj1cInJvbGVcIiBjbGFzcz1cImZvbnQtbGlnaHRcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkSXRlbS5kYXRhLkNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcIiBjbGFzcz1cImZsZXggaXRlbXMtZW5kIGdhcC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxhIFtyb3V0ZXJMaW5rXT1cIltcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvd29ya2Zsb3cvdGFzay1oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmRJdGVtLmRhdGEuQ29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cIiByb3V0ZXJMaW5rQWN0aXZlPVwicm91dGVyLWxpbmstYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInVuZGVybGluZSB0ZXh0LVsjMDAwMEZGXSB0ZXh0LXhzIHJlbGF0aXZlIHotMTBcIj52aWV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlzdG9yeTwvYT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLW9wZXJhdGlvbi1wb3B1cCBbdXNlcl09XCJ1c2VyKClcIiBbdGFza109XCJjYXJkSXRlbS5kYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWxsb3dlZEFjdGlvbnNdPVwiZ2V0QWN0aW9uTmFtZXNGb3JUYXNrKGNhcmRJdGVtLmRhdGEpXCIgKGFjdGlvbkNvbXBsZXRlKT1cImxvYWRJbml0aWFsRGF0YSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB0cmlnZ2VyIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgcC0yIC1tLTIgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyYmVuLXN2ZyBpY29uPVwiZG90c1wiIFt3aWR0aF09XCIzXCIgW2hlaWdodF09XCIxOFwiIGNsYXNzPVwidy1hdXRvXCI+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1vcGVyYXRpb24tcG9wdXA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZmxleFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1ub3JtYWwgdGV4dC1zbVwiPnt7IGl0ZW0udGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChjaUl0ZW0gb2YgaXRlbS5ib2R5OyB0cmFjayBjaUl0ZW0udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZCBmb250LWxpZ2h0IHRleHQteHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPnt7IGNpSXRlbS50aXRsZSB9fTo8L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWJsYWNrXCI+e3sgY2lJdGVtLnZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfSAtLT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC92ZXJiZW4tbGVmdC1jYXJkLWRhdGE+XG4gICAgICAgIDwvdmVyYmVuLWxlZnQtY2FyZC1kYXRhLXZpZXc+XG5cbiAgICAgICAgPHZlcmJlbi1yaWdodC1jYXJkLWRhdGEtdmlldz5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3BhcmVudD5cbiAgICAgICAgICAgIDwhLS0gPGxpYi11c2VyLXJlcXVlc3QtZm9ybVxuICAgICAgICAgICAgICBbY3VycmVudERhdGFdPVwiY3VycmVudERhdGFcIlxuICAgICAgICAgICAgICAoc3dpdGNoVmlldyk9XCJ2ZHYudG9nZ2xlVmlldygpXCJcbiAgICAgICAgICAgICAgKG9uQXBwcm92YWwpPVwib25BcHByb3ZlKCRldmVudClcIlxuICAgICAgICAgICAgPjwvbGliLXVzZXItcmVxdWVzdC1mb3JtPiAtLT5cbiAgICAgICAgICAgIDx0YXNrcy1mb3JtIFtjdXJyZW50RGF0YV09XCJjdXJyZW50RGF0YVwiIChzd2l0Y2hWaWV3KT1cInZkdi50b2dnbGVWaWV3KClcIlxuICAgICAgICAgICAgICAob25TYXZlKT1cIm9uU2F2ZSgkZXZlbnQpXCI+PC90YXNrcy1mb3JtPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvdmVyYmVuLXJpZ2h0LWNhcmQtZGF0YS12aWV3PlxuXG4gICAgICAgIDx2ZXJiZW4tY2FyZC1kYXRhLXZpZXctZm9vdGVyIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdmbGV4IGdhcC0yIGl0ZW1zLWNlbnRlcic6IHRydWUsXG4gICAgICAgICAgICAgICdqdXN0aWZ5LWVuZCc6IHRydWVcbiAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgIDwhLS0gPHZlcmJlbmEtYnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiIXZkY3YuaGFzQ3VycmVudEl0ZW0oKVwiXG4gICAgICAgICAgICAgIFtmb250V2VpZ2h0XT1cIidib2xkJ1wiXG4gICAgICAgICAgICAgIFtiZ0NvbG9yXT1cIicjOEU4RDg3J1wiXG4gICAgICAgICAgICAgIFtib3JkZXJSYWRpdXNdPVwiJzRweCdcIlxuICAgICAgICAgICAgICBbdGV4dENvbG9yXT1cIicjZmZmJ1wiXG4gICAgICAgICAgICAgIFtwZF09XCInOS43OXB4IDM3LjI4cHgnXCJcbiAgICAgICAgICAgICAgW3RleHRdPVwiJ0RlbGV0ZSdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC92ZXJiZW5hLWJ1dHRvbj4gLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCB7e1xuICAgICAgICAgICAgICAgIHZkY3YuaGFzQ3VycmVudEl0ZW0oKSA/ICdmbGV4LTEnIDogJydcbiAgICAgICAgICAgICAgfX0ganVzdGlmeS1lbmQgaXRlbXMtY2VudGVyIGdhcC01XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFnaW5hdG9yLXRleHRcIj57eyBjYXJkRGF0YSgpLmxlbmd0aCB9fSByZWNvcmRzIGxvYWRlZDwvc3Bhbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibG9hZE1vcmUoKVwiIGNsYXNzPVwibG9hZC1tb3JlIHZpZXctbGlua3MgdGV4dC1bIzM0NzlFOV0gdW5kZXJsaW5lXCI+XG4gICAgICAgICAgICAgICAgTG9hZCBtb3JlXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdmVyYmVuLWNhcmQtZGF0YS12aWV3LWZvb3Rlcj5cbiAgICAgIDwvdmVyYmVuLWNhcmQtZGF0YS12aWV3PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY29sdW1uLWNvbnRlbnQ+XG4gICAgICA8bGliLWRhdGEtY29sdW1ucyBbY29sdW1uc109XCJjb25maWcuY29sdW1uc1wiIChjb2x1bW5zVXBkYXRlZCk9XCJvbkNvbHVtbnNVcGRhdGVkKCRldmVudClcIj48L2xpYi1kYXRhLWNvbHVtbnM+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBmaWx0ZXItY29udGVudD5cbiAgICAgIDx2ZXJiZW4tdGFibGUtZmlsdGVyIFtib3JkZXJdPVwiJzFweCBzb2xpZCByZ2JhKDIxMiwgMTYwLCA3LCAxKSdcIiBib3JkZXJSYWRpdXM9XCIxMHB4XCJcbiAgICAgICAgYm94U2hhZG93PVwiMnB4IDJweCAycHggMHB4IHNpbHZlclwiIGJnQ29sb3I9XCJ3aGl0ZVwiIHdpZHRoPVwiNDIwcHhcIiB0ZXh0Q29sb3I9XCJibGFja1wiIHBkPVwiMXJlbVwiXG4gICAgICAgIHByaW1hcnlDb2xvcj1cIiNGRkU2ODFcIiBzZWNvbmRhcnlDb2xvcj1cIiMzNDc5RTlcIiB0ZXJ0aWFyeUNvbG9yPVwiIzQwNDA0MFwiIFtmaWx0ZXJPcHRpb25zXT1cImZpbHRlckFycmF5XCJcbiAgICAgICAgW21heEZpbHRlckxlbmd0aF09XCIzXCI+PC92ZXJiZW4tdGFibGUtZmlsdGVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgc29ydC1jb250ZW50PlxuICAgICAgPGxpYi1kYXRhLXNvcnQgW2NvbHVtbnNdPVwiY29uZmlnLmNvbHVtbnNcIiBbZGF0YV09XCJkYXRhKClcIiAoc29ydEFwcGxpZWQpPVwib25Tb3J0VXBkYXRlZCgkZXZlbnQpXCI+PC9saWItZGF0YS1zb3J0PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgZXhwb3J0LWNvbnRlbnQ+XG4gICAgICA8bGliLWRhdGEtZXhwb3J0IFtkYXRhXT1cImRhdGEoKVwiIChleHBvcnREYXRhRXZlbnQpPVwiaGFuZGxlRXhwb3J0KCRldmVudClcIj5cbiAgICAgIDwvbGliLWRhdGEtZXhwb3J0PlxuICAgIDwvZGl2PlxuICA8L3ZlcmJlbi1kYXRhLXZpZXc+XG5cbiAgPGRpdiAqbmdJZj1cInZkdi5pc1RhYmxlVmlld1wiIGNsYXNzPVwiZmxleCBnYXAtMiBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZS1sb2ctYnV0dG9uLWNvbnRhaW5lciBmbGV4IGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgPCEtLSA8dmVyYmVuYS1idXR0b25cbiAgICAgICAgW2ZvbnRXZWlnaHRdPVwiJ2JvbGQnXCJcbiAgICAgICAgW2JnQ29sb3JdPVwiJyM4RThEODcnXCJcbiAgICAgICAgW2JvcmRlclJhZGl1c109XCInNHB4J1wiXG4gICAgICAgIFt0ZXh0Q29sb3JdPVwiJyNmZmYnXCJcbiAgICAgICAgW3BkXT1cIic5Ljc5cHggMzcuMjhweCdcIlxuICAgICAgICBbdGV4dF09XCInRGVsZXRlJ1wiXG4gICAgICA+XG4gICAgICA8L3ZlcmJlbmEtYnV0dG9uPiAtLT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZCBpdGVtcy1jZW50ZXIgZ2FwLTVcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwicGFnaW5hdG9yLXRleHRcIj57eyBjYXJkRGF0YSgpLmxlbmd0aCB9fSByZWNvcmRzIGxvYWRlZDwvc3Bhbj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cImxvYWRNb3JlKClcIiBjbGFzcz1cImxvYWQtbW9yZSB2aWV3LWxpbmtzIHRleHQtWyMzNDc5RTldIHVuZGVybGluZVwiPlxuICAgICAgICBMb2FkIG1vcmVcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvY29tcG9uZW50cy90YXNrcy90YXNrcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3Rhc2tzL3Rhc2tzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVwRSxPQUFPLEVBQUUsV0FBVyxFQUFRLFVBQVUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxxQkFBcUIsRUFBa0IsTUFBTSxtQ0FBbUMsQ0FBQztBQUMxRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7QUFRMUMsTUFBTSxPQUFPLGNBQWUsU0FBUSxxQkFBMkI7SUFtQnpDO0lBQWdDO0lBbEJwRCxJQUFJLEdBQUcsS0FBSyxDQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ3pCLE1BQU0sR0FBeUI7UUFDN0IsVUFBVSxFQUFFLEVBQUUsRUFBRSx3QkFBd0I7UUFDeEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxtQ0FBbUM7UUFDckQsY0FBYyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3pCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsS0FB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LEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUTtRQUNaLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNuQyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLGVBQWU7UUFDakIsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLElBQW1CO1FBQzlCLE1BQU0sT0FBTyxHQUFHO1lBQ2QsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUk7WUFDekIsR0FBRyxJQUFJO1NBQ0EsQ0FBQztRQUNWLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUMsQ0FBQzt3R0E3RlUsY0FBYzs0RkFBZCxjQUFjLHFLQUZkLENBQUMsWUFBWSxFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUMsaURDZGxELHdwVkF1TkE7OzRGRHZNYSxjQUFjO2tCQU4xQixTQUFTOytCQUNFLFdBQVcsYUFHVixDQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENhcmREYXRhIH0gZnJvbSAndmVyYmVuLW5nLXVpJztcbmltcG9ydCB7IE9iamVjdFN0YXRlLCBUYXNrLCBUYXNrU3RhdHVzIH0gZnJvbSAndmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvbW9kZWxzJztcbmltcG9ydCB7IEJhc2VEYXRhVmlld0NvbXBvbmVudCwgRGF0YVZpZXdDb25maWcgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9zaGFyZWQnO1xuaW1wb3J0IHsgY29sdW1ucyB9IGZyb20gJy4vdGFza3MuY29sdW1ucyc7XG5pbXBvcnQgeyBUYXNrRmFjYWRlIH0gZnJvbSAnLi90YXNrcy5mYWNhZGUnO1xuaW1wb3J0IHsgVGFza01vZGVsIH0gZnJvbSAnLi90YXNrcy5tb2RlbHMnO1xuaW1wb3J0IHsgVGFza3NTZXJ2aWNlIH0gZnJvbSAnLi90YXNrcy5zZXJ2aWNlJztcbmltcG9ydCB7IFRhc2tTdGF0ZSB9IGZyb20gJy4vdGFza3Muc3RhdGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItdGFza3MnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFza3MuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vdGFza3MuY29tcG9uZW50LmNzcycsXG4gIHByb3ZpZGVyczogW1Rhc2tzU2VydmljZSwgVGFza0ZhY2FkZSwgVGFza1N0YXRlXSxcbn0pXG5leHBvcnQgY2xhc3MgVGFza3NDb21wb25lbnQgZXh0ZW5kcyBCYXNlRGF0YVZpZXdDb21wb25lbnQ8VGFzaz4ge1xuICB1c2VyID0gaW5wdXQ8c3RyaW5nPignJyk7XG4gIGNvbmZpZzogRGF0YVZpZXdDb25maWc8VGFzaz4gPSB7XG4gICAgZGF0YVNvdXJjZTogW10sIC8vIFBvcHVsYXRlIGZyb20gc2VydmljZVxuICAgIGNvbHVtbnM6IGNvbHVtbnMsIC8vIFlvdXIgZXhpc3RpbmcgY29sdW1uIGRlZmluaXRpb25zXG4gICAgY2FyZERhdGFNYXBwZXI6ICh0YXNrKSA9PiAoe1xuICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgdGl0bGU6IHRhc2suTmFtZSxcbiAgICAgIGRhdGE6IHRhc2ssXG4gICAgICBib2R5OiBbXG4gICAgICAgIHsgdGl0bGU6ICdOYW1lJywgdmFsdWU6IHRhc2suTmFtZSB9LFxuICAgICAgICB7IHRpdGxlOiAnU3RhdHVzJywgdmFsdWU6IHRhc2suU3RhdHVzIH0sXG4gICAgICBdLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgIH0pLFxuICAgIG9uRGV0YWlsVmlldzogKHRhc2spID0+IHtcbiAgICAgIC8vIEN1c3RvbSBkZXRhaWwgdmlldyBsb2dpY1xuICAgIH0sXG4gIH07XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSB0YXNrRmFjYWRlOiBUYXNrRmFjYWRlKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMudGFza0ZhY2FkZS5nZXRSZXF1ZXN0cyQoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgIHRoaXMuZGF0YS5zZXQoZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICBvdmVycmlkZSBsb2FkSW5pdGlhbERhdGEoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudGFza0ZhY2FkZS5sb2FkUmVxdWVzdHModGhpcy51c2VyKCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBIYW5kbGUgZXJyb3JcbiAgICB9XG4gIH1cblxuICBoYW5kbGVTZWFyY2goZXZlbnQ6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfSkge1xuICAgIHRoaXMudGFza0ZhY2FkZS5zZWFyY2goZXZlbnQudmFsdWUsIHRoaXMudXNlcigpKTtcbiAgfVxuXG4gIGdldEFjdGlvbk5hbWVzRm9yVGFzayh0YXNrOiBUYXNrKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ2ZvbGxvd3Rhc2snLCAncmVhc3NpZ24nXTtcbiAgfVxuXG4gIG92ZXJyaWRlIG9uU3RhdGVDaGFuZ2UoZXZlbnQ6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBib29sZWFuIH0pOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnY3JlYXRlJzoge1xuICAgICAgICBjb25zdCBuZXdJdGVtOiBUYXNrID0gbmV3IFRhc2tNb2RlbCh7XG4gICAgICAgICAgV29ya2Zsb3dDb2RlOiAnJyxcbiAgICAgICAgICBTdGF0dXM6IFRhc2tTdGF0dXMuQWN0aXZlLFxuICAgICAgICAgIEZsb3dhYmxlOiAnJyxcbiAgICAgICAgICBGbG93YWJsZURhdGE6IG51bGwsXG4gICAgICAgICAgRmxvd2FibGVQYXRoOiAnJyxcbiAgICAgICAgICBDdXJyZW50QWN0b3JzOiBbXSxcbiAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgfSkgYXMgdW5rbm93biBhcyBUYXNrO1xuICAgICAgICB0aGlzLnRhc2tGYWNhZGUuYWRkTmV3UmVxdWVzdChuZXdJdGVtKTtcbiAgICAgICAgdGhpcy5kYXRhVmlldy5pc1RhYmxlVmlldyA9IGZhbHNlO1xuXG4gICAgICAgIC8vIENhcmREYXRhVmlld0NvbXBvbmVudCBtYXRjaGVzIGNsaWNrcyBhZ2FpbnN0IGl0cyBjYXJkRGF0YUxpc3QgaW5wdXQsXG4gICAgICAgIC8vIHdoaWNoIG9ubHkgcmVjZWl2ZXMgdGhlIG5ldyBjYXJkIGFmdGVyIGEgY2hhbmdlLWRldGVjdGlvbiBwYXNzLiBGb3JjZVxuICAgICAgICAvLyBvbmUgc28gdGhlIGZyZXNobHkgYWRkZWQgY2FyZCBpcyByZXNvbHZhYmxlIGJlZm9yZSB3ZSBvcGVuIGl0LlxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgY29uc3QgY2FyZCA9IHRoaXMuY2FyZERhdGEoKS5maW5kKChjKSA9PiBjLmRhdGEgPT09IG5ld0l0ZW0pO1xuICAgICAgICBpZiAoY2FyZCkge1xuICAgICAgICAgIHRoaXMuY3VycmVudERhdGEgPSB0aGlzLmNhcmREYXRhVmlldy5vbkl0ZW1DbGljayhjYXJkKTtcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Q2FyZERhdGFCeUlkZW50aWZpZXIoY29kZTogc3RyaW5nKTogQ2FyZERhdGEgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNhcmREYXRhKCk/LmZpbmQoKHsgZGF0YSB9KSA9PiBkYXRhLmRhdGEuQ29kZSA9PT0gY29kZSk7XG4gIH1cblxuICBhc3luYyBsb2FkTW9yZSgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy50YXNrRmFjYWRlLmxvYWRNb3JlKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEhhbmRsZSBlcnJvclxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9uU2F2ZShkYXRhOiBQYXJ0aWFsPFRhc2s+KSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIC4uLnRoaXMuY3VycmVudERhdGE/LmRhdGEsXG4gICAgICAuLi5kYXRhLFxuICAgIH0gYXMgVGFzaztcbiAgICBhd2FpdCB0aGlzLnRhc2tGYWNhZGUuYWRkUmVxdWVzdChwYXlsb2FkKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNwYWNlLXktOFwiPlxuICA8dmVyYmVuLWRhdGEtdmlldyAjdmR2IFt2aWV3U3RhdGVdPVwie1xuICAgICAgaXNTZWFyY2g6IHRydWUsXG4gICAgICBpc0NvbHVtbjogdHJ1ZSxcbiAgICAgIGlzRmlsdGVyOiB0cnVlLFxuICAgICAgaXNTb3J0OiB0cnVlLFxuICAgICAgaXNFeHBvcnQ6IHRydWUsXG4gICAgICBpc1NlbGVjdDogdHJ1ZSxcbiAgICAgIGlzQ3JlYXRlOiB0cnVlLFxuICAgICAgaXNUb2dnbGU6IHRydWUsXG4gICAgfVwiIFtidXR0b25DbGFzc109XCInbXktY3VzdG9tLWJ1dHRvbi1jbGFzcydcIiBbaWNvbkNsYXNzXT1cIidteS1pY29uLWNsYXNzJ1wiXG4gICAgW2FjdGl2ZUljb25DbGFzc109XCInbXktYWN0aXZlLWljb24tY2xhc3MnXCIgW3NlbGVjdGVkQ29sdW1uQ291bnRdPVwiMFwiIFtzZWxlY3RlZFNvcnRDb3VudF09XCIwXCJcbiAgICBbc2VsZWN0ZWRGaWx0ZXJUYWJsZUNvdW50XT1cIjBcIiAodmlld0NoYW5nZSk9XCJvblZpZXdDaGFuZ2UoJGV2ZW50KVwiIChzdGF0ZUNoYW5nZSk9XCJvblN0YXRlQ2hhbmdlKCRldmVudClcIlxuICAgIChvblNlYXJjaENoYW5nZSk9XCJoYW5kbGVTZWFyY2goJGV2ZW50KVwiPlxuICAgIDxkaXYgdGFibGUtY29udGVudD5cbiAgICAgIDxsaWItZGF0YS10YWJsZSBbZGF0YV09XCJkYXRhKClcIiBbY29sdW1uc109XCJjb25maWcuY29sdW1uc1wiIFtzdHlsZUNvbmZpZ109XCJzdHlsZXNcIlxuICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJoaXN0b3J5XCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC12YWx1ZT5cbiAgICAgICAgICAgIDxhIFtyb3V0ZXJMaW5rXT1cIlsnL3dvcmtmbG93L3Rhc2staGlzdG9yeScsIHZhbHVlXVwiIHJvdXRlckxpbmtBY3RpdmU9XCJyb3V0ZXItbGluay1hY3RpdmVcIlxuICAgICAgICAgICAgICBjbGFzcz1cInVuZGVybGluZSB0ZXh0LVt2YXIoLS12Ym4tY29sb3ItYm9yZGVyLWZvY3VzKV1cIj52aWV3IGhpc3Rvcnk8L2E+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJ3b3JrZmxvd1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbCBsZXQtdmFsdWU+XG4gICAgICAgICAgICA8YSBbcm91dGVyTGlua109XCJbJy93b3JrZmxvdy93b3JrZmxvd3MnLCB2YWx1ZV1cIiByb3V0ZXJMaW5rQWN0aXZlPVwicm91dGVyLWxpbmstYWN0aXZlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ1bmRlcmxpbmUgdGV4dC1bdmFyKC0tdmJuLWNvbG9yLWJvcmRlci1mb2N1cyldXCI+dmlldyBXb3JrZmxvdzwvYT5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cImFjdGlvbnNcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgICAgICAgPGxpYi1vcGVyYXRpb24tcG9wdXAgW3VzZXJdPVwidXNlcigpXCIgW3Rhc2tdPVwicm93XCIgW2FsbG93ZWRBY3Rpb25zXT1cImdldEFjdGlvbk5hbWVzRm9yVGFzayhyb3cpXCJcbiAgICAgICAgICAgICAgKGFjdGlvbkNvbXBsZXRlKT1cImxvYWRJbml0aWFsRGF0YSgpXCI+XG4gICAgICAgICAgICAgIDxkaXYgdHJpZ2dlciBjbGFzcz1cImN1cnNvci1wb2ludGVyIHAtMiAtbS0yIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnIGljb249XCJkb3RzXCIgW3dpZHRoXT1cIjNcIiBbaGVpZ2h0XT1cIjE4XCIgY2xhc3M9XCJ3LWF1dG9cIj48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9saWItb3BlcmF0aW9uLXBvcHVwPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNoZWFkZXI+XG4gICAgICAgICAgICA8c3Ryb25nPkFjdGlvbnM8L3N0cm9uZz5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbGliLWRhdGEtdGFibGU+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNhcmQtY29udGVudD5cbiAgICAgIDx2ZXJiZW4tY2FyZC1kYXRhLXZpZXcgYm9yZGVyUmFkaXVzPVwiMTJweFwiIChsb2FkTW9yZUNsaWNrKT1cImxvYWRNb3JlKClcIiAjdmRjdiBkYXRhSWQ9XCJJZFwiIGJvcmRlcj1cIjVweFwiXG4gICAgICAgIFtjYXJkRGF0YUxpc3RdPVwiY2FyZERhdGEoKVwiIHJiZ0NvbG9yPVwidmFyKC0tdmJuLWNvbG9yLXN1cmZhY2UtYWx0KVwiIG1nPVwiMjBweFwiPlxuICAgICAgICA8dmVyYmVuLWxlZnQtY2FyZC1kYXRhLXZpZXcgY2xhc3M9XCJzcGFjZS15LTdcIj5cbiAgICAgICAgICA8dmVyYmVuLWxlZnQtY2FyZC1kYXRhICN2bGNkIFtwYXJlbnRdPVwidmRjdlwiIGRhdGFJZD1cIkNvZGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJiZy1zZWNvbmRhcnktMTAwIHJvdW5kZWQteGwgYm9yZGVyLXByaW1hcnkgYm9yZGVyLVsxcHhdXCIgW2NhcmREYXRhTGlzdF09XCJjYXJkRGF0YSgpXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NhcmQgbGV0LWNhcmRJdGVtPlxuICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJjdXJyZW50RGF0YSA9IHZkY3Yub25JdGVtQ2xpY2soY2FyZEl0ZW0pXCIgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiY3VycmVudERhdGEgPSB2ZGN2Lm9uSXRlbUNsaWNrKGNhcmRJdGVtKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggY3Vyc29yLXBvaW50ZXIgdy1mdWxsIGJnLXNlY29uZGFyeSByb3VuZGVkLXhsXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0zIHJvdW5kZWQteGwgcm91bmRlZC10ci1ub25lIHJvdW5kZWQtYnItbm9uZVwiIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGNhcmRJdGVtLnNlbGVjdGVkID8gJ2JnLXByaW1hcnknIDogJ2JnLXNlY29uZGFyeS0yMDAnXG4gICAgICAgICAgICAgICAgICAgIFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgcHktMiBweC00IHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTQganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgZ2FwLXktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXNlbWlib2xkIHRleHQtW3ZhcigtLXZibi1jb2xvci1vbi1wcmltYXJ5KV1cIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkSXRlbS50aXRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bGFiZWwgZm9yPVwicGhvbmVcIiBjbGFzcz1cInRleHQtWzEwcHhdIGZvbnQtbGlnaHRcIj5DdXJyZW50IEFjdG9yczo8L2xhYmVsPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChjYXJkSXRlbS5kYXRhLkN1cnJlbnRBY3RvcnMgJiYgY2FyZEl0ZW0uZGF0YS5DdXJyZW50QWN0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChjYXJkSXRlbS5kYXRhLkN1cnJlbnRBY3RvcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPVwicGhvbmVcIiBjbGFzcz1cInRleHQtc21cIj57eyBjYXJkSXRlbS5kYXRhLkN1cnJlbnRBY3RvcnNbMF0uSWRlbnRpZmllciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJiZW4tdG9vbHRpcCBbdG9wXT1cIicwcHgnXCIgW3RleHRDb2xvcl09XCIndmFyKC0tdmJuLWNvbG9yLXRleHQpJ1wiIFtiYWNrZ3JvdW5kQ29sb3JdPVwiJ3ZhcigtLXZibi1jb2xvci1ib3JkZXIpJ1wiIFtsZWZ0XT1cIicwJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBDb250ZW50XT1cImFjdG9yc1Rvb2x0aXBUZW1wbGF0ZVwiICNhY3RvcnNUb29sdGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPVwicGhvbmVcIiBjbGFzcz1cInRleHQtc20gY3Vyc29yLXBvaW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNhcmRJdGVtLmRhdGEuQ3VycmVudEFjdG9yc1swXS5JZGVudGlmaWVyIH19IGFuZCB7eyBjYXJkSXRlbS5kYXRhLkN1cnJlbnRBY3RvcnMubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDEgfX0gb3RoZXJzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3ZlcmJlbi10b29sdGlwPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYWN0b3JzVG9vbHRpcFRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC14cyBmb250LXNlbWlib2xkIG1iLTFcIj5DdXJyZW50IEFjdG9yczo8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWRpc2MgbGlzdC1pbnNpZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoYWN0b3Igb2YgY2FyZEl0ZW0uZGF0YS5DdXJyZW50QWN0b3JzOyB0cmFjayBhY3Rvci5JZGVudGlmaWVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQteHNcIj57eyBhY3Rvci5JZGVudGlmaWVyIH19PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9XCJwaG9uZVwiIGNsYXNzPVwidGV4dC1zbSB0ZXh0LWdyYXktNDAwXCI+Tm8gYWN0b3JzIGFzc2lnbmVkPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBnYXAteS0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBmb3I9XCJyb2xlXCIgY2xhc3M9XCJmb250LWxpZ2h0XCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZEl0ZW0uZGF0YS5Db2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCIgY2xhc3M9XCJmbGV4IGl0ZW1zLWVuZCBnYXAtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBbcm91dGVyTGlua109XCJbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL3dvcmtmbG93L3Rhc2staGlzdG9yeScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkSXRlbS5kYXRhLkNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXCIgcm91dGVyTGlua0FjdGl2ZT1cInJvdXRlci1saW5rLWFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ1bmRlcmxpbmUgdGV4dC1bdmFyKC0tdmJuLWNvbG9yLWJvcmRlci1mb2N1cyldIHRleHQteHMgcmVsYXRpdmUgei0xMFwiPnZpZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaXN0b3J5PC9hPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItb3BlcmF0aW9uLXBvcHVwIFt1c2VyXT1cInVzZXIoKVwiIFt0YXNrXT1cImNhcmRJdGVtLmRhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthbGxvd2VkQWN0aW9uc109XCJnZXRBY3Rpb25OYW1lc0ZvclRhc2soY2FyZEl0ZW0uZGF0YSlcIiAoYWN0aW9uQ29tcGxldGUpPVwibG9hZEluaXRpYWxEYXRhKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRyaWdnZXIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBwLTIgLW0tMiBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnIGljb249XCJkb3RzXCIgW3dpZHRoXT1cIjNcIiBbaGVpZ2h0XT1cIjE4XCIgY2xhc3M9XCJ3LWF1dG9cIj48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGliLW9wZXJhdGlvbi1wb3B1cD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LW5vcm1hbCB0ZXh0LXNtXCI+e3sgaXRlbS50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGNpSXRlbSBvZiBpdGVtLmJvZHk7IHRyYWNrIGNpSXRlbS52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkIGZvbnQtbGlnaHQgdGV4dC14c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA+e3sgY2lJdGVtLnRpdGxlIH19Ojwvc3BhblxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtYmxhY2tcIj57eyBjaUl0ZW0udmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9IC0tPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3ZlcmJlbi1sZWZ0LWNhcmQtZGF0YT5cbiAgICAgICAgPC92ZXJiZW4tbGVmdC1jYXJkLWRhdGEtdmlldz5cblxuICAgICAgICA8dmVyYmVuLXJpZ2h0LWNhcmQtZGF0YS12aWV3PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcGFyZW50PlxuICAgICAgICAgICAgPCEtLSA8bGliLXVzZXItcmVxdWVzdC1mb3JtXG4gICAgICAgICAgICAgIFtjdXJyZW50RGF0YV09XCJjdXJyZW50RGF0YVwiXG4gICAgICAgICAgICAgIChzd2l0Y2hWaWV3KT1cInZkdi50b2dnbGVWaWV3KClcIlxuICAgICAgICAgICAgICAob25BcHByb3ZhbCk9XCJvbkFwcHJvdmUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9saWItdXNlci1yZXF1ZXN0LWZvcm0+IC0tPlxuICAgICAgICAgICAgPHRhc2tzLWZvcm0gW2N1cnJlbnREYXRhXT1cImN1cnJlbnREYXRhXCIgKHN3aXRjaFZpZXcpPVwidmR2LnRvZ2dsZVZpZXcoKVwiXG4gICAgICAgICAgICAgIChvblNhdmUpPVwib25TYXZlKCRldmVudClcIj48L3Rhc2tzLWZvcm0+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC92ZXJiZW4tcmlnaHQtY2FyZC1kYXRhLXZpZXc+XG5cbiAgICAgICAgPHZlcmJlbi1jYXJkLWRhdGEtdmlldy1mb290ZXIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2ZsZXggZ2FwLTIgaXRlbXMtY2VudGVyJzogdHJ1ZSxcbiAgICAgICAgICAgICAgJ2p1c3RpZnktZW5kJzogdHJ1ZVxuICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgPCEtLSA8dmVyYmVuYS1idXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCIhdmRjdi5oYXNDdXJyZW50SXRlbSgpXCJcbiAgICAgICAgICAgICAgW2ZvbnRXZWlnaHRdPVwiJ2JvbGQnXCJcbiAgICAgICAgICAgICAgW2JnQ29sb3JdPVwiJ3ZhcigtLXZibi1jb2xvci10ZXh0LW11dGVkKSdcIlxuICAgICAgICAgICAgICBbYm9yZGVyUmFkaXVzXT1cIic0cHgnXCJcbiAgICAgICAgICAgICAgW3RleHRDb2xvcl09XCIndmFyKC0tdmJuLWNvbG9yLXN1cmZhY2UpJ1wiXG4gICAgICAgICAgICAgIFtwZF09XCInOS43OXB4IDM3LjI4cHgnXCJcbiAgICAgICAgICAgICAgW3RleHRdPVwiJ0RlbGV0ZSdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC92ZXJiZW5hLWJ1dHRvbj4gLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCB7e1xuICAgICAgICAgICAgICAgIHZkY3YuaGFzQ3VycmVudEl0ZW0oKSA/ICdmbGV4LTEnIDogJydcbiAgICAgICAgICAgICAgfX0ganVzdGlmeS1lbmQgaXRlbXMtY2VudGVyIGdhcC01XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFnaW5hdG9yLXRleHRcIj57eyBjYXJkRGF0YSgpLmxlbmd0aCB9fSByZWNvcmRzIGxvYWRlZDwvc3Bhbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibG9hZE1vcmUoKVwiIGNsYXNzPVwibG9hZC1tb3JlIHZpZXctbGlua3MgdGV4dC1bdmFyKC0tdmJuLWNvbG9yLWJvcmRlci1mb2N1cyldIHVuZGVybGluZVwiPlxuICAgICAgICAgICAgICAgIExvYWQgbW9yZVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3ZlcmJlbi1jYXJkLWRhdGEtdmlldy1mb290ZXI+XG4gICAgICA8L3ZlcmJlbi1jYXJkLWRhdGEtdmlldz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNvbHVtbi1jb250ZW50PlxuICAgICAgPGxpYi1kYXRhLWNvbHVtbnMgW2NvbHVtbnNdPVwiY29uZmlnLmNvbHVtbnNcIiAoY29sdW1uc1VwZGF0ZWQpPVwib25Db2x1bW5zVXBkYXRlZCgkZXZlbnQpXCI+PC9saWItZGF0YS1jb2x1bW5zPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgZmlsdGVyLWNvbnRlbnQ+XG4gICAgICA8dmVyYmVuLXRhYmxlLWZpbHRlciBbYm9yZGVyXT1cIicxcHggc29saWQgdmFyKC0tdmJuLWNvbG9yLXByaW1hcnkpJ1wiIGJvcmRlclJhZGl1cz1cIjEwcHhcIlxuICAgICAgICBib3hTaGFkb3c9XCIycHggMnB4IDJweCAwcHggc2lsdmVyXCIgYmdDb2xvcj1cIndoaXRlXCIgd2lkdGg9XCI0MjBweFwiIHRleHRDb2xvcj1cImJsYWNrXCIgcGQ9XCIxcmVtXCJcbiAgICAgICAgcHJpbWFyeUNvbG9yPVwidmFyKC0tdmJuLWNvbG9yLXByaW1hcnkpXCIgc2Vjb25kYXJ5Q29sb3I9XCJ2YXIoLS12Ym4tY29sb3ItYm9yZGVyLWZvY3VzKVwiIHRlcnRpYXJ5Q29sb3I9XCJ2YXIoLS12Ym4tY29sb3Itb24tcHJpbWFyeSlcIiBbZmlsdGVyT3B0aW9uc109XCJmaWx0ZXJBcnJheVwiXG4gICAgICAgIFttYXhGaWx0ZXJMZW5ndGhdPVwiM1wiPjwvdmVyYmVuLXRhYmxlLWZpbHRlcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IHNvcnQtY29udGVudD5cbiAgICAgIDxsaWItZGF0YS1zb3J0IFtjb2x1bW5zXT1cImNvbmZpZy5jb2x1bW5zXCIgW2RhdGFdPVwiZGF0YSgpXCIgKHNvcnRBcHBsaWVkKT1cIm9uU29ydFVwZGF0ZWQoJGV2ZW50KVwiPjwvbGliLWRhdGEtc29ydD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGV4cG9ydC1jb250ZW50PlxuICAgICAgPGxpYi1kYXRhLWV4cG9ydCBbZGF0YV09XCJkYXRhKClcIiAoZXhwb3J0RGF0YUV2ZW50KT1cImhhbmRsZUV4cG9ydCgkZXZlbnQpXCI+XG4gICAgICA8L2xpYi1kYXRhLWV4cG9ydD5cbiAgICA8L2Rpdj5cbiAgPC92ZXJiZW4tZGF0YS12aWV3PlxuXG4gIDxkaXYgKm5nSWY9XCJ2ZHYuaXNUYWJsZVZpZXdcIiBjbGFzcz1cImZsZXggZ2FwLTIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgPGRpdiBjbGFzcz1cIm1lc3NhZ2UtbG9nLWJ1dHRvbi1jb250YWluZXIgZmxleCBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgIDwhLS0gPHZlcmJlbmEtYnV0dG9uXG4gICAgICAgIFtmb250V2VpZ2h0XT1cIidib2xkJ1wiXG4gICAgICAgIFtiZ0NvbG9yXT1cIid2YXIoLS12Ym4tY29sb3ItdGV4dC1tdXRlZCknXCJcbiAgICAgICAgW2JvcmRlclJhZGl1c109XCInNHB4J1wiXG4gICAgICAgIFt0ZXh0Q29sb3JdPVwiJ3ZhcigtLXZibi1jb2xvci1zdXJmYWNlKSdcIlxuICAgICAgICBbcGRdPVwiJzkuNzlweCAzNy4yOHB4J1wiXG4gICAgICAgIFt0ZXh0XT1cIidEZWxldGUnXCJcbiAgICAgID5cbiAgICAgIDwvdmVyYmVuYS1idXR0b24+IC0tPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIGl0ZW1zLWNlbnRlciBnYXAtNVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJwYWdpbmF0b3ItdGV4dFwiPnt7IGNhcmREYXRhKCkubGVuZ3RoIH19IHJlY29yZHMgbG9hZGVkPC9zcGFuPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibG9hZE1vcmUoKVwiIGNsYXNzPVwibG9hZC1tb3JlIHZpZXctbGlua3MgdGV4dC1bdmFyKC0tdmJuLWNvbG9yLWJvcmRlci1mb2N1cyldIHVuZGVybGluZVwiPlxuICAgICAgICBMb2FkIG1vcmVcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -346,10 +346,10 @@ export class TaskFacade {
346
346
  this.taskState.setUpdating(false);
347
347
  }
348
348
  }
349
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TaskFacade, deps: [{ token: i1.TasksService }, { token: i2.TaskState }, { token: i3.UtilService }], target: i0.ɵɵFactoryTarget.Injectable });
350
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TaskFacade });
349
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TaskFacade, deps: [{ token: i1.TasksService }, { token: i2.TaskState }, { token: i3.UtilService }], target: i0.ɵɵFactoryTarget.Injectable });
350
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TaskFacade });
351
351
  }
352
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TaskFacade, decorators: [{
352
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TaskFacade, decorators: [{
353
353
  type: Injectable
354
354
  }], ctorParameters: () => [{ type: i1.TasksService }, { type: i2.TaskState }, { type: i3.UtilService }] });
355
355
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza3MuZmFjYWRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvY29tcG9uZW50cy90YXNrcy90YXNrcy5mYWNhZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBRUwsT0FBTyxFQUNQLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLFNBQVMsR0FDVixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBUyxhQUFhLEVBQXFDLE1BQU0sbUNBQW1DLENBQUM7Ozs7O0FBTTVHLE1BQU0sT0FBTyxVQUFVO0lBS1g7SUFDQTtJQUNBO0lBTkYsYUFBYSxHQUFHLElBQUksT0FBTyxFQUFtQyxDQUFDO0lBQy9ELFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRXZDLFlBQ1UsV0FBeUIsRUFDekIsU0FBb0IsRUFDcEIsV0FBd0I7UUFGeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWM7UUFDekIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUVoQyxtQ0FBbUM7UUFDbkMsSUFBSSxDQUFDLGFBQWE7YUFDZixJQUFJLENBQ0gsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUNsQixvQkFBb0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUNqRCxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUN6QjthQUNBLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEMsQ0FB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LEVBQ0QsT0FBTyxFQUNQLE1BQU0sRUFDTixlQUFlLENBQ2hCLENBQUM7WUFFRixJQUFJLFFBQVEsWUFBWSxhQUFhLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM5QyxPQUFPO1lBQ1QsQ0FBQztZQUVELHlCQUF5QjtZQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1lBQ3pELE1BQU0sSUFBSSxHQUFHLFFBQWdCLENBQUM7WUFDOUIsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQyxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzVDLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsQ0FBQztJQUNILENBQUM7d0dBMWFVLFVBQVU7NEdBQVYsVUFBVTs7NEZBQVYsVUFBVTtrQkFEdEIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgT2JzZXJ2YWJsZSxcbiAgU3ViamVjdCxcbiAgZGVib3VuY2VUaW1lLFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgbGFzdFZhbHVlRnJvbSxcbiAgdGFrZVVudGlsLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFjdG9yLCBFcnJvclJlc3BvbnNlLCBGb3JtLCBRdWVyeVBhcmFtcywgVGFzaywgV29ya2Zsb3cgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgVXRpbFNlcnZpY2UgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBUYXNrc1NlcnZpY2UgfSBmcm9tICcuL3Rhc2tzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFza1N0YXRlIH0gZnJvbSAnLi90YXNrcy5zdGF0ZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUYXNrRmFjYWRlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBzZWFyY2hTdWJqZWN0ID0gbmV3IFN1YmplY3Q8eyB0ZXJtOiBzdHJpbmc7IHVzZXI/OiBzdHJpbmcgfT4oKTtcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0YXNrU2VydmljZTogVGFza3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGFza1N0YXRlOiBUYXNrU3RhdGUsXG4gICAgcHJpdmF0ZSB1dGlsU2VydmljZTogVXRpbFNlcnZpY2VcbiAgKSB7XG4gICAgLy8gU2V0IHVwIGRlYm91bmNlZCBzZWFyY2ggaGFuZGxpbmdcbiAgICB0aGlzLnNlYXJjaFN1YmplY3RcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoMTAwMCksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBhLnRlcm0gPT09IGIudGVybSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoeyB0ZXJtLCB1c2VyIH0pID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVTZWFyY2godGVybSwgdXNlcik7XG4gICAgICB9KTtcblxuICAgIHRoaXMuaXNVcGRhdGluZyQoKS5zdWJzY3JpYmUoKGxvYWRpbmcpID0+IHtcbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGxvYWRpbmcpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLy8gU2VhcmNoIGhhbmRsaW5nXG4gIHNlYXJjaCh0ZXJtOiBzdHJpbmcsIHVzZXI/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFN1YmplY3QubmV4dCh7IHRlcm0sIHVzZXIgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZVNlYXJjaChzZWFyY2hUZXJtOiBzdHJpbmcsIHVzZXI/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnRhc2tTdGF0ZS5zZXRTZWFyY2hUZXJtKHNlYXJjaFRlcm0pO1xuICAgIHRoaXMudGFza1N0YXRlLnJlc2V0UGFnaW5hdGlvbigpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudGFza1N0YXRlLnNldFVwZGF0aW5nKHRydWUpO1xuICAgICAgaWYgKHNlYXJjaFRlcm0udHJpbSgpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZFJlcXVlc3RzV2l0aFBhcmFtKHNlYXJjaFRlcm0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkUmVxdWVzdHModXNlcik7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1NlYXJjaCBmYWlsZWQ6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudGFza1N0YXRlLnNldFVwZGF0aW5nKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBpc1VwZGF0aW5nJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy50YXNrU3RhdGUuaXNVcGRhdGluZyQoKTtcbiAgfVxuXG4gIGdldFJlcXVlc3RzJCgpOiBPYnNlcnZhYmxlPFRhc2tbXT4ge1xuICAgIHJldHVybiB0aGlzLnRhc2tTdGF0ZS5nZXRSZXF1ZXN0cyQoKTtcbiAgfVxuXG4gIGdldFdvcmtmbG93JCgpOiBPYnNlcnZhYmxlPFdvcmtmbG93W10+IHtcbiAgICByZXR1cm4gdGhpcy50YXNrU3RhdGUuZ2V0V29ya2Zsb3dzJCgpO1xuICB9XG5cbiAgZ2V0Rm9ybXMkKCk6IE9ic2VydmFibGU8Rm9ybVtdPiB7XG4gICAgcmV0dXJuIHRoaXMudGFza1N0YXRlLmdldEZvcm1zJCgpO1xuICB9XG5cbiAgZ2V0TmV4dEFjdG9ycyQoKTogT2JzZXJ2YWJsZTxBY3RvcltdPiB7XG4gICAgcmV0dXJuIHRoaXMudGFza1N0YXRlLmdldE5leHRBY3RvcnMkKCk7XG4gIH1cblxuICBnZXRRdWVyeVBhcmFtcyQoKTogT2JzZXJ2YWJsZTxRdWVyeVBhcmFtczxUYXNrPj4ge1xuICAgIHJldHVybiB0aGlzLnRhc2tTdGF0ZS5nZXRRdWVyeVBhcmFtcyQoKTtcbiAgfVxuXG4gIGFkZE5ld1JlcXVlc3QodGFzazogVGFzaykge1xuICAgIHRoaXMudGFza1N0YXRlLmFkZFJlcXVlc3QodGFzayk7XG4gIH1cblxuICBhc3luYyBsb2FkUmVxdWVzdHModXNlcj86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnRhc2tTdGF0ZS5zZXRVcGRhdGluZyh0cnVlKTtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMudGFza1N0YXRlLmdldFF1ZXJ5UGFyYW1zVmFsdWUoKTtcblxuICAgICAgY29uc3QgcmVxdWVzdHMgPSB1c2VyID8gYXdhaXQgdGhpcy50YXNrU2VydmljZS5nZXRQb3NzaWJsZVRhc2tzRm9yVXNlcihcbiAgICAgICAgdXNlcixcbiAgICAgICAgcGFyYW1zLnNraXAsXG4gICAgICAgIHBhcmFtcy5saW1pdCxcbiAgICAgICAgcGFyYW1zLnNvcnRQYXJhbSB8fCAnY3JlYXRlZERhdGUnLFxuICAgICAgICBwYXJhbXMuc29ydE9yZGVyXG4gICAgICApIDogYXdhaXQgdGhpcy50YXNrU2VydmljZS5nZXRUYXNrcyhcbiAgICAgICAgcGFyYW1zLnNraXAsXG4gICAgICAgIHBhcmFtcy5saW1pdCxcbiAgICAgICAgcGFyYW1zLnNvcnRQYXJhbSB8fCAnY3JlYXRlZERhdGUnLFxuICAgICAgICBwYXJhbXMuc29ydE9yZGVyXG4gICAgICApO1xuXG4gICAgICBpZiAocmVxdWVzdHMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd0Vycm9yKHJlcXVlc3RzLkVycm9yTXNnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVxdWVzdHM/LlJlc3VsdCkge1xuICAgICAgICB0aGlzLnRhc2tTdGF0ZS5zZXRSZXF1ZXN0cyhyZXF1ZXN0cy5SZXN1bHQpO1xuICAgICAgICB0aGlzLnRhc2tTdGF0ZS51cGRhdGVRdWVyeVBhcmFtcyh7IHNraXA6IHJlcXVlc3RzLlNraXAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIHJlcXVlc3RzOicsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnRhc2tTdGF0ZS5zZXRVcGRhdGluZyhmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9hZFJlcXVlc3RzV2l0aFBhcmFtKHBhcmFtOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy50YXNrU3RhdGUuc2V0VXBkYXRpbmcodHJ1ZSk7XG4gICAgICBjb25zdCBwYXJhbXMgPSB0aGlzLnRhc2tTdGF0ZS5nZXRRdWVyeVBhcmFtc1ZhbHVlKCk7XG5cbiAgICAgIGNvbnN0IHJlcXVlc3RzID0gYXdhaXQgdGhpcy50YXNrU2VydmljZS5nZXRUYXNrV2l0aFBhcmFtKFxuICAgICAgICBwYXJhbSxcbiAgICAgICAgcGFyYW1zLnNraXAsXG4gICAgICAgIHBhcmFtcy5saW1pdCxcbiAgICAgICAgcGFyYW1zLnNvcnRQYXJhbSB8fCAnQ3JlYXRlZERhdGUnLFxuICAgICAgICBwYXJhbXMuc29ydE9yZGVyXG4gICAgICApO1xuXG4gICAgICBpZiAocmVxdWVzdHMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd0Vycm9yKHJlcXVlc3RzLkVycm9yTXNnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnRhc2tTdGF0ZS5zZXRSZXF1ZXN0cyhyZXF1ZXN0cy5SZXN1bHQpO1xuICAgICAgdGhpcy50YXNrU3RhdGUudXBkYXRlUXVlcnlQYXJhbXMoeyBza2lwOiByZXF1ZXN0cy5Ta2lwIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCByZXF1ZXN0cyB3aXRoIHBhcmFtOicsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnRhc2tTdGF0ZS5zZXRVcGRhdGluZyhmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlUXVlcnlQYXJhbXMocGFyYW1zOiBQYXJ0aWFsPFF1ZXJ5UGFyYW1zPFRhc2s+Pik6IHZvaWQge1xuICAgIHRoaXMudGFza1N0YXRlLnVwZGF0ZVF1ZXJ5UGFyYW1zKHBhcmFtcyk7XG4gICAgLy8gdGhpcy5sb2FkUmVxdWVzdHMoKTtcbiAgfVxuXG4gIGFzeW5jIGFkZFJlcXVlc3QocmVxdWVzdDogUGFydGlhbDxUYXNrPik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnRhc2tTdGF0ZS5zZXRVcGRhdGluZyh0cnVlKTtcbiAgICAgIGNvbnN0IG5ld1JlcXVlc3QgPSB7IC4uLnJlcXVlc3QsIFRhc2tGb3JtczogW10gfSBhcyBUYXNrO1xuICAgICAgLy8gdGhpcy50YXNrU3RhdGUuYWRkUmVxdWVzdChuZXdSZXF1ZXN0KTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnRhc2tTZXJ2aWNlLnNhdmVUYXNrcyhbbmV3UmVxdWVzdF0pO1xuXG4gICAgICBpZiAocmVzcG9uc2UgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd0Vycm9yKHJlc3BvbnNlLkVycm9yTXNnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dTdWNjZXNzKCdUYXNrIGFkZGVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgdGhpcy50YXNrU3RhdGUucmVzZXRQYWdpbmF0aW9uKCk7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRSZXF1ZXN0cygpOyAvLyBSZWxvYWQgdG8gZ2V0IHNlcnZlci1zaWRlIGNoYW5nZXNcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGFkZCByZXF1ZXN0OicsIGVycm9yKTtcbiAgICAgIHRoaXMudGFza1N0YXRlLnJlbW92ZVJlcXVlc3QocmVxdWVzdC5Db2RlISk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy50YXNrU3RhdGUuc2V0VXBkYXRpbmcoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVJlcXVlc3QocmVxdWVzdDogVGFzayk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnRhc2tTdGF0ZS5zZXRVcGRhdGluZyh0cnVlKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50YXNrU2VydmljZS5zYXZlVGFza3MoW3JlcXVlc3RdKTtcblxuICAgICAgaWYgKHJlc3BvbnNlIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dFcnJvcihyZXNwb25zZS5FcnJvck1zZyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93U3VjY2VzcygnVGFzayB1cGRhdGVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgdGhpcy50YXNrU3RhdGUudXBkYXRlUmVxdWVzdChyZXF1ZXN0KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHVwZGF0ZSByZXF1ZXN0OicsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnRhc2tTdGF0ZS5zZXRVcGRhdGluZyhmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlUmVxdWVzdChyZXF1ZXN0SWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnRhc2tTdGF0ZS5zZXRVcGRhdGluZyh0cnVlKTtcbiAgICAgIGF3YWl0IGxhc3RWYWx1ZUZyb20odGhpcy50YXNrU2VydmljZS5kZWxldGVUYXNrcyhbcmVxdWVzdElkXSkpO1xuICAgICAgdGhpcy50YXNrU3RhdGUucmVtb3ZlUmVxdWVzdChyZXF1ZXN0SWQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZGVsZXRlIHJlcXVlc3Q6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudGFza1N0YXRlLnNldFVwZGF0aW5nKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBhcHByb3ZlUmVxdWVzdChyZXF1ZXN0OiBUYXNrKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudGFza1N0YXRlLnNldFVwZGF0aW5nKHRydWUpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnRhc2tTZXJ2aWNlLnByb2Nlc3NUYXNrcyhbcmVxdWVzdF0sIHRydWUpO1xuXG4gICAgICBpZiAocmVzcG9uc2UgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd0Vycm9yKHJlc3BvbnNlLkVycm9yTXNnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gICAgICBjb25zdCBkYXRhID0gKHJlc3BvbnNlIGFzIFRhc2tbXSk/LlswXTtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIHRoaXMudGFza1N0YXRlLnVwZGF0ZVJlcXVlc3QoZGF0YSk7XG4gICAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ1Rhc2sgYXBwcm92ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byB1cGRhdGUgcmVxdWVzdDonLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy50YXNrU3RhdGUuc2V0VXBkYXRpbmcoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxvYWRXb3JrZmxvd3MoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcXVlc3RzID0gYXdhaXQgdGhpcy50YXNrU2VydmljZS5nZXRXb3JrZmxvd3MoKTtcblxuICAgICAgaWYgKHJlcXVlc3RzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dFcnJvcihyZXF1ZXN0cy5FcnJvck1zZyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy50YXNrU3RhdGUuc2V0V29ya2Zsb3dzKHJlcXVlc3RzLlJlc3VsdCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIHJlcXVlc3RzOicsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9hZEZvcm1zV2l0aFBhcmFtKHBhcmFtOiBzdHJpbmcpOiBQcm9taXNlPEZvcm0gfCB2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudGFza1N0YXRlLnNldFVwZGF0aW5nKHRydWUpO1xuXG4gICAgICBjb25zdCByZXF1ZXN0cyA9IGF3YWl0IHRoaXMudGFza1NlcnZpY2UuZ2V0Rm9ybVdpdGhQYXJhbShwYXJhbSk7XG5cbiAgICAgIGlmIChyZXF1ZXN0cyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93RXJyb3IocmVxdWVzdHMuRXJyb3JNc2cpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvcm0gPSByZXF1ZXN0cy5SZXN1bHRbMF07XG4gICAgICBpZiAoZm9ybSkgcmV0dXJuIGZvcm07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIHJlcXVlc3RzIHdpdGggcGFyYW06JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudGFza1N0YXRlLnNldFVwZGF0aW5nKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyByZUFzc2lnbihcbiAgICByZXF1ZXN0OiBUYXNrLFxuICAgIGNvbW1lbnQ6IHN0cmluZyxcbiAgICB0b1VzZXI/OiBzdHJpbmcsXG4gICAgZnJvbVVzZXI/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudGFza1N0YXRlLnNldFVwZGF0aW5nKHRydWUpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnRhc2tTZXJ2aWNlLnJlQXNzaWduKFxuICAgICAgICB7XG4gICAgICAgICAgLi4ucmVxdWVzdCxcbiAgICAgICAgICBGdWxsU3RhZ2VzOiBbXSxcbiAgICAgICAgICBDdXJyZW50QWN0b3JzOiByZXF1ZXN0LkN1cnJlbnRBY3RvcnMubWFwKChjKSA9PiAoe1xuICAgICAgICAgICAgLi4uYyxcbiAgICAgICAgICAgIEFjdG9yVGFnczogW10sXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9LFxuICAgICAgICBjb21tZW50LFxuICAgICAgICB0b1VzZXIsXG4gICAgICAgIGZyb21Vc2VyXG4gICAgICApO1xuXG4gICAgICBpZiAocmVzcG9uc2UgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd0Vycm9yKHJlc3BvbnNlLkVycm9yTXNnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dTdWNjZXNzKCdUYXNrIHJlLWFzc2lnbmVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlIGFzIFRhc2s7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICB0aGlzLnRhc2tTdGF0ZS51cGRhdGVSZXF1ZXN0KGRhdGEpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gdXBkYXRlIHJlcXVlc3Q6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudGFza1N0YXRlLnNldFVwZGF0aW5nKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsb2FkTmV4dEFjdG9ycyhcbiAgICB0YXNrQ29kZTogc3RyaW5nLFxuICAgIHN0YWdlQ29kZT86IHN0cmluZyxcbiAgICBmb3JDdXJyZW50U3RhZ2U/OiBib29sZWFuXG4gICk6IFByb21pc2U8QWN0b3JbXT4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnRhc2tTdGF0ZS5zZXRVcGRhdGluZyh0cnVlKTtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMudGFza1N0YXRlLmdldFF1ZXJ5UGFyYW1zVmFsdWUoKTtcblxuICAgICAgY29uc3QgcmVxdWVzdHMgPSBhd2FpdCB0aGlzLnRhc2tTZXJ2aWNlLmdldE5leHRBY3RvcnMoXG4gICAgICAgIHRhc2tDb2RlLFxuICAgICAgICBzdGFnZUNvZGUsXG4gICAgICAgIGZvckN1cnJlbnRTdGFnZVxuICAgICAgKTtcblxuICAgICAgaWYgKHJlcXVlc3RzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dFcnJvcihyZXF1ZXN0cy5FcnJvck1zZyk7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cblxuICAgICAgdGhpcy50YXNrU3RhdGUuc2V0TmV4dEFjdG9ycyhyZXF1ZXN0cyk7XG5cbiAgICAgIHJldHVybiByZXF1ZXN0cztcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgcmVxdWVzdHMgd2l0aCBwYXJhbTonLCBlcnJvcik7XG4gICAgICByZXR1cm4gW107XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudGFza1N0YXRlLnNldFVwZGF0aW5nKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICAvLyBMb2FkIG1vcmUgaGFuZGxpbmdcbiAgYXN5bmMgbG9hZE1vcmUocXVldWU6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnRhc2tTdGF0ZS5zZXRVcGRhdGluZyh0cnVlKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRQYXJhbXMgPSB0aGlzLnRhc2tTdGF0ZS5nZXRRdWVyeVBhcmFtc1ZhbHVlKCk7XG4gICAgICBjb25zdCBzZWFyY2hUZXJtID0gdGhpcy50YXNrU3RhdGUuZ2V0U2VhcmNoVGVybVZhbHVlKCk7XG5cbiAgICAgIC8vIFRoZSBmaXJzdCBwYWdlIGlzIGFscmVhZHkgbG9hZGVkIGF0IHNraXA9MCB3aXRob3V0IGFkdmFuY2luZyB0aGVcbiAgICAgIC8vIHBvaW50ZXIsIHNvIGZldGNoIHRoZSAqbmV4dCogcGFnZSBzdGFydGluZyBhdCBuZXdTa2lwLlxuICAgICAgY29uc3QgbmV3U2tpcCA9IGN1cnJlbnRQYXJhbXMuc2tpcCArIGN1cnJlbnRQYXJhbXMubGltaXQ7XG5cbiAgICAgIC8vIExvYWQgYW5kIGFwcGVuZCBkYXRhLCBob25vdXJpbmcgYW55IGFjdGl2ZSBzZWFyY2ggdGVybVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBzZWFyY2hUZXJtXG4gICAgICAgID8gYXdhaXQgdGhpcy50YXNrU2VydmljZS5nZXRUYXNrV2l0aFBhcmFtKFxuICAgICAgICAgICAgc2VhcmNoVGVybSxcbiAgICAgICAgICAgIG5ld1NraXAsXG4gICAgICAgICAgICBjdXJyZW50UGFyYW1zLmxpbWl0LFxuICAgICAgICAgICAgY3VycmVudFBhcmFtcy5zb3J0UGFyYW0gfHwgJ2NyZWF0ZWREYXRlJyxcbiAgICAgICAgICAgIGN1cnJlbnRQYXJhbXMuc29ydE9yZGVyXG4gICAgICAgICAgKVxuICAgICAgICA6IGF3YWl0IHRoaXMudGFza1NlcnZpY2UuZ2V0VGFza3MoXG4gICAgICAgICAgICBuZXdTa2lwLFxuICAgICAgICAgICAgY3VycmVudFBhcmFtcy5saW1pdCxcbiAgICAgICAgICAgIGN1cnJlbnRQYXJhbXMuc29ydFBhcmFtIHx8ICdjcmVhdGVkRGF0ZScsXG4gICAgICAgICAgICBjdXJyZW50UGFyYW1zLnNvcnRPcmRlclxuICAgICAgICAgICk7XG5cbiAgICAgIGlmIChyZXNwb25zZSBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93RXJyb3IocmVzcG9uc2UuRXJyb3JNc2cpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMudGFza1N0YXRlLmFwcGVuZFJlcXVlc3RzKHJlc3BvbnNlLlJlc3VsdCk7XG4gICAgICB0aGlzLnRhc2tTdGF0ZS51cGRhdGVRdWVyeVBhcmFtcyh7XG4gICAgICAgIHNraXA6IG5ld1NraXAsXG4gICAgICAgIGxpbWl0OiBjdXJyZW50UGFyYW1zLmxpbWl0LFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0xvYWQgbW9yZSBmYWlsZWQ6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudGFza1N0YXRlLnNldFVwZGF0aW5nKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBwaWNrVGFzayhcbiAgICByZXF1ZXN0OiBUYXNrLFxuICAgIGNvbW1lbnQ6IHN0cmluZyxcbiAgICB0b1VzZXI/OiBzdHJpbmcsXG4gICAgdGFyZ2V0U3RhZ2VDb2RlPzogc3RyaW5nXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnRhc2tTdGF0ZS5zZXRVcGRhdGluZyh0cnVlKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50YXNrU2VydmljZS5waWNrVGFzayhcbiAgICAgICAge1xuICAgICAgICAgIC4uLnJlcXVlc3QsXG4gICAgICAgICAgRnVsbFN0YWdlczogW10sXG4gICAgICAgICAgQ3VycmVudEFjdG9yczogcmVxdWVzdC5DdXJyZW50QWN0b3JzLm1hcCgoYykgPT4gKHtcbiAgICAgICAgICAgIC4uLmMsXG4gICAgICAgICAgICBBY3RvclRhZ3M6IFtdLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSxcbiAgICAgICAgY29tbWVudCxcbiAgICAgICAgdG9Vc2VyLFxuICAgICAgICB0YXJnZXRTdGFnZUNvZGUsXG4gICAgICApO1xuXG4gICAgICBpZiAocmVzcG9uc2UgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd0Vycm9yKHJlc3BvbnNlLkVycm9yTXNnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dTdWNjZXNzKCdUYXNrIHBpY2tlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZSBhcyBUYXNrO1xuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgdGhpcy50YXNrU3RhdGUudXBkYXRlUmVxdWVzdChkYXRhKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHBpY2sgdGFzaycsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnRhc2tTdGF0ZS5zZXRVcGRhdGluZyhmYWxzZSk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -131,12 +131,12 @@ export class TasksFormComponent {
131
131
  else
132
132
  return this.form.invalid;
133
133
  }
134
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TasksFormComponent, deps: [{ token: i1.FormBuilder }, { token: i2.TaskFacade }], target: i0.ɵɵFactoryTarget.Component });
135
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: TasksFormComponent, selector: "tasks-form", inputs: { currentData: "currentData" }, outputs: { onTaskFormSave: "onTaskFormSave", onSave: "onSave" }, ngImport: i0, template: "@if (taskFormView && taskForm) {\n<div\n *ngIf=\"taskForm.Entities[active]\"\n class=\"flex flex-wrap bg-[#9A9FBF80] rounded-xl px-3 py-2 w-full relative gap-6\"\n>\n <app-form-timer></app-form-timer>\n <div *ngFor=\"let group of taskForm.Entities; let index = index\">\n <p\n (click)=\"active = index\"\n [ngClass]=\"{\n 'bg-[#fff] text-primary rounded-lg shadow-lg': active === index\n }\"\n class=\"px-6 py-2 cursor-pointer\"\n >\n {{ group.Name }}group\n </p>\n </div>\n</div>\n\n<div *ngIf=\"taskForm.Entities[active]; else emptyState\" class=\"mt-4\">\n <form-control\n [dataType]=\"dataType\"\n [formProperties]=\"taskForm.Entities[active].Properties\"\n ></form-control>\n\n <div class=\"flex gap-3 justify-end\">\n <verbena-button\n (click)=\"areRequiredPropertiesFilled()\"\n text=\"CHECK\"\n styleType=\"ylw-outline\"\n class=\"ml-auto\"\n ></verbena-button>\n\n <verbena-button\n (click)=\"taskFormView = false\"\n text=\"Close task form\"\n styleType=\"ylw-outline\"\n class=\"ml-auto\"\n ></verbena-button>\n\n <verbena-button\n class=\"verben-primary-button\"\n (click)=\"sendTaskForm()\"\n [disable]=\"!areRequiredPropertiesFilled()\"\n text=\"Save\"\n ></verbena-button>\n </div>\n</div>\n\n<!-- Empty state template -->\n<ng-template #emptyState>\n <p class=\"mt-4 p-4 text-gray-600 text-center\">\n No entries available for the selected form group.\n </p>\n</ng-template>\n\n} @else {\n<form\n [formGroup]=\"form\"\n class=\"flex flex-col px-3 pb-3 rounded-xl h-full w-full relative space-y-4\"\n (ngSubmit)=\"handleSubmit()\"\n>\n <verbena-input\n name=\"Name\"\n label=\"Name\"\n formControlName=\"Name\"\n placeHolder=\"Enter Name\"\n />\n <verbena-input\n name=\"Description\"\n label=\"Description\"\n formControlName=\"Description\"\n placeHolder=\"Enter Description\"\n />\n\n <div class=\"space-y-1\">\n <label for=\"workflow\">Workflow</label>\n\n <verben-drop-down\n label=\"Workflow\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"false\"\n placeholder=\"Select\"\n [options]=\"workflows\"\n optionLabel=\"Name\"\n optionValue=\"Code\"\n id=\"workflow\"\n formControlName=\"WorkflowCode\"\n class=\"form-control\"\n >\n </verben-drop-down>\n </div>\n\n <div class=\"space-y-1\">\n <label for=\"status\">Status</label>\n\n <verben-drop-down\n label=\"Status\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"false\"\n [showClear]=\"true\"\n placeholder=\"Null\"\n [(options)]=\"statuses\"\n id=\"status\"\n formControlName=\"Status\"\n class=\"form-control\"\n >\n </verben-drop-down>\n </div>\n\n <!-- buttons -->\n <div class=\"flex justify-between gap-4 my-2\">\n <verbena-button\n width=\"114px\"\n height=\"39px\"\n text=\"Delete\"\n bgColor=\"#999999\"\n textColor=\"#404040\"\n borderRadius=\"10px\"\n [disable]=\"disableProcessing()\"\n ></verbena-button>\n <verbena-button\n [disable]=\"!taskForm || loadingTaskForm\"\n (click)=\"taskFormView = true\"\n [text]=\"loadingTaskForm ? 'Checking for form' : 'Fill task form'\"\n styleType=\"ylw-outline\"\n class=\"ml-auto\"\n ></verbena-button>\n <verbena-button\n type=\"submit\"\n text=\"Save\"\n bgColor=\"#FFE681\"\n textColor=\"#404040\"\n borderRadius=\"10px\"\n pd=\"10px 20px\"\n width=\"114px\"\n height=\"39px\"\n [disable]=\"disableProcessing()\"\n ></verbena-button>\n </div>\n</form>\n}\n", dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.VerbenaInputComponent, selector: "verbena-input", inputs: ["label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "fontSize", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "component", type: i4.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "useIcon", "svgPosition", "iconPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "svgSize", "weight", "variant", "styleType", "svg", "svgWidth", "svgHeight", "iconColor", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }, { kind: "component", type: i4.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i5.FormControlComponent, selector: "form-control", inputs: ["dataType", "value", "boolInputType", "formProperties", "disabled"] }, { kind: "component", type: i6.FormTimerComponent, selector: "app-form-timer", inputs: ["expiryDate"] }] });
134
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TasksFormComponent, deps: [{ token: i1.FormBuilder }, { token: i2.TaskFacade }], target: i0.ɵɵFactoryTarget.Component });
135
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TasksFormComponent, selector: "tasks-form", inputs: { currentData: "currentData" }, outputs: { onTaskFormSave: "onTaskFormSave", onSave: "onSave" }, ngImport: i0, template: "@if (taskFormView && taskForm) {\n<div\n *ngIf=\"taskForm.Entities[active]\"\n class=\"flex flex-wrap bg-[#9A9FBF80] rounded-xl px-3 py-2 w-full relative gap-6\"\n>\n <app-form-timer></app-form-timer>\n <div *ngFor=\"let group of taskForm.Entities; let index = index\">\n <p\n (click)=\"active = index\"\n [ngClass]=\"{\n 'bg-[var(--vbn-color-surface)] text-primary rounded-lg shadow-lg': active === index\n }\"\n class=\"px-6 py-2 cursor-pointer\"\n >\n {{ group.Name }}group\n </p>\n </div>\n</div>\n\n<div *ngIf=\"taskForm.Entities[active]; else emptyState\" class=\"mt-4\">\n <form-control\n [dataType]=\"dataType\"\n [formProperties]=\"taskForm.Entities[active].Properties\"\n ></form-control>\n\n <div class=\"flex gap-3 justify-end\">\n <verbena-button\n (click)=\"areRequiredPropertiesFilled()\"\n text=\"CHECK\"\n styleType=\"ylw-outline\"\n class=\"ml-auto\"\n ></verbena-button>\n\n <verbena-button\n (click)=\"taskFormView = false\"\n text=\"Close task form\"\n styleType=\"ylw-outline\"\n class=\"ml-auto\"\n ></verbena-button>\n\n <verbena-button\n class=\"verben-primary-button\"\n (click)=\"sendTaskForm()\"\n [disable]=\"!areRequiredPropertiesFilled()\"\n text=\"Save\"\n ></verbena-button>\n </div>\n</div>\n\n<!-- Empty state template -->\n<ng-template #emptyState>\n <p class=\"mt-4 p-4 text-gray-600 text-center\">\n No entries available for the selected form group.\n </p>\n</ng-template>\n\n} @else {\n<form\n [formGroup]=\"form\"\n class=\"flex flex-col px-3 pb-3 rounded-xl h-full w-full relative space-y-4\"\n (ngSubmit)=\"handleSubmit()\"\n>\n <verbena-input\n name=\"Name\"\n label=\"Name\"\n formControlName=\"Name\"\n placeHolder=\"Enter Name\"\n />\n <verbena-input\n name=\"Description\"\n label=\"Description\"\n formControlName=\"Description\"\n placeHolder=\"Enter Description\"\n />\n\n <div class=\"space-y-1\">\n <label for=\"workflow\">Workflow</label>\n\n <verben-drop-down\n label=\"Workflow\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"false\"\n placeholder=\"Select\"\n [options]=\"workflows\"\n optionLabel=\"Name\"\n optionValue=\"Code\"\n id=\"workflow\"\n formControlName=\"WorkflowCode\"\n class=\"form-control\"\n >\n </verben-drop-down>\n </div>\n\n <div class=\"space-y-1\">\n <label for=\"status\">Status</label>\n\n <verben-drop-down\n label=\"Status\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"false\"\n [showClear]=\"true\"\n placeholder=\"Null\"\n [(options)]=\"statuses\"\n id=\"status\"\n formControlName=\"Status\"\n class=\"form-control\"\n >\n </verben-drop-down>\n </div>\n\n <!-- buttons -->\n <div class=\"flex justify-between gap-4 my-2\">\n <verbena-button\n width=\"114px\"\n height=\"39px\"\n text=\"Delete\"\n bgColor=\"var(--vbn-color-text-muted)\"\n textColor=\"var(--vbn-color-on-primary)\"\n borderRadius=\"10px\"\n [disable]=\"disableProcessing()\"\n ></verbena-button>\n <verbena-button\n [disable]=\"!taskForm || loadingTaskForm\"\n (click)=\"taskFormView = true\"\n [text]=\"loadingTaskForm ? 'Checking for form' : 'Fill task form'\"\n styleType=\"ylw-outline\"\n class=\"ml-auto\"\n ></verbena-button>\n <verbena-button\n type=\"submit\"\n text=\"Save\"\n bgColor=\"var(--vbn-color-primary)\"\n textColor=\"var(--vbn-color-on-primary)\"\n borderRadius=\"10px\"\n pd=\"10px 20px\"\n width=\"114px\"\n height=\"39px\"\n [disable]=\"disableProcessing()\"\n ></verbena-button>\n </div>\n</form>\n}\n", dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.VerbenaInputComponent, selector: "verbena-input", inputs: ["disabled", "label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "fontSize", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "component", type: i4.VerbenaButtonComponent, selector: "verbena-button", inputs: ["type", "text", "icon", "useIcon", "svgPosition", "iconPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "svgSize", "weight", "variant", "styleType", "svg", "svgWidth", "svgHeight", "iconColor", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }, { kind: "component", type: i4.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "overlayWidth", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "refPageSize", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i5.FormControlComponent, selector: "form-control", inputs: ["dataType", "value", "boolInputType", "formProperties", "disabled"] }, { kind: "component", type: i6.FormTimerComponent, selector: "app-form-timer", inputs: ["expiryDate"] }] });
136
136
  }
137
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TasksFormComponent, decorators: [{
137
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TasksFormComponent, decorators: [{
138
138
  type: Component,
139
- args: [{ selector: 'tasks-form', template: "@if (taskFormView && taskForm) {\n<div\n *ngIf=\"taskForm.Entities[active]\"\n class=\"flex flex-wrap bg-[#9A9FBF80] rounded-xl px-3 py-2 w-full relative gap-6\"\n>\n <app-form-timer></app-form-timer>\n <div *ngFor=\"let group of taskForm.Entities; let index = index\">\n <p\n (click)=\"active = index\"\n [ngClass]=\"{\n 'bg-[#fff] text-primary rounded-lg shadow-lg': active === index\n }\"\n class=\"px-6 py-2 cursor-pointer\"\n >\n {{ group.Name }}group\n </p>\n </div>\n</div>\n\n<div *ngIf=\"taskForm.Entities[active]; else emptyState\" class=\"mt-4\">\n <form-control\n [dataType]=\"dataType\"\n [formProperties]=\"taskForm.Entities[active].Properties\"\n ></form-control>\n\n <div class=\"flex gap-3 justify-end\">\n <verbena-button\n (click)=\"areRequiredPropertiesFilled()\"\n text=\"CHECK\"\n styleType=\"ylw-outline\"\n class=\"ml-auto\"\n ></verbena-button>\n\n <verbena-button\n (click)=\"taskFormView = false\"\n text=\"Close task form\"\n styleType=\"ylw-outline\"\n class=\"ml-auto\"\n ></verbena-button>\n\n <verbena-button\n class=\"verben-primary-button\"\n (click)=\"sendTaskForm()\"\n [disable]=\"!areRequiredPropertiesFilled()\"\n text=\"Save\"\n ></verbena-button>\n </div>\n</div>\n\n<!-- Empty state template -->\n<ng-template #emptyState>\n <p class=\"mt-4 p-4 text-gray-600 text-center\">\n No entries available for the selected form group.\n </p>\n</ng-template>\n\n} @else {\n<form\n [formGroup]=\"form\"\n class=\"flex flex-col px-3 pb-3 rounded-xl h-full w-full relative space-y-4\"\n (ngSubmit)=\"handleSubmit()\"\n>\n <verbena-input\n name=\"Name\"\n label=\"Name\"\n formControlName=\"Name\"\n placeHolder=\"Enter Name\"\n />\n <verbena-input\n name=\"Description\"\n label=\"Description\"\n formControlName=\"Description\"\n placeHolder=\"Enter Description\"\n />\n\n <div class=\"space-y-1\">\n <label for=\"workflow\">Workflow</label>\n\n <verben-drop-down\n label=\"Workflow\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"false\"\n placeholder=\"Select\"\n [options]=\"workflows\"\n optionLabel=\"Name\"\n optionValue=\"Code\"\n id=\"workflow\"\n formControlName=\"WorkflowCode\"\n class=\"form-control\"\n >\n </verben-drop-down>\n </div>\n\n <div class=\"space-y-1\">\n <label for=\"status\">Status</label>\n\n <verben-drop-down\n label=\"Status\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"false\"\n [showClear]=\"true\"\n placeholder=\"Null\"\n [(options)]=\"statuses\"\n id=\"status\"\n formControlName=\"Status\"\n class=\"form-control\"\n >\n </verben-drop-down>\n </div>\n\n <!-- buttons -->\n <div class=\"flex justify-between gap-4 my-2\">\n <verbena-button\n width=\"114px\"\n height=\"39px\"\n text=\"Delete\"\n bgColor=\"#999999\"\n textColor=\"#404040\"\n borderRadius=\"10px\"\n [disable]=\"disableProcessing()\"\n ></verbena-button>\n <verbena-button\n [disable]=\"!taskForm || loadingTaskForm\"\n (click)=\"taskFormView = true\"\n [text]=\"loadingTaskForm ? 'Checking for form' : 'Fill task form'\"\n styleType=\"ylw-outline\"\n class=\"ml-auto\"\n ></verbena-button>\n <verbena-button\n type=\"submit\"\n text=\"Save\"\n bgColor=\"#FFE681\"\n textColor=\"#404040\"\n borderRadius=\"10px\"\n pd=\"10px 20px\"\n width=\"114px\"\n height=\"39px\"\n [disable]=\"disableProcessing()\"\n ></verbena-button>\n </div>\n</form>\n}\n" }]
139
+ args: [{ selector: 'tasks-form', template: "@if (taskFormView && taskForm) {\n<div\n *ngIf=\"taskForm.Entities[active]\"\n class=\"flex flex-wrap bg-[#9A9FBF80] rounded-xl px-3 py-2 w-full relative gap-6\"\n>\n <app-form-timer></app-form-timer>\n <div *ngFor=\"let group of taskForm.Entities; let index = index\">\n <p\n (click)=\"active = index\"\n [ngClass]=\"{\n 'bg-[var(--vbn-color-surface)] text-primary rounded-lg shadow-lg': active === index\n }\"\n class=\"px-6 py-2 cursor-pointer\"\n >\n {{ group.Name }}group\n </p>\n </div>\n</div>\n\n<div *ngIf=\"taskForm.Entities[active]; else emptyState\" class=\"mt-4\">\n <form-control\n [dataType]=\"dataType\"\n [formProperties]=\"taskForm.Entities[active].Properties\"\n ></form-control>\n\n <div class=\"flex gap-3 justify-end\">\n <verbena-button\n (click)=\"areRequiredPropertiesFilled()\"\n text=\"CHECK\"\n styleType=\"ylw-outline\"\n class=\"ml-auto\"\n ></verbena-button>\n\n <verbena-button\n (click)=\"taskFormView = false\"\n text=\"Close task form\"\n styleType=\"ylw-outline\"\n class=\"ml-auto\"\n ></verbena-button>\n\n <verbena-button\n class=\"verben-primary-button\"\n (click)=\"sendTaskForm()\"\n [disable]=\"!areRequiredPropertiesFilled()\"\n text=\"Save\"\n ></verbena-button>\n </div>\n</div>\n\n<!-- Empty state template -->\n<ng-template #emptyState>\n <p class=\"mt-4 p-4 text-gray-600 text-center\">\n No entries available for the selected form group.\n </p>\n</ng-template>\n\n} @else {\n<form\n [formGroup]=\"form\"\n class=\"flex flex-col px-3 pb-3 rounded-xl h-full w-full relative space-y-4\"\n (ngSubmit)=\"handleSubmit()\"\n>\n <verbena-input\n name=\"Name\"\n label=\"Name\"\n formControlName=\"Name\"\n placeHolder=\"Enter Name\"\n />\n <verbena-input\n name=\"Description\"\n label=\"Description\"\n formControlName=\"Description\"\n placeHolder=\"Enter Description\"\n />\n\n <div class=\"space-y-1\">\n <label for=\"workflow\">Workflow</label>\n\n <verben-drop-down\n label=\"Workflow\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"false\"\n placeholder=\"Select\"\n [options]=\"workflows\"\n optionLabel=\"Name\"\n optionValue=\"Code\"\n id=\"workflow\"\n formControlName=\"WorkflowCode\"\n class=\"form-control\"\n >\n </verben-drop-down>\n </div>\n\n <div class=\"space-y-1\">\n <label for=\"status\">Status</label>\n\n <verben-drop-down\n label=\"Status\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"false\"\n [showClear]=\"true\"\n placeholder=\"Null\"\n [(options)]=\"statuses\"\n id=\"status\"\n formControlName=\"Status\"\n class=\"form-control\"\n >\n </verben-drop-down>\n </div>\n\n <!-- buttons -->\n <div class=\"flex justify-between gap-4 my-2\">\n <verbena-button\n width=\"114px\"\n height=\"39px\"\n text=\"Delete\"\n bgColor=\"var(--vbn-color-text-muted)\"\n textColor=\"var(--vbn-color-on-primary)\"\n borderRadius=\"10px\"\n [disable]=\"disableProcessing()\"\n ></verbena-button>\n <verbena-button\n [disable]=\"!taskForm || loadingTaskForm\"\n (click)=\"taskFormView = true\"\n [text]=\"loadingTaskForm ? 'Checking for form' : 'Fill task form'\"\n styleType=\"ylw-outline\"\n class=\"ml-auto\"\n ></verbena-button>\n <verbena-button\n type=\"submit\"\n text=\"Save\"\n bgColor=\"var(--vbn-color-primary)\"\n textColor=\"var(--vbn-color-on-primary)\"\n borderRadius=\"10px\"\n pd=\"10px 20px\"\n width=\"114px\"\n height=\"39px\"\n [disable]=\"disableProcessing()\"\n ></verbena-button>\n </div>\n</form>\n}\n" }]
140
140
  }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.TaskFacade }], propDecorators: { currentData: [{
141
141
  type: Input
142
142
  }], onTaskFormSave: [{
@@ -144,4 +144,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
144
144
  }], onSave: [{
145
145
  type: Output
146
146
  }] } });
147
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza3MuZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3Rhc2tzL3Rhc2tzLmZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvY29tcG9uZW50cy90YXNrcy90YXNrcy5mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHdkUsT0FBTyxFQUEwQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFJM0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOzs7Ozs7OztBQU03RCxNQUFNLE9BQU8sa0JBQWtCO0lBcUNUO0lBQXlCO0lBcEM3QyxJQUNJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUNELElBQUksV0FBVyxDQUFDLEtBQXNCO1FBQ3BDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO2dCQUNuQixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRTtnQkFDM0IsV0FBVyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUU7Z0JBQ3pDLFlBQVks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SUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxQyxDQUFDO0lBQ0gsQ0FBQztJQUVELDJCQUEyQjtRQUN6QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQztRQUV6RSxxREFBcUQ7UUFDckQsK0NBQStDO1FBQy9DLDJCQUEyQjtRQUMzQixhQUFhO1FBQ2IsOEJBQThCO1FBQzlCLHVDQUF1QztRQUN2QyxtQ0FBbUM7UUFDbkMsK0JBQStCO1FBQy9CLE9BQU87UUFDUCxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDMUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUUsS0FBSyxDQUM1RCxDQUFDO1FBRUYsSUFDRSxnQkFBZ0IsRUFBRSxJQUFJO1lBQ3JCLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNLEtBQUssQ0FBQyxFQUN6RCxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDOztZQUFNLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDbEMsQ0FBQzt3R0F4SVUsa0JBQWtCOzRGQUFsQixrQkFBa0IsMkpDZC9CLDRwSEFnSkE7OzRGRGxJYSxrQkFBa0I7a0JBSjlCLFNBQVM7K0JBQ0UsWUFBWTt5R0FLbEIsV0FBVztzQkFEZCxLQUFLO2dCQXlCSSxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDYXJkRGF0YSB9IGZyb20gJ3ZlcmJlbi1uZy11aSc7XG5pbXBvcnQgeyBUYXNrIH0gZnJvbSAndmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvbW9kZWxzJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdGF0dXMgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgV29ya2Zsb3cgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgVGFza0ZhY2FkZSB9IGZyb20gJy4vdGFza3MuZmFjYWRlJztcbmltcG9ydCB7IEZvcm0gfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgRGF0YVR5cGUgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0YXNrcy1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Rhc2tzLmZvcm0uY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBUYXNrc0Zvcm1Db21wb25lbnQge1xuICBASW5wdXQoKVxuICBnZXQgY3VycmVudERhdGEoKTogQ2FyZERhdGEgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudERhdGE7XG4gIH1cbiAgc2V0IGN1cnJlbnREYXRhKHZhbHVlOiBDYXJkRGF0YSB8IG51bGwpIHtcbiAgICB0aGlzLl9jdXJyZW50RGF0YSA9IHZhbHVlO1xuICAgIGNvbnNvbGUubG9nKHZhbHVlPy5kYXRhKTtcbiAgICBpZiAodmFsdWU/LmRhdGEpIHtcbiAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgTmFtZTogdmFsdWUuZGF0YS5OYW1lIHx8ICcnLFxuICAgICAgICBEZXNjcmlwdGlvbjogdmFsdWUuZGF0YS5EZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgICAgV29ya2Zsb3dDb2RlOiB2YWx1ZS5kYXRhLldvcmtmbG93Q29kZSB8fCAnJyxcbiAgICAgICAgU3RhdHVzOiB2YWx1ZS5kYXRhLlN0YXR1cyB8fCAnJyxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvcm0ucmVzZXQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jdXJyZW50RGF0YTogQ2FyZERhdGEgfCBudWxsID0gbnVsbDtcblxuICB0YXNrRm9ybTogRm9ybSB8IG51bGwgPSBudWxsO1xuICBhY3RpdmU6IG51bWJlciA9IDA7XG4gIGRhdGFUeXBlOiBEYXRhVHlwZSA9IERhdGFUeXBlLlRleHQ7XG5cbiAgQE91dHB1dCgpIG9uVGFza0Zvcm1TYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtPigpO1xuICBAT3V0cHV0KCkgb25TYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxQYXJ0aWFsPFRhc2s+PigpO1xuXG4gIGZvcm06IEZvcm1Hcm91cDtcbiAgc3RhdHVzZXMgPSBPYmplY3QudmFsdWVzKFN0YXR1cyk7XG4gIHdvcmtmbG93czogV29ya2Zsb3dbXSA9IFtdO1xuICBsb2FkaW5nVGFza0Zvcm06IGJvb2xlYW4gPSBmYWxzZTtcbiAgdGFza0Zvcm1WaWV3OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gYWN0aXZlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsIHByaXZhdGUgdGFza0ZhY2FkZTogVGFza0ZhY2FkZSkge1xuICAgIHRoaXMudGFza0ZhY2FkZS5nZXRXb3JrZmxvdyQoKS5zdWJzY3JpYmUoKHdvcmtmbG93cykgPT4ge1xuICAgICAgdGhpcy53b3JrZmxvd3MgPSB3b3JrZmxvd3M7XG4gICAgfSk7XG4gICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBOYW1lOiBbJycsIHsgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWRdIH1dLFxuICAgICAgRGVzY3JpcHRpb246IFsnJywgeyB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0gfV0sXG4gICAgICBXb3JrZmxvd0NvZGU6IFsnJywgeyB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0gfV0sXG4gICAgICBTdGF0dXM6IFsnJywgeyB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0gfV0sXG4gICAgICBUYXNrRm9ybXM6IFtdLFxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudGFza0ZhY2FkZS5sb2FkV29ya2Zsb3dzKCkudGhlbigoKSA9PiB7fSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEhhbmRsZSBlcnJvclxuICAgIH1cblxuICAgIHRoaXMuZm9ybS5nZXQoJ1dvcmtmbG93Q29kZScpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkV29ya2Zsb3cgPSB0aGlzLndvcmtmbG93cy5maW5kKFxuICAgICAgICAgICh7IENvZGUgfSkgPT4gQ29kZSA9PT0gdmFsdWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkV29ya2Zsb3c/LkZvcm0pIHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmdUYXNrRm9ybSA9IHRydWU7XG4gICAgICAgICAgdGhpcy50YXNrRmFjYWRlXG4gICAgICAgICAgICAubG9hZEZvcm1zV2l0aFBhcmFtKHNlbGVjdGVkV29ya2Zsb3cuRm9ybSlcbiAgICAgICAgICAgIC50aGVuKChmb3JtKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChmb3JtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50YXNrRm9ybSA9IGZvcm07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZ1Rhc2tGb3JtID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnRhc2tGb3JtID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlU3VibWl0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZvcm0udmFsaWQpIHtcbiAgICAgIC8vIEVtaXQgc2F2ZSBldmVudCB3aXRoIGZvcm0gdmFsdWVcbiAgICAgIGNvbnNvbGUubG9nKCdGb3JtIHNhdmVkOicsIHRoaXMuZm9ybS52YWx1ZSk7XG4gICAgICBpZiAoXG4gICAgICAgICF0aGlzLnRhc2tGb3JtIHx8XG4gICAgICAgICh0aGlzLmZvcm0uZ2V0KCdUYXNrRm9ybXMnKT8udmFsdWUgYXMgRm9ybVtdKT8ubGVuZ3RoID4gMFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMub25TYXZlLmVtaXQodGhpcy5mb3JtLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkRlbGV0ZSgpOiB2b2lkIHtcbiAgICAvLyBFbWl0IGRlbGV0ZSBldmVudFxuICAgIGNvbnNvbGUubG9nKCdEZWxldGUgcmVxdWVzdGVkJyk7XG4gIH1cblxuICBzZW5kVGFza0Zvcm0oKSB7XG4gICAgaWYgKHRoaXMudGFza0Zvcm0pIHtcbiAgICAgIHRoaXMuZm9ybVxuICAgICAgICAuZ2V0KCdUYXNrRm9ybXMnKVxuICAgICAgICA/LnNldFZhbHVlKFt7IC4uLnRoaXMudGFza0Zvcm0sIFN3aW1sYW5lOiAnJyB9XSk7XG4gICAgICB0aGlzLnRhc2tGb3JtVmlldyA9IGZhbHNlO1xuICAgICAgdGhpcy5vblRhc2tGb3JtU2F2ZS5lbWl0KHRoaXMudGFza0Zvcm0pO1xuICAgIH1cbiAgfVxuXG4gIGFyZVJlcXVpcmVkUHJvcGVydGllc0ZpbGxlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy50YXNrRm9ybT8uRW50aXRpZXNbdGhpcy5hY3RpdmVdLlByb3BlcnRpZXMgfHwgW107XG5cbiAgICAvLyBDaGVjayBpZiBhbGwgcmVxdWlyZWQgcHJvcGVydGllcyBoYXZlIHZhbGlkIHZhbHVlc1xuICAgIC8vIHJldHVybiBwcm9wZXJ0aWVzLmV2ZXJ5KChwcm9wZXJ0eTogYW55KSA9PiB7XG4gICAgLy8gICBjb25zb2xlLmxvZyhwcm9wZXJ0eSk7XG4gICAgLy8gICByZXR1cm4gKFxuICAgIC8vICAgICAhcHJvcGVydHkuaXNSZXF1aXJlZCB8fFxuICAgIC8vICAgICAocHJvcGVydHkuVmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgIC8vICAgICAgIHByb3BlcnR5LlZhbHVlICE9PSBudWxsICYmXG4gICAgLy8gICAgICAgcHJvcGVydHkuVmFsdWUgIT09ICcnKVxuICAgIC8vICAgKTtcbiAgICAvLyB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGRpc2FibGVQcm9jZXNzaW5nKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkV29ya2Zsb3cgPSB0aGlzLndvcmtmbG93cy5maW5kKFxuICAgICAgKHsgQ29kZSB9KSA9PiBDb2RlID09PSB0aGlzLmZvcm0uZ2V0KCdXb3JrZmxvd0NvZGUnKT8udmFsdWVcbiAgICApO1xuXG4gICAgaWYgKFxuICAgICAgc2VsZWN0ZWRXb3JrZmxvdz8uRm9ybSAmJlxuICAgICAgKHRoaXMuY3VycmVudERhdGE/LmRhdGEgYXMgVGFzayk/LlRhc2tGb3Jtcz8ubGVuZ3RoID09PSAwXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgcmV0dXJuIHRoaXMuZm9ybS5pbnZhbGlkO1xuICB9XG59XG4iLCJAaWYgKHRhc2tGb3JtVmlldyAmJiB0YXNrRm9ybSkge1xuPGRpdlxuICAqbmdJZj1cInRhc2tGb3JtLkVudGl0aWVzW2FjdGl2ZV1cIlxuICBjbGFzcz1cImZsZXggZmxleC13cmFwIGJnLVsjOUE5RkJGODBdIHJvdW5kZWQteGwgcHgtMyBweS0yIHctZnVsbCByZWxhdGl2ZSBnYXAtNlwiXG4+XG4gIDxhcHAtZm9ybS10aW1lcj48L2FwcC1mb3JtLXRpbWVyPlxuICA8ZGl2ICpuZ0Zvcj1cImxldCBncm91cCBvZiB0YXNrRm9ybS5FbnRpdGllczsgbGV0IGluZGV4ID0gaW5kZXhcIj5cbiAgICA8cFxuICAgICAgKGNsaWNrKT1cImFjdGl2ZSA9IGluZGV4XCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ2JnLVsjZmZmXSB0ZXh0LXByaW1hcnkgcm91bmRlZC1sZyBzaGFkb3ctbGcnOiBhY3RpdmUgPT09IGluZGV4XG4gICAgICB9XCJcbiAgICAgIGNsYXNzPVwicHgtNiBweS0yIGN1cnNvci1wb2ludGVyXCJcbiAgICA+XG4gICAgICB7eyBncm91cC5OYW1lIH19Z3JvdXBcbiAgICA8L3A+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgKm5nSWY9XCJ0YXNrRm9ybS5FbnRpdGllc1thY3RpdmVdOyBlbHNlIGVtcHR5U3RhdGVcIiBjbGFzcz1cIm10LTRcIj5cbiAgPGZvcm0tY29udHJvbFxuICAgIFtkYXRhVHlwZV09XCJkYXRhVHlwZVwiXG4gICAgW2Zvcm1Qcm9wZXJ0aWVzXT1cInRhc2tGb3JtLkVudGl0aWVzW2FjdGl2ZV0uUHJvcGVydGllc1wiXG4gID48L2Zvcm0tY29udHJvbD5cblxuICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMyBqdXN0aWZ5LWVuZFwiPlxuICAgIDx2ZXJiZW5hLWJ1dHRvblxuICAgICAgKGNsaWNrKT1cImFyZVJlcXVpcmVkUHJvcGVydGllc0ZpbGxlZCgpXCJcbiAgICAgIHRleHQ9XCJDSEVDS1wiXG4gICAgICBzdHlsZVR5cGU9XCJ5bHctb3V0bGluZVwiXG4gICAgICBjbGFzcz1cIm1sLWF1dG9cIlxuICAgID48L3ZlcmJlbmEtYnV0dG9uPlxuXG4gICAgPHZlcmJlbmEtYnV0dG9uXG4gICAgICAoY2xpY2spPVwidGFza0Zvcm1WaWV3ID0gZmFsc2VcIlxuICAgICAgdGV4dD1cIkNsb3NlIHRhc2sgZm9ybVwiXG4gICAgICBzdHlsZVR5cGU9XCJ5bHctb3V0bGluZVwiXG4gICAgICBjbGFzcz1cIm1sLWF1dG9cIlxuICAgID48L3ZlcmJlbmEtYnV0dG9uPlxuXG4gICAgPHZlcmJlbmEtYnV0dG9uXG4gICAgICBjbGFzcz1cInZlcmJlbi1wcmltYXJ5LWJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwic2VuZFRhc2tGb3JtKClcIlxuICAgICAgW2Rpc2FibGVdPVwiIWFyZVJlcXVpcmVkUHJvcGVydGllc0ZpbGxlZCgpXCJcbiAgICAgIHRleHQ9XCJTYXZlXCJcbiAgICA+PC92ZXJiZW5hLWJ1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLSBFbXB0eSBzdGF0ZSB0ZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlTdGF0ZT5cbiAgPHAgY2xhc3M9XCJtdC00IHAtNCB0ZXh0LWdyYXktNjAwIHRleHQtY2VudGVyXCI+XG4gICAgTm8gZW50cmllcyBhdmFpbGFibGUgZm9yIHRoZSBzZWxlY3RlZCBmb3JtIGdyb3VwLlxuICA8L3A+XG48L25nLXRlbXBsYXRlPlxuXG59IEBlbHNlIHtcbjxmb3JtXG4gIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBweC0zIHBiLTMgcm91bmRlZC14bCBoLWZ1bGwgdy1mdWxsIHJlbGF0aXZlIHNwYWNlLXktNFwiXG4gIChuZ1N1Ym1pdCk9XCJoYW5kbGVTdWJtaXQoKVwiXG4+XG4gIDx2ZXJiZW5hLWlucHV0XG4gICAgbmFtZT1cIk5hbWVcIlxuICAgIGxhYmVsPVwiTmFtZVwiXG4gICAgZm9ybUNvbnRyb2xOYW1lPVwiTmFtZVwiXG4gICAgcGxhY2VIb2xkZXI9XCJFbnRlciBOYW1lXCJcbiAgLz5cbiAgPHZlcmJlbmEtaW5wdXRcbiAgICBuYW1lPVwiRGVzY3JpcHRpb25cIlxuICAgIGxhYmVsPVwiRGVzY3JpcHRpb25cIlxuICAgIGZvcm1Db250cm9sTmFtZT1cIkRlc2NyaXB0aW9uXCJcbiAgICBwbGFjZUhvbGRlcj1cIkVudGVyIERlc2NyaXB0aW9uXCJcbiAgLz5cblxuICA8ZGl2IGNsYXNzPVwic3BhY2UteS0xXCI+XG4gICAgPGxhYmVsIGZvcj1cIndvcmtmbG93XCI+V29ya2Zsb3c8L2xhYmVsPlxuXG4gICAgPHZlcmJlbi1kcm9wLWRvd25cbiAgICAgIGxhYmVsPVwiV29ya2Zsb3dcIlxuICAgICAgc3R5bGVDbGFzcz1cInctZnVsbFwiXG4gICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgW211bHRpc2VsZWN0XT1cImZhbHNlXCJcbiAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0XCJcbiAgICAgIFtvcHRpb25zXT1cIndvcmtmbG93c1wiXG4gICAgICBvcHRpb25MYWJlbD1cIk5hbWVcIlxuICAgICAgb3B0aW9uVmFsdWU9XCJDb2RlXCJcbiAgICAgIGlkPVwid29ya2Zsb3dcIlxuICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiV29ya2Zsb3dDb2RlXCJcbiAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICA+XG4gICAgPC92ZXJiZW4tZHJvcC1kb3duPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwic3BhY2UteS0xXCI+XG4gICAgPGxhYmVsIGZvcj1cInN0YXR1c1wiPlN0YXR1czwvbGFiZWw+XG5cbiAgICA8dmVyYmVuLWRyb3AtZG93blxuICAgICAgbGFiZWw9XCJTdGF0dXNcIlxuICAgICAgc3R5bGVDbGFzcz1cInctZnVsbFwiXG4gICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgW211bHRpc2VsZWN0XT1cImZhbHNlXCJcbiAgICAgIFtzaG93Q2xlYXJdPVwidHJ1ZVwiXG4gICAgICBwbGFjZWhvbGRlcj1cIk51bGxcIlxuICAgICAgWyhvcHRpb25zKV09XCJzdGF0dXNlc1wiXG4gICAgICBpZD1cInN0YXR1c1wiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9XCJTdGF0dXNcIlxuICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgID5cbiAgICA8L3ZlcmJlbi1kcm9wLWRvd24+XG4gIDwvZGl2PlxuXG4gIDwhLS0gYnV0dG9ucyAtLT5cbiAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGdhcC00IG15LTJcIj5cbiAgICA8dmVyYmVuYS1idXR0b25cbiAgICAgIHdpZHRoPVwiMTE0cHhcIlxuICAgICAgaGVpZ2h0PVwiMzlweFwiXG4gICAgICB0ZXh0PVwiRGVsZXRlXCJcbiAgICAgIGJnQ29sb3I9XCIjOTk5OTk5XCJcbiAgICAgIHRleHRDb2xvcj1cIiM0MDQwNDBcIlxuICAgICAgYm9yZGVyUmFkaXVzPVwiMTBweFwiXG4gICAgICBbZGlzYWJsZV09XCJkaXNhYmxlUHJvY2Vzc2luZygpXCJcbiAgICA+PC92ZXJiZW5hLWJ1dHRvbj5cbiAgICA8dmVyYmVuYS1idXR0b25cbiAgICAgIFtkaXNhYmxlXT1cIiF0YXNrRm9ybSB8fCBsb2FkaW5nVGFza0Zvcm1cIlxuICAgICAgKGNsaWNrKT1cInRhc2tGb3JtVmlldyA9IHRydWVcIlxuICAgICAgW3RleHRdPVwibG9hZGluZ1Rhc2tGb3JtID8gJ0NoZWNraW5nIGZvciBmb3JtJyA6ICdGaWxsIHRhc2sgZm9ybSdcIlxuICAgICAgc3R5bGVUeXBlPVwieWx3LW91dGxpbmVcIlxuICAgICAgY2xhc3M9XCJtbC1hdXRvXCJcbiAgICA+PC92ZXJiZW5hLWJ1dHRvbj5cbiAgICA8dmVyYmVuYS1idXR0b25cbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgdGV4dD1cIlNhdmVcIlxuICAgICAgYmdDb2xvcj1cIiNGRkU2ODFcIlxuICAgICAgdGV4dENvbG9yPVwiIzQwNDA0MFwiXG4gICAgICBib3JkZXJSYWRpdXM9XCIxMHB4XCJcbiAgICAgIHBkPVwiMTBweCAyMHB4XCJcbiAgICAgIHdpZHRoPVwiMTE0cHhcIlxuICAgICAgaGVpZ2h0PVwiMzlweFwiXG4gICAgICBbZGlzYWJsZV09XCJkaXNhYmxlUHJvY2Vzc2luZygpXCJcbiAgICA+PC92ZXJiZW5hLWJ1dHRvbj5cbiAgPC9kaXY+XG48L2Zvcm0+XG59XG4iXX0=
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza3MuZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3Rhc2tzL3Rhc2tzLmZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvY29tcG9uZW50cy90YXNrcy90YXNrcy5mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHdkUsT0FBTyxFQUEwQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFJM0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOzs7Ozs7OztBQU03RCxNQUFNLE9BQU8sa0JBQWtCO0lBcUNUO0lBQXlCO0lBcEM3QyxJQUNJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUNELElBQUksV0FBVyxDQUFDLEtBQXNCO1FBQ3BDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO2dCQUNuQixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRTtnQkFDM0IsV0FBVyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUU7Z0JBQ3pDLFlBQVks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SUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxQyxDQUFDO0lBQ0gsQ0FBQztJQUVELDJCQUEyQjtRQUN6QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQztRQUV6RSxxREFBcUQ7UUFDckQsK0NBQStDO1FBQy9DLDJCQUEyQjtRQUMzQixhQUFhO1FBQ2IsOEJBQThCO1FBQzlCLHVDQUF1QztRQUN2QyxtQ0FBbUM7UUFDbkMsK0JBQStCO1FBQy9CLE9BQU87UUFDUCxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDMUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUUsS0FBSyxDQUM1RCxDQUFDO1FBRUYsSUFDRSxnQkFBZ0IsRUFBRSxJQUFJO1lBQ3JCLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNLEtBQUssQ0FBQyxFQUN6RCxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDOztZQUFNLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDbEMsQ0FBQzt3R0F4SVUsa0JBQWtCOzRGQUFsQixrQkFBa0IsMkpDZC9CLDZ2SEFnSkE7OzRGRGxJYSxrQkFBa0I7a0JBSjlCLFNBQVM7K0JBQ0UsWUFBWTt5R0FLbEIsV0FBVztzQkFEZCxLQUFLO2dCQXlCSSxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDYXJkRGF0YSB9IGZyb20gJ3ZlcmJlbi1uZy11aSc7XG5pbXBvcnQgeyBUYXNrIH0gZnJvbSAndmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvbW9kZWxzJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdGF0dXMgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgV29ya2Zsb3cgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgVGFza0ZhY2FkZSB9IGZyb20gJy4vdGFza3MuZmFjYWRlJztcbmltcG9ydCB7IEZvcm0gfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgRGF0YVR5cGUgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0YXNrcy1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Rhc2tzLmZvcm0uY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBUYXNrc0Zvcm1Db21wb25lbnQge1xuICBASW5wdXQoKVxuICBnZXQgY3VycmVudERhdGEoKTogQ2FyZERhdGEgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudERhdGE7XG4gIH1cbiAgc2V0IGN1cnJlbnREYXRhKHZhbHVlOiBDYXJkRGF0YSB8IG51bGwpIHtcbiAgICB0aGlzLl9jdXJyZW50RGF0YSA9IHZhbHVlO1xuICAgIGNvbnNvbGUubG9nKHZhbHVlPy5kYXRhKTtcbiAgICBpZiAodmFsdWU/LmRhdGEpIHtcbiAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgTmFtZTogdmFsdWUuZGF0YS5OYW1lIHx8ICcnLFxuICAgICAgICBEZXNjcmlwdGlvbjogdmFsdWUuZGF0YS5EZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgICAgV29ya2Zsb3dDb2RlOiB2YWx1ZS5kYXRhLldvcmtmbG93Q29kZSB8fCAnJyxcbiAgICAgICAgU3RhdHVzOiB2YWx1ZS5kYXRhLlN0YXR1cyB8fCAnJyxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvcm0ucmVzZXQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jdXJyZW50RGF0YTogQ2FyZERhdGEgfCBudWxsID0gbnVsbDtcblxuICB0YXNrRm9ybTogRm9ybSB8IG51bGwgPSBudWxsO1xuICBhY3RpdmU6IG51bWJlciA9IDA7XG4gIGRhdGFUeXBlOiBEYXRhVHlwZSA9IERhdGFUeXBlLlRleHQ7XG5cbiAgQE91dHB1dCgpIG9uVGFza0Zvcm1TYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtPigpO1xuICBAT3V0cHV0KCkgb25TYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxQYXJ0aWFsPFRhc2s+PigpO1xuXG4gIGZvcm06IEZvcm1Hcm91cDtcbiAgc3RhdHVzZXMgPSBPYmplY3QudmFsdWVzKFN0YXR1cyk7XG4gIHdvcmtmbG93czogV29ya2Zsb3dbXSA9IFtdO1xuICBsb2FkaW5nVGFza0Zvcm06IGJvb2xlYW4gPSBmYWxzZTtcbiAgdGFza0Zvcm1WaWV3OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gYWN0aXZlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsIHByaXZhdGUgdGFza0ZhY2FkZTogVGFza0ZhY2FkZSkge1xuICAgIHRoaXMudGFza0ZhY2FkZS5nZXRXb3JrZmxvdyQoKS5zdWJzY3JpYmUoKHdvcmtmbG93cykgPT4ge1xuICAgICAgdGhpcy53b3JrZmxvd3MgPSB3b3JrZmxvd3M7XG4gICAgfSk7XG4gICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBOYW1lOiBbJycsIHsgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWRdIH1dLFxuICAgICAgRGVzY3JpcHRpb246IFsnJywgeyB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0gfV0sXG4gICAgICBXb3JrZmxvd0NvZGU6IFsnJywgeyB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0gfV0sXG4gICAgICBTdGF0dXM6IFsnJywgeyB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0gfV0sXG4gICAgICBUYXNrRm9ybXM6IFtdLFxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudGFza0ZhY2FkZS5sb2FkV29ya2Zsb3dzKCkudGhlbigoKSA9PiB7fSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEhhbmRsZSBlcnJvclxuICAgIH1cblxuICAgIHRoaXMuZm9ybS5nZXQoJ1dvcmtmbG93Q29kZScpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkV29ya2Zsb3cgPSB0aGlzLndvcmtmbG93cy5maW5kKFxuICAgICAgICAgICh7IENvZGUgfSkgPT4gQ29kZSA9PT0gdmFsdWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkV29ya2Zsb3c/LkZvcm0pIHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmdUYXNrRm9ybSA9IHRydWU7XG4gICAgICAgICAgdGhpcy50YXNrRmFjYWRlXG4gICAgICAgICAgICAubG9hZEZvcm1zV2l0aFBhcmFtKHNlbGVjdGVkV29ya2Zsb3cuRm9ybSlcbiAgICAgICAgICAgIC50aGVuKChmb3JtKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChmb3JtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50YXNrRm9ybSA9IGZvcm07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZ1Rhc2tGb3JtID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnRhc2tGb3JtID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlU3VibWl0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZvcm0udmFsaWQpIHtcbiAgICAgIC8vIEVtaXQgc2F2ZSBldmVudCB3aXRoIGZvcm0gdmFsdWVcbiAgICAgIGNvbnNvbGUubG9nKCdGb3JtIHNhdmVkOicsIHRoaXMuZm9ybS52YWx1ZSk7XG4gICAgICBpZiAoXG4gICAgICAgICF0aGlzLnRhc2tGb3JtIHx8XG4gICAgICAgICh0aGlzLmZvcm0uZ2V0KCdUYXNrRm9ybXMnKT8udmFsdWUgYXMgRm9ybVtdKT8ubGVuZ3RoID4gMFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMub25TYXZlLmVtaXQodGhpcy5mb3JtLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkRlbGV0ZSgpOiB2b2lkIHtcbiAgICAvLyBFbWl0IGRlbGV0ZSBldmVudFxuICAgIGNvbnNvbGUubG9nKCdEZWxldGUgcmVxdWVzdGVkJyk7XG4gIH1cblxuICBzZW5kVGFza0Zvcm0oKSB7XG4gICAgaWYgKHRoaXMudGFza0Zvcm0pIHtcbiAgICAgIHRoaXMuZm9ybVxuICAgICAgICAuZ2V0KCdUYXNrRm9ybXMnKVxuICAgICAgICA/LnNldFZhbHVlKFt7IC4uLnRoaXMudGFza0Zvcm0sIFN3aW1sYW5lOiAnJyB9XSk7XG4gICAgICB0aGlzLnRhc2tGb3JtVmlldyA9IGZhbHNlO1xuICAgICAgdGhpcy5vblRhc2tGb3JtU2F2ZS5lbWl0KHRoaXMudGFza0Zvcm0pO1xuICAgIH1cbiAgfVxuXG4gIGFyZVJlcXVpcmVkUHJvcGVydGllc0ZpbGxlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy50YXNrRm9ybT8uRW50aXRpZXNbdGhpcy5hY3RpdmVdLlByb3BlcnRpZXMgfHwgW107XG5cbiAgICAvLyBDaGVjayBpZiBhbGwgcmVxdWlyZWQgcHJvcGVydGllcyBoYXZlIHZhbGlkIHZhbHVlc1xuICAgIC8vIHJldHVybiBwcm9wZXJ0aWVzLmV2ZXJ5KChwcm9wZXJ0eTogYW55KSA9PiB7XG4gICAgLy8gICBjb25zb2xlLmxvZyhwcm9wZXJ0eSk7XG4gICAgLy8gICByZXR1cm4gKFxuICAgIC8vICAgICAhcHJvcGVydHkuaXNSZXF1aXJlZCB8fFxuICAgIC8vICAgICAocHJvcGVydHkuVmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgIC8vICAgICAgIHByb3BlcnR5LlZhbHVlICE9PSBudWxsICYmXG4gICAgLy8gICAgICAgcHJvcGVydHkuVmFsdWUgIT09ICcnKVxuICAgIC8vICAgKTtcbiAgICAvLyB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGRpc2FibGVQcm9jZXNzaW5nKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkV29ya2Zsb3cgPSB0aGlzLndvcmtmbG93cy5maW5kKFxuICAgICAgKHsgQ29kZSB9KSA9PiBDb2RlID09PSB0aGlzLmZvcm0uZ2V0KCdXb3JrZmxvd0NvZGUnKT8udmFsdWVcbiAgICApO1xuXG4gICAgaWYgKFxuICAgICAgc2VsZWN0ZWRXb3JrZmxvdz8uRm9ybSAmJlxuICAgICAgKHRoaXMuY3VycmVudERhdGE/LmRhdGEgYXMgVGFzayk/LlRhc2tGb3Jtcz8ubGVuZ3RoID09PSAwXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgcmV0dXJuIHRoaXMuZm9ybS5pbnZhbGlkO1xuICB9XG59XG4iLCJAaWYgKHRhc2tGb3JtVmlldyAmJiB0YXNrRm9ybSkge1xuPGRpdlxuICAqbmdJZj1cInRhc2tGb3JtLkVudGl0aWVzW2FjdGl2ZV1cIlxuICBjbGFzcz1cImZsZXggZmxleC13cmFwIGJnLVsjOUE5RkJGODBdIHJvdW5kZWQteGwgcHgtMyBweS0yIHctZnVsbCByZWxhdGl2ZSBnYXAtNlwiXG4+XG4gIDxhcHAtZm9ybS10aW1lcj48L2FwcC1mb3JtLXRpbWVyPlxuICA8ZGl2ICpuZ0Zvcj1cImxldCBncm91cCBvZiB0YXNrRm9ybS5FbnRpdGllczsgbGV0IGluZGV4ID0gaW5kZXhcIj5cbiAgICA8cFxuICAgICAgKGNsaWNrKT1cImFjdGl2ZSA9IGluZGV4XCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ2JnLVt2YXIoLS12Ym4tY29sb3Itc3VyZmFjZSldIHRleHQtcHJpbWFyeSByb3VuZGVkLWxnIHNoYWRvdy1sZyc6IGFjdGl2ZSA9PT0gaW5kZXhcbiAgICAgIH1cIlxuICAgICAgY2xhc3M9XCJweC02IHB5LTIgY3Vyc29yLXBvaW50ZXJcIlxuICAgID5cbiAgICAgIHt7IGdyb3VwLk5hbWUgfX1ncm91cFxuICAgIDwvcD5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiAqbmdJZj1cInRhc2tGb3JtLkVudGl0aWVzW2FjdGl2ZV07IGVsc2UgZW1wdHlTdGF0ZVwiIGNsYXNzPVwibXQtNFwiPlxuICA8Zm9ybS1jb250cm9sXG4gICAgW2RhdGFUeXBlXT1cImRhdGFUeXBlXCJcbiAgICBbZm9ybVByb3BlcnRpZXNdPVwidGFza0Zvcm0uRW50aXRpZXNbYWN0aXZlXS5Qcm9wZXJ0aWVzXCJcbiAgPjwvZm9ybS1jb250cm9sPlxuXG4gIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0zIGp1c3RpZnktZW5kXCI+XG4gICAgPHZlcmJlbmEtYnV0dG9uXG4gICAgICAoY2xpY2spPVwiYXJlUmVxdWlyZWRQcm9wZXJ0aWVzRmlsbGVkKClcIlxuICAgICAgdGV4dD1cIkNIRUNLXCJcbiAgICAgIHN0eWxlVHlwZT1cInlsdy1vdXRsaW5lXCJcbiAgICAgIGNsYXNzPVwibWwtYXV0b1wiXG4gICAgPjwvdmVyYmVuYS1idXR0b24+XG5cbiAgICA8dmVyYmVuYS1idXR0b25cbiAgICAgIChjbGljayk9XCJ0YXNrRm9ybVZpZXcgPSBmYWxzZVwiXG4gICAgICB0ZXh0PVwiQ2xvc2UgdGFzayBmb3JtXCJcbiAgICAgIHN0eWxlVHlwZT1cInlsdy1vdXRsaW5lXCJcbiAgICAgIGNsYXNzPVwibWwtYXV0b1wiXG4gICAgPjwvdmVyYmVuYS1idXR0b24+XG5cbiAgICA8dmVyYmVuYS1idXR0b25cbiAgICAgIGNsYXNzPVwidmVyYmVuLXByaW1hcnktYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCJzZW5kVGFza0Zvcm0oKVwiXG4gICAgICBbZGlzYWJsZV09XCIhYXJlUmVxdWlyZWRQcm9wZXJ0aWVzRmlsbGVkKClcIlxuICAgICAgdGV4dD1cIlNhdmVcIlxuICAgID48L3ZlcmJlbmEtYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIEVtcHR5IHN0YXRlIHRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlICNlbXB0eVN0YXRlPlxuICA8cCBjbGFzcz1cIm10LTQgcC00IHRleHQtZ3JheS02MDAgdGV4dC1jZW50ZXJcIj5cbiAgICBObyBlbnRyaWVzIGF2YWlsYWJsZSBmb3IgdGhlIHNlbGVjdGVkIGZvcm0gZ3JvdXAuXG4gIDwvcD5cbjwvbmctdGVtcGxhdGU+XG5cbn0gQGVsc2Uge1xuPGZvcm1cbiAgW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHB4LTMgcGItMyByb3VuZGVkLXhsIGgtZnVsbCB3LWZ1bGwgcmVsYXRpdmUgc3BhY2UteS00XCJcbiAgKG5nU3VibWl0KT1cImhhbmRsZVN1Ym1pdCgpXCJcbj5cbiAgPHZlcmJlbmEtaW5wdXRcbiAgICBuYW1lPVwiTmFtZVwiXG4gICAgbGFiZWw9XCJOYW1lXCJcbiAgICBmb3JtQ29udHJvbE5hbWU9XCJOYW1lXCJcbiAgICBwbGFjZUhvbGRlcj1cIkVudGVyIE5hbWVcIlxuICAvPlxuICA8dmVyYmVuYS1pbnB1dFxuICAgIG5hbWU9XCJEZXNjcmlwdGlvblwiXG4gICAgbGFiZWw9XCJEZXNjcmlwdGlvblwiXG4gICAgZm9ybUNvbnRyb2xOYW1lPVwiRGVzY3JpcHRpb25cIlxuICAgIHBsYWNlSG9sZGVyPVwiRW50ZXIgRGVzY3JpcHRpb25cIlxuICAvPlxuXG4gIDxkaXYgY2xhc3M9XCJzcGFjZS15LTFcIj5cbiAgICA8bGFiZWwgZm9yPVwid29ya2Zsb3dcIj5Xb3JrZmxvdzwvbGFiZWw+XG5cbiAgICA8dmVyYmVuLWRyb3AtZG93blxuICAgICAgbGFiZWw9XCJXb3JrZmxvd1wiXG4gICAgICBzdHlsZUNsYXNzPVwidy1mdWxsXCJcbiAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICBbbXVsdGlzZWxlY3RdPVwiZmFsc2VcIlxuICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3RcIlxuICAgICAgW29wdGlvbnNdPVwid29ya2Zsb3dzXCJcbiAgICAgIG9wdGlvbkxhYmVsPVwiTmFtZVwiXG4gICAgICBvcHRpb25WYWx1ZT1cIkNvZGVcIlxuICAgICAgaWQ9XCJ3b3JrZmxvd1wiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9XCJXb3JrZmxvd0NvZGVcIlxuICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgID5cbiAgICA8L3ZlcmJlbi1kcm9wLWRvd24+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJzcGFjZS15LTFcIj5cbiAgICA8bGFiZWwgZm9yPVwic3RhdHVzXCI+U3RhdHVzPC9sYWJlbD5cblxuICAgIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICBsYWJlbD1cIlN0YXR1c1wiXG4gICAgICBzdHlsZUNsYXNzPVwidy1mdWxsXCJcbiAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICBbbXVsdGlzZWxlY3RdPVwiZmFsc2VcIlxuICAgICAgW3Nob3dDbGVhcl09XCJ0cnVlXCJcbiAgICAgIHBsYWNlaG9sZGVyPVwiTnVsbFwiXG4gICAgICBbKG9wdGlvbnMpXT1cInN0YXR1c2VzXCJcbiAgICAgIGlkPVwic3RhdHVzXCJcbiAgICAgIGZvcm1Db250cm9sTmFtZT1cIlN0YXR1c1wiXG4gICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgPlxuICAgIDwvdmVyYmVuLWRyb3AtZG93bj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBidXR0b25zIC0tPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gZ2FwLTQgbXktMlwiPlxuICAgIDx2ZXJiZW5hLWJ1dHRvblxuICAgICAgd2lkdGg9XCIxMTRweFwiXG4gICAgICBoZWlnaHQ9XCIzOXB4XCJcbiAgICAgIHRleHQ9XCJEZWxldGVcIlxuICAgICAgYmdDb2xvcj1cInZhcigtLXZibi1jb2xvci10ZXh0LW11dGVkKVwiXG4gICAgICB0ZXh0Q29sb3I9XCJ2YXIoLS12Ym4tY29sb3Itb24tcHJpbWFyeSlcIlxuICAgICAgYm9yZGVyUmFkaXVzPVwiMTBweFwiXG4gICAgICBbZGlzYWJsZV09XCJkaXNhYmxlUHJvY2Vzc2luZygpXCJcbiAgICA+PC92ZXJiZW5hLWJ1dHRvbj5cbiAgICA8dmVyYmVuYS1idXR0b25cbiAgICAgIFtkaXNhYmxlXT1cIiF0YXNrRm9ybSB8fCBsb2FkaW5nVGFza0Zvcm1cIlxuICAgICAgKGNsaWNrKT1cInRhc2tGb3JtVmlldyA9IHRydWVcIlxuICAgICAgW3RleHRdPVwibG9hZGluZ1Rhc2tGb3JtID8gJ0NoZWNraW5nIGZvciBmb3JtJyA6ICdGaWxsIHRhc2sgZm9ybSdcIlxuICAgICAgc3R5bGVUeXBlPVwieWx3LW91dGxpbmVcIlxuICAgICAgY2xhc3M9XCJtbC1hdXRvXCJcbiAgICA+PC92ZXJiZW5hLWJ1dHRvbj5cbiAgICA8dmVyYmVuYS1idXR0b25cbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgdGV4dD1cIlNhdmVcIlxuICAgICAgYmdDb2xvcj1cInZhcigtLXZibi1jb2xvci1wcmltYXJ5KVwiXG4gICAgICB0ZXh0Q29sb3I9XCJ2YXIoLS12Ym4tY29sb3Itb24tcHJpbWFyeSlcIlxuICAgICAgYm9yZGVyUmFkaXVzPVwiMTBweFwiXG4gICAgICBwZD1cIjEwcHggMjBweFwiXG4gICAgICB3aWR0aD1cIjExNHB4XCJcbiAgICAgIGhlaWdodD1cIjM5cHhcIlxuICAgICAgW2Rpc2FibGVdPVwiZGlzYWJsZVByb2Nlc3NpbmcoKVwiXG4gICAgPjwvdmVyYmVuYS1idXR0b24+XG4gIDwvZGl2PlxuPC9mb3JtPlxufVxuIl19