verben-workflow-ui 0.5.77 → 0.5.78

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 (182) 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 +5 -5
  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 +5 -5
  53. package/esm2022/src/lib/components/form-group/form-group.module.mjs +4 -4
  54. package/esm2022/src/lib/components/form-group/form-group.service.mjs +3 -3
  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 +5 -5
  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 +5 -5
  67. package/esm2022/src/lib/components/my-queue/my-queue.facade.mjs +3 -3
  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/pipes/async-label.pipe.mjs +3 -3
  125. package/esm2022/src/lib/services/environment.service.mjs +3 -3
  126. package/esm2022/src/lib/services/http-web-request.service.mjs +3 -3
  127. package/esm2022/src/lib/services/label.service.mjs +3 -3
  128. package/esm2022/src/lib/services/util.service.mjs +3 -3
  129. package/esm2022/src/lib/shared/base-table-style.mjs +6 -6
  130. package/esm2022/src/lib/shared/components/base-data-view.component.mjs +3 -3
  131. package/esm2022/src/lib/shared/shared.module.mjs +4 -4
  132. package/fesm2022/verben-workflow-ui-src-lib-components-actors.mjs +21 -21
  133. package/fesm2022/verben-workflow-ui-src-lib-components-actors.mjs.map +1 -1
  134. package/fesm2022/verben-workflow-ui-src-lib-components-designer.mjs +85 -85
  135. package/fesm2022/verben-workflow-ui-src-lib-components-designer.mjs.map +1 -1
  136. package/fesm2022/verben-workflow-ui-src-lib-components-expiration.mjs +7 -7
  137. package/fesm2022/verben-workflow-ui-src-lib-components-expiration.mjs.map +1 -1
  138. package/fesm2022/verben-workflow-ui-src-lib-components-file-render.mjs +8 -8
  139. package/fesm2022/verben-workflow-ui-src-lib-components-file-render.mjs.map +1 -1
  140. package/fesm2022/verben-workflow-ui-src-lib-components-file-upload.mjs +8 -8
  141. package/fesm2022/verben-workflow-ui-src-lib-components-file-upload.mjs.map +1 -1
  142. package/fesm2022/verben-workflow-ui-src-lib-components-flowable-status.mjs +21 -21
  143. package/fesm2022/verben-workflow-ui-src-lib-components-flowable-status.mjs.map +1 -1
  144. package/fesm2022/verben-workflow-ui-src-lib-components-form-control.mjs +8 -8
  145. package/fesm2022/verben-workflow-ui-src-lib-components-form-control.mjs.map +1 -1
  146. package/fesm2022/verben-workflow-ui-src-lib-components-form-group.mjs +27 -27
  147. package/fesm2022/verben-workflow-ui-src-lib-components-form-group.mjs.map +1 -1
  148. package/fesm2022/verben-workflow-ui-src-lib-components-form-response.mjs +11 -11
  149. package/fesm2022/verben-workflow-ui-src-lib-components-form-response.mjs.map +1 -1
  150. package/fesm2022/verben-workflow-ui-src-lib-components-form-timer.mjs +8 -8
  151. package/fesm2022/verben-workflow-ui-src-lib-components-form-timer.mjs.map +1 -1
  152. package/fesm2022/verben-workflow-ui-src-lib-components-forms.mjs +16 -16
  153. package/fesm2022/verben-workflow-ui-src-lib-components-forms.mjs.map +1 -1
  154. package/fesm2022/verben-workflow-ui-src-lib-components-journal.mjs +7 -7
  155. package/fesm2022/verben-workflow-ui-src-lib-components-my-queue.mjs +21 -21
  156. package/fesm2022/verben-workflow-ui-src-lib-components-my-queue.mjs.map +1 -1
  157. package/fesm2022/verben-workflow-ui-src-lib-components-operation-popup.mjs +13 -13
  158. package/fesm2022/verben-workflow-ui-src-lib-components-operation-popup.mjs.map +1 -1
  159. package/fesm2022/verben-workflow-ui-src-lib-components-stage-details.mjs +8 -8
  160. package/fesm2022/verben-workflow-ui-src-lib-components-stage-details.mjs.map +1 -1
  161. package/fesm2022/verben-workflow-ui-src-lib-components-task-form.mjs +8 -8
  162. package/fesm2022/verben-workflow-ui-src-lib-components-task-form.mjs.map +1 -1
  163. package/fesm2022/verben-workflow-ui-src-lib-components-task-history.mjs +11 -11
  164. package/fesm2022/verben-workflow-ui-src-lib-components-task-history.mjs.map +1 -1
  165. package/fesm2022/verben-workflow-ui-src-lib-components-task-notification.mjs +16 -16
  166. package/fesm2022/verben-workflow-ui-src-lib-components-task-notification.mjs.map +1 -1
  167. package/fesm2022/verben-workflow-ui-src-lib-components-tasks.mjs +21 -21
  168. package/fesm2022/verben-workflow-ui-src-lib-components-tasks.mjs.map +1 -1
  169. package/fesm2022/verben-workflow-ui-src-lib-components-wf.mjs +10 -10
  170. package/fesm2022/verben-workflow-ui-src-lib-components-workflow-designer.mjs +67 -67
  171. package/fesm2022/verben-workflow-ui-src-lib-components-workflow-designer.mjs.map +1 -1
  172. package/fesm2022/verben-workflow-ui-src-lib-components-workflow.mjs +16 -16
  173. package/fesm2022/verben-workflow-ui-src-lib-components-workflow.mjs.map +1 -1
  174. package/fesm2022/verben-workflow-ui-src-lib-components-workflows.mjs +21 -21
  175. package/fesm2022/verben-workflow-ui-src-lib-components-workflows.mjs.map +1 -1
  176. package/fesm2022/verben-workflow-ui-src-lib-pipes.mjs +3 -3
  177. package/fesm2022/verben-workflow-ui-src-lib-services.mjs +12 -12
  178. package/fesm2022/verben-workflow-ui-src-lib-shared.mjs +12 -12
  179. package/fesm2022/verben-workflow-ui-src-lib-shared.mjs.map +1 -1
  180. package/package.json +36 -36
  181. package/src/lib/components/workflow/workflow.component.d.ts +1 -1
  182. package/styles/styles.css +19 -1436
@@ -645,12 +645,12 @@ export class FormsComponent {
645
645
  }
646
646
  this.tableCache.delete(cacheKey);
647
647
  }
648
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormsComponent, deps: [{ token: i1.UtilService }, { token: i1.HttpWebRequestService }, { token: i0.ChangeDetectorRef }, { token: i2.FormBuilder }, { token: i1.EnvironmentService }, { token: i3.FormsService }], target: i0.ɵɵFactoryTarget.Component });
649
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormsComponent, selector: "lib-forms", inputs: { pageSize: "pageSize", searchDebounceTime: "searchDebounceTime", permissionConfig: "permissionConfig" }, viewQueries: [{ propertyName: "cardDataView", first: true, predicate: ["vdcv"], descendants: true }, { propertyName: "dataView", first: true, predicate: ["vdv"], descendants: true }, { propertyName: "tableView", first: true, predicate: ["dt"], descendants: true }, { propertyName: "popUps", predicate: ["popup"], descendants: true }], ngImport: i0, template: "<div #messageLog class=\"flex flex-col gap-4 message-log-container\">\n <verben-data-view\n #vdv\n [viewState]=\"{\n isSearch: true,\n isColumn: true,\n isFilter: true,\n isSort: true,\n isExport: (!permissionConfig || permissionConfig.Actions['Export']),\n isSelect: true,\n isCreate: (!permissionConfig || permissionConfig.Actions['Create']),\n isToggle:true,\n }\"\n [buttonClass]=\"'my-custom-button-class'\"\n [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\"\n [selectedColumnCount]=\"0\"\n [selectedSortCount]=\"0\"\n [selectedFilterTableCount]=\"0\"\n (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\"\n (onSearchChange)=\"handleSearch($event)\"\n >\n <div class=\"mt-2\" table-content>\n <lib-data-table\n [dataKey]=\"'Id'\"\n class=\"form-table\"\n #dt\n [data]=\"data\"\n [columns]=\"visibleColumnDef\"\n [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\"\n >\n <ng-container libColumn=\"select\">\n <ng-template\n #cell\n let-isSelected=\"isSelected\"\n let-toggleRowSelection=\"toggleRowSelection\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"isSelected\"\n (change)=\"toggleRowSelection()\"\n />\n </ng-template>\n <ng-template\n #header\n let-allRowsSelected=\"allRowsSelected\"\n let-someRowsSelected=\"someRowsSelected\"\n let-toggleAllRows=\"toggleAllRows\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"allRowsSelected()\"\n [indeterminate]=\"someRowsSelected()\"\n (change)=\"toggleAllRows()\"\n />\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"createdAt\">\n <ng-template #cell let-value>\n {{ value | date }}\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"name\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value.Name }}\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateData=\"updateData\"\n let-value\n >\n <div class=\"width-max\">\n <verbena-input [(ngModel)]=\"value.Name\"></verbena-input>\n </div>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"groups\">\n <ng-template #cell let-row=\"row\" let-value>\n <div class=\"flex flex-col gap-1\">\n <div class=\"groups-summary-container gap-2\">\n <div\n *ngFor=\"let group of value.Entities.slice(0, 4)\"\n class=\"group-chip px-2\"\n >\n {{ group.Name }}\n </div>\n </div>\n <verben-pop-Up\n *ngIf=\"value.Entities.length > 3\"\n [customStyles]=\"{ 'z-index': '99' }\"\n [enableMouseLeave]=\"false\"\n >\n <span class=\"see-more-section flex\" dropdown-trigger>\n <div>See more</div>\n <verben-svg\n icon=\"chevron-down\"\n fill=\"#3479E9\"\n [width]=\"10\"\n [height]=\"6\"\n ></verben-svg>\n </span>\n <div\n class=\"groups-summary-container pop-up gap-2 p-2\"\n dropdown-content\n >\n <div\n class=\"group-chip px-2\"\n *ngFor=\"let group of value.Entities\"\n >\n {{ group.Name }}\n </div>\n </div>\n </verben-pop-Up>\n </div>\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateData=\"updateData\"\n let-value\n >\n <verben-drop-down\n selectKey=\"Code\"\n display=\"chip\"\n width=\"100%\"\n placeholder=\"Select Groups\"\n [showClear]=\"true\"\n [filter]=\"true\"\n [load]=\"this.loadMoreFormEntities.bind(this)\"\n [search]=\"this.searchFormEntities.bind(this)\"\n [(options)]=\"groups\"\n optionLabel=\"Name\"\n [multiselect]=\"true\"\n [(ngModel)]=\"value.Entities\"\n [lazyLoad]=\"true\"\n [asyncLabel]=\"this.getAsyncLabel.bind(this)\"\n >\n </verben-drop-down>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"expiry\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value.ExpiryDate | date }}\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateData=\"updateData\"\n let-value\n >\n <div class=\"width-max\">\n <input\n class=\"date-picker\"\n type=\"date\"\n [(ngModel)]=\"value.ExpiryDate\"\n />\n <!-- <verbena-input [(ngModel)]=\"value.ExpiryDate\"></verbena-input> -->\n </div>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"anonymous\">\n <ng-template #cell let-row=\"row\" let-value>\n <verben-svg\n [width]=\"15\"\n [height]=\"15\"\n [icon]=\"value.IsProtected ? 'on' : 'off'\"\n ></verben-svg>\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateData=\"updateData\"\n let-value\n >\n <verbena-switch\n onText=\"\"\n offText=\"\"\n [(ngModel)]=\"value.AllowAnonymous\"\n [onColor]=\"'#1A237E'\"\n ></verbena-switch>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template\n #cell\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-value\n >\n <verben-pop-Up\n #popup\n [customStyles]=\"{ 'z-index': '99' }\"\n [enableMouseLeave]=\"false\"\n >\n <verben-svg\n class=\"cursor-pointer actions-icon\"\n dropdown-trigger\n icon=\"list\"\n ></verben-svg>\n <div class=\"pop-up-content flex flex-col\" dropdown-content>\n <div\n (click)=\"viewResponses(value.Code)\"\n class=\"pop-up-value cursor-pointer\"\n >\n View responses\n </div>\n <div\n *ngIf=\"\n !permissionConfig || permissionConfig.Actions['Create']\n \"\n (click)=\"toggleRowEdit(); cacheItem(value); closePopUp()\"\n class=\"pop-up-value cursor-pointer\"\n >\n Edit\n </div>\n <!-- <div class=\"pop-up-value cursor-pointer\">Delete</div> -->\n </div>\n </verben-pop-Up>\n </ng-template>\n <ng-template\n #cellEdit\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-value\n >\n <div class=\"flex gap-2 items-center\">\n <verben-svg\n icon=\"tick\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"tableSaveForm(value, toggleRowEdit)\"\n ></verben-svg>\n <verben-svg\n (click)=\"restoreCache(value); toggleRowEdit()\"\n icon=\"close-no-circle\"\n [width]=\"15\"\n [height]=\"15\"\n ></verben-svg>\n <!-- <verben-svg\n (click)=\"toggleRowEdit()\"\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n ></verben-svg> -->\n <verben-svg\n icon=\"cardViewAlt\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"goToCardView(value)\"\n ></verben-svg>\n </div>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n <div card-content>\n <verben-card-data-view\n borderRadius=\"12px\"\n #vdcv\n dataId=\"Id\"\n border=\"5px\"\n [cardDataList]=\"cardData\"\n rbgColor=\"#f5f6f9\"\n mg=\"0px\"\n >\n <verben-left-card-data-view class=\"space-y-7\">\n <verben-left-card-data\n #vlcd\n [parent]=\"vdcv\"\n dataId=\"MailAddress\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\"\n [cardDataList]=\"cardData\"\n >\n <ng-template #card let-item>\n <div\n (click)=\"formCardClicked(item)\"\n class=\"flex cursor-pointer h-[max-content]\"\n >\n <!-- <verben-svg [width]=\"15\" [height]=\"15\" (click)=\"toggleChildren(item); $event.stopPropagation()\"\n [ngClass]=\"item.children && item.children.length?'visible':'invisible'\"\n class=\"items-center flex pr-1 cursor-pointer\" [icon]=\"item.isChildrenExpanded?'minus':'plus'\" /> -->\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div\n class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\"\n [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"\n ></div>\n <div class=\"py-3 px-4 flex-1 h-[100%]\">\n <div\n class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\"\n >\n <div\n class=\"flex flex-col flex-1 card-min-height justify-between h-[100%]\"\n >\n <h3\n class=\"my-0 font-bold text-[#404040] leading-[19.5px]\"\n >\n {{ item.data.Name }}\n </h3>\n <span class=\"flex items-center gap-1\">\n <span class=\"!text-[10px] font-light text-[#404040]\"\n >Expiry Date:</span\n >\n <span class=\"!text-[12px]\">{{\n item.data.ExpiryDate | date\n }}</span>\n </span>\n </div>\n\n <div class=\"flex items-end h-[100%]\">\n <!-- <span class=\"enum-val {{item.data.Status}}\">{{item.data.Status}}</span> -->\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n <verben-right-card-data-view>\n <ng-template #parent>\n <div\n *ngIf=\"this.currentData\"\n class=\"flex flex-col rounded-xl h-full w-full justify-between relative space-y-4\"\n >\n <div class=\"flex flex-col gap-3\">\n <verbena-input\n name=\"Name\"\n label=\"Name\"\n (ngModelChange)=\"updateTable()\"\n [(ngModel)]=\"this.currentData.data.Name\"\n />\n <div class=\"flex flex-col gap-1\">\n <div>Expiry Date</div>\n <input\n class=\"date-picker\"\n type=\"date\"\n [(ngModel)]=\"this.currentData.data.ExpiryDate\"\n />\n </div>\n <!-- <verbena-input name=\"ExpiryDate\" label=\"Expiry Date\" (ngModelChange)=\"updateTable()\"\n [(ngModel)]=\"this.currentData.data.ExpiryDate\" /> -->\n <div class=\"flex flex-col gap-1\">\n <div>Anonymous</div>\n <verbena-switch\n onText=\"\"\n offText=\"\"\n [(ngModel)]=\"this.currentData.data.AllowAnonymous\"\n [onColor]=\"'#1A237E'\"\n ></verbena-switch>\n </div>\n <div class=\"flex flex-col gap-1\">\n <div>Form Groups</div>\n <verben-drop-down\n selectKey=\"Code\"\n display=\"chip\"\n width=\"100%\"\n placeholder=\"Select Groups\"\n [showClear]=\"true\"\n [filter]=\"true\"\n [load]=\"this.loadMoreFormEntities.bind(this)\"\n [search]=\"this.searchFormEntities.bind(this)\"\n [(options)]=\"groups\"\n optionLabel=\"Name\"\n [multiselect]=\"true\"\n [(ngModel)]=\"this.currentData.data.Entities\"\n [lazyLoad]=\"true\"\n [asyncLabel]=\"this.getAsyncLabel.bind(this)\"\n >\n </verben-drop-down>\n </div>\n </div>\n\n <!-- buttons -->\n <div class=\"flex justify-between bottom-8 left-0 right-0\">\n <!-- <verbena-button\n class=\"verben-delete-button\"\n text=\"Delete\"\n ></verbena-button> -->\n <div></div>\n <div class=\"flex gap-3\">\n <verbena-button\n class=\"verben-switch-button\"\n (click)=\"\n viewResponses(\n this.currentData\n ? this.currentData.data\n ? this.currentData.data.Code\n : ''\n : ''\n )\n \"\n text=\"View Responses\"\n ></verbena-button>\n <verbena-button\n class=\"verben-switch-button\"\n (click)=\"goToTableView()\"\n text=\"Switch To Table\"\n ></verbena-button>\n <verbena-button\n *ngIf=\"\n !permissionConfig || permissionConfig.Actions['Create']\n \"\n class=\"verben-primary-button\"\n (click)=\"this.saveForm()\"\n text=\"Save\"\n ></verbena-button>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-right-card-data-view>\n <!-- <verben-right-card-data-view>\n yeshhhhhh\n </verben-right-card-data-view> -->\n\n <verben-card-data-view-footer>\n <div class=\"flex gap-2 justify-between\">\n <div\n *ngIf=\"!vdcv.hasCurrentItem()\"\n class=\"message-log-button-container flex justify-between\"\n >\n <!-- <verbena-button\n [fontWeight]=\"'bold'\"\n [bgColor]=\"'#8E8D87'\"\n [borderRadius]=\"'4px'\"\n [textColor]=\"'#fff'\"\n [text]=\"'Delete'\"\n >\n </verbena-button> -->\n </div>\n <div\n class=\"flex {{\n vdcv.hasCurrentItem() ? 'flex-1' : ''\n }} justify-end items-center gap-5\"\n >\n <span class=\"paginator-text\"\n >{{ cardData.length }} records loaded</span\n >\n <button (click)=\"loadMore()\" class=\"load-more view-links\">\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 <verben-visible-column\n (columnsUpdated)=\"onColumnsUpdated($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"400px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n [columns]=\"visibleColumns\"\n [displayedColumns]=\"5\"\n ></verben-visible-column>\n </div>\n <div filter-content>\n <verben-table-filter\n (filtersApplied)=\"onFilterUpdated($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"420px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n tertiaryColor=\"#404040\"\n [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"\n ></verben-table-filter>\n </div>\n <div sort-content>\n <verben-sort-table\n (selectedOptions)=\"onSortUpdated($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"400px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n tertiaryColor=\"#404040\"\n [enableDragAndDrop]=\"true\"\n [sortOptions]=\"sortOptions\"\n ></verben-sort-table>\n </div>\n <div export-content>\n <lib-data-xport\n [useImportKey]=\"true\"\n [columns]=\"visibleColumnDef\"\n [data]=\"data\"\n [dataQueryFunction]=\"exportFiltersAndSorts\"\n >\n </lib-data-xport>\n <!-- <lib-data-export [data]=\"data\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export> -->\n </div>\n </verben-data-view>\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 [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\">\n Load more\n </button>\n </div>\n </div>\n</div>\n", styles: [".view-links{font-size:14px!important;color:#00f;font-weight:600;cursor:pointer}.view-links:hover{text-decoration:underline;text-underline-offset:3px}.context-banner{background-color:#d4a00773}.card-min-height{gap:10px}::ng-deep .childrenPadding{max-height:300px;overflow-y:auto}.pop-up-content{border-radius:4px;background-color:#fff;border:1px solid rgba(212,161,7,.5)}.pop-up-value{padding:10px 20px}.pop-up-content>div:nth-child(1){border-bottom:4px solid #FFE681}.enum-val{padding:2px 10px;width:100%;min-width:max-content;text-align:center}.enum-val.Active{background-color:#d6f3e6;color:#2db76f}.enum-val.InActive{background-color:#ffdfdf;color:#eb5757}.groups-summary-container{display:grid;grid-template-columns:repeat(2,1fr)}.groups-summary-container.pop-up{border:1px solid rgba(212,161,7,.5);border-radius:4px;width:27vw;min-width:250px;max-width:300px;background-color:#fff;max-height:400px;overflow-y:auto}.group-chip{background-color:#3479e980;text-align:center;border-radius:5px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.see-more-section{justify-content:right;gap:2px;align-items:center;cursor:pointer}.see-more-section>div{font-size:14px;color:#3479e9}.see-more-section:hover>div{text-decoration:underline;text-underline-offset:2px}.date-picker{padding:8px;border:1px solid #cbd5e1;background-color:inherit;border-radius:4px}::ng-deep .form-table>table>tbody>tr>td:nth-child(4){width:25%}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.DataTableComponent, selector: "lib-data-table", inputs: ["data", "columns", "dataKey", "formGroupConfig", "groupBy", "useVirtualScroll", "virtualScrollItemSize", "styleConfig"], outputs: ["rowEdit", "rowSave", "rowRevert", "rowDelete", "selectionChange"] }, { kind: "directive", type: i5.ColumnDirective, selector: "[libColumn]", inputs: ["libColumn"] }, { kind: "component", type: i5.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i5.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: i5.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: i5.LeftCardDataComponent, selector: "verben-left-card-data", inputs: ["pd", "mg", "height", "weight", "activeCss", "inActiveCss", "cardDataList", "iconCollapse", "iconExpanded", "parent", "dataId"] }, { kind: "component", type: i5.LeftCardDataViewComponent, selector: "verben-left-card-data-view", inputs: ["cardDataList"] }, { kind: "component", type: i5.RightCardDataViewComponent, selector: "verben-right-card-data-view", inputs: ["parentData", "chilData", "meth"] }, { kind: "component", type: i5.CardDataViewFooterComponent, selector: "verben-card-data-view-footer" }, { kind: "component", type: i5.SortTableComponent, selector: "verben-sort-table", inputs: ["enableDragAndDrop", "sortOptions", "resetText", "displayedOptions", "propertyText", "showMoreText", "sortButtonText", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "containerHeight"], outputs: ["selectedOptions", "resetSortData"] }, { kind: "component", type: i5.VisibleColumnComponent, selector: "verben-visible-column", inputs: ["columns", "items", "enableDragAndDrop", "displayedColumns", "showMore", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "closeColumn"], outputs: ["columnsUpdated", "resetFilter"] }, { kind: "component", type: i5.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: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.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: i5.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: i5.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.VerbenaSwitchComponent, selector: "verbena-switch", inputs: ["label", "checked", "disabled", "offColor", "onColor", "onText", "offText", "width", "height", "customStyles"], outputs: ["change"] }, { kind: "component", type: i5.VerbenPopUpComponent, selector: "verben-pop-Up", inputs: ["dropdownOpen", "dropdownWidth", "color", "customStyles", "popUpClass", "border", "borderRadius", "enableMouseLeave", "cdkPosition"], outputs: ["dropdownOpenChange", "close"] }, { kind: "component", type: i5.DataXportComponent, selector: "lib-data-xport", inputs: ["data", "columns", "useImportKey", "dataFetchUrl", "dataQueryParameters", "dataQueryFunction"], outputs: ["exportDataEvent", "exportDataRangeEvent"] }, { kind: "pipe", type: i4.DatePipe, name: "date" }] });
648
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormsComponent, deps: [{ token: i1.UtilService }, { token: i1.HttpWebRequestService }, { token: i0.ChangeDetectorRef }, { token: i2.FormBuilder }, { token: i1.EnvironmentService }, { token: i3.FormsService }], target: i0.ɵɵFactoryTarget.Component });
649
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FormsComponent, selector: "lib-forms", inputs: { pageSize: "pageSize", searchDebounceTime: "searchDebounceTime", permissionConfig: "permissionConfig" }, viewQueries: [{ propertyName: "cardDataView", first: true, predicate: ["vdcv"], descendants: true }, { propertyName: "dataView", first: true, predicate: ["vdv"], descendants: true }, { propertyName: "tableView", first: true, predicate: ["dt"], descendants: true }, { propertyName: "popUps", predicate: ["popup"], descendants: true }], ngImport: i0, template: "<div #messageLog class=\"flex flex-col gap-4 message-log-container\">\n <verben-data-view\n #vdv\n [viewState]=\"{\n isSearch: true,\n isColumn: true,\n isFilter: true,\n isSort: true,\n isExport: (!permissionConfig || permissionConfig.Actions['Export']),\n isSelect: true,\n isCreate: (!permissionConfig || permissionConfig.Actions['Create']),\n isToggle:true,\n }\"\n [buttonClass]=\"'my-custom-button-class'\"\n [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\"\n [selectedColumnCount]=\"0\"\n [selectedSortCount]=\"0\"\n [selectedFilterTableCount]=\"0\"\n (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\"\n (onSearchChange)=\"handleSearch($event)\"\n >\n <div class=\"mt-2\" table-content>\n <lib-data-table\n [dataKey]=\"'Id'\"\n class=\"form-table\"\n #dt\n [data]=\"data\"\n [columns]=\"visibleColumnDef\"\n [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\"\n >\n <ng-container libColumn=\"select\">\n <ng-template\n #cell\n let-isSelected=\"isSelected\"\n let-toggleRowSelection=\"toggleRowSelection\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"isSelected\"\n (change)=\"toggleRowSelection()\"\n />\n </ng-template>\n <ng-template\n #header\n let-allRowsSelected=\"allRowsSelected\"\n let-someRowsSelected=\"someRowsSelected\"\n let-toggleAllRows=\"toggleAllRows\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"allRowsSelected()\"\n [indeterminate]=\"someRowsSelected()\"\n (change)=\"toggleAllRows()\"\n />\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"createdAt\">\n <ng-template #cell let-value>\n {{ value | date }}\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"name\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value.Name }}\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateData=\"updateData\"\n let-value\n >\n <div class=\"width-max\">\n <verbena-input [(ngModel)]=\"value.Name\"></verbena-input>\n </div>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"groups\">\n <ng-template #cell let-row=\"row\" let-value>\n <div class=\"flex flex-col gap-1\">\n <div class=\"groups-summary-container gap-2\">\n <div\n *ngFor=\"let group of value.Entities.slice(0, 4)\"\n class=\"group-chip px-2\"\n >\n {{ group.Name }}\n </div>\n </div>\n <verben-pop-Up\n *ngIf=\"value.Entities.length > 3\"\n [customStyles]=\"{ 'z-index': '99' }\"\n [enableMouseLeave]=\"false\"\n >\n <span class=\"see-more-section flex\" dropdown-trigger>\n <div>See more</div>\n <verben-svg\n icon=\"chevron-down\"\n fill=\"var(--vbn-color-border-focus)\"\n [width]=\"10\"\n [height]=\"6\"\n ></verben-svg>\n </span>\n <div\n class=\"groups-summary-container pop-up gap-2 p-2\"\n dropdown-content\n >\n <div\n class=\"group-chip px-2\"\n *ngFor=\"let group of value.Entities\"\n >\n {{ group.Name }}\n </div>\n </div>\n </verben-pop-Up>\n </div>\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateData=\"updateData\"\n let-value\n >\n <verben-drop-down\n selectKey=\"Code\"\n display=\"chip\"\n width=\"100%\"\n placeholder=\"Select Groups\"\n [showClear]=\"true\"\n [filter]=\"true\"\n [load]=\"this.loadMoreFormEntities.bind(this)\"\n [search]=\"this.searchFormEntities.bind(this)\"\n [(options)]=\"groups\"\n optionLabel=\"Name\"\n [multiselect]=\"true\"\n [(ngModel)]=\"value.Entities\"\n [lazyLoad]=\"true\"\n [asyncLabel]=\"this.getAsyncLabel.bind(this)\"\n >\n </verben-drop-down>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"expiry\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value.ExpiryDate | date }}\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateData=\"updateData\"\n let-value\n >\n <div class=\"width-max\">\n <input\n class=\"date-picker\"\n type=\"date\"\n [(ngModel)]=\"value.ExpiryDate\"\n />\n <!-- <verbena-input [(ngModel)]=\"value.ExpiryDate\"></verbena-input> -->\n </div>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"anonymous\">\n <ng-template #cell let-row=\"row\" let-value>\n <verben-svg\n [width]=\"15\"\n [height]=\"15\"\n [icon]=\"value.IsProtected ? 'on' : 'off'\"\n ></verben-svg>\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateData=\"updateData\"\n let-value\n >\n <verbena-switch\n onText=\"\"\n offText=\"\"\n [(ngModel)]=\"value.AllowAnonymous\"\n [onColor]=\"'var(--vbn-color-text)'\"\n ></verbena-switch>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template\n #cell\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-value\n >\n <verben-pop-Up\n #popup\n [customStyles]=\"{ 'z-index': '99' }\"\n [enableMouseLeave]=\"false\"\n >\n <verben-svg\n class=\"cursor-pointer actions-icon\"\n dropdown-trigger\n icon=\"list\"\n ></verben-svg>\n <div class=\"pop-up-content flex flex-col\" dropdown-content>\n <div\n (click)=\"viewResponses(value.Code)\"\n class=\"pop-up-value cursor-pointer\"\n >\n View responses\n </div>\n <div\n *ngIf=\"\n !permissionConfig || permissionConfig.Actions['Create']\n \"\n (click)=\"toggleRowEdit(); cacheItem(value); closePopUp()\"\n class=\"pop-up-value cursor-pointer\"\n >\n Edit\n </div>\n <!-- <div class=\"pop-up-value cursor-pointer\">Delete</div> -->\n </div>\n </verben-pop-Up>\n </ng-template>\n <ng-template\n #cellEdit\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-value\n >\n <div class=\"flex gap-2 items-center\">\n <verben-svg\n icon=\"tick\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"tableSaveForm(value, toggleRowEdit)\"\n ></verben-svg>\n <verben-svg\n (click)=\"restoreCache(value); toggleRowEdit()\"\n icon=\"close-no-circle\"\n [width]=\"15\"\n [height]=\"15\"\n ></verben-svg>\n <!-- <verben-svg\n (click)=\"toggleRowEdit()\"\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n ></verben-svg> -->\n <verben-svg\n icon=\"cardViewAlt\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"goToCardView(value)\"\n ></verben-svg>\n </div>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n <div card-content>\n <verben-card-data-view\n borderRadius=\"12px\"\n #vdcv\n dataId=\"Id\"\n border=\"5px\"\n [cardDataList]=\"cardData\"\n rbgColor=\"var(--vbn-color-surface-alt)\"\n mg=\"0px\"\n >\n <verben-left-card-data-view class=\"space-y-7\">\n <verben-left-card-data\n #vlcd\n [parent]=\"vdcv\"\n dataId=\"MailAddress\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\"\n [cardDataList]=\"cardData\"\n >\n <ng-template #card let-item>\n <div\n (click)=\"formCardClicked(item)\"\n class=\"flex cursor-pointer h-[max-content]\"\n >\n <!-- <verben-svg [width]=\"15\" [height]=\"15\" (click)=\"toggleChildren(item); $event.stopPropagation()\"\n [ngClass]=\"item.children && item.children.length?'visible':'invisible'\"\n class=\"items-center flex pr-1 cursor-pointer\" [icon]=\"item.isChildrenExpanded?'minus':'plus'\" /> -->\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div\n class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\"\n [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"\n ></div>\n <div class=\"py-3 px-4 flex-1 h-[100%]\">\n <div\n class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\"\n >\n <div\n class=\"flex flex-col flex-1 card-min-height justify-between h-[100%]\"\n >\n <h3\n class=\"my-0 font-bold text-[var(--vbn-color-on-primary)] leading-[19.5px]\"\n >\n {{ item.data.Name }}\n </h3>\n <span class=\"flex items-center gap-1\">\n <span class=\"!text-[10px] font-light text-[var(--vbn-color-on-primary)]\"\n >Expiry Date:</span\n >\n <span class=\"!text-[12px]\">{{\n item.data.ExpiryDate | date\n }}</span>\n </span>\n </div>\n\n <div class=\"flex items-end h-[100%]\">\n <!-- <span class=\"enum-val {{item.data.Status}}\">{{item.data.Status}}</span> -->\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n <verben-right-card-data-view>\n <ng-template #parent>\n <div\n *ngIf=\"this.currentData\"\n class=\"flex flex-col rounded-xl h-full w-full justify-between relative space-y-4\"\n >\n <div class=\"flex flex-col gap-3\">\n <verbena-input\n name=\"Name\"\n label=\"Name\"\n (ngModelChange)=\"updateTable()\"\n [(ngModel)]=\"this.currentData.data.Name\"\n />\n <div class=\"flex flex-col gap-1\">\n <div>Expiry Date</div>\n <input\n class=\"date-picker\"\n type=\"date\"\n [(ngModel)]=\"this.currentData.data.ExpiryDate\"\n />\n </div>\n <!-- <verbena-input name=\"ExpiryDate\" label=\"Expiry Date\" (ngModelChange)=\"updateTable()\"\n [(ngModel)]=\"this.currentData.data.ExpiryDate\" /> -->\n <div class=\"flex flex-col gap-1\">\n <div>Anonymous</div>\n <verbena-switch\n onText=\"\"\n offText=\"\"\n [(ngModel)]=\"this.currentData.data.AllowAnonymous\"\n [onColor]=\"'var(--vbn-color-text)'\"\n ></verbena-switch>\n </div>\n <div class=\"flex flex-col gap-1\">\n <div>Form Groups</div>\n <verben-drop-down\n selectKey=\"Code\"\n display=\"chip\"\n width=\"100%\"\n placeholder=\"Select Groups\"\n [showClear]=\"true\"\n [filter]=\"true\"\n [load]=\"this.loadMoreFormEntities.bind(this)\"\n [search]=\"this.searchFormEntities.bind(this)\"\n [(options)]=\"groups\"\n optionLabel=\"Name\"\n [multiselect]=\"true\"\n [(ngModel)]=\"this.currentData.data.Entities\"\n [lazyLoad]=\"true\"\n [asyncLabel]=\"this.getAsyncLabel.bind(this)\"\n >\n </verben-drop-down>\n </div>\n </div>\n\n <!-- buttons -->\n <div class=\"flex justify-between bottom-8 left-0 right-0\">\n <!-- <verbena-button\n class=\"verben-delete-button\"\n text=\"Delete\"\n ></verbena-button> -->\n <div></div>\n <div class=\"flex gap-3\">\n <verbena-button\n class=\"verben-switch-button\"\n (click)=\"\n viewResponses(\n this.currentData\n ? this.currentData.data\n ? this.currentData.data.Code\n : ''\n : ''\n )\n \"\n text=\"View Responses\"\n ></verbena-button>\n <verbena-button\n class=\"verben-switch-button\"\n (click)=\"goToTableView()\"\n text=\"Switch To Table\"\n ></verbena-button>\n <verbena-button\n *ngIf=\"\n !permissionConfig || permissionConfig.Actions['Create']\n \"\n class=\"verben-primary-button\"\n (click)=\"this.saveForm()\"\n text=\"Save\"\n ></verbena-button>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-right-card-data-view>\n <!-- <verben-right-card-data-view>\n yeshhhhhh\n </verben-right-card-data-view> -->\n\n <verben-card-data-view-footer>\n <div class=\"flex gap-2 justify-between\">\n <div\n *ngIf=\"!vdcv.hasCurrentItem()\"\n class=\"message-log-button-container flex justify-between\"\n >\n <!-- <verbena-button\n [fontWeight]=\"'bold'\"\n [bgColor]=\"'var(--vbn-color-text-muted)'\"\n [borderRadius]=\"'4px'\"\n [textColor]=\"'var(--vbn-color-surface)'\"\n [text]=\"'Delete'\"\n >\n </verbena-button> -->\n </div>\n <div\n class=\"flex {{\n vdcv.hasCurrentItem() ? 'flex-1' : ''\n }} justify-end items-center gap-5\"\n >\n <span class=\"paginator-text\"\n >{{ cardData.length }} records loaded</span\n >\n <button (click)=\"loadMore()\" class=\"load-more view-links\">\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 <verben-visible-column\n (columnsUpdated)=\"onColumnsUpdated($event)\"\n [border]=\"'1px solid var(--vbn-color-primary)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"400px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"var(--vbn-color-primary)\"\n secondaryColor=\"var(--vbn-color-border-focus)\"\n [columns]=\"visibleColumns\"\n [displayedColumns]=\"5\"\n ></verben-visible-column>\n </div>\n <div filter-content>\n <verben-table-filter\n (filtersApplied)=\"onFilterUpdated($event)\"\n [border]=\"'1px solid var(--vbn-color-primary)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"420px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"var(--vbn-color-primary)\"\n secondaryColor=\"var(--vbn-color-border-focus)\"\n tertiaryColor=\"var(--vbn-color-on-primary)\"\n [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"\n ></verben-table-filter>\n </div>\n <div sort-content>\n <verben-sort-table\n (selectedOptions)=\"onSortUpdated($event)\"\n [border]=\"'1px solid var(--vbn-color-primary)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"400px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"var(--vbn-color-primary)\"\n secondaryColor=\"var(--vbn-color-border-focus)\"\n tertiaryColor=\"var(--vbn-color-on-primary)\"\n [enableDragAndDrop]=\"true\"\n [sortOptions]=\"sortOptions\"\n ></verben-sort-table>\n </div>\n <div export-content>\n <lib-data-xport\n [useImportKey]=\"true\"\n [columns]=\"visibleColumnDef\"\n [data]=\"data\"\n [dataQueryFunction]=\"exportFiltersAndSorts\"\n >\n </lib-data-xport>\n <!-- <lib-data-export [data]=\"data\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export> -->\n </div>\n </verben-data-view>\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 [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\">\n Load more\n </button>\n </div>\n </div>\n</div>\n", styles: [".view-links{font-size:14px!important;color:var(--vbn-color-border-focus);font-weight:600;cursor:pointer}.view-links:hover{text-decoration:underline;text-underline-offset:3px}.context-banner{background-color:#d4a00773}.card-min-height{gap:10px}::ng-deep .childrenPadding{max-height:300px;overflow-y:auto}.pop-up-content{border-radius:4px;background-color:var(--vbn-color-surface);border:1px solid rgba(212,161,7,.5)}.pop-up-value{padding:10px 20px}.pop-up-content>div:nth-child(1){border-bottom:4px solid var(--vbn-color-primary)}.enum-val{padding:2px 10px;width:100%;min-width:max-content;text-align:center}.enum-val.Active{background-color:var(--vbn-color-success-bg);color:var(--vbn-color-success)}.enum-val.InActive{background-color:#ffdfdf;color:var(--vbn-color-error)}.groups-summary-container{display:grid;grid-template-columns:repeat(2,1fr)}.groups-summary-container.pop-up{border:1px solid rgba(212,161,7,.5);border-radius:4px;width:27vw;min-width:250px;max-width:300px;background-color:var(--vbn-color-surface);max-height:400px;overflow-y:auto}.group-chip{background-color:#3479e980;text-align:center;border-radius:5px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.see-more-section{justify-content:right;gap:2px;align-items:center;cursor:pointer}.see-more-section>div{font-size:14px;color:var(--vbn-color-border-focus)}.see-more-section:hover>div{text-decoration:underline;text-underline-offset:2px}.date-picker{padding:8px;border:1px solid var(--vbn-color-border);background-color:inherit;border-radius:4px}::ng-deep .form-table>table>tbody>tr>td:nth-child(4){width:25%}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.DataTableComponent, selector: "lib-data-table", inputs: ["data", "columns", "dataKey", "formGroupConfig", "groupBy", "useVirtualScroll", "virtualScrollItemSize", "styleConfig"], outputs: ["rowEdit", "rowSave", "rowRevert", "rowDelete", "selectionChange"] }, { kind: "directive", type: i5.ColumnDirective, selector: "[libColumn]", inputs: ["libColumn"] }, { kind: "component", type: i5.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i5.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: i5.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: i5.LeftCardDataComponent, selector: "verben-left-card-data", inputs: ["pd", "mg", "height", "weight", "activeCss", "inActiveCss", "cardDataList", "iconCollapse", "iconExpanded", "parent", "useVirtualScroll", "virtualScrollItemSize", "dataId"] }, { kind: "component", type: i5.LeftCardDataViewComponent, selector: "verben-left-card-data-view", inputs: ["cardDataList"] }, { kind: "component", type: i5.RightCardDataViewComponent, selector: "verben-right-card-data-view", inputs: ["parentData", "chilData", "meth"] }, { kind: "component", type: i5.CardDataViewFooterComponent, selector: "verben-card-data-view-footer" }, { kind: "component", type: i5.SortTableComponent, selector: "verben-sort-table", inputs: ["enableDragAndDrop", "sortOptions", "resetText", "displayedOptions", "propertyText", "showMoreText", "sortButtonText", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "containerHeight"], outputs: ["selectedOptions", "resetSortData"] }, { kind: "component", type: i5.VisibleColumnComponent, selector: "verben-visible-column", inputs: ["columns", "items", "enableDragAndDrop", "displayedColumns", "showMore", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "closeColumn"], outputs: ["columnsUpdated", "resetFilter"] }, { kind: "component", type: i5.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: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.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: i5.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: i5.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.VerbenaSwitchComponent, selector: "verbena-switch", inputs: ["label", "checked", "disabled", "offColor", "onColor", "onText", "offText", "width", "height", "customStyles"], outputs: ["change"] }, { kind: "component", type: i5.VerbenPopUpComponent, selector: "verben-pop-Up", inputs: ["dropdownOpen", "dropdownWidth", "color", "customStyles", "popUpClass", "border", "borderRadius", "enableMouseLeave", "cdkPosition"], outputs: ["dropdownOpenChange", "close"] }, { kind: "component", type: i5.DataXportComponent, selector: "lib-data-xport", inputs: ["data", "columns", "useImportKey", "includeFooterInExport", "dataFetchUrl", "dataQueryParameters", "dataQueryFunction"], outputs: ["exportDataEvent", "exportDataRangeEvent"] }, { kind: "pipe", type: i4.DatePipe, name: "date" }] });
650
650
  }
651
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormsComponent, decorators: [{
651
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormsComponent, decorators: [{
652
652
  type: Component,
653
- args: [{ selector: 'lib-forms', template: "<div #messageLog class=\"flex flex-col gap-4 message-log-container\">\n <verben-data-view\n #vdv\n [viewState]=\"{\n isSearch: true,\n isColumn: true,\n isFilter: true,\n isSort: true,\n isExport: (!permissionConfig || permissionConfig.Actions['Export']),\n isSelect: true,\n isCreate: (!permissionConfig || permissionConfig.Actions['Create']),\n isToggle:true,\n }\"\n [buttonClass]=\"'my-custom-button-class'\"\n [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\"\n [selectedColumnCount]=\"0\"\n [selectedSortCount]=\"0\"\n [selectedFilterTableCount]=\"0\"\n (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\"\n (onSearchChange)=\"handleSearch($event)\"\n >\n <div class=\"mt-2\" table-content>\n <lib-data-table\n [dataKey]=\"'Id'\"\n class=\"form-table\"\n #dt\n [data]=\"data\"\n [columns]=\"visibleColumnDef\"\n [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\"\n >\n <ng-container libColumn=\"select\">\n <ng-template\n #cell\n let-isSelected=\"isSelected\"\n let-toggleRowSelection=\"toggleRowSelection\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"isSelected\"\n (change)=\"toggleRowSelection()\"\n />\n </ng-template>\n <ng-template\n #header\n let-allRowsSelected=\"allRowsSelected\"\n let-someRowsSelected=\"someRowsSelected\"\n let-toggleAllRows=\"toggleAllRows\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"allRowsSelected()\"\n [indeterminate]=\"someRowsSelected()\"\n (change)=\"toggleAllRows()\"\n />\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"createdAt\">\n <ng-template #cell let-value>\n {{ value | date }}\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"name\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value.Name }}\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateData=\"updateData\"\n let-value\n >\n <div class=\"width-max\">\n <verbena-input [(ngModel)]=\"value.Name\"></verbena-input>\n </div>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"groups\">\n <ng-template #cell let-row=\"row\" let-value>\n <div class=\"flex flex-col gap-1\">\n <div class=\"groups-summary-container gap-2\">\n <div\n *ngFor=\"let group of value.Entities.slice(0, 4)\"\n class=\"group-chip px-2\"\n >\n {{ group.Name }}\n </div>\n </div>\n <verben-pop-Up\n *ngIf=\"value.Entities.length > 3\"\n [customStyles]=\"{ 'z-index': '99' }\"\n [enableMouseLeave]=\"false\"\n >\n <span class=\"see-more-section flex\" dropdown-trigger>\n <div>See more</div>\n <verben-svg\n icon=\"chevron-down\"\n fill=\"#3479E9\"\n [width]=\"10\"\n [height]=\"6\"\n ></verben-svg>\n </span>\n <div\n class=\"groups-summary-container pop-up gap-2 p-2\"\n dropdown-content\n >\n <div\n class=\"group-chip px-2\"\n *ngFor=\"let group of value.Entities\"\n >\n {{ group.Name }}\n </div>\n </div>\n </verben-pop-Up>\n </div>\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateData=\"updateData\"\n let-value\n >\n <verben-drop-down\n selectKey=\"Code\"\n display=\"chip\"\n width=\"100%\"\n placeholder=\"Select Groups\"\n [showClear]=\"true\"\n [filter]=\"true\"\n [load]=\"this.loadMoreFormEntities.bind(this)\"\n [search]=\"this.searchFormEntities.bind(this)\"\n [(options)]=\"groups\"\n optionLabel=\"Name\"\n [multiselect]=\"true\"\n [(ngModel)]=\"value.Entities\"\n [lazyLoad]=\"true\"\n [asyncLabel]=\"this.getAsyncLabel.bind(this)\"\n >\n </verben-drop-down>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"expiry\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value.ExpiryDate | date }}\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateData=\"updateData\"\n let-value\n >\n <div class=\"width-max\">\n <input\n class=\"date-picker\"\n type=\"date\"\n [(ngModel)]=\"value.ExpiryDate\"\n />\n <!-- <verbena-input [(ngModel)]=\"value.ExpiryDate\"></verbena-input> -->\n </div>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"anonymous\">\n <ng-template #cell let-row=\"row\" let-value>\n <verben-svg\n [width]=\"15\"\n [height]=\"15\"\n [icon]=\"value.IsProtected ? 'on' : 'off'\"\n ></verben-svg>\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateData=\"updateData\"\n let-value\n >\n <verbena-switch\n onText=\"\"\n offText=\"\"\n [(ngModel)]=\"value.AllowAnonymous\"\n [onColor]=\"'#1A237E'\"\n ></verbena-switch>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template\n #cell\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-value\n >\n <verben-pop-Up\n #popup\n [customStyles]=\"{ 'z-index': '99' }\"\n [enableMouseLeave]=\"false\"\n >\n <verben-svg\n class=\"cursor-pointer actions-icon\"\n dropdown-trigger\n icon=\"list\"\n ></verben-svg>\n <div class=\"pop-up-content flex flex-col\" dropdown-content>\n <div\n (click)=\"viewResponses(value.Code)\"\n class=\"pop-up-value cursor-pointer\"\n >\n View responses\n </div>\n <div\n *ngIf=\"\n !permissionConfig || permissionConfig.Actions['Create']\n \"\n (click)=\"toggleRowEdit(); cacheItem(value); closePopUp()\"\n class=\"pop-up-value cursor-pointer\"\n >\n Edit\n </div>\n <!-- <div class=\"pop-up-value cursor-pointer\">Delete</div> -->\n </div>\n </verben-pop-Up>\n </ng-template>\n <ng-template\n #cellEdit\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-value\n >\n <div class=\"flex gap-2 items-center\">\n <verben-svg\n icon=\"tick\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"tableSaveForm(value, toggleRowEdit)\"\n ></verben-svg>\n <verben-svg\n (click)=\"restoreCache(value); toggleRowEdit()\"\n icon=\"close-no-circle\"\n [width]=\"15\"\n [height]=\"15\"\n ></verben-svg>\n <!-- <verben-svg\n (click)=\"toggleRowEdit()\"\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n ></verben-svg> -->\n <verben-svg\n icon=\"cardViewAlt\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"goToCardView(value)\"\n ></verben-svg>\n </div>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n <div card-content>\n <verben-card-data-view\n borderRadius=\"12px\"\n #vdcv\n dataId=\"Id\"\n border=\"5px\"\n [cardDataList]=\"cardData\"\n rbgColor=\"#f5f6f9\"\n mg=\"0px\"\n >\n <verben-left-card-data-view class=\"space-y-7\">\n <verben-left-card-data\n #vlcd\n [parent]=\"vdcv\"\n dataId=\"MailAddress\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\"\n [cardDataList]=\"cardData\"\n >\n <ng-template #card let-item>\n <div\n (click)=\"formCardClicked(item)\"\n class=\"flex cursor-pointer h-[max-content]\"\n >\n <!-- <verben-svg [width]=\"15\" [height]=\"15\" (click)=\"toggleChildren(item); $event.stopPropagation()\"\n [ngClass]=\"item.children && item.children.length?'visible':'invisible'\"\n class=\"items-center flex pr-1 cursor-pointer\" [icon]=\"item.isChildrenExpanded?'minus':'plus'\" /> -->\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div\n class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\"\n [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"\n ></div>\n <div class=\"py-3 px-4 flex-1 h-[100%]\">\n <div\n class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\"\n >\n <div\n class=\"flex flex-col flex-1 card-min-height justify-between h-[100%]\"\n >\n <h3\n class=\"my-0 font-bold text-[#404040] leading-[19.5px]\"\n >\n {{ item.data.Name }}\n </h3>\n <span class=\"flex items-center gap-1\">\n <span class=\"!text-[10px] font-light text-[#404040]\"\n >Expiry Date:</span\n >\n <span class=\"!text-[12px]\">{{\n item.data.ExpiryDate | date\n }}</span>\n </span>\n </div>\n\n <div class=\"flex items-end h-[100%]\">\n <!-- <span class=\"enum-val {{item.data.Status}}\">{{item.data.Status}}</span> -->\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n <verben-right-card-data-view>\n <ng-template #parent>\n <div\n *ngIf=\"this.currentData\"\n class=\"flex flex-col rounded-xl h-full w-full justify-between relative space-y-4\"\n >\n <div class=\"flex flex-col gap-3\">\n <verbena-input\n name=\"Name\"\n label=\"Name\"\n (ngModelChange)=\"updateTable()\"\n [(ngModel)]=\"this.currentData.data.Name\"\n />\n <div class=\"flex flex-col gap-1\">\n <div>Expiry Date</div>\n <input\n class=\"date-picker\"\n type=\"date\"\n [(ngModel)]=\"this.currentData.data.ExpiryDate\"\n />\n </div>\n <!-- <verbena-input name=\"ExpiryDate\" label=\"Expiry Date\" (ngModelChange)=\"updateTable()\"\n [(ngModel)]=\"this.currentData.data.ExpiryDate\" /> -->\n <div class=\"flex flex-col gap-1\">\n <div>Anonymous</div>\n <verbena-switch\n onText=\"\"\n offText=\"\"\n [(ngModel)]=\"this.currentData.data.AllowAnonymous\"\n [onColor]=\"'#1A237E'\"\n ></verbena-switch>\n </div>\n <div class=\"flex flex-col gap-1\">\n <div>Form Groups</div>\n <verben-drop-down\n selectKey=\"Code\"\n display=\"chip\"\n width=\"100%\"\n placeholder=\"Select Groups\"\n [showClear]=\"true\"\n [filter]=\"true\"\n [load]=\"this.loadMoreFormEntities.bind(this)\"\n [search]=\"this.searchFormEntities.bind(this)\"\n [(options)]=\"groups\"\n optionLabel=\"Name\"\n [multiselect]=\"true\"\n [(ngModel)]=\"this.currentData.data.Entities\"\n [lazyLoad]=\"true\"\n [asyncLabel]=\"this.getAsyncLabel.bind(this)\"\n >\n </verben-drop-down>\n </div>\n </div>\n\n <!-- buttons -->\n <div class=\"flex justify-between bottom-8 left-0 right-0\">\n <!-- <verbena-button\n class=\"verben-delete-button\"\n text=\"Delete\"\n ></verbena-button> -->\n <div></div>\n <div class=\"flex gap-3\">\n <verbena-button\n class=\"verben-switch-button\"\n (click)=\"\n viewResponses(\n this.currentData\n ? this.currentData.data\n ? this.currentData.data.Code\n : ''\n : ''\n )\n \"\n text=\"View Responses\"\n ></verbena-button>\n <verbena-button\n class=\"verben-switch-button\"\n (click)=\"goToTableView()\"\n text=\"Switch To Table\"\n ></verbena-button>\n <verbena-button\n *ngIf=\"\n !permissionConfig || permissionConfig.Actions['Create']\n \"\n class=\"verben-primary-button\"\n (click)=\"this.saveForm()\"\n text=\"Save\"\n ></verbena-button>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-right-card-data-view>\n <!-- <verben-right-card-data-view>\n yeshhhhhh\n </verben-right-card-data-view> -->\n\n <verben-card-data-view-footer>\n <div class=\"flex gap-2 justify-between\">\n <div\n *ngIf=\"!vdcv.hasCurrentItem()\"\n class=\"message-log-button-container flex justify-between\"\n >\n <!-- <verbena-button\n [fontWeight]=\"'bold'\"\n [bgColor]=\"'#8E8D87'\"\n [borderRadius]=\"'4px'\"\n [textColor]=\"'#fff'\"\n [text]=\"'Delete'\"\n >\n </verbena-button> -->\n </div>\n <div\n class=\"flex {{\n vdcv.hasCurrentItem() ? 'flex-1' : ''\n }} justify-end items-center gap-5\"\n >\n <span class=\"paginator-text\"\n >{{ cardData.length }} records loaded</span\n >\n <button (click)=\"loadMore()\" class=\"load-more view-links\">\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 <verben-visible-column\n (columnsUpdated)=\"onColumnsUpdated($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"400px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n [columns]=\"visibleColumns\"\n [displayedColumns]=\"5\"\n ></verben-visible-column>\n </div>\n <div filter-content>\n <verben-table-filter\n (filtersApplied)=\"onFilterUpdated($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"420px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n tertiaryColor=\"#404040\"\n [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"\n ></verben-table-filter>\n </div>\n <div sort-content>\n <verben-sort-table\n (selectedOptions)=\"onSortUpdated($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"400px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n tertiaryColor=\"#404040\"\n [enableDragAndDrop]=\"true\"\n [sortOptions]=\"sortOptions\"\n ></verben-sort-table>\n </div>\n <div export-content>\n <lib-data-xport\n [useImportKey]=\"true\"\n [columns]=\"visibleColumnDef\"\n [data]=\"data\"\n [dataQueryFunction]=\"exportFiltersAndSorts\"\n >\n </lib-data-xport>\n <!-- <lib-data-export [data]=\"data\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export> -->\n </div>\n </verben-data-view>\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 [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\">\n Load more\n </button>\n </div>\n </div>\n</div>\n", styles: [".view-links{font-size:14px!important;color:#00f;font-weight:600;cursor:pointer}.view-links:hover{text-decoration:underline;text-underline-offset:3px}.context-banner{background-color:#d4a00773}.card-min-height{gap:10px}::ng-deep .childrenPadding{max-height:300px;overflow-y:auto}.pop-up-content{border-radius:4px;background-color:#fff;border:1px solid rgba(212,161,7,.5)}.pop-up-value{padding:10px 20px}.pop-up-content>div:nth-child(1){border-bottom:4px solid #FFE681}.enum-val{padding:2px 10px;width:100%;min-width:max-content;text-align:center}.enum-val.Active{background-color:#d6f3e6;color:#2db76f}.enum-val.InActive{background-color:#ffdfdf;color:#eb5757}.groups-summary-container{display:grid;grid-template-columns:repeat(2,1fr)}.groups-summary-container.pop-up{border:1px solid rgba(212,161,7,.5);border-radius:4px;width:27vw;min-width:250px;max-width:300px;background-color:#fff;max-height:400px;overflow-y:auto}.group-chip{background-color:#3479e980;text-align:center;border-radius:5px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.see-more-section{justify-content:right;gap:2px;align-items:center;cursor:pointer}.see-more-section>div{font-size:14px;color:#3479e9}.see-more-section:hover>div{text-decoration:underline;text-underline-offset:2px}.date-picker{padding:8px;border:1px solid #cbd5e1;background-color:inherit;border-radius:4px}::ng-deep .form-table>table>tbody>tr>td:nth-child(4){width:25%}\n"] }]
653
+ args: [{ selector: 'lib-forms', template: "<div #messageLog class=\"flex flex-col gap-4 message-log-container\">\n <verben-data-view\n #vdv\n [viewState]=\"{\n isSearch: true,\n isColumn: true,\n isFilter: true,\n isSort: true,\n isExport: (!permissionConfig || permissionConfig.Actions['Export']),\n isSelect: true,\n isCreate: (!permissionConfig || permissionConfig.Actions['Create']),\n isToggle:true,\n }\"\n [buttonClass]=\"'my-custom-button-class'\"\n [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\"\n [selectedColumnCount]=\"0\"\n [selectedSortCount]=\"0\"\n [selectedFilterTableCount]=\"0\"\n (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\"\n (onSearchChange)=\"handleSearch($event)\"\n >\n <div class=\"mt-2\" table-content>\n <lib-data-table\n [dataKey]=\"'Id'\"\n class=\"form-table\"\n #dt\n [data]=\"data\"\n [columns]=\"visibleColumnDef\"\n [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\"\n >\n <ng-container libColumn=\"select\">\n <ng-template\n #cell\n let-isSelected=\"isSelected\"\n let-toggleRowSelection=\"toggleRowSelection\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"isSelected\"\n (change)=\"toggleRowSelection()\"\n />\n </ng-template>\n <ng-template\n #header\n let-allRowsSelected=\"allRowsSelected\"\n let-someRowsSelected=\"someRowsSelected\"\n let-toggleAllRows=\"toggleAllRows\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"allRowsSelected()\"\n [indeterminate]=\"someRowsSelected()\"\n (change)=\"toggleAllRows()\"\n />\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"createdAt\">\n <ng-template #cell let-value>\n {{ value | date }}\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"name\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value.Name }}\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateData=\"updateData\"\n let-value\n >\n <div class=\"width-max\">\n <verbena-input [(ngModel)]=\"value.Name\"></verbena-input>\n </div>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"groups\">\n <ng-template #cell let-row=\"row\" let-value>\n <div class=\"flex flex-col gap-1\">\n <div class=\"groups-summary-container gap-2\">\n <div\n *ngFor=\"let group of value.Entities.slice(0, 4)\"\n class=\"group-chip px-2\"\n >\n {{ group.Name }}\n </div>\n </div>\n <verben-pop-Up\n *ngIf=\"value.Entities.length > 3\"\n [customStyles]=\"{ 'z-index': '99' }\"\n [enableMouseLeave]=\"false\"\n >\n <span class=\"see-more-section flex\" dropdown-trigger>\n <div>See more</div>\n <verben-svg\n icon=\"chevron-down\"\n fill=\"var(--vbn-color-border-focus)\"\n [width]=\"10\"\n [height]=\"6\"\n ></verben-svg>\n </span>\n <div\n class=\"groups-summary-container pop-up gap-2 p-2\"\n dropdown-content\n >\n <div\n class=\"group-chip px-2\"\n *ngFor=\"let group of value.Entities\"\n >\n {{ group.Name }}\n </div>\n </div>\n </verben-pop-Up>\n </div>\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateData=\"updateData\"\n let-value\n >\n <verben-drop-down\n selectKey=\"Code\"\n display=\"chip\"\n width=\"100%\"\n placeholder=\"Select Groups\"\n [showClear]=\"true\"\n [filter]=\"true\"\n [load]=\"this.loadMoreFormEntities.bind(this)\"\n [search]=\"this.searchFormEntities.bind(this)\"\n [(options)]=\"groups\"\n optionLabel=\"Name\"\n [multiselect]=\"true\"\n [(ngModel)]=\"value.Entities\"\n [lazyLoad]=\"true\"\n [asyncLabel]=\"this.getAsyncLabel.bind(this)\"\n >\n </verben-drop-down>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"expiry\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value.ExpiryDate | date }}\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateData=\"updateData\"\n let-value\n >\n <div class=\"width-max\">\n <input\n class=\"date-picker\"\n type=\"date\"\n [(ngModel)]=\"value.ExpiryDate\"\n />\n <!-- <verbena-input [(ngModel)]=\"value.ExpiryDate\"></verbena-input> -->\n </div>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"anonymous\">\n <ng-template #cell let-row=\"row\" let-value>\n <verben-svg\n [width]=\"15\"\n [height]=\"15\"\n [icon]=\"value.IsProtected ? 'on' : 'off'\"\n ></verben-svg>\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateData=\"updateData\"\n let-value\n >\n <verbena-switch\n onText=\"\"\n offText=\"\"\n [(ngModel)]=\"value.AllowAnonymous\"\n [onColor]=\"'var(--vbn-color-text)'\"\n ></verbena-switch>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template\n #cell\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-value\n >\n <verben-pop-Up\n #popup\n [customStyles]=\"{ 'z-index': '99' }\"\n [enableMouseLeave]=\"false\"\n >\n <verben-svg\n class=\"cursor-pointer actions-icon\"\n dropdown-trigger\n icon=\"list\"\n ></verben-svg>\n <div class=\"pop-up-content flex flex-col\" dropdown-content>\n <div\n (click)=\"viewResponses(value.Code)\"\n class=\"pop-up-value cursor-pointer\"\n >\n View responses\n </div>\n <div\n *ngIf=\"\n !permissionConfig || permissionConfig.Actions['Create']\n \"\n (click)=\"toggleRowEdit(); cacheItem(value); closePopUp()\"\n class=\"pop-up-value cursor-pointer\"\n >\n Edit\n </div>\n <!-- <div class=\"pop-up-value cursor-pointer\">Delete</div> -->\n </div>\n </verben-pop-Up>\n </ng-template>\n <ng-template\n #cellEdit\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-value\n >\n <div class=\"flex gap-2 items-center\">\n <verben-svg\n icon=\"tick\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"tableSaveForm(value, toggleRowEdit)\"\n ></verben-svg>\n <verben-svg\n (click)=\"restoreCache(value); toggleRowEdit()\"\n icon=\"close-no-circle\"\n [width]=\"15\"\n [height]=\"15\"\n ></verben-svg>\n <!-- <verben-svg\n (click)=\"toggleRowEdit()\"\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n ></verben-svg> -->\n <verben-svg\n icon=\"cardViewAlt\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"goToCardView(value)\"\n ></verben-svg>\n </div>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n <div card-content>\n <verben-card-data-view\n borderRadius=\"12px\"\n #vdcv\n dataId=\"Id\"\n border=\"5px\"\n [cardDataList]=\"cardData\"\n rbgColor=\"var(--vbn-color-surface-alt)\"\n mg=\"0px\"\n >\n <verben-left-card-data-view class=\"space-y-7\">\n <verben-left-card-data\n #vlcd\n [parent]=\"vdcv\"\n dataId=\"MailAddress\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\"\n [cardDataList]=\"cardData\"\n >\n <ng-template #card let-item>\n <div\n (click)=\"formCardClicked(item)\"\n class=\"flex cursor-pointer h-[max-content]\"\n >\n <!-- <verben-svg [width]=\"15\" [height]=\"15\" (click)=\"toggleChildren(item); $event.stopPropagation()\"\n [ngClass]=\"item.children && item.children.length?'visible':'invisible'\"\n class=\"items-center flex pr-1 cursor-pointer\" [icon]=\"item.isChildrenExpanded?'minus':'plus'\" /> -->\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div\n class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\"\n [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"\n ></div>\n <div class=\"py-3 px-4 flex-1 h-[100%]\">\n <div\n class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\"\n >\n <div\n class=\"flex flex-col flex-1 card-min-height justify-between h-[100%]\"\n >\n <h3\n class=\"my-0 font-bold text-[var(--vbn-color-on-primary)] leading-[19.5px]\"\n >\n {{ item.data.Name }}\n </h3>\n <span class=\"flex items-center gap-1\">\n <span class=\"!text-[10px] font-light text-[var(--vbn-color-on-primary)]\"\n >Expiry Date:</span\n >\n <span class=\"!text-[12px]\">{{\n item.data.ExpiryDate | date\n }}</span>\n </span>\n </div>\n\n <div class=\"flex items-end h-[100%]\">\n <!-- <span class=\"enum-val {{item.data.Status}}\">{{item.data.Status}}</span> -->\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n <verben-right-card-data-view>\n <ng-template #parent>\n <div\n *ngIf=\"this.currentData\"\n class=\"flex flex-col rounded-xl h-full w-full justify-between relative space-y-4\"\n >\n <div class=\"flex flex-col gap-3\">\n <verbena-input\n name=\"Name\"\n label=\"Name\"\n (ngModelChange)=\"updateTable()\"\n [(ngModel)]=\"this.currentData.data.Name\"\n />\n <div class=\"flex flex-col gap-1\">\n <div>Expiry Date</div>\n <input\n class=\"date-picker\"\n type=\"date\"\n [(ngModel)]=\"this.currentData.data.ExpiryDate\"\n />\n </div>\n <!-- <verbena-input name=\"ExpiryDate\" label=\"Expiry Date\" (ngModelChange)=\"updateTable()\"\n [(ngModel)]=\"this.currentData.data.ExpiryDate\" /> -->\n <div class=\"flex flex-col gap-1\">\n <div>Anonymous</div>\n <verbena-switch\n onText=\"\"\n offText=\"\"\n [(ngModel)]=\"this.currentData.data.AllowAnonymous\"\n [onColor]=\"'var(--vbn-color-text)'\"\n ></verbena-switch>\n </div>\n <div class=\"flex flex-col gap-1\">\n <div>Form Groups</div>\n <verben-drop-down\n selectKey=\"Code\"\n display=\"chip\"\n width=\"100%\"\n placeholder=\"Select Groups\"\n [showClear]=\"true\"\n [filter]=\"true\"\n [load]=\"this.loadMoreFormEntities.bind(this)\"\n [search]=\"this.searchFormEntities.bind(this)\"\n [(options)]=\"groups\"\n optionLabel=\"Name\"\n [multiselect]=\"true\"\n [(ngModel)]=\"this.currentData.data.Entities\"\n [lazyLoad]=\"true\"\n [asyncLabel]=\"this.getAsyncLabel.bind(this)\"\n >\n </verben-drop-down>\n </div>\n </div>\n\n <!-- buttons -->\n <div class=\"flex justify-between bottom-8 left-0 right-0\">\n <!-- <verbena-button\n class=\"verben-delete-button\"\n text=\"Delete\"\n ></verbena-button> -->\n <div></div>\n <div class=\"flex gap-3\">\n <verbena-button\n class=\"verben-switch-button\"\n (click)=\"\n viewResponses(\n this.currentData\n ? this.currentData.data\n ? this.currentData.data.Code\n : ''\n : ''\n )\n \"\n text=\"View Responses\"\n ></verbena-button>\n <verbena-button\n class=\"verben-switch-button\"\n (click)=\"goToTableView()\"\n text=\"Switch To Table\"\n ></verbena-button>\n <verbena-button\n *ngIf=\"\n !permissionConfig || permissionConfig.Actions['Create']\n \"\n class=\"verben-primary-button\"\n (click)=\"this.saveForm()\"\n text=\"Save\"\n ></verbena-button>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-right-card-data-view>\n <!-- <verben-right-card-data-view>\n yeshhhhhh\n </verben-right-card-data-view> -->\n\n <verben-card-data-view-footer>\n <div class=\"flex gap-2 justify-between\">\n <div\n *ngIf=\"!vdcv.hasCurrentItem()\"\n class=\"message-log-button-container flex justify-between\"\n >\n <!-- <verbena-button\n [fontWeight]=\"'bold'\"\n [bgColor]=\"'var(--vbn-color-text-muted)'\"\n [borderRadius]=\"'4px'\"\n [textColor]=\"'var(--vbn-color-surface)'\"\n [text]=\"'Delete'\"\n >\n </verbena-button> -->\n </div>\n <div\n class=\"flex {{\n vdcv.hasCurrentItem() ? 'flex-1' : ''\n }} justify-end items-center gap-5\"\n >\n <span class=\"paginator-text\"\n >{{ cardData.length }} records loaded</span\n >\n <button (click)=\"loadMore()\" class=\"load-more view-links\">\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 <verben-visible-column\n (columnsUpdated)=\"onColumnsUpdated($event)\"\n [border]=\"'1px solid var(--vbn-color-primary)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"400px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"var(--vbn-color-primary)\"\n secondaryColor=\"var(--vbn-color-border-focus)\"\n [columns]=\"visibleColumns\"\n [displayedColumns]=\"5\"\n ></verben-visible-column>\n </div>\n <div filter-content>\n <verben-table-filter\n (filtersApplied)=\"onFilterUpdated($event)\"\n [border]=\"'1px solid var(--vbn-color-primary)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"420px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"var(--vbn-color-primary)\"\n secondaryColor=\"var(--vbn-color-border-focus)\"\n tertiaryColor=\"var(--vbn-color-on-primary)\"\n [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"\n ></verben-table-filter>\n </div>\n <div sort-content>\n <verben-sort-table\n (selectedOptions)=\"onSortUpdated($event)\"\n [border]=\"'1px solid var(--vbn-color-primary)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"400px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"var(--vbn-color-primary)\"\n secondaryColor=\"var(--vbn-color-border-focus)\"\n tertiaryColor=\"var(--vbn-color-on-primary)\"\n [enableDragAndDrop]=\"true\"\n [sortOptions]=\"sortOptions\"\n ></verben-sort-table>\n </div>\n <div export-content>\n <lib-data-xport\n [useImportKey]=\"true\"\n [columns]=\"visibleColumnDef\"\n [data]=\"data\"\n [dataQueryFunction]=\"exportFiltersAndSorts\"\n >\n </lib-data-xport>\n <!-- <lib-data-export [data]=\"data\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export> -->\n </div>\n </verben-data-view>\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 [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\">\n Load more\n </button>\n </div>\n </div>\n</div>\n", styles: [".view-links{font-size:14px!important;color:var(--vbn-color-border-focus);font-weight:600;cursor:pointer}.view-links:hover{text-decoration:underline;text-underline-offset:3px}.context-banner{background-color:#d4a00773}.card-min-height{gap:10px}::ng-deep .childrenPadding{max-height:300px;overflow-y:auto}.pop-up-content{border-radius:4px;background-color:var(--vbn-color-surface);border:1px solid rgba(212,161,7,.5)}.pop-up-value{padding:10px 20px}.pop-up-content>div:nth-child(1){border-bottom:4px solid var(--vbn-color-primary)}.enum-val{padding:2px 10px;width:100%;min-width:max-content;text-align:center}.enum-val.Active{background-color:var(--vbn-color-success-bg);color:var(--vbn-color-success)}.enum-val.InActive{background-color:#ffdfdf;color:var(--vbn-color-error)}.groups-summary-container{display:grid;grid-template-columns:repeat(2,1fr)}.groups-summary-container.pop-up{border:1px solid rgba(212,161,7,.5);border-radius:4px;width:27vw;min-width:250px;max-width:300px;background-color:var(--vbn-color-surface);max-height:400px;overflow-y:auto}.group-chip{background-color:#3479e980;text-align:center;border-radius:5px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.see-more-section{justify-content:right;gap:2px;align-items:center;cursor:pointer}.see-more-section>div{font-size:14px;color:var(--vbn-color-border-focus)}.see-more-section:hover>div{text-decoration:underline;text-underline-offset:2px}.date-picker{padding:8px;border:1px solid var(--vbn-color-border);background-color:inherit;border-radius:4px}::ng-deep .form-table>table>tbody>tr>td:nth-child(4){width:25%}\n"] }]
654
654
  }], ctorParameters: () => [{ type: i1.UtilService }, { type: i1.HttpWebRequestService }, { type: i0.ChangeDetectorRef }, { type: i2.FormBuilder }, { type: i1.EnvironmentService }, { type: i3.FormsService }], propDecorators: { cardDataView: [{
655
655
  type: ViewChild,
656
656
  args: ['vdcv']
@@ -670,4 +670,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
670
670
  }], permissionConfig: [{
671
671
  type: Input
672
672
  }] } });
673
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvY29tcG9uZW50cy9mb3Jtcy9mb3Jtcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm1zL2Zvcm1zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsS0FBSyxFQUdMLFNBQVMsRUFDVCxZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFJdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUlMLGNBQWMsRUFNZixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsYUFBYSxFQUFvQixXQUFXLEVBQWlDLGNBQWMsRUFBRSxrQkFBa0IsRUFBdUIsdUJBQXVCLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFak8sT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7O0FBRy9DLElBQUssZ0JBS0o7QUFMRCxXQUFLLGdCQUFnQjtJQUNuQixpQ0FBYSxDQUFBO0lBQ2IsNENBQXdCLENBQUE7SUFDeEIsMkNBQXVCLENBQUE7SUFDdkIsOENBQTBCLENBQUE7QUFDNUIsQ0FBQyxFQUxJLGdCQUFnQixLQUFoQixnQkFBZ0IsUUFLcEI7QUFFRCxJQUFLLGVBS0o7QUFMRCxXQUFLLGVBQWU7SUFDbEIsZ0NBQWEsQ0FBQTtJQUNiLDBDQUF1QixDQUFBO0lBQ3ZCLCtDQUE0QixDQUFBO0lBQzVCLDRDQUF5QixDQUFBO0FBQzNCLENBQUMsRUFMSSxlQUFlLEtBQWYsZUFBZSxRQUtuQjtBQUVELElBQUssV0FLSjtBQUxELFdB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QztRQUN6QixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVU7UUFDckIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN6QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRCxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQztZQUNuQyxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUM7WUFDdkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUMsY0FBYyxDQUFDO1FBQ2pELENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNuQyxDQUFDO3dHQS90QlUsY0FBYzs0RkFBZCxjQUFjLGtmQ3ZEM0IsNnJtQkEwaEJBOzs0RkRuZWEsY0FBYztrQkFMMUIsU0FBUzsrQkFDRSxXQUFXOzBPQVVGLFlBQVk7c0JBQTlCLFNBQVM7dUJBQUMsTUFBTTtnQkFDQyxRQUFRO3NCQUF6QixTQUFTO3VCQUFDLEtBQUs7Z0JBQ0MsU0FBUztzQkFBekIsU0FBUzt1QkFBQyxJQUFJO2dCQUNRLE1BQU07c0JBQTVCLFlBQVk7dUJBQUMsT0FBTztnQkFDWixRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBRdWVyeUxpc3QsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgRm9ybUJ1aWxkZXJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBDYXJkRGF0YSxcbiAgQ2FyZERhdGFWaWV3Q29tcG9uZW50LFxuICBDb2x1bW5EZWZpbml0aW9uLFxuICBEYXRhRmlsdGVyVHlwZSxcbiAgRGF0YVRhYmxlQ29tcG9uZW50LFxuICBEYXRhVmlld0NvbXBvbmVudCxcbiAgRHJvcGRvd25Mb2FkRXZlbnQsXG4gIElEYXRhRmlsdGVyLFxuICBWZXJiZW5Qb3BVcENvbXBvbmVudFxufSBmcm9tICd2ZXJiZW4tbmctdWknO1xuaW1wb3J0IHsgRXJyb3JSZXNwb25zZSwgRm9ybSwgRm9ybUVudGl0eSwgT2JqZWN0U3RhdGUsIFBhZ2VkUmVzdWx0LCBQZXJtaXNzaW9uQ29uZmlnLCBTZWFyY2hPcGVyYXRvciwgU2VhcmNoUHJvcGVydHlTaWduLCBTZWFyY2hQcm9wZXJ0eVZhbHVlLCBTZWFyY2hQcm9wZXJ0eVZhbHVlVHlwZSwgU29ydERpcmVjdGlvbiB9IGZyb20gJ3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL21vZGVscyc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudFNlcnZpY2UsIEh0dHBXZWJSZXF1ZXN0U2VydmljZSwgVXRpbFNlcnZpY2UgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBiYXNlU3R5bGUgfSBmcm9tICcuL2Jhc2UtdGFibGUtc3R5bGUnO1xuaW1wb3J0IHsgRm9ybXNTZXJ2aWNlIH0gZnJvbSAnLi9mb3Jtcy5zZXJ2aWNlJztcblxuZW51bSBGb3JtUHJvcGVydHlOYW1lIHtcbiAgTmFtZSA9ICdOYW1lJyxcbiAgQ3JlYXRlZEF0ID0gJ0NyZWF0ZWQgQXQnLFxuICBBbm9ueW1vdXMgPSAnQW5vbnltb3VzJyxcbiAgRXhwaXJ5RGF0ZSA9ICdFeHBpcnkgRGF0ZScsXG59XG5cbmVudW0gRm9ybVByb3BlcnR5TWFwIHtcbiAgTmFtZSA9ICdOYW1lJyxcbiAgQ3JlYXRlZEF0ID0gJ0NyZWF0ZWRBdCcsXG4gIEFub255bW91cyA9ICdBbGxvd0Fub255bW91cycsXG4gIEV4cGlyeURhdGUgPSAnRXhwaXJ5RGF0ZScsXG59XG5cbmVudW0gRmlsdGVyVHlwZXMge1xuICBCZWZvcmUgPSBTZWFyY2hQcm9wZXJ0eVNpZ24uTFQsXG4gIE9uID0gU2VhcmNoUHJvcGVydHlTaWduLkVRLFxuICBBZnRlciA9IFNlYXJjaFByb3BlcnR5U2lnbi5HVCxcbiAgTkVRID0gU2VhcmNoUHJvcGVydHlTaWduLk5FUSxcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWZvcm1zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm1zLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2Zvcm1zLmNvbXBvbmVudC5jc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBGb3Jtc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHZpc2libGVDb2x1bW5EZWY6IENvbHVtbkRlZmluaXRpb248Rm9ybT5bXSA9IFtdO1xuICBzdHlsZXMgPSBiYXNlU3R5bGU7XG4gIGRhdGE6IEZvcm1bXSA9IFtdO1xuICBjYXJkRGF0YTogQ2FyZERhdGFbXSA9IFtdO1xuICBjdXJyZW50RGF0YTogQ2FyZERhdGEgfCBudWxsID0gbnVsbDtcbiAgQFZpZXdDaGlsZCgndmRjdicpIGNhcmREYXRhVmlldyE6IENhcmREYXRhVmlld0NvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgndmR2JykgZGF0YVZpZXchOiBEYXRhVmlld0NvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnZHQnKSB0YWJsZVZpZXchOiBEYXRhVGFibGVDb21wb25lbnQ8Rm9ybT47XG4gIEBWaWV3Q2hpbGRyZW4oJ3BvcHVwJykgcG9wVXBzITogUXVlcnlMaXN0PFZlcmJlblBvcFVwQ29tcG9uZW50PjtcbiAgQElucHV0KCkgcGFnZVNpemU6IG51bWJlciA9IDIwO1xuICBASW5wdXQoKSBzZWFyY2hEZWJvdW5jZVRpbWU6IG51bWJlciA9IDUwMDtcbiAgQElucHV0KCkgcGVybWlzc2lvbkNvbmZpZzogUGVybWlzc2lvbkNvbmZpZyB8IG51bGwgPSBudWxsO1xuICBwYWdlU3RhdGU6IFBhZ2VkUmVzdWx0PEZvcm0+IHwgbnVsbCA9IG51bGw7XG4gIGlzT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBvcGVuRHJvcGRvd25JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGlzR3JvdXBPcGVuOiBib29sZWFuID0gZmFsc2U7XG4gIG9wZW5Hcm91cERyb3Bkb3duSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBjdXJyZW50RmlsdGVyczogSURhdGFGaWx0ZXJbXSA9IFtdO1xuICBjdXJyZW50U29ydHM6IElEYXRhRmlsdGVyW10gPSBbXTtcbiAgc2VhcmNoVGVybSQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIGdyb3VwczogRm9ybUVudGl0eVtdID0gW107XG4gIHZpc2libGVDb2x1bW5zOiBJRGF0YUZpbHRlcltdID0gW107XG5cbiAgZmlsdGVyQXJyYXk6IElEYXRhRmlsdGVyW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogRm9ybVByb3BlcnR5TmFtZS5OYW1lLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuU3RyaW5nLFxuICAgICAgY2hlY2tlZDogZmFsc2UsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBGb3JtUHJvcGVydHlOYW1lLkNyZWF0ZWRBdCxcbiAgICAgIHR5cGU6IERhdGFGaWx0ZXJUeXBlLkRhdGUsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IEZvcm1Qcm9wZXJ0eU5hbWUuQW5vbnltb3VzLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuQm9vbCxcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogRm9ybVByb3BlcnR5TmFtZS5FeHBpcnlEYXRlLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuRGF0ZSxcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIH0sXG4gIF07XG5cbiAgc29ydE9wdGlvbnM6IElEYXRhRmlsdGVyW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogRm9ybVByb3BlcnR5TmFtZS5OYW1lLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuU3RyaW5nLFxuICAgICAgY2hlY2tlZDogZmFsc2UsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBGb3JtUHJvcGVydHlOYW1lLkNyZWF0ZWRBdCxcbiAgICAgIHR5cGU6IERhdGFGaWx0ZXJUeXBlLkRhdGUsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IEZvcm1Qcm9wZXJ0eU5hbWUuQW5vbnltb3VzLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuQm9vbCxcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogRm9ybVByb3BlcnR5TmFtZS5FeHBpcnlEYXRlLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuRGF0ZSxcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIH0sXG4gIF07XG5cbiAgcHJpdmF0ZSBjdXJyZW50U2VhcmNoVGVybTogc3RyaW5nID0gJyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB1dGlsU2VydmljZTogVXRpbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZXJ2ZXI6IEh0dHBXZWJSZXF1ZXN0U2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBlbnZTdmM6IEVudmlyb25tZW50U2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1zU3ZjOiBGb3Jtc1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy52aXNpYmxlQ29sdW1uRGVmID0gZm9ybXNTdmMuZm9ybUNvbHVtbnM7XG4gICAgdGhpcy52aXNpYmxlQ29sdW1ucyA9IGZvcm1zU3ZjLmZvcm1Db2x1bW5zLm1hcCgoY29sKSA9PiAoe1xuICAgICAgY2hlY2tlZDogdHJ1ZSxcbiAgICAgIG5hbWU6IHR5cGVvZiBjb2wuaGVhZGVyID09PSAnc3RyaW5nJyA/IGNvbC5oZWFkZXIgOiBjb2wuaWQsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5Cb29sLFxuICAgIH0pKTtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZ2V0Rm9ybUVudGl0aWVzKCkudGhlbigocmVzKSA9PiB7XG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBzID0gcmVzO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGZvcm1zID0gYXdhaXQgdGhpcy5nZXRBbGxGb3JtcygpO1xuICAgIGlmIChmb3Jtcykge1xuICAgICAgdGhpcy5kYXRhID0gZm9ybXMubWFwKCh4KSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ueCxcbiAgICAgICAgICBJZDogeC5Db2RlLFxuICAgICAgICAgIGlkOiB4LkNvZGUsXG4gICAgICAgICAgRXhwaXJ5RGF0ZTogbmV3IERhdGUoeC5FeHBpcnlEYXRlLnRvU3RyaW5nKCkpLFxuICAgICAgICAgIEVudGl0aWVzOiB4LkVudGl0aWVzLm1hcCgoeSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4ueSxcbiAgICAgICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5VbmNoYW5nZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICB0aGlzLnNldFVwQ2FyZERhdGEoKTtcbiAgICB9XG4gICAgdGhpcy5zZWFyY2hUZXJtJFxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuc2VhcmNoRGVib3VuY2VUaW1lKSkgLy8gQWRqdXN0IGRlYm91bmNlIHRpbWUgaGVyZSAoaW4gbXMpXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jIChzZWFyY2hUZXJtKSA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudFNlYXJjaFRlcm0gPSBzZWFyY2hUZXJtO1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbHRlcnNBbmRTb3J0cyh0cnVlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0Rm9ybUVudGl0aWVzKCk6IFByb21pc2U8Rm9ybUVudGl0eVtdIHwgdW5kZWZpbmVkPiB7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZXJ2ZXIuZ2V0KFxuICAgICAgYEdldEZvcm1FbnRpdGllcy8wLyR7dGhpcy5wYWdlU2l6ZX0vQ3JlYXRlZEF0LyR7U29ydERpcmVjdGlvbi5EZXNjfWAsXG4gICAgKTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciByZXN1bHQgPSAocmVzIGFzIFBhZ2VkUmVzdWx0PEZvcm1FbnRpdHk+KS5SZXN1bHQ7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxvYWRNb3JlRm9ybUVudGl0aWVzKGV2ZW50OiBEcm9wZG93bkxvYWRFdmVudCk6IFByb21pc2U8Rm9ybUVudGl0eVtdPiB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZXJ2ZXIuZ2V0KFxuICAgICAgYEdldEZvcm1FbnRpdGllcy8ke2V2ZW50LmxvYWRUaW1lcyAqIHRoaXMucGFnZVNpemV9LyR7dGhpcy5wYWdlU2l6ZX0vQ3JlYXRlZEF0LyR7U29ydERpcmVjdGlvbi5EZXNjfWBcbiAgICApO1xuICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciByZXN1bHQgPSAocmVzIGFzIFBhZ2VkUmVzdWx0PEZvcm1FbnRpdHk+KS5SZXN1bHQ7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuICBhc3luYyBzZWFyY2hGb3JtRW50aXRpZXMoXG4gICAgZGF0YTogc3RyaW5nLFxuICAgIGV2ZW50OiBEcm9wZG93bkxvYWRFdmVudFxuICApOiBQcm9taXNlPEZvcm1FbnRpdHlbXT4ge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VydmVyLmdldChcbiAgICAgIGBHZXRGb3JtRW50aXRpZXNXaXRoUGFyYW0vJHtkYXRhfS8ke2V2ZW50LmxvYWRUaW1lcyAqIHRoaXMucGFnZVNpemVcbiAgICAgIH0vJHt0aGlzLnBhZ2VTaXplfWBcbiAgICApO1xuICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciByZXN1bHQgPSAocmVzIGFzIFBhZ2VkUmVzdWx0PEZvcm1FbnRpdHk+KS5SZXN1bHQ7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldEFzeW5jTGFiZWwodmFsdWU6IGFueSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHZhbHVlID8gdmFsdWUuTmFtZSA6ICcnO1xuICB9XG5cbiAgYXN5bmMgZ2V0QWxsRm9ybXMoKTogUHJvbWlzZTxGb3JtW10gfCB1bmRlZmluZWQ+IHtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnNlcnZlci5nZXQoXG4gICAgICBgR2V0Rm9ybXMvMC8ke3RoaXMucGFnZVNpemV9L0NyZWF0ZWRBdC8ke1NvcnREaXJlY3Rpb24uRGVzY31gLFxuICAgICAgdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUElcbiAgICApO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGZhbHNlKTtcbiAgICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYWdlU3RhdGUgPSByZXMgYXMgUGFnZWRSZXN1bHQ8Rm9ybT47XG4gICAgICB2YXIgcmVzdWx0ID0gKHJlcyBhcyBQYWdlZFJlc3VsdDxGb3JtPikuUmVzdWx0O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsb2FkTW9yZSgpIHtcbiAgICBpZiAoIXRoaXMucGFnZVN0YXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICAgIGNvbnN0IHJlcyA9XG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJzLmxlbmd0aCA+IDAgfHxcbiAgICAgICAgdGhpcy5jdXJyZW50U29ydHMubGVuZ3RoID4gMCB8fFxuICAgICAgICB0aGlzLmN1cnJlbnRTZWFyY2hUZXJtLnRyaW0oKS5sZW5ndGggPiAwXG4gICAgICAgID8gYXdhaXQgdGhpcy5sb2FkTW9yZUZpbHRlcnNBbmRTb3J0cygpXG4gICAgICAgIDogYXdhaXQgdGhpcy5zZXJ2ZXIuZ2V0KFxuICAgICAgICAgIGBHZXRGb3Jtcy8ke3RoaXMucGFnZVN0YXRlLlNraXB9LyR7dGhpcy5wYWdlU2l6ZX0vQ3JlYXRlZEF0LyR7U29ydERpcmVjdGlvbi5EZXNjfWAsXG4gICAgICAgICAgdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUElcbiAgICAgICAgKTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYWdlU3RhdGUgPSByZXMgYXMgUGFnZWRSZXN1bHQ8Rm9ybT47XG4gICAgICB2YXIgcmVzdWx0ID0gKHJlcyBhcyBQYWdlZFJlc3VsdDxGb3JtPikuUmVzdWx0O1xuICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLmNvbmNhdChcbiAgICAgICAgcmVzdWx0Lm1hcCgoeCkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi54LFxuICAgICAgICAgICAgaWQ6IHguQ29kZSxcbiAgICAgICAgICAgIElkOiB4LkNvZGUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICB0aGlzLnNldFVwQ2FyZERhdGFFeHRyYShyZXN1bHQpO1xuICAgIH1cbiAgfVxuXG4gIHNldFVwQ2FyZERhdGEoKSB7XG4gICAgY29uc3QgY2FyZERhdGE6IENhcmREYXRhW10gPSB0aGlzLmRhdGEubWFwKCh4KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIHRpdGxlOiB4Lk5hbWUsXG4gICAgICAgIGRhdGE6IHgsXG4gICAgICAgIGJvZHk6IFtdLFxuICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMuY2FyZERhdGEgPSBjYXJkRGF0YTtcbiAgfVxuXG4gIHNldFVwQ2FyZERhdGFFeHRyYShiYXNlRGF0YTogRm9ybVtdKSB7XG4gICAgY29uc3QgY2FyZERhdGE6IENhcmREYXRhW10gPSBiYXNlRGF0YS5tYXAoKHgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgdGl0bGU6IHguTmFtZSxcbiAgICAgICAgZGF0YTogeCxcbiAgICAgICAgYm9keTogW10sXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5jYXJkRGF0YSA9IHRoaXMuY2FyZERhdGEuY29uY2F0KGNhcmREYXRhKTtcbiAgfVxuXG4gIGdvVG9DYXJkVmlldyhkYXRhOiBGb3JtKSB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuY2FyZERhdGEuZmluZCgoeCkgPT4geC5kYXRhID09IGRhdGEpO1xuICAgIGlmIChpdGVtKSB7XG4gICAgICB0aGlzLmZvcm1DYXJkQ2xpY2tlZChpdGVtLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBnb1RvVGFibGVWaWV3KCkge1xuICAgIGlmICghdGhpcy5jdXJyZW50RGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmRhdGFWaWV3LnRvZ2dsZVZpZXcoKTtcbiAgICBjb25zdCBpZCA9IHRoaXMuY3VycmVudERhdGEuZGF0YSA/IHRoaXMuY3VycmVudERhdGEuZGF0YS5JZCA6ICcnO1xuICAgIGlmIChpZC50cmltKCkubGVuZ3RoID4gMCAmJiAhdGhpcy50YWJsZVZpZXcuaXNSb3dFZGl0aW5nKGlkKSkge1xuICAgICAgdGhpcy50YWJsZVZpZXcudG9nZ2xlUm93RWRpdChpZCk7XG4gICAgfVxuICB9XG5cbiAgdmlld1Jlc3BvbnNlcyhjb2RlOiBzdHJpbmcpIHtcbiAgICBpZiAoY29kZS50cmltKCkubGVuZ3RoID09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gdGhpcy5vblZpZXdQcm9jZXNzQ2xpY2tlZC5lbWl0KGNvZGUpO1xuICAgIHRoaXMuY2xvc2VQb3BVcCgpO1xuICB9XG5cbiAgZm9ybUNhcmRDbGlja2VkKGl0ZW06IENhcmREYXRhLCB0b2dnbGVWaWV3OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLmN1cnJlbnREYXRhID0gdGhpcy5jYXJkRGF0YVZpZXcub25JdGVtQ2xpY2soaXRlbSk7XG4gICAgaWYgKHRvZ2dsZVZpZXcpIHtcbiAgICAgIHRoaXMuZGF0YVZpZXcudG9nZ2xlVmlldygpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmVGb3JtKCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnREYXRhKSB7XG4gICAgICB2YXIgZm9ybTogRm9ybSA9IHRoaXMuY3VycmVudERhdGEuZGF0YSBhcyBGb3JtO1xuXG4gICAgICBpZiAodGhpcy5jdXJyZW50RGF0YS5kYXRhLk5hbWUudHJpbSgpLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd0luZm8oJ05hbWUgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGZvcm0uRGF0YVN0YXRlID1cbiAgICAgICAgZm9ybS5EYXRhU3RhdGUgPT0gT2JqZWN0U3RhdGUuTmV3XG4gICAgICAgICAgPyBPYmplY3RTdGF0ZS5OZXdcbiAgICAgICAgICA6IE9iamVjdFN0YXRlLkNoYW5nZWQ7XG4gICAgICBmb3JtLklkID0gJyc7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VydmVyLnBvc3QoXG4gICAgICAgIGBTYXZlRm9ybXNgLFxuICAgICAgICBbZm9ybV0sXG4gICAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgICApO1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICAgICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ0Zvcm0gc2F2ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlcyBhcyBGb3JtW107XG4gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHZhciB1c2VyUmVzdWx0ID0gcmVzdWx0WzBdO1xuICAgICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IHRoaXMuZGF0YS5maW5kSW5kZXgoXG4gICAgICAgICAgICAoeCkgPT4geCA9PSB0aGlzLmN1cnJlbnREYXRhPy5kYXRhXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoaXRlbUluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLkNvZGUgPSB1c2VyUmVzdWx0LkNvZGU7XG4gICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5JZCA9IHVzZXJSZXN1bHQuQ29kZTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLmlkID0gdXNlclJlc3VsdC5Db2RlO1xuICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uRGF0YVN0YXRlID0gdXNlclJlc3VsdC5EYXRhU3RhdGU7XG4gICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5UZW5hbnRJZCA9IHVzZXJSZXN1bHQuVGVuYW50SWQ7XG4gICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5TZXJ2aWNlTmFtZSA9IHVzZXJSZXN1bHQuU2VydmljZU5hbWU7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEubWFwKCh4KSA9PiB4KTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVJdGVtKHRoaXMuZGF0YVtpdGVtSW5kZXhdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgYXN5bmMgdGFibGVTYXZlRm9ybShmb3JtOiBGb3JtLCBjYWxsQmFjazogKCkgPT4gYW55KSB7XG4gICAgaWYgKGZvcm0uTmFtZS50cmltKCkubGVuZ3RoID09IDApIHtcbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd0luZm8oJ05hbWUgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvcm0uRGF0YVN0YXRlID1cbiAgICAgIGZvcm0uRGF0YVN0YXRlID09IE9iamVjdFN0YXRlLk5ldyA/IE9iamVjdFN0YXRlLk5ldyA6IE9iamVjdFN0YXRlLkNoYW5nZWQ7XG4gICAgZm9ybS5JZCA9ICcnO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VydmVyLnBvc3QoXG4gICAgICBgU2F2ZUZvcm1zYCxcbiAgICAgIFtmb3JtXSxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgKTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93U3VjY2VzcygnRm9ybSBzYXZlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlcyBhcyBGb3JtW107XG4gICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIHVzZXJSZXN1bHQgPSByZXN1bHRbMF07XG4gICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IHRoaXMuZGF0YS5maW5kSW5kZXgoKHgpID0+IHggPT0gZm9ybSk7XG4gICAgICAgIGlmIChpdGVtSW5kZXggPiAtMSkge1xuICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLkNvZGUgPSB1c2VyUmVzdWx0LkNvZGU7XG4gICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uSWQgPSB1c2VyUmVzdWx0LkNvZGU7XG4gICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uaWQgPSB1c2VyUmVzdWx0LkNvZGU7XG4gICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uRGF0YVN0YXRlID0gdXNlclJlc3VsdC5EYXRhU3RhdGU7XG4gICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uVGVuYW50SWQgPSB1c2VyUmVzdWx0LlRlbmFudElkO1xuICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlNlcnZpY2VOYW1lID0gdXNlclJlc3VsdC5TZXJ2aWNlTmFtZTtcbiAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEubWFwKCh4KSA9PiB4KTtcbiAgICAgICAgICB0aGlzLmNhY2hlSXRlbSh0aGlzLmRhdGFbaXRlbUluZGV4XSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FsbEJhY2soKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGVUYWJsZSgpIHtcbiAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEubWFwKCh4KSA9PiB4KTtcbiAgfVxuXG4gIHVwZGF0ZUl0ZW0odmFsdWU6IGFueSwga2V5OiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBba2V5XTogdmFsdWUsXG4gICAgfTtcbiAgfVxuXG4gIGNsb3NlUG9wVXAoKSB7XG4gICAgdGhpcy5vcGVuRHJvcGRvd25JZCA9IG51bGw7XG4gICAgdGhpcy5wb3BVcHMuZm9yRWFjaCgocG9wVXApID0+IHtcbiAgICAgIGlmIChwb3BVcC5kcm9wZG93bk9wZW4pIHtcbiAgICAgICAgcG9wVXAudG9nZ2xlRHJvcGRvd24oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBjbG9zZUdyb3VwUG9wVXAoKSB7XG4gICAgdGhpcy5vcGVuR3JvdXBEcm9wZG93bklkID0gbnVsbDtcbiAgfVxuXG4gIG9uVmlld0NoYW5nZShpc0dyaWRWaWV3OiBib29sZWFuKTogdm9pZCB7IH1cblxuICBvblN0YXRlQ2hhbmdlKGV2ZW50OiB7IGtleTogc3RyaW5nOyB2YWx1ZTogYm9vbGVhbiB9KTogdm9pZCB7XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ2NyZWF0ZSc6XG4gICAgICAgIHZhciBuZXdGb3JtOiBGb3JtID0ge1xuICAgICAgICAgIE5hbWU6ICcnLFxuICAgICAgICAgIFRlbmFudElkOiAnJyxcbiAgICAgICAgICBTZXJ2aWNlTmFtZTogJycsXG4gICAgICAgICAgaWQ6ICh0aGlzLmNhcmREYXRhLmxlbmd0aCArIDEpLnRvU3RyaW5nKCksXG4gICAgICAgICAgSWQ6ICh0aGlzLmNhcmREYXRhLmxlbmd0aCArIDEpLnRvU3RyaW5nKCksXG4gICAgICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgICBDb2RlOiAnJyxcbiAgICAgICAgICBFbnRpdGllczogW10sXG4gICAgICAgICAgSXNWYWxpZDogZmFsc2UsXG4gICAgICAgICAgQWxsb3dBbm9ueW1vdXM6IGZhbHNlLFxuICAgICAgICAgIFdvcmtmbG93OiAnJyxcbiAgICAgICAgICBVUkw6ICcnLFxuICAgICAgICAgIER1cmF0aW9uOiAwLFxuICAgICAgICAgIEV4cGlyeURhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgRm9ybVZhbHVlc01vZGlmaWVkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY2FyZERhdGE6IENhcmREYXRhID0ge1xuICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICB0aXRsZTogbmV3Rm9ybS5OYW1lLFxuICAgICAgICAgIGRhdGE6IG5ld0Zvcm0sXG4gICAgICAgICAgYm9keTogW10sXG4gICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuY29uY2F0KFtuZXdGb3JtXSk7XG4gICAgICAgIHRoaXMuY2FyZERhdGEucHVzaChjYXJkRGF0YSk7XG4gICAgICAgIHRoaXMuZm9ybUNhcmRDbGlja2VkKGNhcmREYXRhKTtcbiAgICAgICAgdGhpcy5kYXRhVmlldy5pc1RhYmxlVmlldyA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHNob3dUYWJsZVZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgb25TZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0ZWRSb3dzOiBGb3JtW10pIHsgfVxuXG4gIG9uQ29sdW1uc1VwZGF0ZWQodXBkYXRlZENvbHVtbnM6IElEYXRhRmlsdGVyW10pIHtcbiAgICBjb25zdCB1cGRhdGVkQ29sdW1uRGVmOiBDb2x1bW5EZWZpbml0aW9uPEZvcm0+W10gPSBbXTtcbiAgICB1cGRhdGVkQ29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoaW5nQ29sID0gdGhpcy5mb3Jtc1N2Yy5mb3JtQ29sdW1ucy5maW5kKFxuICAgICAgICAoY29sdW1uKSA9PiBjb2x1bW4uaGVhZGVyID09PSBjb2wubmFtZSB8fCBjb2x1bW4uaWQgPT09IGNvbC5uYW1lXG4gICAgICApO1xuICAgICAgaWYgKG1hdGNoaW5nQ29sKSB7XG4gICAgICAgIHVwZGF0ZWRDb2x1bW5EZWYucHVzaChtYXRjaGluZ0NvbCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnZpc2libGVDb2x1bW5EZWYgPSBbLi4udXBkYXRlZENvbHVtbkRlZl07XG4gIH1cblxuICBleHBvcnRGaWx0ZXJzQW5kU29ydHMgPSBhc3luYyAocGFnZVN0YXRlOiB7XG4gICAgc2tpcDogbnVtYmVyO1xuICAgIGxpbWl0OiBudW1iZXI7XG4gIH0pID0+IHtcbiAgICB2YXIgcGF5bG9hZDogU2VhcmNoUHJvcGVydHlWYWx1ZVtdID0gdGhpcy5jdXJyZW50RmlsdGVycy5tYXAoKHgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFByb3BlcnR5TmFtZTpcbiAgICAgICAgICBGb3JtUHJvcGVydHlNYXBbXG4gICAgICAgICAgeC5uYW1lLnNwbGl0KCcgJykuam9pbignJykgYXMga2V5b2YgdHlwZW9mIEZvcm1Qcm9wZXJ0eU1hcFxuICAgICAgICAgIF0sXG4gICAgICAgIEVudGl0eVZhbHVlOiB4LnZhbHVlLFxuICAgICAgICBPcGVyYXRvcjogU2VhcmNoT3BlcmF0b3IuQW5kLFxuICAgICAgICBTaWduOlxuICAgICAgICAgIHguY29uZGl0aW9uICYmIE9iamVjdC5rZXlzKEZpbHRlclR5cGVzKS5pbmNsdWRlcyh4LmNvbmRpdGlvbilcbiAgICAgICAgICAgID8gKEZpbHRlclR5cGVzW1xuICAgICAgICAgICAgICB4LmNvbmRpdGlvbiBhcyBrZXlvZiB0eXBlb2YgRmlsdGVyVHlwZXNcbiAgICAgICAgICAgIF0gYXMgdW5rbm93biBhcyBTZWFyY2hQcm9wZXJ0eVNpZ24pXG4gICAgICAgICAgICA6IFNlYXJjaFByb3BlcnR5U2lnbi5FUSxcbiAgICAgICAgVHlwZTpcbiAgICAgICAgICB4Lm5hbWUgPT0gRm9ybVByb3BlcnR5TmFtZS5DcmVhdGVkQXQgfHxcbiAgICAgICAgICAgIHgubmFtZSA9PSBGb3JtUHJvcGVydHlOYW1lLkV4cGlyeURhdGVcbiAgICAgICAgICAgID8gU2VhcmNoUHJvcGVydHlWYWx1ZVR5cGUuRGF0ZVxuICAgICAgICAgICAgOiB4Lm5hbWUgPT0gRm9ybVByb3BlcnR5TmFtZS5Bbm9ueW1vdXNcbiAgICAgICAgICAgICAgPyBTZWFyY2hQcm9wZXJ0eVZhbHVlVHlwZS5Cb29sXG4gICAgICAgICAgICAgIDogU2VhcmNoUHJvcGVydHlWYWx1ZVR5cGUuU3RyaW5nLFxuICAgICAgfTtcbiAgICB9KTtcbiAgICAvLyBwYXlsb2FkLnB1c2goe1xuICAgIC8vICAgUHJvcGVydHlOYW1lOiAnQVBJS2V5JyxcbiAgICAvLyAgIEVudGl0eVZhbHVlOiB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5BUElLZXksXG4gICAgLy8gICBPcGVyYXRvcjogU2VhcmNoT3BlcmF0b3IuQW5kLFxuICAgIC8vICAgU2lnbjogU2VhcmNoUHJvcGVydHlTaWduLkVRLFxuICAgIC8vIH0pO1xuICAgIGZvciAobGV0IHNvcnQgb2YgdGhpcy5jdXJyZW50U29ydHMpIHtcbiAgICAgIHBheWxvYWQucHVzaCh7XG4gICAgICAgIFByb3BlcnR5TmFtZTpcbiAgICAgICAgICBGb3JtUHJvcGVydHlNYXBbXG4gICAgICAgICAgc29ydC5uYW1lLnNwbGl0KCcgJykuam9pbignJykgYXMga2V5b2YgdHlwZW9mIEZvcm1Qcm9wZXJ0eU1hcFxuICAgICAgICAgIF0sXG4gICAgICAgIEVudGl0eVZhbHVlOiAnJyxcbiAgICAgICAgT3BlcmF0b3I6IFNlYXJjaE9wZXJhdG9yLkFuZCxcbiAgICAgICAgU2lnbjogU2VhcmNoUHJvcGVydHlTaWduLkVRLFxuICAgICAgICBTb3J0OlxuICAgICAgICAgIHNvcnQudmFsdWUudG9Mb3dlckNhc2UoKSA9PSBTb3J0RGlyZWN0aW9uLkFzYy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICA/IFNvcnREaXJlY3Rpb24uQXNjXG4gICAgICAgICAgICA6IHNvcnQudmFsdWUudG9Mb3dlckNhc2UoKSA9PSBTb3J0RGlyZWN0aW9uLkRlc2MudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICA/IFNvcnREaXJlY3Rpb24uRGVzY1xuICAgICAgICAgICAgICA6IFNvcnREaXJlY3Rpb24uTm9uZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBzZWFyY2hUZXJtRXhpc3RzID0gdGhpcy5jdXJyZW50U2VhcmNoVGVybS50cmltKCkubGVuZ3RoID4gMDtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcbiAgICBjb25zdCByZXMgPSBzZWFyY2hUZXJtRXhpc3RzXG4gICAgICA/IGF3YWl0IHRoaXMuc2VydmVyLmdldChcbiAgICAgICAgYEdldEZvcm1XaXRoUGFyYW0vJHt0aGlzLmN1cnJlbnRTZWFyY2hUZXJtLnRyaW0oKX0vJHtwYWdlU3RhdGUuc2tpcFxuICAgICAgICB9LyR7cGFnZVN0YXRlLmxpbWl0fWAsXG4gICAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgICApXG4gICAgICA6IHBheWxvYWQubGVuZ3RoID09IDBcbiAgICAgICAgPyBhd2FpdCB0aGlzLnNlcnZlci5nZXQoXG4gICAgICAgICAgYEdldEZvcm1zLyR7cGFnZVN0YXRlLnNraXB9LyR7cGFnZVN0YXRlLmxpbWl0fWAsXG4gICAgICAgICAgdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUElcbiAgICAgICAgKVxuICAgICAgICA6IGF3YWl0IHRoaXMuc2VydmVyLnBvc3QoXG4gICAgICAgICAgYFNlYXJjaEZvcm1zLyR7cGFnZVN0YXRlLnNraXB9LyR7cGFnZVN0YXRlLmxpbWl0fWAsXG4gICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5Xb3JrRmxvd0FQSVxuICAgICAgICApO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGZhbHNlKTtcbiAgICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcmVzdWx0ID0gKHJlcyBhcyBQYWdlZFJlc3VsdDxGb3JtPikuUmVzdWx0O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH07XG5cbiAgYXN5bmMgdXBkYXRlRmlsdGVyc0FuZFNvcnRzKGlzU2VhcmNoOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAoIWlzU2VhcmNoKSB7XG4gICAgICB0aGlzLmRhdGFWaWV3Lm9uQ2xlYXJTZWFyY2goKTtcbiAgICAgIHRoaXMuY3VycmVudFNlYXJjaFRlcm0gPSAnJztcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIGNvbnN0IGNsaWNrRXZlbnQgPSBuZXcgTW91c2VFdmVudCgnY2xpY2snLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgICAgIHZpZXc6IHdpbmRvdyxcbiAgICAgIH0pO1xuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjbGlja0V2ZW50KTtcbiAgICB9XG4gICAgdmFyIHBheWxvYWQ6IFNlYXJjaFByb3BlcnR5VmFsdWVbXSA9IHRoaXMuY3VycmVudEZpbHRlcnMubWFwKCh4KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBQcm9wZXJ0eU5hbWU6XG4gICAgICAgICAgRm9ybVByb3BlcnR5TWFwW1xuICAgICAgICAgIHgubmFtZS5zcGxpdCgnICcpLmpvaW4oJycpIGFzIGtleW9mIHR5cGVvZiBGb3JtUHJvcGVydHlNYXBcbiAgICAgICAgICBdLFxuICAgICAgICBFbnRpdHlWYWx1ZTogeC52YWx1ZSxcbiAgICAgICAgT3BlcmF0b3I6IFNlYXJjaE9wZXJhdG9yLkFuZCxcbiAgICAgICAgU2lnbjpcbiAgICAgICAgICB4LmNvbmRpdGlvbiAmJiBPYmplY3Qua2V5cyhGaWx0ZXJUeXBlcykuaW5jbHVkZXMoeC5jb25kaXRpb24pXG4gICAgICAgICAgICA/IChGaWx0ZXJUeXBlc1tcbiAgICAgICAgICAgICAgeC5jb25kaXRpb24gYXMga2V5b2YgdHlwZW9mIEZpbHRlclR5cGVzXG4gICAgICAgICAgICBdIGFzIHVua25vd24gYXMgU2VhcmNoUHJvcGVydHlTaWduKVxuICAgICAgICAgICAgOiBTZWFyY2hQcm9wZXJ0eVNpZ24uRVEsXG4gICAgICAgIFR5cGU6XG4gICAgICAgICAgeC5uYW1lID09IEZvcm1Qcm9wZXJ0eU5hbWUuQ3JlYXRlZEF0IHx8XG4gICAgICAgICAgICB4Lm5hbWUgPT0gRm9ybVByb3BlcnR5TmFtZS5FeHBpcnlEYXRlXG4gICAgICAgICAgICA/IFNlYXJjaFByb3BlcnR5VmFsdWVUeXBlLkRhdGVcbiAgICAgICAgICAgIDogeC5uYW1lID09IEZvcm1Qcm9wZXJ0eU5hbWUuQW5vbnltb3VzXG4gICAgICAgICAgICAgID8gU2VhcmNoUHJvcGVydHlWYWx1ZVR5cGUuQm9vbFxuICAgICAgICAgICAgICA6IFNlYXJjaFByb3BlcnR5VmFsdWVUeXBlLlN0cmluZyxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgLy8gcGF5bG9hZC5wdXNoKHtcbiAgICAvLyAgIFByb3BlcnR5TmFtZTogJ0FQSUtleScsXG4gICAgLy8gICBFbnRpdHlWYWx1ZTogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgIC8vICAgT3BlcmF0b3I6IFNlYXJjaE9wZXJhdG9yLkFuZCxcbiAgICAvLyAgIFNpZ246IFNlYXJjaFByb3BlcnR5U2lnbi5FUSxcbiAgICAvLyB9KTtcbiAgICBmb3IgKGxldCBzb3J0IG9mIHRoaXMuY3VycmVudFNvcnRzKSB7XG4gICAgICBwYXlsb2FkLnB1c2goe1xuICAgICAgICBQcm9wZXJ0eU5hbWU6XG4gICAgICAgICAgRm9ybVByb3BlcnR5TWFwW1xuICAgICAgICAgIHNvcnQubmFtZS5zcGxpdCgnICcpLmpvaW4oJycpIGFzIGtleW9mIHR5cGVvZiBGb3JtUHJvcGVydHlNYXBcbiAgICAgICAgICBdLFxuICAgICAgICBFbnRpdHlWYWx1ZTogJycsXG4gICAgICAgIE9wZXJhdG9yOiBTZWFyY2hPcGVyYXRvci5BbmQsXG4gICAgICAgIFNpZ246IFNlYXJjaFByb3BlcnR5U2lnbi5FUSxcbiAgICAgICAgU29ydDpcbiAgICAgICAgICBzb3J0LnZhbHVlLnRvTG93ZXJDYXNlKCkgPT0gU29ydERpcmVjdGlvbi5Bc2MudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgPyBTb3J0RGlyZWN0aW9uLkFzY1xuICAgICAgICAgICAgOiBzb3J0LnZhbHVlLnRvTG93ZXJDYXNlKCkgPT0gU29ydERpcmVjdGlvbi5EZXNjLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgPyBTb3J0RGlyZWN0aW9uLkRlc2NcbiAgICAgICAgICAgICAgOiBTb3J0RGlyZWN0aW9uLk5vbmUsXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3Qgc2VhcmNoVGVybUV4aXN0cyA9IHRoaXMuY3VycmVudFNlYXJjaFRlcm0udHJpbSgpLmxlbmd0aCA+IDA7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG4gICAgY29uc3QgcmVzID0gc2VhcmNoVGVybUV4aXN0c1xuICAgICAgPyBhd2FpdCB0aGlzLnNlcnZlci5nZXQoXG4gICAgICAgIGBHZXRGb3JtV2l0aFBhcmFtLyR7dGhpcy5jdXJyZW50U2VhcmNoVGVybS50cmltKCl9LzAvJHt0aGlzLnBhZ2VTaXplXG4gICAgICAgIH1gLFxuICAgICAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5Xb3JrRmxvd0FQSVxuICAgICAgKVxuICAgICAgOiBwYXlsb2FkLmxlbmd0aCA9PSAwXG4gICAgICAgID8gYXdhaXQgdGhpcy5zZXJ2ZXIuZ2V0KFxuICAgICAgICAgIGBHZXRGb3Jtcy8wLyR7dGhpcy5wYWdlU2l6ZX1gLFxuICAgICAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgICAgIClcbiAgICAgICAgOiBhd2FpdCB0aGlzLnNlcnZlci5wb3N0KFxuICAgICAgICAgIGBTZWFyY2hGb3Jtcy8wLyR7dGhpcy5wYWdlU2l6ZX1gLFxuICAgICAgICAgIHBheWxvYWQsXG4gICAgICAgICAgdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUElcbiAgICAgICAgKTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlcnMgPSBbXTtcbiAgICAgIHRoaXMuY3VycmVudFNvcnRzID0gW107XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhcmREYXRhVmlldy5jbGVhckRhdGEoKTtcbiAgICAgIHRoaXMuY3VycmVudERhdGEgPSBudWxsO1xuICAgICAgdGhpcy5wYWdlU3RhdGUgPSByZXMgYXMgUGFnZWRSZXN1bHQ8Rm9ybT47XG4gICAgICB2YXIgcmVzdWx0ID0gKHJlcyBhcyBQYWdlZFJlc3VsdDxGb3JtPikuUmVzdWx0O1xuICAgICAgdGhpcy5kYXRhID0gcmVzdWx0Lm1hcCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLngsXG4gICAgICAgICAgSWQ6IHguQ29kZSxcbiAgICAgICAgICBpZDogeC5Db2RlLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICB0aGlzLnNldFVwQ2FyZERhdGEoKTtcbiAgICB9XG4gIH1cbiAgYXN5bmMgbG9hZE1vcmVGaWx0ZXJzQW5kU29ydHMoKTogUHJvbWlzZTxQYWdlZFJlc3VsdDxGb3JtPiB8IHVuZGVmaW5lZD4ge1xuICAgIGlmICghdGhpcy5wYWdlU3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHBheWxvYWQ6IFNlYXJjaFByb3BlcnR5VmFsdWVbXSA9IHRoaXMuY3VycmVudEZpbHRlcnMubWFwKCh4KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBQcm9wZXJ0eU5hbWU6XG4gICAgICAgICAgRm9ybVByb3BlcnR5TWFwW1xuICAgICAgICAgIHgubmFtZS5zcGxpdCgnICcpLmpvaW4oJycpIGFzIGtleW9mIHR5cGVvZiBGb3JtUHJvcGVydHlNYXBcbiAgICAgICAgICBdLFxuICAgICAgICBFbnRpdHlWYWx1ZTogeC52YWx1ZSxcbiAgICAgICAgT3BlcmF0b3I6IFNlYXJjaE9wZXJhdG9yLkFuZCxcbiAgICAgICAgU2lnbjpcbiAgICAgICAgICB4LmNvbmRpdGlvbiAmJiBPYmplY3Qua2V5cyhGaWx0ZXJUeXBlcykuaW5jbHVkZXMoeC5jb25kaXRpb24pXG4gICAgICAgICAgICA/IChGaWx0ZXJUeXBlc1tcbiAgICAgICAgICAgICAgeC5jb25kaXRpb24gYXMga2V5b2YgdHlwZW9mIEZpbHRlclR5cGVzXG4gICAgICAgICAgICBdIGFzIHVua25vd24gYXMgU2VhcmNoUHJvcGVydHlTaWduKVxuICAgICAgICAgICAgOiBTZWFyY2hQcm9wZXJ0eVNpZ24uRVEsXG4gICAgICAgIFR5cGU6XG4gICAgICAgICAgeC5uYW1lID09IEZvcm1Qcm9wZXJ0eU5hbWUuQ3JlYXRlZEF0IHx8XG4gICAgICAgICAgICB4Lm5hbWUgPT0gRm9ybVByb3BlcnR5TmFtZS5FeHBpcnlEYXRlXG4gICAgICAgICAgICA/IFNlYXJjaFByb3BlcnR5VmFsdWVUeXBlLkRhdGVcbiAgICAgICAgICAgIDogeC5uYW1lID09IEZvcm1Qcm9wZXJ0eU5hbWUuQW5vbnltb3VzXG4gICAgICAgICAgICAgID8gU2VhcmNoUHJvcGVydHlWYWx1ZVR5cGUuQm9vbFxuICAgICAgICAgICAgICA6IFNlYXJjaFByb3BlcnR5VmFsdWVUeXBlLlN0cmluZyxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgZm9yIChsZXQgc29ydCBvZiB0aGlzLmN1cnJlbnRTb3J0cykge1xuICAgICAgcGF5bG9hZC5wdXNoKHtcbiAgICAgICAgUHJvcGVydHlOYW1lOlxuICAgICAgICAgIEZvcm1Qcm9wZXJ0eU1hcFtcbiAgICAgICAgICBzb3J0Lm5hbWUuc3BsaXQoJyAnKS5qb2luKCcnKSBhcyBrZXlvZiB0eXBlb2YgRm9ybVByb3BlcnR5TWFwXG4gICAgICAgICAgXSxcbiAgICAgICAgRW50aXR5VmFsdWU6ICcnLFxuICAgICAgICBPcGVyYXRvcjogU2VhcmNoT3BlcmF0b3IuQW5kLFxuICAgICAgICBTaWduOiBTZWFyY2hQcm9wZXJ0eVNpZ24uRVEsXG4gICAgICAgIFNvcnQ6XG4gICAgICAgICAgc29ydC52YWx1ZS50b0xvd2VyQ2FzZSgpID09IFNvcnREaXJlY3Rpb24uQXNjLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgID8gU29ydERpcmVjdGlvbi5Bc2NcbiAgICAgICAgICAgIDogc29ydC52YWx1ZS50b0xvd2VyQ2FzZSgpID09IFNvcnREaXJlY3Rpb24uRGVzYy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgID8gU29ydERpcmVjdGlvbi5EZXNjXG4gICAgICAgICAgICAgIDogU29ydERpcmVjdGlvbi5Ob25lLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHNlYXJjaFRlcm1FeGlzdHMgPSB0aGlzLmN1cnJlbnRTZWFyY2hUZXJtLnRyaW0oKS5sZW5ndGggPiAwO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICAgIGNvbnN0IHJlcyA9IHNlYXJjaFRlcm1FeGlzdHNcbiAgICAgID8gYXdhaXQgdGhpcy5zZXJ2ZXIuZ2V0KFxuICAgICAgICBgR2V0Rm9ybVdpdGhQYXJhbS8ke3RoaXMuY3VycmVudFNlYXJjaFRlcm0udHJpbSgpfS8ke3RoaXMucGFnZVN0YXRlLlNraXBcbiAgICAgICAgfS8ke3RoaXMucGFnZVNpemV9YCxcbiAgICAgICAgdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUElcbiAgICAgIClcbiAgICAgIDogcGF5bG9hZC5sZW5ndGggPT0gMFxuICAgICAgICA/IGF3YWl0IHRoaXMuc2VydmVyLmdldChcbiAgICAgICAgICBgR2V0Rm9ybXMvJHt0aGlzLnBhZ2VTdGF0ZS5Ta2lwfS8ke3RoaXMucGFnZVNpemV9YCxcbiAgICAgICAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5Xb3JrRmxvd0FQSVxuICAgICAgICApXG4gICAgICAgIDogYXdhaXQgdGhpcy5zZXJ2ZXIucG9zdChcbiAgICAgICAgICBgU2VhcmNoRm9ybXMvJHt0aGlzLnBhZ2VTdGF0ZS5Ta2lwfS8ke3RoaXMucGFnZVNpemV9YCxcbiAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgICAgICk7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcmVzdWx0ID0gcmVzIGFzIFBhZ2VkUmVzdWx0PEZvcm0+O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cblxuICBvbkZpbHRlclVwZGF0ZWQodXBkYXRlZEZpbHRlcnM6IElEYXRhRmlsdGVyW10gfCBzdHJpbmcpIHtcbiAgICAvLyBFbnN1cmUgdXBkYXRlZEZpbHRlcnMgaXMgYW4gYXJyYXlcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh1cGRhdGVkRmlsdGVycykpIHtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlcnMgPSB1cGRhdGVkRmlsdGVycztcbiAgICAgIHRoaXMudXBkYXRlRmlsdGVyc0FuZFNvcnRzKCk7XG4gICAgfVxuICB9XG4gIG9uU29ydFVwZGF0ZWQodXBkYXRlZFNvcnRzOiBJRGF0YUZpbHRlcltdKSB7XG4gICAgdGhpcy5jdXJyZW50U29ydHMgPSB1cGRhdGVkU29ydHM7XG4gICAgdGhpcy51cGRhdGVGaWx0ZXJzQW5kU29ydHMoKTtcbiAgfVxuXG4gIGhhbmRsZVNlYXJjaChldmVudDogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9KSB7XG4gICAgdGhpcy5zZWFyY2hUZXJtJC5uZXh0KGV2ZW50LnZhbHVlKTtcbiAgfVxuXG4gIGhhbmRsZUV4cG9ydChleHBvcnRlZERhdGE6IFBhcnRpYWw8YW55PltdKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ0V4cG9ydGVkIGRhdGE6JywgZXhwb3J0ZWREYXRhKTtcbiAgICB0aGlzLmRvd25sb2FkQ1NWKGV4cG9ydGVkRGF0YSk7XG4gIH1cblxuICBwcml2YXRlIGRvd25sb2FkQ1NWKGRhdGE6IFBhcnRpYWw8YW55PltdKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IE9iamVjdC5rZXlzKGRhdGFbMF0pO1xuICAgIGNvbnN0IGNzdkNvbnRlbnQgPSBbXG4gICAgICBoZWFkZXJzLmpvaW4oJywnKSxcbiAgICAgIC4uLmRhdGEubWFwKChyb3cpID0+IGhlYWRlcnMubWFwKChoZWFkZXIpID0+IHJvd1toZWFkZXJdKS5qb2luKCcsJykpLFxuICAgIF0uam9pbignXFxuJyk7XG5cbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2NzdkNvbnRlbnRdLCB7IHR5cGU6ICd0ZXh0L2NzdjtjaGFyc2V0PXV0Zi04OycgfSk7XG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBpZiAobGluay5kb3dubG9hZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB1cmwpO1xuICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgJ2V4cG9ydC5jc3YnKTtcbiAgICAgIGxpbmsuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgIGxpbmsuY2xpY2soKTtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XG4gICAgfVxuICB9XG5cbiAgdGFibGVDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBGb3JtPigpO1xuXG4gIGNhY2hlSXRlbShpdGVtOiBGb3JtKSB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSBpdGVtLklkO1xuICAgIHRoaXMudGFibGVDYWNoZS5zZXQoY2FjaGVLZXksIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaXRlbSkpKTtcbiAgfVxuXG4gIHJlc3RvcmVDYWNoZShpdGVtOiBGb3JtKSB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSBpdGVtLklkO1xuICAgIGNvbnN0IGl0ZW1DYWNoZSA9IHRoaXMudGFibGVDYWNoZS5nZXQoY2FjaGVLZXkpO1xuICAgIGlmIChpdGVtQ2FjaGUpIHtcbiAgICAgIGl0ZW0uTmFtZSA9IGl0ZW1DYWNoZS5OYW1lO1xuICAgICAgaXRlbS5FbnRpdGllcyA9IGl0ZW1DYWNoZS5FbnRpdGllcztcbiAgICAgIGl0ZW0uRXhwaXJ5RGF0ZSA9IGl0ZW1DYWNoZS5FeHBpcnlEYXRlO1xuICAgICAgaXRlbS5BbGxvd0Fub255bW91cyA9IGl0ZW1DYWNoZS5BbGxvd0Fub255bW91cztcbiAgICB9XG4gICAgdGhpcy50YWJsZUNhY2hlLmRlbGV0ZShjYWNoZUtleSk7XG4gIH1cbn1cbiIsIjxkaXYgI21lc3NhZ2VMb2cgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC00IG1lc3NhZ2UtbG9nLWNvbnRhaW5lclwiPlxuICA8dmVyYmVuLWRhdGEtdmlld1xuICAgICN2ZHZcbiAgICBbdmlld1N0YXRlXT1cIntcbiAgICAgIGlzU2VhcmNoOiB0cnVlLFxuICAgICAgaXNDb2x1bW46IHRydWUsXG4gICAgICBpc0ZpbHRlcjogdHJ1ZSxcbiAgICAgIGlzU29ydDogdHJ1ZSxcbiAgICAgIGlzRXhwb3J0OiAoIXBlcm1pc3Npb25Db25maWcgfHwgcGVybWlzc2lvbkNvbmZpZy5BY3Rpb25zWydFeHBvcnQnXSksXG4gICAgICBpc1NlbGVjdDogdHJ1ZSxcbiAgICAgIGlzQ3JlYXRlOiAoIXBlcm1pc3Npb25Db25maWcgfHwgcGVybWlzc2lvbkNvbmZpZy5BY3Rpb25zWydDcmVhdGUnXSksXG4gICAgICBpc1RvZ2dsZTp0cnVlLFxuICAgIH1cIlxuICAgIFtidXR0b25DbGFzc109XCInbXktY3VzdG9tLWJ1dHRvbi1jbGFzcydcIlxuICAgIFtpY29uQ2xhc3NdPVwiJ215LWljb24tY2xhc3MnXCJcbiAgICBbYWN0aXZlSWNvbkNsYXNzXT1cIidteS1hY3RpdmUtaWNvbi1jbGFzcydcIlxuICAgIFtzZWxlY3RlZENvbHVtbkNvdW50XT1cIjBcIlxuICAgIFtzZWxlY3RlZFNvcnRDb3VudF09XCIwXCJcbiAgICBbc2VsZWN0ZWRGaWx0ZXJUYWJsZUNvdW50XT1cIjBcIlxuICAgICh2aWV3Q2hhbmdlKT1cIm9uVmlld0NoYW5nZSgkZXZlbnQpXCJcbiAgICAoc3RhdGVDaGFuZ2UpPVwib25TdGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAob25TZWFyY2hDaGFuZ2UpPVwiaGFuZGxlU2VhcmNoKCRldmVudClcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cIm10LTJcIiB0YWJsZS1jb250ZW50PlxuICAgICAgPGxpYi1kYXRhLXRhYmxlXG4gICAgICAgIFtkYXRhS2V5XT1cIidJZCdcIlxuICAgICAgICBjbGFzcz1cImZvcm0tdGFibGVcIlxuICAgICAgICAjZHRcbiAgICAgICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgICAgIFtjb2x1bW5zXT1cInZpc2libGVDb2x1bW5EZWZcIlxuICAgICAgICBbc3R5bGVDb25maWddPVwic3R5bGVzXCJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJzZWxlY3RcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICNjZWxsXG4gICAgICAgICAgICBsZXQtaXNTZWxlY3RlZD1cImlzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgbGV0LXRvZ2dsZVJvd1NlbGVjdGlvbj1cInRvZ2dsZVJvd1NlbGVjdGlvblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVJvd1NlbGVjdGlvbigpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICNoZWFkZXJcbiAgICAgICAgICAgIGxldC1hbGxSb3dzU2VsZWN0ZWQ9XCJhbGxSb3dzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgbGV0LXNvbWVSb3dzU2VsZWN0ZWQ9XCJzb21lUm93c1NlbGVjdGVkXCJcbiAgICAgICAgICAgIGxldC10b2dnbGVBbGxSb3dzPVwidG9nZ2xlQWxsUm93c1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cImFsbFJvd3NTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwic29tZVJvd3NTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVBbGxSb3dzKClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJjcmVhdGVkQXRcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXZhbHVlPlxuICAgICAgICAgICAge3sgdmFsdWUgfCBkYXRlIH19XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwibmFtZVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbCBsZXQtcm93PVwicm93XCIgbGV0LXZhbHVlPlxuICAgICAgICAgICAge3sgdmFsdWUuTmFtZSB9fVxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAjY2VsbEVkaXRcbiAgICAgICAgICAgIGxldC1yb3c9XCJyb3dcIlxuICAgICAgICAgICAgbGV0LXVwZGF0ZURhdGE9XCJ1cGRhdGVEYXRhXCJcbiAgICAgICAgICAgIGxldC12YWx1ZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3aWR0aC1tYXhcIj5cbiAgICAgICAgICAgICAgPHZlcmJlbmEtaW5wdXQgWyhuZ01vZGVsKV09XCJ2YWx1ZS5OYW1lXCI+PC92ZXJiZW5hLWlucHV0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJncm91cHNcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXJvdz1cInJvd1wiIGxldC12YWx1ZT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0xXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cHMtc3VtbWFyeS1jb250YWluZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgdmFsdWUuRW50aXRpZXMuc2xpY2UoMCwgNClcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJncm91cC1jaGlwIHB4LTJcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IGdyb3VwLk5hbWUgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDx2ZXJiZW4tcG9wLVVwXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJ2YWx1ZS5FbnRpdGllcy5sZW5ndGggPiAzXCJcbiAgICAgICAgICAgICAgICBbY3VzdG9tU3R5bGVzXT1cInsgJ3otaW5kZXgnOiAnOTknIH1cIlxuICAgICAgICAgICAgICAgIFtlbmFibGVNb3VzZUxlYXZlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VlLW1vcmUtc2VjdGlvbiBmbGV4XCIgZHJvcGRvd24tdHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgIDxkaXY+U2VlIG1vcmU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJjaGV2cm9uLWRvd25cIlxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzM0NzlFOVwiXG4gICAgICAgICAgICAgICAgICAgIFt3aWR0aF09XCIxMFwiXG4gICAgICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwiNlwiXG4gICAgICAgICAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImdyb3Vwcy1zdW1tYXJ5LWNvbnRhaW5lciBwb3AtdXAgZ2FwLTIgcC0yXCJcbiAgICAgICAgICAgICAgICAgIGRyb3Bkb3duLWNvbnRlbnRcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZ3JvdXAtY2hpcCBweC0yXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGdyb3VwIG9mIHZhbHVlLkVudGl0aWVzXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgZ3JvdXAuTmFtZSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvdmVyYmVuLXBvcC1VcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAjY2VsbEVkaXRcbiAgICAgICAgICAgIGxldC1yb3c9XCJyb3dcIlxuICAgICAgICAgICAgbGV0LXVwZGF0ZURhdGE9XCJ1cGRhdGVEYXRhXCJcbiAgICAgICAgICAgIGxldC12YWx1ZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICAgICAgICAgIHNlbGVjdEtleT1cIkNvZGVcIlxuICAgICAgICAgICAgICBkaXNwbGF5PVwiY2hpcFwiXG4gICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IEdyb3Vwc1wiXG4gICAgICAgICAgICAgIFtzaG93Q2xlYXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtmaWx0ZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtsb2FkXT1cInRoaXMubG9hZE1vcmVGb3JtRW50aXRpZXMuYmluZCh0aGlzKVwiXG4gICAgICAgICAgICAgIFtzZWFyY2hdPVwidGhpcy5zZWFyY2hGb3JtRW50aXRpZXMuYmluZCh0aGlzKVwiXG4gICAgICAgICAgICAgIFsob3B0aW9ucyldPVwiZ3JvdXBzXCJcbiAgICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJOYW1lXCJcbiAgICAgICAgICAgICAgW211bHRpc2VsZWN0XT1cInRydWVcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInZhbHVlLkVudGl0aWVzXCJcbiAgICAgICAgICAgICAgW2xhenlMb2FkXT1cInRydWVcIlxuICAgICAgICAgICAgICBbYXN5bmNMYWJlbF09XCJ0aGlzLmdldEFzeW5jTGFiZWwuYmluZCh0aGlzKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3ZlcmJlbi1kcm9wLWRvd24+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJleHBpcnlcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXJvdz1cInJvd1wiIGxldC12YWx1ZT5cbiAgICAgICAgICAgIHt7IHZhbHVlLkV4cGlyeURhdGUgfCBkYXRlIH19XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICNjZWxsRWRpdFxuICAgICAgICAgICAgbGV0LXJvdz1cInJvd1wiXG4gICAgICAgICAgICBsZXQtdXBkYXRlRGF0YT1cInVwZGF0ZURhdGFcIlxuICAgICAgICAgICAgbGV0LXZhbHVlXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndpZHRoLW1heFwiPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGUtcGlja2VyXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiZGF0ZVwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ2YWx1ZS5FeHBpcnlEYXRlXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPCEtLSA8dmVyYmVuYS1pbnB1dCBbKG5nTW9kZWwpXT1cInZhbHVlLkV4cGlyeURhdGVcIj48L3ZlcmJlbmEtaW5wdXQ+IC0tPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJhbm9ueW1vdXNcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXJvdz1cInJvd1wiIGxldC12YWx1ZT5cbiAgICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgICAgIFtoZWlnaHRdPVwiMTVcIlxuICAgICAgICAgICAgICBbaWNvbl09XCJ2YWx1ZS5Jc1Byb3RlY3RlZCA/ICdvbicgOiAnb2ZmJ1wiXG4gICAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAjY2VsbEVkaXRcbiAgICAgICAgICAgIGxldC1yb3c9XCJyb3dcIlxuICAgICAgICAgICAgbGV0LXVwZGF0ZURhdGE9XCJ1cGRhdGVEYXRhXCJcbiAgICAgICAgICAgIGxldC12YWx1ZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDx2ZXJiZW5hLXN3aXRjaFxuICAgICAgICAgICAgICBvblRleHQ9XCJcIlxuICAgICAgICAgICAgICBvZmZUZXh0PVwiXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ2YWx1ZS5BbGxvd0Fub255bW91c1wiXG4gICAgICAgICAgICAgIFtvbkNvbG9yXT1cIicjMUEyMzdFJ1wiXG4gICAgICAgICAgICA+PC92ZXJiZW5hLXN3aXRjaD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cImFjdGlvbnNcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICNjZWxsXG4gICAgICAgICAgICBsZXQtaXNFZGl0aW5nPVwiaXNFZGl0aW5nXCJcbiAgICAgICAgICAgIGxldC10b2dnbGVSb3dFZGl0PVwidG9nZ2xlUm93RWRpdFwiXG4gICAgICAgICAgICBsZXQtcm93PVwicm93XCJcbiAgICAgICAgICAgIGxldC12YWx1ZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDx2ZXJiZW4tcG9wLVVwXG4gICAgICAgICAgICAgICNwb3B1cFxuICAgICAgICAgICAgICBbY3VzdG9tU3R5bGVzXT1cInsgJ3otaW5kZXgnOiAnOTknIH1cIlxuICAgICAgICAgICAgICBbZW5hYmxlTW91c2VMZWF2ZV09XCJmYWxzZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBhY3Rpb25zLWljb25cIlxuICAgICAgICAgICAgICAgIGRyb3Bkb3duLXRyaWdnZXJcbiAgICAgICAgICAgICAgICBpY29uPVwibGlzdFwiXG4gICAgICAgICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3AtdXAtY29udGVudCBmbGV4IGZsZXgtY29sXCIgZHJvcGRvd24tY29udGVudD5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwidmlld1Jlc3BvbnNlcyh2YWx1ZS5Db2RlKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInBvcC11cC12YWx1ZSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgVmlldyByZXNwb25zZXNcbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAhcGVybWlzc2lvbkNvbmZpZyB8fCBwZXJtaXNzaW9uQ29uZmlnLkFjdGlvbnNbJ0NyZWF0ZSddXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVJvd0VkaXQoKTsgY2FjaGVJdGVtKHZhbHVlKTsgY2xvc2VQb3BVcCgpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicG9wLXVwLXZhbHVlIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBFZGl0XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwicG9wLXVwLXZhbHVlIGN1cnNvci1wb2ludGVyXCI+RGVsZXRlPC9kaXY+IC0tPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdmVyYmVuLXBvcC1VcD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgI2NlbGxFZGl0XG4gICAgICAgICAgICBsZXQtaXNFZGl0aW5nPVwiaXNFZGl0aW5nXCJcbiAgICAgICAgICAgIGxldC10b2dnbGVSb3dFZGl0PVwidG9nZ2xlUm93RWRpdFwiXG4gICAgICAgICAgICBsZXQtcm93PVwicm93XCJcbiAgICAgICAgICAgIGxldC12YWx1ZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgICAgIGljb249XCJ0aWNrXCJcbiAgICAgICAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwiMTVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0YWJsZVNhdmVGb3JtKHZhbHVlLCB0b2dnbGVSb3dFZGl0KVwiXG4gICAgICAgICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlc3RvcmVDYWNoZSh2YWx1ZSk7IHRvZ2dsZVJvd0VkaXQoKVwiXG4gICAgICAgICAgICAgICAgaWNvbj1cImNsb3NlLW5vLWNpcmNsZVwiXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cIjE1XCJcbiAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICAgICAgPCEtLSA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVSb3dFZGl0KClcIlxuICAgICAgICAgICAgICAgIGljb249XCJkZWxldGVcIlxuICAgICAgICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgICAgID48L3ZlcmJlbi1zdmc+IC0tPlxuICAgICAgICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgICAgIGljb249XCJjYXJkVmlld0FsdFwiXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cIjE1XCJcbiAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ29Ub0NhcmRWaWV3KHZhbHVlKVwiXG4gICAgICAgICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbGliLWRhdGEtdGFibGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjYXJkLWNvbnRlbnQ+XG4gICAgICA8dmVyYmVuLWNhcmQtZGF0YS12aWV3XG4gICAgICAgIGJvcmRlclJhZGl1cz1cIjEycHhcIlxuICAgICAgICAjdmRjdlxuICAgICAgICBkYXRhSWQ9XCJJZFwiXG4gICAgICAgIGJvcmRlcj1cIjVweFwiXG4gICAgICAgIFtjYXJkRGF0YUxpc3RdPVwiY2FyZERhdGFcIlxuICAgICAgICByYmdDb2xvcj1cIiNmNWY2ZjlcIlxuICAgICAgICBtZz1cIjBweFwiXG4gICAgICA+XG4gICAgICAgIDx2ZXJiZW4tbGVmdC1jYXJkLWRhdGEtdmlldyBjbGFzcz1cInNwYWNlLXktN1wiPlxuICAgICAgICAgIDx2ZXJiZW4tbGVmdC1jYXJkLWRhdGFcbiAgICAgICAgICAgICN2bGNkXG4gICAgICAgICAgICBbcGFyZW50XT1cInZkY3ZcIlxuICAgICAgICAgICAgZGF0YUlkPVwiTWFpbEFkZHJlc3NcIlxuICAgICAgICAgICAgY2xhc3M9XCJiZy1zZWNvbmRhcnktMTAwIHJvdW5kZWQteGwgYm9yZGVyLXByaW1hcnkgYm9yZGVyLVsxcHhdXCJcbiAgICAgICAgICAgIFtjYXJkRGF0YUxpc3RdPVwiY2FyZERhdGFcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2FyZCBsZXQtaXRlbT5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtQ2FyZENsaWNrZWQoaXRlbSlcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBjdXJzb3ItcG9pbnRlciBoLVttYXgtY29udGVudF1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPCEtLSA8dmVyYmVuLXN2ZyBbd2lkdGhdPVwiMTVcIiBbaGVpZ2h0XT1cIjE1XCIgKGNsaWNrKT1cInRvZ2dsZUNoaWxkcmVuKGl0ZW0pOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aD8ndmlzaWJsZSc6J2ludmlzaWJsZSdcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpdGVtcy1jZW50ZXIgZmxleCAgcHItMSBjdXJzb3ItcG9pbnRlclwiIFtpY29uXT1cIml0ZW0uaXNDaGlsZHJlbkV4cGFuZGVkPydtaW51cyc6J3BsdXMnXCIgLz4gLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsIGJnLXNlY29uZGFyeSByb3VuZGVkLXhsXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy0zIHJvdW5kZWQteGwgcm91bmRlZC10ci1ub25lIHJvdW5kZWQtYnItbm9uZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc2VsZWN0ZWQgPyAnYmctcHJpbWFyeScgOiAnYmctc2Vjb25kYXJ5LTIwMCdcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweS0zIHB4LTQgZmxleC0xIGgtWzEwMCVdXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtc3RhcnQgZmxleC0xIGdhcC0xIGp1c3RpZnktYmV0d2VlbiBoLVsxMDAlXVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgZmxleC0xIGNhcmQtbWluLWhlaWdodCBqdXN0aWZ5LWJldHdlZW4gaC1bMTAwJV1cIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoM1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm15LTAgZm9udC1ib2xkIHRleHQtWyM0MDQwNDBdIGxlYWRpbmctWzE5LjVweF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmRhdGEuTmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCIhdGV4dC1bMTBweF0gZm9udC1saWdodCB0ZXh0LVsjNDA0MDQwXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPkV4cGlyeSBEYXRlOjwvc3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiIXRleHQtWzEycHhdXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmRhdGEuRXhwaXJ5RGF0ZSB8IGRhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1lbmQgaC1bMTAwJV1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJlbnVtLXZhbCB7e2l0ZW0uZGF0YS5TdGF0dXN9fVwiPnt7aXRlbS5kYXRhLlN0YXR1c319PC9zcGFuPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvdmVyYmVuLWxlZnQtY2FyZC1kYXRhPlxuICAgICAgICA8L3ZlcmJlbi1sZWZ0LWNhcmQtZGF0YS12aWV3PlxuICAgICAgICA8dmVyYmVuLXJpZ2h0LWNhcmQtZGF0YS12aWV3PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcGFyZW50PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAqbmdJZj1cInRoaXMuY3VycmVudERhdGFcIlxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgcm91bmRlZC14bCBoLWZ1bGwgdy1mdWxsIGp1c3RpZnktYmV0d2VlbiByZWxhdGl2ZSBzcGFjZS15LTRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtM1wiPlxuICAgICAgICAgICAgICAgIDx2ZXJiZW5hLWlucHV0XG4gICAgICAgICAgICAgICAgICBuYW1lPVwiTmFtZVwiXG4gICAgICAgICAgICAgICAgICBsYWJlbD1cIk5hbWVcIlxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlVGFibGUoKVwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRoaXMuY3VycmVudERhdGEuZGF0YS5OYW1lXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0xXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2PkV4cGlyeSBEYXRlPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRlLXBpY2tlclwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJkYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0aGlzLmN1cnJlbnREYXRhLmRhdGEuRXhwaXJ5RGF0ZVwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gPHZlcmJlbmEtaW5wdXQgbmFtZT1cIkV4cGlyeURhdGVcIiBsYWJlbD1cIkV4cGlyeSBEYXRlXCIgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlVGFibGUoKVwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0aGlzLmN1cnJlbnREYXRhLmRhdGEuRXhwaXJ5RGF0ZVwiIC8+IC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0xXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2PkFub255bW91czwvZGl2PlxuICAgICAgICAgICAgICAgICAgPHZlcmJlbmEtc3dpdGNoXG4gICAgICAgICAgICAgICAgICAgIG9uVGV4dD1cIlwiXG4gICAgICAgICAgICAgICAgICAgIG9mZlRleHQ9XCJcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRoaXMuY3VycmVudERhdGEuZGF0YS5BbGxvd0Fub255bW91c1wiXG4gICAgICAgICAgICAgICAgICAgIFtvbkNvbG9yXT1cIicjMUEyMzdFJ1wiXG4gICAgICAgICAgICAgICAgICA+PC92ZXJiZW5hLXN3aXRjaD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdj5Gb3JtIEdyb3VwczwvZGl2PlxuICAgICAgICAgICAgICAgICAgPHZlcmJlbi1kcm9wLWRvd25cbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0S2V5PVwiQ29kZVwiXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk9XCJjaGlwXCJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgR3JvdXBzXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dDbGVhcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvYWRdPVwidGhpcy5sb2FkTW9yZUZvcm1FbnRpdGllcy5iaW5kKHRoaXMpXCJcbiAgICAgICAgICAgICAgICAgICAgW3NlYXJjaF09XCJ0aGlzLnNlYXJjaEZvcm1FbnRpdGllcy5iaW5kKHRoaXMpXCJcbiAgICAgICAgICAgICAgICAgICAgWyhvcHRpb25zKV09XCJncm91cHNcIlxuICAgICAgICAgICAgICAgICAgICBvcHRpb25MYWJlbD1cIk5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBbbXVsdGlzZWxlY3RdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGhpcy5jdXJyZW50RGF0YS5kYXRhLkVudGl0aWVzXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhenlMb2FkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbYXN5bmNMYWJlbF09XCJ0aGlzLmdldEFzeW5jTGFiZWwuYmluZCh0aGlzKVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8L3ZlcmJlbi1kcm9wLWRvd24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDwhLS0gYnV0dG9ucyAtLT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGJvdHRvbS04IGxlZnQtMCByaWdodC0wXCI+XG4gICAgICAgICAgICAgICAgPCEtLSA8dmVyYmVuYS1idXR0b25cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidmVyYmVuLWRlbGV0ZS1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgdGV4dD1cIkRlbGV0ZVwiXG4gICAgICAgICAgICAgICAgPjwvdmVyYmVuYS1idXR0b24+IC0tPlxuICAgICAgICAgICAgICAgIDxkaXY+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTNcIj5cbiAgICAgICAgICAgICAgICAgIDx2ZXJiZW5hLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInZlcmJlbi1zd2l0Y2gtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgIHZpZXdSZXNwb25zZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnREYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5jdXJyZW50RGF0YS5kYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmN1cnJlbnREYXRhLmRhdGEuQ29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgdGV4dD1cIlZpZXcgUmVzcG9uc2VzXCJcbiAgICAgICAgICAgICAgICAgID48L3ZlcmJlbmEtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPHZlcmJlbmEtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidmVyYmVuLXN3aXRjaC1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ29Ub1RhYmxlVmlldygpXCJcbiAgICAgICAgICAgICAgICAgICAgdGV4dD1cIlN3aXRjaCBUbyBUYWJsZVwiXG4gICAgICAgICAgICAgICAgICA+PC92ZXJiZW5hLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDx2ZXJiZW5hLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICFwZXJtaXNzaW9uQ29uZmlnIHx8IHBlcm1pc3Npb25Db25maWcuQWN0aW9uc1snQ3JlYXRlJ11cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2ZXJiZW4tcHJpbWFyeS1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidGhpcy5zYXZlRm9ybSgpXCJcbiAgICAgICAgICAgICAgICAgICAgdGV4dD1cIlNhdmVcIlxuICAgICAgICAgICAgICAgICAgPjwvdmVyYmVuYS1idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC92ZXJiZW4tcmlnaHQtY2FyZC1kYXRhLXZpZXc+XG4gICAgICAgIDwhLS0gPHZlcmJlbi1yaWdodC1jYXJkLWRhdGEtdmlldz5cbiAgICAgICAgICB5ZXNoaGhoaGhcbiAgICAgICAgPC92ZXJiZW4tcmlnaHQtY2FyZC1kYXRhLXZpZXc+IC0tPlxuXG4gICAgICAgIDx2ZXJiZW4tY2FyZC1kYXRhLXZpZXctZm9vdGVyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAqbmdJZj1cIiF2ZGN2Lmhhc0N1cnJlbnRJdGVtKClcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm1lc3NhZ2UtbG9nLWJ1dHRvbi1jb250YWluZXIgZmxleCBqdXN0aWZ5LWJldHdlZW5cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8IS0tIDx2ZXJiZW5hLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtmb250V2VpZ2h0XT1cIidib2xkJ1wiXG4gICAgICAgICAgICAgICAgW2JnQ29sb3JdPVwiJyM4RThEODcnXCJcbiAgICAgICAgICAgICAgICBbYm9yZGVyUmFkaXVzXT1cIic0cHgnXCJcbiAgICAgICAgICAgICAgICBbdGV4dENvbG9yXT1cIicjZmZmJ1wiXG4gICAgICAgICAgICAgICAgW3RleHRdPVwiJ0RlbGV0ZSdcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvdmVyYmVuYS1idXR0b24+IC0tPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCB7e1xuICAgICAgICAgICAgICAgIHZkY3YuaGFzQ3VycmVudEl0ZW0oKSA/ICdmbGV4LTEnIDogJydcbiAgICAgICAgICAgICAgfX0ganVzdGlmeS1lbmQgaXRlbXMtY2VudGVyIGdhcC01XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWdpbmF0b3ItdGV4dFwiXG4gICAgICAgICAgICAgICAgPnt7IGNhcmREYXRhLmxlbmd0aCB9fSByZWNvcmRzIGxvYWRlZDwvc3BhblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImxvYWRNb3JlKClcIiBjbGFzcz1cImxvYWQtbW9yZSB2aWV3LWxpbmtzXCI+XG4gICAgICAgICAgICAgICAgTG9hZCBtb3JlXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdmVyYmVuLWNhcmQtZGF0YS12aWV3LWZvb3Rlcj5cbiAgICAgIDwvdmVyYmVuLWNhcmQtZGF0YS12aWV3PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY29sdW1uLWNvbnRlbnQ+XG4gICAgICA8dmVyYmVuLXZpc2libGUtY29sdW1uXG4gICAgICAgIChjb2x1bW5zVXBkYXRlZCk9XCJvbkNvbHVtbnNVcGRhdGVkKCRldmVudClcIlxuICAgICAgICBbYm9yZGVyXT1cIicxcHggc29saWQgcmdiYSgyMTIsIDE2MCwgNywgMSknXCJcbiAgICAgICAgYm9yZGVyUmFkaXVzPVwiMTBweFwiXG4gICAgICAgIGJveFNoYWRvdz1cIjJweCAycHggMnB4IDBweCBzaWx2ZXJcIlxuICAgICAgICBiZ0NvbG9yPVwid2hpdGVcIlxuICAgICAgICB3aWR0aD1cIjQwMHB4XCJcbiAgICAgICAgdGV4dENvbG9yPVwiYmxhY2tcIlxuICAgICAgICBwZD1cIjFyZW1cIlxuICAgICAgICBwcmltYXJ5Q29sb3I9XCIjRkZFNjgxXCJcbiAgICAgICAgc2Vjb25kYXJ5Q29sb3I9XCIjMzQ3OUU5XCJcbiAgICAgICAgW2NvbHVtbnNdPVwidmlzaWJsZUNvbHVtbnNcIlxuICAgICAgICBbZGlzcGxheWVkQ29sdW1uc109XCI1XCJcbiAgICAgID48L3ZlcmJlbi12aXNpYmxlLWNvbHVtbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGZpbHRlci1jb250ZW50PlxuICAgICAgPHZlcmJlbi10YWJsZS1maWx0ZXJcbiAgICAgICAgKGZpbHRlcnNBcHBsaWVkKT1cIm9uRmlsdGVyVXBkYXRlZCgkZXZlbnQpXCJcbiAgICAgICAgW2JvcmRlcl09XCInMXB4IHNvbGlkIHJnYmEoMjEyLCAxNjAsIDcsIDEpJ1wiXG4gICAgICAgIGJvcmRlclJhZGl1cz1cIjEwcHhcIlxuICAgICAgICBib3hTaGFkb3c9XCIycHggMnB4IDJweCAwcHggc2lsdmVyXCJcbiAgICAgICAgYmdDb2xvcj1cIndoaXRlXCJcbiAgICAgICAgd2lkdGg9XCI0MjBweFwiXG4gICAgICAgIHRleHRDb2xvcj1cImJsYWNrXCJcbiAgICAgICAgcGQ9XCIxcmVtXCJcbiAgICAgICAgcHJpbWFyeUNvbG9yPVwiI0ZGRTY4MVwiXG4gICAgICAgIHNlY29uZGFyeUNvbG9yPVwiIzM0NzlFOVwiXG4gICAgICAgIHRlcnRpYXJ5Q29sb3I9XCIjNDA0MDQwXCJcbiAgICAgICAgW2ZpbHRlck9wdGlvbnNdPVwiZmlsdGVyQXJyYXlcIlxuICAgICAgICBbbWF4RmlsdGVyTGVuZ3RoXT1cIjNcIlxuICAgICAgPjwvdmVyYmVuLXRhYmxlLWZpbHRlcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IHNvcnQtY29udGVudD5cbiAgICAgIDx2ZXJiZW4tc29ydC10YWJsZVxuICAgICAgICAoc2VsZWN0ZWRPcHRpb25zKT1cIm9uU29ydFVwZGF0ZWQoJGV2ZW50KVwiXG4gICAgICAgIFtib3JkZXJdPVwiJzFweCBzb2xpZCByZ2JhKDIxMiwgMTYwLCA3LCAxKSdcIlxuICAgICAgICBib3JkZXJSYWRpdXM9XCIxMHB4XCJcbiAgICAgICAgYm94U2hhZG93PVwiMnB4IDJweCAycHggMHB4IHNpbHZlclwiXG4gICAgICAgIGJnQ29sb3I9XCJ3aGl0ZVwiXG4gICAgICAgIHdpZHRoPVwiNDAwcHhcIlxuICAgICAgICB0ZXh0Q29sb3I9XCJibGFja1wiXG4gICAgICAgIHBkPVwiMXJlbVwiXG4gICAgICAgIHByaW1hcnlDb2xvcj1cIiNGRkU2ODFcIlxuICAgICAgICBzZWNvbmRhcnlDb2xvcj1cIiMzNDc5RTlcIlxuICAgICAgICB0ZXJ0aWFyeUNvbG9yPVwiIzQwNDA0MFwiXG4gICAgICAgIFtlbmFibGVEcmFnQW5kRHJvcF09XCJ0cnVlXCJcbiAgICAgICAgW3NvcnRPcHRpb25zXT1cInNvcnRPcHRpb25zXCJcbiAgICAgID48L3ZlcmJlbi1zb3J0LXRhYmxlPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgZXhwb3J0LWNvbnRlbnQ+XG4gICAgICA8bGliLWRhdGEteHBvcnRcbiAgICAgICAgW3VzZUltcG9ydEtleV09XCJ0cnVlXCJcbiAgICAgICAgW2NvbHVtbnNdPVwidmlzaWJsZUNvbHVtbkRlZlwiXG4gICAgICAgIFtkYXRhXT1cImRhdGFcIlxuICAgICAgICBbZGF0YVF1ZXJ5RnVuY3Rpb25dPVwiZXhwb3J0RmlsdGVyc0FuZFNvcnRzXCJcbiAgICAgID5cbiAgICAgIDwvbGliLWRhdGEteHBvcnQ+XG4gICAgICA8IS0tIDxsaWItZGF0YS1leHBvcnQgW2RhdGFdPVwiZGF0YVwiIChleHBvcnREYXRhRXZlbnQpPVwiaGFuZGxlRXhwb3J0KCRldmVudClcIj5cbiAgICAgIDwvbGliLWRhdGEtZXhwb3J0PiAtLT5cbiAgICA8L2Rpdj5cbiAgPC92ZXJiZW4tZGF0YS12aWV3PlxuICA8ZGl2ICpuZ0lmPVwidmR2LmlzVGFibGVWaWV3XCIgY2xhc3M9XCJmbGV4IGdhcC0yIGp1c3RpZnktYmV0d2VlblwiPlxuICAgIDxkaXYgY2xhc3M9XCJtZXNzYWdlLWxvZy1idXR0b24tY29udGFpbmVyIGZsZXgganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICA8IS0tIDx2ZXJiZW5hLWJ1dHRvblxuICAgICAgICBbZm9udFdlaWdodF09XCInYm9sZCdcIlxuICAgICAgICBbYmdDb2xvcl09XCInIzhFOEQ4NydcIlxuICAgICAgICBbYm9yZGVyUmFkaXVzXT1cIic0cHgnXCJcbiAgICAgICAgW3RleHRDb2xvcl09XCInI2ZmZidcIlxuICAgICAgICBbdGV4dF09XCInRGVsZXRlJ1wiXG4gICAgICA+XG4gICAgICA8L3ZlcmJlbmEtYnV0dG9uPiAtLT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZCBpdGVtcy1jZW50ZXIgZ2FwLTVcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwicGFnaW5hdG9yLXRleHRcIj57eyBjYXJkRGF0YS5sZW5ndGggfX0gcmVjb3JkcyBsb2FkZWQ8L3NwYW4+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJsb2FkTW9yZSgpXCIgY2xhc3M9XCJsb2FkLW1vcmUgdmlldy1saW5rc1wiPlxuICAgICAgICBMb2FkIG1vcmVcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
673
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvY29tcG9uZW50cy9mb3Jtcy9mb3Jtcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm1zL2Zvcm1zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsS0FBSyxFQUdMLFNBQVMsRUFDVCxZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFJdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUlMLGNBQWMsRUFNZixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsYUFBYSxFQUFvQixXQUFXLEVBQWlDLGNBQWMsRUFBRSxrQkFBa0IsRUFBdUIsdUJBQXVCLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFak8sT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7O0FBRy9DLElBQUssZ0JBS0o7QUFMRCxXQUFLLGdCQUFnQjtJQUNuQixpQ0FBYSxDQUFBO0lBQ2IsNENBQXdCLENBQUE7SUFDeEIsMkNBQXVCLENBQUE7SUFDdkIsOENBQTBCLENBQUE7QUFDNUIsQ0FBQyxFQUxJLGdCQUFnQixLQUFoQixnQkFBZ0IsUUFLcEI7QUFFRCxJQUFLLGVBS0o7QUFMRCxXQUFLLGVBQWU7SUFDbEIsZ0NBQWEsQ0FBQTtJQUNiLDBDQUF1QixDQUFBO0lBQ3ZCLCtDQUE0QixDQUFBO0lBQzVCLDRDQUF5QixDQUFBO0FBQzNCLENBQUMsRUFMSSxlQUFlLEtBQWYsZUFBZSxRQUtuQjtBQUVELElBQUssV0FLSjtBQUxELFdB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QztRQUN6QixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVU7UUFDckIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN6QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRCxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQztZQUNuQyxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUM7WUFDdkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUMsY0FBYyxDQUFDO1FBQ2pELENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNuQyxDQUFDO3dHQS90QlUsY0FBYzs0RkFBZCxjQUFjLGtmQ3ZEM0IscWluQkEwaEJBOzs0RkRuZWEsY0FBYztrQkFMMUIsU0FBUzsrQkFDRSxXQUFXOzBPQVVGLFlBQVk7c0JBQTlCLFNBQVM7dUJBQUMsTUFBTTtnQkFDQyxRQUFRO3NCQUF6QixTQUFTO3VCQUFDLEtBQUs7Z0JBQ0MsU0FBUztzQkFBekIsU0FBUzt1QkFBQyxJQUFJO2dCQUNRLE1BQU07c0JBQTVCLFlBQVk7dUJBQUMsT0FBTztnQkFDWixRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBRdWVyeUxpc3QsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgRm9ybUJ1aWxkZXJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBDYXJkRGF0YSxcbiAgQ2FyZERhdGFWaWV3Q29tcG9uZW50LFxuICBDb2x1bW5EZWZpbml0aW9uLFxuICBEYXRhRmlsdGVyVHlwZSxcbiAgRGF0YVRhYmxlQ29tcG9uZW50LFxuICBEYXRhVmlld0NvbXBvbmVudCxcbiAgRHJvcGRvd25Mb2FkRXZlbnQsXG4gIElEYXRhRmlsdGVyLFxuICBWZXJiZW5Qb3BVcENvbXBvbmVudFxufSBmcm9tICd2ZXJiZW4tbmctdWknO1xuaW1wb3J0IHsgRXJyb3JSZXNwb25zZSwgRm9ybSwgRm9ybUVudGl0eSwgT2JqZWN0U3RhdGUsIFBhZ2VkUmVzdWx0LCBQZXJtaXNzaW9uQ29uZmlnLCBTZWFyY2hPcGVyYXRvciwgU2VhcmNoUHJvcGVydHlTaWduLCBTZWFyY2hQcm9wZXJ0eVZhbHVlLCBTZWFyY2hQcm9wZXJ0eVZhbHVlVHlwZSwgU29ydERpcmVjdGlvbiB9IGZyb20gJ3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL21vZGVscyc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudFNlcnZpY2UsIEh0dHBXZWJSZXF1ZXN0U2VydmljZSwgVXRpbFNlcnZpY2UgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBiYXNlU3R5bGUgfSBmcm9tICcuL2Jhc2UtdGFibGUtc3R5bGUnO1xuaW1wb3J0IHsgRm9ybXNTZXJ2aWNlIH0gZnJvbSAnLi9mb3Jtcy5zZXJ2aWNlJztcblxuZW51bSBGb3JtUHJvcGVydHlOYW1lIHtcbiAgTmFtZSA9ICdOYW1lJyxcbiAgQ3JlYXRlZEF0ID0gJ0NyZWF0ZWQgQXQnLFxuICBBbm9ueW1vdXMgPSAnQW5vbnltb3VzJyxcbiAgRXhwaXJ5RGF0ZSA9ICdFeHBpcnkgRGF0ZScsXG59XG5cbmVudW0gRm9ybVByb3BlcnR5TWFwIHtcbiAgTmFtZSA9ICdOYW1lJyxcbiAgQ3JlYXRlZEF0ID0gJ0NyZWF0ZWRBdCcsXG4gIEFub255bW91cyA9ICdBbGxvd0Fub255bW91cycsXG4gIEV4cGlyeURhdGUgPSAnRXhwaXJ5RGF0ZScsXG59XG5cbmVudW0gRmlsdGVyVHlwZXMge1xuICBCZWZvcmUgPSBTZWFyY2hQcm9wZXJ0eVNpZ24uTFQsXG4gIE9uID0gU2VhcmNoUHJvcGVydHlTaWduLkVRLFxuICBBZnRlciA9IFNlYXJjaFByb3BlcnR5U2lnbi5HVCxcbiAgTkVRID0gU2VhcmNoUHJvcGVydHlTaWduLk5FUSxcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWZvcm1zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm1zLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2Zvcm1zLmNvbXBvbmVudC5jc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBGb3Jtc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHZpc2libGVDb2x1bW5EZWY6IENvbHVtbkRlZmluaXRpb248Rm9ybT5bXSA9IFtdO1xuICBzdHlsZXMgPSBiYXNlU3R5bGU7XG4gIGRhdGE6IEZvcm1bXSA9IFtdO1xuICBjYXJkRGF0YTogQ2FyZERhdGFbXSA9IFtdO1xuICBjdXJyZW50RGF0YTogQ2FyZERhdGEgfCBudWxsID0gbnVsbDtcbiAgQFZpZXdDaGlsZCgndmRjdicpIGNhcmREYXRhVmlldyE6IENhcmREYXRhVmlld0NvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgndmR2JykgZGF0YVZpZXchOiBEYXRhVmlld0NvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnZHQnKSB0YWJsZVZpZXchOiBEYXRhVGFibGVDb21wb25lbnQ8Rm9ybT47XG4gIEBWaWV3Q2hpbGRyZW4oJ3BvcHVwJykgcG9wVXBzITogUXVlcnlMaXN0PFZlcmJlblBvcFVwQ29tcG9uZW50PjtcbiAgQElucHV0KCkgcGFnZVNpemU6IG51bWJlciA9IDIwO1xuICBASW5wdXQoKSBzZWFyY2hEZWJvdW5jZVRpbWU6IG51bWJlciA9IDUwMDtcbiAgQElucHV0KCkgcGVybWlzc2lvbkNvbmZpZzogUGVybWlzc2lvbkNvbmZpZyB8IG51bGwgPSBudWxsO1xuICBwYWdlU3RhdGU6IFBhZ2VkUmVzdWx0PEZvcm0+IHwgbnVsbCA9IG51bGw7XG4gIGlzT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBvcGVuRHJvcGRvd25JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGlzR3JvdXBPcGVuOiBib29sZWFuID0gZmFsc2U7XG4gIG9wZW5Hcm91cERyb3Bkb3duSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBjdXJyZW50RmlsdGVyczogSURhdGFGaWx0ZXJbXSA9IFtdO1xuICBjdXJyZW50U29ydHM6IElEYXRhRmlsdGVyW10gPSBbXTtcbiAgc2VhcmNoVGVybSQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIGdyb3VwczogRm9ybUVudGl0eVtdID0gW107XG4gIHZpc2libGVDb2x1bW5zOiBJRGF0YUZpbHRlcltdID0gW107XG5cbiAgZmlsdGVyQXJyYXk6IElEYXRhRmlsdGVyW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogRm9ybVByb3BlcnR5TmFtZS5OYW1lLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuU3RyaW5nLFxuICAgICAgY2hlY2tlZDogZmFsc2UsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBGb3JtUHJvcGVydHlOYW1lLkNyZWF0ZWRBdCxcbiAgICAgIHR5cGU6IERhdGFGaWx0ZXJUeXBlLkRhdGUsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IEZvcm1Qcm9wZXJ0eU5hbWUuQW5vbnltb3VzLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuQm9vbCxcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogRm9ybVByb3BlcnR5TmFtZS5FeHBpcnlEYXRlLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuRGF0ZSxcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIH0sXG4gIF07XG5cbiAgc29ydE9wdGlvbnM6IElEYXRhRmlsdGVyW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogRm9ybVByb3BlcnR5TmFtZS5OYW1lLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuU3RyaW5nLFxuICAgICAgY2hlY2tlZDogZmFsc2UsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBGb3JtUHJvcGVydHlOYW1lLkNyZWF0ZWRBdCxcbiAgICAgIHR5cGU6IERhdGFGaWx0ZXJUeXBlLkRhdGUsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IEZvcm1Qcm9wZXJ0eU5hbWUuQW5vbnltb3VzLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuQm9vbCxcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogRm9ybVByb3BlcnR5TmFtZS5FeHBpcnlEYXRlLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuRGF0ZSxcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIH0sXG4gIF07XG5cbiAgcHJpdmF0ZSBjdXJyZW50U2VhcmNoVGVybTogc3RyaW5nID0gJyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB1dGlsU2VydmljZTogVXRpbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZXJ2ZXI6IEh0dHBXZWJSZXF1ZXN0U2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBlbnZTdmM6IEVudmlyb25tZW50U2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1zU3ZjOiBGb3Jtc1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy52aXNpYmxlQ29sdW1uRGVmID0gZm9ybXNTdmMuZm9ybUNvbHVtbnM7XG4gICAgdGhpcy52aXNpYmxlQ29sdW1ucyA9IGZvcm1zU3ZjLmZvcm1Db2x1bW5zLm1hcCgoY29sKSA9PiAoe1xuICAgICAgY2hlY2tlZDogdHJ1ZSxcbiAgICAgIG5hbWU6IHR5cGVvZiBjb2wuaGVhZGVyID09PSAnc3RyaW5nJyA/IGNvbC5oZWFkZXIgOiBjb2wuaWQsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5Cb29sLFxuICAgIH0pKTtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZ2V0Rm9ybUVudGl0aWVzKCkudGhlbigocmVzKSA9PiB7XG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBzID0gcmVzO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGZvcm1zID0gYXdhaXQgdGhpcy5nZXRBbGxGb3JtcygpO1xuICAgIGlmIChmb3Jtcykge1xuICAgICAgdGhpcy5kYXRhID0gZm9ybXMubWFwKCh4KSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ueCxcbiAgICAgICAgICBJZDogeC5Db2RlLFxuICAgICAgICAgIGlkOiB4LkNvZGUsXG4gICAgICAgICAgRXhwaXJ5RGF0ZTogbmV3IERhdGUoeC5FeHBpcnlEYXRlLnRvU3RyaW5nKCkpLFxuICAgICAgICAgIEVudGl0aWVzOiB4LkVudGl0aWVzLm1hcCgoeSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4ueSxcbiAgICAgICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5VbmNoYW5nZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICB0aGlzLnNldFVwQ2FyZERhdGEoKTtcbiAgICB9XG4gICAgdGhpcy5zZWFyY2hUZXJtJFxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuc2VhcmNoRGVib3VuY2VUaW1lKSkgLy8gQWRqdXN0IGRlYm91bmNlIHRpbWUgaGVyZSAoaW4gbXMpXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jIChzZWFyY2hUZXJtKSA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudFNlYXJjaFRlcm0gPSBzZWFyY2hUZXJtO1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbHRlcnNBbmRTb3J0cyh0cnVlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0Rm9ybUVudGl0aWVzKCk6IFByb21pc2U8Rm9ybUVudGl0eVtdIHwgdW5kZWZpbmVkPiB7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZXJ2ZXIuZ2V0KFxuICAgICAgYEdldEZvcm1FbnRpdGllcy8wLyR7dGhpcy5wYWdlU2l6ZX0vQ3JlYXRlZEF0LyR7U29ydERpcmVjdGlvbi5EZXNjfWAsXG4gICAgKTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciByZXN1bHQgPSAocmVzIGFzIFBhZ2VkUmVzdWx0PEZvcm1FbnRpdHk+KS5SZXN1bHQ7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxvYWRNb3JlRm9ybUVudGl0aWVzKGV2ZW50OiBEcm9wZG93bkxvYWRFdmVudCk6IFByb21pc2U8Rm9ybUVudGl0eVtdPiB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZXJ2ZXIuZ2V0KFxuICAgICAgYEdldEZvcm1FbnRpdGllcy8ke2V2ZW50LmxvYWRUaW1lcyAqIHRoaXMucGFnZVNpemV9LyR7dGhpcy5wYWdlU2l6ZX0vQ3JlYXRlZEF0LyR7U29ydERpcmVjdGlvbi5EZXNjfWBcbiAgICApO1xuICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciByZXN1bHQgPSAocmVzIGFzIFBhZ2VkUmVzdWx0PEZvcm1FbnRpdHk+KS5SZXN1bHQ7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuICBhc3luYyBzZWFyY2hGb3JtRW50aXRpZXMoXG4gICAgZGF0YTogc3RyaW5nLFxuICAgIGV2ZW50OiBEcm9wZG93bkxvYWRFdmVudFxuICApOiBQcm9taXNlPEZvcm1FbnRpdHlbXT4ge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VydmVyLmdldChcbiAgICAgIGBHZXRGb3JtRW50aXRpZXNXaXRoUGFyYW0vJHtkYXRhfS8ke2V2ZW50LmxvYWRUaW1lcyAqIHRoaXMucGFnZVNpemVcbiAgICAgIH0vJHt0aGlzLnBhZ2VTaXplfWBcbiAgICApO1xuICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciByZXN1bHQgPSAocmVzIGFzIFBhZ2VkUmVzdWx0PEZvcm1FbnRpdHk+KS5SZXN1bHQ7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldEFzeW5jTGFiZWwodmFsdWU6IGFueSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHZhbHVlID8gdmFsdWUuTmFtZSA6ICcnO1xuICB9XG5cbiAgYXN5bmMgZ2V0QWxsRm9ybXMoKTogUHJvbWlzZTxGb3JtW10gfCB1bmRlZmluZWQ+IHtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnNlcnZlci5nZXQoXG4gICAgICBgR2V0Rm9ybXMvMC8ke3RoaXMucGFnZVNpemV9L0NyZWF0ZWRBdC8ke1NvcnREaXJlY3Rpb24uRGVzY31gLFxuICAgICAgdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUElcbiAgICApO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGZhbHNlKTtcbiAgICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYWdlU3RhdGUgPSByZXMgYXMgUGFnZWRSZXN1bHQ8Rm9ybT47XG4gICAgICB2YXIgcmVzdWx0ID0gKHJlcyBhcyBQYWdlZFJlc3VsdDxGb3JtPikuUmVzdWx0O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsb2FkTW9yZSgpIHtcbiAgICBpZiAoIXRoaXMucGFnZVN0YXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICAgIGNvbnN0IHJlcyA9XG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJzLmxlbmd0aCA+IDAgfHxcbiAgICAgICAgdGhpcy5jdXJyZW50U29ydHMubGVuZ3RoID4gMCB8fFxuICAgICAgICB0aGlzLmN1cnJlbnRTZWFyY2hUZXJtLnRyaW0oKS5sZW5ndGggPiAwXG4gICAgICAgID8gYXdhaXQgdGhpcy5sb2FkTW9yZUZpbHRlcnNBbmRTb3J0cygpXG4gICAgICAgIDogYXdhaXQgdGhpcy5zZXJ2ZXIuZ2V0KFxuICAgICAgICAgIGBHZXRGb3Jtcy8ke3RoaXMucGFnZVN0YXRlLlNraXB9LyR7dGhpcy5wYWdlU2l6ZX0vQ3JlYXRlZEF0LyR7U29ydERpcmVjdGlvbi5EZXNjfWAsXG4gICAgICAgICAgdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUElcbiAgICAgICAgKTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYWdlU3RhdGUgPSByZXMgYXMgUGFnZWRSZXN1bHQ8Rm9ybT47XG4gICAgICB2YXIgcmVzdWx0ID0gKHJlcyBhcyBQYWdlZFJlc3VsdDxGb3JtPikuUmVzdWx0O1xuICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLmNvbmNhdChcbiAgICAgICAgcmVzdWx0Lm1hcCgoeCkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi54LFxuICAgICAgICAgICAgaWQ6IHguQ29kZSxcbiAgICAgICAgICAgIElkOiB4LkNvZGUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICB0aGlzLnNldFVwQ2FyZERhdGFFeHRyYShyZXN1bHQpO1xuICAgIH1cbiAgfVxuXG4gIHNldFVwQ2FyZERhdGEoKSB7XG4gICAgY29uc3QgY2FyZERhdGE6IENhcmREYXRhW10gPSB0aGlzLmRhdGEubWFwKCh4KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIHRpdGxlOiB4Lk5hbWUsXG4gICAgICAgIGRhdGE6IHgsXG4gICAgICAgIGJvZHk6IFtdLFxuICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMuY2FyZERhdGEgPSBjYXJkRGF0YTtcbiAgfVxuXG4gIHNldFVwQ2FyZERhdGFFeHRyYShiYXNlRGF0YTogRm9ybVtdKSB7XG4gICAgY29uc3QgY2FyZERhdGE6IENhcmREYXRhW10gPSBiYXNlRGF0YS5tYXAoKHgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgdGl0bGU6IHguTmFtZSxcbiAgICAgICAgZGF0YTogeCxcbiAgICAgICAgYm9keTogW10sXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5jYXJkRGF0YSA9IHRoaXMuY2FyZERhdGEuY29uY2F0KGNhcmREYXRhKTtcbiAgfVxuXG4gIGdvVG9DYXJkVmlldyhkYXRhOiBGb3JtKSB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuY2FyZERhdGEuZmluZCgoeCkgPT4geC5kYXRhID09IGRhdGEpO1xuICAgIGlmIChpdGVtKSB7XG4gICAgICB0aGlzLmZvcm1DYXJkQ2xpY2tlZChpdGVtLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBnb1RvVGFibGVWaWV3KCkge1xuICAgIGlmICghdGhpcy5jdXJyZW50RGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmRhdGFWaWV3LnRvZ2dsZVZpZXcoKTtcbiAgICBjb25zdCBpZCA9IHRoaXMuY3VycmVudERhdGEuZGF0YSA/IHRoaXMuY3VycmVudERhdGEuZGF0YS5JZCA6ICcnO1xuICAgIGlmIChpZC50cmltKCkubGVuZ3RoID4gMCAmJiAhdGhpcy50YWJsZVZpZXcuaXNSb3dFZGl0aW5nKGlkKSkge1xuICAgICAgdGhpcy50YWJsZVZpZXcudG9nZ2xlUm93RWRpdChpZCk7XG4gICAgfVxuICB9XG5cbiAgdmlld1Jlc3BvbnNlcyhjb2RlOiBzdHJpbmcpIHtcbiAgICBpZiAoY29kZS50cmltKCkubGVuZ3RoID09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gdGhpcy5vblZpZXdQcm9jZXNzQ2xpY2tlZC5lbWl0KGNvZGUpO1xuICAgIHRoaXMuY2xvc2VQb3BVcCgpO1xuICB9XG5cbiAgZm9ybUNhcmRDbGlja2VkKGl0ZW06IENhcmREYXRhLCB0b2dnbGVWaWV3OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLmN1cnJlbnREYXRhID0gdGhpcy5jYXJkRGF0YVZpZXcub25JdGVtQ2xpY2soaXRlbSk7XG4gICAgaWYgKHRvZ2dsZVZpZXcpIHtcbiAgICAgIHRoaXMuZGF0YVZpZXcudG9nZ2xlVmlldygpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmVGb3JtKCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnREYXRhKSB7XG4gICAgICB2YXIgZm9ybTogRm9ybSA9IHRoaXMuY3VycmVudERhdGEuZGF0YSBhcyBGb3JtO1xuXG4gICAgICBpZiAodGhpcy5jdXJyZW50RGF0YS5kYXRhLk5hbWUudHJpbSgpLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd0luZm8oJ05hbWUgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGZvcm0uRGF0YVN0YXRlID1cbiAgICAgICAgZm9ybS5EYXRhU3RhdGUgPT0gT2JqZWN0U3RhdGUuTmV3XG4gICAgICAgICAgPyBPYmplY3RTdGF0ZS5OZXdcbiAgICAgICAgICA6IE9iamVjdFN0YXRlLkNoYW5nZWQ7XG4gICAgICBmb3JtLklkID0gJyc7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VydmVyLnBvc3QoXG4gICAgICAgIGBTYXZlRm9ybXNgLFxuICAgICAgICBbZm9ybV0sXG4gICAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgICApO1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICAgICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ0Zvcm0gc2F2ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlcyBhcyBGb3JtW107XG4gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHZhciB1c2VyUmVzdWx0ID0gcmVzdWx0WzBdO1xuICAgICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IHRoaXMuZGF0YS5maW5kSW5kZXgoXG4gICAgICAgICAgICAoeCkgPT4geCA9PSB0aGlzLmN1cnJlbnREYXRhPy5kYXRhXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoaXRlbUluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLkNvZGUgPSB1c2VyUmVzdWx0LkNvZGU7XG4gICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5JZCA9IHVzZXJSZXN1bHQuQ29kZTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLmlkID0gdXNlclJlc3VsdC5Db2RlO1xuICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uRGF0YVN0YXRlID0gdXNlclJlc3VsdC5EYXRhU3RhdGU7XG4gICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5UZW5hbnRJZCA9IHVzZXJSZXN1bHQuVGVuYW50SWQ7XG4gICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5TZXJ2aWNlTmFtZSA9IHVzZXJSZXN1bHQuU2VydmljZU5hbWU7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEubWFwKCh4KSA9PiB4KTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVJdGVtKHRoaXMuZGF0YVtpdGVtSW5kZXhdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgYXN5bmMgdGFibGVTYXZlRm9ybShmb3JtOiBGb3JtLCBjYWxsQmFjazogKCkgPT4gYW55KSB7XG4gICAgaWYgKGZvcm0uTmFtZS50cmltKCkubGVuZ3RoID09IDApIHtcbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd0luZm8oJ05hbWUgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvcm0uRGF0YVN0YXRlID1cbiAgICAgIGZvcm0uRGF0YVN0YXRlID09IE9iamVjdFN0YXRlLk5ldyA/IE9iamVjdFN0YXRlLk5ldyA6IE9iamVjdFN0YXRlLkNoYW5nZWQ7XG4gICAgZm9ybS5JZCA9ICcnO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VydmVyLnBvc3QoXG4gICAgICBgU2F2ZUZvcm1zYCxcbiAgICAgIFtmb3JtXSxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgKTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93U3VjY2VzcygnRm9ybSBzYXZlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlcyBhcyBGb3JtW107XG4gICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIHVzZXJSZXN1bHQgPSByZXN1bHRbMF07XG4gICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IHRoaXMuZGF0YS5maW5kSW5kZXgoKHgpID0+IHggPT0gZm9ybSk7XG4gICAgICAgIGlmIChpdGVtSW5kZXggPiAtMSkge1xuICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLkNvZGUgPSB1c2VyUmVzdWx0LkNvZGU7XG4gICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uSWQgPSB1c2VyUmVzdWx0LkNvZGU7XG4gICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uaWQgPSB1c2VyUmVzdWx0LkNvZGU7XG4gICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uRGF0YVN0YXRlID0gdXNlclJlc3VsdC5EYXRhU3RhdGU7XG4gICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uVGVuYW50SWQgPSB1c2VyUmVzdWx0LlRlbmFudElkO1xuICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlNlcnZpY2VOYW1lID0gdXNlclJlc3VsdC5TZXJ2aWNlTmFtZTtcbiAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEubWFwKCh4KSA9PiB4KTtcbiAgICAgICAgICB0aGlzLmNhY2hlSXRlbSh0aGlzLmRhdGFbaXRlbUluZGV4XSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FsbEJhY2soKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGVUYWJsZSgpIHtcbiAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEubWFwKCh4KSA9PiB4KTtcbiAgfVxuXG4gIHVwZGF0ZUl0ZW0odmFsdWU6IGFueSwga2V5OiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBba2V5XTogdmFsdWUsXG4gICAgfTtcbiAgfVxuXG4gIGNsb3NlUG9wVXAoKSB7XG4gICAgdGhpcy5vcGVuRHJvcGRvd25JZCA9IG51bGw7XG4gICAgdGhpcy5wb3BVcHMuZm9yRWFjaCgocG9wVXApID0+IHtcbiAgICAgIGlmIChwb3BVcC5kcm9wZG93bk9wZW4pIHtcbiAgICAgICAgcG9wVXAudG9nZ2xlRHJvcGRvd24oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBjbG9zZUdyb3VwUG9wVXAoKSB7XG4gICAgdGhpcy5vcGVuR3JvdXBEcm9wZG93bklkID0gbnVsbDtcbiAgfVxuXG4gIG9uVmlld0NoYW5nZShpc0dyaWRWaWV3OiBib29sZWFuKTogdm9pZCB7IH1cblxuICBvblN0YXRlQ2hhbmdlKGV2ZW50OiB7IGtleTogc3RyaW5nOyB2YWx1ZTogYm9vbGVhbiB9KTogdm9pZCB7XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ2NyZWF0ZSc6XG4gICAgICAgIHZhciBuZXdGb3JtOiBGb3JtID0ge1xuICAgICAgICAgIE5hbWU6ICcnLFxuICAgICAgICAgIFRlbmFudElkOiAnJyxcbiAgICAgICAgICBTZXJ2aWNlTmFtZTogJycsXG4gICAgICAgICAgaWQ6ICh0aGlzLmNhcmREYXRhLmxlbmd0aCArIDEpLnRvU3RyaW5nKCksXG4gICAgICAgICAgSWQ6ICh0aGlzLmNhcmREYXRhLmxlbmd0aCArIDEpLnRvU3RyaW5nKCksXG4gICAgICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgICBDb2RlOiAnJyxcbiAgICAgICAgICBFbnRpdGllczogW10sXG4gICAgICAgICAgSXNWYWxpZDogZmFsc2UsXG4gICAgICAgICAgQWxsb3dBbm9ueW1vdXM6IGZhbHNlLFxuICAgICAgICAgIFdvcmtmbG93OiAnJyxcbiAgICAgICAgICBVUkw6ICcnLFxuICAgICAgICAgIER1cmF0aW9uOiAwLFxuICAgICAgICAgIEV4cGlyeURhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgRm9ybVZhbHVlc01vZGlmaWVkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY2FyZERhdGE6IENhcmREYXRhID0ge1xuICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICB0aXRsZTogbmV3Rm9ybS5OYW1lLFxuICAgICAgICAgIGRhdGE6IG5ld0Zvcm0sXG4gICAgICAgICAgYm9keTogW10sXG4gICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuY29uY2F0KFtuZXdGb3JtXSk7XG4gICAgICAgIHRoaXMuY2FyZERhdGEucHVzaChjYXJkRGF0YSk7XG4gICAgICAgIHRoaXMuZm9ybUNhcmRDbGlja2VkKGNhcmREYXRhKTtcbiAgICAgICAgdGhpcy5kYXRhVmlldy5pc1RhYmxlVmlldyA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHNob3dUYWJsZVZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgb25TZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0ZWRSb3dzOiBGb3JtW10pIHsgfVxuXG4gIG9uQ29sdW1uc1VwZGF0ZWQodXBkYXRlZENvbHVtbnM6IElEYXRhRmlsdGVyW10pIHtcbiAgICBjb25zdCB1cGRhdGVkQ29sdW1uRGVmOiBDb2x1bW5EZWZpbml0aW9uPEZvcm0+W10gPSBbXTtcbiAgICB1cGRhdGVkQ29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoaW5nQ29sID0gdGhpcy5mb3Jtc1N2Yy5mb3JtQ29sdW1ucy5maW5kKFxuICAgICAgICAoY29sdW1uKSA9PiBjb2x1bW4uaGVhZGVyID09PSBjb2wubmFtZSB8fCBjb2x1bW4uaWQgPT09IGNvbC5uYW1lXG4gICAgICApO1xuICAgICAgaWYgKG1hdGNoaW5nQ29sKSB7XG4gICAgICAgIHVwZGF0ZWRDb2x1bW5EZWYucHVzaChtYXRjaGluZ0NvbCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnZpc2libGVDb2x1bW5EZWYgPSBbLi4udXBkYXRlZENvbHVtbkRlZl07XG4gIH1cblxuICBleHBvcnRGaWx0ZXJzQW5kU29ydHMgPSBhc3luYyAocGFnZVN0YXRlOiB7XG4gICAgc2tpcDogbnVtYmVyO1xuICAgIGxpbWl0OiBudW1iZXI7XG4gIH0pID0+IHtcbiAgICB2YXIgcGF5bG9hZDogU2VhcmNoUHJvcGVydHlWYWx1ZVtdID0gdGhpcy5jdXJyZW50RmlsdGVycy5tYXAoKHgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFByb3BlcnR5TmFtZTpcbiAgICAgICAgICBGb3JtUHJvcGVydHlNYXBbXG4gICAgICAgICAgeC5uYW1lLnNwbGl0KCcgJykuam9pbignJykgYXMga2V5b2YgdHlwZW9mIEZvcm1Qcm9wZXJ0eU1hcFxuICAgICAgICAgIF0sXG4gICAgICAgIEVudGl0eVZhbHVlOiB4LnZhbHVlLFxuICAgICAgICBPcGVyYXRvcjogU2VhcmNoT3BlcmF0b3IuQW5kLFxuICAgICAgICBTaWduOlxuICAgICAgICAgIHguY29uZGl0aW9uICYmIE9iamVjdC5rZXlzKEZpbHRlclR5cGVzKS5pbmNsdWRlcyh4LmNvbmRpdGlvbilcbiAgICAgICAgICAgID8gKEZpbHRlclR5cGVzW1xuICAgICAgICAgICAgICB4LmNvbmRpdGlvbiBhcyBrZXlvZiB0eXBlb2YgRmlsdGVyVHlwZXNcbiAgICAgICAgICAgIF0gYXMgdW5rbm93biBhcyBTZWFyY2hQcm9wZXJ0eVNpZ24pXG4gICAgICAgICAgICA6IFNlYXJjaFByb3BlcnR5U2lnbi5FUSxcbiAgICAgICAgVHlwZTpcbiAgICAgICAgICB4Lm5hbWUgPT0gRm9ybVByb3BlcnR5TmFtZS5DcmVhdGVkQXQgfHxcbiAgICAgICAgICAgIHgubmFtZSA9PSBGb3JtUHJvcGVydHlOYW1lLkV4cGlyeURhdGVcbiAgICAgICAgICAgID8gU2VhcmNoUHJvcGVydHlWYWx1ZVR5cGUuRGF0ZVxuICAgICAgICAgICAgOiB4Lm5hbWUgPT0gRm9ybVByb3BlcnR5TmFtZS5Bbm9ueW1vdXNcbiAgICAgICAgICAgICAgPyBTZWFyY2hQcm9wZXJ0eVZhbHVlVHlwZS5Cb29sXG4gICAgICAgICAgICAgIDogU2VhcmNoUHJvcGVydHlWYWx1ZVR5cGUuU3RyaW5nLFxuICAgICAgfTtcbiAgICB9KTtcbiAgICAvLyBwYXlsb2FkLnB1c2goe1xuICAgIC8vICAgUHJvcGVydHlOYW1lOiAnQVBJS2V5JyxcbiAgICAvLyAgIEVudGl0eVZhbHVlOiB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5BUElLZXksXG4gICAgLy8gICBPcGVyYXRvcjogU2VhcmNoT3BlcmF0b3IuQW5kLFxuICAgIC8vICAgU2lnbjogU2VhcmNoUHJvcGVydHlTaWduLkVRLFxuICAgIC8vIH0pO1xuICAgIGZvciAobGV0IHNvcnQgb2YgdGhpcy5jdXJyZW50U29ydHMpIHtcbiAgICAgIHBheWxvYWQucHVzaCh7XG4gICAgICAgIFByb3BlcnR5TmFtZTpcbiAgICAgICAgICBGb3JtUHJvcGVydHlNYXBbXG4gICAgICAgICAgc29ydC5uYW1lLnNwbGl0KCcgJykuam9pbignJykgYXMga2V5b2YgdHlwZW9mIEZvcm1Qcm9wZXJ0eU1hcFxuICAgICAgICAgIF0sXG4gICAgICAgIEVudGl0eVZhbHVlOiAnJyxcbiAgICAgICAgT3BlcmF0b3I6IFNlYXJjaE9wZXJhdG9yLkFuZCxcbiAgICAgICAgU2lnbjogU2VhcmNoUHJvcGVydHlTaWduLkVRLFxuICAgICAgICBTb3J0OlxuICAgICAgICAgIHNvcnQudmFsdWUudG9Mb3dlckNhc2UoKSA9PSBTb3J0RGlyZWN0aW9uLkFzYy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICA/IFNvcnREaXJlY3Rpb24uQXNjXG4gICAgICAgICAgICA6IHNvcnQudmFsdWUudG9Mb3dlckNhc2UoKSA9PSBTb3J0RGlyZWN0aW9uLkRlc2MudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICA/IFNvcnREaXJlY3Rpb24uRGVzY1xuICAgICAgICAgICAgICA6IFNvcnREaXJlY3Rpb24uTm9uZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBzZWFyY2hUZXJtRXhpc3RzID0gdGhpcy5jdXJyZW50U2VhcmNoVGVybS50cmltKCkubGVuZ3RoID4gMDtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcbiAgICBjb25zdCByZXMgPSBzZWFyY2hUZXJtRXhpc3RzXG4gICAgICA/IGF3YWl0IHRoaXMuc2VydmVyLmdldChcbiAgICAgICAgYEdldEZvcm1XaXRoUGFyYW0vJHt0aGlzLmN1cnJlbnRTZWFyY2hUZXJtLnRyaW0oKX0vJHtwYWdlU3RhdGUuc2tpcFxuICAgICAgICB9LyR7cGFnZVN0YXRlLmxpbWl0fWAsXG4gICAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgICApXG4gICAgICA6IHBheWxvYWQubGVuZ3RoID09IDBcbiAgICAgICAgPyBhd2FpdCB0aGlzLnNlcnZlci5nZXQoXG4gICAgICAgICAgYEdldEZvcm1zLyR7cGFnZVN0YXRlLnNraXB9LyR7cGFnZVN0YXRlLmxpbWl0fWAsXG4gICAgICAgICAgdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUElcbiAgICAgICAgKVxuICAgICAgICA6IGF3YWl0IHRoaXMuc2VydmVyLnBvc3QoXG4gICAgICAgICAgYFNlYXJjaEZvcm1zLyR7cGFnZVN0YXRlLnNraXB9LyR7cGFnZVN0YXRlLmxpbWl0fWAsXG4gICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5Xb3JrRmxvd0FQSVxuICAgICAgICApO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGZhbHNlKTtcbiAgICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcmVzdWx0ID0gKHJlcyBhcyBQYWdlZFJlc3VsdDxGb3JtPikuUmVzdWx0O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH07XG5cbiAgYXN5bmMgdXBkYXRlRmlsdGVyc0FuZFNvcnRzKGlzU2VhcmNoOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAoIWlzU2VhcmNoKSB7XG4gICAgICB0aGlzLmRhdGFWaWV3Lm9uQ2xlYXJTZWFyY2goKTtcbiAgICAgIHRoaXMuY3VycmVudFNlYXJjaFRlcm0gPSAnJztcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIGNvbnN0IGNsaWNrRXZlbnQgPSBuZXcgTW91c2VFdmVudCgnY2xpY2snLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgICAgIHZpZXc6IHdpbmRvdyxcbiAgICAgIH0pO1xuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjbGlja0V2ZW50KTtcbiAgICB9XG4gICAgdmFyIHBheWxvYWQ6IFNlYXJjaFByb3BlcnR5VmFsdWVbXSA9IHRoaXMuY3VycmVudEZpbHRlcnMubWFwKCh4KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBQcm9wZXJ0eU5hbWU6XG4gICAgICAgICAgRm9ybVByb3BlcnR5TWFwW1xuICAgICAgICAgIHgubmFtZS5zcGxpdCgnICcpLmpvaW4oJycpIGFzIGtleW9mIHR5cGVvZiBGb3JtUHJvcGVydHlNYXBcbiAgICAgICAgICBdLFxuICAgICAgICBFbnRpdHlWYWx1ZTogeC52YWx1ZSxcbiAgICAgICAgT3BlcmF0b3I6IFNlYXJjaE9wZXJhdG9yLkFuZCxcbiAgICAgICAgU2lnbjpcbiAgICAgICAgICB4LmNvbmRpdGlvbiAmJiBPYmplY3Qua2V5cyhGaWx0ZXJUeXBlcykuaW5jbHVkZXMoeC5jb25kaXRpb24pXG4gICAgICAgICAgICA/IChGaWx0ZXJUeXBlc1tcbiAgICAgICAgICAgICAgeC5jb25kaXRpb24gYXMga2V5b2YgdHlwZW9mIEZpbHRlclR5cGVzXG4gICAgICAgICAgICBdIGFzIHVua25vd24gYXMgU2VhcmNoUHJvcGVydHlTaWduKVxuICAgICAgICAgICAgOiBTZWFyY2hQcm9wZXJ0eVNpZ24uRVEsXG4gICAgICAgIFR5cGU6XG4gICAgICAgICAgeC5uYW1lID09IEZvcm1Qcm9wZXJ0eU5hbWUuQ3JlYXRlZEF0IHx8XG4gICAgICAgICAgICB4Lm5hbWUgPT0gRm9ybVByb3BlcnR5TmFtZS5FeHBpcnlEYXRlXG4gICAgICAgICAgICA/IFNlYXJjaFByb3BlcnR5VmFsdWVUeXBlLkRhdGVcbiAgICAgICAgICAgIDogeC5uYW1lID09IEZvcm1Qcm9wZXJ0eU5hbWUuQW5vbnltb3VzXG4gICAgICAgICAgICAgID8gU2VhcmNoUHJvcGVydHlWYWx1ZVR5cGUuQm9vbFxuICAgICAgICAgICAgICA6IFNlYXJjaFByb3BlcnR5VmFsdWVUeXBlLlN0cmluZyxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgLy8gcGF5bG9hZC5wdXNoKHtcbiAgICAvLyAgIFByb3BlcnR5TmFtZTogJ0FQSUtleScsXG4gICAgLy8gICBFbnRpdHlWYWx1ZTogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgIC8vICAgT3BlcmF0b3I6IFNlYXJjaE9wZXJhdG9yLkFuZCxcbiAgICAvLyAgIFNpZ246IFNlYXJjaFByb3BlcnR5U2lnbi5FUSxcbiAgICAvLyB9KTtcbiAgICBmb3IgKGxldCBzb3J0IG9mIHRoaXMuY3VycmVudFNvcnRzKSB7XG4gICAgICBwYXlsb2FkLnB1c2goe1xuICAgICAgICBQcm9wZXJ0eU5hbWU6XG4gICAgICAgICAgRm9ybVByb3BlcnR5TWFwW1xuICAgICAgICAgIHNvcnQubmFtZS5zcGxpdCgnICcpLmpvaW4oJycpIGFzIGtleW9mIHR5cGVvZiBGb3JtUHJvcGVydHlNYXBcbiAgICAgICAgICBdLFxuICAgICAgICBFbnRpdHlWYWx1ZTogJycsXG4gICAgICAgIE9wZXJhdG9yOiBTZWFyY2hPcGVyYXRvci5BbmQsXG4gICAgICAgIFNpZ246IFNlYXJjaFByb3BlcnR5U2lnbi5FUSxcbiAgICAgICAgU29ydDpcbiAgICAgICAgICBzb3J0LnZhbHVlLnRvTG93ZXJDYXNlKCkgPT0gU29ydERpcmVjdGlvbi5Bc2MudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgPyBTb3J0RGlyZWN0aW9uLkFzY1xuICAgICAgICAgICAgOiBzb3J0LnZhbHVlLnRvTG93ZXJDYXNlKCkgPT0gU29ydERpcmVjdGlvbi5EZXNjLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgPyBTb3J0RGlyZWN0aW9uLkRlc2NcbiAgICAgICAgICAgICAgOiBTb3J0RGlyZWN0aW9uLk5vbmUsXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3Qgc2VhcmNoVGVybUV4aXN0cyA9IHRoaXMuY3VycmVudFNlYXJjaFRlcm0udHJpbSgpLmxlbmd0aCA+IDA7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG4gICAgY29uc3QgcmVzID0gc2VhcmNoVGVybUV4aXN0c1xuICAgICAgPyBhd2FpdCB0aGlzLnNlcnZlci5nZXQoXG4gICAgICAgIGBHZXRGb3JtV2l0aFBhcmFtLyR7dGhpcy5jdXJyZW50U2VhcmNoVGVybS50cmltKCl9LzAvJHt0aGlzLnBhZ2VTaXplXG4gICAgICAgIH1gLFxuICAgICAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5Xb3JrRmxvd0FQSVxuICAgICAgKVxuICAgICAgOiBwYXlsb2FkLmxlbmd0aCA9PSAwXG4gICAgICAgID8gYXdhaXQgdGhpcy5zZXJ2ZXIuZ2V0KFxuICAgICAgICAgIGBHZXRGb3Jtcy8wLyR7dGhpcy5wYWdlU2l6ZX1gLFxuICAgICAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgICAgIClcbiAgICAgICAgOiBhd2FpdCB0aGlzLnNlcnZlci5wb3N0KFxuICAgICAgICAgIGBTZWFyY2hGb3Jtcy8wLyR7dGhpcy5wYWdlU2l6ZX1gLFxuICAgICAgICAgIHBheWxvYWQsXG4gICAgICAgICAgdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUElcbiAgICAgICAgKTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlcnMgPSBbXTtcbiAgICAgIHRoaXMuY3VycmVudFNvcnRzID0gW107XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhcmREYXRhVmlldy5jbGVhckRhdGEoKTtcbiAgICAgIHRoaXMuY3VycmVudERhdGEgPSBudWxsO1xuICAgICAgdGhpcy5wYWdlU3RhdGUgPSByZXMgYXMgUGFnZWRSZXN1bHQ8Rm9ybT47XG4gICAgICB2YXIgcmVzdWx0ID0gKHJlcyBhcyBQYWdlZFJlc3VsdDxGb3JtPikuUmVzdWx0O1xuICAgICAgdGhpcy5kYXRhID0gcmVzdWx0Lm1hcCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLngsXG4gICAgICAgICAgSWQ6IHguQ29kZSxcbiAgICAgICAgICBpZDogeC5Db2RlLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICB0aGlzLnNldFVwQ2FyZERhdGEoKTtcbiAgICB9XG4gIH1cbiAgYXN5bmMgbG9hZE1vcmVGaWx0ZXJzQW5kU29ydHMoKTogUHJvbWlzZTxQYWdlZFJlc3VsdDxGb3JtPiB8IHVuZGVmaW5lZD4ge1xuICAgIGlmICghdGhpcy5wYWdlU3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHBheWxvYWQ6IFNlYXJjaFByb3BlcnR5VmFsdWVbXSA9IHRoaXMuY3VycmVudEZpbHRlcnMubWFwKCh4KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBQcm9wZXJ0eU5hbWU6XG4gICAgICAgICAgRm9ybVByb3BlcnR5TWFwW1xuICAgICAgICAgIHgubmFtZS5zcGxpdCgnICcpLmpvaW4oJycpIGFzIGtleW9mIHR5cGVvZiBGb3JtUHJvcGVydHlNYXBcbiAgICAgICAgICBdLFxuICAgICAgICBFbnRpdHlWYWx1ZTogeC52YWx1ZSxcbiAgICAgICAgT3BlcmF0b3I6IFNlYXJjaE9wZXJhdG9yLkFuZCxcbiAgICAgICAgU2lnbjpcbiAgICAgICAgICB4LmNvbmRpdGlvbiAmJiBPYmplY3Qua2V5cyhGaWx0ZXJUeXBlcykuaW5jbHVkZXMoeC5jb25kaXRpb24pXG4gICAgICAgICAgICA/IChGaWx0ZXJUeXBlc1tcbiAgICAgICAgICAgICAgeC5jb25kaXRpb24gYXMga2V5b2YgdHlwZW9mIEZpbHRlclR5cGVzXG4gICAgICAgICAgICBdIGFzIHVua25vd24gYXMgU2VhcmNoUHJvcGVydHlTaWduKVxuICAgICAgICAgICAgOiBTZWFyY2hQcm9wZXJ0eVNpZ24uRVEsXG4gICAgICAgIFR5cGU6XG4gICAgICAgICAgeC5uYW1lID09IEZvcm1Qcm9wZXJ0eU5hbWUuQ3JlYXRlZEF0IHx8XG4gICAgICAgICAgICB4Lm5hbWUgPT0gRm9ybVByb3BlcnR5TmFtZS5FeHBpcnlEYXRlXG4gICAgICAgICAgICA/IFNlYXJjaFByb3BlcnR5VmFsdWVUeXBlLkRhdGVcbiAgICAgICAgICAgIDogeC5uYW1lID09IEZvcm1Qcm9wZXJ0eU5hbWUuQW5vbnltb3VzXG4gICAgICAgICAgICAgID8gU2VhcmNoUHJvcGVydHlWYWx1ZVR5cGUuQm9vbFxuICAgICAgICAgICAgICA6IFNlYXJjaFByb3BlcnR5VmFsdWVUeXBlLlN0cmluZyxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgZm9yIChsZXQgc29ydCBvZiB0aGlzLmN1cnJlbnRTb3J0cykge1xuICAgICAgcGF5bG9hZC5wdXNoKHtcbiAgICAgICAgUHJvcGVydHlOYW1lOlxuICAgICAgICAgIEZvcm1Qcm9wZXJ0eU1hcFtcbiAgICAgICAgICBzb3J0Lm5hbWUuc3BsaXQoJyAnKS5qb2luKCcnKSBhcyBrZXlvZiB0eXBlb2YgRm9ybVByb3BlcnR5TWFwXG4gICAgICAgICAgXSxcbiAgICAgICAgRW50aXR5VmFsdWU6ICcnLFxuICAgICAgICBPcGVyYXRvcjogU2VhcmNoT3BlcmF0b3IuQW5kLFxuICAgICAgICBTaWduOiBTZWFyY2hQcm9wZXJ0eVNpZ24uRVEsXG4gICAgICAgIFNvcnQ6XG4gICAgICAgICAgc29ydC52YWx1ZS50b0xvd2VyQ2FzZSgpID09IFNvcnREaXJlY3Rpb24uQXNjLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgID8gU29ydERpcmVjdGlvbi5Bc2NcbiAgICAgICAgICAgIDogc29ydC52YWx1ZS50b0xvd2VyQ2FzZSgpID09IFNvcnREaXJlY3Rpb24uRGVzYy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgID8gU29ydERpcmVjdGlvbi5EZXNjXG4gICAgICAgICAgICAgIDogU29ydERpcmVjdGlvbi5Ob25lLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHNlYXJjaFRlcm1FeGlzdHMgPSB0aGlzLmN1cnJlbnRTZWFyY2hUZXJtLnRyaW0oKS5sZW5ndGggPiAwO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICAgIGNvbnN0IHJlcyA9IHNlYXJjaFRlcm1FeGlzdHNcbiAgICAgID8gYXdhaXQgdGhpcy5zZXJ2ZXIuZ2V0KFxuICAgICAgICBgR2V0Rm9ybVdpdGhQYXJhbS8ke3RoaXMuY3VycmVudFNlYXJjaFRlcm0udHJpbSgpfS8ke3RoaXMucGFnZVN0YXRlLlNraXBcbiAgICAgICAgfS8ke3RoaXMucGFnZVNpemV9YCxcbiAgICAgICAgdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUElcbiAgICAgIClcbiAgICAgIDogcGF5bG9hZC5sZW5ndGggPT0gMFxuICAgICAgICA/IGF3YWl0IHRoaXMuc2VydmVyLmdldChcbiAgICAgICAgICBgR2V0Rm9ybXMvJHt0aGlzLnBhZ2VTdGF0ZS5Ta2lwfS8ke3RoaXMucGFnZVNpemV9YCxcbiAgICAgICAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5Xb3JrRmxvd0FQSVxuICAgICAgICApXG4gICAgICAgIDogYXdhaXQgdGhpcy5zZXJ2ZXIucG9zdChcbiAgICAgICAgICBgU2VhcmNoRm9ybXMvJHt0aGlzLnBhZ2VTdGF0ZS5Ta2lwfS8ke3RoaXMucGFnZVNpemV9YCxcbiAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgICAgICk7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcmVzdWx0ID0gcmVzIGFzIFBhZ2VkUmVzdWx0PEZvcm0+O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cblxuICBvbkZpbHRlclVwZGF0ZWQodXBkYXRlZEZpbHRlcnM6IElEYXRhRmlsdGVyW10gfCBzdHJpbmcpIHtcbiAgICAvLyBFbnN1cmUgdXBkYXRlZEZpbHRlcnMgaXMgYW4gYXJyYXlcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh1cGRhdGVkRmlsdGVycykpIHtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlcnMgPSB1cGRhdGVkRmlsdGVycztcbiAgICAgIHRoaXMudXBkYXRlRmlsdGVyc0FuZFNvcnRzKCk7XG4gICAgfVxuICB9XG4gIG9uU29ydFVwZGF0ZWQodXBkYXRlZFNvcnRzOiBJRGF0YUZpbHRlcltdKSB7XG4gICAgdGhpcy5jdXJyZW50U29ydHMgPSB1cGRhdGVkU29ydHM7XG4gICAgdGhpcy51cGRhdGVGaWx0ZXJzQW5kU29ydHMoKTtcbiAgfVxuXG4gIGhhbmRsZVNlYXJjaChldmVudDogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9KSB7XG4gICAgdGhpcy5zZWFyY2hUZXJtJC5uZXh0KGV2ZW50LnZhbHVlKTtcbiAgfVxuXG4gIGhhbmRsZUV4cG9ydChleHBvcnRlZERhdGE6IFBhcnRpYWw8YW55PltdKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ0V4cG9ydGVkIGRhdGE6JywgZXhwb3J0ZWREYXRhKTtcbiAgICB0aGlzLmRvd25sb2FkQ1NWKGV4cG9ydGVkRGF0YSk7XG4gIH1cblxuICBwcml2YXRlIGRvd25sb2FkQ1NWKGRhdGE6IFBhcnRpYWw8YW55PltdKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IE9iamVjdC5rZXlzKGRhdGFbMF0pO1xuICAgIGNvbnN0IGNzdkNvbnRlbnQgPSBbXG4gICAgICBoZWFkZXJzLmpvaW4oJywnKSxcbiAgICAgIC4uLmRhdGEubWFwKChyb3cpID0+IGhlYWRlcnMubWFwKChoZWFkZXIpID0+IHJvd1toZWFkZXJdKS5qb2luKCcsJykpLFxuICAgIF0uam9pbignXFxuJyk7XG5cbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2NzdkNvbnRlbnRdLCB7IHR5cGU6ICd0ZXh0L2NzdjtjaGFyc2V0PXV0Zi04OycgfSk7XG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBpZiAobGluay5kb3dubG9hZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB1cmwpO1xuICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgJ2V4cG9ydC5jc3YnKTtcbiAgICAgIGxpbmsuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgIGxpbmsuY2xpY2soKTtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XG4gICAgfVxuICB9XG5cbiAgdGFibGVDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBGb3JtPigpO1xuXG4gIGNhY2hlSXRlbShpdGVtOiBGb3JtKSB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSBpdGVtLklkO1xuICAgIHRoaXMudGFibGVDYWNoZS5zZXQoY2FjaGVLZXksIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaXRlbSkpKTtcbiAgfVxuXG4gIHJlc3RvcmVDYWNoZShpdGVtOiBGb3JtKSB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSBpdGVtLklkO1xuICAgIGNvbnN0IGl0ZW1DYWNoZSA9IHRoaXMudGFibGVDYWNoZS5nZXQoY2FjaGVLZXkpO1xuICAgIGlmIChpdGVtQ2FjaGUpIHtcbiAgICAgIGl0ZW0uTmFtZSA9IGl0ZW1DYWNoZS5OYW1lO1xuICAgICAgaXRlbS5FbnRpdGllcyA9IGl0ZW1DYWNoZS5FbnRpdGllcztcbiAgICAgIGl0ZW0uRXhwaXJ5RGF0ZSA9IGl0ZW1DYWNoZS5FeHBpcnlEYXRlO1xuICAgICAgaXRlbS5BbGxvd0Fub255bW91cyA9IGl0ZW1DYWNoZS5BbGxvd0Fub255bW91cztcbiAgICB9XG4gICAgdGhpcy50YWJsZUNhY2hlLmRlbGV0ZShjYWNoZUtleSk7XG4gIH1cbn1cbiIsIjxkaXYgI21lc3NhZ2VMb2cgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC00IG1lc3NhZ2UtbG9nLWNvbnRhaW5lclwiPlxuICA8dmVyYmVuLWRhdGEtdmlld1xuICAgICN2ZHZcbiAgICBbdmlld1N0YXRlXT1cIntcbiAgICAgIGlzU2VhcmNoOiB0cnVlLFxuICAgICAgaXNDb2x1bW46IHRydWUsXG4gICAgICBpc0ZpbHRlcjogdHJ1ZSxcbiAgICAgIGlzU29ydDogdHJ1ZSxcbiAgICAgIGlzRXhwb3J0OiAoIXBlcm1pc3Npb25Db25maWcgfHwgcGVybWlzc2lvbkNvbmZpZy5BY3Rpb25zWydFeHBvcnQnXSksXG4gICAgICBpc1NlbGVjdDogdHJ1ZSxcbiAgICAgIGlzQ3JlYXRlOiAoIXBlcm1pc3Npb25Db25maWcgfHwgcGVybWlzc2lvbkNvbmZpZy5BY3Rpb25zWydDcmVhdGUnXSksXG4gICAgICBpc1RvZ2dsZTp0cnVlLFxuICAgIH1cIlxuICAgIFtidXR0b25DbGFzc109XCInbXktY3VzdG9tLWJ1dHRvbi1jbGFzcydcIlxuICAgIFtpY29uQ2xhc3NdPVwiJ215LWljb24tY2xhc3MnXCJcbiAgICBbYWN0aXZlSWNvbkNsYXNzXT1cIidteS1hY3RpdmUtaWNvbi1jbGFzcydcIlxuICAgIFtzZWxlY3RlZENvbHVtbkNvdW50XT1cIjBcIlxuICAgIFtzZWxlY3RlZFNvcnRDb3VudF09XCIwXCJcbiAgICBbc2VsZWN0ZWRGaWx0ZXJUYWJsZUNvdW50XT1cIjBcIlxuICAgICh2aWV3Q2hhbmdlKT1cIm9uVmlld0NoYW5nZSgkZXZlbnQpXCJcbiAgICAoc3RhdGVDaGFuZ2UpPVwib25TdGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAob25TZWFyY2hDaGFuZ2UpPVwiaGFuZGxlU2VhcmNoKCRldmVudClcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cIm10LTJcIiB0YWJsZS1jb250ZW50PlxuICAgICAgPGxpYi1kYXRhLXRhYmxlXG4gICAgICAgIFtkYXRhS2V5XT1cIidJZCdcIlxuICAgICAgICBjbGFzcz1cImZvcm0tdGFibGVcIlxuICAgICAgICAjZHRcbiAgICAgICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgICAgIFtjb2x1bW5zXT1cInZpc2libGVDb2x1bW5EZWZcIlxuICAgICAgICBbc3R5bGVDb25maWddPVwic3R5bGVzXCJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJzZWxlY3RcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICNjZWxsXG4gICAgICAgICAgICBsZXQtaXNTZWxlY3RlZD1cImlzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgbGV0LXRvZ2dsZVJvd1NlbGVjdGlvbj1cInRvZ2dsZVJvd1NlbGVjdGlvblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVJvd1NlbGVjdGlvbigpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICNoZWFkZXJcbiAgICAgICAgICAgIGxldC1hbGxSb3dzU2VsZWN0ZWQ9XCJhbGxSb3dzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgbGV0LXNvbWVSb3dzU2VsZWN0ZWQ9XCJzb21lUm93c1NlbGVjdGVkXCJcbiAgICAgICAgICAgIGxldC10b2dnbGVBbGxSb3dzPVwidG9nZ2xlQWxsUm93c1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cImFsbFJvd3NTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwic29tZVJvd3NTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVBbGxSb3dzKClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJjcmVhdGVkQXRcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXZhbHVlPlxuICAgICAgICAgICAge3sgdmFsdWUgfCBkYXRlIH19XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwibmFtZVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbCBsZXQtcm93PVwicm93XCIgbGV0LXZhbHVlPlxuICAgICAgICAgICAge3sgdmFsdWUuTmFtZSB9fVxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAjY2VsbEVkaXRcbiAgICAgICAgICAgIGxldC1yb3c9XCJyb3dcIlxuICAgICAgICAgICAgbGV0LXVwZGF0ZURhdGE9XCJ1cGRhdGVEYXRhXCJcbiAgICAgICAgICAgIGxldC12YWx1ZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3aWR0aC1tYXhcIj5cbiAgICAgICAgICAgICAgPHZlcmJlbmEtaW5wdXQgWyhuZ01vZGVsKV09XCJ2YWx1ZS5OYW1lXCI+PC92ZXJiZW5hLWlucHV0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJncm91cHNcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXJvdz1cInJvd1wiIGxldC12YWx1ZT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0xXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cHMtc3VtbWFyeS1jb250YWluZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgdmFsdWUuRW50aXRpZXMuc2xpY2UoMCwgNClcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJncm91cC1jaGlwIHB4LTJcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IGdyb3VwLk5hbWUgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDx2ZXJiZW4tcG9wLVVwXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJ2YWx1ZS5FbnRpdGllcy5sZW5ndGggPiAzXCJcbiAgICAgICAgICAgICAgICBbY3VzdG9tU3R5bGVzXT1cInsgJ3otaW5kZXgnOiAnOTknIH1cIlxuICAgICAgICAgICAgICAgIFtlbmFibGVNb3VzZUxlYXZlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VlLW1vcmUtc2VjdGlvbiBmbGV4XCIgZHJvcGRvd24tdHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgIDxkaXY+U2VlIG1vcmU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJjaGV2cm9uLWRvd25cIlxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwidmFyKC0tdmJuLWNvbG9yLWJvcmRlci1mb2N1cylcIlxuICAgICAgICAgICAgICAgICAgICBbd2lkdGhdPVwiMTBcIlxuICAgICAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjZcIlxuICAgICAgICAgICAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJncm91cHMtc3VtbWFyeS1jb250YWluZXIgcG9wLXVwIGdhcC0yIHAtMlwiXG4gICAgICAgICAgICAgICAgICBkcm9wZG93bi1jb250ZW50XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImdyb3VwLWNoaXAgcHgtMlwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBncm91cCBvZiB2YWx1ZS5FbnRpdGllc1wiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7IGdyb3VwLk5hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L3ZlcmJlbi1wb3AtVXA+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgI2NlbGxFZGl0XG4gICAgICAgICAgICBsZXQtcm93PVwicm93XCJcbiAgICAgICAgICAgIGxldC11cGRhdGVEYXRhPVwidXBkYXRlRGF0YVwiXG4gICAgICAgICAgICBsZXQtdmFsdWVcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dmVyYmVuLWRyb3AtZG93blxuICAgICAgICAgICAgICBzZWxlY3RLZXk9XCJDb2RlXCJcbiAgICAgICAgICAgICAgZGlzcGxheT1cImNoaXBcIlxuICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBHcm91cHNcIlxuICAgICAgICAgICAgICBbc2hvd0NsZWFyXT1cInRydWVcIlxuICAgICAgICAgICAgICBbZmlsdGVyXT1cInRydWVcIlxuICAgICAgICAgICAgICBbbG9hZF09XCJ0aGlzLmxvYWRNb3JlRm9ybUVudGl0aWVzLmJpbmQodGhpcylcIlxuICAgICAgICAgICAgICBbc2VhcmNoXT1cInRoaXMuc2VhcmNoRm9ybUVudGl0aWVzLmJpbmQodGhpcylcIlxuICAgICAgICAgICAgICBbKG9wdGlvbnMpXT1cImdyb3Vwc1wiXG4gICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwiTmFtZVwiXG4gICAgICAgICAgICAgIFttdWx0aXNlbGVjdF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ2YWx1ZS5FbnRpdGllc1wiXG4gICAgICAgICAgICAgIFtsYXp5TG9hZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2FzeW5jTGFiZWxdPVwidGhpcy5nZXRBc3luY0xhYmVsLmJpbmQodGhpcylcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC92ZXJiZW4tZHJvcC1kb3duPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwiZXhwaXJ5XCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC1yb3c9XCJyb3dcIiBsZXQtdmFsdWU+XG4gICAgICAgICAgICB7eyB2YWx1ZS5FeHBpcnlEYXRlIHwgZGF0ZSB9fVxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAjY2VsbEVkaXRcbiAgICAgICAgICAgIGxldC1yb3c9XCJyb3dcIlxuICAgICAgICAgICAgbGV0LXVwZGF0ZURhdGE9XCJ1cGRhdGVEYXRhXCJcbiAgICAgICAgICAgIGxldC12YWx1ZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3aWR0aC1tYXhcIj5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRlLXBpY2tlclwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImRhdGVcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidmFsdWUuRXhwaXJ5RGF0ZVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwhLS0gPHZlcmJlbmEtaW5wdXQgWyhuZ01vZGVsKV09XCJ2YWx1ZS5FeHBpcnlEYXRlXCI+PC92ZXJiZW5hLWlucHV0PiAtLT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwiYW5vbnltb3VzXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC1yb3c9XCJyb3dcIiBsZXQtdmFsdWU+XG4gICAgICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgICAgW2ljb25dPVwidmFsdWUuSXNQcm90ZWN0ZWQgPyAnb24nIDogJ29mZidcIlxuICAgICAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgI2NlbGxFZGl0XG4gICAgICAgICAgICBsZXQtcm93PVwicm93XCJcbiAgICAgICAgICAgIGxldC11cGRhdGVEYXRhPVwidXBkYXRlRGF0YVwiXG4gICAgICAgICAgICBsZXQtdmFsdWVcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dmVyYmVuYS1zd2l0Y2hcbiAgICAgICAgICAgICAgb25UZXh0PVwiXCJcbiAgICAgICAgICAgICAgb2ZmVGV4dD1cIlwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidmFsdWUuQWxsb3dBbm9ueW1vdXNcIlxuICAgICAgICAgICAgICBbb25Db2xvcl09XCIndmFyKC0tdmJuLWNvbG9yLXRleHQpJ1wiXG4gICAgICAgICAgICA+PC92ZXJiZW5hLXN3aXRjaD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cImFjdGlvbnNcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICNjZWxsXG4gICAgICAgICAgICBsZXQtaXNFZGl0aW5nPVwiaXNFZGl0aW5nXCJcbiAgICAgICAgICAgIGxldC10b2dnbGVSb3dFZGl0PVwidG9nZ2xlUm93RWRpdFwiXG4gICAgICAgICAgICBsZXQtcm93PVwicm93XCJcbiAgICAgICAgICAgIGxldC12YWx1ZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDx2ZXJiZW4tcG9wLVVwXG4gICAgICAgICAgICAgICNwb3B1cFxuICAgICAgICAgICAgICBbY3VzdG9tU3R5bGVzXT1cInsgJ3otaW5kZXgnOiAnOTknIH1cIlxuICAgICAgICAgICAgICBbZW5hYmxlTW91c2VMZWF2ZV09XCJmYWxzZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBhY3Rpb25zLWljb25cIlxuICAgICAgICAgICAgICAgIGRyb3Bkb3duLXRyaWdnZXJcbiAgICAgICAgICAgICAgICBpY29uPVwibGlzdFwiXG4gICAgICAgICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3AtdXAtY29udGVudCBmbGV4IGZsZXgtY29sXCIgZHJvcGRvd24tY29udGVudD5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwidmlld1Jlc3BvbnNlcyh2YWx1ZS5Db2RlKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInBvcC11cC12YWx1ZSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgVmlldyByZXNwb25zZXNcbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAhcGVybWlzc2lvbkNvbmZpZyB8fCBwZXJtaXNzaW9uQ29uZmlnLkFjdGlvbnNbJ0NyZWF0ZSddXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVJvd0VkaXQoKTsgY2FjaGVJdGVtKHZhbHVlKTsgY2xvc2VQb3BVcCgpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicG9wLXVwLXZhbHVlIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBFZGl0XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwicG9wLXVwLXZhbHVlIGN1cnNvci1wb2ludGVyXCI+RGVsZXRlPC9kaXY+IC0tPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdmVyYmVuLXBvcC1VcD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgI2NlbGxFZGl0XG4gICAgICAgICAgICBsZXQtaXNFZGl0aW5nPVwiaXNFZGl0aW5nXCJcbiAgICAgICAgICAgIGxldC10b2dnbGVSb3dFZGl0PVwidG9nZ2xlUm93RWRpdFwiXG4gICAgICAgICAgICBsZXQtcm93PVwicm93XCJcbiAgICAgICAgICAgIGxldC12YWx1ZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgICAgIGljb249XCJ0aWNrXCJcbiAgICAgICAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwiMTVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0YWJsZVNhdmVGb3JtKHZhbHVlLCB0b2dnbGVSb3dFZGl0KVwiXG4gICAgICAgICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlc3RvcmVDYWNoZSh2YWx1ZSk7IHRvZ2dsZVJvd0VkaXQoKVwiXG4gICAgICAgICAgICAgICAgaWNvbj1cImNsb3NlLW5vLWNpcmNsZVwiXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cIjE1XCJcbiAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICAgICAgPCEtLSA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVSb3dFZGl0KClcIlxuICAgICAgICAgICAgICAgIGljb249XCJkZWxldGVcIlxuICAgICAgICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgICAgID48L3ZlcmJlbi1zdmc+IC0tPlxuICAgICAgICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgICAgIGljb249XCJjYXJkVmlld0FsdFwiXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cIjE1XCJcbiAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ29Ub0NhcmRWaWV3KHZhbHVlKVwiXG4gICAgICAgICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbGliLWRhdGEtdGFibGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjYXJkLWNvbnRlbnQ+XG4gICAgICA8dmVyYmVuLWNhcmQtZGF0YS12aWV3XG4gICAgICAgIGJvcmRlclJhZGl1cz1cIjEycHhcIlxuICAgICAgICAjdmRjdlxuICAgICAgICBkYXRhSWQ9XCJJZFwiXG4gICAgICAgIGJvcmRlcj1cIjVweFwiXG4gICAgICAgIFtjYXJkRGF0YUxpc3RdPVwiY2FyZERhdGFcIlxuICAgICAgICByYmdDb2xvcj1cInZhcigtLXZibi1jb2xvci1zdXJmYWNlLWFsdClcIlxuICAgICAgICBtZz1cIjBweFwiXG4gICAgICA+XG4gICAgICAgIDx2ZXJiZW4tbGVmdC1jYXJkLWRhdGEtdmlldyBjbGFzcz1cInNwYWNlLXktN1wiPlxuICAgICAgICAgIDx2ZXJiZW4tbGVmdC1jYXJkLWRhdGFcbiAgICAgICAgICAgICN2bGNkXG4gICAgICAgICAgICBbcGFyZW50XT1cInZkY3ZcIlxuICAgICAgICAgICAgZGF0YUlkPVwiTWFpbEFkZHJlc3NcIlxuICAgICAgICAgICAgY2xhc3M9XCJiZy1zZWNvbmRhcnktMTAwIHJvdW5kZWQteGwgYm9yZGVyLXByaW1hcnkgYm9yZGVyLVsxcHhdXCJcbiAgICAgICAgICAgIFtjYXJkRGF0YUxpc3RdPVwiY2FyZERhdGFcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2FyZCBsZXQtaXRlbT5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtQ2FyZENsaWNrZWQoaXRlbSlcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBjdXJzb3ItcG9pbnRlciBoLVttYXgtY29udGVudF1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPCEtLSA8dmVyYmVuLXN2ZyBbd2lkdGhdPVwiMTVcIiBbaGVpZ2h0XT1cIjE1XCIgKGNsaWNrKT1cInRvZ2dsZUNoaWxkcmVuKGl0ZW0pOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aD8ndmlzaWJsZSc6J2ludmlzaWJsZSdcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpdGVtcy1jZW50ZXIgZmxleCAgcHItMSBjdXJzb3ItcG9pbnRlclwiIFtpY29uXT1cIml0ZW0uaXNDaGlsZHJlbkV4cGFuZGVkPydtaW51cyc6J3BsdXMnXCIgLz4gLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsIGJnLXNlY29uZGFyeSByb3VuZGVkLXhsXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy0zIHJvdW5kZWQteGwgcm91bmRlZC10ci1ub25lIHJvdW5kZWQtYnItbm9uZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc2VsZWN0ZWQgPyAnYmctcHJpbWFyeScgOiAnYmctc2Vjb25kYXJ5LTIwMCdcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweS0zIHB4LTQgZmxleC0xIGgtWzEwMCVdXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtc3RhcnQgZmxleC0xIGdhcC0xIGp1c3RpZnktYmV0d2VlbiBoLVsxMDAlXVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgZmxleC0xIGNhcmQtbWluLWhlaWdodCBqdXN0aWZ5LWJldHdlZW4gaC1bMTAwJV1cIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoM1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm15LTAgZm9udC1ib2xkIHRleHQtW3ZhcigtLXZibi1jb2xvci1vbi1wcmltYXJ5KV0gbGVhZGluZy1bMTkuNXB4XVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uZGF0YS5OYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIiF0ZXh0LVsxMHB4XSBmb250LWxpZ2h0IHRleHQtW3ZhcigtLXZibi1jb2xvci1vbi1wcmltYXJ5KV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5FeHBpcnkgRGF0ZTo8L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIiF0ZXh0LVsxMnB4XVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5kYXRhLkV4cGlyeURhdGUgfCBkYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtZW5kIGgtWzEwMCVdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwiZW51bS12YWwge3tpdGVtLmRhdGEuU3RhdHVzfX1cIj57e2l0ZW0uZGF0YS5TdGF0dXN9fTwvc3Bhbj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3ZlcmJlbi1sZWZ0LWNhcmQtZGF0YT5cbiAgICAgICAgPC92ZXJiZW4tbGVmdC1jYXJkLWRhdGEtdmlldz5cbiAgICAgICAgPHZlcmJlbi1yaWdodC1jYXJkLWRhdGEtdmlldz5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3BhcmVudD5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nSWY9XCJ0aGlzLmN1cnJlbnREYXRhXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHJvdW5kZWQteGwgaC1mdWxsIHctZnVsbCBqdXN0aWZ5LWJldHdlZW4gcmVsYXRpdmUgc3BhY2UteS00XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTNcIj5cbiAgICAgICAgICAgICAgICA8dmVyYmVuYS1pbnB1dFxuICAgICAgICAgICAgICAgICAgbmFtZT1cIk5hbWVcIlxuICAgICAgICAgICAgICAgICAgbGFiZWw9XCJOYW1lXCJcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZVRhYmxlKClcIlxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0aGlzLmN1cnJlbnREYXRhLmRhdGEuTmFtZVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdj5FeHBpcnkgRGF0ZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0ZS1waWNrZXJcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiZGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGhpcy5jdXJyZW50RGF0YS5kYXRhLkV4cGlyeURhdGVcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIDx2ZXJiZW5hLWlucHV0IG5hbWU9XCJFeHBpcnlEYXRlXCIgbGFiZWw9XCJFeHBpcnkgRGF0ZVwiIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZVRhYmxlKClcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGhpcy5jdXJyZW50RGF0YS5kYXRhLkV4cGlyeURhdGVcIiAvPiAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdj5Bbm9ueW1vdXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDx2ZXJiZW5hLXN3aXRjaFxuICAgICAgICAgICAgICAgICAgICBvblRleHQ9XCJcIlxuICAgICAgICAgICAgICAgICAgICBvZmZUZXh0PVwiXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0aGlzLmN1cnJlbnREYXRhLmRhdGEuQWxsb3dBbm9ueW1vdXNcIlxuICAgICAgICAgICAgICAgICAgICBbb25Db2xvcl09XCIndmFyKC0tdmJuLWNvbG9yLXRleHQpJ1wiXG4gICAgICAgICAgICAgICAgICA+PC92ZXJiZW5hLXN3aXRjaD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdj5Gb3JtIEdyb3VwczwvZGl2PlxuICAgICAgICAgICAgICAgICAgPHZlcmJlbi1kcm9wLWRvd25cbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0S2V5PVwiQ29kZVwiXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk9XCJjaGlwXCJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgR3JvdXBzXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dDbGVhcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvYWRdPVwidGhpcy5sb2FkTW9yZUZvcm1FbnRpdGllcy5iaW5kKHRoaXMpXCJcbiAgICAgICAgICAgICAgICAgICAgW3NlYXJjaF09XCJ0aGlzLnNlYXJjaEZvcm1FbnRpdGllcy5iaW5kKHRoaXMpXCJcbiAgICAgICAgICAgICAgICAgICAgWyhvcHRpb25zKV09XCJncm91cHNcIlxuICAgICAgICAgICAgICAgICAgICBvcHRpb25MYWJlbD1cIk5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBbbXVsdGlzZWxlY3RdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGhpcy5jdXJyZW50RGF0YS5kYXRhLkVudGl0aWVzXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhenlMb2FkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbYXN5bmNMYWJlbF09XCJ0aGlzLmdldEFzeW5jTGFiZWwuYmluZCh0aGlzKVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8L3ZlcmJlbi1kcm9wLWRvd24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDwhLS0gYnV0dG9ucyAtLT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGJvdHRvbS04IGxlZnQtMCByaWdodC0wXCI+XG4gICAgICAgICAgICAgICAgPCEtLSA8dmVyYmVuYS1idXR0b25cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidmVyYmVuLWRlbGV0ZS1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgdGV4dD1cIkRlbGV0ZVwiXG4gICAgICAgICAgICAgICAgPjwvdmVyYmVuYS1idXR0b24+IC0tPlxuICAgICAgICAgICAgICAgIDxkaXY+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTNcIj5cbiAgICAgICAgICAgICAgICAgIDx2ZXJiZW5hLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInZlcmJlbi1zd2l0Y2gtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgIHZpZXdSZXNwb25zZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnREYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5jdXJyZW50RGF0YS5kYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmN1cnJlbnREYXRhLmRhdGEuQ29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgdGV4dD1cIlZpZXcgUmVzcG9uc2VzXCJcbiAgICAgICAgICAgICAgICAgID48L3ZlcmJlbmEtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPHZlcmJlbmEtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidmVyYmVuLXN3aXRjaC1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ29Ub1RhYmxlVmlldygpXCJcbiAgICAgICAgICAgICAgICAgICAgdGV4dD1cIlN3aXRjaCBUbyBUYWJsZVwiXG4gICAgICAgICAgICAgICAgICA+PC92ZXJiZW5hLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDx2ZXJiZW5hLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICFwZXJtaXNzaW9uQ29uZmlnIHx8IHBlcm1pc3Npb25Db25maWcuQWN0aW9uc1snQ3JlYXRlJ11cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2ZXJiZW4tcHJpbWFyeS1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidGhpcy5zYXZlRm9ybSgpXCJcbiAgICAgICAgICAgICAgICAgICAgdGV4dD1cIlNhdmVcIlxuICAgICAgICAgICAgICAgICAgPjwvdmVyYmVuYS1idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC92ZXJiZW4tcmlnaHQtY2FyZC1kYXRhLXZpZXc+XG4gICAgICAgIDwhLS0gPHZlcmJlbi1yaWdodC1jYXJkLWRhdGEtdmlldz5cbiAgICAgICAgICB5ZXNoaGhoaGhcbiAgICAgICAgPC92ZXJiZW4tcmlnaHQtY2FyZC1kYXRhLXZpZXc+IC0tPlxuXG4gICAgICAgIDx2ZXJiZW4tY2FyZC1kYXRhLXZpZXctZm9vdGVyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAqbmdJZj1cIiF2ZGN2Lmhhc0N1cnJlbnRJdGVtKClcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm1lc3NhZ2UtbG9nLWJ1dHRvbi1jb250YWluZXIgZmxleCBqdXN0aWZ5LWJldHdlZW5cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8IS0tIDx2ZXJiZW5hLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtmb250V2VpZ2h0XT1cIidib2xkJ1wiXG4gICAgICAgICAgICAgICAgW2JnQ29sb3JdPVwiJ3ZhcigtLXZibi1jb2xvci10ZXh0LW11dGVkKSdcIlxuICAgICAgICAgICAgICAgIFtib3JkZXJSYWRpdXNdPVwiJzRweCdcIlxuICAgICAgICAgICAgICAgIFt0ZXh0Q29sb3JdPVwiJ3ZhcigtLXZibi1jb2xvci1zdXJmYWNlKSdcIlxuICAgICAgICAgICAgICAgIFt0ZXh0XT1cIidEZWxldGUnXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L3ZlcmJlbmEtYnV0dG9uPiAtLT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXgge3tcbiAgICAgICAgICAgICAgICB2ZGN2Lmhhc0N1cnJlbnRJdGVtKCkgPyAnZmxleC0xJyA6ICcnXG4gICAgICAgICAgICAgIH19IGp1c3RpZnktZW5kIGl0ZW1zLWNlbnRlciBnYXAtNVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFnaW5hdG9yLXRleHRcIlxuICAgICAgICAgICAgICAgID57eyBjYXJkRGF0YS5sZW5ndGggfX0gcmVjb3JkcyBsb2FkZWQ8L3NwYW5cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJsb2FkTW9yZSgpXCIgY2xhc3M9XCJsb2FkLW1vcmUgdmlldy1saW5rc1wiPlxuICAgICAgICAgICAgICAgIExvYWQgbW9yZVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3ZlcmJlbi1jYXJkLWRhdGEtdmlldy1mb290ZXI+XG4gICAgICA8L3ZlcmJlbi1jYXJkLWRhdGEtdmlldz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNvbHVtbi1jb250ZW50PlxuICAgICAgPHZlcmJlbi12aXNpYmxlLWNvbHVtblxuICAgICAgICAoY29sdW1uc1VwZGF0ZWQpPVwib25Db2x1bW5zVXBkYXRlZCgkZXZlbnQpXCJcbiAgICAgICAgW2JvcmRlcl09XCInMXB4IHNvbGlkIHZhcigtLXZibi1jb2xvci1wcmltYXJ5KSdcIlxuICAgICAgICBib3JkZXJSYWRpdXM9XCIxMHB4XCJcbiAgICAgICAgYm94U2hhZG93PVwiMnB4IDJweCAycHggMHB4IHNpbHZlclwiXG4gICAgICAgIGJnQ29sb3I9XCJ3aGl0ZVwiXG4gICAgICAgIHdpZHRoPVwiNDAwcHhcIlxuICAgICAgICB0ZXh0Q29sb3I9XCJibGFja1wiXG4gICAgICAgIHBkPVwiMXJlbVwiXG4gICAgICAgIHByaW1hcnlDb2xvcj1cInZhcigtLXZibi1jb2xvci1wcmltYXJ5KVwiXG4gICAgICAgIHNlY29uZGFyeUNvbG9yPVwidmFyKC0tdmJuLWNvbG9yLWJvcmRlci1mb2N1cylcIlxuICAgICAgICBbY29sdW1uc109XCJ2aXNpYmxlQ29sdW1uc1wiXG4gICAgICAgIFtkaXNwbGF5ZWRDb2x1bW5zXT1cIjVcIlxuICAgICAgPjwvdmVyYmVuLXZpc2libGUtY29sdW1uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgZmlsdGVyLWNvbnRlbnQ+XG4gICAgICA8dmVyYmVuLXRhYmxlLWZpbHRlclxuICAgICAgICAoZmlsdGVyc0FwcGxpZWQpPVwib25GaWx0ZXJVcGRhdGVkKCRldmVudClcIlxuICAgICAgICBbYm9yZGVyXT1cIicxcHggc29saWQgdmFyKC0tdmJuLWNvbG9yLXByaW1hcnkpJ1wiXG4gICAgICAgIGJvcmRlclJhZGl1cz1cIjEwcHhcIlxuICAgICAgICBib3hTaGFkb3c9XCIycHggMnB4IDJweCAwcHggc2lsdmVyXCJcbiAgICAgICAgYmdDb2xvcj1cIndoaXRlXCJcbiAgICAgICAgd2lkdGg9XCI0MjBweFwiXG4gICAgICAgIHRleHRDb2xvcj1cImJsYWNrXCJcbiAgICAgICAgcGQ9XCIxcmVtXCJcbiAgICAgICAgcHJpbWFyeUNvbG9yPVwidmFyKC0tdmJuLWNvbG9yLXByaW1hcnkpXCJcbiAgICAgICAgc2Vjb25kYXJ5Q29sb3I9XCJ2YXIoLS12Ym4tY29sb3ItYm9yZGVyLWZvY3VzKVwiXG4gICAgICAgIHRlcnRpYXJ5Q29sb3I9XCJ2YXIoLS12Ym4tY29sb3Itb24tcHJpbWFyeSlcIlxuICAgICAgICBbZmlsdGVyT3B0aW9uc109XCJmaWx0ZXJBcnJheVwiXG4gICAgICAgIFttYXhGaWx0ZXJMZW5ndGhdPVwiM1wiXG4gICAgICA+PC92ZXJiZW4tdGFibGUtZmlsdGVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgc29ydC1jb250ZW50PlxuICAgICAgPHZlcmJlbi1zb3J0LXRhYmxlXG4gICAgICAgIChzZWxlY3RlZE9wdGlvbnMpPVwib25Tb3J0VXBkYXRlZCgkZXZlbnQpXCJcbiAgICAgICAgW2JvcmRlcl09XCInMXB4IHNvbGlkIHZhcigtLXZibi1jb2xvci1wcmltYXJ5KSdcIlxuICAgICAgICBib3JkZXJSYWRpdXM9XCIxMHB4XCJcbiAgICAgICAgYm94U2hhZG93PVwiMnB4IDJweCAycHggMHB4IHNpbHZlclwiXG4gICAgICAgIGJnQ29sb3I9XCJ3aGl0ZVwiXG4gICAgICAgIHdpZHRoPVwiNDAwcHhcIlxuICAgICAgICB0ZXh0Q29sb3I9XCJibGFja1wiXG4gICAgICAgIHBkPVwiMXJlbVwiXG4gICAgICAgIHByaW1hcnlDb2xvcj1cInZhcigtLXZibi1jb2xvci1wcmltYXJ5KVwiXG4gICAgICAgIHNlY29uZGFyeUNvbG9yPVwidmFyKC0tdmJuLWNvbG9yLWJvcmRlci1mb2N1cylcIlxuICAgICAgICB0ZXJ0aWFyeUNvbG9yPVwidmFyKC0tdmJuLWNvbG9yLW9uLXByaW1hcnkpXCJcbiAgICAgICAgW2VuYWJsZURyYWdBbmREcm9wXT1cInRydWVcIlxuICAgICAgICBbc29ydE9wdGlvbnNdPVwic29ydE9wdGlvbnNcIlxuICAgICAgPjwvdmVyYmVuLXNvcnQtdGFibGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBleHBvcnQtY29udGVudD5cbiAgICAgIDxsaWItZGF0YS14cG9ydFxuICAgICAgICBbdXNlSW1wb3J0S2V5XT1cInRydWVcIlxuICAgICAgICBbY29sdW1uc109XCJ2aXNpYmxlQ29sdW1uRGVmXCJcbiAgICAgICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgICAgIFtkYXRhUXVlcnlGdW5jdGlvbl09XCJleHBvcnRGaWx0ZXJzQW5kU29ydHNcIlxuICAgICAgPlxuICAgICAgPC9saWItZGF0YS14cG9ydD5cbiAgICAgIDwhLS0gPGxpYi1kYXRhLWV4cG9ydCBbZGF0YV09XCJkYXRhXCIgKGV4cG9ydERhdGFFdmVudCk9XCJoYW5kbGVFeHBvcnQoJGV2ZW50KVwiPlxuICAgICAgPC9saWItZGF0YS1leHBvcnQ+IC0tPlxuICAgIDwvZGl2PlxuICA8L3ZlcmJlbi1kYXRhLXZpZXc+XG4gIDxkaXYgKm5nSWY9XCJ2ZHYuaXNUYWJsZVZpZXdcIiBjbGFzcz1cImZsZXggZ2FwLTIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgPGRpdiBjbGFzcz1cIm1lc3NhZ2UtbG9nLWJ1dHRvbi1jb250YWluZXIgZmxleCBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgIDwhLS0gPHZlcmJlbmEtYnV0dG9uXG4gICAgICAgIFtmb250V2VpZ2h0XT1cIidib2xkJ1wiXG4gICAgICAgIFtiZ0NvbG9yXT1cIid2YXIoLS12Ym4tY29sb3ItdGV4dC1tdXRlZCknXCJcbiAgICAgICAgW2JvcmRlclJhZGl1c109XCInNHB4J1wiXG4gICAgICAgIFt0ZXh0Q29sb3JdPVwiJ3ZhcigtLXZibi1jb2xvci1zdXJmYWNlKSdcIlxuICAgICAgICBbdGV4dF09XCInRGVsZXRlJ1wiXG4gICAgICA+XG4gICAgICA8L3ZlcmJlbmEtYnV0dG9uPiAtLT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZCBpdGVtcy1jZW50ZXIgZ2FwLTVcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwicGFnaW5hdG9yLXRleHRcIj57eyBjYXJkRGF0YS5sZW5ndGggfX0gcmVjb3JkcyBsb2FkZWQ8L3NwYW4+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJsb2FkTW9yZSgpXCIgY2xhc3M9XCJsb2FkLW1vcmUgdmlldy1saW5rc1wiPlxuICAgICAgICBMb2FkIG1vcmVcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19