qms-angular 1.0.54 → 1.0.58

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 (479) hide show
  1. package/README.md +46 -1
  2. package/bundles/qms-angular.umd.js +6610 -13461
  3. package/bundles/qms-angular.umd.js.map +1 -1
  4. package/esm2015/lib/common/qms-icon.const.js +107 -1
  5. package/esm2015/lib/components/app-icon/app-icon.module.js +16 -29
  6. package/esm2015/lib/components/app-icon/icon-registry.service.js +8 -10
  7. package/esm2015/lib/components/badges/qms-badges.component.js +15 -24
  8. package/esm2015/lib/components/badges/qms-badges.module.js +18 -33
  9. package/esm2015/lib/components/banner/qms-banner/qms-banner.component.js +16 -28
  10. package/esm2015/lib/components/banner/qms-banner/qms-banner.module.js +19 -36
  11. package/esm2015/lib/components/banner/qms-banner-confirm/qms-banner-confirm.component.js +16 -28
  12. package/esm2015/lib/components/banner/qms-banner-confirm/qms-banner-confirm.module.js +19 -36
  13. package/esm2015/lib/components/banner/qms-banner-loading/qms-banner-loading.component.js +13 -19
  14. package/esm2015/lib/components/banner/qms-banner-loading/qms-banner-loading.module.js +17 -30
  15. package/esm2015/lib/components/breadcrumb/breadcrumb-direction-icon.directive.js +10 -11
  16. package/esm2015/lib/components/breadcrumb/breadcrumb-item.directive.js +17 -20
  17. package/esm2015/lib/components/breadcrumb/breadcrumb.js +28 -40
  18. package/esm2015/lib/components/breadcrumb/breadcrumb.module.js +26 -50
  19. package/esm2015/lib/components/button/button-toggle.js +85 -120
  20. package/esm2015/lib/components/button/button.js +78 -86
  21. package/esm2015/lib/components/button/button.module.js +27 -51
  22. package/esm2015/lib/components/comment/comment.js +18 -29
  23. package/esm2015/lib/components/dialog/dialog.js +28 -38
  24. package/esm2015/lib/components/edit-file-name-dialog/edit-file-name-dialog.js +16 -24
  25. package/esm2015/lib/components/edit-file-name-dialog/edit-file-name-dialog.module.js +31 -71
  26. package/esm2015/lib/components/list/list.js +89 -101
  27. package/esm2015/lib/components/list/list.module.js +50 -94
  28. package/esm2015/lib/components/qms-app-bar/qms-app-bar.component.js +29 -55
  29. package/esm2015/lib/components/qms-app-bar/qms-app-bar.module.js +20 -39
  30. package/esm2015/lib/components/qms-stepper/qms-stepper.component.js +22 -32
  31. package/esm2015/lib/components/qms-stepper/qms-stepper.module.js +25 -35
  32. package/esm2015/lib/components/related/content/related-content.component.js +12 -19
  33. package/esm2015/lib/components/related/list-other-related/list-related.component.js +25 -29
  34. package/esm2015/lib/components/related/model/popup-data.model.js +1 -1
  35. package/esm2015/lib/components/related/model/risk-analysis.model.js +1 -1
  36. package/esm2015/lib/components/related/popup/related-popup.component.js +80 -71
  37. package/esm2015/lib/components/related/related.module.js +44 -98
  38. package/esm2015/lib/components/related/risk/analysis/analysis.component.js +17 -23
  39. package/esm2015/lib/components/related/risk/list/list.component.js +18 -22
  40. package/esm2015/lib/components/related/risk/result/result.component.js +16 -23
  41. package/esm2015/lib/components/related/service/related-global.service.js +6 -7
  42. package/esm2015/lib/components/related/sidenav/sidenav.component.js +12 -21
  43. package/esm2015/lib/components/reports/qms-report-content-portrait/qms-report-content-portrait.component.js +18 -22
  44. package/esm2015/lib/components/reports/qms-report-cover-portrait/qms-report-cover-portrait.component.js +18 -22
  45. package/esm2015/lib/components/reports/qms-reports.module.js +20 -29
  46. package/esm2015/lib/components/rich-text/rich-text.js +32 -47
  47. package/esm2015/lib/components/rich-text/rich-text.module.js +21 -35
  48. package/esm2015/lib/components/select-dialog/select-dialog.js +16 -31
  49. package/esm2015/lib/components/select-include-children/enum/select-option-type.enum.js +7 -0
  50. package/esm2015/lib/components/select-include-children/index.js +2 -0
  51. package/esm2015/lib/components/select-include-children/model/select-option.model.js +3 -0
  52. package/esm2015/lib/components/select-include-children/model/select-popup-data.model.js +9 -0
  53. package/esm2015/lib/components/select-include-children/model/select-search-option.model.js +4 -0
  54. package/esm2015/lib/components/select-include-children/model/select.const.js +6 -0
  55. package/esm2015/lib/components/select-include-children/model/seleted-option.model.js +3 -0
  56. package/esm2015/lib/components/select-include-children/public_api.js +9 -0
  57. package/esm2015/lib/components/select-include-children/select-include-children.component.js +635 -0
  58. package/esm2015/lib/components/select-include-children/select-include-children.module.js +57 -0
  59. package/esm2015/lib/components/select-include-children/services/select-global.service.js +17 -0
  60. package/esm2015/lib/components/select-one/common/data-type.enum.js +14 -0
  61. package/esm2015/lib/components/select-one/common/document-folder-type.enum.js +12 -0
  62. package/esm2015/lib/components/select-one/common/module-type.enum.js +8 -0
  63. package/esm2015/lib/components/select-one/common/select-data.model.js +3 -0
  64. package/esm2015/lib/components/select-one/common/selected-node.model.js +3 -0
  65. package/esm2015/lib/components/select-one/common/selectone-popup-data.model.js +11 -0
  66. package/esm2015/lib/components/select-one/common/show-hide-search-result.const.js +6 -0
  67. package/esm2015/lib/components/select-one/index.js +2 -0
  68. package/esm2015/lib/components/select-one/public_api.js +7 -0
  69. package/esm2015/lib/components/select-one/select-one.component.js +343 -0
  70. package/esm2015/lib/components/select-one/select-one.module.js +53 -0
  71. package/esm2015/lib/components/select-one/service/select-one-global.service.js +17 -0
  72. package/esm2015/lib/components/suffix-field/suffix-field.directive.js +21 -22
  73. package/esm2015/lib/components/table/table-action.js +31 -31
  74. package/esm2015/lib/components/table/table.module.js +21 -37
  75. package/esm2015/lib/components/test-only/test-only.component.js +11 -14
  76. package/esm2015/lib/components/tooltip/tooltip.js +19 -24
  77. package/esm2015/lib/components/tooltip/tooltip.module.js +20 -38
  78. package/esm2015/lib/components/tree/model/tree-config.model.js +3 -0
  79. package/esm2015/lib/components/tree/model/tree-flat-node.model.js +3 -0
  80. package/esm2015/lib/components/tree/model/tree-node.model.js +3 -0
  81. package/esm2015/lib/components/tree/model/tree.model.js +3 -0
  82. package/esm2015/lib/components/tree/tree.component.js +730 -0
  83. package/esm2015/lib/components/tree/tree.function.js +96 -0
  84. package/esm2015/lib/components/tree/tree.module.js +51 -0
  85. package/esm2015/lib/components/upload-file-error-dialog/upload-file-error-dialog.js +16 -22
  86. package/esm2015/lib/components/upload-file-error-dialog/upload-file-error-dialog.module.js +31 -71
  87. package/esm2015/lib/directives/chip-input/chip-input-chip-list.directive.js +13 -13
  88. package/esm2015/lib/directives/chip-input/chip-input-field.directive.js +10 -11
  89. package/esm2015/lib/directives/chip-input/chip-input-select-dropdown.directive.js +10 -11
  90. package/esm2015/lib/directives/chip-input/chip-input-select-field.directive.js +14 -17
  91. package/esm2015/lib/directives/chip-input/chip-input-select-trigger.directive.js +13 -14
  92. package/esm2015/lib/directives/chips/chip-body.directive.js +10 -11
  93. package/esm2015/lib/directives/chips/chip.directive.js +13 -13
  94. package/esm2015/lib/directives/dropdown-menu/dropdown-item.directive.js +14 -16
  95. package/esm2015/lib/directives/file-upload/file-upload-attachment-list.directive.js +10 -11
  96. package/esm2015/lib/directives/file-upload/file-upload-display.directive.js +16 -19
  97. package/esm2015/lib/directives/file-upload/file-upload-multiple-display.directive.js +14 -16
  98. package/esm2015/lib/directives/file-upload/file-upload-multiple-selector.directive.js +20 -26
  99. package/esm2015/lib/directives/file-upload/file-upload-multiple.directive.js +15 -19
  100. package/esm2015/lib/directives/file-upload/file-upload-scrollable-attachment-list.directive.js +10 -11
  101. package/esm2015/lib/directives/file-upload/file-upload-selector.directive.js +18 -25
  102. package/esm2015/lib/directives/file-upload/file-upload.directive.js +20 -24
  103. package/esm2015/lib/directives/form.directive.js +51 -48
  104. package/esm2015/lib/directives/margin.directive.js +14 -15
  105. package/esm2015/lib/directives/range-slider/range-slider-lockup.directive.js +10 -11
  106. package/esm2015/lib/directives/range-slider/range-slider.directive.js +14 -17
  107. package/esm2015/lib/directives/scroll-selected/scroll-to-selected.directive.js +15 -16
  108. package/esm2015/lib/directives/scrollbar/scrollbar.directive.js +13 -13
  109. package/esm2015/lib/directives/search-field.directive.js +22 -21
  110. package/esm2015/lib/directives/side-sheet/drawer-content.directive.js +10 -11
  111. package/esm2015/lib/directives/side-sheet/drawer-header-action.directive.js +10 -11
  112. package/esm2015/lib/directives/side-sheet/drawer-header.directive.js +10 -11
  113. package/esm2015/lib/directives/side-sheet/drawer.directive.js +10 -11
  114. package/esm2015/lib/directives/tab/tab-group-advanced.directive.js +14 -15
  115. package/esm2015/lib/directives/tab/tab-group.directive.js +10 -11
  116. package/esm2015/lib/directives/tab/tab-label.directive.js +10 -11
  117. package/esm2015/lib/directives/text-block/text-block-line.directive.js +16 -20
  118. package/esm2015/lib/directives/text-block/text-block.directive.js +14 -17
  119. package/esm2015/lib/directives/tooltip/tooltip-image.directive.js +13 -14
  120. package/esm2015/lib/directives/tooltip/tooltip-renderer.directive.js +22 -35
  121. package/esm2015/lib/material-module.js +16 -35
  122. package/esm2015/lib/model/en.js +4 -35
  123. package/esm2015/lib/model/no.js +3 -34
  124. package/esm2015/lib/pipe/dateFormat.pipe.js +10 -11
  125. package/esm2015/lib/qms-angular.component.js +11 -13
  126. package/esm2015/lib/qms-angular.module.js +121 -232
  127. package/esm2015/lib/qms-angular.service.js +8 -9
  128. package/esm2015/lib/qms-ckeditor-components/common/bpmn/toolbar.function.js +12 -32
  129. package/esm2015/lib/qms-ckeditor-components/common/constants/ckeditorEvent.constant.js +1 -5
  130. package/esm2015/lib/qms-ckeditor-components/common/constants/ckeditorFlowchart.const.js +1 -10
  131. package/esm2015/lib/qms-ckeditor-components/common/enums/document-type.enum.js +1 -2
  132. package/esm2015/lib/qms-ckeditor-components/common/functions/common.function.js +2 -2
  133. package/esm2015/lib/qms-ckeditor-components/common/module/confirm/qms-ckeditor-confirm.component.js +16 -23
  134. package/esm2015/lib/qms-ckeditor-components/common/module/tree/qms-ckeditor-tree.component.js +19 -34
  135. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.js +53 -577
  136. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/save-template/save-template.component.js +35 -69
  137. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-fullscreen/qms-ckeditor-fullscreen.component.js +8 -12
  138. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.js +30 -39
  139. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-link/attachments/link-attachment.component.js +18 -22
  140. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-link/qms-ckeditor-link.component.js +20 -29
  141. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-load-template/qms-ckeditor-load-template.component.js +18 -22
  142. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-relation/qmsckeditor-related.component.js +23 -35
  143. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-template/qms-ckeditor-template.component.js +20 -30
  144. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-tooltip/qms-ckeditor-tooltip.component.js +18 -27
  145. package/esm2015/lib/qms-ckeditor-components/qms-ckeditor-base.component.js +4 -7
  146. package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.component.js +44 -118
  147. package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.module.js +55 -131
  148. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-base.service.js +10 -10
  149. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn-api.service.js +9 -9
  150. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn.service.js +26 -66
  151. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-global.service.js +8 -9
  152. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-link.service.js +9 -9
  153. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-tree.service.js +9 -9
  154. package/esm2015/lib/qms-ckeditor-components/services/qms-ckedtior-template.service.js +9 -9
  155. package/esm2015/lib/services/translation-registry.service.js +8 -9
  156. package/esm2015/lib/shared.module.js +4 -9
  157. package/esm2015/public-api.js +10 -22
  158. package/esm2015/qms-angular.js +9 -1
  159. package/fesm2015/qms-angular.js +5337 -12118
  160. package/fesm2015/qms-angular.js.map +1 -1
  161. package/lib/common/qms-icon.const.d.ts +23 -0
  162. package/lib/components/app-icon/app-icon.module.d.ts +0 -7
  163. package/lib/components/app-icon/icon-registry.service.d.ts +0 -3
  164. package/lib/components/badges/qms-badges.component.d.ts +0 -3
  165. package/lib/components/badges/qms-badges.module.d.ts +0 -9
  166. package/lib/components/banner/qms-banner/qms-banner.component.d.ts +0 -3
  167. package/lib/components/banner/qms-banner/qms-banner.module.d.ts +0 -10
  168. package/lib/components/banner/qms-banner-confirm/qms-banner-confirm.component.d.ts +0 -3
  169. package/lib/components/banner/qms-banner-confirm/qms-banner-confirm.module.d.ts +0 -10
  170. package/lib/components/banner/qms-banner-loading/qms-banner-loading.component.d.ts +0 -3
  171. package/lib/components/banner/qms-banner-loading/qms-banner-loading.module.d.ts +0 -8
  172. package/lib/components/breadcrumb/breadcrumb-direction-icon.directive.d.ts +0 -3
  173. package/lib/components/breadcrumb/breadcrumb-item.directive.d.ts +0 -3
  174. package/lib/components/breadcrumb/breadcrumb.d.ts +0 -3
  175. package/lib/components/breadcrumb/breadcrumb.module.d.ts +0 -13
  176. package/lib/components/button/button-toggle.d.ts +0 -5
  177. package/lib/components/button/button.d.ts +0 -7
  178. package/lib/components/button/button.module.d.ts +0 -9
  179. package/lib/components/comment/comment.d.ts +0 -3
  180. package/lib/components/dialog/dialog.d.ts +0 -5
  181. package/lib/components/edit-file-name-dialog/edit-file-name-dialog.d.ts +0 -3
  182. package/lib/components/edit-file-name-dialog/edit-file-name-dialog.module.d.ts +0 -16
  183. package/lib/components/list/list.d.ts +0 -15
  184. package/lib/components/list/list.module.d.ts +0 -11
  185. package/lib/components/qms-app-bar/qms-app-bar.component.d.ts +0 -3
  186. package/lib/components/qms-app-bar/qms-app-bar.module.d.ts +0 -12
  187. package/lib/components/qms-stepper/qms-stepper.component.d.ts +0 -3
  188. package/lib/components/qms-stepper/qms-stepper.module.d.ts +0 -8
  189. package/lib/components/related/content/related-content.component.d.ts +0 -3
  190. package/lib/components/related/list-other-related/list-related.component.d.ts +0 -3
  191. package/lib/components/related/model/popup-data.model.d.ts +2 -2
  192. package/lib/components/related/model/risk-analysis.model.d.ts +2 -2
  193. package/lib/components/related/popup/related-popup.component.d.ts +4 -17
  194. package/lib/components/related/related.module.d.ts +0 -29
  195. package/lib/components/related/risk/analysis/analysis.component.d.ts +3 -14
  196. package/lib/components/related/risk/list/list.component.d.ts +1 -4
  197. package/lib/components/related/risk/result/result.component.d.ts +0 -3
  198. package/lib/components/related/service/related-global.service.d.ts +0 -3
  199. package/lib/components/related/sidenav/sidenav.component.d.ts +0 -3
  200. package/lib/components/reports/qms-report-content-portrait/qms-report-content-portrait.component.d.ts +0 -3
  201. package/lib/components/reports/qms-report-cover-portrait/qms-report-cover-portrait.component.d.ts +0 -3
  202. package/lib/components/reports/qms-reports.module.d.ts +0 -7
  203. package/lib/components/rich-text/rich-text.d.ts +0 -3
  204. package/lib/components/rich-text/rich-text.module.d.ts +0 -8
  205. package/lib/components/select-dialog/select-dialog.d.ts +0 -3
  206. package/lib/components/select-include-children/enum/select-option-type.enum.d.ts +5 -0
  207. package/lib/components/select-include-children/index.d.ts +1 -0
  208. package/lib/components/select-include-children/model/select-option.model.d.ts +11 -0
  209. package/lib/components/select-include-children/model/select-popup-data.model.d.ts +15 -0
  210. package/lib/components/select-include-children/model/select-search-option.model.d.ts +7 -0
  211. package/lib/components/select-include-children/model/select.const.d.ts +5 -0
  212. package/lib/components/select-include-children/model/seleted-option.model.d.ts +15 -0
  213. package/lib/components/select-include-children/public_api.d.ts +8 -0
  214. package/lib/components/select-include-children/select-include-children.component.d.ts +99 -0
  215. package/lib/components/select-include-children/select-include-children.module.d.ts +2 -0
  216. package/lib/components/select-include-children/services/select-global.service.d.ts +7 -0
  217. package/lib/components/select-one/common/data-type.enum.d.ts +12 -0
  218. package/lib/components/select-one/common/document-folder-type.enum.d.ts +10 -0
  219. package/lib/components/select-one/common/module-type.enum.d.ts +6 -0
  220. package/lib/components/select-one/common/select-data.model.d.ts +12 -0
  221. package/lib/components/select-one/common/selected-node.model.d.ts +12 -0
  222. package/lib/components/select-one/common/selectone-popup-data.model.d.ts +12 -0
  223. package/lib/components/select-one/common/show-hide-search-result.const.d.ts +5 -0
  224. package/lib/components/select-one/index.d.ts +1 -0
  225. package/lib/components/select-one/public_api.d.ts +6 -0
  226. package/lib/components/select-one/select-one.component.d.ts +77 -0
  227. package/lib/components/select-one/select-one.module.d.ts +2 -0
  228. package/lib/components/select-one/service/select-one-global.service.d.ts +7 -0
  229. package/lib/components/suffix-field/suffix-field.directive.d.ts +0 -5
  230. package/lib/components/table/table-action.d.ts +0 -5
  231. package/lib/components/table/table.module.d.ts +0 -8
  232. package/lib/components/test-only/test-only.component.d.ts +0 -3
  233. package/lib/components/tooltip/tooltip.d.ts +0 -3
  234. package/lib/components/tooltip/tooltip.module.d.ts +0 -9
  235. package/lib/components/{related → tree}/model/tree-config.model.d.ts +2 -2
  236. package/lib/components/tree/model/tree-flat-node.model.d.ts +11 -0
  237. package/lib/components/{related → tree}/model/tree-node.model.d.ts +0 -0
  238. package/lib/components/{related → tree}/model/tree.model.d.ts +0 -0
  239. package/lib/components/{related/tree → tree}/tree.component.d.ts +11 -19
  240. package/lib/components/{related/common → tree}/tree.function.d.ts +2 -2
  241. package/lib/components/tree/tree.module.d.ts +2 -0
  242. package/lib/components/upload-file-error-dialog/upload-file-error-dialog.d.ts +0 -3
  243. package/lib/components/upload-file-error-dialog/upload-file-error-dialog.module.d.ts +0 -16
  244. package/lib/directives/chip-input/chip-input-chip-list.directive.d.ts +0 -3
  245. package/lib/directives/chip-input/chip-input-field.directive.d.ts +0 -3
  246. package/lib/directives/chip-input/chip-input-select-dropdown.directive.d.ts +0 -3
  247. package/lib/directives/chip-input/chip-input-select-field.directive.d.ts +0 -3
  248. package/lib/directives/chip-input/chip-input-select-trigger.directive.d.ts +0 -3
  249. package/lib/directives/chips/chip-body.directive.d.ts +0 -3
  250. package/lib/directives/chips/chip.directive.d.ts +0 -3
  251. package/lib/directives/dropdown-menu/dropdown-item.directive.d.ts +0 -3
  252. package/lib/directives/file-upload/file-upload-attachment-list.directive.d.ts +0 -3
  253. package/lib/directives/file-upload/file-upload-display.directive.d.ts +0 -3
  254. package/lib/directives/file-upload/file-upload-multiple-display.directive.d.ts +0 -3
  255. package/lib/directives/file-upload/file-upload-multiple-selector.directive.d.ts +0 -3
  256. package/lib/directives/file-upload/file-upload-multiple.directive.d.ts +0 -3
  257. package/lib/directives/file-upload/file-upload-scrollable-attachment-list.directive.d.ts +0 -3
  258. package/lib/directives/file-upload/file-upload-selector.directive.d.ts +0 -3
  259. package/lib/directives/file-upload/file-upload.directive.d.ts +0 -5
  260. package/lib/directives/form.directive.d.ts +0 -11
  261. package/lib/directives/margin.directive.d.ts +0 -3
  262. package/lib/directives/range-slider/range-slider-lockup.directive.d.ts +0 -3
  263. package/lib/directives/range-slider/range-slider.directive.d.ts +0 -3
  264. package/lib/directives/scroll-selected/scroll-to-selected.directive.d.ts +0 -3
  265. package/lib/directives/scrollbar/scrollbar.directive.d.ts +0 -3
  266. package/lib/directives/search-field.directive.d.ts +0 -5
  267. package/lib/directives/side-sheet/drawer-content.directive.d.ts +0 -3
  268. package/lib/directives/side-sheet/drawer-header-action.directive.d.ts +0 -3
  269. package/lib/directives/side-sheet/drawer-header.directive.d.ts +0 -3
  270. package/lib/directives/side-sheet/drawer.directive.d.ts +0 -3
  271. package/lib/directives/tab/tab-group-advanced.directive.d.ts +0 -3
  272. package/lib/directives/tab/tab-group.directive.d.ts +0 -3
  273. package/lib/directives/tab/tab-label.directive.d.ts +0 -3
  274. package/lib/directives/text-block/text-block-line.directive.d.ts +0 -3
  275. package/lib/directives/text-block/text-block.directive.d.ts +0 -3
  276. package/lib/directives/tooltip/tooltip-image.directive.d.ts +0 -3
  277. package/lib/directives/tooltip/tooltip-renderer.directive.d.ts +0 -3
  278. package/lib/material-module.d.ts +0 -12
  279. package/lib/model/en.d.ts +0 -31
  280. package/lib/model/no.d.ts +0 -31
  281. package/lib/pipe/dateFormat.pipe.d.ts +0 -3
  282. package/lib/qms-angular.component.d.ts +0 -3
  283. package/lib/qms-angular.module.d.ts +0 -49
  284. package/lib/qms-angular.service.d.ts +0 -3
  285. package/lib/qms-ckeditor-components/common/bpmn/toolbar.function.d.ts +2 -2
  286. package/lib/qms-ckeditor-components/common/constants/ckeditorEvent.constant.d.ts +0 -4
  287. package/lib/qms-ckeditor-components/common/constants/ckeditorFlowchart.const.d.ts +0 -9
  288. package/lib/qms-ckeditor-components/common/enums/document-type.enum.d.ts +0 -1
  289. package/lib/qms-ckeditor-components/common/module/confirm/qms-ckeditor-confirm.component.d.ts +0 -3
  290. package/lib/qms-ckeditor-components/common/module/tree/qms-ckeditor-tree.component.d.ts +0 -3
  291. package/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.d.ts +4 -88
  292. package/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/save-template/save-template.component.d.ts +2 -11
  293. package/lib/qms-ckeditor-components/components/qms-ckeditor-fullscreen/qms-ckeditor-fullscreen.component.d.ts +0 -3
  294. package/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.d.ts +0 -3
  295. package/lib/qms-ckeditor-components/components/qms-ckeditor-link/attachments/link-attachment.component.d.ts +0 -3
  296. package/lib/qms-ckeditor-components/components/qms-ckeditor-link/qms-ckeditor-link.component.d.ts +0 -3
  297. package/lib/qms-ckeditor-components/components/qms-ckeditor-load-template/qms-ckeditor-load-template.component.d.ts +0 -3
  298. package/lib/qms-ckeditor-components/components/qms-ckeditor-relation/qmsckeditor-related.component.d.ts +0 -4
  299. package/lib/qms-ckeditor-components/components/qms-ckeditor-template/qms-ckeditor-template.component.d.ts +0 -3
  300. package/lib/qms-ckeditor-components/components/qms-ckeditor-tooltip/qms-ckeditor-tooltip.component.d.ts +0 -3
  301. package/lib/qms-ckeditor-components/qms-ckeditor-base.component.d.ts +0 -3
  302. package/lib/qms-ckeditor-components/qms-ckeditor.component.d.ts +0 -8
  303. package/lib/qms-ckeditor-components/qms-ckeditor.module.d.ts +0 -44
  304. package/lib/qms-ckeditor-components/services/qms-ckeditor-base.service.d.ts +0 -3
  305. package/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn-api.service.d.ts +0 -3
  306. package/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn.service.d.ts +0 -4
  307. package/lib/qms-ckeditor-components/services/qms-ckeditor-global.service.d.ts +0 -3
  308. package/lib/qms-ckeditor-components/services/qms-ckeditor-link.service.d.ts +0 -3
  309. package/lib/qms-ckeditor-components/services/qms-ckeditor-tree.service.d.ts +0 -3
  310. package/lib/qms-ckeditor-components/services/qms-ckedtior-template.service.d.ts +0 -3
  311. package/lib/services/translation-registry.service.d.ts +0 -3
  312. package/lib/shared.module.d.ts +0 -4
  313. package/lib.theme.scss +0 -8
  314. package/package.json +2 -1
  315. package/public-api.d.ts +9 -20
  316. package/qms-angular.d.ts +8 -1
  317. package/qms-angular.metadata.json +1 -0
  318. package/src/assets/jointjs/scss/bpmn.scss +63 -64
  319. package/src/assets/qms-ckeditor-plugin/build/ckeditor.js +1 -1
  320. package/src/assets/qms-ckeditor-plugin/build/ckeditor.js.map +1 -1
  321. package/src/assets/qms-ckeditor-plugin/build/translations/ar.js +1 -1
  322. package/src/assets/qms-ckeditor-plugin/build/translations/az.js +1 -1
  323. package/src/assets/qms-ckeditor-plugin/build/translations/bg.js +1 -1
  324. package/src/assets/qms-ckeditor-plugin/build/translations/cs.js +1 -1
  325. package/src/assets/qms-ckeditor-plugin/build/translations/da.js +1 -1
  326. package/src/assets/qms-ckeditor-plugin/build/translations/de-ch.js +1 -1
  327. package/src/assets/qms-ckeditor-plugin/build/translations/de.js +1 -1
  328. package/src/assets/qms-ckeditor-plugin/build/translations/en-au.js +1 -1
  329. package/src/assets/qms-ckeditor-plugin/build/translations/en-gb.js +1 -1
  330. package/src/assets/qms-ckeditor-plugin/build/translations/es.js +1 -1
  331. package/src/assets/qms-ckeditor-plugin/build/translations/et.js +1 -1
  332. package/src/assets/qms-ckeditor-plugin/build/translations/fa.js +1 -1
  333. package/src/assets/qms-ckeditor-plugin/build/translations/fi.js +1 -1
  334. package/src/assets/qms-ckeditor-plugin/build/translations/fr.js +1 -1
  335. package/src/assets/qms-ckeditor-plugin/build/translations/gl.js +1 -1
  336. package/src/assets/qms-ckeditor-plugin/build/translations/he.js +1 -1
  337. package/src/assets/qms-ckeditor-plugin/build/translations/hi.js +1 -1
  338. package/src/assets/qms-ckeditor-plugin/build/translations/hr.js +1 -1
  339. package/src/assets/qms-ckeditor-plugin/build/translations/hu.js +1 -1
  340. package/src/assets/qms-ckeditor-plugin/build/translations/id.js +1 -1
  341. package/src/assets/qms-ckeditor-plugin/build/translations/it.js +1 -1
  342. package/src/assets/qms-ckeditor-plugin/build/translations/ja.js +1 -1
  343. package/src/assets/qms-ckeditor-plugin/build/translations/ko.js +1 -1
  344. package/src/assets/qms-ckeditor-plugin/build/translations/ku.js +1 -1
  345. package/src/assets/qms-ckeditor-plugin/build/translations/lt.js +1 -1
  346. package/src/assets/qms-ckeditor-plugin/build/translations/lv.js +1 -1
  347. package/src/assets/qms-ckeditor-plugin/build/translations/nb.js +1 -1
  348. package/src/assets/qms-ckeditor-plugin/build/translations/ne.js +1 -1
  349. package/src/assets/qms-ckeditor-plugin/build/translations/nl.js +1 -1
  350. package/src/assets/qms-ckeditor-plugin/build/translations/no.js +1 -1
  351. package/src/assets/qms-ckeditor-plugin/build/translations/pl.js +1 -1
  352. package/src/assets/qms-ckeditor-plugin/build/translations/pt-br.js +1 -1
  353. package/src/assets/qms-ckeditor-plugin/build/translations/ro.js +1 -1
  354. package/src/assets/qms-ckeditor-plugin/build/translations/ru.js +1 -1
  355. package/src/assets/qms-ckeditor-plugin/build/translations/sk.js +1 -1
  356. package/src/assets/qms-ckeditor-plugin/build/translations/sl.js +1 -1
  357. package/src/assets/qms-ckeditor-plugin/build/translations/sq.js +1 -1
  358. package/src/assets/qms-ckeditor-plugin/build/translations/sr-latn.js +1 -1
  359. package/src/assets/qms-ckeditor-plugin/build/translations/sr.js +1 -1
  360. package/src/assets/qms-ckeditor-plugin/build/translations/sv.js +1 -1
  361. package/src/assets/qms-ckeditor-plugin/build/translations/th.js +1 -1
  362. package/src/assets/qms-ckeditor-plugin/build/translations/tk.js +1 -1
  363. package/src/assets/qms-ckeditor-plugin/build/translations/tr.js +1 -1
  364. package/src/assets/qms-ckeditor-plugin/build/translations/ug.js +1 -1
  365. package/src/assets/qms-ckeditor-plugin/build/translations/uk.js +1 -1
  366. package/src/assets/qms-ckeditor-plugin/build/translations/vi.js +1 -1
  367. package/src/assets/qms-ckeditor-plugin/build/translations/zh-cn.js +1 -1
  368. package/src/assets/qms-ckeditor-plugin/build/translations/zh.js +1 -1
  369. package/src/assets/qms-ckeditor-plugin/package-lock.json +9 -12198
  370. package/src/assets/qms-ckeditor-plugin/package.json +0 -1
  371. package/src/assets/qms-ckeditor-plugin/src/ckeditor.js +3 -22
  372. package/src/assets/qms-ckeditor-plugin/src/plugins/bpmn/qmsCKEditorBpmnPlugin.js +5 -24
  373. package/src/assets/qms-ckeditor-plugin/src/plugins/common/qmsCKEditorConstant.js +1 -7
  374. package/src/assets/qms-ckeditor-plugin/src/plugins/common/qmsCKEditorService.js +0 -20
  375. package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/imagemapediting.js +43 -47
  376. package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/imagemapui.js +1 -1
  377. package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/insertimagemapcommand.js +108 -72
  378. package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/resizeimagemapcommand.js +3 -4
  379. package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/utils.js +0 -13
  380. package/src/assets/qms-ckeditor-plugin/src/plugins/timestamp/timestamp.js +8 -8
  381. package/src/assets/qms-ckeditor-plugin/src/plugins/tooltip/tooltipui.js +24 -23
  382. package/src/assets/qms-ckeditor-plugin/src/themes/icons/information.svg +50 -1
  383. package/src/assets/qms-ckeditor-plugin/src/themes/icons/timestamp.svg +1 -1
  384. package/src/lib/components/qms-app-bar/qms-app-bar.component.scss +7 -0
  385. package/src/lib/components/select-include-children/select-include-children.component.scss +309 -0
  386. package/src/lib/components/select-one/select-one.component.scss +240 -0
  387. package/src/lib/components/{related/tree → tree}/tree.component.scss +4 -4
  388. package/src/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.scss +1 -15
  389. package/src/lib/qms-ckeditor-components/styles/_layout.scss +0 -24
  390. package/src/lib/qms-ckeditor-components/styles/_modules.scss +0 -8
  391. package/src/themes/_non-bg-scrollbar.scss +33 -0
  392. package/src/themes/_scrollbar.scss +3 -10
  393. package/esm2015/lib/components/related/common/qms-icon.const.js +0 -107
  394. package/esm2015/lib/components/related/common/tree.function.js +0 -96
  395. package/esm2015/lib/components/related/model/tree-config.model.js +0 -3
  396. package/esm2015/lib/components/related/model/tree-node.model.js +0 -3
  397. package/esm2015/lib/components/related/model/tree.model.js +0 -3
  398. package/esm2015/lib/components/related/tree/tree.component.js +0 -684
  399. package/esm2015/lib/qms-ckeditor-components/common/constants/ckeditorLink.constant.js +0 -7
  400. package/esm2015/lib/qms-ckeditor-components/common/enums/shape-flow-chart-connection-type.js +0 -8
  401. package/esm2015/lib/qms-ckeditor-components/common/flowchart/sample/sample-graphs.js +0 -16
  402. package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/halo-service.js +0 -105
  403. package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/inspector-service.js +0 -3762
  404. package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/keyboard-service.js +0 -68
  405. package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/kitchensink-service.js +0 -372
  406. package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/stencil-service.js +0 -1041
  407. package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/toolbar-service.js +0 -326
  408. package/esm2015/lib/qms-ckeditor-components/common/flowchart/shapes/app-shapes.js +0 -318
  409. package/esm2015/lib/qms-ckeditor-components/common/flowchart/themes/theme-picker.js +0 -80
  410. package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-flowchart-template.model.js +0 -9
  411. package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-flowchart.model.js +0 -9
  412. package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-save-as-template.model.js +0 -3
  413. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-about/qms-ckeditor-about.component.js +0 -43
  414. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-flowchart/qms-ckeditor-flowchart.component.js +0 -322
  415. package/esm2015/lib/qms-ckeditor-components/models/qms-ckeditor-bpmn-data.model.js +0 -8
  416. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-flowchart.service.js +0 -26
  417. package/lib/components/related/common/qms-icon.const.d.ts +0 -23
  418. package/lib/qms-ckeditor-components/common/constants/ckeditorLink.constant.d.ts +0 -6
  419. package/lib/qms-ckeditor-components/common/enums/shape-flow-chart-connection-type.d.ts +0 -6
  420. package/lib/qms-ckeditor-components/common/flowchart/sample/sample-graphs.d.ts +0 -14
  421. package/lib/qms-ckeditor-components/common/flowchart/service/halo-service.d.ts +0 -48
  422. package/lib/qms-ckeditor-components/common/flowchart/service/inspector-service.d.ts +0 -18
  423. package/lib/qms-ckeditor-components/common/flowchart/service/keyboard-service.d.ts +0 -17
  424. package/lib/qms-ckeditor-components/common/flowchart/service/kitchensink-service.d.ts +0 -62
  425. package/lib/qms-ckeditor-components/common/flowchart/service/stencil-service.d.ts +0 -1183
  426. package/lib/qms-ckeditor-components/common/flowchart/service/toolbar-service.d.ts +0 -216
  427. package/lib/qms-ckeditor-components/common/flowchart/shapes/app-shapes.d.ts +0 -61
  428. package/lib/qms-ckeditor-components/common/flowchart/themes/theme-picker.d.ts +0 -36
  429. package/lib/qms-ckeditor-components/common/models/qms-ckeditor-flowchart-template.model.d.ts +0 -7
  430. package/lib/qms-ckeditor-components/common/models/qms-ckeditor-flowchart.model.d.ts +0 -7
  431. package/lib/qms-ckeditor-components/common/models/qms-ckeditor-save-as-template.model.d.ts +0 -7
  432. package/lib/qms-ckeditor-components/components/qms-ckeditor-about/qms-ckeditor-about.component.d.ts +0 -18
  433. package/lib/qms-ckeditor-components/components/qms-ckeditor-flowchart/qms-ckeditor-flowchart.component.d.ts +0 -44
  434. package/lib/qms-ckeditor-components/models/qms-ckeditor-bpmn-data.model.d.ts +0 -7
  435. package/lib/qms-ckeditor-components/services/qms-ckeditor-flowchart.service.d.ts +0 -13
  436. package/src/assets/images/ckeditor5.svg +0 -1
  437. package/src/assets/jointjs/fonts/Alegreya_Sans/AlegreyaSans-Bold.ttf +0 -0
  438. package/src/assets/jointjs/fonts/Alegreya_Sans/AlegreyaSans-Light.ttf +0 -0
  439. package/src/assets/jointjs/fonts/Alegreya_Sans/AlegreyaSans-Regular.ttf +0 -0
  440. package/src/assets/jointjs/fonts/Alegreya_Sans/OFL.txt +0 -92
  441. package/src/assets/jointjs/fonts/Averia_Libre/AveriaLibre-Bold.ttf +0 -0
  442. package/src/assets/jointjs/fonts/Averia_Libre/AveriaLibre-Light.ttf +0 -0
  443. package/src/assets/jointjs/fonts/Averia_Libre/AveriaLibre-Regular.ttf +0 -0
  444. package/src/assets/jointjs/fonts/Averia_Libre/OFL.txt +0 -93
  445. package/src/assets/jointjs/fonts/Roboto_Condensed/LICENSE.txt +0 -202
  446. package/src/assets/jointjs/fonts/Roboto_Condensed/RobotoCondensed-Bold.ttf +0 -0
  447. package/src/assets/jointjs/fonts/Roboto_Condensed/RobotoCondensed-Light.ttf +0 -0
  448. package/src/assets/jointjs/fonts/Roboto_Condensed/RobotoCondensed-Regular.ttf +0 -0
  449. package/src/assets/jointjs/images/delete-icon-modern.png +0 -0
  450. package/src/assets/jointjs/images/image-icon1.svg +0 -1
  451. package/src/assets/jointjs/images/image-icon2.svg +0 -6
  452. package/src/assets/jointjs/images/image-icon3.svg +0 -11
  453. package/src/assets/jointjs/images/image-icon4.svg +0 -8
  454. package/src/assets/jointjs/images/member-female.png +0 -0
  455. package/src/assets/jointjs/images/member-male.png +0 -0
  456. package/src/assets/jointjs/images/no-color-icon.svg +0 -72
  457. package/src/assets/jointjs/images/reset-icon-modern.png +0 -0
  458. package/src/assets/jointjs/images/save-icon-modern.png +0 -0
  459. package/src/assets/jointjs/images/to-front-icon-modern.png +0 -0
  460. package/src/assets/jointjs/images/toback-icon-modern.png +0 -0
  461. package/src/assets/jointjs/images/toolbar-icons-dark.woff +0 -0
  462. package/src/assets/jointjs/images/toolbar-icons-material.png +0 -0
  463. package/src/assets/jointjs/images/toolbar-icons-modern.png +0 -0
  464. package/src/assets/jointjs/images/transparent-icon.svg +0 -50
  465. package/src/assets/jointjs/scss/style.dark.scss +0 -233
  466. package/src/assets/jointjs/scss/style.material.scss +0 -234
  467. package/src/assets/jointjs/scss/style.modern.scss +0 -225
  468. package/src/assets/jointjs/scss/style.scss +0 -216
  469. package/src/assets/jointjs/scss/theme-picker.scss +0 -21
  470. package/src/assets/qms-ckeditor-plugin/src/dist/ckeditor.dev.js +0 -173
  471. package/src/assets/qms-ckeditor-plugin/src/plugins/aboutckeditor/aboutckeditor.js +0 -28
  472. package/src/assets/qms-ckeditor-plugin/src/plugins/flowchart/qmsCKEditorFlowchartPlugin.js +0 -63
  473. package/src/assets/qms-ckeditor-plugin/src/plugins/fullscreen/dist/qmsCKEditorFullscreenPlugin.dev.js +0 -87
  474. package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/openimagemapcommand.js +0 -58
  475. package/src/assets/qms-ckeditor-plugin/src/themes/icons/flowchart.svg +0 -507
  476. package/src/assets/qms-ckeditor-plugin/src/themes/icons/tooltip.svg +0 -1
  477. package/src/lib/qms-ckeditor-components/components/qms-ckeditor-about/qms-ckeditor-about.component.scss +0 -16
  478. package/src/lib/qms-ckeditor-components/components/qms-ckeditor-flowchart/qms-ckeditor-flowchart.component.scss +0 -5
  479. package/src/themes/_non-bg-srcollbar.scss +0 -4
@@ -0,0 +1,635 @@
1
+ import { ChangeDetectorRef, EventEmitter, ViewChild, ViewEncapsulation, ViewChildren, ElementRef } from '@angular/core';
2
+ import { Component, HostListener, Inject } from '@angular/core';
3
+ import { FormControl } from '@angular/forms';
4
+ import { MatAutocompleteTrigger } from '@angular/material/autocomplete';
5
+ import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
6
+ import { MatIconRegistry } from '@angular/material/icon';
7
+ import { DomSanitizer } from '@angular/platform-browser';
8
+ import { Subject } from 'rxjs';
9
+ import { debounceTime, takeUntil } from 'rxjs/operators';
10
+ import { TranslateLibraryService } from '../../services/translation-registry.service';
11
+ import { QMSIconRegistryService } from '../app-icon/icon-registry.service';
12
+ import { SelectPopupData } from './model/select-popup-data.model';
13
+ import { SelectOption } from './model/select-option.model';
14
+ import { QMSSelectGlobalService } from './services/select-global.service';
15
+ import { TreeComponent } from '../tree/tree.component';
16
+ import { SelectConst } from './model/select.const';
17
+ import { ItemIconType } from '../related/common/item-icon-type.enum';
18
+ import { SelectOptionTypes } from './enum/select-option-type.enum';
19
+ export class SelectIncludeChildrenPopUpComponent {
20
+ constructor(cdRef, translate, dialogRef, globalService, iconRegistry, domSanitizer, appIconService, elem, data) {
21
+ this.cdRef = cdRef;
22
+ this.translate = translate;
23
+ this.dialogRef = dialogRef;
24
+ this.globalService = globalService;
25
+ this.iconRegistry = iconRegistry;
26
+ this.domSanitizer = domSanitizer;
27
+ this.appIconService = appIconService;
28
+ this.elem = elem;
29
+ this.data = data;
30
+ this.ngUnsubscribe = new Subject();
31
+ this.headerName = '';
32
+ this.treeData = [];
33
+ this.checkedNodeList = [];
34
+ this.selectedOptions = [];
35
+ this.selectedData = [];
36
+ this.commonCheckedList = [];
37
+ this.itemType = 0;
38
+ this.selectedRiskData = [];
39
+ this.disabledList = [];
40
+ this.orginalDisableList = [];
41
+ this.isDocumentExpanded = true;
42
+ this.isCommonExpanded = true;
43
+ this.singleSelectOption = false;
44
+ this.searchOrder = [];
45
+ this.myControl = new FormControl();
46
+ this.filteredOptions = [];
47
+ this.isInputValue = false;
48
+ this.selectedFolder = null;
49
+ this.listChildrenSelectOne = [];
50
+ this.includeChildren = false;
51
+ this.itemIconType = ItemIconType;
52
+ this.onSearch = new EventEmitter();
53
+ this.onExpandFolder = new EventEmitter();
54
+ this.headerName = data.headerName;
55
+ this.treeData = data.treeData;
56
+ this.treeConfig = data.treeConfig;
57
+ this.selectedRiskData = (data === null || data === void 0 ? void 0 : data.selectedNode) || [];
58
+ this.disabledList = $.extend(true, [], data.disabledList || []);
59
+ this.orginalDisableList = $.extend(true, [], data.disabledList || []);
60
+ this.singleSelectOption = data.treeConfig.singleSelectedNode;
61
+ this.maxSelectItemCount = data.maxSelectItemCount;
62
+ this.checkedNodeList = (data === null || data === void 0 ? void 0 : data.selectedList) || [];
63
+ this.includeChildren = data === null || data === void 0 ? void 0 : data.includeChildren;
64
+ this.editItem = data.editItem;
65
+ appIconService.registerProcessIcon(iconRegistry, domSanitizer);
66
+ appIconService.registerProcessAreaIcon(iconRegistry, domSanitizer);
67
+ appIconService.registerDocumentIcon(iconRegistry, domSanitizer);
68
+ appIconService.registerFolderIcon(iconRegistry, domSanitizer);
69
+ appIconService.registerDeviationIcon(iconRegistry, domSanitizer);
70
+ appIconService.registerChecklistIcon(iconRegistry, domSanitizer);
71
+ appIconService.registerRiskIcon(iconRegistry, domSanitizer);
72
+ }
73
+ ngAfterViewInit() {
74
+ if (this.editItem) {
75
+ this.focusEditItem(this.editItem);
76
+ }
77
+ this.initTree(this.checkedNodeList);
78
+ }
79
+ ngOnDestroy() {
80
+ this.ngUnsubscribe.next();
81
+ this.ngUnsubscribe.complete();
82
+ this.globalService.setSearchResult([]);
83
+ this.selectedFolder = null;
84
+ }
85
+ onMessage(event) {
86
+ if (event.data === SelectConst.HIDE_SEARCH_RESULT) {
87
+ this.autoComplete.closePanel();
88
+ }
89
+ }
90
+ ngOnInit() {
91
+ this.translate.getLanguageSubject$.pipe().subscribe((res) => {
92
+ if (res) {
93
+ this.LANG = this.translate.getObjectLang(res);
94
+ }
95
+ });
96
+ this.globalService.searchSelect.pipe(takeUntil(this.ngUnsubscribe)).subscribe((res) => {
97
+ if (res && res.length) {
98
+ this.filteredOptions = res;
99
+ }
100
+ });
101
+ this.myControl.valueChanges.pipe(debounceTime(1000)).subscribe((val) => {
102
+ this.isInputValue = true;
103
+ this.onSearchRelated(val);
104
+ });
105
+ // this.searchOrder = this.getSearchOrder();
106
+ }
107
+ ngAfterViewChecked() {
108
+ this.cdRef.detectChanges();
109
+ if (this.filteredOptions && this.filteredOptions.length) {
110
+ this.autoComplete.openPanel();
111
+ this.setResultHeight();
112
+ }
113
+ else if (this.autoComplete) {
114
+ this.autoComplete.closePanel();
115
+ }
116
+ }
117
+ initTree(selectedOptions) {
118
+ if (selectedOptions.length > 0) {
119
+ selectedOptions.forEach(element => {
120
+ this.selectedOptions.push(element);
121
+ if (element.type === SelectOptionTypes.IncludeChildren) {
122
+ this.selectedOptions = this.selectedOptions.concat(element.children);
123
+ }
124
+ this.selectedData = this.mapSelectOptionToTreeNode(this.selectedOptions);
125
+ });
126
+ }
127
+ }
128
+ focusEditItem(selectedOption) {
129
+ const node = this.dataTrees.toArray()[0].getNodeByIdAndParentId(selectedOption.id, selectedOption.parentId);
130
+ if (node) {
131
+ this.dataTrees.toArray()[0].expandNode(node);
132
+ const element = document.getElementById(`_${node.parentId ? node.parentId : ''}_${node.id}_${node.level}`);
133
+ if (element) {
134
+ element.scrollIntoView(false);
135
+ }
136
+ }
137
+ }
138
+ removeCheckedNodeList(item) {
139
+ const index = this.checkedNodeList.findIndex(x => (x.id.toLowerCase() === item.id.toLowerCase() && x.parentId.toLowerCase() === item.parentId.toLowerCase()));
140
+ if (index >= 0) {
141
+ let position = this.selectedOptions.findIndex(x => x.id === item.id && x.parentId === item.parentId);
142
+ if (position >= 0) {
143
+ this.selectedOptions.splice(position, 1);
144
+ }
145
+ if (this.checkedNodeList[index].type === SelectOptionTypes.IncludeChildren) {
146
+ this.removeIncludeChildren(item);
147
+ }
148
+ if (this.includeChildren) {
149
+ this.refactorSelectList(item);
150
+ }
151
+ else {
152
+ this.checkedNodeList.splice(index, 1);
153
+ }
154
+ this.enableSelectedNode({ id: item.id, parentId: item.parentId, itemName: item.name, type: SelectOptionTypes.IncludeChildren });
155
+ this.selectedData = this.mapSelectOptionToTreeNode(this.selectedOptions);
156
+ }
157
+ }
158
+ selectSearchOption(item) {
159
+ let position = this.selectedOptions.findIndex(x => x.id === item.id && x.parentId === item.parentId);
160
+ if (position < 0) {
161
+ if (this.includeChildren) {
162
+ this.selectIncludeChildren({
163
+ id: item.id,
164
+ name: item.itemName,
165
+ parentId: item.parentId,
166
+ level: 0,
167
+ expandable: true,
168
+ disabled: false,
169
+ hasChild: false
170
+ });
171
+ this.refactorSelectList({
172
+ id: item.id,
173
+ name: item.itemName,
174
+ parentId: item.parentId,
175
+ level: 0,
176
+ expandable: true,
177
+ disabled: false,
178
+ hasChild: false
179
+ });
180
+ }
181
+ else {
182
+ this.selectedOptions.push(item);
183
+ this.checkedNodeList.push({
184
+ id: item.id,
185
+ itemName: item.itemName,
186
+ type: SelectOptionTypes.SelectOne,
187
+ parentId: item.parentId,
188
+ children: [],
189
+ noChildren: 0,
190
+ noSelectedChildren: 0
191
+ });
192
+ }
193
+ }
194
+ this.selectedData = this.mapSelectOptionToTreeNode(this.selectedOptions);
195
+ }
196
+ getItemIconType(item) {
197
+ if (item.itemIcon && item.itemIcon.length)
198
+ return this.itemIconType.name;
199
+ if (item.itemIconPath && item.itemIconPath.length)
200
+ return this.itemIconType.path;
201
+ if (item.itemIconBase64 && item.itemIconBase64.length)
202
+ return this.itemIconType.base64;
203
+ if (item.itemIconSvg && item.itemIconSvg.length)
204
+ return this.itemIconType.svg;
205
+ return this.itemIconType.none;
206
+ }
207
+ getImagePath(item) {
208
+ return this.domSanitizer.bypassSecurityTrustResourceUrl(item.itemIconBase64);
209
+ }
210
+ isMatchTrue(arr, arr2) {
211
+ return arr.every((i) => {
212
+ return arr2.includes(i);
213
+ });
214
+ }
215
+ setResultHeight(arr) {
216
+ let maxHeight = 484;
217
+ const popup_content = document.getElementsByClassName('qmslib_related_popup_content')[0];
218
+ const line__divider = document.getElementsByClassName('line__divider')[0];
219
+ if (popup_content && line__divider) {
220
+ maxHeight = this.getOffsetHeight(popup_content, true) + this.getOffsetHeight(line__divider, true) * 2;
221
+ }
222
+ const contentResult = document.getElementsByClassName('cdk-virtual-scroll-content-wrapper')[0];
223
+ const viewreports = document.getElementsByClassName('related-viewport')[0];
224
+ if (viewreports) {
225
+ if (contentResult.offsetHeight <= maxHeight) {
226
+ viewreports.style.height = `${contentResult.offsetHeight}px`;
227
+ }
228
+ else {
229
+ viewreports.style.height = `${maxHeight}px`;
230
+ }
231
+ }
232
+ }
233
+ onSearchRelated(_val) {
234
+ this.filteredOptions = [];
235
+ if (typeof (_val) === 'object') {
236
+ this.myControl.setValue('');
237
+ }
238
+ else if (typeof (_val) === 'string') {
239
+ if (!!_val) {
240
+ this.onSearch.emit(_val);
241
+ }
242
+ }
243
+ }
244
+ showSearchResult() {
245
+ this.autoComplete.openPanel();
246
+ }
247
+ displayRelated(related) {
248
+ return related ? related.itemName : undefined;
249
+ }
250
+ getCommonCheckedNode(list) {
251
+ }
252
+ selectIncludeChildren(item) {
253
+ let listChildren = [];
254
+ listChildren = this.getAllChildrenNodeRecursive(listChildren, item);
255
+ this.selectedOptions.push({
256
+ id: item.id,
257
+ itemName: item.name,
258
+ itemNumberId: item.id,
259
+ parentId: item.parentId,
260
+ type: SelectOptionTypes.IncludeChildren
261
+ });
262
+ listChildren.forEach(x => {
263
+ const index = this.selectedOptions.findIndex(node => node.id === x.id && node.parentId === x.parentId);
264
+ if (index < 0) {
265
+ this.selectedOptions.push(x);
266
+ }
267
+ });
268
+ }
269
+ removeIncludeChildren(item) {
270
+ let listChildren = [];
271
+ listChildren = this.getAllChildrenNodeRecursive(listChildren, item);
272
+ const itemIndex = this.selectedOptions.findIndex(node => node.id === item.id && node.parentId === item.parentId);
273
+ if (itemIndex >= 0) {
274
+ this.selectedOptions.splice(itemIndex, 1);
275
+ }
276
+ listChildren.forEach(x => {
277
+ const index = this.selectedOptions.findIndex(node => node.id === x.id && node.parentId === x.parentId);
278
+ if (index >= 0) {
279
+ this.selectedOptions.splice(index, 1);
280
+ }
281
+ });
282
+ }
283
+ getAllChildrenNodeRecursive(listResult, item) {
284
+ let children = this.treeData.filter(x => x.parentId === item.id);
285
+ let childrenItem = [...new Set(this.treeData.filter(x => x.rootId === item.id && !!x.childId))];
286
+ if (childrenItem.length > 0) {
287
+ childrenItem = childrenItem.filter(x => listResult.findIndex(node => node.id === x.childId && node.parentId === x.rootId) < 0);
288
+ listResult = listResult.concat([...new Set(childrenItem.map(x => {
289
+ return {
290
+ id: x.childId,
291
+ itemName: x.childName,
292
+ parentId: x.rootId,
293
+ parentName: x.rootName,
294
+ type: SelectOptionTypes.Children
295
+ };
296
+ }))]);
297
+ }
298
+ if (children.length > 0) {
299
+ children = children.filter(x => listResult.findIndex(node => node.id === x.rootId && node.parentId === x.parentId) < 0);
300
+ const uniqueChildren = children.map(x => {
301
+ var _a;
302
+ return {
303
+ id: x.rootId,
304
+ itemName: ((_a = x.parentId) === null || _a === void 0 ? void 0 : _a.length) > 0 ? x.subName : x.rootName,
305
+ parentId: x.parentId,
306
+ type: SelectOptionTypes.IncludeChildren
307
+ };
308
+ });
309
+ listResult = listResult.concat(uniqueChildren.filter((x, index) => {
310
+ return index === uniqueChildren.findIndex(node => node.id === x.id && node.parentId === x.parentId);
311
+ }));
312
+ children.forEach(node => {
313
+ listResult = this.getAllChildrenNodeRecursive(listResult, {
314
+ id: node.rootId,
315
+ name: node.rootName,
316
+ parentId: node.parentId,
317
+ level: 0,
318
+ expandable: true,
319
+ hasChild: true,
320
+ disabled: false
321
+ });
322
+ });
323
+ }
324
+ return listResult;
325
+ }
326
+ onCloseClick() {
327
+ this.selectedFolder = null;
328
+ this.dialogRef.close();
329
+ }
330
+ ;
331
+ onAddClick() {
332
+ this.selectedFolder = null;
333
+ this.dialogRef.close(this.checkedNodeList);
334
+ }
335
+ getOffsetHeight(element, includeMargin) {
336
+ let elmHeight = 0, elmMargin = 0;
337
+ elmHeight = element.offsetHeight;
338
+ if (includeMargin) {
339
+ const style = window.getComputedStyle(element);
340
+ elmMargin = parseFloat(style.marginTop.replace('px', '')) + parseFloat(style.marginBottom.replace('px', ''));
341
+ }
342
+ return (elmHeight + elmMargin);
343
+ }
344
+ getItemChipName(item) {
345
+ return `${item.itemName}`;
346
+ }
347
+ getItemSelectedChildrenRatio(item) {
348
+ return `${item.noSelectedChildren}/${item.noChildren}`;
349
+ }
350
+ isEllipsisActive(e) {
351
+ return e ? (e.clientWidth < e.scrollWidth) : false;
352
+ }
353
+ toggleSelectItem(node) {
354
+ const SelectOption = this.checkedNodeList.find(x => (x.id.toLowerCase() === node.id.toLowerCase() && x.parentId.toLowerCase() === node.parentId.toLowerCase()));
355
+ if (SelectOption) {
356
+ this.removeCheckedNodeList({
357
+ id: SelectOption.id,
358
+ name: node.itemName,
359
+ parentId: SelectOption.parentId,
360
+ hasChild: false,
361
+ expandable: false,
362
+ level: 0,
363
+ disabled: false,
364
+ });
365
+ }
366
+ else {
367
+ // this.selectRelated(node);
368
+ }
369
+ }
370
+ isNodeSelected(node) {
371
+ return this.checkedNodeList.filter(x => (x.id.toLowerCase() === node.id.toLowerCase() && x.parentId.toLowerCase() === node.parentId.toLowerCase())).length > 0;
372
+ }
373
+ getChildrenOfFolder(node) {
374
+ // if (this.splitView) {
375
+ // const parentTexts = this.elem.nativeElement.querySelectorAll('.text-node-parent');
376
+ // [].forEach.call(parentTexts, (el) => {
377
+ // el.classList.remove('active-item');
378
+ // });
379
+ // const itemElement = document.querySelectorAll(`#_${node.parentId ? node.parentId : ''}_${node.id}_${node.level}`);
380
+ // [].forEach.call(itemElement, (el) => {
381
+ // el.classList.add('active-item');
382
+ // });
383
+ let item = new SelectOption();
384
+ item.id = node.id;
385
+ item.itemName = node.name;
386
+ item.levelType = node.levelType;
387
+ this.selectedFolder = node;
388
+ this.onExpandFolder.emit(item);
389
+ // }
390
+ }
391
+ selectNodeTreeEvent(node) {
392
+ let position = this.selectedOptions.findIndex(x => x.id === node.id && x.parentId === node.parentId);
393
+ if (position > -1) {
394
+ if (this.includeChildren) {
395
+ if (node.expandable) {
396
+ this.removeIncludeChildren(node);
397
+ }
398
+ else {
399
+ const itemIndex = this.selectedOptions.findIndex(item => node.id === item.id && node.parentId === item.parentId);
400
+ if (itemIndex >= 0) {
401
+ this.selectedOptions.splice(itemIndex, 1);
402
+ }
403
+ }
404
+ this.checkedNodeList = this.checkedNodeList.filter(x => x.id !== node.id || x.parentId !== node.parentId);
405
+ this.refactorSelectList(node);
406
+ }
407
+ else {
408
+ const itemIndex = this.selectedOptions.findIndex(item => node.id === item.id && node.parentId === item.parentId);
409
+ if (itemIndex >= 0) {
410
+ this.selectedOptions.splice(itemIndex, 1);
411
+ }
412
+ this.checkedNodeList = this.checkedNodeList.filter(x => x.id !== node.id || x.parentId !== node.parentId);
413
+ }
414
+ }
415
+ else {
416
+ if (this.includeChildren) {
417
+ if (node.expandable) {
418
+ this.selectIncludeChildren(node);
419
+ }
420
+ else {
421
+ this.selectedOptions.push({
422
+ id: node.id,
423
+ itemName: node.name,
424
+ itemNumberId: node.id,
425
+ parentId: node.parentId,
426
+ type: SelectOptionTypes.Children
427
+ });
428
+ }
429
+ this.refactorSelectList(node);
430
+ }
431
+ else {
432
+ this.selectedOptions.push({
433
+ id: node.id,
434
+ itemName: node.name,
435
+ itemNumberId: node.id,
436
+ parentId: node.parentId,
437
+ type: SelectOptionTypes.SelectOne
438
+ });
439
+ this.checkedNodeList.push({
440
+ id: node.id,
441
+ itemName: node.name,
442
+ type: SelectOptionTypes.SelectOne,
443
+ parentId: node.parentId,
444
+ children: [],
445
+ noSelectedChildren: 0,
446
+ noChildren: 0,
447
+ });
448
+ }
449
+ }
450
+ this.selectedData = this.mapSelectOptionToTreeNode(this.selectedOptions);
451
+ }
452
+ setValue(e) {
453
+ this.includeChildren = !!e.checked;
454
+ if (!this.includeChildren) {
455
+ this.checkedNodeList.forEach(node => {
456
+ this.disableSelectedNode(node);
457
+ });
458
+ }
459
+ else {
460
+ this.disabledList = this.orginalDisableList;
461
+ }
462
+ }
463
+ mapSelectOptionToTreeNode(list) {
464
+ return list.map(x => {
465
+ return {
466
+ id: x.id,
467
+ name: x.itemName,
468
+ level: 0,
469
+ expandable: true,
470
+ hasChild: true,
471
+ parentId: x.parentId,
472
+ disabled: false,
473
+ };
474
+ });
475
+ }
476
+ refactorSelectList(node) {
477
+ let parent;
478
+ let parentList = [];
479
+ parent = this.treeData.find(x => x.rootId === node.parentId);
480
+ if (parent) {
481
+ parentList.push({
482
+ id: parent.rootId,
483
+ itemName: parent.rootName,
484
+ parentId: parent.parentId,
485
+ type: SelectOptionTypes.IncludeChildren
486
+ });
487
+ parentList = this.getParentLineOfNode(parentList, parent);
488
+ }
489
+ if (parentList.length > 0) {
490
+ const selectedParentList = parentList.filter(x => this.selectedOptions
491
+ .findIndex(selectedNode => x.id === selectedNode.id && x.parentId === selectedNode.parentId) >= 0);
492
+ if (selectedParentList.length > 0) {
493
+ const highestSelectedNode = selectedParentList[selectedParentList.length - 1];
494
+ this.combineNodes(highestSelectedNode);
495
+ }
496
+ else {
497
+ this.combineNodes({
498
+ id: node.id,
499
+ itemName: node.name,
500
+ type: SelectOptionTypes.IncludeChildren,
501
+ parentId: node.parentId
502
+ });
503
+ }
504
+ }
505
+ else {
506
+ this.combineNodes({
507
+ id: node.id,
508
+ itemName: node.name,
509
+ type: SelectOptionTypes.IncludeChildren,
510
+ parentId: node.parentId
511
+ });
512
+ }
513
+ }
514
+ combineNodes(root) {
515
+ let children = [];
516
+ children = this.getAllChildrenNodeRecursive(children, {
517
+ id: root.id,
518
+ name: root.itemName,
519
+ parentId: root.parentId,
520
+ level: 0,
521
+ expandable: true,
522
+ hasChild: true,
523
+ disabled: false
524
+ });
525
+ let selectedNodeIndex = this.checkedNodeList.findIndex(x => x.id === root.id && x.parentId === root.parentId);
526
+ let nodeList = [];
527
+ children.forEach(child => {
528
+ const index = this.checkedNodeList.findIndex(node => node.id === child.id && node.parentId === child.parentId);
529
+ if (index >= 0) {
530
+ this.checkedNodeList.splice(index, 1);
531
+ }
532
+ const selectIndex = this.selectedOptions.findIndex(node => node.id === child.id && node.parentId === child.parentId);
533
+ if (selectIndex >= 0) {
534
+ nodeList.push(child);
535
+ }
536
+ });
537
+ if (nodeList.length > 0 || children.length === 0) {
538
+ if (selectedNodeIndex < 0) {
539
+ this.checkedNodeList.push({
540
+ id: root.id,
541
+ itemName: root.itemName,
542
+ type: SelectOptionTypes.IncludeChildren,
543
+ parentId: root.parentId,
544
+ children: [],
545
+ noSelectedChildren: 0,
546
+ noChildren: 0
547
+ });
548
+ selectedNodeIndex = this.checkedNodeList.length - 1;
549
+ }
550
+ this.checkedNodeList[selectedNodeIndex].children = nodeList;
551
+ this.checkedNodeList[selectedNodeIndex].noChildren = children.length;
552
+ this.checkedNodeList[selectedNodeIndex].noSelectedChildren = nodeList.length;
553
+ this.checkedNodeList[selectedNodeIndex].type = children.length === 0 ? SelectOptionTypes.SelectOne : SelectOptionTypes.IncludeChildren;
554
+ }
555
+ }
556
+ getParentLineOfNode(listParent, node) {
557
+ let parent;
558
+ parent = this.treeData.find(x => x.rootId === node.parentId);
559
+ if (parent) {
560
+ listParent = [...listParent, {
561
+ id: parent.rootId,
562
+ itemName: parent.rootName,
563
+ parentId: parent.parentId,
564
+ type: SelectOptionTypes.IncludeChildren
565
+ }];
566
+ this.getParentLineOfNode(listParent, parent);
567
+ }
568
+ return listParent;
569
+ }
570
+ disableSelectedNode(node) {
571
+ if (node.type === SelectOptionTypes.IncludeChildren) {
572
+ let children = [];
573
+ children = this.getAllChildrenNodeRecursive(children, {
574
+ id: node.id,
575
+ name: node.itemName,
576
+ parentId: node.parentId,
577
+ level: 0,
578
+ expandable: true,
579
+ hasChild: true,
580
+ disabled: false
581
+ });
582
+ let disableNodes = [];
583
+ const index = this.disabledList.findIndex(x => x.id === node.id && x.parentId === node.parentId);
584
+ if (index < 0) {
585
+ disableNodes.push(node);
586
+ }
587
+ children.forEach(child => {
588
+ const index = this.disabledList.findIndex(x => x.id === child.id && x.parentId === child.parentId);
589
+ if (index < 0) {
590
+ disableNodes.push(child);
591
+ }
592
+ });
593
+ this.disabledList = [...this.disabledList, ...disableNodes];
594
+ }
595
+ }
596
+ enableSelectedNode(node) {
597
+ let children = [];
598
+ children = this.getAllChildrenNodeRecursive(children, {
599
+ id: node.id,
600
+ name: node.itemName,
601
+ parentId: node.parentId,
602
+ level: 0,
603
+ expandable: true,
604
+ hasChild: true,
605
+ disabled: false
606
+ });
607
+ this.disabledList = this.disabledList.filter(x => children.filter(child => (x.id === child.id && x.parentId === child.parentId)).length === 0);
608
+ this.disabledList = this.disabledList.filter(x => !(x.id === node.id && x.parentId === node.parentId));
609
+ }
610
+ }
611
+ SelectIncludeChildrenPopUpComponent.decorators = [
612
+ { type: Component, args: [{
613
+ selector: 'qms-select-include-children-popup',
614
+ template: "<div id=\"qmslib_related_popup\" class=\"qmslib__related__popup__container\">\r\n <div id=\"qmslib_related_popup_header\">\r\n <span mat-icon-button class=\"button__close\" (click)=\"onCloseClick()\">\r\n <mat-icon mat-icon>close</mat-icon>\r\n </span>\r\n <div id=\"qmslib_related_popup_header_001\" mat-dialog-content>\r\n <span>{{ headerName | uppercase }}</span>\r\n </div>\r\n </div>\r\n\r\n <div\r\n id=\"qmslib_related_popup_search\"\r\n class=\"input__field\"\r\n (click)=\"showSearchResult()\"\r\n >\r\n <input\r\n #name\r\n type=\"text\"\r\n placeholder=\"{{ LANG.SEARCH }}\"\r\n matInput\r\n [formControl]=\"myControl\"\r\n [matAutocomplete]=\"auto\"\r\n #autoCompleteInputSearch\r\n />\r\n <mat-icon>search</mat-icon>\r\n </div>\r\n <div class=\"select__toggle-include\">\r\n <mat-slide-toggle\r\n [checked]=\"includeChildren\"\r\n (change)=\"setValue($event)\"\r\n color=\"default\"\r\n qms-group-options\r\n >\r\n <span class=\"text-label\">Select label</span>\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"line__divider\"></div>\r\n\r\n <mat-autocomplete\r\n #auto=\"matAutocomplete\"\r\n [displayWith]=\"displayRelated\"\r\n class=\"mat-autocomplete_related-viewport\"\r\n >\r\n <cdk-virtual-scroll-viewport\r\n qms-scrollbar\r\n itemSize=\"10\"\r\n class=\"related-viewport\"\r\n >\r\n <div class=\"search__module-result\" *ngIf=\"filteredOptions\">\r\n <mat-option\r\n class=\"search__option\"\r\n *ngFor=\"let option of filteredOptions\"\r\n [value]=\"option\"\r\n (click)=\"selectSearchOption(option)\"\r\n >\r\n <qms-list-item type=\"image-square\">\r\n <mat-icon\r\n leading-icon\r\n *ngIf=\"getItemIconType(option) === itemIconType.name\"\r\n class=\"mat-icon-rtl-mirror material-icons-outlined\"\r\n type=\"image-square\"\r\n >\r\n {{ option.itemIcon }}\r\n </mat-icon>\r\n\r\n <mat-icon\r\n leading-icon\r\n *ngIf=\"getItemIconType(option) === itemIconType.svg\"\r\n class=\"mat-icon-rtl-mirror material-icons-outlined\"\r\n type=\"image-square\"\r\n [svgIcon]=\"option.itemIconSvg\"\r\n >\r\n </mat-icon>\r\n\r\n <img\r\n leading-icon\r\n *ngIf=\"getItemIconType(option) === itemIconType.path\"\r\n class=\"mat-icon\"\r\n [src]=\"option.itemIconPath\"\r\n type=\"image-square\"\r\n />\r\n\r\n <img\r\n leading-icon\r\n *ngIf=\"getItemIconType(option) === itemIconType.base64\"\r\n class=\"mat-icon image-base64\"\r\n [src]=\"getImagePath(option)\"\r\n type=\"image-square\"\r\n />\r\n <div qms-list-header>\r\n <div qms-line type=\"subtitle\" class=\"search__option-name\">\r\n {{ option.itemName }}\r\n </div>\r\n </div>\r\n </qms-list-item>\r\n </mat-option>\r\n </div>\r\n </cdk-virtual-scroll-viewport>\r\n </mat-autocomplete>\r\n\r\n <div class=\"row\">\r\n <div\r\n class=\"qms-scrollbar qmslib_related_popup_content col-12\"\r\n [ngClass]=\"{\r\n panel__content_item: checkedNodeList.length,\r\n panel__content: !checkedNodeList.length\r\n }\"\r\n >\r\n <div id=\"qmslib_related_popup_common_002\">\r\n <qms-tree\r\n [treeData]=\"treeData\"\r\n [treeConfig]=\"treeConfig\"\r\n [selectedData]=\"selectedData\"\r\n [selectedRiskData]=\"selectedRiskData\"\r\n [disabledList]=\"disabledList\"\r\n (checkBoxEvent)=\"getCommonCheckedNode($event)\"\r\n (nodeExpandEvent)=\"getChildrenOfFolder($event)\"\r\n (selectNodeEvent)=\"selectNodeTreeEvent($event)\"\r\n ></qms-tree>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"checkedNodeList.length\" class=\"line__divider\"></div>\r\n\r\n <div *ngIf=\"checkedNodeList.length\" class=\"panel__item qms-scrollbar\">\r\n <div class=\"related__item__inline\" *ngFor=\"let item of checkedNodeList\">\r\n <button\r\n *ngIf=\"item.itemName\"\r\n mat-button\r\n class=\"related__item__content\"\r\n qms-tool-tip=\"{{\r\n isEllipsisActive(itemName) ? getItemChipName(item) : ''\r\n }}\"\r\n mode=\"dark\"\r\n >\r\n <span class=\"related__item__content_name\" #itemName>\r\n {{ getItemChipName(item) }}\r\n <span\r\n class=\"select__include-children__count\"\r\n *ngIf=\"item.noSelectedChildren > 0\"\r\n >\r\n {{ getItemSelectedChildrenRatio(item) }}\r\n </span>\r\n </span>\r\n\r\n <mat-icon (click)=\"removeCheckedNodeList(item)\">cancel</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"line__divider\"></div>\r\n\r\n <div class=\"confirm__button__groups\">\r\n <button\r\n *ngIf=\"!checkedNodeList.length\"\r\n qms-btn\r\n style=\"margin-top: 7px\"\r\n (click)=\"onAddClick()\"\r\n >\r\n {{ LANG.ADD }}\r\n </button>\r\n <button\r\n *ngIf=\"checkedNodeList.length\"\r\n qms-btn\r\n style=\"margin-top: 0px\"\r\n (click)=\"onAddClick()\"\r\n >\r\n {{ LANG.ADD }} ({{ checkedNodeList.length }})\r\n </button>\r\n <button\r\n qms-btn-text\r\n [ngStyle]=\"{ 'margin-top': checkedNodeList.length ? '0px' : '7px' }\"\r\n (click)=\"onCloseClick()\"\r\n >\r\n {{ LANG.CANCEL }}\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n",
615
+ encapsulation: ViewEncapsulation.None,
616
+ styles: [".qms-scrollbar::-webkit-scrollbar{width:12px}.qms-scrollbar::-webkit-scrollbar-track{background:rgba(0,0,0,.12);background-clip:content-box}.qms-scrollbar::-webkit-scrollbar-thumb{background:rgba(0,0,0,.38);border-radius:20px;width:4px;border:4px solid transparent;background-clip:content-box}.qms-scrollbar::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,.5);background-clip:content-box;border:4px solid transparent}.qms-scrollbar.none-scroll-bg::-webkit-scrollbar-track{background:transparent;background-clip:content-box}.qms__popup .button__close{float:right;top:-24px;right:-24px;cursor:pointer}.qms__danger button{border:none;color:#fff;padding:0;text-align:center;text-decoration:none;display:inline-block;cursor:pointer;height:20px;width:20px;font-family:Open Sans;font-size:12px;font-weight:600;font-style:normal;line-height:16px}.qms__danger .red{background-color:#9e360f;margin-left:10px}.qms__danger .yellow{background-color:#e4cf53;margin-left:10px;color:#323232}.qms__danger .green{background-color:#00804c;margin-left:10px}.confirm__button__groups{margin-top:11px}.confirm__button__groups button{min-height:36px;width:auto;font-family:Open Sans;font-weight:500;font-size:14px;letter-spacing:1px;line-height:16px;padding-left:15px;padding-right:15px;margin-right:5px;float:right}.confirm__button__groups .confirm{background:#f8f9f9}.confirm__button__groups .confirm:hover{background:#001983;color:#fff}.confirm__button__groups .confirm:disabled{cursor:not-allowed}.confirm__button__groups .cancel{background:#f8f9f9}.confirm__button__groups .cancel:hover{background:#001983;color:#fff}.qmslib__related__popup__container .input__field{display:flex;align-items:center}.qmslib__related__popup__container .input__field input{width:100%;padding:10px;outline:none;border:none;background:#eee}.qmslib__related__popup__container .input__field .mat-icon{margin-left:-30px;cursor:pointer;vertical-align:middle}.qmslib__related__popup__container .line__divider{border-bottom:1px solid #ccc;height:1px;margin-top:10px;min-width:300px;max-width:100%}.qmslib__related__popup__container .button__close{float:right;top:-24px;right:-24px;cursor:pointer}.qmslib__related__popup__container .panel__content{height:450px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .panel__content_item{height:350px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .panel-tree .mat-expansion-panel-body{padding:0 12px 12px}.qmslib__related__popup__container .mat-expansion-panel-header{height:30px;font-size:12px;letter-spacing:1px;font-family:Raleway;font-weight:600;padding:0}.qmslib__related__popup__container .mat-expansion-panel-header .mat-expansion-panel-header-title{align-items:center;margin-left:12px}.qmslib__related__popup__container .mat-expansion-panel-header .related_popup_toggle-btn{width:1.5rem;height:1.5rem;line-height:1.5rem}.qmslib__related__popup__container .mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:none}.qmslib__related__popup__container .panel__item{height:100px;margin-top:12px;overflow-x:hidden;overflow-y:auto;padding-right:5px;width:100%;max-width:100%;display:flex;flex-wrap:wrap;align-content:flex-start}.qmslib__related__popup__container .panel__item .related__item__inline{max-width:100%}.qmslib__related__popup__container .panel__item .select__toggle-include{width:100%}.qmslib__related__popup__container .panel__item .related__item__content{height:32px;line-height:32px;background-color:#e5e5e5;max-width:100%;margin-bottom:5px;margin-left:2.5px;margin-right:2.5px}.qmslib__related__popup__container .panel__item .related__item__content .mat-icon{color:#8e8e8e;font-size:24px}.qmslib__related__popup__container .panel__item .related__item__content span.related__item__content_name{display:inline-block;min-width:calc(100% - 13px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:320px}.qmslib__related__popup__container .panel__item .related__item__content span.related__item__content_name .select__include-children__count{font-size:.75rem;color:rgba(0,0,0,.38)}.qmslib__related__popup__container .qmslib-related-popup-splitview{background-color:#fff;border-left:1px solid #ccc;height:450px;overflow-y:auto;margin-top:12px}.qmslib__related__popup__container .qmslib-related-popup-splitview.panel__content{height:450px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .qmslib-related-popup-splitview.panel__content_item{height:350px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .qmslib-related-popup-splitview .splitview-header{height:30px;font-size:12px;letter-spacing:1px;font-family:RALEWAY;font-weight:600;display:flex;align-items:center}.qmslib__related__popup__container .qmslib-related-popup-splitview .mat-checkbox.qms-group-options{padding:0}.qmslib__related__popup__container .qmslib-related-popup-splitview .mat-checkbox.qms-group-options .mat-checkbox-inner-container{margin-right:11px}.qmslib__related__popup__container .qmslib-related-popup-splitview .mat-checkbox.qms-group-options.mat-checkbox-checked{background:transparent!important}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node{margin-left:8px;display:flex;align-items:center;min-height:40px}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node .mat-icon{color:rgba(0,0,0,.6);margin-right:17px;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node .mat-icon svg{display:block;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content}cdk-virtual-scroll-viewport{overflow-x:hidden}cdk-virtual-scroll-viewport .search__module-result{margin:1.5rem;padding:0 0 .5rem}cdk-virtual-scroll-viewport .search__module-result .search__module-title{font-size:14px;font-weight:600}cdk-virtual-scroll-viewport .search__module-result .search__option{height:auto;line-height:normal;padding:8px 0;border-bottom:1px solid #e0e0e0}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item.mat-2-line.image-item{height:auto}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content{margin:0;border-bottom:none}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .wrap-image.image-square{width:2.5rem;height:100%;background:transparent;align-self:center;margin-right:0}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .wrap-image.image-square img{width:24px;height:24px}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .material-icons-outlined.leading-icon,cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content mat-icon.leading-icon{padding:4px 0 4px 4px}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .subtitle{font-weight:400}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .caption{overflow:hidden;line-height:normal;white-space:normal;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;padding:0;margin:0}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .caption span.search__result__parent-name{display:inline-block;width:auto;width:calc(100% - 13px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .default-subtitle{color:rgba(0,0,0,.38)}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .search__description-icon{margin-right:0;width:12px;height:12px;font-size:12px}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .qms-list-text{border-bottom:none}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .breadcrumb-containe .qms-breadcrumb-item .mat-icon{font-size:16px!important;padding-bottom:1px}cdk-virtual-scroll-viewport .search__module-result svg{display:block}#qmslib_related_popup_header_001{margin-bottom:20px;padding:0;font-weight:600;font-family:Raleway}.padding-5{padding:5px}.mat-autocomplete_related-viewport{height:100%;max-height:100%!important}.mat-autocomplete_related-viewport .cdk-virtual-scroll-content-wrapper{width:100%}.mat-autocomplete_related-viewport .related-viewport{min-height:10.25rem}"]
617
+ },] }
618
+ ];
619
+ SelectIncludeChildrenPopUpComponent.ctorParameters = () => [
620
+ { type: ChangeDetectorRef },
621
+ { type: TranslateLibraryService },
622
+ { type: MatDialogRef },
623
+ { type: QMSSelectGlobalService },
624
+ { type: MatIconRegistry },
625
+ { type: DomSanitizer },
626
+ { type: QMSIconRegistryService },
627
+ { type: ElementRef },
628
+ { type: SelectPopupData, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA,] }] }
629
+ ];
630
+ SelectIncludeChildrenPopUpComponent.propDecorators = {
631
+ dataTrees: [{ type: ViewChildren, args: [TreeComponent, {},] }],
632
+ autoComplete: [{ type: ViewChild, args: ['autoCompleteInputSearch', { read: MatAutocompleteTrigger, static: true },] }],
633
+ onMessage: [{ type: HostListener, args: ['window:message', ['$event'],] }]
634
+ };
635
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWluY2x1ZGUtY2hpbGRyZW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcW1zLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC1pbmNsdWRlLWNoaWxkcmVuL3NlbGVjdC1pbmNsdWRlLWNoaWxkcmVuLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFhLFNBQVMsRUFBRSxpQkFBaUIsRUFBK0IsWUFBWSxFQUFFLFVBQVUsRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDL0ssT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFM0QsT0FBTyxFQUFF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aUJBQWlCO1lBVWpCLHVCQUF1QjtZQU52QixZQUFZO1lBV1osc0JBQXNCO1lBVnRCLGVBQWU7WUFDZixZQUFZO1lBS1osc0JBQXNCO1lBWCtGLFVBQVU7WUFZL0gsZUFBZSx1QkF1RWYsTUFBTSxTQUFDLGVBQWU7Ozt3QkFiMUIsWUFBWSxTQUFDLGFBQWEsRUFBRSxFQUFFOzJCQUU5QixTQUFTLFNBQUMseUJBQXlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTt3QkE4Q25GLFlBQVksU0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBFdmVudEVtaXR0ZXIsIE9uRGVzdHJveSwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiwgQWZ0ZXJWaWV3Q2hlY2tlZCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGRyZW4sIEVsZW1lbnRSZWYsIEFmdGVyVmlld0luaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0TGlzdGVuZXIsIEluamVjdCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBNYXRJY29uUmVnaXN0cnkgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFRyZWVOb2RlIH0gZnJvbSAnLi4vLi4vcW1zLWNrZWRpdG9yLWNvbXBvbmVudHMvY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3ItdHJlZS1ub2RlLm1vZGVsJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlTGlicmFyeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi1yZWdpc3RyeS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUU1TSWNvblJlZ2lzdHJ5U2VydmljZSB9IGZyb20gJy4uL2FwcC1pY29uL2ljb24tcmVnaXN0cnkuc2VydmljZSc7XHJcbmltcG9ydCB7IFNlbGVjdFBvcHVwRGF0YSB9IGZyb20gJy4vbW9kZWwvc2VsZWN0LXBvcHVwLWRhdGEubW9kZWwnO1xyXG5pbXBvcnQgeyBTZWxlY3RPcHRpb24gfSBmcm9tICcuL21vZGVsL3NlbGVjdC1vcHRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBUcmVlTW9kZWwgfSBmcm9tICcuLi90cmVlL21vZGVsL3RyZWUubW9kZWwnO1xyXG5pbXBvcnQgeyBRTVNTZWxlY3RHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9zZWxlY3QtZ2xvYmFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUcmVlQ29tcG9uZW50IH0gZnJvbSAnLi4vdHJlZS90cmVlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRyZWVGbGF0Tm9kZSB9IGZyb20gJy4uL3RyZWUvbW9kZWwvdHJlZS1mbGF0LW5vZGUubW9kZWwnO1xyXG5pbXBvcnQgeyBUcmVlQ29uZmlnIH0gZnJvbSAnLi4vdHJlZS9tb2RlbC90cmVlLWNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IFNlbGVjdENvbnN0IH0gZnJvbSAnLi9tb2RlbC9zZWxlY3QuY29uc3QnO1xyXG5pbXBvcnQgeyBYIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcclxuaW1wb3J0IHsgU2VsZWN0ZWRPcHRpb24gfSBmcm9tICcuL21vZGVsL3NlbGV0ZWQtb3B0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgSXRlbUljb25UeXBlIH0gZnJvbSAnLi4vcmVsYXRlZC9jb21tb24vaXRlbS1pY29uLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IFNlbGVjdFNlYXJjaE9wdGlvbiB9IGZyb20gJy4vbW9kZWwvc2VsZWN0LXNlYXJjaC1vcHRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBTZWxlY3RPcHRpb25UeXBlcyB9IGZyb20gJy4vZW51bS9zZWxlY3Qtb3B0aW9uLXR5cGUuZW51bSc7XHJcblxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdxbXMtc2VsZWN0LWluY2x1ZGUtY2hpbGRyZW4tcG9wdXAnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC1pbmNsdWRlLWNoaWxkcmVuLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3NlbGVjdC1pbmNsdWRlLWNoaWxkcmVuLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RJbmNsdWRlQ2hpbGRyZW5Qb3BVcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdDaGVja2VkLCBBZnRlclZpZXdJbml0IHtcclxuICAgIG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICAgIExBTkc6IGFueTtcclxuICAgIGhlYWRlck5hbWUgPSAnJztcclxuICAgIHRyZWVEYXRhOiBBcnJheTxUcmVlTW9kZWw+ID0gW107XHJcbiAgICB0cmVlQ29uZmlnOiBUcmVlQ29uZmlnO1xyXG5cclxuICAgIGNoZWNrZWROb2RlTGlzdDogQXJyYXk8U2VsZWN0ZWRPcHRpb24+ID0gW107XHJcbiAgICBzZWxlY3RlZE9wdGlvbnM6IEFycmF5PFNlbGVjdE9wdGlvbj4gPSBbXTtcclxuICAgIHNlbGVjdGVkRGF0YTogQXJyYXk8VHJlZUZsYXROb2RlPiA9IFtdO1xyXG5cclxuICAgIGNvbW1vbkNoZWNrZWRMaXN0OiBBcnJheTxUcmVlRmxhdE5vZGU+ID0gW107XHJcblxyXG4gICAgaXRlbVR5cGUgPSAwO1xyXG4gICAgc2VsZWN0ZWRSaXNrRGF0YTogYW55ID0gW107XHJcbiAgICBkaXNhYmxlZExpc3Q6IFNlbGVjdGVkT3B0aW9uW10gPSBbXTtcclxuICAgIG9yZ2luYWxEaXNhYmxlTGlzdDogYW55ID0gW107XHJcbiAgICBtYXhTZWxlY3RJdGVtQ291bnQ6IG51bWJlcjtcclxuXHJcbiAgICBpc0RvY3VtZW50RXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgaXNDb21tb25FeHBhbmRlZCA9IHRydWU7XHJcbiAgICBzaW5nbGVTZWxlY3RPcHRpb24gPSBmYWxzZTtcclxuICAgIHNlYXJjaE9yZGVyID0gW107XHJcblxyXG4gICAgbXlDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XHJcbiAgICBmaWx0ZXJlZE9wdGlvbnM6IFNlbGVjdFNlYXJjaE9wdGlvbltdID0gW107XHJcbiAgICBpc0lucHV0VmFsdWUgPSBmYWxzZTtcclxuICAgIHNlbGVjdGVkRm9sZGVyOiBUcmVlRmxhdE5vZGUgPSBudWxsO1xyXG4gICAgbGlzdENoaWxkcmVuU2VsZWN0T25lOiBhbnkgPSBbXTtcclxuICAgIGluY2x1ZGVDaGlsZHJlbiA9IGZhbHNlO1xyXG4gICAgZWRpdEl0ZW06IFNlbGVjdGVkT3B0aW9uO1xyXG4gICAgaXRlbUljb25UeXBlID0gSXRlbUljb25UeXBlO1xyXG4gICAgb25TZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBvbkV4cGFuZEZvbGRlciA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0T3B0aW9uPigpO1xyXG5cclxuICAgIEBWaWV3Q2hpbGRyZW4oVHJlZUNvbXBvbmVudCwge30pIGRhdGFUcmVlczogUXVlcnlMaXN0PFRyZWVDb21wb25lbnQ+O1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2F1dG9Db21wbGV0ZUlucHV0U2VhcmNoJywgeyByZWFkOiBNYXRBdXRvY29tcGxldGVUcmlnZ2VyLCBzdGF0aWM6IHRydWUgfSlcclxuICAgIGF1dG9Db21wbGV0ZTogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcjtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIHB1YmxpYyB0cmFuc2xhdGU6IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxTZWxlY3RJbmNsdWRlQ2hpbGRyZW5Qb3BVcENvbXBvbmVudD4sXHJcbiAgICAgICAgcHVibGljIGdsb2JhbFNlcnZpY2U6IFFNU1NlbGVjdEdsb2JhbFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBpY29uUmVnaXN0cnk6IE1hdEljb25SZWdpc3RyeSxcclxuICAgICAgICBwcml2YXRlIGRvbVNhbml0aXplcjogRG9tU2FuaXRpemVyLFxyXG4gICAgICAgIHByaXZhdGUgYXBwSWNvblNlcnZpY2U6IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBlbGVtOiBFbGVtZW50UmVmLFxyXG4gICAgICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogU2VsZWN0UG9wdXBEYXRhXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLmhlYWRlck5hbWUgPSBkYXRhLmhlYWRlck5hbWU7XHJcbiAgICAgICAgdGhpcy50cmVlRGF0YSA9IGRhdGEudHJlZURhdGE7XHJcbiAgICAgICAgdGhpcy50cmVlQ29uZmlnID0gZGF0YS50cmVlQ29uZmlnO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSaXNrRGF0YSA9IGRhdGE/LnNlbGVjdGVkTm9kZSB8fCBbXTtcclxuICAgICAgICB0aGlzLmRpc2FibGVkTGlzdCA9ICQuZXh0ZW5kKHRydWUsIFtdLCBkYXRhLmRpc2FibGVkTGlzdCB8fCBbXSk7XHJcbiAgICAgICAgdGhpcy5vcmdpbmFsRGlzYWJsZUxpc3QgPSAkLmV4dGVuZCh0cnVlLCBbXSwgZGF0YS5kaXNhYmxlZExpc3QgfHwgW10pO1xyXG4gICAgICAgIHRoaXMuc2luZ2xlU2VsZWN0T3B0aW9uID0gZGF0YS50cmVlQ29uZmlnLnNpbmdsZVNlbGVjdGVkTm9kZTtcclxuICAgICAgICB0aGlzLm1heFNlbGVjdEl0ZW1Db3VudCA9IGRhdGEubWF4U2VsZWN0SXRlbUNvdW50O1xyXG4gICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0ID0gZGF0YT8uc2VsZWN0ZWRMaXN0IHx8IFtdO1xyXG4gICAgICAgIHRoaXMuaW5jbHVkZUNoaWxkcmVuID0gZGF0YT8uaW5jbHVkZUNoaWxkcmVuO1xyXG4gICAgICAgIHRoaXMuZWRpdEl0ZW0gPSBkYXRhLmVkaXRJdGVtO1xyXG4gICAgICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyUHJvY2Vzc0ljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xyXG4gICAgICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyUHJvY2Vzc0FyZWFJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcclxuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckRvY3VtZW50SWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XHJcbiAgICAgICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJGb2xkZXJJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcclxuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckRldmlhdGlvbkljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xyXG4gICAgICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyQ2hlY2tsaXN0SWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XHJcbiAgICAgICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJSaXNrSWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XHJcbiAgICB9XHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZWRpdEl0ZW0pIHtcclxuICAgICAgICAgICAgdGhpcy5mb2N1c0VkaXRJdGVtKHRoaXMuZWRpdEl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmluaXRUcmVlKHRoaXMuY2hlY2tlZE5vZGVMaXN0KTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xyXG4gICAgICAgIHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xyXG4gICAgICAgIHRoaXMuZ2xvYmFsU2VydmljZS5zZXRTZWFyY2hSZXN1bHQoW10pO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGb2xkZXIgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzptZXNzYWdlJywgWyckZXZlbnQnXSlcclxuICAgIG9uTWVzc2FnZShldmVudCkge1xyXG4gICAgICAgIGlmIChldmVudC5kYXRhID09PSBTZWxlY3RDb25zdC5ISURFX1NFQVJDSF9SRVNVTFQpIHtcclxuICAgICAgICAgICAgdGhpcy5hdXRvQ29tcGxldGUuY2xvc2VQYW5lbCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5nZXRMYW5ndWFnZVN1YmplY3QkLnBpcGUoKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkxBTkcgPSB0aGlzLnRyYW5zbGF0ZS5nZXRPYmplY3RMYW5nKHJlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5nbG9iYWxTZXJ2aWNlLnNlYXJjaFNlbGVjdC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzICYmIHJlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gcmVzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubXlDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSgxMDAwKSkuc3Vic2NyaWJlKCh2YWwpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pc0lucHV0VmFsdWUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm9uU2VhcmNoUmVsYXRlZCh2YWwpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIHRoaXMuc2VhcmNoT3JkZXIgPSB0aGlzLmdldFNlYXJjaE9yZGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xyXG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIGlmICh0aGlzLmZpbHRlcmVkT3B0aW9ucyAmJiB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5hdXRvQ29tcGxldGUub3BlblBhbmVsKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0UmVzdWx0SGVpZ2h0KCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmF1dG9Db21wbGV0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmF1dG9Db21wbGV0ZS5jbG9zZVBhbmVsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGluaXRUcmVlKHNlbGVjdGVkT3B0aW9uczogU2VsZWN0ZWRPcHRpb25bXSkge1xyXG4gICAgICAgIGlmIChzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBzZWxlY3RlZE9wdGlvbnMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSBTZWxlY3RPcHRpb25UeXBlcy5JbmNsdWRlQ2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucyA9IHRoaXMuc2VsZWN0ZWRPcHRpb25zLmNvbmNhdChlbGVtZW50LmNoaWxkcmVuKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gdGhpcy5tYXBTZWxlY3RPcHRpb25Ub1RyZWVOb2RlKHRoaXMuc2VsZWN0ZWRPcHRpb25zKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9jdXNFZGl0SXRlbShzZWxlY3RlZE9wdGlvbjogU2VsZWN0ZWRPcHRpb24pIHtcclxuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5kYXRhVHJlZXMudG9BcnJheSgpWzBdLmdldE5vZGVCeUlkQW5kUGFyZW50SWQoc2VsZWN0ZWRPcHRpb24uaWQsIHNlbGVjdGVkT3B0aW9uLnBhcmVudElkKTtcclxuICAgICAgICBpZiAobm9kZSkge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFUcmVlcy50b0FycmF5KClbMF0uZXhwYW5kTm9kZShub2RlKTtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBfJHtub2RlLnBhcmVudElkID8gbm9kZS5wYXJlbnRJZCA6ICcnfV8ke25vZGUuaWR9XyR7bm9kZS5sZXZlbH1gKTtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUNoZWNrZWROb2RlTGlzdChpdGVtOiBUcmVlRmxhdE5vZGUpIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbmRJbmRleCh4ID0+ICh4LmlkLnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0uaWQudG9Mb3dlckNhc2UoKSAmJiB4LnBhcmVudElkLnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0ucGFyZW50SWQudG9Mb3dlckNhc2UoKSkpO1xyXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuc2VsZWN0ZWRPcHRpb25zLmZpbmRJbmRleCh4ID0+IHguaWQgPT09IGl0ZW0uaWQgJiYgeC5wYXJlbnRJZCA9PT0gaXRlbS5wYXJlbnRJZCk7XHJcbiAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucy5zcGxpY2UocG9zaXRpb24sIDEpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5jaGVja2VkTm9kZUxpc3RbaW5kZXhdLnR5cGUgPT09IFNlbGVjdE9wdGlvblR5cGVzLkluY2x1ZGVDaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJbmNsdWRlQ2hpbGRyZW4oaXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmluY2x1ZGVDaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZhY3RvclNlbGVjdExpc3QoaXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVuYWJsZVNlbGVjdGVkTm9kZSh7IGlkOiBpdGVtLmlkLCBwYXJlbnRJZDogaXRlbS5wYXJlbnRJZCwgaXRlbU5hbWU6IGl0ZW0ubmFtZSwgdHlwZTogU2VsZWN0T3B0aW9uVHlwZXMuSW5jbHVkZUNoaWxkcmVuIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IHRoaXMubWFwU2VsZWN0T3B0aW9uVG9UcmVlTm9kZSh0aGlzLnNlbGVjdGVkT3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdFNlYXJjaE9wdGlvbihpdGVtOiBTZWxlY3RPcHRpb24pIHtcclxuICAgICAgICBsZXQgcG9zaXRpb24gPSB0aGlzLnNlbGVjdGVkT3B0aW9ucy5maW5kSW5kZXgoeCA9PiB4LmlkID09PSBpdGVtLmlkICYmIHgucGFyZW50SWQgPT09IGl0ZW0ucGFyZW50SWQpO1xyXG4gICAgICAgIGlmIChwb3NpdGlvbiA8IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaW5jbHVkZUNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEluY2x1ZGVDaGlsZHJlbih7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogaXRlbS5pdGVtTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogaXRlbS5wYXJlbnRJZCxcclxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogMCxcclxuICAgICAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNDaGlsZDogZmFsc2VcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZhY3RvclNlbGVjdExpc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0uaXRlbU5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IGl0ZW0ucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgZXhwYW5kYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgaGFzQ2hpbGQ6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnB1c2goaXRlbSlcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtTmFtZTogaXRlbS5pdGVtTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTZWxlY3RPcHRpb25UeXBlcy5TZWxlY3RPbmUsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IGl0ZW0ucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vQ2hpbGRyZW46IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgbm9TZWxlY3RlZENoaWxkcmVuOiAwXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEgPSB0aGlzLm1hcFNlbGVjdE9wdGlvblRvVHJlZU5vZGUodGhpcy5zZWxlY3RlZE9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBnZXRJdGVtSWNvblR5cGUoaXRlbTogU2VsZWN0U2VhcmNoT3B0aW9uKSB7XHJcbiAgICAgICAgaWYgKGl0ZW0uaXRlbUljb24gJiYgaXRlbS5pdGVtSWNvbi5sZW5ndGgpIHJldHVybiB0aGlzLml0ZW1JY29uVHlwZS5uYW1lO1xyXG4gICAgICAgIGlmIChpdGVtLml0ZW1JY29uUGF0aCAmJiBpdGVtLml0ZW1JY29uUGF0aC5sZW5ndGgpIHJldHVybiB0aGlzLml0ZW1JY29uVHlwZS5wYXRoO1xyXG4gICAgICAgIGlmIChpdGVtLml0ZW1JY29uQmFzZTY0ICYmIGl0ZW0uaXRlbUljb25CYXNlNjQubGVuZ3RoKSByZXR1cm4gdGhpcy5pdGVtSWNvblR5cGUuYmFzZTY0O1xyXG4gICAgICAgIGlmIChpdGVtLml0ZW1JY29uU3ZnICYmIGl0ZW0uaXRlbUljb25TdmcubGVuZ3RoKSByZXR1cm4gdGhpcy5pdGVtSWNvblR5cGUuc3ZnO1xyXG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1JY29uVHlwZS5ub25lO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEltYWdlUGF0aChpdGVtOiBTZWxlY3RTZWFyY2hPcHRpb24pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKGl0ZW0uaXRlbUljb25CYXNlNjQpIGFzIHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBpc01hdGNoVHJ1ZShhcnI6IGFueVtdLCBhcnIyOiBhbnlbXSkge1xyXG4gICAgICAgIHJldHVybiBhcnIuZXZlcnkoKGkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGFycjIuaW5jbHVkZXMoaSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0UmVzdWx0SGVpZ2h0KGFycj86IFNlbGVjdE9wdGlvbltdKSB7XHJcbiAgICAgICAgbGV0IG1heEhlaWdodCA9IDQ4NDtcclxuICAgICAgICBjb25zdCBwb3B1cF9jb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncW1zbGliX3JlbGF0ZWRfcG9wdXBfY29udGVudCcpWzBdIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IGxpbmVfX2RpdmlkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5lX19kaXZpZGVyJylbMF0gYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgaWYgKHBvcHVwX2NvbnRlbnQgJiYgbGluZV9fZGl2aWRlcikge1xyXG4gICAgICAgICAgICBtYXhIZWlnaHQgPSB0aGlzLmdldE9mZnNldEhlaWdodChwb3B1cF9jb250ZW50LCB0cnVlKSArIHRoaXMuZ2V0T2Zmc2V0SGVpZ2h0KGxpbmVfX2RpdmlkZXIsIHRydWUpICogMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnRlbnRSZXN1bHQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyJylbMF0gYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3Qgdmlld3JlcG9ydHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdyZWxhdGVkLXZpZXdwb3J0JylbMF0gYXMgSFRNTEVsZW1lbnQ7XHJcblxyXG4gICAgICAgIGlmICh2aWV3cmVwb3J0cykge1xyXG4gICAgICAgICAgICBpZiAoY29udGVudFJlc3VsdC5vZmZzZXRIZWlnaHQgPD0gbWF4SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICB2aWV3cmVwb3J0cy5zdHlsZS5oZWlnaHQgPSBgJHtjb250ZW50UmVzdWx0Lm9mZnNldEhlaWdodH1weGA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2aWV3cmVwb3J0cy5zdHlsZS5oZWlnaHQgPSBgJHttYXhIZWlnaHR9cHhgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uU2VhcmNoUmVsYXRlZChfdmFsOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IFtdO1xyXG4gICAgICAgIGlmICh0eXBlb2YgKF92YWwpID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICB0aGlzLm15Q29udHJvbC5zZXRWYWx1ZSgnJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiAoX3ZhbCkgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGlmICghIV92YWwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub25TZWFyY2guZW1pdChfdmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzaG93U2VhcmNoUmVzdWx0KCkge1xyXG4gICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlLm9wZW5QYW5lbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc3BsYXlSZWxhdGVkKHJlbGF0ZWQ/OiBTZWxlY3RPcHRpb24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiByZWxhdGVkID8gcmVsYXRlZC5pdGVtTmFtZSA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDb21tb25DaGVja2VkTm9kZShsaXN0OiBBcnJheTxUcmVlRmxhdE5vZGU+KSB7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0SW5jbHVkZUNoaWxkcmVuKGl0ZW06IFRyZWVGbGF0Tm9kZSkge1xyXG4gICAgICAgIGxldCBsaXN0Q2hpbGRyZW46IFNlbGVjdE9wdGlvbltdID0gW107XHJcbiAgICAgICAgbGlzdENoaWxkcmVuID0gdGhpcy5nZXRBbGxDaGlsZHJlbk5vZGVSZWN1cnNpdmUobGlzdENoaWxkcmVuLCBpdGVtKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucy5wdXNoKHtcclxuICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgIGl0ZW1OYW1lOiBpdGVtLm5hbWUsXHJcbiAgICAgICAgICAgIGl0ZW1OdW1iZXJJZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgcGFyZW50SWQ6IGl0ZW0ucGFyZW50SWQsXHJcbiAgICAgICAgICAgIHR5cGU6IFNlbGVjdE9wdGlvblR5cGVzLkluY2x1ZGVDaGlsZHJlblxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxpc3RDaGlsZHJlbi5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRPcHRpb25zLmZpbmRJbmRleChub2RlID0+IG5vZGUuaWQgPT09IHguaWQgJiYgbm9kZS5wYXJlbnRJZCA9PT0geC5wYXJlbnRJZCk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA8IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnB1c2goeCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlSW5jbHVkZUNoaWxkcmVuKGl0ZW06IFRyZWVGbGF0Tm9kZSkge1xyXG4gICAgICAgIGxldCBsaXN0Q2hpbGRyZW4gPSBbXTtcclxuICAgICAgICBsaXN0Q2hpbGRyZW4gPSB0aGlzLmdldEFsbENoaWxkcmVuTm9kZVJlY3Vyc2l2ZShsaXN0Q2hpbGRyZW4sIGl0ZW0pO1xyXG4gICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IHRoaXMuc2VsZWN0ZWRPcHRpb25zLmZpbmRJbmRleChub2RlID0+IG5vZGUuaWQgPT09IGl0ZW0uaWQgJiYgbm9kZS5wYXJlbnRJZCA9PT0gaXRlbS5wYXJlbnRJZCk7XHJcbiAgICAgICAgaWYgKGl0ZW1JbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnNwbGljZShpdGVtSW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsaXN0Q2hpbGRyZW4uZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkT3B0aW9ucy5maW5kSW5kZXgobm9kZSA9PiBub2RlLmlkID09PSB4LmlkICYmIG5vZGUucGFyZW50SWQgPT09IHgucGFyZW50SWQpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFsbENoaWxkcmVuTm9kZVJlY3Vyc2l2ZShsaXN0UmVzdWx0LCBpdGVtOiBUcmVlRmxhdE5vZGUpOiBTZWxlY3RPcHRpb25bXSB7XHJcbiAgICAgICAgbGV0IGNoaWxkcmVuID0gdGhpcy50cmVlRGF0YS5maWx0ZXIoeCA9PiB4LnBhcmVudElkID09PSBpdGVtLmlkKTtcclxuICAgICAgICBsZXQgY2hpbGRyZW5JdGVtID0gWy4uLm5ldyBTZXQodGhpcy50cmVlRGF0YS5maWx0ZXIoeCA9PiB4LnJvb3RJZCA9PT0gaXRlbS5pZCAmJiAhIXguY2hpbGRJZCkpXTtcclxuICAgICAgICBpZiAoY2hpbGRyZW5JdGVtLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY2hpbGRyZW5JdGVtID0gY2hpbGRyZW5JdGVtLmZpbHRlcih4ID0+IGxpc3RSZXN1bHQuZmluZEluZGV4KG5vZGUgPT4gbm9kZS5pZCA9PT0geC5jaGlsZElkICYmIG5vZGUucGFyZW50SWQgPT09IHgucm9vdElkKSA8IDApXHJcbiAgICAgICAgICAgIGxpc3RSZXN1bHQgPSBsaXN0UmVzdWx0LmNvbmNhdChbLi4ubmV3IFNldChjaGlsZHJlbkl0ZW0ubWFwKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogeC5jaGlsZElkLFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiB4LmNoaWxkTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogeC5yb290SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50TmFtZTogeC5yb290TmFtZSxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTZWxlY3RPcHRpb25UeXBlcy5DaGlsZHJlblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5maWx0ZXIoeCA9PiBsaXN0UmVzdWx0LmZpbmRJbmRleChub2RlID0+IG5vZGUuaWQgPT09IHgucm9vdElkICYmIG5vZGUucGFyZW50SWQgPT09IHgucGFyZW50SWQpIDwgMClcclxuICAgICAgICAgICAgY29uc3QgdW5pcXVlQ2hpbGRyZW46IFNlbGVjdE9wdGlvbltdID0gY2hpbGRyZW4ubWFwKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogeC5yb290SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbU5hbWU6IHgucGFyZW50SWQ/Lmxlbmd0aCA+IDAgPyB4LnN1Yk5hbWUgOiB4LnJvb3ROYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiB4LnBhcmVudElkLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFNlbGVjdE9wdGlvblR5cGVzLkluY2x1ZGVDaGlsZHJlblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbGlzdFJlc3VsdCA9IGxpc3RSZXN1bHQuY29uY2F0KFxyXG4gICAgICAgICAgICAgICAgdW5pcXVlQ2hpbGRyZW4uZmlsdGVyKCh4LCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleCA9PT0gdW5pcXVlQ2hpbGRyZW4uZmluZEluZGV4KG5vZGUgPT4gbm9kZS5pZCA9PT0geC5pZCAmJiBub2RlLnBhcmVudElkID09PSB4LnBhcmVudElkKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChub2RlID0+IHtcclxuICAgICAgICAgICAgICAgIGxpc3RSZXN1bHQgPSB0aGlzLmdldEFsbENoaWxkcmVuTm9kZVJlY3Vyc2l2ZShsaXN0UmVzdWx0LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IG5vZGUucm9vdElkLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IG5vZGUucm9vdE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IG5vZGUucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgZXhwYW5kYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNDaGlsZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2VcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBsaXN0UmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xvc2VDbGljaygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRm9sZGVyID0gbnVsbDtcclxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gICAgfTtcclxuXHJcbiAgICBvbkFkZENsaWNrKCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGb2xkZXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHRoaXMuY2hlY2tlZE5vZGVMaXN0KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRPZmZzZXRIZWlnaHQoZWxlbWVudDogSFRNTEVsZW1lbnQsIGluY2x1ZGVNYXJnaW46IGJvb2xlYW4pOiBudW1iZXIge1xyXG4gICAgICAgIGxldCBlbG1IZWlnaHQgPSAwLCBlbG1NYXJnaW4gPSAwO1xyXG5cclxuICAgICAgICBlbG1IZWlnaHQgPSBlbGVtZW50Lm9mZnNldEhlaWdodDtcclxuICAgICAgICBpZiAoaW5jbHVkZU1hcmdpbikge1xyXG4gICAgICAgICAgICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICBlbG1NYXJnaW4gPSBwYXJzZUZsb2F0KHN0eWxlLm1hcmdpblRvcC5yZXBsYWNlKCdweCcsICcnKSkgKyBwYXJzZUZsb2F0KHN0eWxlLm1hcmdpbkJvdHRvbS5yZXBsYWNlKCdweCcsICcnKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gKGVsbUhlaWdodCArIGVsbU1hcmdpbik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SXRlbUNoaXBOYW1lKGl0ZW06IFNlbGVjdGVkT3B0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke2l0ZW0uaXRlbU5hbWV9YDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJdGVtU2VsZWN0ZWRDaGlsZHJlblJhdGlvKGl0ZW06IFNlbGVjdGVkT3B0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke2l0ZW0ubm9TZWxlY3RlZENoaWxkcmVufS8ke2l0ZW0ubm9DaGlsZHJlbn1gO1xyXG4gICAgfVxyXG5cclxuICAgIGlzRWxsaXBzaXNBY3RpdmUoZTogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gZSA/IChlLmNsaWVudFdpZHRoIDwgZS5zY3JvbGxXaWR0aCkgOiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVTZWxlY3RJdGVtKG5vZGU6IFNlbGVjdE9wdGlvbikge1xyXG4gICAgICAgIGNvbnN0IFNlbGVjdE9wdGlvbiA9IHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbmQoeCA9PiAoeC5pZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLmlkLnRvTG93ZXJDYXNlKCkgJiYgeC5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLnBhcmVudElkLnRvTG93ZXJDYXNlKCkpKTtcclxuICAgICAgICBpZiAoU2VsZWN0T3B0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hlY2tlZE5vZGVMaXN0KHtcclxuICAgICAgICAgICAgICAgIGlkOiBTZWxlY3RPcHRpb24uaWQsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBub2RlLml0ZW1OYW1lLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50SWQ6IFNlbGVjdE9wdGlvbi5wYXJlbnRJZCxcclxuICAgICAgICAgICAgICAgIGhhc0NoaWxkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbGV2ZWw6IDAsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gdGhpcy5zZWxlY3RSZWxhdGVkKG5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpc05vZGVTZWxlY3RlZChub2RlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbHRlcih4ID0+ICh4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5vZGUuaWQudG9Mb3dlckNhc2UoKSAmJiB4LnBhcmVudElkLnRvTG93ZXJDYXNlKCkgPT09IG5vZGUucGFyZW50SWQudG9Mb3dlckNhc2UoKSkpLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2hpbGRyZW5PZkZvbGRlcihub2RlOiBUcmVlRmxhdE5vZGUpIHtcclxuICAgICAgICAvLyBpZiAodGhpcy5zcGxpdFZpZXcpIHtcclxuICAgICAgICAvLyBjb25zdCBwYXJlbnRUZXh0cyA9IHRoaXMuZWxlbS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50ZXh0LW5vZGUtcGFyZW50Jyk7XHJcbiAgICAgICAgLy8gW10uZm9yRWFjaC5jYWxsKHBhcmVudFRleHRzLCAoZWwpID0+IHtcclxuICAgICAgICAvLyAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlLWl0ZW0nKTtcclxuICAgICAgICAvLyB9KTtcclxuICAgICAgICAvLyBjb25zdCBpdGVtRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYCNfJHtub2RlLnBhcmVudElkID8gbm9kZS5wYXJlbnRJZCA6ICcnfV8ke25vZGUuaWR9XyR7bm9kZS5sZXZlbH1gKTtcclxuICAgICAgICAvLyBbXS5mb3JFYWNoLmNhbGwoaXRlbUVsZW1lbnQsIChlbCkgPT4ge1xyXG4gICAgICAgIC8vICAgICBlbC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUtaXRlbScpO1xyXG4gICAgICAgIC8vIH0pO1xyXG4gICAgICAgIGxldCBpdGVtID0gbmV3IFNlbGVjdE9wdGlvbigpO1xyXG4gICAgICAgIGl0ZW0uaWQgPSBub2RlLmlkO1xyXG4gICAgICAgIGl0ZW0uaXRlbU5hbWUgPSBub2RlLm5hbWU7XHJcbiAgICAgICAgaXRlbS5sZXZlbFR5cGUgPSBub2RlLmxldmVsVHlwZTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRm9sZGVyID0gbm9kZTtcclxuICAgICAgICB0aGlzLm9uRXhwYW5kRm9sZGVyLmVtaXQoaXRlbSk7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdE5vZGVUcmVlRXZlbnQobm9kZTogVHJlZUZsYXROb2RlKSB7XHJcbiAgICAgICAgbGV0IHBvc2l0aW9uID0gdGhpcy5zZWxlY3RlZE9wdGlvbnMuZmluZEluZGV4KHggPT4geC5pZCA9PT0gbm9kZS5pZCAmJiB4LnBhcmVudElkID09PSBub2RlLnBhcmVudElkKTtcclxuICAgICAgICBpZiAocG9zaXRpb24gPiAtMSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pbmNsdWRlQ2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgIGlmIChub2RlLmV4cGFuZGFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUluY2x1ZGVDaGlsZHJlbihub2RlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IHRoaXMuc2VsZWN0ZWRPcHRpb25zLmZpbmRJbmRleChpdGVtID0+IG5vZGUuaWQgPT09IGl0ZW0uaWQgJiYgbm9kZS5wYXJlbnRJZCA9PT0gaXRlbS5wYXJlbnRJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1JbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnNwbGljZShpdGVtSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0ID0gdGhpcy5jaGVja2VkTm9kZUxpc3QuZmlsdGVyKHggPT4geC5pZCAhPT0gbm9kZS5pZCB8fCB4LnBhcmVudElkICE9PSBub2RlLnBhcmVudElkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmYWN0b3JTZWxlY3RMaXN0KG5vZGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gdGhpcy5zZWxlY3RlZE9wdGlvbnMuZmluZEluZGV4KGl0ZW0gPT4gbm9kZS5pZCA9PT0gaXRlbS5pZCAmJiBub2RlLnBhcmVudElkID09PSBpdGVtLnBhcmVudElkKTtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtSW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnNwbGljZShpdGVtSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QgPSB0aGlzLmNoZWNrZWROb2RlTGlzdC5maWx0ZXIoeCA9PiB4LmlkICE9PSBub2RlLmlkIHx8IHgucGFyZW50SWQgIT09IG5vZGUucGFyZW50SWQpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmluY2x1ZGVDaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuZXhwYW5kYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0SW5jbHVkZUNoaWxkcmVuKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IG5vZGUuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtTmFtZTogbm9kZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbU51bWJlcklkOiBub2RlLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IG5vZGUucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBTZWxlY3RPcHRpb25UeXBlcy5DaGlsZHJlblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZhY3RvclNlbGVjdExpc3Qobm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IG5vZGUuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiBub2RlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1OdW1iZXJJZDogbm9kZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IG5vZGUucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFNlbGVjdE9wdGlvblR5cGVzLlNlbGVjdE9uZVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogbm9kZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtTmFtZTogbm9kZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFNlbGVjdE9wdGlvblR5cGVzLlNlbGVjdE9uZSxcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kZS5wYXJlbnRJZCxcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgbm9TZWxlY3RlZENoaWxkcmVuOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vQ2hpbGRyZW46IDAsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEgPSB0aGlzLm1hcFNlbGVjdE9wdGlvblRvVHJlZU5vZGUodGhpcy5zZWxlY3RlZE9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzZXRWYWx1ZShlKSB7XHJcbiAgICAgICAgdGhpcy5pbmNsdWRlQ2hpbGRyZW4gPSAhIWUuY2hlY2tlZDtcclxuICAgICAgICBpZiAoIXRoaXMuaW5jbHVkZUNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZvckVhY2gobm9kZSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVTZWxlY3RlZE5vZGUobm9kZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZExpc3QgPSB0aGlzLm9yZ2luYWxEaXNhYmxlTGlzdDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbWFwU2VsZWN0T3B0aW9uVG9UcmVlTm9kZShsaXN0OiBTZWxlY3RPcHRpb25bXSk6IFRyZWVGbGF0Tm9kZVtdIHtcclxuICAgICAgICByZXR1cm4gbGlzdC5tYXAoeCA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBpZDogeC5pZCxcclxuICAgICAgICAgICAgICAgIG5hbWU6IHguaXRlbU5hbWUsXHJcbiAgICAgICAgICAgICAgICBsZXZlbDogMCxcclxuICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBoYXNDaGlsZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHBhcmVudElkOiB4LnBhcmVudElkLFxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZmFjdG9yU2VsZWN0TGlzdChub2RlOiBUcmVlRmxhdE5vZGUpIHtcclxuICAgICAgICBsZXQgcGFyZW50O1xyXG4gICAgICAgIGxldCBwYXJlbnRMaXN0OiBTZWxlY3RPcHRpb25bXSA9IFtdO1xyXG4gICAgICAgIHBhcmVudCA9IHRoaXMudHJlZURhdGEuZmluZCh4ID0+IHgucm9vdElkID09PSBub2RlLnBhcmVudElkKTtcclxuICAgICAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgICAgICAgIHBhcmVudExpc3QucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBpZDogcGFyZW50LnJvb3RJZCxcclxuICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiBwYXJlbnQucm9vdE5hbWUsXHJcbiAgICAgICAgICAgICAgICBwYXJlbnRJZDogcGFyZW50LnBhcmVudElkLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogU2VsZWN0T3B0aW9uVHlwZXMuSW5jbHVkZUNoaWxkcmVuXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBwYXJlbnRMaXN0ID0gdGhpcy5nZXRQYXJlbnRMaW5lT2ZOb2RlKHBhcmVudExpc3QsIHBhcmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJlbnRMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRQYXJlbnRMaXN0ID0gcGFyZW50TGlzdC5maWx0ZXIoeCA9PiB0aGlzLnNlbGVjdGVkT3B0aW9uc1xyXG4gICAgICAgICAgICAgICAgLmZpbmRJbmRleChzZWxlY3RlZE5vZGUgPT4geC5pZCA9PT0gc2VsZWN0ZWROb2RlLmlkICYmIHgucGFyZW50SWQgPT09IHNlbGVjdGVkTm9kZS5wYXJlbnRJZCkgPj0gMCk7XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZFBhcmVudExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaGlnaGVzdFNlbGVjdGVkTm9kZSA9IHNlbGVjdGVkUGFyZW50TGlzdFtzZWxlY3RlZFBhcmVudExpc3QubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbWJpbmVOb2RlcyhoaWdoZXN0U2VsZWN0ZWROb2RlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tYmluZU5vZGVzKHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogbm9kZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtTmFtZTogbm9kZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFNlbGVjdE9wdGlvblR5cGVzLkluY2x1ZGVDaGlsZHJlbixcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kZS5wYXJlbnRJZFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jb21iaW5lTm9kZXMoe1xyXG4gICAgICAgICAgICAgICAgaWQ6IG5vZGUuaWQsXHJcbiAgICAgICAgICAgICAgICBpdGVtTmFtZTogbm9kZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogU2VsZWN0T3B0aW9uVHlwZXMuSW5jbHVkZUNoaWxkcmVuLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50SWQ6IG5vZGUucGFyZW50SWRcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29tYmluZU5vZGVzKHJvb3Q6IFNlbGVjdE9wdGlvbikge1xyXG4gICAgICAgIGxldCBjaGlsZHJlbiA9IFtdO1xyXG4gICAgICAgIGNoaWxkcmVuID0gdGhpcy5nZXRBbGxDaGlsZHJlbk5vZGVSZWN1cnNpdmUoY2hpbGRyZW4sIHtcclxuICAgICAgICAgICAgaWQ6IHJvb3QuaWQsXHJcbiAgICAgICAgICAgIG5hbWU6IHJvb3QuaXRlbU5hbWUsXHJcbiAgICAgICAgICAgIHBhcmVudElkOiByb290LnBhcmVudElkLFxyXG4gICAgICAgICAgICBsZXZlbDogMCxcclxuICAgICAgICAgICAgZXhwYW5kYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgaGFzQ2hpbGQ6IHRydWUsXHJcbiAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxldCBzZWxlY3RlZE5vZGVJbmRleCA9IHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbmRJbmRleCh4ID0+IHguaWQgPT09IHJvb3QuaWQgJiYgeC5wYXJlbnRJZCA9PT0gcm9vdC5wYXJlbnRJZCk7XHJcblxyXG4gICAgICAgIGxldCBub2RlTGlzdCA9IFtdO1xyXG4gICAgICAgIGNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbmRJbmRleChub2RlID0+IG5vZGUuaWQgPT09IGNoaWxkLmlkICYmIG5vZGUucGFyZW50SWQgPT09IGNoaWxkLnBhcmVudElkKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0SW5kZXggPSB0aGlzLnNlbGVjdGVkT3B0aW9ucy5maW5kSW5kZXgobm9kZSA9PiBub2RlLmlkID09PSBjaGlsZC5pZCAmJiBub2RlLnBhcmVudElkID09PSBjaGlsZC5wYXJlbnRJZCk7XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RJbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlTGlzdC5wdXNoKGNoaWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChub2RlTGlzdC5sZW5ndGggPiAwIHx8IGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWROb2RlSW5kZXggPCAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogcm9vdC5pZCxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtTmFtZTogcm9vdC5pdGVtTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTZWxlY3RPcHRpb25UeXBlcy5JbmNsdWRlQ2hpbGRyZW4sXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IHJvb3QucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vU2VsZWN0ZWRDaGlsZHJlbjogMCxcclxuICAgICAgICAgICAgICAgICAgICBub0NoaWxkcmVuOiAwXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWROb2RlSW5kZXggPSB0aGlzLmNoZWNrZWROb2RlTGlzdC5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdFtzZWxlY3RlZE5vZGVJbmRleF0uY2hpbGRyZW4gPSBub2RlTGlzdDtcclxuICAgICAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3Rbc2VsZWN0ZWROb2RlSW5kZXhdLm5vQ2hpbGRyZW4gPSBjaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0W3NlbGVjdGVkTm9kZUluZGV4XS5ub1NlbGVjdGVkQ2hpbGRyZW4gPSBub2RlTGlzdC5sZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0W3NlbGVjdGVkTm9kZUluZGV4XS50eXBlID0gY2hpbGRyZW4ubGVuZ3RoID09PSAwID8gU2VsZWN0T3B0aW9uVHlwZXMuU2VsZWN0T25lIDogU2VsZWN0T3B0aW9uVHlwZXMuSW5jbHVkZUNoaWxkcmVuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UGFyZW50TGluZU9mTm9kZShsaXN0UGFyZW50OiBTZWxlY3RPcHRpb25bXSwgbm9kZTogVHJlZU1vZGVsKSB7XHJcbiAgICAgICAgbGV0IHBhcmVudDtcclxuICAgICAgICBwYXJlbnQgPSB0aGlzLnRyZWVEYXRhLmZpbmQoeCA9PiB4LnJvb3RJZCA9PT0gbm9kZS5wYXJlbnRJZCk7XHJcbiAgICAgICAgaWYgKHBhcmVudCkge1xyXG4gICAgICAgICAgICBsaXN0UGFyZW50ID0gWy4uLmxpc3RQYXJlbnQsIHtcclxuICAgICAgICAgICAgICAgIGlkOiBwYXJlbnQucm9vdElkLFxyXG4gICAgICAgICAgICAgICAgaXRlbU5hbWU6IHBhcmVudC5yb290TmFtZSxcclxuICAgICAgICAgICAgICAgIHBhcmVudElkOiBwYXJlbnQucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBTZWxlY3RPcHRpb25UeXBlcy5JbmNsdWRlQ2hpbGRyZW5cclxuICAgICAgICAgICAgfV07XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0UGFyZW50TGluZU9mTm9kZShsaXN0UGFyZW50LCBwYXJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbGlzdFBhcmVudDtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlU2VsZWN0ZWROb2RlKG5vZGU6IFNlbGVjdGVkT3B0aW9uKSB7XHJcbiAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gU2VsZWN0T3B0aW9uVHlwZXMuSW5jbHVkZUNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgIGxldCBjaGlsZHJlbiA9IFtdXHJcbiAgICAgICAgICAgIGNoaWxkcmVuID0gdGhpcy5nZXRBbGxDaGlsZHJlbk5vZGVSZWN1cnNpdmUoY2hpbGRyZW4sIHtcclxuICAgICAgICAgICAgICAgIGlkOiBub2RlLmlkLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogbm9kZS5pdGVtTmFtZSxcclxuICAgICAgICAgICAgICAgIHBhcmVudElkOiBub2RlLnBhcmVudElkLFxyXG4gICAgICAgICAgICAgICAgbGV2ZWw6IDAsXHJcbiAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgaGFzQ2hpbGQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2VcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgbGV0IGRpc2FibGVOb2RlcyA9IFtdXHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5kaXNhYmxlZExpc3QuZmluZEluZGV4KHggPT4geC5pZCA9PT0gbm9kZS5pZCAmJiB4LnBhcmVudElkID09PSBub2RlLnBhcmVudElkKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgZGlzYWJsZU5vZGVzLnB1c2gobm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZGlzYWJsZWRMaXN0LmZpbmRJbmRleCh4ID0+IHguaWQgPT09IGNoaWxkLmlkICYmIHgucGFyZW50SWQgPT09IGNoaWxkLnBhcmVudElkKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlTm9kZXMucHVzaChjaGlsZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRMaXN0ID0gWy4uLnRoaXMuZGlzYWJsZWRMaXN0LCAuLi5kaXNhYmxlTm9kZXNdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBlbmFibGVTZWxlY3RlZE5vZGUobm9kZTogU2VsZWN0T3B0aW9uKSB7XHJcbiAgICAgICAgbGV0IGNoaWxkcmVuID0gW11cclxuICAgICAgICBjaGlsZHJlbiA9IHRoaXMuZ2V0QWxsQ2hpbGRyZW5Ob2RlUmVjdXJzaXZlKGNoaWxkcmVuLCB7XHJcbiAgICAgICAgICAgIGlkOiBub2RlLmlkLFxyXG4gICAgICAgICAgICBuYW1lOiBub2RlLml0ZW1OYW1lLFxyXG4gICAgICAgICAgICBwYXJlbnRJZDogbm9kZS5wYXJlbnRJZCxcclxuICAgICAgICAgICAgbGV2ZWw6IDAsXHJcbiAgICAgICAgICAgIGV4cGFuZGFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIGhhc0NoaWxkOiB0cnVlLFxyXG4gICAgICAgICAgICBkaXNhYmxlZDogZmFsc2VcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICB0aGlzLmRpc2FibGVkTGlzdCA9IHRoaXMuZGlzYWJsZWRMaXN0LmZpbHRlcih4ID0+XHJcbiAgICAgICAgICAgIGNoaWxkcmVuLmZpbHRlcihjaGlsZCA9PlxyXG4gICAgICAgICAgICAgICAgKHguaWQgPT09IGNoaWxkLmlkICYmIHgucGFyZW50SWQgPT09IGNoaWxkLnBhcmVudElkKVxyXG4gICAgICAgICAgICApLmxlbmd0aCA9PT0gMFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZExpc3QgPSB0aGlzLmRpc2FibGVkTGlzdC5maWx0ZXIoeCA9PiAhKHguaWQgPT09IG5vZGUuaWQgJiYgeC5wYXJlbnRJZCA9PT0gbm9kZS5wYXJlbnRJZCkpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==